nfe_reader 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -1
  3. data/lib/helpers/attribute_helper.rb +18 -0
  4. data/lib/helpers/creator_helper.rb +32 -0
  5. data/lib/nfe_reader/authorization.rb +10 -6
  6. data/lib/nfe_reader/carrier.rb +14 -10
  7. data/lib/nfe_reader/collection/duplicate.rb +10 -6
  8. data/lib/nfe_reader/collection.rb +28 -24
  9. data/lib/nfe_reader/customer.rb +56 -52
  10. data/lib/nfe_reader/delivery.rb +18 -14
  11. data/lib/nfe_reader/document.rb +65 -61
  12. data/lib/nfe_reader/export.rb +9 -5
  13. data/lib/nfe_reader/fiscal.rb +31 -27
  14. data/lib/nfe_reader/header.rb +120 -117
  15. data/lib/nfe_reader/information.rb +17 -26
  16. data/lib/nfe_reader/nfe.rb +130 -0
  17. data/lib/nfe_reader/product/armament.rb +20 -16
  18. data/lib/nfe_reader/product/cane.rb +22 -32
  19. data/lib/nfe_reader/product/exportation.rb +17 -13
  20. data/lib/nfe_reader/product/fuel.rb +15 -11
  21. data/lib/nfe_reader/product/importation.rb +44 -40
  22. data/lib/nfe_reader/product/medicament.rb +17 -13
  23. data/lib/nfe_reader/product/vehicle.rb +115 -111
  24. data/lib/nfe_reader/product.rb +67 -76
  25. data/lib/nfe_reader/provider.rb +39 -35
  26. data/lib/nfe_reader/purchase.rb +10 -6
  27. data/lib/nfe_reader/removal.rb +18 -14
  28. data/lib/nfe_reader/taxation/cofins.rb +41 -37
  29. data/lib/nfe_reader/taxation/cofins_st.rb +17 -13
  30. data/lib/nfe_reader/taxation/icms.rb +80 -76
  31. data/lib/nfe_reader/taxation/importation_tax.rb +16 -12
  32. data/lib/nfe_reader/taxation/ipi.rb +37 -33
  33. data/lib/nfe_reader/taxation/issqn.rb +19 -15
  34. data/lib/nfe_reader/taxation/pis.rb +41 -37
  35. data/lib/nfe_reader/taxation/pis_st.rb +18 -14
  36. data/lib/nfe_reader/total.rb +71 -67
  37. data/lib/nfe_reader/transport.rb +87 -83
  38. data/lib/nfe_reader/version.rb +1 -1
  39. data/lib/nfe_reader.rb +3 -130
  40. data/test/helpers/attributte_helper_test.rb +19 -0
  41. data/test/helpers/creator_helper_test.rb +28 -0
  42. data/test/{nokogiri_test.rb → helpers/nokogiri_test.rb} +1 -1
  43. data/test/nfe_reader/authorization_test.rb +2 -2
  44. data/test/nfe_reader/cane_test.rb +2 -2
  45. data/test/nfe_reader/carrier_test.rb +2 -2
  46. data/test/nfe_reader/collection/duplicate_test.rb +2 -2
  47. data/test/nfe_reader/collection_test.rb +3 -3
  48. data/test/nfe_reader/customer_test.rb +3 -3
  49. data/test/nfe_reader/delivery_test.rb +2 -2
  50. data/test/nfe_reader/document_test.rb +2 -2
  51. data/test/nfe_reader/export_test.rb +2 -2
  52. data/test/nfe_reader/fiscal_test.rb +2 -2
  53. data/test/nfe_reader/header_test.rb +2 -2
  54. data/test/nfe_reader/information_test.rb +2 -2
  55. data/test/{nfe_reader_test.rb → nfe_reader/nfe_test.rb} +15 -15
  56. data/test/nfe_reader/product/armament_test.rb +2 -2
  57. data/test/nfe_reader/product/exportation_test.rb +2 -2
  58. data/test/nfe_reader/product/fuel_test.rb +2 -2
  59. data/test/nfe_reader/product/importation_test.rb +27 -2
  60. data/test/nfe_reader/product/medicament_test.rb +2 -2
  61. data/test/nfe_reader/product/vehicle_test.rb +2 -2
  62. data/test/nfe_reader/product_test.rb +6 -6
  63. data/test/nfe_reader/provider_test.rb +3 -3
  64. data/test/nfe_reader/purchase_test.rb +2 -2
  65. data/test/nfe_reader/removal_test.rb +2 -2
  66. data/test/nfe_reader/taxation/cofins_st_test.rb +2 -2
  67. data/test/nfe_reader/taxation/cofins_test.rb +2 -2
  68. data/test/nfe_reader/taxation/icms_test.rb +2 -2
  69. data/test/nfe_reader/taxation/importation_tax_test.rb +2 -2
  70. data/test/nfe_reader/taxation/ipi_test.rb +2 -2
  71. data/test/nfe_reader/taxation/issqn_test.rb +2 -2
  72. data/test/nfe_reader/taxation/pis_st_test.rb +2 -2
  73. data/test/nfe_reader/taxation/pis_test.rb +2 -2
  74. data/test/nfe_reader/total_test.rb +2 -2
  75. data/test/nfe_reader/transport_test.rb +3 -3
  76. metadata +14 -7
  77. /data/lib/{nokogiri_hash.rb → helpers/nokogiri_hash.rb} +0 -0
