nfe_reader 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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