br_nfe 2.1.1 → 2.2.0
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 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +12 -2
- data/README.markdown +3 -1
- data/Rakefile +20 -1
- data/lib/br_nfe/active_model/associations.rb +11 -0
- data/lib/br_nfe/active_model/has_many.rb +65 -0
- data/lib/br_nfe/active_model/has_one.rb +57 -0
- data/lib/br_nfe/active_model_base.rb +38 -1
- data/lib/br_nfe/base.rb +9 -0
- data/lib/br_nfe/calculos/fatores_de_multiplicacao.rb +67 -0
- data/lib/br_nfe/calculos/modulo11.rb +54 -0
- data/lib/br_nfe/calculos/modulo11_fator_de2a9.rb +83 -0
- data/lib/br_nfe/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
- data/lib/br_nfe/constants.rb +46 -1
- data/lib/br_nfe/endereco.rb +6 -2
- data/lib/br_nfe/helper/cpf_cnpj.rb +8 -1
- data/lib/br_nfe/person.rb +32 -3
- data/lib/br_nfe/product/destinatario.rb +45 -0
- data/lib/br_nfe/product/emitente.rb +14 -1
- data/lib/br_nfe/product/evento/base.rb +146 -0
- data/lib/br_nfe/product/evento/cancelamento.rb +46 -0
- data/lib/br_nfe/product/gateway/base.rb +16 -43
- data/lib/br_nfe/product/gateway/web_service_am.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_ba.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_ce.rb +162 -0
- data/lib/br_nfe/product/gateway/web_service_go.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_mg.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_ms.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_mt.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_pe.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_pr.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_rs.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_sp.rb +140 -0
- data/lib/br_nfe/product/gateway/web_service_svan.rb +162 -0
- data/lib/br_nfe/product/gateway/web_service_svc_an.rb +131 -0
- data/lib/br_nfe/product/gateway/web_service_svc_rs.rb +20 -0
- data/lib/br_nfe/product/gateway/web_service_svrs.rb +111 -10
- data/lib/br_nfe/product/nf_xml_value.rb +278 -0
- data/lib/br_nfe/product/nfe/adicao_importacao.rb +76 -0
- data/lib/br_nfe/product/nfe/cobranca/duplicata.rb +44 -0
- data/lib/br_nfe/product/nfe/cobranca/fatura.rb +64 -0
- data/lib/br_nfe/product/nfe/cobranca/pagamento.rb +99 -0
- data/lib/br_nfe/product/nfe/declaracao_importacao.rb +221 -0
- data/lib/br_nfe/product/nfe/detalhe_exportacao.rb +89 -0
- data/lib/br_nfe/product/nfe/item.rb +678 -0
- data/lib/br_nfe/product/nfe/item_tax/cofins.rb +138 -0
- data/lib/br_nfe/product/nfe/item_tax/cofins_st.rb +68 -0
- data/lib/br_nfe/product/nfe/item_tax/icms.rb +593 -0
- data/lib/br_nfe/product/nfe/item_tax/icms_uf_destino.rb +169 -0
- data/lib/br_nfe/product/nfe/item_tax/importacao.rb +62 -0
- data/lib/br_nfe/product/nfe/item_tax/ipi.rb +179 -0
- data/lib/br_nfe/product/nfe/item_tax/issqn.rb +256 -0
- data/lib/br_nfe/product/nfe/item_tax/pis.rb +138 -0
- data/lib/br_nfe/product/nfe/item_tax/pis_st.rb +68 -0
- data/lib/br_nfe/product/nfe/processo_referencia.rb +48 -0
- data/lib/br_nfe/product/nfe/transporte/base.rb +264 -0
- data/lib/br_nfe/product/nfe/transporte/transportador.rb +15 -0
- data/lib/br_nfe/product/nfe/transporte/veiculo.rb +53 -0
- data/lib/br_nfe/product/nfe/transporte/volume.rb +89 -0
- data/lib/br_nfe/product/nota_fiscal.rb +1173 -0
- data/lib/br_nfe/product/operation/base.rb +255 -0
- data/lib/br_nfe/product/operation/nfe_autorizacao.rb +118 -0
- data/lib/br_nfe/product/operation/nfe_consulta_protocolo.rb +61 -0
- data/lib/br_nfe/product/operation/nfe_download_nf.rb +86 -0
- data/lib/br_nfe/product/operation/nfe_inutilizacao.rb +168 -0
- data/lib/br_nfe/product/operation/nfe_recepcao_evento.rb +70 -0
- data/lib/br_nfe/product/operation/nfe_ret_autorizacao.rb +63 -0
- data/lib/br_nfe/product/operation/nfe_status_servico.rb +46 -0
- data/lib/br_nfe/product/response/base.rb +97 -0
- data/lib/br_nfe/product/response/build/base.rb +287 -0
- data/lib/br_nfe/product/response/build/nfe_autorizacao.rb +102 -0
- data/lib/br_nfe/product/response/build/nfe_consulta_protocolo.rb +133 -0
- data/lib/br_nfe/product/response/build/nfe_inutilizacao.rb +53 -0
- data/lib/br_nfe/product/response/build/nfe_ret_autorizacao.rb +65 -0
- data/lib/br_nfe/product/response/build/nfe_status_servico.rb +43 -0
- data/lib/br_nfe/product/response/event.rb +89 -0
- data/lib/br_nfe/product/response/nfe_autorizacao.rb +12 -0
- data/lib/br_nfe/product/response/nfe_consulta_protocolo.rb +13 -0
- data/lib/br_nfe/product/response/nfe_inutilizacao.rb +89 -0
- data/lib/br_nfe/product/response/nfe_ret_autorizacao.rb +9 -0
- data/lib/br_nfe/product/response/nfe_status_servico.rb +31 -0
- data/lib/br_nfe/product/xml/_signed_info_sh1.xml.slim +9 -0
- data/lib/br_nfe/product/xml/_tc_cpf_cnpj.xml.slim +7 -0
- data/lib/br_nfe/product/xml/signature_sh1.xml.slim +12 -0
- data/lib/br_nfe/product/xml/v1_00/evento/infEventoCancelamento.xml.slim +19 -0
- data/lib/br_nfe/product/xml/v1_00/root/NfeDownloadNf.xml.slim +5 -0
- data/lib/br_nfe/product/xml/v1_00/root/NfeRecepcaoEvento.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v2_00/_tc_endereco.xml.slim +19 -0
- data/lib/br_nfe/product/xml/v2_00/_tc_infNFe.xml.slim +39 -0
- data/lib/br_nfe/product/xml/v2_00/infInut.xml.slim +12 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/NFe.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_cobr.xml.slim +19 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_dest.xml.slim +14 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_det.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_emit.xml.slim +19 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_entrega.xml.slim +11 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_exporta.xml.slim +2 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_ide.xml.slim +24 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_infAdic.xml.slim +13 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_retirada.xml.slim +11 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_total.xml.slim +50 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/_tc_transp.xml.slim +35 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/_tc_imposto.xml.slim +31 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/_tc_prod.xml.slim +37 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS00.xml.slim +6 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS10.xml.slim +16 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS101.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS102.xml.slim +3 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS20.xml.slim +6 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS201.xml.slim +15 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS202.xml.slim +14 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS30.xml.slim +12 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS40.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS500.xml.slim +6 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS51.xml.slim +13 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS60.xml.slim +5 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS70.xml.slim +18 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS90.xml.slim +21 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/ICMS/_tc_ICMS900.xml.slim +25 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_COFINS.xml.slim +26 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_COFINS_ST.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_ICMS.xml.slim +45 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_II.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_IPI.xml.slim +30 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_PIS.xml.slim +26 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/imposto/_tc_PIS_ST.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/det/prod/_tc_di.xml.slim +13 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_retTransp.xml.slim +6 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_transporta.xml.slim +17 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe/transp/_tc_vol.xml.slim +15 -0
- data/lib/br_nfe/product/xml/v2_00/infNFe.xml.slim +3 -0
- data/lib/br_nfe/product/xml/v2_00/root/NfeAutorizacao.xml.slim +5 -0
- data/lib/br_nfe/product/xml/v2_00/root/NfeInutilizacao.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v2_00/root/NfeRetAutorizacao.xml.slim +3 -0
- data/lib/br_nfe/product/xml/v2_00/root/NfeStatusServico.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v2_01/root/NfeConsultaProtocolo.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v3_10/_tc_infNFe.xml.slim +44 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_dest.xml.slim +25 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_det.xml.slim +14 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_exporta.xml.slim +4 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_ide.xml.slim +26 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_pag.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/_tc_total.xml.slim +78 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/_tc_imposto.xml.slim +37 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/_tc_prod.xml.slim +48 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS20.xml.slim +12 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS30.xml.slim +17 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS40.xml.slim +7 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS51.xml.slim +19 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS70.xml.slim +23 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/ICMS/_tc_ICMS90.xml.slim +26 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/_tc_ICMSUFDest.xml.slim +8 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/imposto/_tc_ISSQN.xml.slim +35 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/prod/_tc_det_export.xml.slim +8 -0
- data/lib/br_nfe/product/xml/v3_10/infNFe/det/prod/_tc_di.xml.slim +28 -0
- data/lib/br_nfe/product/xml/v3_10/root/NfeAutorizacao.xml.slim +6 -0
- data/lib/br_nfe/service/base.rb +1 -105
- data/lib/br_nfe/service/betha/v1/cancela_nfse.rb +1 -1
- data/lib/br_nfe/service/response/default.rb +1 -1
- data/lib/br_nfe/service/simpliss/v1/base.rb +2 -0
- data/lib/br_nfe/version.rb +2 -2
- data/lib/br_nfe.rb +180 -22
- data/lib/config/locales/br_nfe/en/product/nfe/cobranca/fatura.yml +6 -0
- data/lib/config/locales/br_nfe/en/product/nfe/declaracao_importacao.yml +10 -0
- data/lib/config/locales/br_nfe/en/product/nfe/item.yml +20 -0
- data/lib/config/locales/br_nfe/en/product/nfe/item_tax/icms_uf_destino.yml +8 -0
- data/lib/config/locales/br_nfe/en/product/nfe/transporte/base.yml +9 -0
- data/lib/config/locales/br_nfe/en/product/nota_fiscal.yml +21 -0
- data/lib/config/locales/br_nfe/en/product/operation/nfe_autorizacao.yml +10 -0
- data/lib/config/locales/br_nfe/en/product/operation/nfe_recepcao_evento.yml +6 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nfe/cobranca/fatura.yml +6 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nfe/declaracao_importacao.yml +10 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nfe/item.yml +20 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nfe/item_tax/icms_uf_destino.yml +8 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nfe/transporte/base.yml +9 -0
- data/lib/config/locales/br_nfe/pt-BR/product/nota_fiscal.yml +21 -0
- data/lib/config/locales/br_nfe/pt-BR/product/operation/nfe_autorizacao.yml +10 -0
- data/lib/config/locales/br_nfe/pt-BR/product/operation/nfe_recepcao_evento.yml +6 -0
- data/test/br_nfe/association/have_destinatario_test.rb +8 -8
- data/test/br_nfe/association/have_emitente_test.rb +6 -6
- data/test/br_nfe/base_test.rb +15 -4
- data/test/br_nfe/endereco_test.rb +15 -0
- data/test/br_nfe/person_test.rb +55 -6
- data/test/br_nfe/product/destinatario_test.rb +26 -0
- data/test/br_nfe/product/emitente_test.rb +1 -2
- data/test/br_nfe/product/evento/base_test.rb +58 -0
- data/test/br_nfe/product/evento/cancelamento_test.rb +32 -0
- data/test/br_nfe/product/gateway/web_service_am_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_ba_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_ce_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_go_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_mg_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_ms_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_mt_test.rb +408 -0
- data/test/br_nfe/product/gateway/web_service_pe_test.rb +408 -0
- data/test/br_nfe/product/gateway/web_service_pr_test.rb +408 -0
- data/test/br_nfe/product/gateway/web_service_rs_test.rb +407 -0
- data/test/br_nfe/product/gateway/web_service_sp_test.rb +408 -0
- data/test/br_nfe/product/gateway/web_service_svan_test.rb +242 -0
- data/test/br_nfe/product/gateway/web_service_svc_an_test.rb +185 -0
- data/test/br_nfe/product/gateway/web_service_svc_rs_test.rb +185 -0
- data/test/br_nfe/product/gateway/web_service_svrs_test.rb +208 -2
- data/test/br_nfe/product/nfe/adicao_importacao_test.rb +19 -0
- data/test/br_nfe/product/nfe/cobranca/duplicata_test.rb +19 -0
- data/test/br_nfe/product/nfe/cobranca/fatura_test.rb +32 -0
- data/test/br_nfe/product/nfe/cobranca/pagamento_test.rb +105 -0
- data/test/br_nfe/product/nfe/declaracao_importacao_test.rb +116 -0
- data/test/br_nfe/product/nfe/detalhe_exportacao_test.rb +97 -0
- data/test/br_nfe/product/nfe/item_tax/cofins_st_test.rb +22 -0
- data/test/br_nfe/product/nfe/item_tax/cofins_test.rb +113 -0
- data/test/br_nfe/product/nfe/item_tax/icms_test.rb +1011 -0
- data/test/br_nfe/product/nfe/item_tax/icms_uf_destino_test.rb +99 -0
- data/test/br_nfe/product/nfe/item_tax/importacao_test.rb +23 -0
- data/test/br_nfe/product/nfe/item_tax/ipi_test.rb +160 -0
- data/test/br_nfe/product/nfe/item_tax/issqn_test.rb +84 -0
- data/test/br_nfe/product/nfe/item_tax/pis_st_test.rb +22 -0
- data/test/br_nfe/product/nfe/item_tax/pis_test.rb +113 -0
- data/test/br_nfe/product/nfe/item_test.rb +381 -0
- data/test/br_nfe/product/nfe/processo_referencia_test.rb +30 -0
- data/test/br_nfe/product/nfe/transporte/base_test.rb +182 -0
- data/test/br_nfe/product/nfe/transporte/transportador_test.rb +13 -0
- data/test/br_nfe/product/nfe/transporte/veiculo_test.rb +13 -0
- data/test/br_nfe/product/nfe/transporte/volume_test.rb +42 -0
- data/test/br_nfe/product/nota_fiscal_test.rb +662 -0
- data/test/br_nfe/product/operation/base_test.rb +538 -0
- data/test/br_nfe/product/operation/nfe_autorizacao_test.rb +378 -0
- data/test/br_nfe/product/operation/nfe_consulta_protocolo_test.rb +349 -0
- data/test/br_nfe/product/operation/nfe_download_nf_test.rb +93 -0
- data/test/br_nfe/product/operation/nfe_inutilizacao_test.rb +210 -0
- data/test/br_nfe/product/operation/nfe_recepcao_evento_test.rb +84 -0
- data/test/br_nfe/product/operation/nfe_ret_autorizacao_test.rb +309 -0
- data/test/br_nfe/product/operation/nfe_status_servico_test.rb +122 -0
- data/test/br_nfe/product/response/base_test.rb +75 -0
- data/test/br_nfe/product/response/build/base_test.rb +34 -0
- data/test/br_nfe/product/response/nfe_ret_autorizacao_test.rb +14 -0
- data/test/br_nfe/service/association/have_intermediario_test.rb +10 -10
- data/test/br_nfe/service/base_test.rb +9 -206
- data/test/br_nfe/service/betha/v1/cancela_nfse_test.rb +8 -6
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +6 -3
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +6 -3
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +7 -4
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +12 -9
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +6 -3
- data/test/br_nfe/service/rps_test.rb +2 -2
- data/test/br_nfe/service/simpliss/v1/cancela_nfse_test.rb +6 -3
- data/test/br_nfe/service/simpliss/v1/consulta_lote_rps_test.rb +7 -4
- data/test/br_nfe/service/simpliss/v1/consulta_nfs_por_rps_test.rb +7 -4
- data/test/br_nfe/service/simpliss/v1/consulta_nfse_test.rb +8 -5
- data/test/br_nfe/service/simpliss/v1/consulta_situacao_lote_rps_test.rb +9 -6
- data/test/br_nfe/service/simpliss/v1/recepcao_lote_rps_test.rb +6 -3
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +6 -3
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +6 -3
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +6 -3
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +8 -5
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +9 -6
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_limitado_test.rb +6 -3
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +6 -3
- data/test/factories/person.rb +1 -1
- data/test/factories/product/destinatario.rb +11 -0
- data/test/factories/product/emitente.rb +1 -1
- data/test/factories/product/evento/base.rb +9 -0
- data/test/factories/product/evento/cancelamento.rb +10 -0
- data/test/factories/product/gateway/web_service_am.rb +5 -0
- data/test/factories/product/gateway/web_service_ba.rb +5 -0
- data/test/factories/product/nfe/adicao_importacao.rb +7 -0
- data/test/factories/product/nfe/cobranca/duplicata.rb +7 -0
- data/test/factories/product/nfe/cobranca/fatura.rb +8 -0
- data/test/factories/product/nfe/cobranca/pagamento.rb +9 -0
- data/test/factories/product/nfe/declaracao_importacao.rb +10 -0
- data/test/factories/product/nfe/detalhe_exportacao.rb +5 -0
- data/test/factories/product/nfe/item.rb +24 -0
- data/test/factories/product/nfe/item_tax/cofins.rb +5 -0
- data/test/factories/product/nfe/item_tax/cofins_st.rb +5 -0
- data/test/factories/product/nfe/item_tax/icms.rb +9 -0
- data/test/factories/product/nfe/item_tax/icms_uf_destino.rb +11 -0
- data/test/factories/product/nfe/item_tax/importacao.rb +8 -0
- data/test/factories/product/nfe/item_tax/ipi.rb +6 -0
- data/test/factories/product/nfe/item_tax/issqn.rb +9 -0
- data/test/factories/product/nfe/item_tax/pis.rb +5 -0
- data/test/factories/product/nfe/item_tax/pis_st.rb +5 -0
- data/test/factories/product/nfe/processo_referencia.rb +6 -0
- data/test/factories/product/nfe/transporte/base.rb +5 -0
- data/test/factories/product/nfe/transporte/transportador.rb +7 -0
- data/test/factories/product/nfe/transporte/veiculo.rb +7 -0
- data/test/factories/product/nfe/transporte/volume.rb +5 -0
- data/test/factories/product/nota_fiscal.rb +22 -0
- data/test/factories/product/{base.rb → operation/base.rb} +1 -1
- data/test/factories/product/operation/nfe_autorizacao.rb +590 -0
- data/test/factories/product/operation/nfe_consulta_protocolo.rb +13 -0
- data/test/factories/product/operation/nfe_download_nf.rb +15 -0
- data/test/factories/product/operation/nfe_inutilizacao.rb +19 -0
- data/test/factories/product/operation/nfe_recepcao_evento.rb +14 -0
- data/test/factories/product/operation/nfe_ret_autorizacao.rb +13 -0
- data/test/factories/product/{consulta_status_servico.rb → operation/nfe_status_servico.rb} +1 -1
- data/test/factories/product/response/base.rb +12 -0
- data/test/factories/product/response/build/base.rb +6 -0
- data/test/factories/product/response/nfe_ret_autorizacao.rb +13 -0
- data/test/factories/service/emitente.rb +1 -1
- data/test/fixtures/product/operation/nfe_autorizacao/nfe_signed.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/async_fail.xml +21 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/async_success.xml +25 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/nfe/with_proc.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/nfe/without_proc.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/original_xml.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/sync_fail.xml +32 -0
- data/test/fixtures/product/response/v3.10/nfe_autorizacao/sync_success.xml +33 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_1.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_2.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_3.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/event_cancel.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/event_xml/one_event.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/fail.xml +22 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/nfe_original/with_proc.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/nfe_original/without_proc.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_many_with_cancel.xml +198 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_many_without_cancel.xml +199 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_one.xml +89 -0
- data/test/fixtures/product/response/v3.10/nfe_consulta_protocolo/success_without.xml +34 -0
- data/test/fixtures/product/response/v3.10/nfe_inutilizacao/fail.xml +29 -0
- data/test/fixtures/product/response/v3.10/nfe_inutilizacao/success.xml +30 -0
- data/test/fixtures/product/response/v3.10/nfe_recepcao_evento/cancelamento/fail.xml +34 -0
- data/test/fixtures/product/response/v3.10/nfe_recepcao_evento/cancelamento/success.xml +36 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_fail.xml +22 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_fail.xml +33 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_fail_and_one_ok.xml +46 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_one_invoice_ok.xml +34 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_two_invoice_fail.xml +46 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/lot_ok_two_invoice_ok.xml +46 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_2_with_protocol.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_2_without_protocol.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_3_with_protocol.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/nfe/nf_3_without_protocol.xml +1 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/lot.xml +2 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/nfe.xml +2 -0
- data/test/fixtures/product/response/v3.10/nfe_ret_autorizacao/original_xml/nfeProc.xml +4 -0
- data/test/fixtures/product/response/v3.10/nfe_status_servico/fail.xml +23 -0
- data/test/fixtures/product/response/v3.10/nfe_status_servico/success.xml +22 -0
- data/test/fixtures/product/schemas/CCe_v1.00.xsd +11 -0
- data/test/fixtures/product/schemas/EPEC_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/LeiauteCadastroEmissorDFe_v1.01.xsd +234 -0
- data/test/fixtures/product/schemas/SuframaInternaliza_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/SuframaVistoria_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/atuCadEmiDFe_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/cabecMsg_v1.02.xsd +29 -0
- data/test/fixtures/product/schemas/cadEmiDFe_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/cancNFe_v2.00.xsd +9 -0
- data/test/fixtures/product/schemas/confRecebto_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/consCad_v2.00.xsd +9 -0
- data/test/fixtures/product/schemas/consDPEC_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/consNFeDest_v1.01.xsd +10 -0
- data/test/fixtures/product/schemas/consReciNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consReciNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/consSitNFe_v2.01.xsd +10 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consSitNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/consStatServ_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/consStatServ_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/distDFeInt_v1.00.xsd +71 -0
- data/test/fixtures/product/schemas/downloadNFe_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/e110110_v1.00.xsd +58 -0
- data/test/fixtures/product/schemas/e110111_v1.00.xsd +42 -0
- data/test/fixtures/product/schemas/e110140_v1.00.xsd +124 -0
- data/test/fixtures/product/schemas/e111500_v1.00.xsd +69 -0
- data/test/fixtures/product/schemas/e111501_v1.00.xsd +69 -0
- data/test/fixtures/product/schemas/e111502_v1.00.xsd +50 -0
- data/test/fixtures/product/schemas/e111503_v1.00.xsd +50 -0
- data/test/fixtures/product/schemas/e210200_v1.00.xsd +32 -0
- data/test/fixtures/product/schemas/e210210_v1.00.xsd +32 -0
- data/test/fixtures/product/schemas/e210220_v1.00.xsd +45 -0
- data/test/fixtures/product/schemas/e210240_v1.00.xsd +44 -0
- data/test/fixtures/product/schemas/e411500_v1.00.xsd +134 -0
- data/test/fixtures/product/schemas/e411501_v1.00.xsd +134 -0
- data/test/fixtures/product/schemas/e411502_v1.00.xsd +95 -0
- data/test/fixtures/product/schemas/e411503_v1.00.xsd +95 -0
- data/test/fixtures/product/schemas/e990900_v1.00.xsd +87 -0
- data/test/fixtures/product/schemas/e990910_v1.00.xsd +81 -0
- data/test/fixtures/product/schemas/envCCe_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/envCancelPProrrogNFe_v1.0.xsd +50 -0
- data/test/fixtures/product/schemas/envConfRecebto_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/envDPEC_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/envEPEC_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/envEventoCancNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/envEvento_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/envFiscoNfe_v1.0.xsd +179 -0
- data/test/fixtures/product/schemas/envPProrrogNFe_v1.0.xsd +65 -0
- data/test/fixtures/product/schemas/envRemIndus_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/envSuframaInternaliza_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/envSuframaVistoria_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/enviNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/enviNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/eventoCancNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/eventoEPEC_v0.01.xsd +267 -0
- data/test/fixtures/product/schemas/eventoEPEC_v1.00.xsd +267 -0
- data/test/fixtures/product/schemas/eventoRemIndus_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/inutNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/inutNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/leiauteCCe_v1.00.xsd +418 -0
- data/test/fixtures/product/schemas/leiauteCancNFe_v2.00.xsd +143 -0
- data/test/fixtures/product/schemas/leiauteConfRecebto_v1.00.xsd +406 -0
- data/test/fixtures/product/schemas/leiauteConsNFeDest_v1.01.xsd +483 -0
- data/test/fixtures/product/schemas/leiauteConsSitNFe_v2.01.xsd +548 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteConsSitNFe_v3.10.xsd +502 -502
- data/test/fixtures/product/schemas/leiauteConsStatServ_v2.00.xsd +98 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteConsStatServ_v3.10.xsd +97 -97
- data/test/fixtures/product/schemas/leiauteConsultaCadastro_v1.01.xsd +355 -0
- data/test/fixtures/product/schemas/leiauteConsultaCadastro_v2.00.xsd +404 -0
- data/test/fixtures/product/schemas/leiauteDPEC_v1.01.xsd +464 -0
- data/test/fixtures/product/schemas/leiauteDownloadNFe_v1.00.xsd +149 -0
- data/test/fixtures/product/schemas/leiauteEPEC_v1.00.xsd +459 -0
- data/test/fixtures/product/schemas/leiauteEventoCancNFe_v1.00.xsd +394 -0
- data/test/fixtures/product/schemas/leiauteEvento_v1.00.xsd +373 -0
- data/test/fixtures/product/schemas/leiauteInutNFe_v2.00.xsd +193 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteInutNFe_v3.10.xsd +192 -192
- data/test/fixtures/product/schemas/leiauteNFe_v2.00.xsd +6661 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/leiauteNFe_v3.10.xsd +6060 -6060
- data/test/fixtures/product/schemas/leiauteRemIndus_v1.00.xsd +382 -0
- data/test/fixtures/product/schemas/leiauteSRE_v1.00.xsd +372 -0
- data/test/fixtures/product/schemas/leiauteSuframaInternaliza_v1.00.xsd +642 -0
- data/test/fixtures/product/schemas/leiauteSuframaVistoria_v1.00.xsd +648 -0
- data/test/fixtures/product/schemas/nfe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/nfe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/procCCeNFe_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/procCancNFe_v2.00.xsd +9 -0
- data/test/fixtures/product/schemas/procConfRecebtoNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/procEPEC_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/procEventoCancNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/procEventoNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/procEventoNFe_v99.99.xsd +37 -0
- data/test/fixtures/product/schemas/procInutNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/procInutNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/procNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/procNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/procRemIndus_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/resEvento_v1.00.xsd +94 -0
- data/test/fixtures/product/schemas/resNFe_v1.00.xsd +110 -0
- data/test/fixtures/product/schemas/retAtuCadEmiDFe_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/retCancNFe_v2.00.xsd +9 -0
- data/test/fixtures/product/schemas/retConsCad_v2.00.xsd +9 -0
- data/test/fixtures/product/schemas/retConsDPEC_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/retConsReciNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsReciNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/retConsSitNFe_v2.01.xsd +10 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsSitNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/retConsStatServ_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retConsStatServ_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/retDPEC_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/retDistDFeInt_v1.00.xsd +84 -0
- data/test/fixtures/product/schemas/retDownloadNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvCCe_v1.00.xsd +10 -0
- data/test/fixtures/product/schemas/retEnvCancelPProrrogNFe_v1.0.xsd +231 -0
- data/test/fixtures/product/schemas/retEnvConfRecebto_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvEPEC_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvEventoCancNFe_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvEvento_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvFiscoNFe_v1.0.xsd +234 -0
- data/test/fixtures/product/schemas/retEnvRemIndus_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvSuframaInternaliza_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnvSuframaVistoria_v1.00.xsd +9 -0
- data/test/fixtures/product/schemas/retEnviNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retEnviNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/retEventoEPEC_v0.01.xsd +207 -0
- data/test/fixtures/product/schemas/retInutNFe_v2.00.xsd +9 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/retInutNFe_v3.10.xsd +8 -8
- data/test/fixtures/product/schemas/retPProrrogNFe_v1.0.xsd +233 -0
- data/test/fixtures/product/schemas/retconsNFeDest_v1.01.xsd +9 -0
- data/test/fixtures/product/schemas/tiposBasico_v1.03.xsd +816 -0
- data/test/fixtures/product/schemas/tiposBasico_v1.03_OPENSSL.xsd +816 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/tiposBasico_v3.10.xsd +571 -571
- data/test/fixtures/product/schemas/tiposBasico_v3.10_OPENSSL.xsd +877 -0
- data/test/fixtures/product/schemas/tiposDistDFe_v1.00.xsd +217 -0
- data/{lib/br_nfe/product/xml/v3_10/XSD → test/fixtures/product/schemas}/xmldsig-core-schema_v1.01.xsd +97 -97
- data/test/fixtures/product/wsdl/NFeRetAutorizacao.xml +80 -0
- data/test/fixtures/product/wsdl/NfeAutorizacao.xml +107 -0
- data/test/fixtures/product/wsdl/NfeConsulta2.xml +80 -0
- data/test/fixtures/product/wsdl/NfeStatusServico2.xml +70 -0
- data/test/fixtures/product/wsdl/nfeinutilizacao2.xml +80 -0
- data/test/fixtures/service/wsdl/betha/v1/cancelar_nfse.xml +178 -0
- data/test/fixtures/service/wsdl/betha/v1/consultar_lote_rps.xml +339 -0
- data/test/fixtures/service/wsdl/betha/v1/consultar_nfse.xml +348 -0
- data/test/fixtures/service/wsdl/betha/v1/consultar_nfse_por_rps.xml +365 -0
- data/test/fixtures/service/wsdl/betha/v1/consultar_situacao_lote_rps.xml +74 -0
- data/test/fixtures/service/wsdl/betha/v1/recepcionar_lote_rps.xml +299 -0
- data/test/fixtures/service/wsdl/simpliss/v1/nfseservice.xml +1 -0
- data/test/fixtures/service/wsdl/thema/v1/nfse_cancelamento.xml +82 -0
- data/test/fixtures/service/wsdl/thema/v1/nfse_consulta.xml +235 -0
- data/test/fixtures/service/wsdl/thema/v1/nfse_remessa.xml +185 -0
- data/test/test_helper.rb +369 -1
- metadata +711 -33
- data/lib/br_nfe/product/base.rb +0 -82
- data/lib/br_nfe/product/consulta_status_servico.rb +0 -35
- data/lib/br_nfe/product/value_nf.rb +0 -9
- data/lib/br_nfe/product/xml/v3_10/consulta_status_servico.xml.slim +0 -4
- data/test/br_nfe/product/base_test.rb +0 -150
- data/test/br_nfe/product/consulta_status_servico_test.rb +0 -59
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeRecepcaoEvento < Base
|
|
5
|
+
|
|
6
|
+
# NÚMERO DO LOTE
|
|
7
|
+
# Identificador de controle do Lote de envio do Evento.
|
|
8
|
+
# Número sequencial autoincremental único para identificação
|
|
9
|
+
# do Lote. A responsabilidade de gerar e controlar é exclusiva
|
|
10
|
+
# do autor do evento. O Web Service não faz qualquer uso
|
|
11
|
+
# deste identificador.
|
|
12
|
+
#
|
|
13
|
+
# <b>Type: </b> _Number_
|
|
14
|
+
# <b>Required: </b> _Yes_
|
|
15
|
+
# <b>Example: </b> _20161230135547_
|
|
16
|
+
# <b>Length: </b> _max: 15_
|
|
17
|
+
# <b>tag: </b> idLote
|
|
18
|
+
#
|
|
19
|
+
attr_accessor :numero_lote
|
|
20
|
+
alias_attribute :idLote, :numero_lote
|
|
21
|
+
|
|
22
|
+
# EVENTO DE CANCELAMENTO
|
|
23
|
+
# Só pode haver 1 evento do tipo cancelamento por Lote.
|
|
24
|
+
#
|
|
25
|
+
has_one :cancelamento, 'BrNfe.cancelamento_product_class'
|
|
26
|
+
|
|
27
|
+
validate_has_one :cancelamento
|
|
28
|
+
|
|
29
|
+
validates :numero_lote, presence: true
|
|
30
|
+
validates :numero_lote, numericality: {only_integer: true}, allow_blank: true
|
|
31
|
+
validates :numero_lote, length: {maximum: 15}, allow_blank: true
|
|
32
|
+
|
|
33
|
+
# URL do webservice para enviar as informações.
|
|
34
|
+
# Ex:
|
|
35
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
36
|
+
def wsdl
|
|
37
|
+
gateway.wsdl_recepcao_evento
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Método SOAP que será chamado para enviar o XML
|
|
41
|
+
def method_wsdl
|
|
42
|
+
gateway.operation_recepcao_evento
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
46
|
+
def gateway_xml_version
|
|
47
|
+
gateway.version_xml_recepcao_evento
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# URL que será setada no atribto xmlns do XML;
|
|
51
|
+
# Ex:
|
|
52
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
53
|
+
def url_xmlns
|
|
54
|
+
gateway.url_xmlns_recepcao_evento
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Versão SSL utilizada pelo webservice
|
|
58
|
+
def ssl_version
|
|
59
|
+
gateway.ssl_version_recepcao_evento
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
63
|
+
# específicas de cada operação.
|
|
64
|
+
def xml_builder
|
|
65
|
+
@xml_builder ||= render_xml 'root/NfeRecepcaoEvento'
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeRetAutorizacao < Base
|
|
5
|
+
# NÚMERO DO RECIBO/PROTOCOLO
|
|
6
|
+
# Número gerado pelo Portal da Secretaria de
|
|
7
|
+
# Fazenda Estadual
|
|
8
|
+
#
|
|
9
|
+
# <b>Type: </b> _Number_
|
|
10
|
+
# <b>Required: </b> _Yes_
|
|
11
|
+
# <b>Example: </b> _42201612301355_
|
|
12
|
+
# <b>Length: </b> _max: 15_
|
|
13
|
+
# <b>tag: </b> nRec
|
|
14
|
+
#
|
|
15
|
+
attr_accessor :numero_recibo
|
|
16
|
+
alias_attribute :nRec, :numero_recibo
|
|
17
|
+
|
|
18
|
+
validates :numero_recibo, presence: true
|
|
19
|
+
validates :numero_recibo, numericality: {only_integer: true}, allow_blank: true
|
|
20
|
+
validates :numero_recibo, length: {maximum: 15}, allow_blank: true
|
|
21
|
+
|
|
22
|
+
# URL do webservice para enviar as informações.
|
|
23
|
+
# Ex:
|
|
24
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
25
|
+
def wsdl
|
|
26
|
+
gateway.wsdl_retorno_autorizacao
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Método SOAP que será chamado para enviar o XML
|
|
30
|
+
def method_wsdl
|
|
31
|
+
gateway.operation_retorno_autorizacao
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
35
|
+
def gateway_xml_version
|
|
36
|
+
gateway.version_xml_retorno_autorizacao
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# URL que será setada no atribto xmlns do XML;
|
|
40
|
+
# Ex:
|
|
41
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
42
|
+
def url_xmlns
|
|
43
|
+
gateway.url_xmlns_retorno_autorizacao
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Versão SSL utilizada pelo webservice
|
|
47
|
+
def ssl_version
|
|
48
|
+
gateway.ssl_version_retorno_autorizacao
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
52
|
+
# específicas de cada operação.
|
|
53
|
+
def xml_builder
|
|
54
|
+
@xml_builder ||= render_xml 'root/NfeRetAutorizacao'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def response_class_builder
|
|
58
|
+
BrNfe::Product::Response::Build::NfeRetAutorizacao
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeStatusServico < Base
|
|
5
|
+
# URL que será setada no atribto xmlns do XML;
|
|
6
|
+
# Ex:
|
|
7
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
8
|
+
def url_xmlns
|
|
9
|
+
gateway.url_xmlns_status_servico
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# URL do webservice para enviar as informações.
|
|
13
|
+
# Ex:
|
|
14
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
15
|
+
def wsdl
|
|
16
|
+
gateway.wsdl_status_servico
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Método SOAP que será chamado para enviar o XML
|
|
20
|
+
def method_wsdl
|
|
21
|
+
gateway.operation_status_servico
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
25
|
+
def gateway_xml_version
|
|
26
|
+
gateway.version_xml_status_servico
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Versão SSL utilizada pelo webservice
|
|
30
|
+
def ssl_version
|
|
31
|
+
gateway.ssl_version_status_servico
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
35
|
+
# específicas de cada operação.
|
|
36
|
+
def xml_builder
|
|
37
|
+
@xml_builder ||= render_xml 'root/NfeStatusServico'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def response_class_builder
|
|
41
|
+
BrNfe::Product::Response::Build::NfeStatusServico
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Response
|
|
4
|
+
class Base < BrNfe::ActiveModelBase
|
|
5
|
+
|
|
6
|
+
# XML ORIGINAL ENVIADO PELA SEFAZ
|
|
7
|
+
attr_accessor :soap_xml
|
|
8
|
+
|
|
9
|
+
# AMBIENTE DO PROCESSAMENTO
|
|
10
|
+
attr_accessor :environment
|
|
11
|
+
alias_attribute :tpAmb, :environment
|
|
12
|
+
def environment
|
|
13
|
+
if @environment.to_i == 1
|
|
14
|
+
:production
|
|
15
|
+
else
|
|
16
|
+
:test
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Versão do aplicativo da SEFAZ
|
|
21
|
+
attr_accessor :app_version
|
|
22
|
+
alias_attribute :verAplic, :app_version
|
|
23
|
+
|
|
24
|
+
# DATA E HORA DO PROCESSAMENTO DA REQUISIÇÃO
|
|
25
|
+
#
|
|
26
|
+
attr_accessor :processed_at
|
|
27
|
+
def processed_at
|
|
28
|
+
convert_to_time(@processed_at)
|
|
29
|
+
end
|
|
30
|
+
alias_attribute :dhRecbto, :processed_at
|
|
31
|
+
|
|
32
|
+
# PROTOCOLO / NÚMERO DO RECIBO
|
|
33
|
+
# Número do Recibo gerado pelo Portal da
|
|
34
|
+
# Secretaria de Fazenda Estadual
|
|
35
|
+
#
|
|
36
|
+
attr_accessor :protocol
|
|
37
|
+
alias_attribute :nRec, :protocol
|
|
38
|
+
|
|
39
|
+
# STATUS PARA SABER SE A REQUISIÇÃO PARA A SEFAZ FOI BEM SUCEDIDA
|
|
40
|
+
# Pode ocorrer erros como HTTPError quando o servidor está offline.
|
|
41
|
+
# Nesses casos a requsição sempre será tratada e adicionado as mensagens
|
|
42
|
+
# de erro no attr :request_message_error
|
|
43
|
+
#
|
|
44
|
+
# Status possíveis:
|
|
45
|
+
# + :success = Requisição efetuada com sucesso e contém um XML para verificação dos dados
|
|
46
|
+
# + :soap_error = Quando houve um erro do tipo Savon::SOAPFault
|
|
47
|
+
# + :http_error = Quando houve um erro do tipo Savon::HTTPError
|
|
48
|
+
# + :unknown_error = Quando houve outro erro desconhecido
|
|
49
|
+
#
|
|
50
|
+
attr_accessor :request_status
|
|
51
|
+
attr_accessor :request_message_error
|
|
52
|
+
|
|
53
|
+
# STATUS DO PROCESSAMENTO DA OPERAÇÃO
|
|
54
|
+
# Esse status é utilizado para saber se a operação
|
|
55
|
+
# foi processada com sucesso ou não.
|
|
56
|
+
# Será preenchida apenas se o attr :request_status for :success
|
|
57
|
+
#
|
|
58
|
+
# Retornos possíveis:
|
|
59
|
+
# + :success - Quando a operação requisitada foi processada e obteve
|
|
60
|
+
# sucesso no processamento. Será necessário verificar o
|
|
61
|
+
# status individual de cada operação.
|
|
62
|
+
#
|
|
63
|
+
# + :processing - Quando ainda está em processamento e será necessário
|
|
64
|
+
# fazer uma nova requisição.
|
|
65
|
+
#
|
|
66
|
+
# + :offline - Quando o serviço estiver offline
|
|
67
|
+
#
|
|
68
|
+
# + :denied - Quando o acesso foi denegado
|
|
69
|
+
#
|
|
70
|
+
# + :error - Quando houve algum erro no processamento
|
|
71
|
+
#
|
|
72
|
+
attr_accessor :processing_status_code
|
|
73
|
+
alias_attribute :cStat, :processing_status_code
|
|
74
|
+
attr_accessor :processing_status_motive
|
|
75
|
+
alias_attribute :xMotivo, :processing_status_motive
|
|
76
|
+
|
|
77
|
+
def processing_status
|
|
78
|
+
if "#{processing_status_code} ".strip.in?( BrNfe::Constants::NFE_STATUS_SUCCESS )
|
|
79
|
+
:success
|
|
80
|
+
elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_PROCESSING )
|
|
81
|
+
:processing
|
|
82
|
+
elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_OFFLINE )
|
|
83
|
+
:offline
|
|
84
|
+
elsif "#{processing_status_code}".strip.in?( BrNfe::Constants::NFE_STATUS_DENIED )
|
|
85
|
+
:denied
|
|
86
|
+
else
|
|
87
|
+
:error
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def processed_successfully?
|
|
92
|
+
processing_status == :success
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Response
|
|
4
|
+
module Build
|
|
5
|
+
class Base < BrNfe::ActiveModelBase
|
|
6
|
+
attr_accessor :savon_response
|
|
7
|
+
attr_accessor :operation
|
|
8
|
+
|
|
9
|
+
def original_xml
|
|
10
|
+
@original_xml ||= operation.original_xml || operation.xml_builder
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Responsável por instanciar o objeto de resposta contendo os valores
|
|
14
|
+
# pertinentes a cada operação.
|
|
15
|
+
#
|
|
16
|
+
def response
|
|
17
|
+
return @response if @response
|
|
18
|
+
@response = response_class.new({
|
|
19
|
+
soap_xml: savon_response.try(:xml).try(:force_encoding, 'UTF-8'),
|
|
20
|
+
request_status: :success
|
|
21
|
+
})
|
|
22
|
+
@response.assign_attributes(specific_attributes)
|
|
23
|
+
@response
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Responsável por definir a classe da resposta que será instânciada
|
|
27
|
+
# para cada operação.
|
|
28
|
+
# Esse método deve ser sobrescrito para cada operação.
|
|
29
|
+
#
|
|
30
|
+
# <b>Type: </b> _Class_
|
|
31
|
+
#
|
|
32
|
+
def response_class
|
|
33
|
+
BrNfe::Product::Response::Base
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# É utilizado para setar os atributos específicos para
|
|
37
|
+
# o retorno de cada operação.
|
|
38
|
+
# É útil para evitar sobrescrever e duplicar código do
|
|
39
|
+
# método response
|
|
40
|
+
#
|
|
41
|
+
# <b>Type: </b> _Hash_
|
|
42
|
+
#
|
|
43
|
+
def specific_attributes
|
|
44
|
+
{}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Responsável por identificar o xmlns principal da resposta.
|
|
48
|
+
# Esse valor é utilizado para dar o Start para encontrar o conteúdo
|
|
49
|
+
# na arvore de tags xml.
|
|
50
|
+
#
|
|
51
|
+
# <b>Type: </b> _String_
|
|
52
|
+
#
|
|
53
|
+
def url_xmlns_retorno
|
|
54
|
+
@url_xmlns_retorno ||= header_xml.collect_namespaces['xmlns']
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Responsável por trazer qual a versão do layout o XML da resposta
|
|
58
|
+
# foi feito.
|
|
59
|
+
# Irá converter a versão em Symbol e alterar o ponto(.) em underline(_).
|
|
60
|
+
# Também irá acrescentar um 'v' na frente da versão.
|
|
61
|
+
# Irá pegar a versão a partir da tag 'versaoDados' presente no Header
|
|
62
|
+
# da requisição Soap.
|
|
63
|
+
# É útil para saber como pegar as informações do XML, pois como cada
|
|
64
|
+
# versão pode ter uma estrutura diferente, o conteúdo desse método
|
|
65
|
+
# irá auxiliar na decisão de como buscar o conteúdo.
|
|
66
|
+
#
|
|
67
|
+
# Exemplos:
|
|
68
|
+
# Versão do XML Retorno
|
|
69
|
+
# '1.00' => :v1_00
|
|
70
|
+
# '2.01' => :v2_01
|
|
71
|
+
# '3.10' => :v3_10
|
|
72
|
+
#
|
|
73
|
+
# # <b>Type: </b> _Symbol_
|
|
74
|
+
#
|
|
75
|
+
def xml_version
|
|
76
|
+
return @xml_version if @xml_version
|
|
77
|
+
version = header_xml.xpath('//nf:nfeCabecMsg/nf:versaoDados', nf: url_xmlns_retorno).text
|
|
78
|
+
@xml_version = "v#{version.gsub('.','_')}".to_sym
|
|
79
|
+
end
|
|
80
|
+
# Versão do XML em forma de String
|
|
81
|
+
# ex: '3.10'
|
|
82
|
+
def xml_version_str
|
|
83
|
+
return @xml_version_str if @xml_version_str
|
|
84
|
+
@xml_version_str = header_xml.xpath('//nf:nfeCabecMsg/nf:versaoDados', nf: url_xmlns_retorno).text
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Responsável por pegar o conteúdo presente dentro da tag
|
|
88
|
+
# Body da resposta Soap.
|
|
89
|
+
# É útil para facilitar a busca e manupilação do XML presente
|
|
90
|
+
# dentro do Body da resposta Soap
|
|
91
|
+
#
|
|
92
|
+
# # <b>Type: </b> _Nokogiri::XML::Document_
|
|
93
|
+
#
|
|
94
|
+
def body_xml
|
|
95
|
+
@body_xml ||= parse_nokogiri_xml( response_xml.xpath('//soap:Envelope/soap:Body', 'xmlns:soap' => "http://www.w3.org/2003/05/soap-envelope").try(:children).try(:to_xml) )
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Responsável por pegar o conteúdo presente dentro da tag
|
|
99
|
+
# Header da resposta Soap.
|
|
100
|
+
# É útil para facilitar a busca e manupilação do XML presente
|
|
101
|
+
# dentro do Header da resposta Soap
|
|
102
|
+
#
|
|
103
|
+
# # <b>Type: </b> _Nokogiri::XML::Document_
|
|
104
|
+
#
|
|
105
|
+
def header_xml
|
|
106
|
+
@header_xml ||= parse_nokogiri_xml( response_xml.xpath('//soap:Envelope/soap:Header', 'xmlns:soap' => "http://www.w3.org/2003/05/soap-envelope").try(:children).try(:to_xml) )
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Responsável por converter a string xml a ser modificado
|
|
110
|
+
# em um Nokogiri::XML::Document
|
|
111
|
+
# É útil para evitar ficar dando o parse no xml toda vez que precisa
|
|
112
|
+
# ser utilizado.
|
|
113
|
+
#
|
|
114
|
+
# # <b>Type: </b> _Nokogiri::XML::Document_
|
|
115
|
+
#
|
|
116
|
+
def doc_original_xml
|
|
117
|
+
@doc_original_xml ||= parse_nokogiri_xml( original_xml )
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Contém o XML completo da resposta Soap.
|
|
121
|
+
# É útil para evitar ficar dando o parse no xml toda vez que precisa
|
|
122
|
+
# ser utilizado.
|
|
123
|
+
#
|
|
124
|
+
# # <b>Type: </b> _Nokogiri::XML::Document_
|
|
125
|
+
#
|
|
126
|
+
def response_xml
|
|
127
|
+
@response_xml ||= parse_nokogiri_xml(savon_response.try(:xml))
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# XMLNS PADRÃO DA NOTA FISCAL
|
|
131
|
+
#
|
|
132
|
+
def nf_xmlns
|
|
133
|
+
'http://www.portalfiscal.inf.br/nfe'
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
private
|
|
137
|
+
|
|
138
|
+
# Reponsável por converter uma string(XML) em um elemento
|
|
139
|
+
# da classe Nokogiri::XML::Document.
|
|
140
|
+
#
|
|
141
|
+
def parse_nokogiri_xml str_xml
|
|
142
|
+
if str_xml.include?('<?xml')
|
|
143
|
+
Nokogiri::XML(str_xml)
|
|
144
|
+
else
|
|
145
|
+
Nokogiri::XML('<?xml version="1.0" encoding="UTF-8"?>'+str_xml)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Rsponsável por instânciar uma nota fiscal a partir da tag protNFe.
|
|
150
|
+
# Também vai setar o atributo xml específico da nota fiscal a partir
|
|
151
|
+
# do valor setado em :original_xml
|
|
152
|
+
#
|
|
153
|
+
# Deve ser passado por parâmetro um objeto da class Nokogiri::XML::Document
|
|
154
|
+
# com a estrutura do protocolo da NFE. EX:
|
|
155
|
+
# <protNFe versao="3.10">
|
|
156
|
+
# <infProt>
|
|
157
|
+
# <tpAmb>2</tpAmb>
|
|
158
|
+
# <verAplic>SVRS201611281548</verAplic>
|
|
159
|
+
# <chNFe>42161208897094000155550010000000031201601010</chNFe>
|
|
160
|
+
# <dhRecbto>2016-12-23T15:02:01-02:00</dhRecbto>
|
|
161
|
+
# <nProt>342160000820227</nProt>
|
|
162
|
+
# <digVal>eoBzPod21zF9/46jjOS2kLRyTPM=</digVal>
|
|
163
|
+
# <cStat>100</cStat>
|
|
164
|
+
# <xMotivo>Autorizado o uso da NF-e</xMotivo>
|
|
165
|
+
# </infProt>
|
|
166
|
+
# </protNFe>
|
|
167
|
+
#
|
|
168
|
+
# <b>Type: </b> _BrNfe.nota_fiscal_product_class_
|
|
169
|
+
#
|
|
170
|
+
def build_invoice_by_prot_nfe prot_nfe
|
|
171
|
+
invoice = BrNfe.nota_fiscal_product_class.new do |nfe|
|
|
172
|
+
nfe.processed_at = get_processed_at_from_prot_nfe( prot_nfe )
|
|
173
|
+
nfe.protocol = get_protocol_from_prot_nfe( prot_nfe )
|
|
174
|
+
nfe.digest_value = get_digest_value_from_prot_nfe( prot_nfe )
|
|
175
|
+
nfe.status_code = get_status_code_from_prot_nfe( prot_nfe )
|
|
176
|
+
nfe.status_motive = get_status_motive_from_prot_nfe( prot_nfe )
|
|
177
|
+
nfe.chave_de_acesso = get_access_key_from_prot_nfe( prot_nfe )
|
|
178
|
+
end
|
|
179
|
+
# 1° - Seta os valores possíveis encontrados na chave de acesso da NF-e
|
|
180
|
+
set_invoice_values_by_access_key!( invoice )
|
|
181
|
+
|
|
182
|
+
# 2° - Seta o XML da respectiva NF-e no objeto já com a tag <nfeProc>
|
|
183
|
+
# e a tag do protocolo(<protNFe>)
|
|
184
|
+
set_invoice_xml_with_prot_nfe!( invoice, prot_nfe )
|
|
185
|
+
invoice
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def get_processed_at_from_prot_nfe prot_nfe
|
|
189
|
+
prot_nfe.xpath('//protNFe/infProt/dhRecbto').text
|
|
190
|
+
end
|
|
191
|
+
def get_protocol_from_prot_nfe prot_nfe
|
|
192
|
+
prot_nfe.xpath('//protNFe/infProt/nProt').text
|
|
193
|
+
end
|
|
194
|
+
def get_digest_value_from_prot_nfe prot_nfe
|
|
195
|
+
prot_nfe.xpath('//protNFe/infProt/digVal').text
|
|
196
|
+
end
|
|
197
|
+
def get_status_code_from_prot_nfe prot_nfe
|
|
198
|
+
prot_nfe.xpath('//protNFe/infProt/cStat').text
|
|
199
|
+
end
|
|
200
|
+
def get_status_motive_from_prot_nfe prot_nfe
|
|
201
|
+
prot_nfe.xpath('//protNFe/infProt/xMotivo').text
|
|
202
|
+
end
|
|
203
|
+
def get_access_key_from_prot_nfe prot_nfe
|
|
204
|
+
prot_nfe.xpath('//protNFe/infProt/chNFe').text
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Seta os valores que estão concatenados na chave da NF-e
|
|
208
|
+
# como o número da nota fiscal, cnpj do emitente, entre outros
|
|
209
|
+
# valores.
|
|
210
|
+
#
|
|
211
|
+
def set_invoice_values_by_access_key!(invoice)
|
|
212
|
+
if invoice.chave_de_acesso.present?
|
|
213
|
+
invoice.emitente.cnpj = invoice.chave_de_acesso[6..19]
|
|
214
|
+
invoice.modelo_nf = invoice.chave_de_acesso[20..21]
|
|
215
|
+
invoice.serie = invoice.chave_de_acesso[22..24]
|
|
216
|
+
invoice.numero_nf = invoice.chave_de_acesso[25..33].to_i
|
|
217
|
+
invoice.codigo_nf = invoice.chave_de_acesso[35..42].to_i
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Responsável por adicionar a tag <protNFe> dentro da tag <nfeProc>.
|
|
222
|
+
# Também irá setar o XMl atualizado no attr :xml da nota fiscal
|
|
223
|
+
#
|
|
224
|
+
def set_invoice_xml_with_prot_nfe!(invoice, prot_nfe)
|
|
225
|
+
if nfeProc = find_or_create_nfeProc_of_invoice_xml_by_access_key( invoice )
|
|
226
|
+
# Só adiciona o protocolo se a nota foi emitida com sucesso
|
|
227
|
+
if invoice.status == :success
|
|
228
|
+
add_prot_nfe_into_nfe_proc( nfeProc, prot_nfe )
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
invoice.xml = '<?xml version="1.0" encoding="UTF-8"?>'+canonicalize( nfeProc.to_xml )
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Responsável por adicionar o protocolo da NFe dentro da tag nfeProc
|
|
236
|
+
# a baixo da tag NFe.
|
|
237
|
+
# Caso já exista a tag protNFe não irá adiciona-lo novamente.
|
|
238
|
+
#
|
|
239
|
+
def add_prot_nfe_into_nfe_proc nfe_proc, prot_nfe
|
|
240
|
+
if nfe_proc.xpath('//nf:nfeProc/nf:protNFe', nf: nf_xmlns).blank?
|
|
241
|
+
nfe_proc.xpath('//nf:nfeProc', nf: nf_xmlns).
|
|
242
|
+
children.last.try(:add_next_sibling, prot_nfe.root.to_xml )
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Responsável por Encontrar ou Criar a estrutura nfeProc de uma
|
|
247
|
+
# Determinada nota fiscal.
|
|
248
|
+
# 1° Verifica se existe algum XML setado no objeto da nota, e se existir,
|
|
249
|
+
# irá montar a nfeProc da nota e retornar o documento XML
|
|
250
|
+
# 2° Caso não encontre o xml direto na NF, irá procurar o xml através
|
|
251
|
+
# do método original_xml.
|
|
252
|
+
#
|
|
253
|
+
# Estrutura de retorno:
|
|
254
|
+
# <nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
|
|
255
|
+
# <NFe>...</NFe>
|
|
256
|
+
# </nfeProc>
|
|
257
|
+
#
|
|
258
|
+
# <b>Type: </b> _Nokogiri::XML::Document_
|
|
259
|
+
#
|
|
260
|
+
def find_or_create_nfeProc_of_invoice_xml_by_access_key invoice
|
|
261
|
+
doc_nf = "#{invoice.xml}".strip.present? ? parse_nokogiri_xml("#{invoice.xml}") : parse_nokogiri_xml(original_xml)
|
|
262
|
+
if node = doc_nf.search("NFe/infNFe[@Id*=\"#{invoice.chave_de_acesso}\"]").first
|
|
263
|
+
if doc_nf.xpath('/*').first.try(:name) == 'nfeProc'
|
|
264
|
+
doc_nf
|
|
265
|
+
else
|
|
266
|
+
parse_nokogiri_xml( create_proc_tag( node.parent.to_s ) )
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Responsável por criar a tag <nfeProc> e adicionar o conteúdo
|
|
272
|
+
# passado por parâmetro dentro da tag.
|
|
273
|
+
# Deve ser passado o xml em forma de String.
|
|
274
|
+
#
|
|
275
|
+
# <b>Type: </b> _String_
|
|
276
|
+
#
|
|
277
|
+
def create_proc_tag nfe_xml
|
|
278
|
+
xml = "<nfeProc xmlns=\"#{nf_xmlns}\" versao=\"#{xml_version_str}\">"
|
|
279
|
+
xml << nfe_xml
|
|
280
|
+
xml << '</nfeProc>'
|
|
281
|
+
xml
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Response
|
|
4
|
+
module Build
|
|
5
|
+
class NfeAutorizacao < Base
|
|
6
|
+
|
|
7
|
+
def notas_fiscais
|
|
8
|
+
operation.notas_fiscais
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Responsável por definir qual classe será instânciada para
|
|
12
|
+
# setar os valores de retorno referentes a cada operação.
|
|
13
|
+
#
|
|
14
|
+
# <b>Type: </b> _Class_
|
|
15
|
+
#
|
|
16
|
+
def response_class
|
|
17
|
+
BrNfe::Product::Response::NfeAutorizacao
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Responsável por setar os atributos específicos para
|
|
21
|
+
# cada tipo de operação.
|
|
22
|
+
#
|
|
23
|
+
# <b>Type: </b> _Hash_
|
|
24
|
+
#
|
|
25
|
+
def specific_attributes
|
|
26
|
+
attrs = {
|
|
27
|
+
environment: body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:tpAmb', nf: nf_xmlns, ret: url_xmlns_retorno).text,
|
|
28
|
+
app_version: body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:verAplic', nf: nf_xmlns, ret: url_xmlns_retorno).text,
|
|
29
|
+
processed_at: request_processed_at,
|
|
30
|
+
|
|
31
|
+
processing_status_code: get_processing_status_code,
|
|
32
|
+
processing_status_motive: get_processing_status_motive,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if async_protocol.present?
|
|
36
|
+
# Se entrar aqui é porque o lote é assíncrono e tem um protocolo
|
|
37
|
+
attrs[:protocol] = async_protocol
|
|
38
|
+
attrs[:tempo_medio] = body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:infRec/nf:tMed', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
39
|
+
else
|
|
40
|
+
attrs[:protocol] = body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:protNFe/nf:infProt/nf:nProt', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
manage_invoices!
|
|
44
|
+
attrs[:notas_fiscais] = notas_fiscais
|
|
45
|
+
|
|
46
|
+
attrs
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def async_protocol
|
|
50
|
+
@async_protocol ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:infRec/nf:nRec', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def node_prot_nfe
|
|
54
|
+
body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:protNFe', nf: nf_xmlns, ret: url_xmlns_retorno)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def manage_invoices!
|
|
58
|
+
if async_protocol.present?
|
|
59
|
+
notas_fiscais.each do |nf|
|
|
60
|
+
nf.protocol = async_protocol
|
|
61
|
+
nf.processed_at = request_processed_at
|
|
62
|
+
nf.status_code = get_processing_status_code
|
|
63
|
+
nf.status_motive = get_processing_status_motive
|
|
64
|
+
end
|
|
65
|
+
elsif node_prot_nfe.present?
|
|
66
|
+
notas_fiscais.each do |nfe|
|
|
67
|
+
prot_nfe = parse_nokogiri_xml( node_prot_nfe.to_xml )
|
|
68
|
+
set_invoice_protocol!(nfe, prot_nfe)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def set_invoice_protocol! invoice, prot_nfe
|
|
74
|
+
invoice.processed_at = get_processed_at_from_prot_nfe( prot_nfe )
|
|
75
|
+
invoice.protocol = get_protocol_from_prot_nfe( prot_nfe )
|
|
76
|
+
invoice.digest_value = get_digest_value_from_prot_nfe( prot_nfe )
|
|
77
|
+
invoice.status_code = get_status_code_from_prot_nfe( prot_nfe )
|
|
78
|
+
invoice.status_motive = get_status_motive_from_prot_nfe( prot_nfe )
|
|
79
|
+
invoice.chave_de_acesso = get_access_key_from_prot_nfe( prot_nfe )
|
|
80
|
+
|
|
81
|
+
# Seta o XML da respectiva NF-e no objeto já com a tag <nfeProc>
|
|
82
|
+
# e a tag do protocolo(<protNFe>)
|
|
83
|
+
set_invoice_xml_with_prot_nfe!( invoice, prot_nfe ) if invoice.status == :success
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def request_processed_at
|
|
89
|
+
@request_processed_at ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:dhRecbto', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def get_processing_status_code
|
|
93
|
+
@get_processing_status_code ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:cStat', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
94
|
+
end
|
|
95
|
+
def get_processing_status_motive
|
|
96
|
+
@get_processing_status_motive ||= body_xml.xpath('//ret:nfeAutorizacaoLoteResult/nf:retEnviNFe/nf:xMotivo', nf: nf_xmlns, ret: url_xmlns_retorno).text
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|