@@ -1,129 +1,132 @@
1
1
  # encoding: UTF-8
2
2
  module Nfe
3
- # Identificação da Nota Fiscal eletrônica
4
- class Header
5
- attr_reader :state, :city, :sample_number, :operation, :number,
6
- :model, :emission, :emission_kind, :out, :out_time, :serie, :kind,
7
- :environment, :finality, :version, :payment, :process, :digit,
8
- :orientation, :emission_date, :destiny_code, :final_consumer,
9
- :consumer_presence, :contingency_date, :contingency_justification,
10
- :documents
3
+ module Reader
4
+ # Identificação da Nota Fiscal eletrônica
5
+ class Header
6
+ include ::AttributeHelper
11
7
 
12
- # == Fields Values
13
- #
14
- # cUF: 11-Rondônia, 12-Acre, 13-Amazonas, 14-Roraima, 15-Pará, 16-Amapá, 17-Tocantins,
15
- # 21-Maranhão, 22-Piauí, 23-Ceará, 24-Rio Grande do Norte, 25-Paraíba, 26-Pernambuco,
16
- # 27-Alagoas, 28-Sergipe, 29-Bahia, 31-Minas Gerais, 32-Espírito Santo, 33-Rio de Janeiro,
17
- # 35-São Paulo, 41-Paraná, 42-Santa Catarina, 3-Rio Grande do Sul, 50-Mato Grosso do Sul,
18
- # 51-Mato Grosso, 52-Goiás, 53-DistritoFederal
19
- #
20
- # mod: 55 - NF-e, 65 - NFC-e
21
- #
22
- # indPag: 0 - Vista, 1 - Prazo, 2 - Outros
23
- #
24
- # tpNF: 0 - Entrada, 1 - Saida
25
- #
26
- # tpAmb: 1 - Producao, 2 - Homologacao
27
- #
28
- # finNFe: 1 - Normal,
29
- # 2 - Complementar,
30
- # 3 - Ajuste,
31
- # 4 - Devolução/Retorno.
32
- #
33
- # tpEmis: 1 - Normal, 2 - Contingência FS, 3 - Contingência SCAN, 4 - Contingência FS-DA
34
- #
35
- # tpImp: 1 - Retrato,
36
- # 2 - Paisagem,
37
- # 3 - DANFE Simplificado,
38
- # 4 - DANFE NFC-e,
39
- # 5 - DANFE NFC-e em mensagem eletrônica (o envio de
40
- # mensagem eletrônica pode ser feita de forma simultânea
41
- # com a impressão do DANFE; usar o tpImp=5 quando
42
- # esta for a única forma de disponibilização do DANFE).
43
- #
44
- # procEmit: 0 - emissão de NF-e com aplicativo do contribuinte,
45
- # 1 - emissão de NF-e avulsa pelo Fisco,
46
- # 2 - emissão de NF-e avulsa, pelo site,
47
- # 3 - emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco,
48
- #
49
- # idDest: 1 - Operação interna,
50
- # 2 - Operação interestadual,
51
- # 3 - Operação com exterior
52
- #
53
- # indFinal: 0 - Não,
54
- # 1 - Consumidor final
55
- #
56
- # indPres: 0 - Não se aplica (por exemplo, Nota Fiscal complementar
57
- # ou de ajuste);
58
- # 1 - Operação presencial;
59
- # 2 - Operação não presencial, pela Internet;
60
- # 3 - Operação não presencial, Teleatendimento;
61
- # 4 - NFC-e em operação com entrega a domicílio;
62
- # 9 - Operação não presencial, outros.
8
+ attr_reader :state, :city, :sample_number, :operation, :number,
9
+ :model, :emission, :emission_kind, :out, :out_time, :serie, :kind,
10
+ :environment, :finality, :version, :payment, :process, :digit,
11
+ :orientation, :emission_date, :destiny_code, :final_consumer,
12
+ :consumer_presence, :contingency_date, :contingency_justification,
13
+ :documents
63
14
 
