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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +38 -0
- data/Rakefile +13 -0
- data/lib/nfe_reader/authorization.rb +12 -0
- data/lib/nfe_reader/carrier.rb +16 -0
- data/lib/nfe_reader/collection/duplicate.rb +12 -0
- data/lib/nfe_reader/collection.rb +34 -0
- data/lib/nfe_reader/customer.rb +62 -0
- data/lib/nfe_reader/delivery.rb +20 -0
- data/lib/nfe_reader/document.rb +73 -0
- data/lib/nfe_reader/export.rb +12 -0
- data/lib/nfe_reader/fiscal.rb +33 -0
- data/lib/nfe_reader/header.rb +129 -0
- data/lib/nfe_reader/information.rb +38 -0
- data/lib/nfe_reader/product/armament.rb +22 -0
- data/lib/nfe_reader/product/cane.rb +42 -0
- data/lib/nfe_reader/product/exportation.rb +20 -0
- data/lib/nfe_reader/product/fuel.rb +18 -0
- data/lib/nfe_reader/product/importation.rb +49 -0
- data/lib/nfe_reader/product/medicament.rb +19 -0
- data/lib/nfe_reader/product/vehicle.rb +117 -0
- data/lib/nfe_reader/product.rb +90 -0
- data/lib/nfe_reader/provider.rb +43 -0
- data/lib/nfe_reader/purchase.rb +14 -0
- data/lib/nfe_reader/removal.rb +20 -0
- data/lib/nfe_reader/taxation/cofins.rb +43 -0
- data/lib/nfe_reader/taxation/cofins_st.rb +19 -0
- data/lib/nfe_reader/taxation/icms.rb +86 -0
- data/lib/nfe_reader/taxation/importation_tax.rb +17 -0
- data/lib/nfe_reader/taxation/ipi.rb +41 -0
- data/lib/nfe_reader/taxation/issqn.rb +22 -0
- data/lib/nfe_reader/taxation/pis.rb +42 -0
- data/lib/nfe_reader/taxation/pis_st.rb +19 -0
- data/lib/nfe_reader/total.rb +76 -0
- data/lib/nfe_reader/transport.rb +97 -0
- data/lib/nfe_reader/version.rb +5 -0
- data/lib/nfe_reader.rb +129 -0
- data/lib/nokogiri_hash.rb +60 -0
- data/nfe-reader.gemspec +24 -0
- data/test/files/sample-nfe.xml +234 -0
- data/test/files/sample2-nfe.xml +192 -0
- data/test/nfe_reader/authorization_test.rb +22 -0
- data/test/nfe_reader/cane_test.rb +71 -0
- data/test/nfe_reader/carrier_test.rb +46 -0
- data/test/nfe_reader/collection/duplicate_test.rb +27 -0
- data/test/nfe_reader/collection_test.rb +78 -0
- data/test/nfe_reader/customer_test.rb +133 -0
- data/test/nfe_reader/delivery_test.rb +57 -0
- data/test/nfe_reader/document_test.rb +113 -0
- data/test/nfe_reader/export_test.rb +22 -0
- data/test/nfe_reader/fiscal_test.rb +67 -0
- data/test/nfe_reader/header_test.rb +135 -0
- data/test/nfe_reader/information_test.rb +37 -0
- data/test/nfe_reader/product/armament_test.rb +32 -0
- data/test/nfe_reader/product/exportation_test.rb +34 -0
- data/test/nfe_reader/product/fuel_test.rb +44 -0
- data/test/nfe_reader/product/importation_test.rb +64 -0
- data/test/nfe_reader/product/medicament_test.rb +37 -0
- data/test/nfe_reader/product/vehicle_test.rb +133 -0
- data/test/nfe_reader/product_test.rb +125 -0
- data/test/nfe_reader/provider_test.rb +155 -0
- data/test/nfe_reader/purchase_test.rb +27 -0
- data/test/nfe_reader/removal_test.rb +57 -0
- data/test/nfe_reader/taxation/cofins_st_test.rb +37 -0
- data/test/nfe_reader/taxation/cofins_test.rb +42 -0
- data/test/nfe_reader/taxation/icms_test.rb +122 -0
- data/test/nfe_reader/taxation/importation_tax_test.rb +32 -0
- data/test/nfe_reader/taxation/ipi_test.rb +78 -0
- data/test/nfe_reader/taxation/issqn_test.rb +42 -0
- data/test/nfe_reader/taxation/pis_st_test.rb +37 -0
- data/test/nfe_reader/taxation/pis_test.rb +42 -0
- data/test/nfe_reader/total_test.rb +148 -0
- data/test/nfe_reader/transport_test.rb +172 -0
- data/test/nfe_reader_test.rb +125 -0
- data/test/nokogiri_test.rb +27 -0
- data/test/test_helper.rb +13 -0
- 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,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
|