Class: BrNfe::Product::Operation::Base
- Inherits:
-
Base
- Object
- ActiveModelBase
- Base
- BrNfe::Product::Operation::Base
- Includes:
- NfXmlValue
- Defined in:
- lib/br_nfe/product/operation/base.rb
Direct Known Subclasses
NfeAutorizacao, NfeConsultaProtocolo, NfeDownloadNf, NfeInutilizacao, NfeRecepcaoEvento, NfeRetAutorizacao, NfeStatusServico
Instance Attribute Summary collapse
-
#inicio_contingencia ⇒ Object
Data e hora do início da contingência.
-
#motivo_contingencia ⇒ Object
Informações que devem ser informadas quando a operação for em contingência.
-
#original_xml ⇒ Object
String XML que será aplicado o resultado da resposta do serviço de acordo com a operação.
-
#tipo_emissao ⇒ Object
Serve para saber se vai usar o módo de contingência, e se usar, serve para saber qual o tipo de contingência será utilizado.
Attributes inherited from Base
#certificate_pkcs12_password, #certificate_pkcs12_path, #certificate_pkcs12_value, #env, #ibge_code_of_issuer_city, #ibge_code_of_issuer_uf
Attributes inherited from ActiveModelBase
Instance Method Summary collapse
- #certificado_obrigatorio? ⇒ Boolean
-
#codigo_tipo_emissao(nfe) ⇒ Object
Código do Tipo de Emissão da NF-e ✓ 1=Emissão normal (não em contingência); ✕ 2=Contingência FS-IA, com impressão do DANFE em formulário de segurança; ✕ 3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional); ✕ 4=Contingência DPEC (Declaração Prévia da Emissão em Contingência); ✕ 5=Contingência FS-DA, com impressão do DANFE em formulário de segurança; ✓ 6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN); ✓ 7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS); ✓ 9=Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e).
-
#contingencia? ⇒ Boolean
Método utilizado para saber se a operação será em contingência.
- #default_values ⇒ Object
-
#gateway ⇒ Object
O Gateway é responsável de identificar o Webservice de acordo com o Estado(UF).
-
#gateway_xml_version ⇒ Object
Irá retornar a versão setada de acordo com o serviço e estado.
-
#get_gateway_by_normal_operation ⇒ Object
Seta o WebService quando o tipo de emissão for normal para cada UF.
-
#get_gateway_by_svc_operation ⇒ Object
WebServices utilizados para contingência em SVC (Servidor Virtual de Contingência) Existe 2 servidores de contingência para SVC: O ‘SVC-AN` e `SVC-RS` Cada estado(UF) é autorizado a emitir notas em contingência em apenas 1 dos servidores.
- #request ⇒ Object
- #response ⇒ Object
-
#ssl_request? ⇒ Boolean
Para as Notas fiscais de produto a autenticação via SSL é obrigatória.
-
#url_xmlns ⇒ Object
Valor utilizado para inserir a url do xmlns nas tags nfeCabecMsg e nfeDadosMsg.
-
#xml_current_dir_path ⇒ Object
Declaro que o método ‘render_xml` irá verificar os arquivos também presentes nos diretórios especificados.
-
#xml_version ⇒ Object
Versão do XML utilizado na requisição.
Methods included from NfXmlValue
#nf_xml_fixed_code, #nf_xml_value_CEP, #nf_xml_value_CEST, #nf_xml_value_CFOP, #nf_xml_value_CNAE, #nf_xml_value_CRT, #nf_xml_value_EAN, #nf_xml_value_EXTIPI, #nf_xml_value_IE, #nf_xml_value_IM, #nf_xml_value_ISSQN_incentivo_fiscal, #nf_xml_value_NCM, #nf_xml_value_NVE, #nf_xml_value_RNTC, #nf_xml_value_UF, #nf_xml_value_boolean, #nf_xml_value_chave_nfe, #nf_xml_value_cnpj, #nf_xml_value_codigo_enquadramento_IPI, #nf_xml_value_codigo_ibge_municipio, #nf_xml_value_codigo_nf, #nf_xml_value_codigo_pais, #nf_xml_value_consumidor_final, #nf_xml_value_cpf, #nf_xml_value_date, #nf_xml_value_date_time, #nf_xml_value_drawback, #nf_xml_value_email, #nf_xml_value_float, #nf_xml_value_fone, #nf_xml_value_id_estrangeiro, #nf_xml_value_id_local_destino, #nf_xml_value_indicador_IE, #nf_xml_value_indicador_sincrono, #nf_xml_value_inscricao_suframa, #nf_xml_value_monetary, #nf_xml_value_number, #nf_xml_value_number_fixed_size, #nf_xml_value_numero_recibo, #nf_xml_value_orgao_emissor, #nf_xml_value_percent, #nf_xml_value_peso, #nf_xml_value_placa, #nf_xml_value_quantidade, #nf_xml_value_text, #nf_xml_value_time, #nf_xml_value_tipo_ambiente
Methods inherited from Base
#certificate, #certificate=, #certificate_key, #certificate_key=, #certificate_pkcs12, #certificate_pkcs12=, #client_wsdl, #content_xml, #env_namespace, #env_test?, #find_xml, #get_xml_dirs, #id_attribute?, #message_namespaces, #method_wsdl, #namespace_for_signature, #namespace_for_tags, #namespace_identifier, #original_response, #render_xml, #response_encoding, #sign_xml, #signature_type, #signature_type?, #soap_namespaces, #soap_xml, #ssl_version, #tag_xml, #wsdl, #wsdl_encoding, #xml_builder, #xml_default_dir_path
Methods included from Association::HaveEmitente
Methods inherited from ActiveModelBase
#assign_attributes, #initialize
Constructor Details
This class inherits a constructor from BrNfe::ActiveModelBase
Instance Attribute Details
#inicio_contingencia ⇒ Object
Data e hora do início da contingência
19 20 21 |
# File 'lib/br_nfe/product/operation/base.rb', line 19 def inicio_contingencia @inicio_contingencia end |
#motivo_contingencia ⇒ Object
Informações que devem ser informadas quando a operação for em contingência.
18 19 20 |
# File 'lib/br_nfe/product/operation/base.rb', line 18 def motivo_contingencia @motivo_contingencia end |
#original_xml ⇒ Object
String XML que será aplicado o resultado da resposta do serviço de acordo com a operação. Por exemplo, quando vai consultar o protocolo da emissão de uma nfe, deve ser passado por parâmetro o XML da NF-e para que seja possível obter o XML da nota fiscal junto com o protocolo de autorização. Também quando for cancelar uma nota fiscal deve passar o XML da nota para que seja adicionado o protocolo de confirmação de cancelamento junto a nota.
Required: No Type: String XML
35 36 37 |
# File 'lib/br_nfe/product/operation/base.rb', line 35 def original_xml @original_xml end |
#tipo_emissao ⇒ Object
Serve para saber se vai usar o módo de contingência, e se usar, serve para saber qual o tipo de contingência será utilizado. Options: [:normal, :svc]
Required: Yes Default: :normal
14 15 16 |
# File 'lib/br_nfe/product/operation/base.rb', line 14 def tipo_emissao @tipo_emissao end |
Instance Method Details
#certificado_obrigatorio? ⇒ Boolean
47 48 49 |
# File 'lib/br_nfe/product/operation/base.rb', line 47 def certificado_obrigatorio? true end |
#codigo_tipo_emissao(nfe) ⇒ Object
Código do Tipo de Emissão da NF-e
✓ 1=Emissão normal (não em contingência);
✕ 2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
✕ 3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
✕ 4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
✕ 5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
✓ 6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
✓ 7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
✓ 9=Contingência off-line da NFC-e (as demais opções de contingência são válidas
também para a NFC-e).
Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/br_nfe/product/operation/base.rb', line 203 def codigo_tipo_emissao(nfe) return 9 if nfe.nfce? case tipo_emissao when :normal 1 when :svc if gateway.is_a?(BrNfe::Product::Gateway::WebServiceSvcAN) # SVC-AN 6 else # SVC-RS 7 end end end |
#contingencia? ⇒ Boolean
Método utilizado para saber se a operação será em contingência.
Tipo de retorno: Boolean
188 189 190 |
# File 'lib/br_nfe/product/operation/base.rb', line 188 def contingencia? tipo_emissao != :normal end |
#default_values ⇒ Object
41 42 43 44 45 |
# File 'lib/br_nfe/product/operation/base.rb', line 41 def default_values { tipo_emissao: :normal, } end |
#gateway ⇒ Object
O Gateway é responsável de identificar o Webservice de acordo com o Estado(UF). Irá identificar o webservice através do valor do método ‘ibge_code_of_issuer_uf`, na qual pode ser setado diretamente ou pego através do endereço do emissor. Para ver a lista de WebService por estado acesse: www.nfe.fazenda.gov.br/portal/webServices.aspx
Tipo de retorno: _Object (Gateway::Base ou derivados)_
63 64 65 66 67 68 69 70 |
# File 'lib/br_nfe/product/operation/base.rb', line 63 def gateway @gateway ||= case tipo_emissao when :normal get_gateway_by_normal_operation when :svc get_gateway_by_svc_operation end end |
#gateway_xml_version ⇒ Object
Irá retornar a versão setada de acordo com o serviço e estado. Deve ser sobrescrito para cada serviço e irá pegar a versão do XML de acordo com o Estado e Serviço, conforme descrito em: www.nfe.fazenda.gov.br/portal/webServices.aspx
Tipo de retorno: Symbol
140 141 142 |
# File 'lib/br_nfe/product/operation/base.rb', line 140 def gateway_xml_version raise "O método #gateway_xml_version deve ser implementar em cada operação" end |
#get_gateway_by_normal_operation ⇒ Object
Seta o WebService quando o tipo de emissão for normal para cada UF
Tipo de retorno: _Object (Gateway::Base ou derivados)_
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/br_nfe/product/operation/base.rb', line 93 def get_gateway_by_normal_operation case ibge_code_of_issuer_uf when '13' BrNfe::Product::Gateway::WebServiceAM.new({env: env}) when '29' BrNfe::Product::Gateway::WebServiceBA.new({env: env}) when '23' BrNfe::Product::Gateway::WebServiceCE.new({env: env}) when '52' BrNfe::Product::Gateway::WebServiceGO.new({env: env}) when '31' BrNfe::Product::Gateway::WebServiceMG.new({env: env}) when '50' BrNfe::Product::Gateway::WebServiceMS.new({env: env}) when '51' BrNfe::Product::Gateway::WebServiceMT.new({env: env}) when '26' BrNfe::Product::Gateway::WebServicePE.new({env: env}) when '41' BrNfe::Product::Gateway::WebServicePR.new({env: env}) when '43' BrNfe::Product::Gateway::WebServiceRS.new({env: env}) when '35' BrNfe::Product::Gateway::WebServiceSP.new({env: env}) when '21', '15', '22' BrNfe::Product::Gateway::WebServiceSVAN.new({env: env}) else BrNfe::Product::Gateway::WebServiceSVRS.new({env: env}) end end |
#get_gateway_by_svc_operation ⇒ Object
WebServices utilizados para contingência em SVC (Servidor Virtual de Contingência) Existe 2 servidores de contingência para SVC: O ‘SVC-AN` e `SVC-RS` Cada estado(UF) é autorizado a emitir notas em contingência em apenas 1 dos servidores. Esse método é responsável em setar qual o WebService será utilizado para cada UF.
Tipo de retorno: _Object (::WebServiceSvcRS ou ::WebServiceSvcAN)_
79 80 81 82 83 84 85 86 87 |
# File 'lib/br_nfe/product/operation/base.rb', line 79 def get_gateway_by_svc_operation case ibge_code_of_issuer_uf # 'AM', 'BA', 'CE', 'GO', 'MA', 'MS', 'MT', 'PA', 'PE', 'PI', 'PR' when '13', '29', '23', '52', '21', '50', '51', '15', '26', '22', '41' BrNfe::Product::Gateway::WebServiceSvcRS.new({env: env}) else # AC, AL, AP, DF, ES, MG, PB, RJ, RN, RO, RR, RS, SC, SE, SP, TO BrNfe::Product::Gateway::WebServiceSvcAN.new({env: env}) end end |
#request ⇒ Object
217 218 219 220 221 222 223 224 225 |
# File 'lib/br_nfe/product/operation/base.rb', line 217 def request @savon_response = client_wsdl.call(method_wsdl, xml: soap_xml) rescue Savon::SOAPFault => error return @response = response_class_builder.new.response_class.new(request_status: :soap_error, request_message_error: error.) rescue Savon::HTTPError => error return @response = response_class_builder.new.response_class.new(request_status: :http_error, request_message_error: error.) rescue Exception => error return @response = response_class_builder.new.response_class.new(request_status: :unknown_error, request_message_error: error.) end |
#response ⇒ Object
227 228 229 |
# File 'lib/br_nfe/product/operation/base.rb', line 227 def response @response ||= get_response end |
#ssl_request? ⇒ Boolean
Para as Notas fiscais de produto a autenticação via SSL é obrigatória
52 53 54 |
# File 'lib/br_nfe/product/operation/base.rb', line 52 def ssl_request? true end |
#url_xmlns ⇒ Object
Valor utilizado para inserir a url do xmlns nas tags nfeCabecMsg e nfeDadosMsg. Como a url pode variar de acordo com o tipo de serviço e UF, deve ser sobrescrita na subclass de cada serviço.
Tipo de retorno: String
130 131 132 |
# File 'lib/br_nfe/product/operation/base.rb', line 130 def url_xmlns raise "O método #url_xmlns deve ser implementar em cada operação" end |
#xml_current_dir_path ⇒ Object
Declaro que o método ‘render_xml` irá verificar os arquivos também presentes nos diretórios especificados. O diretório dos XMLs irá variar de acordo com a operação e a versão do XML utilizado. EX:
Se a versão do XML que a operação utiliza for a versão 2.0, então irá procurar o arquivo
XML primeiro no diretório da v2, caso não encontre vai procurar no diretório da v1.
Já se a versão do XML for a versão 3.1, irá procurar primeiro no diretório v3_10,
se não contrar irá procurar no diretório da v2_00, e se ainda assim não encontrar, vai procurar
no diretório v1_00.
Foi construido dessa forma pois algumas tags utilizadas na v3.10 são exatamente iguais da v2.0, e nesse caso não há a necessidade de duplicar o código.
Tipo de retorno: Array
173 174 175 176 177 178 179 180 181 182 |
# File 'lib/br_nfe/product/operation/base.rb', line 173 def xml_current_dir_path return @xml_current_dir_path if @xml_current_dir_path.present? paths = ["#{BrNfe.root}/lib/br_nfe/product/xml/v1_00"] # Sempre terá o path da v1_00 paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v1_10" if gateway_xml_version >= :v1_10 paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v2_00" if gateway_xml_version >= :v2_00 paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v2_01" if gateway_xml_version >= :v2_01 paths << "#{BrNfe.root}/lib/br_nfe/product/xml/v3_10" if gateway_xml_version == :v3_10 @xml_current_dir_path = paths.reverse+["#{BrNfe.root}/lib/br_nfe/product/xml"]+super end |
#xml_version ⇒ Object
Versão do XML utilizado na requisição. Como a versão do XML pode divergir para cada estado/servidor e serviço, é necessário passar a versão do XML na requisição para o servidor saber qual validação aplicar e como pegar os dados. Esse método tem o intuíto de pegar a versão setada no Gateway de cada UF e serviço e transformar em uma String aplicável no XML. Exemplo:
Se a versão do xml for :v3_10
Esse método irá transformar o valor em '3.10'
Tipo de retorno: String
156 157 158 |
# File 'lib/br_nfe/product/operation/base.rb', line 156 def xml_version "#{gateway_xml_version}".gsub('_','.').gsub(/[^\d\.]/,'') end |