br_nfe 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/Gemfile.lock +1 -1
- data/README.markdown +264 -106
- data/lib/br_nfe/{helper → association}/have_address.rb +1 -1
- data/lib/br_nfe/{helper → association}/have_condicao_pagamento.rb +1 -1
- data/lib/br_nfe/association/have_destinatario.rb +22 -0
- data/lib/br_nfe/association/have_emitente.rb +24 -0
- data/lib/br_nfe/base.rb +37 -27
- data/lib/br_nfe/condicao_pagamento.rb +2 -0
- data/lib/br_nfe/constants.rb +33 -0
- data/lib/br_nfe/endereco.rb +10 -0
- data/lib/br_nfe/helper/string_methods.rb +4 -0
- data/lib/br_nfe/{emitente.rb → person.rb} +11 -7
- data/lib/br_nfe/product/base.rb +82 -0
- data/lib/br_nfe/product/consulta_status_servico.rb +35 -0
- data/lib/br_nfe/product/emitente.rb +8 -0
- data/lib/br_nfe/product/gateway/base.rb +62 -0
- data/lib/br_nfe/product/gateway/web_service_svrs.rb +39 -0
- data/lib/br_nfe/product/value_nf.rb +9 -0
- data/lib/br_nfe/product/xml/soap_env.xml.slim +8 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/consReciNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/consSitNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/consStatServ_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/enviNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/inutNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsSitNFe_v3.10.xsd +502 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/leiauteConsStatServ_v3.10.xsd +98 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/leiauteInutNFe_v3.10.xsd +193 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/leiauteNFe_v3.10.xsd +6060 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/nfe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/procInutNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/procNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/retConsReciNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/retConsSitNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/retConsStatServ_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/retEnviNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/retInutNFe_v3.10.xsd +9 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/tiposBasico_v3.10.xsd +571 -0
- data/lib/br_nfe/product/xml/v3_10/XSD/xmldsig-core-schema_v1.01.xsd +98 -0
- data/lib/br_nfe/product/xml/v3_10/consulta_status_servico.xml.slim +4 -0
- data/lib/br_nfe/service/association/have_intermediario.rb +26 -0
- data/lib/br_nfe/service/association/have_rps.rb +36 -0
- data/lib/br_nfe/service/base.rb +24 -20
- data/lib/br_nfe/service/betha/v1/cancela_nfse.rb +43 -0
- data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +20 -6
- data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +17 -6
- data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +16 -5
- data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +15 -6
- data/lib/br_nfe/service/betha/v1/gateway.rb +4 -0
- data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +13 -5
- data/lib/br_nfe/service/betha/v1/xml/_tc_identificacao_prestador.xml.slim +3 -0
- data/lib/br_nfe/service/betha/v1/xml/_tc_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +8 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +1 -1
- data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +5 -2
- data/lib/br_nfe/service/concerns/values_ts/service_v1.rb +319 -0
- data/lib/br_nfe/service/destinatario.rb +7 -0
- data/lib/br_nfe/service/emitente.rb +8 -0
- data/lib/br_nfe/service/intermediario.rb +1 -12
- data/lib/br_nfe/service/item.rb +7 -7
- data/lib/br_nfe/service/response/build/base.rb +166 -0
- data/lib/br_nfe/service/response/build/cancelamento.rb +62 -0
- data/lib/br_nfe/service/response/build/consulta_lote_rps.rb +25 -0
- data/lib/br_nfe/service/response/build/consulta_nfs_por_rps.rb +25 -0
- data/lib/br_nfe/service/response/build/consulta_nfse.rb +24 -0
- data/lib/br_nfe/service/response/build/consulta_situacao_lote_rps.rb +56 -0
- data/lib/br_nfe/service/response/build/invoice_build.rb +359 -0
- data/lib/br_nfe/service/response/build/recepcao_lote_rps.rb +69 -0
- data/lib/br_nfe/service/response/cancelamento.rb +22 -0
- data/lib/br_nfe/service/response/consulta_lote_rps.rb +18 -0
- data/lib/br_nfe/service/response/consulta_nfs_por_rps.rb +10 -0
- data/lib/br_nfe/service/response/consulta_nfse.rb +10 -0
- data/lib/br_nfe/service/response/consulta_situacao_lote_rps.rb +74 -0
- data/lib/br_nfe/service/response/default.rb +93 -0
- data/lib/br_nfe/{response/service → service/response}/nota_fiscal.rb +19 -12
- data/lib/br_nfe/service/response/paths/v1/tc_nfse.rb +275 -0
- data/lib/br_nfe/service/response/recepcao_lote_rps.rb +35 -0
- data/lib/br_nfe/service/rps.rb +30 -27
- data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +4 -4
- data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +4 -4
- data/lib/br_nfe/service/simpliss/v1/cancela_nfse.rb +16 -6
- data/lib/br_nfe/service/simpliss/v1/consulta_lote_rps.rb +20 -12
- data/lib/br_nfe/service/simpliss/v1/consulta_nfs_por_rps.rb +21 -6
- data/lib/br_nfe/service/simpliss/v1/consulta_nfse.rb +20 -6
- data/lib/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps.rb +17 -6
- data/lib/br_nfe/service/simpliss/v1/recepcao_lote_rps.rb +16 -4
- data/lib/br_nfe/service/simpliss/v1/xml/_tc_item_servico.xml.slim +2 -2
- data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +21 -19
- data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +21 -19
- data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +25 -18
- data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +20 -20
- data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +14 -20
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +11 -16
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -6
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +1 -1
- data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +1 -1
- data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +11 -11
- data/lib/br_nfe/version.rb +1 -1
- data/lib/br_nfe.rb +62 -62
- data/test/br_nfe/association/have_address_test.rb +64 -0
- data/test/br_nfe/association/have_condicao_pagamento_test.rb +75 -0
- data/test/br_nfe/association/have_destinatario_test.rb +76 -0
- data/test/br_nfe/association/have_emitente_test.rb +80 -0
- data/test/br_nfe/base_test.rb +96 -61
- data/test/br_nfe/endereco_test.rb +21 -0
- data/test/br_nfe/person_test.rb +55 -0
- data/test/br_nfe/product/base_test.rb +150 -0
- data/test/br_nfe/product/consulta_status_servico_test.rb +59 -0
- data/test/br_nfe/product/emitente_test.rb +29 -0
- data/test/br_nfe/product/gateway/base_test.rb +16 -0
- data/test/br_nfe/product/gateway/web_service_svrs_test.rb +36 -0
- data/test/br_nfe/service/association/have_intermediario_test.rb +80 -0
- data/test/br_nfe/service/association/have_rps_test.rb +62 -0
- data/test/br_nfe/service/base_test.rb +42 -42
- data/test/br_nfe/service/betha/v1/cancela_nfse_test.rb +90 -0
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +105 -5
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +103 -5
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +114 -5
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +118 -5
- data/test/br_nfe/service/betha/v1/gateway_test.rb +1 -1
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +51 -5
- data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +2 -2
- data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +2 -7
- data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +24 -3
- data/test/br_nfe/service/concerns/rules/recepcao_lote_rps_test.rb +1 -1
- data/test/br_nfe/{helper → service/concerns}/values_ts/service_v1_test.rb +2 -2
- data/test/br_nfe/{destinatario_test.rb → service/destinatario_test.rb} +3 -4
- data/test/br_nfe/service/emitente_test.rb +29 -0
- data/test/br_nfe/service/item_test.rb +14 -14
- data/test/br_nfe/service/response/build/base_test.rb +80 -0
- data/test/br_nfe/{response/service → service/response}/default_test.rb +1 -82
- data/test/br_nfe/service/response/nota_fiscal_test.rb +59 -0
- data/test/br_nfe/{response/service → service/response}/paths/v1/tc_nfse_test.rb +10 -10
- data/test/br_nfe/service/rps_test.rb +107 -138
- data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +9 -9
- data/test/br_nfe/service/simpliss/v1/base_test.rb +1 -1
- data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +7 -10
- data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +11 -18
- data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +11 -18
- data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +11 -18
- data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +7 -11
- data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +3 -9
- data/test/br_nfe/service/thema/v1/base_test.rb +1 -1
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +7 -14
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +6 -17
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +6 -13
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +11 -18
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +7 -11
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +1 -5
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +3 -9
- data/test/factories/base.rb +0 -1
- data/test/factories/{emitente.rb → person.rb} +1 -1
- data/test/factories/product/base.rb +12 -0
- data/test/factories/product/consulta_status_servico.rb +12 -0
- data/test/factories/product/emitente.rb +15 -0
- data/test/factories/product/gateway/base.rb +5 -0
- data/test/factories/product/gateway/web_service_svrs.rb +5 -0
- data/test/factories/service/betha/v1/{cancelamento_nfs.rb → cancela_nfse.rb} +2 -1
- data/test/factories/service/betha/v1/consulta_lote_rps.rb +1 -1
- data/test/factories/service/betha/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/betha/v1/consulta_nfse.rb +1 -1
- data/test/factories/service/betha/v1/consulta_situacao_lote_rps.rb +1 -1
- data/test/factories/{destinatario.rb → service/destinatario.rb} +1 -1
- data/test/factories/service/emitente.rb +15 -0
- data/test/factories/service/item.rb +4 -4
- data/test/factories/service/response/build_response.rb +5 -0
- data/test/factories/service/response/default.rb +6 -0
- data/test/factories/{response/service → service/response}/nota_fiscal.rb +8 -8
- data/test/factories/service/rps.rb +11 -11
- data/test/factories/service/sc/florianopolis/base.rb +1 -1
- data/test/factories/service/sc/florianopolis/cancellation.rb +1 -1
- data/test/factories/service/sc/florianopolis/emission_rps.rb +1 -1
- data/test/factories/service/simpliss/v1/base.rb +1 -1
- data/test/factories/service/simpliss/v1/cancela_nfse.rb +1 -1
- data/test/factories/service/simpliss/v1/consulta_lote_rps.rb +1 -1
- data/test/factories/service/simpliss/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/simpliss/v1/consulta_nfse.rb +1 -1
- data/test/factories/service/simpliss/v1/consulta_situacao_lote_rps.rb +1 -1
- data/test/factories/service/simpliss/v1/recepcao_lote_rps.rb +1 -1
- data/test/factories/service/thema/v1/base.rb +1 -1
- data/test/factories/service/thema/v1/cancela_nfse.rb +1 -1
- data/test/factories/service/thema/v1/consulta_lote_rps.rb +1 -1
- data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/thema/v1/consulta_nfse.rb +1 -1
- data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +1 -1
- data/test/factories/service/thema/v1/recepcao_lote_rps.rb +1 -1
- data/test/fixtures/service/response/betha/v1/cancela_nfse/fault.xml +17 -0
- data/test/fixtures/service/response/betha/v1/cancela_nfse/success.xml +48 -0
- data/test/fixtures/service/response/betha/v1/consulta_lote_rps/fault.xml +18 -0
- data/test/fixtures/service/response/betha/v1/consulta_lote_rps/success.xml +108 -0
- data/test/fixtures/service/response/betha/v1/consulta_nfse/fault.xml +18 -0
- data/test/fixtures/service/response/betha/v1/consulta_nfse/nfs_empty.xml +12 -0
- data/test/fixtures/service/response/betha/v1/consulta_nfse/success.xml +115 -0
- data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/fault.xml +18 -0
- data/test/fixtures/service/response/betha/v1/consulta_nfse_por_rps/success.xml +103 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/error.xml +13 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/fault.xml +17 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/success.xml +13 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed.xml +13 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unprocessed_by_code_error.xml +17 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived.xml +13 -0
- data/test/fixtures/service/response/betha/v1/consulta_situacao_lote_rps/unreceived_by_code_error.xml +17 -0
- data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/error.xml +17 -0
- data/test/fixtures/service/response/betha/v1/recepcao_lote_rps/success.xml +14 -0
- metadata +160 -94
- data/lib/br_nfe/destinatario.rb +0 -26
- data/lib/br_nfe/helper/have_destinatario.rb +0 -18
- data/lib/br_nfe/helper/have_emitente.rb +0 -20
- data/lib/br_nfe/helper/have_intermediario.rb +0 -24
- data/lib/br_nfe/helper/have_rps.rb +0 -34
- data/lib/br_nfe/helper/values_ts/service_v1.rb +0 -317
- data/lib/br_nfe/response/service/build_response.rb +0 -463
- data/lib/br_nfe/response/service/default.rb +0 -185
- data/lib/br_nfe/response/service/paths/base.rb +0 -127
- data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +0 -22
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +0 -25
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +0 -25
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +0 -25
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
- data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +0 -36
- data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +0 -271
- data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +0 -36
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -23
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -21
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -21
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -22
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_lote_rps_resposta.rb +0 -25
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_resposta.rb +0 -25
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -25
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_consultar_situacao_lote_rps_resposta.rb +0 -31
- data/lib/br_nfe/service/simpliss/v1/response_paths/servico_enviar_lote_rps_resposta.rb +0 -36
- data/lib/br_nfe/service/thema/v1/response_paths/servico_cancelar_nfse_resposta.rb +0 -17
- data/lib/br_nfe/service/thema/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +0 -19
- data/test/br_nfe/emitente_test.rb +0 -46
- data/test/br_nfe/helper/have_address_test.rb +0 -62
- data/test/br_nfe/helper/have_condicao_pagamento_test.rb +0 -71
- data/test/br_nfe/helper/have_destinatario_test.rb +0 -64
- data/test/br_nfe/helper/have_emitente_test.rb +0 -63
- data/test/br_nfe/helper/have_intermediario_test.rb +0 -77
- data/test/br_nfe/helper/have_rps_test.rb +0 -59
- data/test/br_nfe/response/service/build_response_test.rb +0 -205
- data/test/br_nfe/response/service/nota_fiscal_test.rb +0 -41
- data/test/br_nfe/response/service/paths/base_test.rb +0 -196
- data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +0 -25
- data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +0 -30
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +0 -30
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +0 -30
- data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +0 -30
- data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +0 -34
- data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +0 -54
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +0 -16
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +0 -16
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +0 -16
- data/test/factories/response/service/build_response.rb +0 -5
- data/test/factories/response/service/default.rb +0 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2d1320a14fd1cfd5849a39a3a44a214c94aa8e0f
|
|
4
|
+
data.tar.gz: 25a0a4d8eea87e877f791e728ecc30b8cda3fe67
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de121c683a16f145d1f05309e1b24071339033ef0e7e5b5ac0600206ec4d79aead4c884ef3b8e9329c674747489a8ec24e945d88fb3edeebf13ed129f89e7b0a
|
|
7
|
+
data.tar.gz: 2e48ba4c89749380ba4e63b74028b987581507c712983fad01550d74d610c109a4efbfaa1f99ba3305f6328ba197d4db25fd9111f16966b6789f59f1c0d03295
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.markdown
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
[](https://travis-ci.org/Brunomm/br_nfe)
|
|
2
|
-
[](https://codeclimate.com/github/Brunomm/br_nfe/coverage)
|
|
3
|
-
[](http://badge.fury.io/rb/br_nfe)
|
|
4
|
-
[](https://codeclimate.com/github/Brunomm/br_nfe)
|
|
1
|
+
[](https://travis-ci.org/Brunomm/br_nfe) [](https://codeclimate.com/github/Brunomm/br_nfe/coverage) [](http://badge.fury.io/rb/br_nfe) [](https://codeclimate.com/github/Brunomm/br_nfe)
|
|
5
2
|
|
|
6
3
|
# **BrNfe**
|
|
7
4
|
Gem para emissão de notas fiscais eletrônicas.
|
|
8
5
|
|
|
9
|
-
**
|
|
6
|
+
**Motivação**
|
|
10
7
|
|
|
11
|
-
Devido a falta de padronização dos parâmetros e a forma de envio e resposta na transmissão de Notas Fiscais de Serviços (NFS), esta gem vem com o objetivo de obter uma forma padronizada dessa tarefa, e assim, facilitando a vida de muitos desenvolvedores.
|
|
8
|
+
Devido a falta de padronização dos parâmetros e a forma de envio e resposta na transmissão de Notas Fiscais de Serviços (NFS-e), esta gem vem com o objetivo de obter uma forma padronizada dessa tarefa, e assim, facilitando a vida de muitos desenvolvedores.
|
|
12
9
|
|
|
13
10
|
**O que essa gem faz?**
|
|
14
11
|
|
|
@@ -26,24 +23,186 @@ Devido a falta de padronização dos parâmetros e a forma de envio e resposta n
|
|
|
26
23
|
|
|
27
24
|
gem 'br_nfe'
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
#**Introdução**
|
|
27
|
+
Com o objetivo de padronizar os valores, foi criado algumas classes auxiliares para montar e organizar os dados para a emissão das notas fiscais, dentre eles estão:
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
> - `BrNfe::Endereco`
|
|
30
|
+
> -- Tem o objetivo de padronizar os dados de endereço para o emitente e destinatário.
|
|
33
31
|
|
|
34
|
-
####**
|
|
35
|
-
|
|
32
|
+
> ####**Específico para NFS-e**:
|
|
33
|
+
> - `BrNfe::Service::Emitente`
|
|
34
|
+
> -- Classe para instanciar o emitente da nota fiscal de **serviço (NFS-e)**.
|
|
35
|
+
> -- Contém as validações e regras para o mesmo.
|
|
36
|
+
> -- Contém uma "Associação" com `BrNfe::Endereco`
|
|
36
37
|
|
|
38
|
+
> - `BrNfe::Service::Destinatario`
|
|
39
|
+
> -- Classe para instanciar o destinatário da nota fiscal de **serviço (NFS-e)**.
|
|
40
|
+
> -- Contém as validações e regras para o mesmo.
|
|
41
|
+
> -- Contém uma "Associação" com `BrNfe::Endereco`
|
|
42
|
+
>
|
|
43
|
+
> - `BrNfe::Service::Intermediario`
|
|
44
|
+
> -- Classe para instanciar o intermediário na nota fiscal de **serviço (NFS-e)**.
|
|
45
|
+
> -- Contém as validações e regras para o mesmo.
|
|
46
|
+
>
|
|
47
|
+
> - `BrNfe::Service::Item`
|
|
48
|
+
> -- Item da nota fiscal de serviço;
|
|
49
|
+
> -- Alguns órgãos emissores permitem adicionar vários itens de serviço na NFS.
|
|
50
|
+
> -- Ainda, para alguns emissores é obrigatório a definição de itens de serviço, porém para outros esse item não é necessário.
|
|
51
|
+
>
|
|
52
|
+
> - `BrNfe::Service::Rps`
|
|
53
|
+
> -- Classe para instanciar o RPS (Recibo Provisório de Serviço).
|
|
54
|
+
> -- Contém as validações e regras para o mesmo.
|
|
55
|
+
> -- Contém "Associação" com `BrNfe::Service::Destinatario` e `BrNfe::Service::Intermediario`
|
|
56
|
+
> -- Contém vários `BrNfe::Service::Item` através do atributo `items`
|
|
57
|
+
|
|
58
|
+
Como citado anteriormente, essas são classes para objetos **auxiliares**, e serão utilizados para manter uma melhor organização da gem.
|
|
59
|
+
|
|
60
|
+
##**Entendendo a organização da gem**
|
|
61
|
+
|
|
62
|
+
Primeiramente é necessário ter conhecimento das **_operações_** disponíveis para cada tipo de Nota Fiscal. Vamos a elas:
|
|
63
|
+
### Notas Fiscais de Serviço (NFS)
|
|
64
|
+
Existe uma certa "padronização" das operações desenvolvidas pelos Órgãos Emissores¹. São elas:
|
|
65
|
+
|
|
66
|
+
- **Cancelamento de NFS** _(Utilizado para cancelar uma NFS)_
|
|
67
|
+
- **Consulta do Lote RPS** _(Utilizado para consultar um lote de RPS)_
|
|
68
|
+
- **Consulta de NFS por RPS** _(Utilizado para consultar uma NFS através dos dados do RPS)_
|
|
69
|
+
- **Consulta NFS** _(Utilizado para consultar uma ou várias NFS através do número e/ou data)_
|
|
70
|
+
- **Consulta Situação do lote RPS** _(Utilizado para consultar a situação de um lote de RPS para verificar se foi processado e se foi processado com sucesso ou erro)_
|
|
71
|
+
- **Recepção do lote RPS** _(Utilizado enviar RPS's para emissão de NFS)_
|
|
72
|
+
|
|
73
|
+
Através destas operações, serão instanciados os objetos para realizar as funcionalidades para cada atividade.
|
|
74
|
+
|
|
75
|
+
Cada cidade contrata um órgão emissor para o processamento das notas (ou pode ser que a própria prefeitura desenvolva), então para realizar as operações para cada cidade, você deverá saber qual a empresa contratada para esse fim, e então instanciar o objeto de acordo com sua necessidade.
|
|
76
|
+
A seguir segue o padrão para instanciar os objetos para cada operação:
|
|
77
|
+
|
|
78
|
+
- Para Cancelamento de NFS:
|
|
79
|
+
```ruby
|
|
80
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::CancelaNfse.new(...)
|
|
81
|
+
```
|
|
82
|
+
- Para Consulta do Lote RPS:
|
|
83
|
+
```ruby
|
|
84
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaLoteRps.new(...)
|
|
85
|
+
```
|
|
86
|
+
- Para Consulta de NFS por RPS:
|
|
87
|
+
```ruby
|
|
88
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaNfsPorRps.new(...)
|
|
89
|
+
```
|
|
90
|
+
- Para Consulta NFS:
|
|
91
|
+
```ruby
|
|
92
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaNfse.new(...)
|
|
93
|
+
```
|
|
94
|
+
- Para Consulta Situação do lote RPS:
|
|
95
|
+
```ruby
|
|
96
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::ConsultaSituacaoLoteRps.new(...)
|
|
97
|
+
```
|
|
98
|
+
- Para Recepção do lote RPS:
|
|
99
|
+
```ruby
|
|
100
|
+
BrNfe::Service::ORGAO_EMISSOR::VERSAO_DO_XML::RecepcaoLoteRps.new(...)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Para enviar os dados para processamento deve ser chamado o método **`request`**, no qual será enviado os dados via XML para o órgão emissor correspondente.
|
|
104
|
+
|
|
105
|
+
Se desejar, antes de enviar os dados, o objeto poderá ser validado, EX:
|
|
106
|
+
```ruby
|
|
107
|
+
@ws = BrNfe::Service::ORGAO_EMISSOR::V1::ConsultaLoteRps.new(...)
|
|
108
|
+
if @ws.valid?
|
|
109
|
+
@ws.request
|
|
110
|
+
@response = @ws.response
|
|
111
|
+
else
|
|
112
|
+
# Tratamento da validação
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
O resultado obtido na variável `@response` é um objeto com os dados pertinentes e derivados de cada operação, por exemplo, se eu utilizar a operação de `RecepcaoLoteRps`, então a resposta será um objeto da classe `BrNfe::Service::Response::RecepcaoLoteRps`, na qual tem as informações obtidas pela resposta dessa operação. Já para a operação `ConsultaLoteRps` a resposta é um objeto da classe `BrNfe::Service::Response::ConsultaLoteRps`, e assim segue para cada operação. (para ver exemplos das respostas obtidas a cada operação, consulte a wiki).
|
|
117
|
+
|
|
118
|
+
Se desejar, é possível obter a resposta original ([do savon](http://savonrb.com/version2/response.html)) de cada órgão emissor através do método `original_response`.
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
###**Instanciando e manipulando objetos**
|
|
123
|
+
|
|
124
|
+
Em todas as classes desenvolvidas é possível instanciar objetos em forma de `Hash` ou `Block`. Veja:
|
|
125
|
+
```ruby
|
|
126
|
+
# Hash
|
|
127
|
+
@endereco = BrNfe::Endereco.new({
|
|
128
|
+
logradouro: "RUA FERNANDO MACHADO",
|
|
129
|
+
numero: 369,
|
|
130
|
+
complemento: "E",
|
|
131
|
+
# ...
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
# Block
|
|
135
|
+
@endereco = BrNfe::Endereco.new do |endereco|
|
|
136
|
+
endereco.logradouro = "RUA FERNANDO MACHADO"
|
|
137
|
+
endereco.numero = 369
|
|
138
|
+
endereco.complemento = "E"
|
|
139
|
+
# ...
|
|
140
|
+
})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
As associações também podem ser instanciadas em forma de `Hash` ou `Block`, e ainda pode ser setado o objeto diretamente. Exemplo:
|
|
144
|
+
```ruby
|
|
145
|
+
# Hash
|
|
146
|
+
@emitente = BrNfe::Service::Emitente.new({
|
|
147
|
+
cnpj: '11.111.111/1111-00',
|
|
148
|
+
...
|
|
149
|
+
endereco: {
|
|
150
|
+
logradouro: "RUA FERNANDO MACHADO",
|
|
151
|
+
numero: 369,
|
|
152
|
+
complemento: "E",
|
|
153
|
+
...
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
# Block
|
|
157
|
+
@emitente = BrNfe::Service::Emitente.new do |emitente|
|
|
158
|
+
emitente.cnpj = '11.111.111/1111-00'
|
|
159
|
+
...
|
|
160
|
+
emitente.endereco do |address|
|
|
161
|
+
address.logradouro = "RUA FERNANDO ...",
|
|
162
|
+
address.numero = 369,
|
|
163
|
+
address.complemento = "E",
|
|
164
|
+
...
|
|
165
|
+
end
|
|
166
|
+
# OU
|
|
167
|
+
# emitente.endereco = {
|
|
168
|
+
# logradouro: "RUA FERNANDO ...",
|
|
169
|
+
# numero: 369,
|
|
170
|
+
# complemento: "E",
|
|
171
|
+
# ...
|
|
172
|
+
# }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Setando o objeto
|
|
176
|
+
@endereco = BrNfe::Endereco.new(rua: "RUA DOS PRAZERES",...)
|
|
177
|
+
@emitente = BrNfe::Service::Emitente.new(razao_social: 'Emitente LTDA', endereco: @endereco)
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Também é possível fazer o `merge` dos atributos através do método `assign_attributes`, por exemplo:
|
|
37
182
|
```ruby
|
|
38
|
-
BrNfe::Endereco
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
183
|
+
@endereco = BrNfe::Endereco.new({
|
|
184
|
+
logradouro: "RUA 1",
|
|
185
|
+
numero: 100,
|
|
186
|
+
uf: 'SC'
|
|
187
|
+
})
|
|
188
|
+
@endereco.logradouro
|
|
189
|
+
# => "RUA 1"
|
|
190
|
+
@endereco.numero
|
|
191
|
+
# => 100
|
|
192
|
+
@endereco.uf
|
|
193
|
+
# => "SC"
|
|
194
|
+
|
|
195
|
+
@endereco.assign_attributes(numero: 200, uf: 'RS')
|
|
196
|
+
@endereco.logradouro
|
|
197
|
+
# => "RUA 1"
|
|
198
|
+
@endereco.numero
|
|
199
|
+
# => 200
|
|
200
|
+
@endereco.uf
|
|
201
|
+
# => "RS"
|
|
44
202
|
```
|
|
45
203
|
|
|
46
|
-
|
|
204
|
+
### **Exemplo para Recepção de um Lote RPS:**
|
|
205
|
+
|
|
47
206
|
|
|
48
207
|
**Endereço:**
|
|
49
208
|
```ruby
|
|
@@ -63,7 +222,7 @@ A seguir um exemplo de cada objeto com valores:
|
|
|
63
222
|
***
|
|
64
223
|
**Emitente:**
|
|
65
224
|
```ruby
|
|
66
|
-
@emitente = BrNfe::Emitente.new({
|
|
225
|
+
@emitente = BrNfe::Service::Emitente.new({
|
|
67
226
|
cnpj: '11.111.111/1111-00',
|
|
68
227
|
inscricao_municipal: '66165-4',
|
|
69
228
|
razao_social: 'RAZÃO SOCIAL',
|
|
@@ -78,42 +237,17 @@ A seguir um exemplo de cada objeto com valores:
|
|
|
78
237
|
})
|
|
79
238
|
```
|
|
80
239
|
|
|
81
|
-
Perceba que para definir o endereço do emitente, foi setado diretamente o objeto `@endereco`, porém, também é possível setar o objeto endereço em forma de `block` ou `hash` (isso vale para todas as classes), por exemplo:
|
|
82
|
-
```ruby
|
|
83
|
-
# Hash
|
|
84
|
-
@emitente = BrNfe::Emitente.new({
|
|
85
|
-
cnpj: '11.111.111/1111-00',
|
|
86
|
-
...
|
|
87
|
-
endereco: {
|
|
88
|
-
logradouro: "RUA FERNANDO MACHADO",
|
|
89
|
-
numero: 369,
|
|
90
|
-
complemento: "E",
|
|
91
|
-
...
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
# Block
|
|
95
|
-
@emitente = BrNfe::Emitente.new do |emitente|
|
|
96
|
-
emitente.cnpj = '11.111.111/1111-00'
|
|
97
|
-
...
|
|
98
|
-
emitente.endereco do |endereco|
|
|
99
|
-
endereco.logradouro = "RUA FERNANDO ...",
|
|
100
|
-
endereco.numero = 369,
|
|
101
|
-
endereco.complemento = "E",
|
|
102
|
-
...
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
```
|
|
106
240
|
|
|
107
241
|
Lembrando que por padrão, sempre que for chamar `@emitente.endereco` irá retornar um objeto da class `BrNfe::Endereco`, mesmo que não seja setado valor algum, ex:
|
|
108
242
|
```ruby
|
|
109
|
-
@emitente = BrNfe::Emitente.new
|
|
243
|
+
@emitente = BrNfe::Service::Emitente.new
|
|
110
244
|
@emitente.endereco
|
|
111
245
|
# => #<BrNfe::Endereco:0x000000022669a0 @codigo_pais="1058", ....>
|
|
112
246
|
```
|
|
113
247
|
***
|
|
114
248
|
**Destinatário**
|
|
115
249
|
```ruby
|
|
116
|
-
@destinatario = BrNfe::Destinatario.new({
|
|
250
|
+
@destinatario = BrNfe::Service::Destinatario.new({
|
|
117
251
|
cpf_cnpj: "111.111.111-00",
|
|
118
252
|
inscricao_municipal: "",
|
|
119
253
|
inscricao_estadual: "",
|
|
@@ -123,7 +257,14 @@ Lembrando que por padrão, sempre que for chamar `@emitente.endereco` irá retor
|
|
|
123
257
|
telefone: "3365478",
|
|
124
258
|
email: "destinatario@mail.com",
|
|
125
259
|
endereco: {
|
|
126
|
-
|
|
260
|
+
logradouro: "RUA AUGUSTO VILA LOBO",
|
|
261
|
+
numero: 45,
|
|
262
|
+
complemento: "E",
|
|
263
|
+
bairro: "CENTRO",
|
|
264
|
+
nome_municipio: "FLORIANÓPOLIS",
|
|
265
|
+
codigo_municipio: '4205407',
|
|
266
|
+
uf: "SC",
|
|
267
|
+
cep: "89665-000",
|
|
127
268
|
}
|
|
128
269
|
})
|
|
129
270
|
```
|
|
@@ -151,12 +292,9 @@ end
|
|
|
151
292
|
**RPS**
|
|
152
293
|
```ruby
|
|
153
294
|
@rps = BrNfe::Service::Rps.new do |rps|
|
|
154
|
-
rps.destinatario =
|
|
155
|
-
rps.intermediario
|
|
156
|
-
|
|
157
|
-
end
|
|
158
|
-
rps.condicao_pagamento = BrNfe::CondicaoPagamento.new(...)
|
|
159
|
-
|
|
295
|
+
rps.destinatario = @destinatario
|
|
296
|
+
rps.intermediario = @intermediario
|
|
297
|
+
rps.condicao_pagamento = @condicao_pagamento
|
|
160
298
|
rps.numero = 5525
|
|
161
299
|
rps.serie = "SN"
|
|
162
300
|
rps.tipo = "1"
|
|
@@ -166,79 +304,89 @@ end
|
|
|
166
304
|
rps.numero_substituicao = "5524"
|
|
167
305
|
rps.serie_substituicao = "SN"
|
|
168
306
|
rps.tipo_substituicao = "1"
|
|
169
|
-
rps.codigo_obra = ""
|
|
170
|
-
rps.codigo_art = ""
|
|
171
307
|
rps.valor_servicos = 100.00
|
|
172
308
|
rps.valor_deducoes = "0"
|
|
173
309
|
rps.valor_pis = "0"
|
|
174
|
-
rps.valor_cofins = ""
|
|
175
|
-
rps.valor_inss = ""
|
|
176
|
-
rps.valor_ir = ""
|
|
177
|
-
rps.valor_csll = ""
|
|
178
|
-
rps.outras_retencoes = ""
|
|
179
|
-
rps.iss_retido = ""
|
|
180
310
|
rps.valor_iss = 2.0
|
|
181
311
|
rps.aliquota = 0.02 # = 2%
|
|
182
312
|
rps.base_calculo = "100.00"
|
|
183
|
-
rps.desconto_incondicionado = ""
|
|
184
|
-
rps.desconto_condicionado = ""
|
|
185
|
-
rps.responsavel_retencao = ""
|
|
186
313
|
rps.item_lista_servico = "1.07"
|
|
187
314
|
rps.discriminacao = "1 Configuração de servidor: R$ 500.00"
|
|
188
315
|
rps.exigibilidade_iss = "1"
|
|
189
316
|
rps.codigo_municipio = "4204202"
|
|
190
317
|
rps.municipio_incidencia = "4204202"
|
|
191
|
-
rps.codigo_pais = ""
|
|
192
|
-
rps.numero_processo = ""
|
|
193
|
-
rps.codigo_cnae = ""
|
|
194
|
-
rps.outras_informacoes = ""
|
|
195
|
-
rps.codigo_tributacao_municipio = ""
|
|
196
318
|
end
|
|
197
319
|
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
Se desejar, antes de enviar os dados, o objeto poderá ser validado, EX:
|
|
320
|
+
***
|
|
321
|
+
**RecepcaoLoteRps** (Com o órgão emissor Betha)
|
|
202
322
|
```ruby
|
|
203
|
-
@
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
323
|
+
@recepcao = BrNfe::Service::Betha::V1::RecepcaoLoteRps.new do |ws|
|
|
324
|
+
ws.emitente = @emitente
|
|
325
|
+
ws.lote_rps = [@rps]
|
|
326
|
+
ws.numero_lote_rps = 214
|
|
327
|
+
ws.env = :production # OU :test
|
|
328
|
+
ws.certificate_pkcs12_path = '/path/to/certificate.pfx'
|
|
329
|
+
wx.certificate_pkcs12_password = 'PASSWORD'
|
|
207
330
|
end
|
|
331
|
+
|
|
332
|
+
@recepcao.request
|
|
333
|
+
resp = @recepcao.response
|
|
334
|
+
#=> #<BrNfe::Service::Response::RecepcaoLoteRps:0x000016a9e28 ...>
|
|
335
|
+
|
|
336
|
+
resp.protocolo
|
|
337
|
+
#=> 'EX456156E'
|
|
338
|
+
|
|
339
|
+
resp.data_recebimento
|
|
340
|
+
#=> Fri, 23 Sep 2015 17:40:15 -0300
|
|
341
|
+
|
|
342
|
+
resp.numero_lote
|
|
343
|
+
#=> 214
|
|
344
|
+
|
|
208
345
|
```
|
|
209
|
-
O resultado obtido na variável `@response` é um objeto da class `BrNfe::Service::Response::Default`, no qual será retornada em todas as requisições. Essa classe é responsável de manter o padrão das mensagens de resposta para todos os webservices. Se desejar, poderá obter a resposta original (no formato Hash) de cada órgão emissor através do método `original_response`.
|
|
210
|
-
Para saber quais os valores obtidos pelo `BrNfe::Service::Response::Default`, veja: [Resposta padrão](exemplos/resposta_padrao.markdown)
|
|
211
346
|
|
|
212
|
-
|
|
347
|
+
Para demais operações consulte a WiKi.
|
|
213
348
|
|
|
214
|
-
|
|
215
|
-
|
|
349
|
+
### Configurações
|
|
350
|
+
É possível customizar as classes auxiliares, por exemplo, se você quiser fazer alguma validação específica para o endereço, que contenha os mesmo atributos, você deve criar sua própria `class` e setar na configuração da gem qual será a classe que irá representar o endereço. Exemplo:
|
|
351
|
+
```ruby
|
|
352
|
+
class MeuEndereco < BrNfe::Endereco
|
|
353
|
+
validates :cep, length: { is: 8 }
|
|
354
|
+
end
|
|
216
355
|
|
|
217
|
-
|
|
356
|
+
emitente = BrNfe::Service::Emitente.new
|
|
357
|
+
emitente.endereco
|
|
358
|
+
#=> #<BrNfe::Endereco:0x000000016741d8 @codigo_pais="1058", @nome_pais="BRASIL">
|
|
359
|
+
|
|
360
|
+
BrNfe.endereco_class = MeuEndereco
|
|
361
|
+
|
|
362
|
+
emitente = BrNfe::Service::Emitente.new
|
|
363
|
+
emitente.endereco
|
|
364
|
+
#=> #<MeuEndereco:0x000000016741d8 @codigo_pais="1058", @nome_pais="BRASIL">
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Segue as configurações possíveis
|
|
218
368
|
```ruby
|
|
219
369
|
BrNfe.setup do |config|
|
|
220
|
-
#
|
|
221
|
-
# se você quiser fazer alguma validação específica para o endereço,
|
|
222
|
-
# que contenha os mesmo atributos, e setar na configuração da gem
|
|
223
|
-
# qual será a classe que irá representar o endereco.
|
|
224
|
-
# config.endereco_class = ClasseCustomizadaEndereco
|
|
225
|
-
|
|
370
|
+
# Classe que representa o endereço
|
|
226
371
|
config.endereco_class = BrNfe::Endereco
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
config.
|
|
372
|
+
|
|
373
|
+
# Classe que representa os emitentes para NFS
|
|
374
|
+
config.emitente_service_class = BrNfe::Service::Emitente
|
|
375
|
+
|
|
376
|
+
# Classe que representa o destinatário para NFS
|
|
377
|
+
config.destinatario_service_class = BrNfe::Service::Destinatario
|
|
378
|
+
|
|
379
|
+
# Classe que representa o intermediário da NFS
|
|
380
|
+
config.intermediario_service_class = BrNfe::Service::Intermediario
|
|
381
|
+
|
|
382
|
+
# Classe que representa a condição de pagamento da NFS
|
|
230
383
|
config.condicao_pagamento_class = BrNfe::CondicaoPagamento
|
|
231
|
-
config.rps_class BrNfe::Service::Rps
|
|
232
384
|
|
|
233
|
-
#
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
#
|
|
237
|
-
|
|
238
|
-
config.client_wsdl_ssl_verify_mode = :none
|
|
239
|
-
config.client_wsdl_ssl_cert_file = nil
|
|
240
|
-
config.client_wsdl_ssl_cert_key_file = nil
|
|
241
|
-
config.client_wsdl_ssl_cert_key_password = nil
|
|
385
|
+
# Classe que representa o RPS da NFS
|
|
386
|
+
config.rps_class = BrNfe::Service::Rps
|
|
387
|
+
|
|
388
|
+
# Classe que representa o item de uma NFS
|
|
389
|
+
config.service_item_class = BrNfe::Service::Item
|
|
242
390
|
|
|
243
391
|
# Se você quiser exibir em log a requisição SOAP, mude para true as opções a seguir
|
|
244
392
|
config.client_wsdl_log = false
|
|
@@ -248,19 +396,29 @@ end
|
|
|
248
396
|
|
|
249
397
|
|
|
250
398
|
## Objetivos futuros
|
|
251
|
-
* Emitir notas fiscais de produtos.
|
|
399
|
+
* Emitir notas fiscais de produtos (em andamento).
|
|
252
400
|
* Emitir notas fiscais de serviços para todas as cidades do Brasil.
|
|
401
|
+
* Emitir DANFE.
|
|
402
|
+
* Leitura de notas fiscais de produto e serviço
|
|
253
403
|
|
|
254
404
|
## Contribuições
|
|
255
405
|
|
|
256
|
-
Seja um contribuidor. Você pode contribuir de
|
|
406
|
+
Seja um contribuidor. Você pode contribuir de várias formas:
|
|
257
407
|
|
|
258
408
|
* Desenvolver emissão de NFS-e para outras cidades.
|
|
259
409
|
* Desenvolver emissão de NF-e (produtos).
|
|
260
410
|
* Refatorando código.
|
|
261
411
|
* Fornecendo Feedback construtivo (Sempre bem vindo!).
|
|
262
412
|
|
|
413
|
+
|
|
263
414
|
## Licença
|
|
264
415
|
|
|
265
|
-
-
|
|
266
|
-
- Copyleft
|
|
416
|
+
- MIT
|
|
417
|
+
- Copyleft 2016 Bruno Mucelini Mergen
|
|
418
|
+
|
|
419
|
+
----------
|
|
420
|
+
|
|
421
|
+
> ¹ **Órgão Emissor: ** É a empresa contratada pela prefeitura com a finalidade de processar as notas fiscais. Exemplo: (Betha, Simpliss, Thema)
|
|
422
|
+
|
|
423
|
+
----------
|
|
424
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Association
|
|
3
|
+
module HaveDestinatario
|
|
4
|
+
def destinatario
|
|
5
|
+
yield(destinatario) if block_given?
|
|
6
|
+
@destinatario.is_a?(destinatario_class) ? @destinatario : @destinatario = destinatario_class.new()
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def destinatario=(value)
|
|
10
|
+
if value.is_a?(destinatario_class) || value.nil?
|
|
11
|
+
@destinatario = value
|
|
12
|
+
elsif value.is_a?(Hash)
|
|
13
|
+
destinatario.assign_attributes(value)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
private
|
|
17
|
+
def destinatario_class
|
|
18
|
+
raise "O método #destinatario_class deve ser implementado na class #{self.class}"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Association
|
|
3
|
+
module HaveEmitente
|
|
4
|
+
|
|
5
|
+
def emitente
|
|
6
|
+
yield emitente if block_given?
|
|
7
|
+
@emitente.is_a?(emitente_class) ? @emitente : @emitente = emitente_class.new()
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def emitente=(value)
|
|
12
|
+
if value.is_a?(emitente_class) || value.nil?
|
|
13
|
+
@emitente = value
|
|
14
|
+
elsif value.is_a?(Hash)
|
|
15
|
+
emitente.assign_attributes(value)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
private
|
|
19
|
+
def emitente_class
|
|
20
|
+
raise "O método #emitente_class deve ser implementado na classe #{self.class}"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/br_nfe/base.rb
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
module BrNfe
|
|
2
2
|
class Base < BrNfe::ActiveModelBase
|
|
3
|
-
include BrNfe::
|
|
3
|
+
include BrNfe::Association::HaveEmitente
|
|
4
4
|
|
|
5
5
|
attr_accessor :certificate_pkcs12_password
|
|
6
6
|
attr_accessor :certificate_pkcs12_path
|
|
7
7
|
attr_accessor :certificate_pkcs12_value
|
|
8
8
|
attr_accessor :env
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
attr_accessor :
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
# Código IBGE da cidade emitente
|
|
11
|
+
attr_accessor :ibge_code_of_issuer_city
|
|
12
|
+
def ibge_code_of_issuer_city
|
|
13
|
+
"#{@ibge_code_of_issuer_city ||= emitente.endereco.codigo_municipio}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Código IBGE do estado emitente
|
|
17
|
+
attr_accessor :ibge_code_of_issuer_uf
|
|
18
|
+
def ibge_code_of_issuer_uf
|
|
19
|
+
"#{@ibge_code_of_issuer_uf ||= emitente.endereco.codigo_ibge_uf}"
|
|
20
|
+
end
|
|
14
21
|
|
|
15
22
|
validate :validar_emitente
|
|
16
23
|
validates :certificate, :certificate_key, presence: true, if: :certificado_obrigatorio?
|
|
@@ -20,6 +27,10 @@ module BrNfe
|
|
|
20
27
|
false
|
|
21
28
|
end
|
|
22
29
|
|
|
30
|
+
def ssl_request?
|
|
31
|
+
false
|
|
32
|
+
end
|
|
33
|
+
|
|
23
34
|
def env
|
|
24
35
|
@env ||= :production
|
|
25
36
|
end
|
|
@@ -147,30 +158,29 @@ module BrNfe
|
|
|
147
158
|
:v1
|
|
148
159
|
end
|
|
149
160
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
ssl_verify_mode: client_wsdl_ssl_verify_mode,
|
|
157
|
-
ssl_cert_file: client_wsdl_ssl_cert_file,
|
|
158
|
-
ssl_cert_key_file: client_wsdl_ssl_cert_key_file,
|
|
159
|
-
ssl_cert_key_password: client_wsdl_ssl_cert_key_password
|
|
160
|
-
})
|
|
161
|
+
# Versão da requisição SSL caso o servidor necessite de autenticação SSL
|
|
162
|
+
# Valores possíveis: [:TLSv1_2, :TLSv1_1, :TLSv1, :SSLv3, :SSLv23]
|
|
163
|
+
# Default: :SSLv3
|
|
164
|
+
def ssl_version
|
|
165
|
+
:SSLv3
|
|
161
166
|
end
|
|
162
167
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def
|
|
167
|
-
@
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
# Cliente WSDL utilizado para fazer a requisição.
|
|
169
|
+
# Utilizando a gem savon.
|
|
170
|
+
# Veja mais detalhes em http://savonrb.com/version2/client.html
|
|
171
|
+
def client_wsdl
|
|
172
|
+
@client_wsdl ||= Savon.client do |global|
|
|
173
|
+
global.wsdl wsdl
|
|
174
|
+
global.log BrNfe.client_wsdl_log
|
|
175
|
+
global.pretty_print_xml BrNfe.client_wsdl_pretty_print_xml
|
|
176
|
+
global.ssl_verify_mode :none
|
|
177
|
+
if ssl_request?
|
|
178
|
+
global.ssl_version ssl_version
|
|
179
|
+
global.ssl_cert certificate
|
|
180
|
+
global.ssl_cert_key certificate_key
|
|
181
|
+
global.ssl_cert_key_password certificate_pkcs12_password
|
|
182
|
+
end
|
|
183
|
+
end
|
|
174
184
|
end
|
|
175
185
|
|
|
176
186
|
# Caso não tenha o certificate_pkcs12 salvo em arquivo, pode setar a string do certificate_pkcs12 direto pelo atributo certificate_pkcs12_value
|