64
- def initialize(attrs = {})
65
- # Estado
66
- @state = attrs[:cUF]
67
- # Cidade
68
- @city = attrs[:cMunFG]
69
- # Numero Aleatorio
70
- @sample_number = attrs[:cNF]
71
- # Natureza Operacao
72
- @operation = attrs[:natOp]
73
- # Numero da Nota
74
- @number = attrs[:nNF]
75
- # Modelo
76
- @model = attrs[:mod]
77
- # Data Emissao
78
- @emission = attrs[:dEmi]
79
- # Tipo de Emissao
80
- @emission_kind = attrs[:tpEmis]
81
- # Data de Saida
82
- @out = attrs[:dSaiEnt]
83
- # Hora de Saida
84
- @out_time = attrs[:hSaiEnt]
85
- # Data de Emissao
86
- @emission_date = attrs[:dhEmi]
87
- # Serie
88
- @serie = attrs[:serie]
89
- # Tipo da Nota
90
- @kind = attrs[:tpNF]
91
- # Ambiente
92
- @environment = attrs[:tpAmb]
93
- # Finalidade
94
- @finality = attrs[:finNFe]
95
- # Versao aplicativo do emissor
96
- @version = attrs[:verProc]
97
- # Pagamento
98
- @payment = attrs[:indPag]
99
- # Processo de Emissao
100
- @process = attrs[:procEmi]
101
- # Digito Verificador
102
- @digit = attrs[:cDV]
103
- # Orientação da Pagina
104
- @orientation = attrs[:tpImp]
105
- # Codigo do Destino
106
- @destiny_code = attrs[:idDest]
107
- # Consumidor final
108
- @final_consumer = attrs[:indFinal]
109
- # Indicador de presença do comprador
110
- @consumer_presence = attrs[:indPres]
15
+ # == Fields Values
16
+ #
17
+ # cUF: 11-Rondônia, 12-Acre, 13-Amazonas, 14-Roraima, 15-Pará, 16-Amapá, 17-Tocantins,
18
+ # 21-Maranhão, 22-Piauí, 23-Ceará, 24-Rio Grande do Norte, 25-Paraíba, 26-Pernambuco,
19
+ # 27-Alagoas, 28-Sergipe, 29-Bahia, 31-Minas Gerais, 32-Espírito Santo, 33-Rio de Janeiro,
20
+ # 35-São Paulo, 41-Paraná, 42-Santa Catarina, 3-Rio Grande do Sul, 50-Mato Grosso do Sul,
21
+ # 51-Mato Grosso, 52-Goiás, 53-DistritoFederal
22
+ #
23
+ # mod: 55 - NF-e, 65 - NFC-e
24
+ #
25
+ # indPag: 0 - Vista, 1 - Prazo, 2 - Outros
26
+ #
27
+ # tpNF: 0 - Entrada, 1 - Saida
28
+ #
29
+ # tpAmb: 1 - Producao, 2 - Homologacao
30
+ #
31
+ # finNFe: 1 - Normal,
32
+ # 2 - Complementar,
33
+ # 3 - Ajuste,
34
+ # 4 - Devolução/Retorno.
35
+ #
36
+ # tpEmis: 1 - Normal, 2 - Contingência FS, 3 - Contingência SCAN, 4 - Contingência FS-DA
37
+ #
38
+ # tpImp: 1 - Retrato,
39
+ # 2 - Paisagem,
40
+ # 3 - DANFE Simplificado,
41
+ # 4 - DANFE NFC-e,
42
+ # 5 - DANFE NFC-e em mensagem eletrônica (o envio de
43
+ # mensagem eletrônica pode ser feita de forma simultânea
44
+ # com a impressão do DANFE; usar o tpImp=5 quando
45
+ # esta for a única forma de disponibilização do DANFE).
46
+ #
47
+ # procEmit: 0 - emissão de NF-e com aplicativo do contribuinte,
48
+ # 1 - emissão de NF-e avulsa pelo Fisco,
49
+ # 2 - emissão de NF-e avulsa, pelo site,
50
+ # 3 - emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco,
51
+ #
52
+ # idDest: 1 - Operação interna,
53
+ # 2 - Operação interestadual,
54
+ # 3 - Operação com exterior
55
+ #
56
+ # indFinal: 0 - Não,
57
+ # 1 - Consumidor final
58
+ #
59
+ # indPres: 0 - Não se aplica (por exemplo, Nota Fiscal complementar
60
+ # ou de ajuste);
61
+ # 1 - Operação presencial;
62
+ # 2 - Operação não presencial, pela Internet;
63
+ # 3 - Operação não presencial, Teleatendimento;
64
+ # 4 - NFC-e em operação com entrega a domicílio;
65
+ # 9 - Operação não presencial, outros.
111
66
 
