Skip to content

Commit

Permalink
#4 - Reading XML of NF-e v4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Brunomm committed May 30, 2018
1 parent eaf893d commit 1c37c4d
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 41 deletions.
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
br_nfe (2.3.2)
br_nfe (3.0.0.beta.1)
activemodel (~> 4.2)
activesupport (~> 4.2)
nokogiri (~> 1.6)
Expand Down Expand Up @@ -73,7 +73,7 @@ GEM
gyoku (1.3.1)
builder (>= 2.1.2)
hashdiff (0.3.0)
httpi (2.4.2)
httpi (2.4.3)
rack
socksify
i18n (0.7.0)
Expand Down
18 changes: 17 additions & 1 deletion lib/br_nfe/product/reader/item.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ def set_product_details
@item.total_ipi_devolucao = @xml.css( @path[:total_ipi_devolucao] ).text.to_f
@item.informacoes_adicionais = @xml.css( @path[:informacoes_adicionais] ).text
@item.total_tributos = @xml.css( @path[:total_tributos] ).text.to_f

# NF-e 4.0
@item.escala_relevante = @xml.css( @path[:escala_relevante] ).text
@item.cnpj_fabricante = @xml.css( @path[:cnpj_fabricante] ).text
@item.codigo_beneficio_fiscal = @xml.css( @path[:codigo_beneficio_fiscal] ).text
end

def set_icms
Expand Down Expand Up @@ -93,7 +98,18 @@ def set_icms
total_base_calculo_st_retido: @xml.css( @path[:icms][:total_base_calculo_st_retido]).text.to_f,
total_st_retido: @xml.css( @path[:icms][:total_st_retido] ).text.to_f,
aliquota_credito_sn: @xml.css( @path[:icms][:aliquota_credito_sn] ).text.to_f,
total_credito_sn: @xml.css( @path[:icms][:total_credito_sn] ).text.to_f
total_credito_sn: @xml.css( @path[:icms][:total_credito_sn] ).text.to_f,
# NF-e 4.0
cfp_base_calculo: @xml.css( @path[:icms][:cfp_base_calculo] ).text.to_f,
cfp_percentual: @xml.css( @path[:icms][:cfp_percentual] ).text.to_f,
cfp_valor: @xml.css( @path[:icms][:cfp_valor] ).text.to_f,
cfp_st_base_calculo: @xml.css( @path[:icms][:cfp_st_base_calculo] ).text.to_f,
cfp_st_percentual: @xml.css( @path[:icms][:cfp_st_percentual] ).text.to_f,
cfp_st_valor: @xml.css( @path[:icms][:cfp_st_valor] ).text.to_f,
cfp_st_retido_base_calculo: @xml.css( @path[:icms][:cfp_st_retido_base_calculo] ).text.to_f,
cfp_st_retido_percentual: @xml.css( @path[:icms][:cfp_st_retido_percentual] ).text.to_f,
cfp_st_retido_valor: @xml.css( @path[:icms][:cfp_st_retido_valor] ).text.to_f,
aliquota_consumidor_final: @xml.css( @path[:icms][:aliquota_consumidor_final] ).text.to_f,
}
end
def set_ipi
Expand Down
37 changes: 28 additions & 9 deletions lib/br_nfe/product/reader/nfe.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def invoice
def xml_version
@xml_version
end

private

def path
Expand All @@ -29,7 +29,12 @@ def proc_is_present?
end

def find_xml_version
"v#{@xml.css("infNFe").attr("versao")}".gsub('.','_').to_sym
v = "v#{@xml.css("infNFe").attr("versao")}".gsub('.','_').to_sym
if v.in?( %i[v3_10 v4_00] )
v
else
:v4_00
end
end

def populate_invoice!
Expand All @@ -44,7 +49,9 @@ def populate_invoice!
@invoice.codigo_tipo_emissao = @xml_nfe.css(path[:codigo_tipo_emissao]).text
@invoice.codigo_nf = @xml_nfe.css(path[:codigo_nf]).text
@invoice.natureza_operacao = @xml_nfe.css(path[:natureza_operacao]).text
@invoice.forma_pagamento = @xml_nfe.css(path[:forma_pagamento]).text

