Em condições normais as NFe emitidas tem a propriedade <tpEmis> com o valor igual a 1-Emissão normal.
Quando a conexão via internet com a SEFAZ autorizadora não é possivel, existem alternativas para permitir a emissão dos documentos mesmo nessas condições (offline).
Para uma melhor compreensão, o ENCAT lançou um documento que visa facilitar o entendimento, ele pode ser encontrado em:
Página Principal > Documentos > Manuais > Manual de Boas Práticas no desenvolvimento de emissor de NFC-e – BP 2018.001 – versão 1.0
Após lê-lo, os procedimentos abaixo podem ser realizadas na biblioteca, há uma sessão interessante sobre contigência.
Ao ativar qualquer contigência o XML da NFe deve ser remontado ou modificado e assinado novamente com as seguintes alterações:
- <tpEmis> indicar o número do modo de contingência utilizado
- <dhCont> Data e Hora da entrada em contingência no formato com TZD
- <xJust> Justificativa da entrada em contingência com 15 até 256 caracteres
Este modo de contingência permite que a NFe seja emitida sem que haja a prévia autorização pela SEFAZ autorizadora através da impressão do DANFE em formulário de segurança de impressor autônomo.
Uso: Não mais pode ser usado
Este modelo de contingência está desabilitado desde 2011. E não pode mais ser usado
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 2
Sistema de Contingência do Ambiente Nacional, este serviço foi desabilitado e portanto não está mais disponivel para uso.
Uso: Não mais pode ser usado
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 3
Declaração Prévia da Emissão em Contingência
Este tipo de contingência foi substituido pelo modo EPEC que utiliza eventos para registrar a emissão. Veja EPEC.
Uso: Não mais pode ser usado
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 4
Evento Prévio da Emissão em Contingência
Uso: SEFAZ OFF e SVC OFF mas emitente com acesso à internet.
Este modo de contingência é diferente dos demais por que na verdade irá enviar um evento especifico para o webservices de Registro de Eventos do Ambiente Nacional. Normalmente usa-se esse tipo de contingência em caso da SEFAZ autorizadora estar fora do ar, bem como o Serviço Virtual de Contingência também, e isso é uma situação muito rara de ocorrer.
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 4
Este modo de contingência permite que a NFe seja emitida sem que haja a prévia autorização pela SEFAZ autorizadora através da impressão do DANFE em formulário de segurança.
Uso: Sem acesso a internet.
Este modo de contingência permite que a NFe seja emitida sem que haja a prévia autorização pela SEFAZ autorizadora através da impressão do DANFE em formulário de segurança.
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 2
Não é recomendável o uso desse tipo de contingência com a NFe, por vários motivos. O primeiro é o custo, pois os formulários de segurança são caros e deve-se manter controle estrito sobre os mesmos, pois cada folha é identificada individualmente e pode ser usada indevidamente.
Devemos considerar também a necessidade adicional de controle dessas notas e posterior envio à SEFAZ autorizadora quando o sistema estiver novamente on-line.
Outro motivo é a possibilidade de a NFe ser reprovada após o processo posterior de envio a SEFAZ autorizadora, com isso o transporte e recebimento da mercadoria se torna uma operação "ilegal" e sujeita a punições.
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 5
SEFAZ Virtual de Contingência do Ambiente Nacional
Este sistema de contingência é o melhor de todos e permite que as notas sejam emitidas com poucas alterações e sem a necessidade de reenvio posterior. Nesse modo as notas enviadas serão sincronizadas automaticamente pelos orgãos autorizadores sem a necessidade que qualquer outra ação pelo emitente. Este serviço atende: AC, AL, AP, DF, ES, MG, PB, RJ, RN, RO, RR, RS, SC, SE, SP, TO
Uso: SEFAZ OFF, mas emitente com acesso à internet.
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 6
SEFAZ Virtual de Contingência do RS
Este sistema de contingência é o melhor de todos e permite que as notas sejam emitidas com poucas altereções e sem a necessidade de reenvio posterior. Nesse modo as notas enviadas serão sincronizadas automaticamente pelos orgãos autorizadores sem a necessidade que qualquer outra ação pelo emitente. Este serviço atende: AM, BA, CE, GO, MA, MS, MT, PA, PE, PI, PR
Uso: SEFAZ OFF, mas emitente com acesso à internet.
Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 7
Para a NFCe somente estão disponíveis e são válidas as opções de contingência 5 (FS-DA) e 9 (OFF-LINE).
IMPORTANTE: Esse modo de contingência serve exclusivamente para as notas modelo 65 e não podem ser usadas em notas modelo 55.
Uso: Sem acesso a internet.
Nesse caso o xml da NFCe deve indicar na propriedade <tpEmis> o valor 9
Habilitando o modo de contingência
use NFePHP\NFe\Factories\Contingency;
$contingency = new Contingency();
$acronym = 'SP';
$motive = 'SEFAZ fora do AR';
$type = 'SVCAN';
$status = $contingency->activate($acronym, $motive, $type);
$status irá conter uma string JSON ENCODED, com as informações sobre a condição de contingência.
{
"motive":"SEFAZ fora do AR",
"timestamp":1484747583,
"type":"SVCAN",
"tpEmis":6
}
Essa string deverá ser arquivada, em disco ou em base de dados para uso posterior, até que o modo de contingencia seja desabilitado. Ou seja, a cada vez que carregar a classe Tools deverá ser passada a classe contingency, ou será considerado que o ambiente é normal. Exemplo:
$tools->contingency = $contingency;
Desabilitando o modo de contingência
use NFePHP\NFe\Factories\Contingency;
//onde $status é a string obtida quando entrou em modo de contingência.
$contingency = new Contingency($status);
$status = $contingency->deactivate();
$status irá conter dados padrões em condições normais.
{
"motive":"",
"timestamp":0,
"type":"",
"tpEmis":1
}
Essa string deverá ser arquivada, em disco ou em base de dados para uso posterior, ou apenas ignorada, e o arquivo ou registro da base de dados removida.
public $type;
@var string
Tipo da contingência FSDA, SVCAN, SVCRS, EPEC, OFFLINE
public $motive;
@var string
Motivo da entrada em contingência, texto com no minimo 15 caracteres e no máximo 255.
NOTA: remova todo e qualquer caracter especial desse texto.
public $timestamp;
@var int
Timestmap do PHP que representa a data e hora em que a contignência foi ativada.
public $tpEmis;
@var int
Codigo numerico que representa os tipos de contingência acima indicados. Esse codigo fará parte na montagem as NFe no campo <tpEmis>.
Construtor, caso seja passado o parametro, uma string JSON, a condição de contingência contida nessa string será registrada na classe. Caso nada seja passado a classe irá considerar condição de emissão normal.
Contingency::construct($string)
Essa é outra forma de passar o parametro (string JSON) para a classe.
Contingency::load($string)
Esse método ativa o modo de continência da classe. Os parametros são:
Contingency::activate($acronym, $motive, $type)
$acronym --- sigla do estado
$motive --- texto com o motivo da entrada em contingência
$type --- podem ser usadas as constantes:
- Contingency::SVCAN
- Contingency::SVCRS
- Contingency::FSDA
- Contingency::OFFLINE
- Contingency::EPEC
Esse método desativa o modo de contingência e retorna uma string json com os valores padrões.
Contingency::deactivate()