112
- # Contigencia
113
- @contingency_date = attrs[:dhCont]
114
- @contingency_justification = attrs[:xJust]
67
+ def initialize(attrs = {})
68
+ # Estado
69
+ @state = attrs[:cUF]
70
+ # Cidade
71
+ @city = attrs[:cMunFG]
72
+ # Numero Aleatorio
73
+ @sample_number = attrs[:cNF]
74
+ # Natureza Operacao
75
+ @operation = attrs[:natOp]
76
+ # Numero da Nota
77
+ @number = attrs[:nNF]
78
+ # Modelo
79
+ @model = attrs[:mod]
80
+ # Data Emissao
81
+ @emission = attrs[:dEmi]
82
+ # Tipo de Emissao
83
+ @emission_kind = attrs[:tpEmis]
84
+ # Data de Saida
85
+ @out = attrs[:dSaiEnt]
86
+ # Hora de Saida
87
+ @out_time = attrs[:hSaiEnt]
88
+ # Data de Emissao
89
+ @emission_date = attrs[:dhEmi]
90
+ # Serie
91
+ @serie = attrs[:serie]
92
+ # Tipo da Nota
93
+ @kind = attrs[:tpNF]
94
+ # Ambiente
95
+ @environment = attrs[:tpAmb]
96
+ # Finalidade
97
+ @finality = attrs[:finNFe]
98
+ # Versao aplicativo do emissor
99
+ @version = attrs[:verProc]
100
+ # Pagamento
101
+ @payment = attrs[:indPag]
102
+ # Processo de Emissao
103
+ @process = attrs[:procEmi]
104
+ # Digito Verificador
105
+ @digit = attrs[:cDV]
106
+ # Orientação da Pagina
107
+ @orientation = attrs[:tpImp]
108
+ # Codigo do Destino
109
+ @destiny_code = attrs[:idDest]
110
+ # Consumidor final
111
+ @final_consumer = attrs[:indFinal]
112
+ # Indicador de presença do comprador
113
+ @consumer_presence = attrs[:indPres]
115
114
 
116
- # Documento Fiscal Referenciado
117
- @documents = []
115
+ # Contigencia
116
+ @contingency_date = attrs[:dhCont]
117
+ @contingency_justification = attrs[:xJust]
118
118
 
119
- if attrs[:NFref].is_a? Array
120
- attrs[:NFref].each do |document|
121
- @documents << Nfe::Document.new(document)
119
+ # Documento Fiscal Referenciado
120
+ @documents = []
121
+
122
+ if attrs[:NFref].is_a? Array
123
+ attrs[:NFref].each do |document|
124
+ @documents << Document.new(document)
125
+ end
126
+ elsif attrs[:NFref].is_a? Hash
127
+ @documents << Document.new(attrs[:NFref])
122
128
  end
123
- elsif attrs[:NFref].is_a? Hash
124
- @documents << Nfe::Document.new(attrs[:NFref])
125
129
  end
126
-
127
130
  end
128
131
  end
129
132
  end