@invoice.forma_pagamento = @xml_nfe.css(path[:forma_pagamento]).text # Removido na NF-e 4.0

@invoice.modelo_nf = @xml_nfe.css(path[:modelo_nf]).text
@invoice.serie = @xml_nfe.css(path[:serie]).text
@invoice.numero_nf = @xml_nfe.css(path[:numero_nf]).text.to_i
Expand Down Expand Up @@ -96,6 +103,11 @@ def build_product_total_values!
@invoice.total_outras_despesas = @xml_nfe.css(path[:total_icms][:total_outras_despesas]).text.to_f
@invoice.total_nf = @xml_nfe.css(path[:total_icms][:total_nf]).text.to_f
@invoice.total_tributos = @xml_nfe.css(path[:total_icms][:total_tributos]).text.to_f
# NF-e v4
@invoice.total_fcp = @xml_nfe.css(path[:total_icms][:total_fcp]).text.to_f
@invoice.total_fcp_st = @xml_nfe.css(path[:total_icms][:total_fcp_st]).text.to_f
@invoice.total_fcp_st_retido = @xml_nfe.css(path[:total_icms][:total_fcp_st_retido]).text.to_f
@invoice.total_ipi_devolvido = @xml_nfe.css(path[:total_icms][:total_ipi_devolvido]).text.to_f
end

def build_service_total_values!
Expand Down Expand Up @@ -147,14 +159,21 @@ def build_fatura!
end

def build_pagamentos!
if (path[:pagamentos][:troco])
# NF-e v4
@invoice.pagamento_troco = @xml_nfe.css(path[:pagamentos][:troco]).text.to_f
end

@xml_nfe.css(path[:pagamentos][:root]).each do |xml_pag|
@invoice.pagamentos << {
forma_pagamento: xml_pag.css(path[:pagamentos][:forma_pagamento]).text,
total: xml_pag.css(path[:pagamentos][:total]).text.to_f,
tipo_integracao: xml_pag.css(path[:pagamentos][:tipo_integracao]).text,
cartao_cnpj: xml_pag.css(path[:pagamentos][:cartao_cnpj]).text,
cartao_bandeira: xml_pag.css(path[:pagamentos][:cartao_bandeira]).text,
cartao_autorizacao: xml_pag.css(path[:pagamentos][:cartao_autorizacao]).text
forma_pagamento: xml_pag.css(path[:pagamentos][:forma_pagamento]).text,
total: xml_pag.css(path[:pagamentos][:total]).text.to_f,
tipo_integracao: xml_pag.css(path[:pagamentos][:tipo_integracao]).text,
cartao_cnpj: xml_pag.css(path[:pagamentos][:cartao_cnpj]).text,
cartao_bandeira: xml_pag.css(path[:pagamentos][:cartao_bandeira]).text,
cartao_autorizacao: xml_pag.css(path[:pagamentos][:cartao_autorizacao]).text,
# NF-e v4
indicacao_pagamento: xml_pag.css(path[:pagamentos][:indicacao_pagamento]).text,
}
end
end
Expand Down
16 changes: 0 additions & 16 deletions lib/br_nfe/product/xml/v4_00/infNFe/_tc_pag.xml.slim

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ orig = icms.origem
CSOSN = icms.codigo_cst

- if icms.total_base_calculo_st_retido.to_f > 0.0
vBCSTRet = nf_xml_value_monetary icms.total_base_calculo_st_retido
vBCSTRet = nf_xml_value_monetary icms.total_base_calculo_st_retido
pST = nf_xml_value_percent( icms.aliquota_consumidor_final )
vICMSSTRet = nf_xml_value_monetary icms.total_st_retido

Expand Down
3 changes: 3 additions & 0 deletions lib/br_nfe/product/xml/v4_00/infNFe/pag/_tc_detPag.xml.slim
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
detPag
- if pagamento.indicacao_pagamento.present?
indPag = pagamento.indicacao_pagamento.to_i

