Mudanças entre as edições de "Requisitos RFW.SEFAZ"

De Wiki do Leitão
Ir para: navegação, pesquisa
 
(15 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
= Requisitos =
== Objetivo Principal ==


= Objetivo Principal =
O objetivo deste módulo é permitir uma integração transparente com os serviços da SEFAZ (WebServices) de forma mais transparente possível e integrada ao framework RFW para facilitar sua utilização.
 
 
Para atingir este objetivo o módulo fornece objetos com a estrutura de dados defina nos Schemas dos XMLs da SEFAZ. Desta forma o desenvolvedor pode abstrair toda a preocupação escrita e tratamento do XML. O módulo recebe esses objetos e faz toda a conversão e comunicação com a SEFAZ internamente.
 
== Status do Desenvolvimento ==
 
=== Métodos Implementados ===
 
* WebServices Suportados
** Homologação SP
** Produção SP
 
 
* Métodos Implementados
** consultaCadastro - Layout v2.00
** nfeAutorizacaoLote - Layout v4.00
** nfeRetAutorizacao - Layout v4.00
** nfeStatusServicoNF - Layout v4.00
 
 
=== Pendêncis da Implementação (Próximos passos e melhorias) ===
 
* Próximos Passos de Implementação:
# Implementar suporte aos demais servidores
# Implementação dos métodos restantes:
#:* nfeAutorizacaoLoteZip
 
== Objetos de Representação do XML ==
 
Os objetos que representam as tags do XML são criados com o JAXB a partir do Schema fornecido pela própria SEFAZ.
 
 
{{nota|Diferenças Entre os Nomes das Tags e Classes|Quando o JAXB gera os arquivos a partir do Schema ele utiliza os nomes dos "tipos" definidos pelo Schema para batizar o objeto ao invés do nome da Tag.
 
Por isso é comum termos os nomes das classes precedidas com a letra "T" (embora não seja uma regra), já que a SEFAZ batiza o 'type' dentro do schema com o mesmo nome da tag precedida da letra 'T".}}
 
 
= Resumo de Informações que Você Deve Saber =
 
== Estrutura das Tags da NFe ==
 
=== Definição do Documento Fiscal ===
 
* A estrutura de informações de uma NFe é inteiramente escrita dentro de uma tag '''<NFe>''', e a documentação do seu conteúdo está descrito no Anexo I do Manual de Orientações ao Contribuinte (MOC).
** Dentro dessa estrutura existem duas tags: '''<infNFe>''' e '''<Signature> que respecitivamente contém as informações do documento fiscal, e a assinatura digital dos dados dessa nota.


O objetivo deste módulo é permitir uma integração transparente com os serviços da SEFAZ (WebServices) de forma mais transparente possível e integrada ao framework RFW para facilitar sua utilização.
A estrutura simplificada fica assim:
<pre>
&lt;NFe&gt;
  &lt;infNFe&gt;
      [dados da NFe]
  &lt;/infNFe&gt;
  &lt;Signature&gt;
      [assinatura digital]
  &lt;/Signature&gt;
&lt;/NFe&gt;
</pre>




Para atingir este objetivo o módulo fornece objetos com a estrutura de dados similar as descritas nos XMLs da NFe, que seguem as mesmas restrições e regras impostas. Desta forma o desenvolvedor pode abstrair toda a preocupação escrita e tratamento do XML. O módulo recebe esses objetos (Beans/POJOs) e faz toda a conversão e comunicação com a SEFAZ internamente.
=== Envio da NFe para Autorização ===


Para solicitar a autorização da NFe no WebService da SEFAZ enviamos a tag '''&lt;NFe&gt;''' encapsulada dentro da tag '''&lt;enviNFe&gt;''', que aceita uma lista de até 50 tags '''&lt;NFe&gt;''' para autorização em Lote. Montando a seguinte estrutura:


= Objetos de Representação das Tags XMLs =
<pre>
&lt;enviNFe&gt;
  &lt;NFe&gt;
      &lt;infNFe&gt;
        [dados da NFe]
      &lt;/infNFe&gt;
      &lt;Signature&gt;
        [assinatura digital]
      &lt;/Signature&gt;
  &lt;/NFe&gt;
  &lt;NFe&gt;
      &lt;infNFe&gt;
        [dados da NFe]
      &lt;/infNFe&gt;
      &lt;Signature&gt;
        [assinatura digital]
      &lt;/Signature&gt;
  &lt;/NFe&gt;
  ...
&lt;/enviNFe&gt;
</pre>


O módulo oferece objetos o mais similar possível do layout e nomes das tags do XML, de maneira que o desenvolvedor possa consulta os manuais da própria SEFAZ e utilizar o módulo de maneira transparente.
No método assíncrono, temos de consultar a autorização do lote com outro método do WebService, cujo retorno tem a seguinte estrutura:


Os diferenciais que precisam ser notados são:
<pre>
* Para aproveitar os benefícios do [[RFWValidator]] e outras vantagens do RFW, os objetos que representam a estrutura do XML tem o sufixo "VO" e todos extends [[RFWVO]],
&lt;retConsReciNFe&gt;
* Por estenderem [[RFWVO]] o atributo "id" herdado por vezes gera conflito com o atributo "id" do XML, nestes casos o "id" do XML foi representado no VO como "idAttribute",
  &lt;protNFe&gt;
* Para manter o padrão de nomes do Java, mesmo as tags do XML começando com letras minúsculas, as classes tem a primeira letra capitalizada.
      [protocolo de autorização da NFe]
  &lt;/protNFe&gt;
  &lt;protNFe&gt;
      [protocolo de autorização da NFe]
  &lt;/protNFe&gt;
  ...
&lt;/retConsReciNFe&gt;
</pre>


Note que há uma tag '''&lt;protNFe&gt;''' para cada tag '''&lt;NFe&gt;''' enviada para autorização.


== Validação dos Objetos ==


Todos os objetos e atributos são descritos com as [[RFWMetaAnnotations]] isso quer dizer o [[RFWValidator]] pode ser utilizado para validar os cados e a algumas das composições do objeto. Mas para uma validação mais completa (incluindo validações cruzadas e outras descritas pelo manual) utilize a classe [[SEFAZValidator]], que já faz as validações do [[RFWValidator]].
=== Layout de Distribuição ===


Por fim, o Manual de Orientações ao Contribuinte, define o '''Layout de Distribuição'''. Este layout define como os arquivos .XML da NFe devem ser compatilhado entre as pontas. E sua estrutura, de forma simplificada, é a seguinte:


=== Exceções nas Validações ===


* '''Todos as definições de casas decimais mínimas devem ser definidas como 0'''. Embora o layout do XML indique muitas vezes a obrigatoriedade de 2 casas (valores monetários por exemplo), é recomendado que zeros não significativos não sejam enviados. Já encontrei registros de notas fiscais com a tag a abaixo na nota aprovada de layout 4.00:
<pre>
<pre>
&lt;IPITrib&gt;
&lt;nfeProc&gt;
   &lt;CST&gt;99&lt;/CST&gt;
   &lt;NFe&gt;
  &lt;vBC&gt;0&lt;/vBC&gt;
      &lt;infNFe&gt;
  &lt;pIPI&gt;0&lt;/pIPI&gt;
        [dados da NFe]
   &lt;vIPI&gt;0&lt;/vIPI&gt;
      &lt;/infNFe&gt;
&lt;/IPITrib&gt;
      &lt;Signature&gt;
        [assinatura digital]
      &lt;/Signature&gt;
  &lt;/NFe&gt;  
   &lt;protNFe&gt;
      [protocolo de autorização da NFe]
  &lt;/protNFe&gt;
&lt;/nfeProc&gt;
</pre>
</pre>
Note que o arquivo final .XML da NFe contém a tag '''&lt;NFe&gt;''' com a assinatura que foi enviada no começo para a autorização, seguida da tag '''&lt;protNFe&gt;''' que contém os dados da sua autorização.

Edição atual tal como às 00h07min de 14 de fevereiro de 2025

Requisitos

Objetivo Principal

O objetivo deste módulo é permitir uma integração transparente com os serviços da SEFAZ (WebServices) de forma mais transparente possível e integrada ao framework RFW para facilitar sua utilização.


Para atingir este objetivo o módulo fornece objetos com a estrutura de dados defina nos Schemas dos XMLs da SEFAZ. Desta forma o desenvolvedor pode abstrair toda a preocupação escrita e tratamento do XML. O módulo recebe esses objetos e faz toda a conversão e comunicação com a SEFAZ internamente.

Status do Desenvolvimento

Métodos Implementados

  • WebServices Suportados
    • Homologação SP
    • Produção SP


  • Métodos Implementados
    • consultaCadastro - Layout v2.00
    • nfeAutorizacaoLote - Layout v4.00
    • nfeRetAutorizacao - Layout v4.00
    • nfeStatusServicoNF - Layout v4.00


Pendêncis da Implementação (Próximos passos e melhorias)

  • Próximos Passos de Implementação:
  1. Implementar suporte aos demais servidores
  2. Implementação dos métodos restantes:
    • nfeAutorizacaoLoteZip

Objetos de Representação do XML

Os objetos que representam as tags do XML são criados com o JAXB a partir do Schema fornecido pela própria SEFAZ.


Note 64.png
Diferenças Entre os Nomes das Tags e Classes
Quando o JAXB gera os arquivos a partir do Schema ele utiliza os nomes dos "tipos" definidos pelo Schema para batizar o objeto ao invés do nome da Tag.

Por isso é comum termos os nomes das classes precedidas com a letra "T" (embora não seja uma regra), já que a SEFAZ batiza o 'type' dentro do schema com o mesmo nome da tag precedida da letra 'T".


Resumo de Informações que Você Deve Saber

Estrutura das Tags da NFe

Definição do Documento Fiscal

  • A estrutura de informações de uma NFe é inteiramente escrita dentro de uma tag <NFe>, e a documentação do seu conteúdo está descrito no Anexo I do Manual de Orientações ao Contribuinte (MOC).
    • Dentro dessa estrutura existem duas tags: <infNFe> e <Signature> que respecitivamente contém as informações do documento fiscal, e a assinatura digital dos dados dessa nota.

A estrutura simplificada fica assim:

<NFe>
   <infNFe>
      [dados da NFe]
   </infNFe>
   <Signature>
      [assinatura digital]
   </Signature>
</NFe> 


Envio da NFe para Autorização

Para solicitar a autorização da NFe no WebService da SEFAZ enviamos a tag <NFe> encapsulada dentro da tag <enviNFe>, que aceita uma lista de até 50 tags <NFe> para autorização em Lote. Montando a seguinte estrutura:

<enviNFe>
   <NFe>
      <infNFe>
         [dados da NFe]
      </infNFe>
      <Signature>
         [assinatura digital]
      </Signature>
   </NFe> 
   <NFe>
      <infNFe>
         [dados da NFe]
      </infNFe>
      <Signature>
         [assinatura digital]
      </Signature>
   </NFe> 
   ...
</enviNFe>

No método assíncrono, temos de consultar a autorização do lote com outro método do WebService, cujo retorno tem a seguinte estrutura:

<retConsReciNFe>
   <protNFe>
      [protocolo de autorização da NFe]
   </protNFe>
   <protNFe>
      [protocolo de autorização da NFe]
   </protNFe>
   ...
</retConsReciNFe>

Note que há uma tag <protNFe> para cada tag <NFe> enviada para autorização.


Layout de Distribuição

Por fim, o Manual de Orientações ao Contribuinte, define o Layout de Distribuição. Este layout define como os arquivos .XML da NFe devem ser compatilhado entre as pontas. E sua estrutura, de forma simplificada, é a seguinte:


<nfeProc>
   <NFe>
      <infNFe>
         [dados da NFe]
      </infNFe>
      <Signature>
         [assinatura digital]
      </Signature>
   </NFe> 
   <protNFe>
      [protocolo de autorização da NFe]
   </protNFe>
</nfeProc>


Note que o arquivo final .XML da NFe contém a tag <NFe> com a assinatura que foi enviada no começo para a autorização, seguida da tag <protNFe> que contém os dados da sua autorização.