@@ -1,38 +1,29 @@
1
1
  # encoding: UTF-8
2
2
  module Nfe
3
- class Information
4
- attr_reader :information, :information_taxpayer, :taxpayer_messages, :messages,
5
- :references
3
+ module Reader
4
+ class Information
5
+ include ::AttributeHelper
6
+ include ::CreatorHelper
6
7
 
7
- def initialize(attrs = {})
8
- @information = attrs[:infAdFisco]
9
- @information_taxpayer = attrs[:infCpl]
8
+ attr_reader :information, :information_taxpayer, :taxpayer_messages, :messages,
9
+ :references
10
10
 
11
- if attrs[:procRef]
12
- @references = to_array(attrs[:procRef])
13
- end
14
-
15
- if attrs[:obsCont]
16
- @taxpayer_messages = to_array(attrs[:obsCont])
17
- end
11
+ def initialize(attrs = {})
12
+ @information = attrs[:infAdFisco]
13
+ @information_taxpayer = attrs[:infCpl]
18
14
 
19
- if attrs[:obsFisco]
20
- @messages = to_array(attrs[:obsFisco])
21
- end
22
- end
15
+ if attrs[:procRef]
16
+ @references = to_array(attrs[:procRef])
17
+ end
23
18
 
24
- def to_array(attrs = {})
25
- array = []
19
+ if attrs[:obsCont]
20
+ @taxpayer_messages = to_array(attrs[:obsCont])
21
+ end
26
22
 
27
- if attrs.is_a? Array
28
- attrs.each do |hash|
29
- array << hash.map { |key, value| value }
23
+ if attrs[:obsFisco]
24
+ @messages = to_array(attrs[:obsFisco])
30
25
  end
31
- else
32
- array << attrs.map { |key, value| value }
33
26
  end
34
-
35
- array
36
27
  end
37
28
  end
38
29
  end
@@ -0,0 +1,130 @@
1
+ module Nfe
2
+ module Reader
3
+ class Nfe
4
+ include ::AttributeHelper
5
+
6
+ attr_reader :version, :number, :signature, :client, :information,
7
+ :header, :provider, :customer, :products, :collection, :transport,
8
+ :purchase, :cane, :export, :delivery, :removal,:enviroment,
9
+ :version_app, :key, :date, :protocol, :digest, :status, :description,
10
+ :total, :authorizations, :error, :trace, :fiscal
11
+
12
+ def initialize(file)
13
+
14
+ xml = file.is_a?(Nokogiri::XML::Document) ? file : Nokogiri::XML(file)
15
+ xml = xml.to_hash
16
+
17
+ # Versao da NFe
18
+ @version = xml[:nfeProc][:versao]
19
+ # Assinatura
20
+ @signature = xml[:nfeProc][:NFe][:Signature]
21
+
22
+ # Protocolo
23
+ if xml[:nfeProc][:protNFe]
24
+ protocol = xml[:nfeProc][:protNFe][:infProt]
25
+
26
+ @enviroment = protocol[:tpAmb]
27
+ @version_app = protocol[:verAplic]
28
+ @key = protocol[:chNFe]
29
+ @date = protocol[:dhRecbto]
30
+ @protocol = protocol[:nProt]
31
+ @digest = protocol[:digVal]
32
+ @status = protocol[:cStat]
33
+ @description = protocol[:xMotivo]
34
+ end
35
+
36
+ xml = xml[:nfeProc][:NFe][:infNFe]
37
+
38
+ # Numero da Nfe
39
+ @number = xml[:Id]
40
+
41
+ # Identificação da Nota Fiscal eletrônica
42
+ @header = Header.new(xml[:ide])
43
+
44
+ # Identificação do Emitente da Nota Fiscal eletrônica
45
+ @provider = Provider.new(xml[:emit])
46
+
47
+ # Identificação do Fisco Emitente da NF-e
48
+ if xml[:avulsa]
49
+ @fiscal = Fiscal.new(xml[:avulsa])
50
+ end
51
+
52
+ # Identificação do Destinatário da Nota Fiscal eletrônica
53
+ @customer = Customer.new(xml[:dest])
54
+
55
+ # Informacoes Adicional
56
+ if xml[:infAdic]
57
+ @information = Information.new(xml[:infAdic])
58
+ end
59
+
60
+ # Detalhamento de Produtos e Serviços da NF-e
61
+ @products = []
62
+ if xml[:det].is_a? Array
63
+ xml[:det].each do |product|
64
+ @products << Product.new(product)
65
+ end
66
+ else
67
+ @products << Product.new(xml[:det])
68
+ end
69
+
70
+ # Totalizadores
71
+ @total = Total.new(xml[:total])
72
+
73
+ # Informacao de Pagamento
74
+ if xml[:cobr]
75
+ @collection = Collection.new(xml[:cobr])
76
+ end
77
+
78
+ # Transporte
79
+ if xml[:transp]
80
+ @transport = Transport.new(xml[:transp])
81
+ end
82
+
83
+ # Identificação do Local de Entrega
84
+ if xml[:retirada]
85
+ @removal = Removal.new(xml[:retirada])
86
+ end
87
+
88
+ # Identificação do Local de Retirada
89
+ if xml[:entrega]
90
+ @delivery = Delivery.new(xml[:entrega])
91
+ end
92
+
93
+ # Autorização para obter XML
94
+ @authorizations = []
95
+ if xml[:autXML].is_a? Array
96
+ xml[:autXML].each do |product|
97
+ @authorizations << Authorization.new(product)
98
+ end
99
+ elsif xml[:autXML].is_a? Hash
100
+ @authorizations << Authorization.new(xml[:autXML])
101
+ end
102
+
103
+ # Informacoes de Comercio Exterior
104
+ if xml[:exporta]
105
+ @export = Export.new(xml[:exporta])
106
+ end
107
+
108
+ # Informacoes de Compra
109
+ if xml[:compra]
110
+ @purchase = Purchase.new(xml[:compra])
111
+ end
112
+
113
+ # Cana de Acucar
114
+ if xml[:cana]
115
+ @cane = Cane.new(xml[:cana])
116
+ end
117
+
118
+ rescue => exception
119
+ @error = exception
120
+ @trace = exception.backtrace
121
+ ensure
122
+ file.close if file.respond_to? :close
123
+ end
124
+
125
+ def error?
126
+ !error.nil?
127
+ end
128
+ end
129
+ end
130
+ end
@@ -1,22 +1,26 @@
1
1
  # encoding: UTF-8