tPag = nf_xml_fixed_code(pagamento.forma_pagamento, size: 2)
vPag = nf_xml_value_monetary( pagamento.total )
- if pagamento.cartao?
Expand Down
8 changes: 4 additions & 4 deletions lib/br_nfe/version.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module BrNfe
module Version
MAJOR = 2 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
MINOR = 3 #inclui novas funcionalidades, sem quebrar APIs existentes
PATCH = 2 #corrige bugs ou traz melhorias em implementações já existentes
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
MAJOR = 3 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
MINOR = 0 #inclui novas funcionalidades, sem quebrar APIs existentes
PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}.beta.1"
end
end
46 changes: 38 additions & 8 deletions lib/config/settings/nfe/reader_xml_paths.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
default: &default
default: &default_nfe_v310
codigo_tipo_emissao: 'NFe/infNFe/ide/tpEmis'
codigo_nf: 'NFe/infNFe/ide/cNF'
natureza_operacao: 'NFe/infNFe/ide/natOp'
Expand Down Expand Up @@ -134,15 +134,15 @@ default: &default
numero_duplicata: 'nDup'
vencimento: 'dVenc'
total: 'vDup'
pagamentos:
pagamentos: &default_pagamentos_v310
root: 'NFe/infNFe/pag'
forma_pagamento: 'tPag'
total: 'vPag'
tipo_integracao: 'card/tpIntegra'
cartao_cnpj: 'card/CNPJ'
cartao_bandeira: 'card/tBand'
cartao_autorizacao: 'card/cAut'
total_icms:
total_icms: &default_total_icms_v310
root: 'NFe/infNFe/total/ICMSTot'
total_icms_base_calculo: 'NFe/infNFe/total/ICMSTot/vBC'
total_icms: 'NFe/infNFe/total/ICMSTot/vICMS'
Expand Down Expand Up @@ -198,9 +198,7 @@ default: &default
protocol: 'nProt'
processed_at: 'dhRegEvento'
status_code: 'cStat'


items:
items: &default_items_v310
root: 'NFe/infNFe/det'
codigo_produto: 'prod/cProd'
codigo_ean: 'prod/cEAN'
Expand Down Expand Up @@ -230,7 +228,7 @@ default: &default
total_ipi_devolucao: 'impostoDevol/IPI/vIPIDevol'
informacoes_adicionais: 'infAdProd'
total_tributos: 'imposto/vTotTrib'
icms:
icms: &default_items_icms_v310
root: 'imposto/ICMS'
origem: 'imposto/ICMS/*/orig'
cst: 'imposto/ICMS/*/CST'
Expand Down Expand Up @@ -370,4 +368,36 @@ default: &default
nfe:
v3_10:
reader_xml_paths:
<<: *default
<<: *default_nfe_v310
v4_00:
reader_xml_paths:
<<: *default_nfe_v310
pagamentos:
<<: *default_pagamentos_v310
troco: 'NFe/infNFe/pag/vTroco'
root: 'NFe/infNFe/pag/detPag'
indicacao_pagamento: 'indPag'
total_icms:
<<: *default_total_icms_v310
total_fcp: 'NFe/infNFe/total/ICMSTot/vFCP'
total_fcp_st: 'NFe/infNFe/total/ICMSTot/vFCPST'
total_fcp_st_retido: 'NFe/infNFe/total/ICMSTot/vFCPSTRet'
total_ipi_devolvido: 'NFe/infNFe/total/ICMSTot/vIPIDevol'

items:
<<: *default_items_v310
escala_relevante: 'prod/indEscala'
cnpj_fabricante: 'prod/CNPJFab'
codigo_beneficio_fiscal: 'prod/cBenef'
icms:
<<: *default_items_icms_v310
cfp_base_calculo: 'imposto/ICMS/*/vBCFCP'
cfp_percentual: 'imposto/ICMS/*/pFCP'
cfp_valor: 'imposto/ICMS/*/vFCP'
cfp_st_base_calculo: 'imposto/ICMS/*/vBCFCPST'
cfp_st_percentual: 'imposto/ICMS/*/pFCPST'
cfp_st_valor: 'imposto/ICMS/*/vFCPST'
cfp_st_retido_base_calculo: 'imposto/ICMS/*/vBCFCPSTRet'
cfp_st_retido_percentual: 'imposto/ICMS/*/pFCPSTRet'
cfp_st_retido_valor: 'imposto/ICMS/*/vFCPSTRet'
aliquota_consumidor_final: 'imposto/ICMS/*/pST'

0 comments on commit 1c37c4d

Please sign in to comment.