nfe_reader 1.0.1

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 (80) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +38 -0
  6. data/Rakefile +13 -0
  7. data/lib/nfe_reader/authorization.rb +12 -0
  8. data/lib/nfe_reader/carrier.rb +16 -0
  9. data/lib/nfe_reader/collection/duplicate.rb +12 -0
  10. data/lib/nfe_reader/collection.rb +34 -0
  11. data/lib/nfe_reader/customer.rb +62 -0
  12. data/lib/nfe_reader/delivery.rb +20 -0
  13. data/lib/nfe_reader/document.rb +73 -0
  14. data/lib/nfe_reader/export.rb +12 -0
  15. data/lib/nfe_reader/fiscal.rb +33 -0
  16. data/lib/nfe_reader/header.rb +129 -0
  17. data/lib/nfe_reader/information.rb +38 -0
  18. data/lib/nfe_reader/product/armament.rb +22 -0
  19. data/lib/nfe_reader/product/cane.rb +42 -0
  20. data/lib/nfe_reader/product/exportation.rb +20 -0
  21. data/lib/nfe_reader/product/fuel.rb +18 -0
  22. data/lib/nfe_reader/product/importation.rb +49 -0
  23. data/lib/nfe_reader/product/medicament.rb +19 -0
  24. data/lib/nfe_reader/product/vehicle.rb +117 -0
  25. data/lib/nfe_reader/product.rb +90 -0
  26. data/lib/nfe_reader/provider.rb +43 -0
  27. data/lib/nfe_reader/purchase.rb +14 -0
  28. data/lib/nfe_reader/removal.rb +20 -0
  29. data/lib/nfe_reader/taxation/cofins.rb +43 -0
  30. data/lib/nfe_reader/taxation/cofins_st.rb +19 -0
  31. data/lib/nfe_reader/taxation/icms.rb +86 -0
  32. data/lib/nfe_reader/taxation/importation_tax.rb +17 -0
  33. data/lib/nfe_reader/taxation/ipi.rb +41 -0
  34. data/lib/nfe_reader/taxation/issqn.rb +22 -0
  35. data/lib/nfe_reader/taxation/pis.rb +42 -0
  36. data/lib/nfe_reader/taxation/pis_st.rb +19 -0
  37. data/lib/nfe_reader/total.rb +76 -0
  38. data/lib/nfe_reader/transport.rb +97 -0
  39. data/lib/nfe_reader/version.rb +5 -0
  40. data/lib/nfe_reader.rb +129 -0
  41. data/lib/nokogiri_hash.rb +60 -0
  42. data/nfe-reader.gemspec +24 -0
  43. data/test/files/sample-nfe.xml +234 -0
  44. data/test/files/sample2-nfe.xml +192 -0
  45. data/test/nfe_reader/authorization_test.rb +22 -0
  46. data/test/nfe_reader/cane_test.rb +71 -0
  47. data/test/nfe_reader/carrier_test.rb +46 -0
  48. data/test/nfe_reader/collection/duplicate_test.rb +27 -0
  49. data/test/nfe_reader/collection_test.rb +78 -0
  50. data/test/nfe_reader/customer_test.rb +133 -0
  51. data/test/nfe_reader/delivery_test.rb +57 -0
  52. data/test/nfe_reader/document_test.rb +113 -0
  53. data/test/nfe_reader/export_test.rb +22 -0
  54. data/test/nfe_reader/fiscal_test.rb +67 -0
  55. data/test/nfe_reader/header_test.rb +135 -0
  56. data/test/nfe_reader/information_test.rb +37 -0
  57. data/test/nfe_reader/product/armament_test.rb +32 -0
  58. data/test/nfe_reader/product/exportation_test.rb +34 -0
  59. data/test/nfe_reader/product/fuel_test.rb +44 -0
  60. data/test/nfe_reader/product/importation_test.rb +64 -0
  61. data/test/nfe_reader/product/medicament_test.rb +37 -0
  62. data/test/nfe_reader/product/vehicle_test.rb +133 -0
  63. data/test/nfe_reader/product_test.rb +125 -0
  64. data/test/nfe_reader/provider_test.rb +155 -0
  65. data/test/nfe_reader/purchase_test.rb +27 -0
  66. data/test/nfe_reader/removal_test.rb +57 -0
  67. data/test/nfe_reader/taxation/cofins_st_test.rb +37 -0
  68. data/test/nfe_reader/taxation/cofins_test.rb +42 -0
  69. data/test/nfe_reader/taxation/icms_test.rb +122 -0
  70. data/test/nfe_reader/taxation/importation_tax_test.rb +32 -0
  71. data/test/nfe_reader/taxation/ipi_test.rb +78 -0
  72. data/test/nfe_reader/taxation/issqn_test.rb +42 -0
  73. data/test/nfe_reader/taxation/pis_st_test.rb +37 -0
  74. data/test/nfe_reader/taxation/pis_test.rb +42 -0
  75. data/test/nfe_reader/total_test.rb +148 -0
  76. data/test/nfe_reader/transport_test.rb +172 -0
  77. data/test/nfe_reader_test.rb +125 -0
  78. data/test/nokogiri_test.rb +27 -0
  79. data/test/test_helper.rb +13 -0
  80. metadata +201 -0
