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,255 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class Base < BrNfe::Base
|
|
5
|
+
include NfXmlValue
|
|
6
|
+
|
|
7
|
+
# Serve para saber se vai usar o módo de contingência, e se usar,
|
|
8
|
+
# serve para saber qual o tipo de contingência será utilizado.
|
|
9
|
+
# Options: [:normal, :svc]
|
|
10
|
+
#
|
|
11
|
+
# <b>Required: </b> _Yes_
|
|
12
|
+
# <b>Default: </b> _:normal_
|
|
13
|
+
#
|
|
14
|
+
attr_accessor :tipo_emissao
|
|
15
|
+
|
|
16
|
+
# Informações que devem ser informadas quando a operação for em contingência.
|
|
17
|
+
#
|
|
18
|
+
attr_accessor :motivo_contingencia
|
|
19
|
+
attr_accessor :inicio_contingencia # Data e hora do início da contingência
|
|
20
|
+
def inicio_contingencia
|
|
21
|
+
convert_to_time(@inicio_contingencia)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# String XML que será aplicado o resultado da resposta do serviço
|
|
25
|
+
# de acordo com a operação.
|
|
26
|
+
# Por exemplo, quando vai consultar o protocolo da emissão de uma nfe,
|
|
27
|
+
# deve ser passado por parâmetro o XML da NF-e para que seja possível obter
|
|
28
|
+
# o XML da nota fiscal junto com o protocolo de autorização.
|
|
29
|
+
# Também quando for cancelar uma nota fiscal deve passar o XML da nota para
|
|
30
|
+
# que seja adicionado o protocolo de confirmação de cancelamento junto a nota.
|
|
31
|
+
#
|
|
32
|
+
# <b>Required: </b> _No_
|
|
33
|
+
# <b>Type: </b> _String_ XML
|
|
34
|
+
#
|
|
35
|
+
attr_accessor :original_xml
|
|
36
|
+
|
|
37
|
+
validates :tipo_emissao, inclusion: {in: [:normal, :svc]}
|
|
38
|
+
validates :inicio_contingencia, presence: true, if: :contingencia?
|
|
39
|
+
validates :motivo_contingencia, length: { minimum: 15, maximum: 256 }, if: :contingencia?
|
|
40
|
+
|
|
41
|
+
def default_values
|
|
42
|
+
{
|
|
43
|
+
tipo_emissao: :normal,
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def certificado_obrigatorio?
|
|
48
|
+
true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Para as Notas fiscais de produto a autenticação via SSL é obrigatória
|
|
52
|
+
def ssl_request?
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# O Gateway é responsável de identificar o Webservice de acordo com o Estado(UF).
|
|
57
|
+
# Irá identificar o webservice através do valor do método `ibge_code_of_issuer_uf`,
|
|
58
|
+
# na qual pode ser setado diretamente ou pego através do endereço do emissor.
|
|
59
|
+
# Para ver a lista de WebService por estado acesse: http://www.nfe.fazenda.gov.br/portal/webServices.aspx
|
|
60
|
+
#
|
|
61
|
+
# <b>Tipo de retorno: </b> _Object (Gateway::Base ou derivados)_
|
|
62
|
+
#
|
|
63
|
+
def gateway
|
|
64
|
+
@gateway ||= case tipo_emissao
|
|
65
|
+
when :normal
|
|
66
|
+
get_gateway_by_normal_operation
|
|
67
|
+
when :svc
|
|
68
|
+
get_gateway_by_svc_operation
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# WebServices utilizados para contingência em SVC (Servidor Virtual de Contingência)
|
|
73
|
+
# Existe 2 servidores de contingência para SVC: O `SVC-AN` e `SVC-RS`
|
|
74
|
+
# Cada estado(UF) é autorizado a emitir notas em contingência em apenas 1 dos servidores.
|
|
75
|
+
# Esse método é responsável em setar qual o WebService será utilizado para cada UF.
|
|
76
|
+
#
|
|
77
|
+
# <b>Tipo de retorno: </b> _Object (::WebServiceSvcRS ou ::WebServiceSvcAN)_
|
|
78
|
+
#
|
|
79
|
+
def get_gateway_by_svc_operation
|
|
80
|
+
case ibge_code_of_issuer_uf
|
|
81
|
+
# 'AM', 'BA', 'CE', 'GO', 'MA', 'MS', 'MT', 'PA', 'PE', 'PI', 'PR'
|
|
82
|
+
when '13', '29', '23', '52', '21', '50', '51', '15', '26', '22', '41'
|
|
83
|
+
BrNfe::Product::Gateway::WebServiceSvcRS.new({env: env})
|
|
84
|
+
else # AC, AL, AP, DF, ES, MG, PB, RJ, RN, RO, RR, RS, SC, SE, SP, TO
|
|
85
|
+
BrNfe::Product::Gateway::WebServiceSvcAN.new({env: env})
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Seta o WebService quando o tipo de emissão for normal para cada UF
|
|
90
|
+
#
|
|
91
|
+
# <b>Tipo de retorno: </b> _Object (Gateway::Base ou derivados)_
|
|
92
|
+
#
|
|
93
|
+
def get_gateway_by_normal_operation
|
|
94
|
+
case ibge_code_of_issuer_uf
|
|
95
|
+
when '13'
|
|
96
|
+
BrNfe::Product::Gateway::WebServiceAM.new({env: env})
|
|
97
|
+
when '29'
|
|
98
|
+
BrNfe::Product::Gateway::WebServiceBA.new({env: env})
|
|
99
|
+
when '23'
|
|
100
|
+
BrNfe::Product::Gateway::WebServiceCE.new({env: env})
|
|
101
|
+
when '52'
|
|
102
|
+
BrNfe::Product::Gateway::WebServiceGO.new({env: env})
|
|
103
|
+
when '31'
|
|
104
|
+
BrNfe::Product::Gateway::WebServiceMG.new({env: env})
|
|
105
|
+
when '50'
|
|
106
|
+
BrNfe::Product::Gateway::WebServiceMS.new({env: env})
|
|
107
|
+
when '51'
|
|
108
|
+
BrNfe::Product::Gateway::WebServiceMT.new({env: env})
|
|
109
|
+
when '26'
|
|
110
|
+
BrNfe::Product::Gateway::WebServicePE.new({env: env})
|
|
111
|
+
when '41'
|
|
112
|
+
BrNfe::Product::Gateway::WebServicePR.new({env: env})
|
|
113
|
+
when '43'
|
|
114
|
+
BrNfe::Product::Gateway::WebServiceRS.new({env: env})
|
|
115
|
+
when '35'
|
|
116
|
+
BrNfe::Product::Gateway::WebServiceSP.new({env: env})
|
|
117
|
+
when '21', '15', '22'
|
|
118
|
+
BrNfe::Product::Gateway::WebServiceSVAN.new({env: env})
|
|
119
|
+
else
|
|
120
|
+
BrNfe::Product::Gateway::WebServiceSVRS.new({env: env})
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Valor utilizado para inserir a url do xmlns nas tags nfeCabecMsg e nfeDadosMsg.
|
|
125
|
+
# Como a url pode variar de acordo com o tipo de serviço e UF, deve ser sobrescrita
|
|
126
|
+
# na subclass de cada serviço.
|
|
127
|
+
#
|
|
128
|
+
# <b>Tipo de retorno: </b> _String_
|
|
129
|
+
#
|
|
130
|
+
def url_xmlns
|
|
131
|
+
raise "O método #url_xmlns deve ser implementar em cada operação"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Irá retornar a versão setada de acordo com o serviço e estado.
|
|
135
|
+
# Deve ser sobrescrito para cada serviço e irá pegar a versão do XML
|
|
136
|
+
# de acordo com o Estado e Serviço, conforme descrito em: http://www.nfe.fazenda.gov.br/portal/webServices.aspx
|
|
137
|
+
#
|
|
138
|
+
# <b>Tipo de retorno: </b> _Symbol_
|
|
139
|
+
#
|
|
140
|
+
def gateway_xml_version
|
|
141
|
+
raise "O método #gateway_xml_version deve ser implementar em cada operação"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Versão do XML utilizado na requisição.
|
|
145
|
+
# Como a versão do XML pode divergir para cada estado/servidor e serviço,
|
|
146
|
+
# é necessário passar a versão do XML na requisição para o servidor saber qual
|
|
147
|
+
# validação aplicar e como pegar os dados.
|
|
148
|
+
# Esse método tem o intuíto de pegar a versão setada no Gateway de cada UF e serviço
|
|
149
|
+
# e transformar em uma String aplicável no XML.
|
|
150
|
+
# Exemplo:
|
|
151
|
+
# Se a versão do xml for :v3_10
|
|
152
|
+
# Esse método irá transformar o valor em '3.10'
|
|
153
|
+
#
|
|
154
|
+
# <b>Tipo de retorno: </b> _String_
|
|
155
|
+
#
|
|
156
|
+
def xml_version
|
|
157
|
+
"#{gateway_xml_version}".gsub('_','.').gsub(/[^\d\.]/,'')
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Declaro que o método `render_xml` irá verificar os arquivos também presentes
|
|
161
|
+
# nos diretórios especificados.
|
|
162
|
+
# O diretório dos XMLs irá variar de acordo com a operação e a versão do XML utilizado.
|
|
163
|
+
# EX:
|
|
164
|
+
# Se a versão do XML que a operação utiliza for a versão 2.0, então irá procurar o arquivo
|
|
165
|
+
# XML primeiro no diretório da v2, caso não encontre vai procurar no diretório da v1.
|
|
166
|
+
# Já se a versão do XML for a versão 3.1, irá procurar primeiro no diretório v3_10,
|
|
167
|
+
# se não contrar irá procurar no diretório da v2_00, e se ainda assim não encontrar, vai procurar
|
|
168
|
+
# no diretório v1_00.
|
|
169
|
+
# Foi construido dessa forma pois algumas tags utilizadas na v3.10 são exatamente iguais
|
|
170
|
+
# da v2.0, e nesse caso não há a necessidade de duplicar o código.
|
|
171
|
+
#
|
|
172
|
+
# <b>Tipo de retorno: </b> _Array_
|
|
173
|
+
def xml_current_dir_path
|
|
174
|
+
return @xml_current_dir_path if @xml_current_dir_path.present?
|
|
175
|
+
paths = ["#{BrNfe.root}/lib/br_nfe/product/xml/v1_00"] # Sempre terá o path da v1_00
|
|
176
|
+
paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v1_10" if gateway_xml_version >= :v1_10
|
|
177
|
+
paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v2_00" if gateway_xml_version >= :v2_00
|
|
178
|
+
paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v2_01" if gateway_xml_version >= :v2_01
|
|
179
|
+
paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v3_10" if gateway_xml_version == :v3_10
|
|
180
|
+
|
|
181
|
+
@xml_current_dir_path = paths.reverse+["#{BrNfe.root}/lib/br_nfe/product/xml"]+super
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Método utilizado para saber se a operação será em contingência.
|
|
185
|
+
#
|
|
186
|
+
# <b>Tipo de retorno: </b> _Boolean_
|
|
187
|
+
#
|
|
188
|
+
def contingencia?
|
|
189
|
+
tipo_emissao != :normal
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Código do Tipo de Emissão da NF-e
|
|
193
|
+
# ✓ 1=Emissão normal (não em contingência);
|
|
194
|
+
# ✕ 2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
|
|
195
|
+
# ✕ 3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
|
|
196
|
+
# ✕ 4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
|
|
197
|
+
# ✕ 5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
|
|
198
|
+
# ✓ 6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
|
|
199
|
+
# ✓ 7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
|
|
200
|
+
# ✓ 9=Contingência off-line da NFC-e (as demais opções de contingência são válidas
|
|
201
|
+
# também para a NFC-e).
|
|
202
|
+
# Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
|
|
203
|
+
def codigo_tipo_emissao(nfe)
|
|
204
|
+
return 9 if nfe.nfce?
|
|
205
|
+
case tipo_emissao
|
|
206
|
+
when :normal
|
|
207
|
+
1
|
|
208
|
+
when :svc
|
|
209
|
+
if gateway.is_a?(BrNfe::Product::Gateway::WebServiceSvcAN) # SVC-AN
|
|
210
|
+
6
|
|
211
|
+
else # SVC-RS
|
|
212
|
+
7
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def request
|
|
218
|
+
@savon_response = client_wsdl.call(method_wsdl, xml: soap_xml)
|
|
219
|
+
rescue Savon::SOAPFault => error
|
|
220
|
+
return @response = response_class_builder.new.response_class.new(request_status: :soap_error, request_message_error: error.message)
|
|
221
|
+
rescue Savon::HTTPError => error
|
|
222
|
+
return @response = response_class_builder.new.response_class.new(request_status: :http_error, request_message_error: error.message)
|
|
223
|
+
rescue Exception => error
|
|
224
|
+
return @response = response_class_builder.new.response_class.new(request_status: :unknown_error, request_message_error: error.message)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def response
|
|
228
|
+
@response ||= get_response
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
private
|
|
232
|
+
def emitente_class
|
|
233
|
+
BrNfe.emitente_product_class
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def response_class_builder
|
|
237
|
+
raise NotImplementedError.new("Not implemented #response_class_builder in #{self}.")
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def builder_response_params
|
|
241
|
+
{}
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def get_response
|
|
245
|
+
builder = response_class_builder.new do |builder|
|
|
246
|
+
builder.savon_response = @savon_response
|
|
247
|
+
builder.operation = self
|
|
248
|
+
end
|
|
249
|
+
builder.assign_attributes(builder_response_params)
|
|
250
|
+
builder.response
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeAutorizacao < Base
|
|
5
|
+
|
|
6
|
+
# NÚMERO DO LOTE
|
|
7
|
+
# Identificador de controle do envio do lote.
|
|
8
|
+
# Número sequencial autoincremental, de controle
|
|
9
|
+
# correspondente ao identificador único do lote
|
|
10
|
+
# enviado. A responsabilidade de gerar e controlar
|
|
11
|
+
# esse número é exclusiva do contribuinte.
|
|
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
|
+
# INDICADOR DO PROCESSAMENTO SINCRONO OU ASINCRONO
|
|
23
|
+
# false = 0=Não. (Default)
|
|
24
|
+
# true = 1=Empresa solicita processamento síncrono do
|
|
25
|
+
# Lote de NF-e (sem a geração de Recibo para consulta futura);
|
|
26
|
+
#
|
|
27
|
+
# Nota: O processamento síncrono do Lote corresponde a entrega
|
|
28
|
+
# da resposta do processamento das NF-e do Lote, sem a geração
|
|
29
|
+
# de um Recibo de Lote para consulta futura. A resposta de forma
|
|
30
|
+
# síncrona pela SEFAZ Autorizadora só ocorrerá se:
|
|
31
|
+
# - a empresa solicitar e constar unicamente uma NF-e no Lote;
|
|
32
|
+
# - a SEFAZ Autorizadora implementar o processamento síncrono
|
|
33
|
+
# para a resposta do Lote de NF-e.
|
|
34
|
+
#
|
|
35
|
+
# <b>Type: </b> _Boolean_
|
|
36
|
+
# <b>Required: </b> _Yes_
|
|
37
|
+
# <b>Example: </b> _true_
|
|
38
|
+
# <b>Default: </b> _false_
|
|
39
|
+
# <b>tag: </b> indSinc
|
|
40
|
+
#
|
|
41
|
+
attr_accessor :sincrono
|
|
42
|
+
def sincrono
|
|
43
|
+
convert_to_boolean(@sincrono)
|
|
44
|
+
end
|
|
45
|
+
alias_attribute :indSinc, :sincrono
|
|
46
|
+
|
|
47
|
+
# Array com as notas fiscais a serem emitidas
|
|
48
|
+
# Pode ser adicionado os dados das notas fiscais em forma de `Hash` ou
|
|
49
|
+
# O próprio objeto da NF-e.
|
|
50
|
+
#
|
|
51
|
+
# Exemplo com Hash:
|
|
52
|
+
# self.notas_fiscais = [{serie: 1, numero_nf: 1143, ...},{serie: 1, numero_nf: 1144, ...}]
|
|
53
|
+
# self.notas_fiscais << {serie: 1, numero_nf: 1145, ...}
|
|
54
|
+
# self.notas_fiscais << {serie: 1, numero_nf: 1146, ...}
|
|
55
|
+
#
|
|
56
|
+
# Exemplo com Objetos:
|
|
57
|
+
# self.notas_fiscais = [BrNfe::Product::NotaFiscal.new({serie: 1, numero_nf: 1143, ...}),{serie: 1, numero_nf: 1144, ...}]
|
|
58
|
+
# self.notas_fiscais << BrNfe::Product::NotaFiscal.new({serie: 1, numero_nf: 1145, ...})
|
|
59
|
+
# self.notas_fiscais << {serie: 1, numero_nf: 1146, ...}
|
|
60
|
+
#
|
|
61
|
+
# Sempre vai retornar um Array de objetos da class configurada em `BrNfe.nota_fiscal_product_class`
|
|
62
|
+
#
|
|
63
|
+
# <b>Tipo: </b> _BrNfe.nota_fiscal_product_class (BrNfe::Product::NotaFiscal)_
|
|
64
|
+
# <b>Min: </b> _1_
|
|
65
|
+
# <b>Max: </b> _50_
|
|
66
|
+
# <b>Default: </b> _[]_
|
|
67
|
+
#
|
|
68
|
+
has_many :notas_fiscais, 'BrNfe.nota_fiscal_product_class'
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
validate_has_many :notas_fiscais, message: :invalid_invoice
|
|
72
|
+
validates :notas_fiscais, length: {in: 1..50}
|
|
73
|
+
validates :numero_lote, presence: true
|
|
74
|
+
validates :numero_lote, numericality: {only_integer: true}, allow_blank: true
|
|
75
|
+
validates :numero_lote, length: {maximum: 15}, allow_blank: true
|
|
76
|
+
|
|
77
|
+
# URL que será setada no atribto xmlns do XML;
|
|
78
|
+
# Ex:
|
|
79
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
80
|
+
def url_xmlns
|
|
81
|
+
gateway.url_xmlns_autorizacao
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# URL do webservice para enviar as informações.
|
|
85
|
+
# Ex:
|
|
86
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
87
|
+
def wsdl
|
|
88
|
+
gateway.wsdl_autorizacao
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Método SOAP que será chamado para enviar o XML
|
|
92
|
+
def method_wsdl
|
|
93
|
+
gateway.operation_autorizacao
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
97
|
+
def gateway_xml_version
|
|
98
|
+
gateway.version_xml_autorizacao
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Versão SSL utilizada pelo webservice
|
|
102
|
+
def ssl_version
|
|
103
|
+
gateway.ssl_version_autorizacao
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
107
|
+
# específicas de cada operação.
|
|
108
|
+
def xml_builder
|
|
109
|
+
@xml_builder ||= render_xml 'root/NfeAutorizacao'
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def response_class_builder
|
|
113
|
+
BrNfe::Product::Response::Build::NfeAutorizacao
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeConsultaProtocolo < Base
|
|
5
|
+
# CHAVE DE ACESSO DA NF-E.
|
|
6
|
+
#
|
|
7
|
+
# <b>Type: </b> _Number_
|
|
8
|
+
# <b>Required: </b> _Yes_
|
|
9
|
+
# <b>Example: </b> _42000082176983000186550000000000006313331836_
|
|
10
|
+
# <b>Length: </b> _44_
|
|
11
|
+
# <b>tag: </b> chNFe
|
|
12
|
+
#
|
|
13
|
+
attr_accessor :chave_nfe
|
|
14
|
+
alias_attribute :chNFe, :chave_nfe
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
validates :chave_nfe, presence: true
|
|
18
|
+
validates :chave_nfe, length: {is: 44}, allow_blank: true
|
|
19
|
+
|
|
20
|
+
# URL do webservice para enviar as informações.
|
|
21
|
+
# Ex:
|
|
22
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
23
|
+
def wsdl
|
|
24
|
+
gateway.wsdl_consulta_protocolo
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Método SOAP que será chamado para enviar o XML
|
|
28
|
+
def method_wsdl
|
|
29
|
+
gateway.operation_consulta_protocolo
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
33
|
+
def gateway_xml_version
|
|
34
|
+
gateway.version_xml_consulta_protocolo
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# URL que será setada no atribto xmlns do XML;
|
|
38
|
+
# Ex:
|
|
39
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
40
|
+
def url_xmlns
|
|
41
|
+
gateway.url_xmlns_consulta_protocolo
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Versão SSL utilizada pelo webservice
|
|
45
|
+
def ssl_version
|
|
46
|
+
gateway.ssl_version_consulta_protocolo
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
50
|
+
# específicas de cada operação.
|
|
51
|
+
def xml_builder
|
|
52
|
+
@xml_builder ||= render_xml 'root/NfeConsultaProtocolo'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def response_class_builder
|
|
56
|
+
BrNfe::Product::Response::Build::NfeConsultaProtocolo
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeDownloadNf < Base
|
|
5
|
+
# UTILIZADO PARA FORÇAR A UTILIZAÇÃO DE OUTRO GATEWAY
|
|
6
|
+
# O Gateway padrão da GEM para o download da NF é o
|
|
7
|
+
# webservice do AN(Ambiente Nacional) (Exceto para o estado do
|
|
8
|
+
# Ceará(CE), na qual possui url própria para download da NF).
|
|
9
|
+
# Outro Webservice que pode ser utilizado é do SVAN (Servidor Virtual do
|
|
10
|
+
# Ambiente Nacional).
|
|
11
|
+
# Pode ser modificado o servidor passando o attr :force_gateway com
|
|
12
|
+
# um dos seguintes valores:
|
|
13
|
+
# - :SVAN - Na qual irá forçar o uso do Servidor Virtual do Ambiente Nacional
|
|
14
|
+
# - :AN - Na qual irá forçar o uso do Ambiente Nacional (apenas para o estado
|
|
15
|
+
# do Ceará, já que esse é o servidor padrão para os demais estados)
|
|
16
|
+
#
|
|
17
|
+
# <b>Type: </b> _Symbol_
|
|
18
|
+
# <b>Required: </b> _No_
|
|
19
|
+
# <b>Example: </b> _:SVAN_
|
|
20
|
+
# <b>Default: </b> _nil_
|
|
21
|
+
#
|
|
22
|
+
attr_accessor :force_gateway
|
|
23
|
+
def force_gateway=(value)
|
|
24
|
+
@force_gateway = "#{value}".to_sym
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# CHAVE DE ACESSO DA NF-E.
|
|
28
|
+
#
|
|
29
|
+
# <b>Type: </b> _Number_
|
|
30
|
+
# <b>Required: </b> _Yes_
|
|
31
|
+
# <b>Example: </b> _42000082176983000186550000000000006313331836_
|
|
32
|
+
# <b>Length: </b> _44_
|
|
33
|
+
# <b>tag: </b> chNFe
|
|
34
|
+
#
|
|
35
|
+
attr_accessor :chave_nfe
|
|
36
|
+
alias_attribute :chNFe, :chave_nfe
|
|
37
|
+
|
|
38
|
+
validates :chave_nfe, presence: true
|
|
39
|
+
validates :chave_nfe, length: {is: 44}
|
|
40
|
+
|
|
41
|
+
def gateway
|
|
42
|
+
@gateway ||= case force_gateway
|
|
43
|
+
when :SVAN
|
|
44
|
+
BrNfe::Product::Gateway::WebServiceSVAN.new({env: env})
|
|
45
|
+
when :AN
|
|
46
|
+
BrNfe::Product::Gateway::Base.new({env: env})
|
|
47
|
+
else
|
|
48
|
+
super
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# URL do webservice para enviar as informações.
|
|
54
|
+
def wsdl
|
|
55
|
+
gateway.wsdl_download_nf
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Método SOAP que será chamado para enviar o XML
|
|
59
|
+
def method_wsdl
|
|
60
|
+
gateway.operation_download_nf
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
64
|
+
def gateway_xml_version
|
|
65
|
+
gateway.version_xml_download_nf
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# URL que será setada no atribto xmlns do XML;
|
|
69
|
+
def url_xmlns
|
|
70
|
+
gateway.url_xmlns_download_nf
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Versão SSL utilizada pelo webservice
|
|
74
|
+
def ssl_version
|
|
75
|
+
gateway.ssl_version_download_nf
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
79
|
+
# específicas de cada operação.
|
|
80
|
+
def xml_builder
|
|
81
|
+
@xml_builder ||= render_xml 'root/NfeDownloadNf'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
module BrNfe
|
|
2
|
+
module Product
|
|
3
|
+
module Operation
|
|
4
|
+
class NfeInutilizacao < Base
|
|
5
|
+
|
|
6
|
+
# Identificador da TAG a ser assinada formada com:
|
|
7
|
+
# 01-02 = Literal 'ID' (2 posições) +
|
|
8
|
+
# 03-04 = Código da UF (2 posições) +
|
|
9
|
+
# 05-06 = Ano (2 posições) +
|
|
10
|
+
# 07-20 = CNPJ (14 posições) +
|
|
11
|
+
# 21-22 = modelo (2 posições) +
|
|
12
|
+
# 23-25 = série (3 posições) +
|
|
13
|
+
# 26-34 = Numeração inicial (9 posições) +
|
|
14
|
+
# 35-43 = Numeração final (9 posições)
|
|
15
|
+
#
|
|
16
|
+
# <b>Type: </b> _Number_
|
|
17
|
+
# <b>Required: </b> _Yes_
|
|
18
|
+
# <b>Example: </b> _ID41140616149400017255001000000002000000002_
|
|
19
|
+
# <b>Length: </b> _43_
|
|
20
|
+
# <b>tag: </b> Id
|
|
21
|
+
#
|
|
22
|
+
attr_accessor :chave
|
|
23
|
+
def chave
|
|
24
|
+
@chave = generate_key if @chave.blank?
|
|
25
|
+
@chave
|
|
26
|
+
end
|
|
27
|
+
alias_attribute :Id, :chave
|
|
28
|
+
|
|
29
|
+
# ANO DE INUTILIZAÇÃO DA NUMERAÇÃO
|
|
30
|
+
#
|
|
31
|
+
# <b>Type: </b> _Number_
|
|
32
|
+
# <b>Required: </b> _Yes_
|
|
33
|
+
# <b>Example: </b> _17_
|
|
34
|
+
# <b>Length: </b> _2_
|
|
35
|
+
# <b>tag: </b> Id
|
|
36
|
+
#
|
|
37
|
+
attr_accessor :ano
|
|
38
|
+
|
|
39
|
+
# Código do Modelo do Documento Fiscal
|
|
40
|
+
# 55=NF-e emitida em substituição ao modelo 1 ou 1A; (Default)
|
|
41
|
+
# 65=NFC-e, utilizada nas operações de venda no varejo (a critério da UF aceitar este modelo de documento).
|
|
42
|
+
#
|
|
43
|
+
# <b>Type: </b> _Number_
|
|
44
|
+
# <b>Required: </b> _Yes_
|
|
45
|
+
# <b>Default: </b> _55_
|
|
46
|
+
# <b>Length: </b> _2_
|
|
47
|
+
# <b>tag: </b> mod
|
|
48
|
+
#
|
|
49
|
+
attr_accessor :modelo_nf
|
|
50
|
+
alias_attribute :mod, :modelo_nf
|
|
51
|
+
|
|
52
|
+
# Série da NF-e
|
|
53
|
+
#
|
|
54
|
+
# <b>Type: </b> _Number_
|
|
55
|
+
# <b>Required: </b> _Yes_
|
|
56
|
+
# <b>Default: </b> _nil_
|
|
57
|
+
# <b>Length: </b> _max: 3_
|
|
58
|
+
# <b>tag: </b> serie
|
|
59
|
+
#
|
|
60
|
+
attr_accessor :serie
|
|
61
|
+
|
|
62
|
+
# Número da NF-e inicial a ser inutilizada
|
|
63
|
+
#
|
|
64
|
+
# <b>Type: </b> _Number_
|
|
65
|
+
# <b>Required: </b> _Yes_
|
|
66
|
+
# <b>Length: </b> _max: 9_
|
|
67
|
+
# <b>tag: </b> nNFIni
|
|
68
|
+
#
|
|
69
|
+
attr_accessor :numero_nf_inicial
|
|
70
|
+
alias_attribute :nNFIni, :numero_nf_inicial
|
|
71
|
+
|
|
72
|
+
# Número da NF-e final a ser inutilizada
|
|
73
|
+
#
|
|
74
|
+
# <b>Type: </b> _Number_
|
|
75
|
+
# <b>Required: </b> _Yes_
|
|
76
|
+
# <b>Default: </b> _self.numero_nf_inicial_
|
|
77
|
+
# <b>Length: </b> _max: 9_
|
|
78
|
+
# <b>tag: </b> nNFFin
|
|
79
|
+
#
|
|
80
|
+
attr_accessor :numero_nf_final
|
|
81
|
+
def numero_nf_final
|
|
82
|
+
@numero_nf_final ||= numero_nf_inicial
|
|
83
|
+
end
|
|
84
|
+
alias_attribute :nNFFin, :numero_nf_final
|
|
85
|
+
|
|
86
|
+
# Informar a justificativa do pedido de inutilização
|
|
87
|
+
#
|
|
88
|
+
# <b>Type: </b> _String_
|
|
89
|
+
# <b>Required: </b> _Yes_
|
|
90
|
+
# <b>Length: </b> _min: 15, max: 255_
|
|
91
|
+
# <b>tag: </b> xJust
|
|
92
|
+
#
|
|
93
|
+
attr_accessor :justificativa
|
|
94
|
+
alias_attribute :xJust, :justificativa
|
|
95
|
+
|
|
96
|
+
validates :chave, presence: true
|
|
97
|
+
validates :chave, length: {is: 43}, allow_blank: true
|
|
98
|
+
validates :ano, presence: true
|
|
99
|
+
validates :ano, length: {is: 2}, allow_blank: true
|
|
100
|
+
|
|
101
|
+
validates :modelo_nf, presence: true
|
|
102
|
+
validates :modelo_nf, inclusion: [55, 65, '55', '65']
|
|
103
|
+
|
|
104
|
+
validates :serie, presence: true
|
|
105
|
+
validates :serie, numericality: { only_integer: true }
|
|
106
|
+
validates :serie, length: { maximum: 3 }
|
|
107
|
+
|
|
108
|
+
validates :numero_nf_inicial, :numero_nf_final, presence: true
|
|
109
|
+
validates :numero_nf_inicial, :numero_nf_final, numericality: { only_integer: true }, allow_blank: true
|
|
110
|
+
validates :numero_nf_inicial, :numero_nf_final, length: { maximum: 9 }, allow_blank: true
|
|
111
|
+
|
|
112
|
+
validates :justificativa, length: { in: 15..255 }
|
|
113
|
+
|
|
114
|
+
# URL do webservice para enviar as informações.
|
|
115
|
+
# Ex:
|
|
116
|
+
# https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx?wsdl
|
|
117
|
+
def wsdl
|
|
118
|
+
gateway.wsdl_inutilizacao
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Método SOAP que será chamado para enviar o XML
|
|
122
|
+
def method_wsdl
|
|
123
|
+
gateway.operation_inutilizacao
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Versão utilizada pelo webservice do estado para determinada ação.
|
|
127
|
+
def gateway_xml_version
|
|
128
|
+
gateway.version_xml_inutilizacao
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# URL que será setada no atribto xmlns do XML;
|
|
132
|
+
# Ex:
|
|
133
|
+
# nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
|
|
134
|
+
def url_xmlns
|
|
135
|
+
gateway.url_xmlns_inutilizacao
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Versão SSL utilizada pelo webservice
|
|
139
|
+
def ssl_version
|
|
140
|
+
gateway.ssl_version_inutilizacao
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# XML que será enviado no body da requisição SOAP contendo as informações
|
|
144
|
+
# específicas de cada operação.
|
|
145
|
+
def xml_builder
|
|
146
|
+
@xml_builder ||= render_xml 'root/NfeInutilizacao'
|
|
147
|
+
end
|
|
148
|
+
private
|
|
149
|
+
|
|
150
|
+
def response_class_builder
|
|
151
|
+
BrNfe::Product::Response::Build::NfeInutilizacao
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def generate_key
|
|
155
|
+
key = 'ID'
|
|
156
|
+
key << ibge_code_of_issuer_uf # 03-04 = Código da UF (2 posições)
|
|
157
|
+
key << "#{ano}".rjust(2, '0') # 05-06 = Ano (2 posições) +
|
|
158
|
+
key << "#{emitente.cnpj}".rjust(14, '0') # 07-20 = CNPJ (14 posições) +
|
|
159
|
+
key << "#{modelo_nf}" # 21-22 = modelo (2 posições) +
|
|
160
|
+
key << "#{serie}".rjust(3, '0') # 23-25 = série (3 posições) +
|
|
161
|
+
key << "#{numero_nf_inicial}".rjust(9, '0')# 26-34 = Numeração inicial (9 posições) +
|
|
162
|
+
key << "#{numero_nf_final}".rjust(9, '0')# 35-43 = Numeração final (9 posições)
|
|
163
|
+
key
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|