Processos de Emissão
Para fácil entendimento de como funciona o processo de emissão pelo InvoiCy Framework, disponibilizamos um fluxo em anexo, contendo todas as possíveis situações que possam ocorrer. No processo de emissão vamos tratar a emissão Online e a emissão em Contingência Offline. Para ambos, a função utilizada é a "InvoiCyFramework_EmiteDocumento".
Formas de Emissão
A seguir, detalhamos o ciclo completo de emissão de documentos fiscais eletrônicos (DF-e) gerenciado pelo InvoiCy Framework. Este guia explora os diversos processos de autorização disponíveis, garantindo a continuidade operacional do seu Aplicativo Comercial sob quaisquer condições. A documentação aborda os procedimentos para a Emissão Online (Normal) e os diferentes mecanismos de contingência implementados pelo Framework.
Emissão Online
Este é processo ideal, onde a comunicação entre Aplicação Comercial, InvoiCy Framework, Plataforma InvoiCy e SEFAZ ocorre com sucesso.
Emissão em Contingência
O InvoiCy Framework está preparado para realizar emissões de NFC-e em contingência Offline e SAT. É importante mencionar que a NFC-e tem algumas particularidades em relação ao tipo de contingência conforme a UF em que se está emitindo a NFC-e. Na maioria das UFs exceto CE, SP e SC a contingência utilizada é a do tipo Offline, que consiste em gerar o XML da NFC-e com tpEmis= 9 e transmitir para a Secretária da Fazenda assim que for sanado o problema de conexão ou restabelecido o serviço da SEFAZ.
Em São Paulo a contingência Offline não é permitida, podendo ser utilizado a emissão de CF-e SAT ou então o EPEC (evento prévio de emissão em contingência). O InvoiCy Framework está preparado para emitir CF-e SAT como contingência da NFC-e mediante configurações.
No Ceará e em Santa Catarina existem particularidades que precisam ser tratadas para que seja possível a emissão de NFC-e em contingência. Para isso, entre em contato com a Migrate pelo e-mail integracao@migrate.info informando sua necessidade de implementação.
O Framework trata cada forma de contingência de maneira distinta dependendo da definição do parâmetro "TIPO_CONTINGENCIA", conforme decrito a seguir:
- Sem Contingência (valor = 0): Ao utilizar esta opção o InvoiCy Framework só realizará emissão de NFC-e se conseguir comunicação com a API da Plataforma InvoiCy. Se o Framework não conseguir estabelecer a conexão com Plataforma InvoiCy, ou se não receber o retorno, o mesmo irá retornar o código 999 para o Aplicativo Comercial.
Caso receba algum retorno de erro da Plataforma, seja alguma rejeição ou falha de comunicação da Plataforma InvoiCy com a SEFAZ, este erro será repassado ao Aplicativo Comercial.
Neste cenário, o documento ficará com o status de Pendente na plataforma InvoiCy, aguardando o retorno da comunicação com a SEFAZ para ser reenviado.
- Contingência Offline (valor = 1): Ao utilizar esta opção o InvoiCy Framework poderá tratar a contingência offline de duas formas que dependerão dos parâmetros AUTO_INCREMENTA e AUTO_PREENCHE.
É preciso definir se o controle do sequencial será feito pelo InvoiCy Framework ou pelo Aplicativo Comercial, pois isso impactará na forma de integração e utilização do InvoiCy Framework.
Se o sequencial estiver sendo controlado pelo InvoiCy Framework, ao receber um retorno de timeout 108, ele realizará o processo de emissão em Contingência Offline e o pedido de descarte da NFC-e substituída.
Se o controle do sequencial estiver sendo feito pelo Aplicativo Comercial e ocorrer o retorno 108, o mesmo deverá solicitar o descarte do sequencial original (ver ítem Descarte de Documentos) e solicitar novamente a emissão do documento, porém avançando o sequencial. Nesta situação, como o InvoiCy Framework entrou em contingência em função do retorno 108, consequentemente essa próxima tentativa de emissão será realizada em Contingência Offline.
- Contingência via SAT (valor = 2): Nesta condição, ao receber retornos que indicam falha de comunicação ou SEFAZ SP em contingência, o InvoiCy Framework irá converter o XML da NFC-e em CF-e e realizará a emissão através do SAT.
No momento que o SAT retornar o XML do CF-e autorizado, este poderá ser enviado para armazenamento e gestão na Plataforma InvoiCy, desde que tenha a extensão de importação de documentos contratada.
Para ser utilizada esta opção de contingência é necessário ter a DLL do SAT disponibilizada pelo fabricante e indicar o seu nome e caminho onde está armazenada no computador através do parâmetro DLLSAT e também deve ser chamada a função "InvoiCyFramework_ConfiguraSAT".
Emissão Forçada em Contingência
Em situações onde PDV perder conexão com a Plataforma InvoiCy, o Aplicativo Comercial pode configurar o parâmetro EMITIR_EM_CONTINGENCIA e assim ativar a emissão de NFC-e em Contingência Offline forçada. Quando sanado os problemas de conectividade, este tipo de emissão deverá ser desativada, voltando a emissão online e permitindo a sincronização dos documentos pendentes com o InvoiCy.
Para utilizar esta configuração é preciso que o parâmetro TIPO_CONTINGENCIA esteja definido para 1 = Contingência Offline ou 2 = Contingência SAT.
Cancelamento de Documento
As NFC-es autorizadas e que não tiveram trânsito de mercadorias, podem ser canceladas quando necessário. Já as NFC-es que acobertaram trânsito de mercadorias e por algum motivo precisam ser canceladas, ou as NFC-e que estão fora do prazo de cancelamento, devem ser referenciadas em uma NF-e (modelo 55) de devolução para desfazer a operação de venda.
O cancelamento de documento pode ser realizado chamando a função "InvoiCyFramework_EmiteDocumento". Deverá ser passado um XML contendo os dados do emissor e do documento fiscal a ser cancelado, no campo XML entrada, conforme exemplo abaixo:
<EnvioEvento>
<ModeloDocumento>NFe</ModeloDocumento>
<Versao>4.00</Versao>
<Evento>
<NtfCnpjEmissor>99999999999999</NtfCnpjEmissor>
<NtfNumero>100</NtfNumero>
<NtfSerie>1</NtfSerie>
<tpAmb>2</tpAmb>
<EveInf>
<EveDh>2017-07-18T10:18:21</EveDh>
<EveFusoHorario>-03:00</EveFusoHorario>
<EveTp>110111</EveTp>
<EvenSeq>1</EvenSeq>
<Evedet>
<EveDesc>Cancelamento</EveDesc>
<EvexJust>Cancelamento para testes</EvexJust>
<EvenProt>0</EvenProt>
</Evedet>
</EveInf>
</Evento>
</EnvioEvento>
Este evento de cancelamento pode ser utilizado tanto para NFC-e emitidos Online ou em Contingência Offline. O prazo do cancelamento normal é de 30 minutos a partir da data e hora de autorização da NFC-e.
Os emissores que controlam o sequencial e contingência, podem utilizar o evento de Cancelamento por substituição (EveTp = 110112) para NFC-e. Em que o emissor deve solicitar o cancelamento por substituição de uma NFC-e, desde que seja emitida outra NFC-e em contingência (tpEmis= 9) para substituir essa primeira operação, respeitando o prazo máximo de 168h, que pode variar para cada UF.
Inutilização de Documentos
A inutilização é utilizada quando ocorre um pulo no sequencial de numeração dos documentos, ou quando um documento é rejeitado e não se deseja corrigi-lo. Neste caso, podemos inutilizar aquela numeração e emitir um novo documento com um novo número. Não existe um prazo limite estipulado pela SEFAZ para realizar a inutilização de uma numeração.
Além do mais, pode ser realizada a inutilização de um único número, ou ainda de uma faixa de números em um único pedido de inutilização. A ação de inutilização pode ser realizada em qualquer momento, bastando chamar a função "InvoiCyFramework_EmiteDocumento" no campo XML entrada, conforme demonstrado no exemplo abaixo:
<Inutilizacao>
<ModeloDocumento>NFe</ModeloDocumento>
<Versao>4.00</Versao>
<CnpjEmissor>06354976000149</CnpjEmissor>
<tpAmb>2</tpAmb>
<NumeroInicial>545</NumeroInicial>
<NumeroFinal>545</NumeroFinal>
<Serie>35</Serie>
<Justificativa>Teste de inutilizacao</Justificativa>
</Inutilizacao>
Consulta de Documentos
A consulta de documentos pode ser utilizada para verificar o status de um documento, ou uma faixa de documentos, emitidos anteriormente.
Para realizar a consulta, a Aplicação Comercial deve chamar a função "InvoiCyFramework_EmiteDocumento". Deverá ser passado um XML contendo dados de identificação do emissor, a série e sequenciais dos documentos que se deseja consultar, no campo XML entrada, conforme exemplo abaixo:
<Consulta>
<ModeloDocumento>NFCe</ModeloDocumento>
<Versao>4.00</Versao>
<tpAmb>2</tpAmb>
<CnpjEmissor>06354976000149</CnpjEmissor>
<NumeroInicial>1</NumeroInicial>
<NumeroFinal>10</NumeroFinal>
<Serie>1</Serie>
</Consulta>
Descarte de Documentos
Durante o processo de emissão dos documentos fiscais podem acontecer inúmeros imprevistos que impedem de obter o status final do documento. Quando o emitente desconhece o que aconteceu com o documento enviado, ou não possui o status final do mesmo, recomenda-se emitir um novo documento, avançando a numeração sequencial, e solicitar o descarte do documento emitido anteriormente.
Por exemplo: emitido o documento do sequencial 100 com tpEmis= 1 (emissão online), mas não recebeu retorno ou recebeu um 108 (timeout), este documento não terá seu DANFE NFC-e gerado, pois o 108 não é um status final. Devido a isto será necessário gerar a mesma venda, mas com numeração 101, que será emitido em contingência Offline (tpEmis= 9) que indiferente de estar autorizada ou não, terá seu DANFE NFC-e gerado para acobertar a venda.
Atenção: O avanço de numeração se faz necessário para evitar a duplicidade de documentos com a mesma chave de acesso.
Este processo de descarte trata a NFC-e 100 que recebeu o 108 timeout como sendo NFC-e substituída e a NFC-e 101 como NFC-e substituta. O processo de descarte consiste em se a NFC-e 100 não constar como autorizada na SEFAZ, deverá ser inutilizado este sequencial 100 e se constar como autorizada, deverá ser cancelada através do evento de cancelamento por substituição.
Atenção: Este processo é nativo no InvoiCy Framework desde que o mesmo esteja configurado para controlar o sequencial.
Caso o controle de sequencial for por conta do Aplicativo Comercial, este deverá estar preparado para receber o retorno 108 do InvoiCy Framework e assim gerar novo XML com avanço do sequencial e junto disponibilizar o XML de parâmetros adicionais para solicitar o descarte da NFC-e que recebeu o 108. Para isso, deve-se considerar o envio do descarte em uma das opçõe a seguir:
Pedido de Substituição
O InvoiCy disponibiliza no layout de integração um grupo chamado “SubstituirDocumento”, onde poderá ser informado o número e a série do documento que deverá ser substituído.
Este pedido deve ser informado através do parâmetro XML de parâmetros adicionais da função "InvoiCyFramework_EmiteDocumento". O InvoiCy detecta automaticamente quando a SEFAZ de origem do emissor voltar a operar e irá inutilizar ou cancelar o documento marcado como substituído, dependendo de qual status ele apresentar junto à SEFAZ. Basta enviar a estrutura de tags conforme exemplo abaixo:
<SubstituirDocumento>
<nNF>2035</nNF>
<serie>260</serie>
<modelo>NFCe</modelo>
<CNPJ_emit>1234567801234</CNPJ_emit>
<nNFSubstituta>2036</nNFSubstituta>
<serieSubstituta>260</serieSubstituta>
</SubstituirDocumento>
É importante destacar que a nota substituída deve estar emitida com tpEmis=1, e a nota substituta sempre deve ser enviada com tpEmis=9, caso contrário o evento será rejeitado com código 920 – Tipo de Emissão inválido no Cancelamento por Substituição.
Além disso, a data de emissão da nota substituta não pode ser maior que 2 horas da data de emissão da nota que será descartada/cancelada, ou resultará na rejeição 915 – Data de emissão da NF-e Substituta maior que 2 horas da data de emissão da NFe a ser cancelada.
Atenção: A nota substituta sempre deve estar com status Autorizado, caso contrário o evento de cancelamento não será enviado, e resultará na rejeição 913 – NF-e Substituta Denegada ou Cancelada.
Pedido de Descarte
Outra forma é enviar somente o pedido de descarte de um documento pela função "InvoiCyFramework_EmiteDocumento". O InvoiCy irá inutilizar ou cancelar o documento de acordo com o seu status perante a SEFAZ. Basta enviar a seguinte estrutura de tags, como demonstrado a seguir:
<DescartarDocumento>
<ModeloDocumento>NFCe</ModeloDocumento>
<tpAmb>2</tpAmb>
<CNPJ_emit>06354976000149</CNPJ_emit>
<Numero>708</Numero>
<Serie>500</Serie>
<NumeroSubstituta>735</NumeroSubstituta>
<SerieSubstituta>500</SerieSubstituta>
</DescartarDocumento>