2
2
  module Nfe
3
- class Armament
4
- attr_reader :kind, :serie, :barrel, :description
3
+ module Reader
4
+ class Armament
5
+ include ::AttributeHelper
5
6
 
6
- # Fields Values
7
- #
8
- # tpArma : 0 - Uso permitido;
9
- # 1 - Uso restrito;
10
- #
11
- def initialize(attrs = {})
12
- # Tipo de Arma
13
- @kind = attrs[:tpArma]
14
- # Serie
15
- @serie = attrs[:nSerie]
16
- # Cano
17
- @barrel = attrs[:nCano]
18
- # Descricao
19
- @description = attrs[:descr]
7
+ attr_reader :kind, :serie, :barrel, :description
8
+
9
+ # Fields Values
10
+ #
11
+ # tpArma : 0 - Uso permitido;
12
+ # 1 - Uso restrito;
13
+ #
14
+ def initialize(attrs = {})
15
+ # Tipo de Arma
16
+ @kind = attrs[:tpArma]
17
+ # Serie
18
+ @serie = attrs[:nSerie]
19
+ # Cano
20
+ @barrel = attrs[:nCano]
21
+ # Descricao
22
+ @description = attrs[:descr]
23
+ end
20
24
  end
21
25
  end
22
26
  end
@@ -1,42 +1,32 @@
1
1
  module Nfe
2
- class Cane
3
- attr_reader :harvest, :month, :month_amount, :previous_amount, :amount,
4
- :value, :deduction_value, :net_value, :days, :deductions
2
+ module Reader
3
+ class Cane
4
+ include ::AttributeHelper
5
+ include ::CreatorHelper
5
6
 
6
- def initialize(attrs = {})
7
- @harvest = attrs[:safra]
8
- @month = attrs[:ref]
9
- @month_amount = attrs[:qTotMes]
10
- @previous_amount = attrs[:qTotAnt]
11
- @amount = attrs[:qTotGer]
12
- @value = attrs[:vFor]
13
- @deduction_value = attrs[:vTotDed]
14
- @net_value = attrs[:vLiqFor]
7
+ attr_reader :harvest, :month, :month_amount, :previous_amount, :amount,
8
+ :value, :deduction_value, :net_value, :days, :deductions
15
9
 