@@ -0,0 +1,49 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ # Declaração de Importação
4
+ class Importation
5
+ attr_reader :number, :date, :local, :state, :customs_clearance, :exporter,
6
+ :addition_number, :addition_sequence, :manufacturer, :addition_descount,
7
+ :drawn
8
+
9
+ def initialize(attrs = {})
10
+ # Número do Documento de Importação
11
+ @number = attrs[:nDI]
12
+ # Data de Registro do documento
13
+ @date = attrs[:dDI]
14
+ # Local de desembaraço
15
+ @local = attrs[:xLocDesemb]
16
+ # Sigla da UF onde ocorreu o Desembaraço Aduaneiro
17
+ @state = attrs[:UFDesemb]
18
+ # Data do Desembaraço Aduaneiro
19
+ @customs_clearance = attrs[:dDesemb]
20
+ # Código do Exportador
21
+ @exporter = attrs[:cExportador]
22
+
23
+ # Via de transporte internacional
24
+ @transport = attrs[:tpViaTransp]
25
+ # Valor da AFRMM - Adicional ao Frete para Renovação da Marinha Mercante
26
+ @afrmm = attrs[:vAFRMM]
27
+ # Forma de importação
28
+ @intermediate_kind = attrs[:tpIntermedio]
29
+ # CNPJ do adquirente
30
+ @cnpj = attrs[:CNPJ]
31
+ # Sigla da UF
32
+ @uf_customer = attrs[:UFTerceiro]
33
+
34
+ # Adições
35
+ if attrs[:adi]
36
+ # Numero da Adição
37
+ @addition_number = attrs[:adi][:nAdicaonSeqAdic]
38
+ # Numero sequencial do item
39
+ @addition_sequence = attrs[:adi][:nSeqAdic]
40
+ # Código do fabricante estrangeiro
41
+ @manufacturer = attrs[:adi][:cFabricante]
42
+ # Valor do desconto do item
43
+ @addition_descount = attrs[:adi][:vDescDI]
44
+ # Drawback
45
+ @drawn = attrs[:adi][:nDraw]
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Medicament
4
+ attr_reader :lot_number, :lot_amount, :fabrication, :validity, :ceiling_price
5
+
6
+ def initialize(attrs = {})
7
+ # Numero de Lote
8
+ @lot_number = attrs[:nLote]
9
+ # Quantidade de Lotes
10
+ @lot_amount = attrs[:qLote]
11
+ # Data de Fabricação
12
+ @fabrication = attrs[:dFab]
13
+ # Data de Validade
14
+ @validity = attrs[:dVal]
15
+ # Preço maximo venda para Consumidor Final
16
+ @ceiling_price = attrs[:vPMC]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,117 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Vehicle
4
+ attr_reader :operation, :chassi, :color, :color_name, :engine_power,
5
+ :engine_capacities, :weight_net, :weight_gross, :serie, :fuel_kind,
6
+ :engine_number, :cmt, :wheelbase, :year, :fabrication_year,
7
+ :paint_kind, :kind, :vehicle_kind, :vin, :condiction, :model,
8
+ :color_code, :capacity, :restriction
9
+
10
+ # Fields Values
11
+ #
12
+ # pOp: 1 - Venda concessionária,
13
+ # 2 - Faturamento direto para consumidor final
14
+ # 3 - Venda direta para grandes consumidores (frotista, governo, ...)
15
+ # 0 - Outros
16
+ #
17
+ # tpComb: 01-Álcool
18
+ # 02-Gasolina
19
+ # 03-Diesel
20
+ # (...) - Tabela Renavam 2.0
21
+ #
22
+ # tpVeic: Utilizar Tabela RENAVAM
23
+ # 06-AUTOMÓVEL
24
+ # 14-CAMINHÃO
25
+ # 13-CAMINHONETA
26
+ # ...
27
+ #
28
+ # espVeic: Utilizar Tabela RENAVAM
29
+ # 1 - PASSAGEIRO
30
+ # 2 - CARGA
31
+ # 3 - MISTO
32
+ # 4 - CORRIDA
33
+ # 5 - TRAÇÃO
34
+ # 6 - ESPECIAL
35
+ #
36
+ # VIN: R - Remarcado
37
+ # N - Normal
38
+ #
39
+ # condVeic: 1 - Acabado;
40
+ # 2 - Inacabado;
41
+ # 3 - Semi-acabado
42
+ #
43
+ # cCorDEN: 01 - AMARELO
44
+ # 02 - AZUL
45
+ # 03 - BEGE
46
+ # 04 - BRANCA
47
+ # 05 - CINZA
48
+ # 06 - DOURADA
49
+ # 07 - GRENA
50
+ # 08 - LARANJA
51
+ # 09 - MARROM
52
+ # 10 - PRATA
53
+ # 11 - PRETA
54
+ # 12 - ROSA
55
+ # 13 - ROXA
56
+ # 14 - VERDE
57
+ # 15 - VERMELHA
58
+ # 16 - FANTASIA
59
+ #
60
+ # tpRest: 0 - Não há;
61
+ # 1 - Alienação Fiduciária;
62
+ # 2 - Arrendamento Mercantil;
63
+ # 3 - Reserva de Domínio;
64
+ # 4 - Penhor de Veículos;
65
+ #
66
+ def initialize(attrs = {})
67
+ # Tipo da operação
68
+ @operation = attrs[:pOp]
69
+ # Numero do Chassi
70
+ @chassi = attrs[:chassi]
71
+ # Cor do Fabricante
72
+ @color = attrs[:cCor]
73
+ # Nome da Cor do Fabricante
74
+ @color_name = attrs[:xCor]
75
+ # Potencia do Motor em CV
76
+ @engine_power = attrs[:pot]
77
+ # Potencia do Motor em CC
78
+ @engine_capacities = attrs[:cilin]
79
+ # Peso Liquido
80
+ @weight_net = attrs[:pesoL]
81
+ # Peso Bruto
82
+ @weight_gross = attrs[:pesoB]
83
+ # Numero serie
84
+ @serie = attrs[:nSerie]
85
+ # Tipo de Combustivel
86
+ @fuel_kind = attrs[:tpComb]
87
+ # Numeracao do Motor
88
+ @engine_number = attrs[:nMotor]
89
+ # CMT: Capacidade Maxima de Tração
90
+ @cmt = attrs[:CMT]
91
+ # Distancia entre os Eixos
92
+ @wheelbase = attrs[:dist]
93
+ # Ano do Modelo
94
+ @year = attrs[:anoMod]
95
+ # Ano de Fabricacao
96
+ @fabrication_year = attrs[:anoFab]
97
+ # Tipo de Pintura
98
+ @paint_kind = attrs[:tpPint]
99
+ # Tipo de Veiculo
100
+ @kind = attrs[:tpVeic]
101
+ # Especie do veiculo
102
+ @vehicle_kind = attrs[:espVeic]
103
+ # Condição do VIN
104
+ @vin = attrs[:VIN]
105
+ # Condições do Veiculo
106
+ @condiction = attrs[:condVeic]
107
+ # Modelo
108
+ @model = attrs[:cMod]
109
+ # Codigo da Cor
110
+ @color_code = attrs[:cCorDEN]
111
+ # Capacidade
112
+ @capacity = attrs[:lota]
113
+ # Restrição
114
+ @restriction = attrs[:tpRest]
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,90 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ # Detalhamento de Produtos e Serviços da NF-e
4
+ class Product
5
+ attr_reader :number, :product_code, :product, :ean, :ncm, :cfop,
6
+ :unit_sale, :value_sale, :amount_sale, :total, :gtin, :unit,
7
+ :amount, :value, :kind, :ipi_exception, :freight, :insurance,
8
+ :discount, :other_value, :importation, :icms, :ipi, :pis,
9
+ :importation_tax, :exportation, :demand_number, :demand_item,
10
+ :armament, :fuel
11
+
12
+ # == Fields Values
13
+ #
14
+ # indTot: 0 - o valor do item (vProd) compõe o valor total da NF-e (vProd)
15
+ # 1 - o valor do item (vProd) não compõe o valor total da NF-e (vProd) (v2.0)
16
+ #
17
+ def initialize(attrs = {})
18
+ @number = attrs[:nItem]
19
+
20
+ if attrs[:prod]
21
+ @product_code = attrs[:prod][:cProd]
22
+ @product = attrs[:prod][:xProd]
23
+ @ean = attrs[:prod][:cEAN]
24
+ @ncm = attrs[:prod][:NCM]
25
+
26
+ # Sale
27
+ @cfop = attrs[:prod][:CFOP]
28
+ @unit_sale = attrs[:prod][:uCom]
29
+ @amount_sale = attrs[:prod][:qCom]
30
+ @value_sale = attrs[:prod][:vUnCom]
31
+ @total = attrs[:prod][:vProd]
32
+
33
+ # Numero do Pedido de Compra
34
+ @demand_number = attrs[:prod][:xPed]
35
+ # Item do Pedido de Compra
36
+ @demand_item = attrs[:prod][:nItemPed]
37
+
38
+ # GTIN (Global Trade ItemNumber)
39
+ @gtin = attrs[:prod][:cEANTrib]
40
+
41
+ @unit = attrs[:prod][:uTrib]
42
+ @amount = attrs[:prod][:qTrib]
43
+ @value = attrs[:prod][:vUnTrib]
44
+ @kind = attrs[:prod][:indTot]
45
+ @ipi_exception = attrs[:prod][:EXTIPI]
46
+ @freight = attrs[:prod][:vFrete]
47
+ @insurance = attrs[:prod][:vSeg]
48
+ @discount = attrs[:prod][:vDesc]
49
+ @other_value = attrs[:prod][:vOutro]
50
+
51
+ @importation = create_resource(Nfe::Importation, attrs[:prod][:DI])
52
+ end
53
+
54
+ @armament = create_resources(Nfe::Armament, attrs[:arma]) if attrs[:arma]
55
+ @medicament = create_resources(Nfe::Medicament, attrs[:med]) if attrs[:med]
56
+ @fuel = Nfe::Fuel.new(attrs[:comb]) if attrs[:comb]
57
+ @vehicle = Nfe::Vehicle.new(attrs[:veicProd]) if attrs[:veicProd]
58
+
59
+ @exportation = create_resources(Nfe::Exportation, attrs[:detExport])
60
+
61
+ if attrs[:imposto]
62
+ @icms = create_resources(Nfe::Icms, attrs[:imposto][:ICMS])
63
+ @cofins = create_resources(Nfe::Cofins, attrs[:imposto][:COFINS])
64
+ @pis = create_resources(Nfe::Pis, attrs[:imposto][:PIS])
65
+ @importation_tax = create_resource(Nfe::ImportationTax, attrs[:imposto][:II])
66
+ @ipi = create_resource(Nfe::Ipi, attrs[:imposto][:IPI])
67
+ @pis_st = create_resource(Nfe::PisSt, attrs[:imposto][:PISST])
68
+ @cofins_st = create_resource(Nfe::CofinsSt, attrs[:imposto][:COFINSST])
69
+ @issqn = create_resource(Nfe::Issqn, attrs[:imposto][:ISSQN])
70
+ end
71
+ end
72
+
73
+ def create_resource(klass, attrs = {})
74
+ return unless attrs
75
+ klass.new(attrs)
76
+ end
77
+
78
+ def create_resources(klass, attrs = {})
79
+ resources = []
80
+
81
+ return resources unless attrs
82
+
83
+ attrs.each do |a|
84
+ resources << klass.new(a.last)
85
+ end
86
+
87
+ resources
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ # Identificação do Emitente da Nota Fiscal eletrônica
4
+ class Provider
5
+ attr_reader :cnpj, :cpf, :name, :phone, :state_registration, :state_registration_st,
6
+ :city_registration, :regime, :cnae, :address, :number, :complement, :neighborhood,
7
+ :city_code, :city, :zip_code, :country_code, :country, :fantasy, :state
8
+
9
+ # == Fields Values
10
+ #
11
+ # CRT: 1 - Simples Nacional,
12
+ # 2 - Simples Nacional – excesso de sublimite de receita bruta,
13
+ # 3 - Regime Normal
14
+ #
15
+ def initialize(attrs = {})
16
+ # Provider Info
17
+ @cnpj = attrs[:CNPJ]
18
+ @cpf = attrs[:CPF]
19
+ @name = attrs[:xNome]
20
+ @fantasy = attrs[:xFant]
21
+ @state_registration = attrs[:IE]
22
+ @state_registration_st = attrs[:IEST]
23
+ @city_registration = attrs[:IM]
24
+ @regime = attrs[:CRT]
25
+ @cnae = attrs[:CNAE]
26
+
27
+ # Address
28
+ if attrs[:enderEmit]
29
+ @phone = attrs[:enderEmit][:fone]
30
+ @address = attrs[:enderEmit][:xLgr]
31
+ @number = attrs[:enderEmit][:nro]
32
+ @complement = attrs[:enderEmit][:xCpl]
33
+ @neighborhood = attrs[:enderEmit][:xBairro]
34
+ @city_code = attrs[:enderEmit][:cMun]
35
+ @city = attrs[:enderEmit][:xMun]
36
+ @zip_code = attrs[:enderEmit][:CEP]
37
+ @country_code = attrs[:enderEmit][:cPais]
38
+ @country = attrs[:enderEmit][:xPais]
39
+ @state = attrs[:enderEmit][:UF]
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+
3
+ # Informações de Compras
4
+ module Nfe
5
+ class Purchase
6
+ attr_reader :number, :demand, :contract
7
+
8
+ def initialize(attrs = {})
9
+ @number = attrs[:xNEmp]
10
+ @demand = attrs[:xPed]
11
+ @contract = attrs[:xCont]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ # Local de Retirada
2
+ module Nfe
3
+ # Identificação do Local de Retirada
4
+ class Removal
5
+ attr_reader :cnpj, :cpf, :address, :number, :complement,
6
+ :neighborhood, :city_code, :city, :state
7
+
8
+ def initialize(attrs = {})
9
+ @cnpj = attrs[:CNPJ]
10
+ @cpf = attrs[:CPF]
11
+ @address = attrs[:xLgr]
12
+ @number = attrs[:nro]
13
+ @complement = attrs[:xCpl]
14
+ @neighborhood = attrs[:xBairro]
15
+ @city_code = attrs[:cMun]
16
+ @city = attrs[:xMun]
17
+ @state = attrs[:UF]
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Cofins
4
+ attr_reader :cst, :base, :percentage, :value, :amount,
5
+ :aliquot
6
+
7
+ # Fieds Values
8
+ #
9
+ # cst:
10
+ # COFINSAliq:
11
+ # 01 - Operação Tributável
12
+ # (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo));
13
+ # 02 - Operação Tributável
14
+ # (base de cálculo = valor da operação (alíquota diferenciada));
15
+ # COFINSQtde:
16
+ # 03 - Operação Tributável
17
+ # (base de cálculo = quantidade vendida x alíquota por unidadede produto);
18
+ # COFINSNT:
19
+ # 04 - Operação Tributável
20
+ # (tributação monofásica(alíquota zero));
21
+ # 06 - Operação Tributável(alíquota zero);
22
+ # 07 - Operação Isenta da Contribuição;
23
+ # 08 - Operação Sem Incidência da Contribuição;
24
+ # 09 - Operação com Suspensão da Contribuição;
25
+ # COFINSOutr:
26
+ # 99 - Outras Operações;
27
+ #
28
+ def initialize(attrs = {})
29
+ # Cst COFINS
30
+ @cst = attrs[:CST]
31
+ # Base COFINS
32
+ @base = attrs[:vBC]
33
+ # % COFINS
34
+ @percentage = attrs[:pCOFINS]
35
+ # Valor COFINS
36
+ @value = attrs[:vCOFINS]
37
+ # Quantidade Vendida
38
+ @amount = attrs[:qBCProd]
39
+ # Alíquota do COFINS
40
+ @aliquot = attrs[:vAliqProd]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class CofinsSt
4
+ attr_reader :base, :percentage, :amount, :aliquot, :value
5
+
6
+ def initialize(attrs = {})
7
+ # Valor Base
8
+ @base = attrs[:vBC]
9
+ # % COFINS ST
10
+ @percentage = attrs[:pCOFINS]
11
+ # Quantidade
12
+ @amount = attrs[:qBCProd]
13
+ # Aliquota COFINS ST
14
+ @aliquot = attrs[:vAliqProd]
15
+ # Valor COFINS ST
16
+ @value = attrs[:vCOFINS]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Icms
4
+ attr_reader :origin, :cst, :icms_percentage, :icms, :icms_base_kind,
5
+ :icms_base, :icms_base_reduction, :icms_st_base_kind, :icms_st_base_reduction,
6
+ :mva, :icms_st_base, :icms_st_percentage, :icms_st, :icms_st_base_retained_sender,
7
+ :icms_st_retained_sender, :icms_st_base_retained, :icms_st_retained, :state,
8
+ :retained_reason, :credit_percentage, :icms_credit, :sn_operation_code
9
+
10
+ # == Field Values
11
+ #
12
+ # ori: 0 - Nacional
13
+ # 1 - Estrangeira - Importação direta
14
+ # 2 - Estrangeira – Adquirida no mercado interno.
15
+ #
16
+ # modBC: 0 - Margem Valor Agregado (%);
17
+ # 1 - Pauta (Valor);
18
+ # 2 - Preço Tabelado Máx. (valor);
19
+ # 3 - valor da operação.
20
+ #
21
+ # modBCST: 0 – Preço tabelado ou máximosugerido;
22
+ # 1 - Lista Negativa (valor);
23
+ # 2 - Lista Positiva (valor);
24
+ # 3 - Lista Neutra (valor);
25
+ # 4 - Margem Valor Agregado (%);
26
+ # 5 - Pauta (valor);
27
+
28
+ def initialize(attrs = {})
29
+ # Origem da mercadoria
30
+ @origin = attrs[:orig]
31
+ @origin ||= attrs[:Orig]
32
+
33
+ # Tributação do ICMS
34
+ @cst = attrs[:CST]
35
+
36
+ # == ICMS
37
+ #
38
+ # % ICMS
39
+ @icms_percentage = attrs[:pICMS]
40
+ # Valor ICMS
41
+ @icms = attrs[:vICMS]
42
+ # Modalidade de determinação da BC do ICMS
43
+ @icms_base_kind = attrs[:modBC]
44
+ # Base ICMS
45
+ @icms_base = attrs[:vBC]
46
+ # % Redução Base ICMS
47
+ @icms_base_reduction = attrs[:pRedBC]
48
+
49
+ # == ICMS ST
50
+ #
51
+ # Modalidade de determinação da BC do ICMS ST
52
+ @icms_st_base_kind = attrs[:modBCST]
53
+ # % redução Base ICMS ST
54
+ @icms_st_base_reduction = attrs[:pRedBCST]
55
+ # MVA ST
56
+ @mva = attrs[:pMVAST]
57
+ # Base ICMS ST
58
+ @icms_st_base = attrs[:vBCST]
59
+ # % ICMS ST
60
+ @icms_st_percentage = attrs[:pICMSST]
61
+ # Valor ICMS ST
62
+ @icms_st = attrs[:vICMSST]
63
+ # Valor do BC do ICMS ST Retido UF Remetente
64
+ @icms_st_base_retained_sender = attrs[:vBCSTRet]
65
+ # Valor ICMS ST Retido UF Remetente
66
+ @icms_st_retained_sender = attrs[:vICMSSTRet]
67
+ # Valor do BC do ICMS ST Retido UF Destiantaria
68
+ @icms_st_base_retained = attrs[:vBCSTDest]
69
+ # Valor ICMS ST Retido UF Destinataria
70
+ @icms_st_retained = attrs[:vICMSSTDes]
71
+ # UF para qual é devido o ICMS ST
72
+ @state = attrs[:UFST]
73
+
74
+ # == Simples Nacional
75
+ #
76
+ # Motivo da desoneração do ICMS
77
+ @retained_reason = attrs[:motDesICMS]
78
+ # Alíquota aplicável de cálculo do crédito
79
+ @credit_percentage = attrs[:pCredSN]
80
+ # Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123
81
+ @icms_credit = attrs[:vCredICMSSN]
82
+ # Código de Situação da Operação
83
+ @sn_operation_code = attrs[:CSOSN]
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class ImportationTax
4
+ attr_reader :base, :expenditure, :taxes, :iof
5
+
6
+ def initialize(attrs = {})
7
+ # Base de Caluclo
8
+ @base = attrs[:vBC]
9
+ # Despesas Aduaneiras
10
+ @expenditure = attrs[:vDespAdu]
11
+ # Imposto de Importação
12
+ @taxes = attrs[:vII]
13
+ # IOF
14
+ @iof = attrs[:vIOF]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Ipi
4
+ attr_reader :frame_class, :frame_code, :cnpj, :seal, :seal_amount,
5
+ :cst, :ipi_base, :amount, :value_unit, :percentage, :value, :cst_group
6
+
7
+ def initialize(attrs = {})
8
+ # Classe de enquadramento do IPI para Cigarros e Bebidas
9
+ @frame_class = attrs[:clEnq]
10
+ # Codigo enquadramento
11
+ @frame_code = attrs[:cEnq]
12
+ # CNPJ do produtor
13
+ @cnpj = attrs[:CNPJProd]
14
+ # Código do selo de controle
15
+ @seal = attrs[:cSelo]
16
+ # Quantidade do selo de controle
17
+ @seal_amount = attrs[:qSelo]
18
+
19
+ # == Tributação
20
+ if attrs[:IPITrib]
21
+ # Código da situação tributária do IPI
22
+ @cst = attrs[:IPITrib][:CST]
23
+ # Valor da BC do IPI
24
+ @ipi_base = attrs[:IPITrib][:vBC]
25
+ # Quantidade total na unidade padrão para tributação
26
+ @amount = attrs[:IPITrib][:qUnid]
27
+ # Valor por Unidade Tributável
28
+ @value_unit = attrs[:IPITrib][:vUnid]
29
+ # % do IPI
30
+ @percentage = attrs[:IPITrib][:pIPI]
31
+ # Valor do IPI
32
+ @value = attrs[:IPITrib][:vIPI]
33
+ end
34
+
35
+ if attrs[:IPINT]
36
+ # Grupo do CST 01, 02, 03, 04, 51, 52, 53, 54 e 55
37
+ @cst_group = attrs[:IPINT][:CST]
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Issqn
4
+ attr_accessor :base, :aliquot, :value, :city, :services, :cst
5
+
6
+ # Fields Values
7
+ #
8
+ # cStiTrib : N - NORMAL;
9
+ # R - RETIDA;
10
+ # S - SUBSTITUTA;
11
+ # I - ISENTA
12
+
13
+ def initialize(attrs = {})
14
+ @base = attrs[:vBC]
15
+ @aliquot = attrs[:vAliq]
16
+ @value = attrs[:vISSQN]
17
+ @city = attrs[:cMunFG]
18
+ @services = attrs[:cListServ]
19
+ @cst = attrs[:cSitTrib]
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class Pis
4
+ attr_reader :cst, :base, :percentage, :value, :amount, :aliquot
5
+
6
+ # Fieds Values
7
+ #
8
+ # cst:
9
+ # PISAliq:
10
+ # 01 - Operação Tributável
11
+ # (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo));
12
+ # 02 - Operação Tributável
13
+ # (base de cálculo = valor da operação (alíquota diferenciada));
14
+ # PISQtde:
15
+ # 03 - Operação Tributável
16
+ # (base de cálculo = quantidade vendida x alíquota por unidadede produto);
17
+ # PISNT:
18
+ # 04 - Operação Tributável
19
+ # (tributação monofásica(alíquota zero));
20
+ # 06 - Operação Tributável(alíquota zero);
21
+ # 07 - Operação Isenta da Contribuição;
22
+ # 08 - Operação Sem Incidência da Contribuição;
23
+ # 09 - Operação com Suspensão da Contribuição;
24
+ # PISOutr:
25
+ # 99 - Outras Operações;
26
+ #
27
+ def initialize(attrs = {})
28
+ # Cst PIS
29
+ @cst = attrs[:CST]
30
+ # Base PIS
31
+ @base = attrs[:vBC]
32
+ # % PIS
33
+ @percentage = attrs[:pPIS]
34
+ # Valor PIS
35
+ @value = attrs[:vPIS]
36
+ # Quantidade Vendida
37
+ @amount = attrs[:qBCProd]
38
+ # Alíquota do PIS
39
+ @aliquot = attrs[:vAliqProd]
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ module Nfe
3
+ class PisSt
4
+ attr_reader :base, :percentage, :amount, :aliquot, :value
5
+
6
+ def initialize(attrs = {})
7
+ # Valor Base
8
+ @base = attrs[:vBC]
9
+ # % PISST
10
+ @percentage = attrs[:pPIS]
11
+ # Quantidade
12
+ @amount = attrs[:qBCProd]
13
+ # Aliquota PIS ST
14
+ @aliquot = attrs[:vAliqProd]
15
+ # Valor PIS ST
16
+ @value = attrs[:vPIS]
17
+ end
18
+ end
19
+ end