br_nfe 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +27 -3
- data/LICENSE +1 -1
- data/README.markdown +10 -12
- data/Rakefile +13 -0
- data/br_nfe.gemspec +18 -21
- data/lib/br_nfe/active_model_base.rb +7 -1
- data/lib/br_nfe/base.rb +175 -37
- data/lib/br_nfe/endereco.rb +7 -1
- data/lib/br_nfe/helper/have_rps.rb +1 -1
- data/lib/br_nfe/helper/values_ts/service_v1.rb +313 -0
- data/lib/br_nfe/response/service/build_response.rb +286 -0
- data/lib/br_nfe/response/service/default.rb +185 -0
- data/lib/br_nfe/{servico/response → response/service}/nota_fiscal.rb +11 -10
- data/lib/br_nfe/response/service/paths/base.rb +93 -0
- data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +22 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +31 -0
- data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +36 -0
- data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +127 -0
- data/lib/br_nfe/service/base.rb +59 -0
- data/lib/br_nfe/service/betha/base.rb +8 -0
- data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +39 -0
- data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +34 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +30 -0
- data/lib/br_nfe/service/betha/v1/gateway.rb +21 -0
- data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +37 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +19 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +17 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +17 -0
- data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +20 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +18 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +29 -0
- data/lib/br_nfe/service/concerns/rules/recepcao_lote_rps.rb +50 -0
- data/lib/br_nfe/{servico → service}/intermediario.rb +1 -1
- data/lib/br_nfe/service/item.rb +70 -0
- data/lib/br_nfe/service/rps.rb +231 -0
- data/lib/br_nfe/service/sc/florianopolis/base.rb +25 -0
- data/lib/br_nfe/service/sc/florianopolis/cancellation.rb +30 -0
- data/lib/br_nfe/service/sc/florianopolis/emission_rps.rb +19 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_address.xml.slim +21 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_contact.xml.slim +3 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +9 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/cancellation.xml.slim +6 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +55 -0
- data/lib/br_nfe/service/sc/gaspar/cancela_nfse.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfs_por_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfse.rb +17 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado.rb +13 -0
- data/lib/br_nfe/service/thema/v1/base.rb +55 -0
- data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +49 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +47 -0
- data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +46 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +51 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +30 -0
- data/lib/br_nfe/service/xml/v1/_tc_contato.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_cpf_cnpj.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_construcao_civil.xml.slim +2 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_prestador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_servico.xml.slim +14 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_tomador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_endereco.xml.slim +13 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_intermediario_servico.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_orgao_gerador.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_prestador.xml.slim +3 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_rps.xml.slim +16 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_tomador.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_rps.xml.slim +47 -0
- data/lib/br_nfe/service/xml/v1/_tc_lote_rps.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_rps.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +48 -0
- data/lib/br_nfe/service/xml/v1/servico_cancelar_nfse_envio.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_envio.xml.slim +19 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_rps_envio.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_situacao_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_enviar_lote_rps_envio.xml.slim +9 -0
- data/lib/br_nfe/version.rb +2 -2
- data/lib/br_nfe/xml/_signed_info_sh1.xml.slim +9 -0
- data/lib/br_nfe/xml/signature_sh1.xml.slim +12 -0
- data/lib/br_nfe/xml/soap_env.xml.slim +3 -0
- data/lib/br_nfe.rb +72 -20
- data/test/br_nfe/base_test.rb +257 -108
- data/test/br_nfe/helper/have_intermediario_test.rb +2 -2
- data/test/br_nfe/helper/have_rps_test.rb +4 -4
- data/test/br_nfe/response/service/build_response_test.rb +377 -0
- data/test/br_nfe/response/service/default_test.rb +218 -0
- data/test/br_nfe/{servico/response → response/service}/nota_fiscal_test.rb +2 -2
- data/test/br_nfe/response/service/paths/base_test.rb +199 -0
- data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +25 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +34 -0
- data/test/br_nfe/response/service/paths/v1/tc_nfse_test.rb +122 -0
- data/test/br_nfe/service/base_test.rb +138 -0
- data/test/br_nfe/service/betha/base_test.rb +9 -0
- data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +60 -0
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +53 -0
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +49 -0
- data/test/br_nfe/service/betha/v1/gateway_test.rb +35 -0
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +84 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/xsd/TiposNFe_v01.xsd +583 -0
- data/test/br_nfe/service/betha/v1/xsd/nfse_v01.xsd +652 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_cancelar_nfse_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_envio_v01.xsd +28 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_situacao_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_enviar_lote_rps_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema.xsd +308 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema_v01.xsd +95 -0
- data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +15 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +36 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +42 -0
- data/test/br_nfe/{servico/base_test.rb → service/concerns/rules/recepcao_lote_rps_test.rb} +12 -4
- data/test/br_nfe/{servico → service}/intermediario_test.rb +1 -1
- data/test/br_nfe/service/item_test.rb +34 -0
- data/test/br_nfe/{servico → service}/rps_test.rb +191 -43
- data/test/br_nfe/service/sc/florianopolis/XSD/TiposNFSe_v2.0.xsd +863 -0
- data/test/br_nfe/service/sc/florianopolis/XSD/xmldsig-core-schema.xsd +309 -0
- data/test/br_nfe/service/sc/florianopolis/base_test.rb +20 -0
- data/test/br_nfe/service/sc/florianopolis/cancellation_test.rb +36 -0
- data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +145 -0
- data/test/br_nfe/service/sc/gaspar/cancela_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfs_por_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado_test.rb +22 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_test.rb +22 -0
- data/test/br_nfe/service/thema/v1/base_test.rb +65 -0
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +56 -0
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +62 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test_limitado.rb +50 -0
- data/test/br_nfe/service/thema/v1/xsd/nfse.xsd +656 -0
- data/test/br_nfe/service/thema/v1/xsd/xmldsig-core-schema20020212.xsd +318 -0
- data/test/br_nfe/service/xsd/v1/nfse.xsd +779 -0
- data/test/br_nfe/service/xsd/v1/xmldsig-core-schema20020212.xsd +316 -0
- data/test/cert.pfx +0 -0
- data/test/factories/base.rb +2 -0
- data/test/factories/destinatario.rb +3 -3
- data/test/factories/response/service/build_response.rb +5 -0
- data/test/factories/response/service/default.rb +10 -0
- data/test/factories/{servico/response → response/service}/nota_fiscal.rb +9 -9
- data/test/factories/service/base.rb +6 -0
- data/test/factories/service/betha/base.rb +4 -0
- data/test/factories/service/betha/v1/cancelamento_nfs.rb +9 -0
- data/test/factories/{servico → service}/betha/v1/consulta_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/betha/v1/consulta_nfse.rb +8 -0
- data/test/factories/{servico → service}/betha/v1/consulta_situacao_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/gateway.rb +1 -1
- data/test/factories/service/betha/v1/recepcao_lote_rps.rb +8 -0
- data/test/factories/{servico → service}/intermediario.rb +2 -2
- data/test/factories/service/item.rb +12 -0
- data/test/factories/service/rps.rb +50 -0
- data/test/factories/service/sc/florianopolis/base.rb +5 -0
- data/test/factories/service/sc/florianopolis/cancellation.rb +7 -0
- data/test/factories/service/sc/florianopolis/emission_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/cancela_nfse.rb +9 -0
- data/test/factories/service/sc/gaspar/consulta_lote_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/consulta_nfse.rb +8 -0
- data/test/factories/service/sc/gaspar/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps_limitado.rb +9 -0
- data/test/factories/service/thema/v1/base.rb +7 -0
- data/test/factories/service/thema/v1/cancela_nfse.rb +9 -0
- data/test/factories/service/thema/v1/consulta_lote_rps.rb +7 -0
- data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/thema/v1/consulta_nfse.rb +8 -0
- data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -0
- data/test/test_helper.rb +42 -0
- metadata +338 -121
- data/lib/br_nfe/servico/base.rb +0 -35
- data/lib/br_nfe/servico/betha/base.rb +0 -85
- data/lib/br_nfe/servico/betha/build_response.rb +0 -141
- data/lib/br_nfe/servico/betha/v1/build_response.rb +0 -121
- data/lib/br_nfe/servico/betha/v1/cancelamento_nfs.rb +0 -52
- data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +0 -33
- data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +0 -37
- data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +0 -51
- data/lib/br_nfe/servico/betha/v1/consulta_situacao_lote_rps.rb +0 -18
- data/lib/br_nfe/servico/betha/v1/gateway.rb +0 -125
- data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +0 -97
- data/lib/br_nfe/servico/betha/v2/build_response.rb +0 -159
- data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +0 -27
- data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/gateway.rb +0 -230
- data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +0 -52
- data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +0 -43
- data/lib/br_nfe/servico/response/default.rb +0 -34
- data/lib/br_nfe/servico/rps.rb +0 -108
- data/test/br_nfe/servico/betha/base_test.rb +0 -135
- data/test/br_nfe/servico/betha/v1/build_response_test.rb +0 -557
- data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +0 -72
- data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +0 -46
- data/test/br_nfe/servico/betha/v1/consulta_nfs_por_rps_test.rb +0 -68
- data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +0 -74
- data/test/br_nfe/servico/betha/v1/consulta_situacao_lote_rps_test.rb +0 -27
- data/test/br_nfe/servico/betha/v1/gateway_test.rb +0 -151
- data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +0 -249
- data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +0 -44
- data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +0 -38
- data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +0 -36
- data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +0 -51
- data/test/br_nfe/servico/betha/v2/gateway_test.rb +0 -372
- data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +0 -62
- data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +0 -108
- data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +0 -84
- data/test/br_nfe/servico/response/default_test.rb +0 -54
- data/test/factories/servico/base.rb +0 -5
- data/test/factories/servico/betha/base.rb +0 -5
- data/test/factories/servico/betha/v1/build_response.rb +0 -6
- data/test/factories/servico/betha/v1/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v1/consulta_nfse.rb +0 -8
- data/test/factories/servico/betha/v1/recepcao_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v2/consulta_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +0 -6
- data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -5
- data/test/factories/servico/betha/v2/gateway.rb +0 -5
- data/test/factories/servico/betha/v2/gera_nfse.rb +0 -6
- data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +0 -5
- data/test/factories/servico/betha/v2/substituicao_nfse.rb +0 -8
- data/test/factories/servico/response/default.rb +0 -10
- data/test/factories/servico/rps.rb +0 -44
data/lib/br_nfe/endereco.rb
CHANGED
@@ -13,7 +13,7 @@ module BrNfe
|
|
13
13
|
attr_accessor :complemento
|
14
14
|
attr_accessor :bairro
|
15
15
|
attr_accessor :nome_municipio
|
16
|
-
attr_accessor :codigo_municipio
|
16
|
+
attr_accessor :codigo_municipio # IBGE
|
17
17
|
attr_accessor :uf
|
18
18
|
attr_accessor :cep
|
19
19
|
attr_accessor :codigo_pais # defaul: 1058 (Brasil)
|
@@ -21,6 +21,12 @@ module BrNfe
|
|
21
21
|
|
22
22
|
validates :logradouro, :numero, :bairro, :codigo_municipio, :uf, :cep, presence: true
|
23
23
|
|
24
|
+
def is_present?
|
25
|
+
logradouro.present? || numero.present? || complemento.present? ||
|
26
|
+
bairro.present? || nome_municipio.present? || codigo_municipio.present? ||
|
27
|
+
cep.present?
|
28
|
+
end
|
29
|
+
|
24
30
|
def logradouro
|
25
31
|
"#{@logradouro}".to_valid_format_nf
|
26
32
|
end
|
@@ -0,0 +1,313 @@
|
|
1
|
+
module BrNfe
|
2
|
+
module Helper
|
3
|
+
module ValuesTs
|
4
|
+
module ServiceV1
|
5
|
+
|
6
|
+
# Número da Nota Fiscal de Serviço Eletrônica,
|
7
|
+
# formado pelo ano com 04 (quatro) dígitos e um
|
8
|
+
# número seqüencial com 11 posições – Formato
|
9
|
+
# AAAANNNNNNNNNNN.
|
10
|
+
#
|
11
|
+
def ts_numero_nfse value
|
12
|
+
BrNfe::Helper.only_number(value).max_size(15)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Código de verificação do número da nota
|
16
|
+
#
|
17
|
+
def ts_codigo_verificacao value
|
18
|
+
"#{value}".max_size(9)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Código de status do RPS
|
22
|
+
# 1 – Normal
|
23
|
+
# 2 – Cancelado
|
24
|
+
#
|
25
|
+
def ts_status_rps value
|
26
|
+
BrNfe::Helper.only_number(value).max_size(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Código de status do NFS-e
|
30
|
+
# 1 – Normal
|
31
|
+
# 2 – Cancelado
|
32
|
+
#
|
33
|
+
def ts_status_nfse value
|
34
|
+
BrNfe::Helper.only_number(value).max_size(1)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Código de natureza da operação
|
38
|
+
# 1 – Tributação no município
|
39
|
+
# 2 - Tributação fora do município
|
40
|
+
# 3 - Isenção
|
41
|
+
# 4 - Imune
|
42
|
+
# 5 –Exigibilidade suspensa por decisão judicial
|
43
|
+
# 6 – Exigibilidade suspensa por procedimento administrativo
|
44
|
+
#
|
45
|
+
def ts_natureza_operacao value
|
46
|
+
BrNfe::Helper.only_number(value).max_size(2)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Código de identificação do regime especial de tributação
|
50
|
+
# 1 – Microempresa municipal
|
51
|
+
# 2 - Estimativa
|
52
|
+
# 3 – Sociedade de profissionais
|
53
|
+
# 4 – Cooperativa
|
54
|
+
#
|
55
|
+
def ts_regime_especial_tributacao value
|
56
|
+
BrNfe::Helper.only_number(value).max_size(2)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Identificação de Sim/Não
|
60
|
+
# 1 - Sim
|
61
|
+
# 2 - Não
|
62
|
+
#
|
63
|
+
def ts_sim_nao value
|
64
|
+
value_true_false(value)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Quantidade de RPS do Lote
|
68
|
+
#
|
69
|
+
def ts_quantidade_rps value
|
70
|
+
BrNfe::Helper.only_number(value).max_size(4)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Número do RPS
|
74
|
+
#
|
75
|
+
def ts_numero_rps value
|
76
|
+
BrNfe::Helper.only_number(value).max_size(15)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Número de série do RPS
|
80
|
+
#
|
81
|
+
def ts_serie_rps value
|
82
|
+
"#{value}".max_size(5)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Código de tipo de RPS
|
86
|
+
# 1 - RPS
|
87
|
+
# 2 – Nota Fiscal Conjugada (Mista)
|
88
|
+
# 3 – Cupom
|
89
|
+
#
|
90
|
+
def ts_tipo_rps value
|
91
|
+
BrNfe::Helper.only_number(value).max_size(1)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Informações adicionais ao documento.
|
95
|
+
#
|
96
|
+
def ts_outras_informacoes value
|
97
|
+
"#{value}".max_size(255)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Valor monetário.
|
101
|
+
# Formato: 0.00 (ponto separando casa decimal)
|
102
|
+
# Ex: 1.234,56 = 1234.56
|
103
|
+
# 1.000,00 = 1000.00
|
104
|
+
# 1.000,00 = 1000
|
105
|
+
#
|
106
|
+
def ts_valor value
|
107
|
+
"#{value_monetary(value, 2)}".max_size(17)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Código de item da lista de serviço
|
111
|
+
#
|
112
|
+
def ts_item_lista_servico value
|
113
|
+
BrNfe::Helper.only_number(value).max_size(5).rjust(4, '0')
|
114
|
+
end
|
115
|
+
|
116
|
+
# Código CNAE
|
117
|
+
#
|
118
|
+
def ts_codigo_cnae value
|
119
|
+
BrNfe::Helper.only_number(value).max_size(7)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Código de Tributação
|
123
|
+
#
|
124
|
+
def ts_codigo_tributacao value
|
125
|
+
"#{value}".max_size(20)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Alíquota. Valor percentual.
|
129
|
+
# Formato: 0.0000
|
130
|
+
# Ex: 1% = 0.01
|
131
|
+
# 25,5% = 0.255
|
132
|
+
# 100% = 1.0000 ou 1
|
133
|
+
#
|
134
|
+
def ts_aliquota value
|
135
|
+
"#{value_monetary(value, 4)}".max_size(9)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Discriminação do conteúdo da NFS-e
|
139
|
+
#
|
140
|
+
def ts_discriminacao value
|
141
|
+
"#{value}".max_size(2_000).remove_accents
|
142
|
+
end
|
143
|
+
|
144
|
+
# Código de identificação do município conforme tabela do IBGE
|
145
|
+
#
|
146
|
+
def ts_codigo_municipio_ibge value
|
147
|
+
BrNfe::Helper.only_number(value).max_size(7)
|
148
|
+
end
|
149
|
+
|
150
|
+
# Número de inscrição municipal
|
151
|
+
#
|
152
|
+
def ts_inscricao_municipal value
|
153
|
+
"#{value}".max_size(15)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Razão Social do contribuinte
|
157
|
+
#
|
158
|
+
def ts_razao_social value
|
159
|
+
"#{value}".max_size(115)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Nome fantasia
|
163
|
+
#
|
164
|
+
def ts_nome_fantasia value
|
165
|
+
"#{value}".max_size(60)
|
166
|
+
end
|
167
|
+
|
168
|
+
# Número CNPJ
|
169
|
+
#
|
170
|
+
def ts_cnpj value
|
171
|
+
"#{BrNfe::Helper::CpfCnpj.new(value).sem_formatacao}".max_size(14)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Endereço / rua
|
175
|
+
#
|
176
|
+
def ts_endereco value
|
177
|
+
"#{value}".max_size(125)
|
178
|
+
end
|
179
|
+
|
180
|
+
# Número do endereço
|
181
|
+
#
|
182
|
+
def ts_numero_endereco value
|
183
|
+
"#{value}".max_size(10)
|
184
|
+
end
|
185
|
+
|
186
|
+
# Complemento de endereço
|
187
|
+
#
|
188
|
+
def ts_complemento_endereco value
|
189
|
+
"#{value}".max_size(60)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Bairro
|
193
|
+
#
|
194
|
+
def ts_bairro value
|
195
|
+
"#{value}".max_size(60)
|
196
|
+
end
|
197
|
+
|
198
|
+
# Sigla da unidade federativa
|
199
|
+
#
|
200
|
+
def ts_uf value
|
201
|
+
"#{value}".max_size(2)
|
202
|
+
end
|
203
|
+
|
204
|
+
# Número do CEP
|
205
|
+
#
|
206
|
+
def ts_cep value
|
207
|
+
BrNfe::Helper.only_number(value).max_size(8)
|
208
|
+
end
|
209
|
+
|
210
|
+
# E-mail
|
211
|
+
#
|
212
|
+
def ts_email value
|
213
|
+
"#{value}".max_size(80)
|
214
|
+
end
|
215
|
+
|
216
|
+
# Telefone
|
217
|
+
#
|
218
|
+
def ts_telefone value
|
219
|
+
"#{value}".max_size(11)
|
220
|
+
end
|
221
|
+
|
222
|
+
# Número CPF
|
223
|
+
#
|
224
|
+
def ts_cpf value
|
225
|
+
"#{BrNfe::Helper::CpfCnpj.new(value).sem_formatacao}".max_size(11)
|
226
|
+
end
|
227
|
+
|
228
|
+
# Indicador de uso de CPF ou CNPJ
|
229
|
+
# 1 – CPF
|
230
|
+
# 2 – CNPJ
|
231
|
+
# 3 – Não Informado
|
232
|
+
#
|
233
|
+
def ts_indicacao_cpf_cnpj
|
234
|
+
BrNfe::Helper.only_number(value).max_size(1)
|
235
|
+
end
|
236
|
+
|
237
|
+
# Código de Obra
|
238
|
+
#
|
239
|
+
def ts_codigo_obra value
|
240
|
+
"#{value}".max_size(15)
|
241
|
+
end
|
242
|
+
|
243
|
+
# Código ART
|
244
|
+
#
|
245
|
+
def ts_art value
|
246
|
+
"#{value}".max_size(15)
|
247
|
+
end
|
248
|
+
|
249
|
+
# Número do Lote de RPS
|
250
|
+
#
|
251
|
+
def ts_numero_lote value
|
252
|
+
BrNfe::Helper.only_number(value).max_size(15)
|
253
|
+
end
|
254
|
+
|
255
|
+
# Número do protocolo de recebimento do RPS
|
256
|
+
#
|
257
|
+
def ts_numero_protocolo value
|
258
|
+
"#{value}".max_size(50)
|
259
|
+
end
|
260
|
+
|
261
|
+
# Código de situação de lote de RPS
|
262
|
+
# 1 – Não Recebido
|
263
|
+
# 2 – Não Processado
|
264
|
+
# 3 – Processado com Erro
|
265
|
+
# 4 – Processado com Sucesso
|
266
|
+
#
|
267
|
+
def ts_situacao_lote_rps value
|
268
|
+
BrNfe::Helper.only_number(value).max_size(1)
|
269
|
+
end
|
270
|
+
|
271
|
+
# Código de mensagem de retorno de serviço.
|
272
|
+
#
|
273
|
+
def ts_codigo_mensagem_alerta value
|
274
|
+
"#{value}".max_size(4)
|
275
|
+
end
|
276
|
+
|
277
|
+
# Descrição da mensagem de retorno de serviço.
|
278
|
+
#
|
279
|
+
def ts_descricao_mensagem_alerta value
|
280
|
+
"#{value}".max_size(200)
|
281
|
+
end
|
282
|
+
|
283
|
+
# Código de cancelamento com base na tabela de Erros e alertas.
|
284
|
+
#
|
285
|
+
def ts_codigo_cancelamento_nfse value
|
286
|
+
"#{value}".max_size(4)
|
287
|
+
end
|
288
|
+
|
289
|
+
# Atributo de identificação da tag a ser assinada no documento XML
|
290
|
+
#
|
291
|
+
def ts_id_tag value
|
292
|
+
"#{value}".max_size(255)
|
293
|
+
end
|
294
|
+
|
295
|
+
# Atributo do formato Datetime
|
296
|
+
# Não está identificado na documentação porém é utilizado
|
297
|
+
# para identificar valores Datetime
|
298
|
+
#
|
299
|
+
def ts_datetime value
|
300
|
+
value_date_time(value)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Atributo do formato Date
|
304
|
+
# Não está identificado na documentação porém é utilizado
|
305
|
+
# para identificar valores Date
|
306
|
+
#
|
307
|
+
def ts_date value
|
308
|
+
value_date(value)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
@@ -0,0 +1,286 @@
|
|
1
|
+
#encoding UTF-8
|
2
|
+
module BrNfe
|
3
|
+
module Response
|
4
|
+
module Service
|
5
|
+
class BuildResponse < BrNfe::ActiveModelBase
|
6
|
+
# 1: A resposta da requisição soap
|
7
|
+
attr_accessor :savon_response
|
8
|
+
|
9
|
+
# 2: O module que será incluido contendo os métodos com os
|
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
|
14
|
+
attr_accessor :keys_root_path
|
15
|
+
|
16
|
+
# 4: Caminho para encontrar o XML da NF-e
|
17
|
+
attr_accessor :nfe_xml_path
|
18
|
+
|
19
|
+
# 5: Alguns Webservices trazem dentro do body da resposta SOAp
|
20
|
+
# outro XML com as informações necessárias.
|
21
|
+
# Quando isso aocntece é preciso converter esse XML para um HASH
|
22
|
+
# para que possamos encontrar os valores necessários.
|
23
|
+
attr_accessor :body_xml_path
|
24
|
+
|
25
|
+
def initialize(attributes = {})
|
26
|
+
super(attributes)
|
27
|
+
include_module!
|
28
|
+
end
|
29
|
+
|
30
|
+
# Método utilizado para incluir módules dinâmicos
|
31
|
+
#
|
32
|
+
def include_module!
|
33
|
+
self.class.send(:include, module_methods) if module_methods
|
34
|
+
end
|
35
|
+
|
36
|
+
def response
|
37
|
+
@response ||= BrNfe::Response::Service::Default.new({
|
38
|
+
error_messages: get_message_for_path(message_errors_path),
|
39
|
+
notas_fiscais: get_invoices,
|
40
|
+
protocolo: get_protocol,
|
41
|
+
data_recebimento: get_received_date,
|
42
|
+
numero_lote: get_lot_number,
|
43
|
+
situation: get_situation,
|
44
|
+
original_xml: savon_response.xml.force_encoding('UTF-8'),
|
45
|
+
cancelation_date_time: get_cancelation_date_time
|
46
|
+
})
|
47
|
+
end
|
48
|
+
|
49
|
+
# Retorna o valor encontrado no body da resposta Savon
|
50
|
+
# em formato de hash
|
51
|
+
#
|
52
|
+
# <b>Tipo de retorno: </b> _Hash_
|
53
|
+
#
|
54
|
+
def savon_body
|
55
|
+
return @savon_body if @savon_body.present?
|
56
|
+
if body_xml_path.present?
|
57
|
+
@savon_body = Nori.new.parse(
|
58
|
+
find_value_for_keys(savon_response.try(:body), body_xml_path)
|
59
|
+
).deep_transform_keys!{|k| k.to_s.underscore.to_sym}
|
60
|
+
else
|
61
|
+
@savon_body = savon_response.try(:body) || {}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Método utilizado para encontrar valores em um Hash
|
66
|
+
# passando o caminho do valor em um array onde contém as chaves
|
67
|
+
# ordenadas.
|
68
|
+
# Recebe 2 parêmntros:
|
69
|
+
# 1º um o hash onde contém o valor a ser encontrado
|
70
|
+
# 2º um array com as chaves em sequencia formando o caminho para encontrar o valor.
|
71
|
+
#
|
72
|
+
# A funcionalidade desse método funciona parecido com o `.dig` da classe Hash do
|
73
|
+
# Ruby 2.3.0.
|
74
|
+
# A diferença é que no caso de exmeplo a seguir não apresenta uma excessão par ao usuário
|
75
|
+
# hash = {v1: {v2: 'valor string'}}
|
76
|
+
# hash.dig(:v1, :v2, :v3) <- Dá erro
|
77
|
+
# find_value_for_keys(hash, [:v1, :v2, :v3] <- Retorna nil e não da erro
|
78
|
+
#
|
79
|
+
# <b>Tipo de retorno: </b> _Anything_
|
80
|
+
#
|
81
|
+
def find_value_for_keys(hash, keys)
|
82
|
+
return if keys.blank?
|
83
|
+
keys = [keys] unless keys.is_a?(Array)
|
84
|
+
|
85
|
+
result = hash
|
86
|
+
keys.each do |key|
|
87
|
+
if result.is_a?(Hash)
|
88
|
+
result = result[key]
|
89
|
+
else
|
90
|
+
result = nil
|
91
|
+
break
|
92
|
+
end
|
93
|
+
end
|
94
|
+
result
|
95
|
+
end
|
96
|
+
|
97
|
+
# Quando para encontrar o valor de uma determinada chave
|
98
|
+
# é necessaŕio percorer o hash de retorno dês do inicio do mesmo.
|
99
|
+
# Como a mensagem tem uma chave 'root' padrão e pode ser diferente
|
100
|
+
# para cada orgaao emissor, é setado uma valor na variavel keys_root_path
|
101
|
+
# para que não seja necessário ficar setando a mesma chave em todos os
|
102
|
+
# métodos utilizados para encontrar determinado valor
|
103
|
+
#
|
104
|
+
# <b>Tipo de retorno: </b> _Array_
|
105
|
+
#
|
106
|
+
def path_with_root(path)
|
107
|
+
return if path.blank?
|
108
|
+
keys_root_path + [path].flatten
|
109
|
+
end
|
110
|
+
|
111
|
+
# Método que retorna as mensagens de retorno da requisição
|
112
|
+
# Quando procurar a mensagem a mesma pode retornar em 3 formatos:
|
113
|
+
# Hash: Onde encontrou apenas 1 mensagem com Codigo, Mensagem e Solução
|
114
|
+
# Array: Onde encontrou mais de uma mensagem com Codigo, Mensagem e Solução
|
115
|
+
# String: Onde encontrou uma unica mensagem de texto
|
116
|
+
#
|
117
|
+
# <b>Tipo de retorno: </b> _Array_
|
118
|
+
#
|
119
|
+
def get_message_for_path(msg_path)
|
120
|
+
messages = []
|
121
|
+
_messages = find_value_for_keys(savon_body, path_with_root(msg_path) )
|
122
|
+
if _messages.is_a?(Hash)
|
123
|
+
messages << get_message_for_hash(_messages)
|
124
|
+
elsif _messages.is_a?(Array)
|
125
|
+
_messages.map{|msg| messages << get_message_for_hash(msg) }
|
126
|
+
elsif _messages.present?
|
127
|
+
messages << _messages
|
128
|
+
end
|
129
|
+
messages
|
130
|
+
end
|
131
|
+
|
132
|
+
# Método utilizado para quando encontrar uam mensagem que seja um HAsh,
|
133
|
+
# onde nesse caso a mensagem terá um codigo de erro, uma mensagem, e uma
|
134
|
+
# mensagem de solução
|
135
|
+
#
|
136
|
+
# <b>Tipo de retorno: </b> _hash_
|
137
|
+
#
|
138
|
+
def get_message_for_hash(msg_hash)
|
139
|
+
{
|
140
|
+
code: find_value_for_keys(msg_hash, message_code_key),
|
141
|
+
message: find_value_for_keys(msg_hash, message_msg_key),
|
142
|
+
solution: find_value_for_keys(msg_hash, message_solution_key)
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
# Método que retorna as notas fiscais emitidas.
|
147
|
+
# Como pode ser que retorne mais de uma NF, a busca pela NF
|
148
|
+
# pode retornar um Array ou um Hash.
|
149
|
+
# Se retornar um array é porque existe mais de uma NFE, então é necessario
|
150
|
+
# percorer com um loop e instanciar cada nota com seus valores.
|
151
|
+
# Se retornar um Hash é porque tem apenas uma NFe, e nesse caso
|
152
|
+
# irá instanciar apenas a nfe encontrada.
|
153
|
+
#
|
154
|
+
# <b>Tipo de retorno: </b> _Array_
|
155
|
+
#
|
156
|
+
def get_invoices
|
157
|
+
invoices = []
|
158
|
+
_inoices = find_value_for_keys(savon_body, path_with_root(invoices_path))
|
159
|
+
if _inoices.is_a?(Hash)
|
160
|
+
invoices << instance_invoice(_inoices)
|
161
|
+
elsif _inoices.is_a?(Array)
|
162
|
+
_inoices.map{|inv| invoices << instance_invoice(inv) }
|
163
|
+
end
|
164
|
+
invoices
|
165
|
+
end
|
166
|
+
|
167
|
+
# Método utilizado para pegar protocolo de solicitação de
|
168
|
+
# processamento do RPS.
|
169
|
+
# Esse protocolo é utilizado posteriormente para consultar se
|
170
|
+
# o RPS já foi processado
|
171
|
+
#
|
172
|
+
# <b>Tipo de retorno: </b> _String_
|
173
|
+
#
|
174
|
+
def get_protocol
|
175
|
+
find_value_for_keys(savon_body, path_with_root(protocol_path))
|
176
|
+
end
|
177
|
+
|
178
|
+
# Método utilizado para pegar a situação do RPS
|
179
|
+
#
|
180
|
+
# <b>Tipo de retorno: </b> _Symbol_
|
181
|
+
#
|
182
|
+
def get_situation
|
183
|
+
situation_value = find_value_for_keys(savon_body, path_with_root(situation_path))
|
184
|
+
situation_value = situation_key_values[situation_value.to_s.strip] if situation_value.present?
|
185
|
+
situation_value
|
186
|
+
end
|
187
|
+
|
188
|
+
# Método utilizado para pegar a data de recebimento do lote
|
189
|
+
#
|
190
|
+
# <b>Tipo de retorno: </b> _String_
|
191
|
+
#
|
192
|
+
def get_received_date
|
193
|
+
find_value_for_keys(savon_body, path_with_root(received_date_path))
|
194
|
+
end
|
195
|
+
|
196
|
+
# Método utilizado para pegar o número do lote RPS
|
197
|
+
#
|
198
|
+
# <b>Tipo de retorno: </b> _String_
|
199
|
+
#
|
200
|
+
def get_lot_number
|
201
|
+
find_value_for_keys(savon_body, path_with_root(lot_number_path))
|
202
|
+
end
|
203
|
+
|
204
|
+
# Método utilizado para pegar o XML da NF
|
205
|
+
# É necessário canonicalizar o document para que seja colocado os
|
206
|
+
# namespaces nas tags corretas. Caso contrário o XML não irá abrir.
|
207
|
+
#
|
208
|
+
# <b>Tipo de retorno: </b> _String_
|
209
|
+
#
|
210
|
+
def get_xml_nf
|
211
|
+
canonicalize(Nokogiri::XML.parse(canonicalize(savon_response.doc.to_s), nil, 'UTF-8').xpath(nfe_xml_path).to_xml)
|
212
|
+
rescue
|
213
|
+
savon_response.xml
|
214
|
+
end
|
215
|
+
|
216
|
+
# Método utilizado para pegar o valor da data e hora de cancelmaento
|
217
|
+
# Só é utilizado para cancelar a NF-e
|
218
|
+
#
|
219
|
+
# <b>Tipo de retorno: </b> _DateTime_ OU _Nil_ OU _String_
|
220
|
+
#
|
221
|
+
def get_cancelation_date_time
|
222
|
+
find_value_for_keys(savon_body, path_with_root(cancelation_date_time_path)) if cancelation_date_time_path.present?
|
223
|
+
end
|
224
|
+
|
225
|
+
# Método responsável por instanciar a nota fiscal de acordo com o hash
|
226
|
+
# passado por parêmetro
|
227
|
+
# O parâmetro recebido deve ser o Hash representado pelo tipo de dados tcCompNfse(do manual NFS-e v1)
|
228
|
+
#
|
229
|
+
def instance_invoice(invoice_hash)
|
230
|
+
BrNfe::Response::Service::NotaFiscal.new({
|
231
|
+
xml_nf: get_xml_nf.force_encoding('UTF-8'),
|
232
|
+
numero_nf: find_value_for_keys(invoice_hash, invoice_numero_nf_path ),
|
233
|
+
codigo_verificacao: find_value_for_keys(invoice_hash, invoice_codigo_verificacao_path ),
|
234
|
+
data_emissao: find_value_for_keys(invoice_hash, invoice_data_emissao_path ),
|
235
|
+
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
|
+
competencia: find_value_for_keys(invoice_hash, invoice_competencia_path ),
|
245
|
+
outras_informacoes: find_value_for_keys(invoice_hash, invoice_outras_informacoes_path ),
|
246
|
+
item_lista_servico: find_value_for_keys(invoice_hash, invoice_item_lista_servico_path ),
|
247
|
+
cnae_code: find_value_for_keys(invoice_hash, invoice_cnae_code_path ),
|
248
|
+
description: find_value_for_keys(invoice_hash, invoice_description_path ),
|
249
|
+
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
|
+
responsavel_retencao: find_value_for_keys(invoice_hash, invoice_responsavel_retencao_path ),
|
266
|
+
numero_processo: find_value_for_keys(invoice_hash, invoice_numero_processo_path ),
|
267
|
+
municipio_incidencia: find_value_for_keys(invoice_hash, invoice_municipio_incidencia_path ),
|
268
|
+
orgao_gerador_municipio: find_value_for_keys(invoice_hash, invoice_orgao_gerador_municipio_path ),
|
269
|
+
orgao_gerador_uf: find_value_for_keys(invoice_hash, invoice_orgao_gerador_uf_path ),
|
270
|
+
cancelamento_codigo: find_value_for_keys(invoice_hash, invoice_cancelamento_codigo_path ),
|
271
|
+
cancelamento_numero_nf: find_value_for_keys(invoice_hash, invoice_cancelamento_numero_nf_path ),
|
272
|
+
cancelamento_cnpj: find_value_for_keys(invoice_hash, invoice_cancelamento_cnpj_path ),
|
273
|
+
cancelamento_inscricao_municipal: find_value_for_keys(invoice_hash, invoice_cancelamento_inscricao_municipal_path),
|
274
|
+
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
|
+
cancelamento_data_hora: find_value_for_keys(invoice_hash, invoice_cancelamento_data_hora_path ),
|
277
|
+
nfe_substituidora: find_value_for_keys(invoice_hash, invoice_nfe_substituidora_path ),
|
278
|
+
codigo_obra: find_value_for_keys(invoice_hash, invoice_codigo_obra_path ),
|
279
|
+
codigo_art: find_value_for_keys(invoice_hash, invoice_codigo_art_path )
|
280
|
+
})
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|