16
- @days = []
17
-
18
- if attrs[:forDia]
19
- @days = to_array(attrs[:forDia])
20
- end
21
-
22
- if attrs[:deduc]
23
- @deductions = to_array(attrs[:deduc])
24
- end
25
- end
10
+ def initialize(attrs = {})
11
+ @harvest = attrs[:safra]
12
+ @month = attrs[:ref]
13
+ @month_amount = attrs[:qTotMes]
14
+ @previous_amount = attrs[:qTotAnt]
15
+ @amount = attrs[:qTotGer]
16
+ @value = attrs[:vFor]
17
+ @deduction_value = attrs[:vTotDed]
18
+ @net_value = attrs[:vLiqFor]
26
19
 
27
- def to_array(attrs = {})
28
- array = []
20
+ @days = []
21
+
22
+ if attrs[:forDia]
23
+ @days = to_array(attrs[:forDia])
24
+ end
29
25
 
30
- if attrs.is_a? Array
31
- attrs.each do |hash|
32
- array << hash.map { |key, value| value }
26
+ if attrs[:deduc]
27
+ @deductions = to_array(attrs[:deduc])
33
28
  end
34
- else
35
- array << attrs.map { |key, value| value }
36
29
  end
37
-
38
- array
39
30
  end
40
-
41
31
  end
42
32
  end
@@ -1,19 +1,23 @@
1
1
  # encoding: UTF-8
2
2
  module Nfe
3
- class Exportation
4
- attr_reader :drawnback, :number, :key, :amount
3
+ module Reader
4
+ class Exportation
5
+ include ::AttributeHelper
5
6
 
6
- def initialize(attrs = {})
7
- # Número do ato concessório de Drawback
8
- @drawnback = attrs[:nDraw]
9
-
10
- if attrs[:exportInd]
11
- # Número do Registro de Exportação
12
- @number = attrs[:exportInd][:nRE]
13
- # Chave de Acesso da NF-e recebida para exportação
14
- @key = attrs[:exportInd][:chNFe]
15
- # Quantidade do item realmente exportado
16
- @amount= attrs[:exportInd][:qExport]
7
+ attr_reader :drawnback, :number, :key, :amount
8
+
9
+ def initialize(attrs = {})
10
+ # Número do ato concessório de Drawback
11
+ @drawnback = attrs[:nDraw]
12
+
13
+ if attrs[:exportInd]
14
+ # Número do Registro de Exportação
15
+ @number = attrs[:exportInd][:nRE]
16
+ # Chave de Acesso da NF-e recebida para exportação
17
+ @key = attrs[:exportInd][:chNFe]
18
+ # Quantidade do item realmente exportado
19
+ @amount= attrs[:exportInd][:qExport]
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -1,17 +1,21 @@
1
1
  # encoding: UTF-8
2
2
  module Nfe
3
- class Fuel
4
- attr_reader :anp, :codif, :amount, :cide_base, :cide_aliquot, :cide_value
3
+ module Reader
4
+ class Fuel
5
+ include ::AttributeHelper
5
6
 
6
- def initialize(attrs = {})
7
- @anp = attrs[:cProdANP]
8
- @codif = attrs[:CODIF]
9
- @amount = attrs[:qTemp]
10
-
11
- if attrs[:CIDE]
12
- @cide_base = attrs[:CIDE][:qBCprod]
13
- @cide_aliquot = attrs[:CIDE][:vAliqProd]
14
- @cide_value = attrs[:CIDE][:vCIDE]
7
+ attr_reader :anp, :codif, :amount, :cide_base, :cide_aliquot, :cide_value
8
+
9
+ def initialize(attrs = {})
10
+ @anp = attrs[:cProdANP]
11
+ @codif = attrs[:CODIF]
12
+ @amount = attrs[:qTemp]
13
+
14
+ if attrs[:CIDE]
15
+ @cide_base = attrs[:CIDE][:qBCprod]
16
+ @cide_aliquot = attrs[:CIDE][:vAliqProd]
17
+ @cide_value = attrs[:CIDE][:vCIDE]
18
+ end
15
19
  end
16
20
  end
17
21
  end