br_nfe 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/br_nfe/active_model_base.rb +0 -5
- data/lib/br_nfe/base.rb +116 -7
- data/lib/br_nfe/helper/values_ts/service_v1.rb +15 -11
- data/lib/br_nfe/response/service/build_response.rb +230 -53
- data/lib/br_nfe/response/service/nota_fiscal.rb +9 -0
- data/lib/br_nfe/response/service/paths/base.rb +93 -59
- data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +2 -2
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +2 -2
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +2 -2
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +2 -2
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +4 -4
- data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +8 -8
- data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +201 -57
- data/lib/br_nfe/service/base.rb +104 -5
- data/lib/br_nfe/service/betha/base.rb +5 -0
- data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +1 -4
- data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +1 -4
- data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +1 -4
- data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +1 -4
- data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +1 -3
- data/lib/br_nfe/service/betha/v1/gateway.rb +1 -1
- data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +1 -3
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +5 -1
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +5 -1
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +5 -1
- data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +5 -0
- data/lib/br_nfe/service/rps.rb +13 -4
- data/lib/br_nfe/service/simpliss/v1/base.rb +79 -0
- data/lib/br_nfe/service/simpliss/v1/cancela_nfse.rb +30 -0
- data/lib/br_nfe/service/simpliss/v1/consulta_lote_rps.rb +38 -0
- data/lib/br_nfe/service/simpliss/v1/consulta_nfs_por_rps.rb +31 -0
- data/lib/br_nfe/service/simpliss/v1/consulta_nfse.rb +30 -0
- data/lib/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps.rb +29 -0
- data/lib/br_nfe/service/simpliss/v1/recepcao_lote_rps.rb +35 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_cancelar_nfse_resposta.rb +22 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_lote_rps_resposta.rb +25 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_resposta.rb +25 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +25 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_situacao_lote_rps_resposta.rb +31 -0
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_enviar_lote_rps_resposta.rb +36 -0
- data/lib/br_nfe/service/simpliss/v1/xml/_login.xml.slim +3 -0
- data/lib/br_nfe/service/simpliss/v1/xml/_tc_dados_servico.xml.slim +18 -0
- data/lib/br_nfe/service/simpliss/v1/xml/_tc_item_servico.xml.slim +3 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_cancelar_nfse_envio.xml.slim +11 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_consultar_lote_rps_envio.xml.slim +7 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_consultar_nfse_envio.xml.slim +22 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_consultar_nfse_rps_envio.xml.slim +8 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_consultar_situacao_lote_rps_envio.xml.slim +7 -0
- data/lib/br_nfe/service/simpliss/v1/xml/servico_enviar_lote_rps_envio.xml.slim +11 -0
- data/lib/br_nfe/service/thema/v1/base.rb +48 -2
- data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +14 -5
- data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +5 -4
- data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +5 -4
- data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +5 -4
- data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +1 -4
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +19 -5
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +1 -1
- data/lib/br_nfe/service/thema/v1/response_paths/servico_cancelar_nfse_resposta.rb +17 -0
- data/lib/br_nfe/service/thema/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +19 -0
- data/lib/br_nfe/service/xml/v1/_tc_contato.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_cpf_cnpj.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_dados_construcao_civil.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_dados_prestador.xml.slim +5 -5
- data/lib/br_nfe/service/xml/v1/_tc_dados_servico.xml.slim +6 -6
- data/lib/br_nfe/service/xml/v1/_tc_dados_tomador.xml.slim +4 -4
- data/lib/br_nfe/service/xml/v1/_tc_endereco.xml.slim +7 -7
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_intermediario_servico.xml.slim +3 -3
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +4 -4
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_orgao_gerador.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_prestador.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_rps.xml.slim +3 -3
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_tomador.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_inf_pedido_cancelamento.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_inf_rps.xml.slim +13 -13
- data/lib/br_nfe/service/xml/v1/_tc_lote_rps.xml.slim +6 -6
- data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +1 -1
- data/lib/br_nfe/service/xml/v1/_tc_rps.xml.slim +2 -2
- data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +16 -17
- data/lib/br_nfe/service/xml/v1/servico_cancelar_nfse_envio.xml.slim +3 -4
- data/lib/br_nfe/service/xml/v1/servico_consultar_lote_rps_envio.xml.slim +3 -3
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_envio.xml.slim +8 -8
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_rps_envio.xml.slim +3 -3
- data/lib/br_nfe/service/xml/v1/servico_consultar_situacao_lote_rps_envio.xml.slim +3 -3
- data/lib/br_nfe/service/xml/v1/servico_enviar_lote_rps_envio.xml.slim +3 -3
- data/lib/br_nfe/version.rb +1 -1
- data/lib/br_nfe/xml/_signed_info_sh1.xml.slim +9 -9
- data/lib/br_nfe/xml/signature_sh1.xml.slim +5 -5
- data/lib/br_nfe.rb +26 -10
- data/test/br_nfe/base_test.rb +5 -5
- data/test/br_nfe/helper/values_ts/service_v1_test.rb +376 -0
- data/test/br_nfe/response/service/build_response_test.rb +1 -173
- data/test/br_nfe/response/service/paths/base_test.rb +61 -64
- data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +2 -2
- data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +2 -2
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +2 -2
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +2 -2
- data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +3 -3
- data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +4 -4
- data/test/br_nfe/response/service/paths/v1/tc_nfse_test.rb +27 -31
- data/test/br_nfe/service/base_test.rb +206 -11
- data/test/br_nfe/service/betha/base_test.rb +9 -0
- data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +0 -6
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +0 -6
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +0 -4
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +0 -4
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +1 -5
- data/test/br_nfe/service/betha/v1/gateway_test.rb +4 -2
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +0 -4
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +1 -1
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +1 -1
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +1 -1
- data/test/br_nfe/service/rps_test.rb +39 -6
- data/test/br_nfe/service/simpliss/v1/base_test.rb +102 -0
- data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +97 -0
- data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +241 -0
- data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +239 -0
- data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +226 -0
- data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +122 -0
- data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +105 -0
- data/test/br_nfe/service/simpliss/v1/xsd/nfse_3.xsd +735 -0
- data/test/br_nfe/service/simpliss/v1/xsd/xmldsig-core-schema20020212.xsd +318 -0
- data/test/br_nfe/service/thema/v1/base_test.rb +23 -2
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +69 -3
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +134 -4
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +131 -4
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +214 -4
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +97 -4
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +109 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +72 -4
- data/test/factories/service/rps.rb +17 -16
- data/test/factories/service/{sc/gaspar/recepcao_lote_rps_limitado.rb → simpliss/v1/base.rb} +1 -3
- data/test/factories/service/{sc/gaspar → simpliss/v1}/cancela_nfse.rb +2 -2
- data/test/factories/service/simpliss/v1/consulta_lote_rps.rb +7 -0
- data/test/factories/service/{sc/gaspar → simpliss/v1}/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/{sc/gaspar → simpliss/v1}/consulta_nfse.rb +1 -1
- data/test/factories/service/simpliss/v1/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/{sc/gaspar → simpliss/v1}/recepcao_lote_rps.rb +1 -1
- data/test/fixtures/service/response/simpliss/v1/cancela_nfse/fault.xml +21 -0
- data/test/fixtures/service/response/simpliss/v1/cancela_nfse/success.xml +26 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_lote_rps/fault.xml +21 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_lote_rps/nfse_complete.xml +134 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_lote_rps/nfse_simple.xml +100 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse/fault.xml +16 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse/nfs_empty.xml +10 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse/nfse_complete.xml +134 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse/nfse_simple.xml +100 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse_por_rps/fault.xml +16 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse_por_rps/nfse_complete.xml +132 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_nfse_por_rps/nfse_simple.xml +98 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_situacao_lote_rps/error.xml +11 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_situacao_lote_rps/fault.xml +16 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_situacao_lote_rps/success.xml +11 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_situacao_lote_rps/unprocessed.xml +11 -0
- data/test/fixtures/service/response/simpliss/v1/consulta_situacao_lote_rps/unreceived.xml +11 -0
- data/test/fixtures/service/response/simpliss/v1/recepcao_lote_rps/error.xml +16 -0
- data/test/fixtures/service/response/simpliss/v1/recepcao_lote_rps/success.xml +12 -0
- data/test/fixtures/service/response/thema/v1/cancela_nfse/fault.xml +33 -0
- data/test/fixtures/service/response/thema/v1/cancela_nfse/success.xml +30 -0
- data/test/fixtures/service/response/thema/v1/consulta_lote_rps/fault.xml +19 -0
- data/test/fixtures/service/response/thema/v1/consulta_lote_rps/nfse_complete.xml +109 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse/fault.xml +20 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse/nfs_empty.xml +14 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse/nfse_complete.xml +111 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse/nfse_simple.xml +111 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse_por_rps/fault.xml +23 -0
- data/test/fixtures/service/response/thema/v1/consulta_nfse_por_rps/nfse_complete.xml +110 -0
- data/test/fixtures/service/response/thema/v1/consulta_situacao_lote_rps/error.xml +14 -0
- data/test/fixtures/service/response/thema/v1/consulta_situacao_lote_rps/fault.xml +15 -0
- data/test/fixtures/service/response/thema/v1/consulta_situacao_lote_rps/success.xml +14 -0
- data/test/fixtures/service/response/thema/v1/consulta_situacao_lote_rps/unprocessed.xml +14 -0
- data/test/fixtures/service/response/thema/v1/consulta_situacao_lote_rps/unreceived.xml +19 -0
- data/test/fixtures/service/response/thema/v1/recepcao_lote_rps/error.xml +17 -0
- data/test/fixtures/service/response/thema/v1/recepcao_lote_rps/success.xml +15 -0
- data/test/fixtures/service/response/thema/v1/recepcao_lote_rps_limitado/error.xml +19 -0
- data/test/fixtures/service/response/thema/v1/recepcao_lote_rps_limitado/success.xml +15 -0
- data/test/fixtures/service/thema/v1/cancelar_nfse_envio.xml +1 -0
- data/test/fixtures/service/thema/v1/cancelar_nfse_envio_signed.xml +2 -0
- data/test/fixtures/service/thema/v1/enviar_lote_rps.xml +1 -0
- data/test/fixtures/service/thema/v1/enviar_lote_rps_signed.xml +2 -0
- data/test/test_helper.rb +5 -0
- metadata +146 -37
- data/lib/br_nfe/service/sc/gaspar/cancela_nfse.rb +0 -13
- data/lib/br_nfe/service/sc/gaspar/consulta_lote_rps.rb +0 -13
- data/lib/br_nfe/service/sc/gaspar/consulta_nfs_por_rps.rb +0 -13
- data/lib/br_nfe/service/sc/gaspar/consulta_nfse.rb +0 -17
- data/lib/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps.rb +0 -13
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps.rb +0 -13
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado.rb +0 -13
- data/test/br_nfe/service/sc/gaspar/cancela_nfse_test.rb +0 -21
- data/test/br_nfe/service/sc/gaspar/consulta_nfs_por_rps_test.rb +0 -21
- data/test/br_nfe/service/sc/gaspar/consulta_nfse_test.rb +0 -21
- data/test/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps_test.rb +0 -21
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado_test.rb +0 -22
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_test.rb +0 -22
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test_limitado.rb +0 -50
- data/test/factories/service/sc/gaspar/consulta_lote_rps.rb +0 -7
- data/test/factories/service/sc/gaspar/consulta_situacao_lote_rps.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea6a1eaa1f98eb411c09920514df79554940ad0d
|
4
|
+
data.tar.gz: 8b05a7fd858d2e170dfb265ed3fb24cce070897b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0472708c6a76b15978beb4ea13eed887839e5fc6375fe862a64f10f8820bb1a5214e55a33ae42291357bbf9ffd0b8b1748b54d4bad4588e24c63a58a18529985
|
7
|
+
data.tar.gz: 0fb2ab18fd1a9e2068d14be52572e1f2bec77390a654abc9ebdef6cba583d977935562a4b5e245aee7beb8bc27392fb5ed2ddea51628ad11cafd8a4b33dee618
|
data/Gemfile.lock
CHANGED
@@ -40,11 +40,6 @@ module BrNfe
|
|
40
40
|
return ''
|
41
41
|
end
|
42
42
|
|
43
|
-
# Irá retornar 1(true) e 2(false)
|
44
|
-
def value_true_false(value)
|
45
|
-
BrNfe.true_values.include?(value) ? '1' : '2'
|
46
|
-
end
|
47
|
-
|
48
43
|
# Deve receber um valor do tipo float
|
49
44
|
# Irá retornar o valor com a precisão
|
50
45
|
# Alguns WS convertem os valores para String com separador de milhar uma vírgula
|
data/lib/br_nfe/base.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module BrNfe
|
2
2
|
class Base < BrNfe::ActiveModelBase
|
3
|
-
|
4
3
|
include BrNfe::Helper::HaveEmitente
|
5
4
|
|
6
5
|
attr_accessor :certificate_pkcs12_password
|
@@ -73,17 +72,35 @@ module BrNfe
|
|
73
72
|
# o namespace utilizado para identificar o namespace da mensagem.
|
74
73
|
#
|
75
74
|
# Exemplo: se o método message_namespaces for {xmlns:ns1="http...."} então
|
76
|
-
# o namespace_identifier deveria ser :
|
75
|
+
# o namespace_identifier deveria ser 'ns1:'.
|
77
76
|
# E com isso irá adicionar o namespace na tag principal da requsição.
|
78
77
|
# Exemplo com a requisição EnviarLoteRps:
|
79
78
|
# COM namespace_identifier => ns1:EnviarLoteRpsEnvio
|
80
79
|
# SEM namespace_identifier => EnviarLoteRpsEnvio
|
81
80
|
#
|
82
|
-
# <b>Tipo de retorno: </b>
|
81
|
+
# <b>Tipo de retorno: </b> _String_ OR _Nil_
|
83
82
|
#
|
84
83
|
def namespace_identifier
|
85
84
|
end
|
86
85
|
|
86
|
+
# Utilizado para colocar o namespace nas tags de valores
|
87
|
+
# Exemplo:
|
88
|
+
# <ns1:LoteRps id="123">
|
89
|
+
# <ns1:NumeroLote>3311</ns1:NumeroLote>
|
90
|
+
# <ns1:Cnpj>23020443000140</ns1:Cnpj>
|
91
|
+
def namespace_for_tags
|
92
|
+
end
|
93
|
+
|
94
|
+
# Utilizado para colocar o namespace nas tags da assiantura
|
95
|
+
# Exemplo:
|
96
|
+
# <ns2:Signature Id="?">
|
97
|
+
# <ns2:SignedInfo Id="?">
|
98
|
+
# <ns2:CanonicalizationMethod Algorithm="?">?</ns2:CanonicalizationMethod>
|
99
|
+
# .....
|
100
|
+
#
|
101
|
+
def namespace_for_signature
|
102
|
+
end
|
103
|
+
|
87
104
|
def message_namespaces
|
88
105
|
{}
|
89
106
|
end
|
@@ -101,6 +118,10 @@ module BrNfe
|
|
101
118
|
"UTF-8"
|
102
119
|
end
|
103
120
|
|
121
|
+
def response_encoding
|
122
|
+
"UTF-8"
|
123
|
+
end
|
124
|
+
|
104
125
|
# Tag XML que vai na requisição SOAP
|
105
126
|
#
|
106
127
|
# <b>Tipo de retorno: </b> _String_
|
@@ -161,8 +182,17 @@ module BrNfe
|
|
161
182
|
def certificate_pkcs12
|
162
183
|
return @certificate_pkcs12 if @certificate_pkcs12
|
163
184
|
@certificate_pkcs12 = nil
|
164
|
-
|
165
|
-
Thread
|
185
|
+
|
186
|
+
# É utilizado uma Thread e limpado os errors do OpenSSL para evitar perda de
|
187
|
+
# conexão com o banco de dados PostgreSQL.
|
188
|
+
# Veja: http://stackoverflow.com/questions/33112155/pgconnectionbad-pqconsumeinput-ssl-error-key-values-mismatch/36283315#36283315
|
189
|
+
# Veja: https://github.com/tedconf/front_end_builds/pull/66
|
190
|
+
Thread.new do
|
191
|
+
@certificate_pkcs12 = OpenSSL::PKCS12.new(certificate_pkcs12_value, certificate_pkcs12_password)
|
192
|
+
OpenSSL.errors.clear
|
193
|
+
end.join
|
194
|
+
OpenSSL.errors.clear
|
195
|
+
|
166
196
|
@certificate_pkcs12
|
167
197
|
rescue
|
168
198
|
end
|
@@ -185,7 +215,7 @@ module BrNfe
|
|
185
215
|
|
186
216
|
def certificate_key=(value)
|
187
217
|
@certificate_key = value
|
188
|
-
end
|
218
|
+
end
|
189
219
|
|
190
220
|
# Renderiza o xml a partir do nome de um arquivo
|
191
221
|
# Irá procurar o arquivo a partir dos seguintes diretórios>
|
@@ -245,13 +275,92 @@ module BrNfe
|
|
245
275
|
"#{BrNfe.root}/lib/br_nfe/xml"
|
246
276
|
end
|
247
277
|
|
278
|
+
# Existem 2 tipos de assinatura da NFS-e
|
279
|
+
# * [+:default+]
|
280
|
+
# Assina o XML no momento em que está sendo montado. Funciona normalmente para a
|
281
|
+
# maiora das prefeituras.
|
282
|
+
# Primeiro assina cada RPS individualmente e adiciona a tag da assinatura e depois
|
283
|
+
# Assina o LOTE RPS com todas os RPSs assinados
|
284
|
+
#
|
285
|
+
# * [+:method_sign+]
|
286
|
+
# Assina o XML após a montagem do mesmo. Utiliza a gem 'signer' para assinar os nós do XML.
|
287
|
+
# Adiciona toda a assinatura no final do XML, diferente do que é descrito nas documentações.
|
288
|
+
# Porém em algumas cidades só consegui validar a assinatura utilizando esse método
|
289
|
+
# Estava dando o erro: E515 - Erro ao validar assinatura. - Remessa adulterada após a assinatura.
|
290
|
+
#
|
291
|
+
def signature_type
|
292
|
+
:default
|
293
|
+
end
|
294
|
+
def signature_type?(type)
|
295
|
+
signature_type == type
|
296
|
+
end
|
297
|
+
|
298
|
+
# USE EXAMPLE
|
299
|
+
# @xml = <?xml version="1.0" encoding="ISO-8859-1"?>
|
300
|
+
# <EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
|
301
|
+
# <LoteRps id="L2">
|
302
|
+
# ...
|
303
|
+
# <ListaRps>
|
304
|
+
# <Rps>
|
305
|
+
# <InfRps id="R2">
|
306
|
+
# ...
|
307
|
+
# </>InfRps
|
308
|
+
# </Rps>
|
309
|
+
# <Rps>
|
310
|
+
# <InfRps id="R3">
|
311
|
+
# ...
|
312
|
+
# </>InfRps
|
313
|
+
# </Rps>
|
314
|
+
# </ListaRps>
|
315
|
+
# </LoteRps>
|
316
|
+
# </EnviarLoteRpsEnvio>
|
317
|
+
# sign_nodes = [
|
318
|
+
# {
|
319
|
+
# node_path: "//nf:EnviarLoteRpsEnvio/nf:LoteRps/nf:ListaRps/nf:Rps/nf:InfRps",
|
320
|
+
# node_namespaces: {nf: 'http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd'},
|
321
|
+
# node_ids: ['R2','R3']
|
322
|
+
# },
|
323
|
+
# {
|
324
|
+
# node_path: "//nf:EnviarLoteRpsEnvio/nf:LoteRps",
|
325
|
+
# node_namespaces: {nf: 'http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd'},
|
326
|
+
# node_ids: ['L2']
|
327
|
+
# },
|
328
|
+
# ]
|
329
|
+
#
|
330
|
+
# Call Method:
|
331
|
+
# sign_xml(@xml, sign_nodes)
|
332
|
+
#
|
333
|
+
def sign_xml(xml, sign_nodes=[])
|
334
|
+
return xml unless certificate
|
335
|
+
signer = Signer.new(xml)
|
336
|
+
signer.cert = certificate
|
337
|
+
signer.private_key = certificate_key
|
338
|
+
|
339
|
+
# Como o documento não é um envelope SOAP preciso setar o security_node e o security_token_id
|
340
|
+
signer.security_node = signer.document.root
|
341
|
+
signer.security_token_id = ""
|
342
|
+
|
343
|
+
sign_nodes.each do |options|
|
344
|
+
node_ids = [options[:node_ids]].flatten
|
345
|
+
signer.document.xpath(options[:node_path], options[:node_namespaces]).each_with_index do |node, i|
|
346
|
+
# digo quais tags devem ser assinadas
|
347
|
+
signer.digest!(node, id: "#{node_ids[i]}", enveloped: true)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
# Assina o XML
|
352
|
+
signer.sign!(security_token: false, issuer_serial: true)
|
353
|
+
|
354
|
+
signer.to_xml
|
355
|
+
end
|
356
|
+
|
248
357
|
private
|
249
358
|
|
250
359
|
def tag_cpf_cnpj(xml, cpf_cnpj)
|
251
360
|
cpf_cnpj = BrNfe::Helper::CpfCnpj.new(cpf_cnpj)
|
252
361
|
if cpf_cnpj.cnpj?
|
253
362
|
xml.Cnpj cpf_cnpj.sem_formatacao
|
254
|
-
elsif cpf_cnpj.cpf?
|
363
|
+
elsif cpf_cnpj.cpf?
|
255
364
|
xml.Cpf cpf_cnpj.sem_formatacao
|
256
365
|
end
|
257
366
|
end
|
@@ -61,7 +61,7 @@ module BrNfe
|
|
61
61
|
# 2 - Não
|
62
62
|
#
|
63
63
|
def ts_sim_nao value
|
64
|
-
|
64
|
+
BrNfe.true_values.include?(value) ? '1' : '2'
|
65
65
|
end
|
66
66
|
|
67
67
|
# Quantidade de RPS do Lote
|
@@ -104,15 +104,19 @@ module BrNfe
|
|
104
104
|
# 1.000,00 = 1000
|
105
105
|
#
|
106
106
|
def ts_valor value
|
107
|
-
|
107
|
+
value.to_f.round(2) if value.present?
|
108
108
|
end
|
109
109
|
|
110
110
|
# Código de item da lista de serviço
|
111
|
+
# Se um serviço for por exemplo: 107 deve ser enviado no formato
|
112
|
+
# 1.07
|
111
113
|
#
|
112
114
|
def ts_item_lista_servico value
|
113
|
-
|
115
|
+
return if value.blank?
|
116
|
+
number_only = BrNfe::Helper.only_number(value).max_size(4).to_i.to_s
|
117
|
+
number_only.reverse.scan(/.{1,2}/).join('.').reverse
|
114
118
|
end
|
115
|
-
|
119
|
+
|
116
120
|
# Código CNAE
|
117
121
|
#
|
118
122
|
def ts_codigo_cnae value
|
@@ -127,12 +131,12 @@ module BrNfe
|
|
127
131
|
|
128
132
|
# Alíquota. Valor percentual.
|
129
133
|
# Formato: 0.0000
|
130
|
-
# Ex: 1% =
|
131
|
-
# 25,5% =
|
132
|
-
# 100% =
|
134
|
+
# Ex: 1% = 1.00
|
135
|
+
# 25,5% = 25.5
|
136
|
+
# 100% = 100.0000 ou 100
|
133
137
|
#
|
134
138
|
def ts_aliquota value
|
135
|
-
|
139
|
+
value_monetary(value, 4)
|
136
140
|
end
|
137
141
|
|
138
142
|
# Discriminação do conteúdo da NFS-e
|
@@ -204,7 +208,7 @@ module BrNfe
|
|
204
208
|
# Número do CEP
|
205
209
|
#
|
206
210
|
def ts_cep value
|
207
|
-
BrNfe::Helper.only_number(value).max_size(8)
|
211
|
+
BrNfe::Helper.only_number(value).max_size(8).ljust(8, '0') if value.present?
|
208
212
|
end
|
209
213
|
|
210
214
|
# E-mail
|
@@ -216,7 +220,7 @@ module BrNfe
|
|
216
220
|
# Telefone
|
217
221
|
#
|
218
222
|
def ts_telefone value
|
219
|
-
|
223
|
+
BrNfe::Helper.only_number(value).max_size(11)
|
220
224
|
end
|
221
225
|
|
222
226
|
# Número CPF
|
@@ -230,7 +234,7 @@ module BrNfe
|
|
230
234
|
# 2 – CNPJ
|
231
235
|
# 3 – Não Informado
|
232
236
|
#
|
233
|
-
def ts_indicacao_cpf_cnpj
|
237
|
+
def ts_indicacao_cpf_cnpj value
|
234
238
|
BrNfe::Helper.only_number(value).max_size(1)
|
235
239
|
end
|
236
240
|
|
@@ -6,33 +6,127 @@ module BrNfe
|
|
6
6
|
# 1: A resposta da requisição soap
|
7
7
|
attr_accessor :savon_response
|
8
8
|
|
9
|
-
# 2:
|
10
|
-
# caminhos das chaves para encontrar cada valor
|
11
|
-
attr_accessor :module_methods
|
12
|
-
|
13
|
-
# 3: Um array com o caminho inicial padrão da requisição de retorno
|
9
|
+
# 2: Um array com o caminho inicial padrão da requisição de retorno
|
14
10
|
attr_accessor :keys_root_path
|
15
11
|
|
16
|
-
#
|
12
|
+
# 3: Caminho para encontrar o XML da NF-e
|
17
13
|
attr_accessor :nfe_xml_path
|
18
14
|
|
19
|
-
#
|
15
|
+
# 4: Alguns Webservices trazem dentro do body da resposta SOAp
|
20
16
|
# outro XML com as informações necessárias.
|
21
17
|
# Quando isso aocntece é preciso converter esse XML para um HASH
|
22
18
|
# para que possamos encontrar os valores necessários.
|
23
19
|
attr_accessor :body_xml_path
|
24
|
-
|
25
|
-
def initialize(attributes = {})
|
26
|
-
super(attributes)
|
27
|
-
include_module!
|
28
|
-
end
|
29
20
|
|
30
|
-
#
|
31
|
-
#
|
32
|
-
|
33
|
-
self.class.send(:include, module_methods) if module_methods
|
34
|
-
end
|
21
|
+
# 5: Codificação original do XML de resposta para que seja convertido
|
22
|
+
# para UTF-8
|
23
|
+
attr_accessor :xml_encode
|
35
24
|
|
25
|
+
##############################################################################################################
|
26
|
+
####################### CAMINHOS PARA ENCONTRAR OS VALORES NA RESPOSTA DA REQUISIÇÃO #####################
|
27
|
+
# Caminho para encontrar
|
28
|
+
attr_accessor :lot_number_path # o numero do lote
|
29
|
+
attr_accessor :protocol_path # o protocolo
|
30
|
+
attr_accessor :received_date_path # a data de recebimento do xml
|
31
|
+
attr_accessor :situation_path # a situação do lote rps
|
32
|
+
attr_accessor :situation_key_values #
|
33
|
+
def situation_key_values
|
34
|
+
@situation_key_values.is_a?(Hash) ? @situation_key_values : {
|
35
|
+
'1' => :unreceived, # Não Recebido
|
36
|
+
'2' => :unprocessed,# Não Processado
|
37
|
+
'3' => :error, # Processado com Erro
|
38
|
+
'4' => :success, # Processado com Sucesso
|
39
|
+
}
|
40
|
+
end
|
41
|
+
attr_accessor :cancelation_date_time_path # data e hora do cancelamento da nf
|
42
|
+
attr_accessor :message_errors_path # local para encontrar as mensagens de erro
|
43
|
+
attr_accessor :message_code_key # chave que representa o codigo do erro
|
44
|
+
attr_accessor :message_msg_key # chave que representa a mensagem do erro
|
45
|
+
attr_accessor :message_solution_key # chave que representa a solução do erro
|
46
|
+
attr_accessor :invoices_path # o caminho para listar as notas fiscais
|
47
|
+
attr_accessor :invoice_numero_nf_path # numero da nota fiscal
|
48
|
+
attr_accessor :invoice_codigo_verificacao_path # código de verificação
|
49
|
+
attr_accessor :invoice_data_emissao_path # Data de emissão da NF
|
50
|
+
attr_accessor :invoice_url_nf_path # URL para visualizar a DANFE (apenas alguns emissores disponibilizam isso)
|
51
|
+
attr_accessor :invoice_rps_numero_path # Número do RPS da nota
|
52
|
+
attr_accessor :invoice_rps_serie_path # Número da série do RPS da nota
|
53
|
+
attr_accessor :invoice_rps_tipo_path # Tipo do RPS
|
54
|
+
attr_accessor :invoice_rps_situacao_path # Situação da NF
|
55
|
+
attr_accessor :invoice_rps_substituido_numero_path # Número do RPS da nota substituido
|
56
|
+
attr_accessor :invoice_rps_substituido_serie_path # Número da série do RPS da nota substituido
|
57
|
+
attr_accessor :invoice_rps_substituido_tipo_path # Tipo do RPS substituido
|
58
|
+
attr_accessor :invoice_data_emissao_rps_path # Data de emissão do RPS
|
59
|
+
attr_accessor :invoice_competencia_path # Competência da nf
|
60
|
+
attr_accessor :invoice_natureza_operacao_path # natureza de operação
|
61
|
+
attr_accessor :invoice_regime_especial_tributacao_path # Regime especial de tributação
|
62
|
+
attr_accessor :invoice_optante_simples_nacional_path # Se é optante do simples
|
63
|
+
attr_accessor :invoice_incentivador_cultural_path # Incentivo cultural
|
64
|
+
attr_accessor :invoice_outras_informacoes_path # Outras informações da nf
|
65
|
+
attr_accessor :invoice_item_lista_servico_path # Código do serviço prestado
|
66
|
+
attr_accessor :invoice_cnae_code_path # CNAE utilizado na nf
|
67
|
+
attr_accessor :invoice_description_path # Descrição da nf
|
68
|
+
attr_accessor :invoice_codigo_municipio_path # Código do municipio prestador do serviço
|
69
|
+
attr_accessor :invoice_total_services_path # Valor total dos serviços
|
70
|
+
attr_accessor :invoice_deductions_path # Valor das deduções
|
71
|
+
attr_accessor :invoice_valor_pis_path # Valor do PIS
|
72
|
+
attr_accessor :invoice_valor_cofins_path # Valor do COFINS
|
73
|
+
attr_accessor :invoice_valor_inss_path # Valor do INSS
|
74
|
+
attr_accessor :invoice_valor_ir_path # Valor do IR
|
75
|
+
attr_accessor :invoice_valor_csll_path # Valor da CSLL
|
76
|
+
attr_accessor :invoice_iss_retained_path # Se o ISS está retido
|
77
|
+
attr_accessor :invoice_outras_retencoes_path # Valor Outras retenções
|
78
|
+
attr_accessor :invoice_total_iss_path # Valor total de ISS
|
79
|
+
attr_accessor :invoice_base_calculation_path # Valor da base de cálculo
|
80
|
+
attr_accessor :invoice_iss_tax_rate_path # Percentual do imposto de ISS
|
81
|
+
attr_accessor :invoice_valor_liquido_path # Valor liquido da NFS
|
82
|
+
attr_accessor :invoice_desconto_condicionado_path # Valor do desconto condicionado
|
83
|
+
attr_accessor :invoice_desconto_incondicionado_path # Valor do desconto incondicionado
|
84
|
+
attr_accessor :invoice_responsavel_retencao_path # Responsável pela retenção
|
85
|
+
attr_accessor :invoice_numero_processo_path # Número do processo da NF
|
86
|
+
attr_accessor :invoice_municipio_incidencia_path # Código do municipio em que o serviço foi prestado
|
87
|
+
attr_accessor :invoice_orgao_gerador_municipio_path # Órgão gerador municipal da NFS
|
88
|
+
attr_accessor :invoice_orgao_gerador_uf_path # Órgão gerador estadual da NFS
|
89
|
+
attr_accessor :invoice_cancelamento_codigo_path # Código do cancelamento da NFS
|
90
|
+
attr_accessor :invoice_cancelamento_numero_nf_path # Número da NFS cancelada
|
91
|
+
attr_accessor :invoice_cancelamento_cnpj_path # CNPJ da NF cancelada
|
92
|
+
attr_accessor :invoice_cancelamento_municipio_path # Municipo da nota cancelada
|
93
|
+
attr_accessor :invoice_cancelamento_data_hora_path # Data e hora do cancelamento
|
94
|
+
attr_accessor :invoice_cancelamento_inscricao_municipal_path # Inscrição municipal da nota cancelada
|
95
|
+
attr_accessor :invoice_nfe_substituidora_path # Número da NFS substituidora
|
96
|
+
attr_accessor :invoice_codigo_obra_path # Código obra
|
97
|
+
attr_accessor :invoice_codigo_art_path # Código art
|
98
|
+
attr_accessor :invoice_emitente_cnpj_path # Cnpj do emitente da NFS
|
99
|
+
attr_accessor :invoice_emitente_inscricao_municipal_path # Inscricao municipal do emitente da NFS
|
100
|
+
attr_accessor :invoice_emitente_razao_social_path # Razao social do emitente da NFS
|
101
|
+
attr_accessor :invoice_emitente_nome_fantasia_path # Nome fantasia do emitente da NFS
|
102
|
+
attr_accessor :invoice_emitente_telefone_path # Telefone do emitente da NFS
|
103
|
+
attr_accessor :invoice_emitente_email_path # Email do emitente da NFS
|
104
|
+
attr_accessor :invoice_emitente_endereco_logradouro_path # Logradouro do emitente da NFS
|
105
|
+
attr_accessor :invoice_emitente_endereco_numero_path # Numero do emitente da NFS
|
106
|
+
attr_accessor :invoice_emitente_endereco_complemento_path # Complemento do emitente da NFS
|
107
|
+
attr_accessor :invoice_emitente_endereco_bairro_path # Bairro do emitente da NFS
|
108
|
+
attr_accessor :invoice_emitente_endereco_codigo_municipio_path # Codigo_municipio do emitente da NFS
|
109
|
+
attr_accessor :invoice_emitente_endereco_uf_path # Uf do emitente da NFS
|
110
|
+
attr_accessor :invoice_emitente_endereco_cep_path # Cep do emitente da NFS
|
111
|
+
attr_accessor :invoice_destinatario_cpf_path # Cpf do destinatário da NFS
|
112
|
+
attr_accessor :invoice_destinatario_cnpj_path # Cnpj do destinatário da NFS
|
113
|
+
attr_accessor :invoice_destinatario_inscricao_municipal_path # Inscricao municipal do destinatário da NFS
|
114
|
+
attr_accessor :invoice_destinatario_inscricao_estadual_path # Inscricao estadual do destinatário da NFS
|
115
|
+
attr_accessor :invoice_destinatario_inscricao_suframa_path # Inscricao suframa do destinatário da NFS
|
116
|
+
attr_accessor :invoice_destinatario_razao_social_path # Razao social do destinatário da NFS
|
117
|
+
attr_accessor :invoice_destinatario_telefone_path # Telefone do destinatário da NFS
|
118
|
+
attr_accessor :invoice_destinatario_email_path # Email do destinatário da NFS
|
119
|
+
attr_accessor :invoice_destinatario_endereco_logradouro_path # Logradouro do destinatário da NFS
|
120
|
+
attr_accessor :invoice_destinatario_endereco_numero_path # Numero do destinatário da NFS
|
121
|
+
attr_accessor :invoice_destinatario_endereco_complemento_path # Complemento do destinatário da NFS
|
122
|
+
attr_accessor :invoice_destinatario_endereco_bairro_path # Bairro do destinatário da NFS
|
123
|
+
attr_accessor :invoice_destinatario_endereco_codigo_municipio_path # Codigo_municipio do destinatário da NFS
|
124
|
+
attr_accessor :invoice_destinatario_endereco_uf_path # Uf do destinatário da NFS
|
125
|
+
attr_accessor :invoice_destinatario_endereco_cep_path # Cep do destinatário da NFS
|
126
|
+
|
127
|
+
####################### FIM DA DEFINIÇÃO DOS CAMINHOS ############################
|
128
|
+
######################################################################################
|
129
|
+
|
36
130
|
def response
|
37
131
|
@response ||= BrNfe::Response::Service::Default.new({
|
38
132
|
error_messages: get_message_for_path(message_errors_path),
|
@@ -55,13 +149,22 @@ module BrNfe
|
|
55
149
|
return @savon_body if @savon_body.present?
|
56
150
|
if body_xml_path.present?
|
57
151
|
@savon_body = Nori.new.parse(
|
58
|
-
|
152
|
+
body_converted_to_xml
|
59
153
|
).deep_transform_keys!{|k| k.to_s.underscore.to_sym}
|
60
154
|
else
|
61
155
|
@savon_body = savon_response.try(:body) || {}
|
62
156
|
end
|
63
157
|
end
|
64
158
|
|
159
|
+
# Converte o body da requisição em XML (String)
|
160
|
+
# Isso é necessário quando dentro do body vem a resposta com outro XML
|
161
|
+
#
|
162
|
+
# <b>Tipo de retorno: </b> _String_
|
163
|
+
#
|
164
|
+
def body_converted_to_xml
|
165
|
+
@body_converted_to_xml ||= canonicalize("#{find_value_for_keys(savon_response.try(:body), body_xml_path)}".encode(xml_encode).force_encoding('UTF-8'))
|
166
|
+
end
|
167
|
+
|
65
168
|
# Método utilizado para encontrar valores em um Hash
|
66
169
|
# passando o caminho do valor em um array onde contém as chaves
|
67
170
|
# ordenadas.
|
@@ -122,11 +225,11 @@ module BrNfe
|
|
122
225
|
if _messages.is_a?(Hash)
|
123
226
|
messages << get_message_for_hash(_messages)
|
124
227
|
elsif _messages.is_a?(Array)
|
125
|
-
_messages.map{|msg| messages << get_message_for_hash(msg) }
|
228
|
+
_messages.map{|msg| messages << get_message_for_hash(msg) if msg.present? }
|
126
229
|
elsif _messages.present?
|
127
230
|
messages << _messages
|
128
231
|
end
|
129
|
-
messages
|
232
|
+
messages.uniq
|
130
233
|
end
|
131
234
|
|
132
235
|
# Método utilizado para quando encontrar uam mensagem que seja um HAsh,
|
@@ -155,11 +258,11 @@ module BrNfe
|
|
155
258
|
#
|
156
259
|
def get_invoices
|
157
260
|
invoices = []
|
158
|
-
|
159
|
-
if
|
160
|
-
invoices << instance_invoice(
|
161
|
-
elsif
|
162
|
-
|
261
|
+
_invoices = find_value_for_keys(savon_body, path_with_root(invoices_path))
|
262
|
+
if _invoices.is_a?(Hash)
|
263
|
+
invoices << instance_invoice(_invoices)
|
264
|
+
elsif _invoices.is_a?(Array)
|
265
|
+
_invoices.map{|inv| invoices << instance_invoice(inv) }
|
163
266
|
end
|
164
267
|
invoices
|
165
268
|
end
|
@@ -208,7 +311,11 @@ module BrNfe
|
|
208
311
|
# <b>Tipo de retorno: </b> _String_
|
209
312
|
#
|
210
313
|
def get_xml_nf
|
211
|
-
|
314
|
+
if body_xml_path.present?
|
315
|
+
canonicalize(Nokogiri::XML.parse( body_converted_to_xml , nil, 'UTF-8').xpath(nfe_xml_path).to_xml)
|
316
|
+
else
|
317
|
+
canonicalize(Nokogiri::XML.parse(canonicalize(savon_response.doc.to_s), nil, 'UTF-8').xpath(nfe_xml_path).to_xml)
|
318
|
+
end
|
212
319
|
rescue
|
213
320
|
savon_response.xml
|
214
321
|
end
|
@@ -227,56 +334,126 @@ module BrNfe
|
|
227
334
|
# O parâmetro recebido deve ser o Hash representado pelo tipo de dados tcCompNfse(do manual NFS-e v1)
|
228
335
|
#
|
229
336
|
def instance_invoice(invoice_hash)
|
230
|
-
BrNfe::Response::Service::NotaFiscal.new({
|
337
|
+
nfe = BrNfe::Response::Service::NotaFiscal.new({
|
231
338
|
xml_nf: get_xml_nf.force_encoding('UTF-8'),
|
232
339
|
numero_nf: find_value_for_keys(invoice_hash, invoice_numero_nf_path ),
|
233
340
|
codigo_verificacao: find_value_for_keys(invoice_hash, invoice_codigo_verificacao_path ),
|
234
341
|
data_emissao: find_value_for_keys(invoice_hash, invoice_data_emissao_path ),
|
235
342
|
url_nf: find_value_for_keys(invoice_hash, invoice_url_nf_path ),
|
236
|
-
rps_numero: find_value_for_keys(invoice_hash, invoice_rps_numero_path ),
|
237
|
-
rps_serie: find_value_for_keys(invoice_hash, invoice_rps_serie_path ),
|
238
|
-
rps_tipo: find_value_for_keys(invoice_hash, invoice_rps_tipo_path ),
|
239
|
-
rps_situacao: find_value_for_keys(invoice_hash, invoice_rps_situacao_path ),
|
240
|
-
rps_substituido_numero: find_value_for_keys(invoice_hash, invoice_rps_substituido_numero_path ),
|
241
|
-
rps_substituido_serie: find_value_for_keys(invoice_hash, invoice_rps_substituido_serie_path ),
|
242
|
-
rps_substituido_tipo: find_value_for_keys(invoice_hash, invoice_rps_substituido_tipo_path ),
|
243
|
-
data_emissao_rps: find_value_for_keys(invoice_hash, invoice_data_emissao_rps_path ),
|
244
343
|
competencia: find_value_for_keys(invoice_hash, invoice_competencia_path ),
|
344
|
+
natureza_operacao: find_value_for_keys(invoice_hash, invoice_natureza_operacao_path ),
|
345
|
+
regime_especial_tributacao: find_value_for_keys(invoice_hash, invoice_regime_especial_tributacao_path ),
|
346
|
+
optante_simples_nacional: find_value_for_keys(invoice_hash, invoice_optante_simples_nacional_path ),
|
347
|
+
incentivador_cultural: find_value_for_keys(invoice_hash, invoice_incentivador_cultural_path ),
|
245
348
|
outras_informacoes: find_value_for_keys(invoice_hash, invoice_outras_informacoes_path ),
|
246
349
|
item_lista_servico: find_value_for_keys(invoice_hash, invoice_item_lista_servico_path ),
|
247
350
|
cnae_code: find_value_for_keys(invoice_hash, invoice_cnae_code_path ),
|
248
351
|
description: find_value_for_keys(invoice_hash, invoice_description_path ),
|
249
352
|
codigo_municipio: find_value_for_keys(invoice_hash, invoice_codigo_municipio_path ),
|
250
|
-
total_services: find_value_for_keys(invoice_hash, invoice_total_services_path ),
|
251
|
-
deductions: find_value_for_keys(invoice_hash, invoice_deductions_path ),
|
252
|
-
valor_pis: find_value_for_keys(invoice_hash, invoice_valor_pis_path ),
|
253
|
-
valor_cofins: find_value_for_keys(invoice_hash, invoice_valor_cofins_path ),
|
254
|
-
valor_inss: find_value_for_keys(invoice_hash, invoice_valor_inss_path ),
|
255
|
-
valor_ir: find_value_for_keys(invoice_hash, invoice_valor_ir_path ),
|
256
|
-
valor_csll: find_value_for_keys(invoice_hash, invoice_valor_csll_path ),
|
257
|
-
iss_retained: find_value_for_keys(invoice_hash, invoice_iss_retained_path ),
|
258
|
-
outras_retencoes: find_value_for_keys(invoice_hash, invoice_outras_retencoes_path ),
|
259
|
-
total_iss: find_value_for_keys(invoice_hash, invoice_total_iss_path ),
|
260
|
-
base_calculation: find_value_for_keys(invoice_hash, invoice_base_calculation_path ),
|
261
|
-
iss_tax_rate: find_value_for_keys(invoice_hash, invoice_iss_tax_rate_path ),
|
262
|
-
valor_liquido: find_value_for_keys(invoice_hash, invoice_valor_liquido_path ),
|
263
|
-
desconto_condicionado: find_value_for_keys(invoice_hash, invoice_desconto_condicionado_path ),
|
264
|
-
desconto_incondicionado: find_value_for_keys(invoice_hash, invoice_desconto_incondicionado_path ),
|
265
353
|
responsavel_retencao: find_value_for_keys(invoice_hash, invoice_responsavel_retencao_path ),
|
266
354
|
numero_processo: find_value_for_keys(invoice_hash, invoice_numero_processo_path ),
|
267
355
|
municipio_incidencia: find_value_for_keys(invoice_hash, invoice_municipio_incidencia_path ),
|
268
356
|
orgao_gerador_municipio: find_value_for_keys(invoice_hash, invoice_orgao_gerador_municipio_path ),
|
269
357
|
orgao_gerador_uf: find_value_for_keys(invoice_hash, invoice_orgao_gerador_uf_path ),
|
358
|
+
codigo_obra: find_value_for_keys(invoice_hash, invoice_codigo_obra_path ),
|
359
|
+
codigo_art: find_value_for_keys(invoice_hash, invoice_codigo_art_path ),
|
360
|
+
})
|
361
|
+
|
362
|
+
build_rps_fields_nfe(nfe, invoice_hash)
|
363
|
+
build_cancelation_fields_nfe(nfe, invoice_hash)
|
364
|
+
build_values_nfe(nfe, invoice_hash)
|
365
|
+
build_emitente_nfe(nfe, invoice_hash)
|
366
|
+
build_destinatario_nfe(nfe, invoice_hash)
|
367
|
+
nfe
|
368
|
+
end
|
369
|
+
|
370
|
+
def build_rps_fields_nfe(nfe, invoice_hash)
|
371
|
+
nfe.assign_attributes({
|
372
|
+
rps_numero: find_value_for_keys(invoice_hash, invoice_rps_numero_path ),
|
373
|
+
rps_serie: find_value_for_keys(invoice_hash, invoice_rps_serie_path ),
|
374
|
+
rps_tipo: find_value_for_keys(invoice_hash, invoice_rps_tipo_path ),
|
375
|
+
rps_situacao: find_value_for_keys(invoice_hash, invoice_rps_situacao_path ),
|
376
|
+
rps_substituido_numero: find_value_for_keys(invoice_hash, invoice_rps_substituido_numero_path ),
|
377
|
+
rps_substituido_serie: find_value_for_keys(invoice_hash, invoice_rps_substituido_serie_path ),
|
378
|
+
rps_substituido_tipo: find_value_for_keys(invoice_hash, invoice_rps_substituido_tipo_path ),
|
379
|
+
data_emissao_rps: find_value_for_keys(invoice_hash, invoice_data_emissao_rps_path ),
|
380
|
+
})
|
381
|
+
end
|
382
|
+
|
383
|
+
def build_cancelation_fields_nfe(nfe, invoice_hash)
|
384
|
+
nfe.assign_attributes({
|
270
385
|
cancelamento_codigo: find_value_for_keys(invoice_hash, invoice_cancelamento_codigo_path ),
|
271
386
|
cancelamento_numero_nf: find_value_for_keys(invoice_hash, invoice_cancelamento_numero_nf_path ),
|
272
387
|
cancelamento_cnpj: find_value_for_keys(invoice_hash, invoice_cancelamento_cnpj_path ),
|
273
388
|
cancelamento_inscricao_municipal: find_value_for_keys(invoice_hash, invoice_cancelamento_inscricao_municipal_path),
|
274
389
|
cancelamento_municipio: find_value_for_keys(invoice_hash, invoice_cancelamento_municipio_path ),
|
275
|
-
cancelamento_sucesso: find_value_for_keys(invoice_hash, invoice_cancelamento_sucesso_path ),
|
276
390
|
cancelamento_data_hora: find_value_for_keys(invoice_hash, invoice_cancelamento_data_hora_path ),
|
277
391
|
nfe_substituidora: find_value_for_keys(invoice_hash, invoice_nfe_substituidora_path ),
|
278
|
-
|
279
|
-
|
392
|
+
})
|
393
|
+
end
|
394
|
+
|
395
|
+
def build_values_nfe(nfe, invoice_hash)
|
396
|
+
nfe.assign_attributes({
|
397
|
+
total_services: find_value_for_keys(invoice_hash, invoice_total_services_path ),
|
398
|
+
deductions: find_value_for_keys(invoice_hash, invoice_deductions_path ),
|
399
|
+
valor_pis: find_value_for_keys(invoice_hash, invoice_valor_pis_path ),
|
400
|
+
valor_cofins: find_value_for_keys(invoice_hash, invoice_valor_cofins_path ),
|
401
|
+
valor_inss: find_value_for_keys(invoice_hash, invoice_valor_inss_path ),
|
402
|
+
valor_ir: find_value_for_keys(invoice_hash, invoice_valor_ir_path ),
|
403
|
+
valor_csll: find_value_for_keys(invoice_hash, invoice_valor_csll_path ),
|
404
|
+
iss_retained: find_value_for_keys(invoice_hash, invoice_iss_retained_path ),
|
405
|
+
outras_retencoes: find_value_for_keys(invoice_hash, invoice_outras_retencoes_path ),
|
406
|
+
total_iss: find_value_for_keys(invoice_hash, invoice_total_iss_path ),
|
407
|
+
base_calculation: find_value_for_keys(invoice_hash, invoice_base_calculation_path ),
|
408
|
+
iss_tax_rate: find_value_for_keys(invoice_hash, invoice_iss_tax_rate_path ),
|
409
|
+
valor_liquido: find_value_for_keys(invoice_hash, invoice_valor_liquido_path ),
|
410
|
+
desconto_condicionado: find_value_for_keys(invoice_hash, invoice_desconto_condicionado_path ),
|
411
|
+
desconto_incondicionado: find_value_for_keys(invoice_hash, invoice_desconto_incondicionado_path ),
|
412
|
+
})
|
413
|
+
end
|
414
|
+
|
415
|
+
def build_emitente_nfe(nfe, invoice_hash)
|
416
|
+
nfe.assign_attributes({
|
417
|
+
emitente: {
|
418
|
+
cnpj: find_value_for_keys(invoice_hash, invoice_emitente_cnpj_path ),
|
419
|
+
inscricao_municipal: find_value_for_keys(invoice_hash, invoice_emitente_inscricao_municipal_path ),
|
420
|
+
razao_social: find_value_for_keys(invoice_hash, invoice_emitente_razao_social_path ),
|
421
|
+
nome_fantasia: find_value_for_keys(invoice_hash, invoice_emitente_nome_fantasia_path ),
|
422
|
+
telefone: find_value_for_keys(invoice_hash, invoice_emitente_telefone_path ),
|
423
|
+
email: find_value_for_keys(invoice_hash, invoice_emitente_email_path ),
|
424
|
+
endereco: {
|
425
|
+
logradouro: find_value_for_keys(invoice_hash, invoice_emitente_endereco_logradouro_path ),
|
426
|
+
numero: find_value_for_keys(invoice_hash, invoice_emitente_endereco_numero_path ),
|
427
|
+
complemento: find_value_for_keys(invoice_hash, invoice_emitente_endereco_complemento_path ),
|
428
|
+
bairro: find_value_for_keys(invoice_hash, invoice_emitente_endereco_bairro_path ),
|
429
|
+
codigo_municipio: find_value_for_keys(invoice_hash, invoice_emitente_endereco_codigo_municipio_path ),
|
430
|
+
uf: find_value_for_keys(invoice_hash, invoice_emitente_endereco_uf_path ),
|
431
|
+
cep: find_value_for_keys(invoice_hash, invoice_emitente_endereco_cep_path ),
|
432
|
+
}
|
433
|
+
}
|
434
|
+
})
|
435
|
+
end
|
436
|
+
|
437
|
+
def build_destinatario_nfe(nfe, invoice_hash)
|
438
|
+
nfe.assign_attributes({
|
439
|
+
destinatario: {
|
440
|
+
cpf_cnpj: (find_value_for_keys(invoice_hash, invoice_destinatario_cpf_path) || find_value_for_keys(invoice_hash, invoice_destinatario_cnpj_path)),
|
441
|
+
inscricao_municipal: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_municipal_path),
|
442
|
+
inscricao_estadual: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_estadual_path),
|
443
|
+
inscricao_suframa: find_value_for_keys(invoice_hash, invoice_destinatario_inscricao_suframa_path),
|
444
|
+
razao_social: find_value_for_keys(invoice_hash, invoice_destinatario_razao_social_path),
|
445
|
+
telefone: find_value_for_keys(invoice_hash, invoice_destinatario_telefone_path),
|
446
|
+
email: find_value_for_keys(invoice_hash, invoice_destinatario_email_path),
|
447
|
+
endereco: {
|
448
|
+
logradouro: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_logradouro_path),
|
449
|
+
numero: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_numero_path),
|
450
|
+
complemento: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_complemento_path),
|
451
|
+
bairro: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_bairro_path),
|
452
|
+
codigo_municipio: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_codigo_municipio_path),
|
453
|
+
uf: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_uf_path),
|
454
|
+
cep: find_value_for_keys(invoice_hash, invoice_destinatario_endereco_cep_path),
|
455
|
+
}
|
456
|
+
}
|
280
457
|
})
|
281
458
|
end
|
282
459
|
|