Skip to content

Commit

Permalink
Apenas o arquivo md relativo a operação em contingencia SVC
Browse files Browse the repository at this point in the history
  • Loading branch information
robmachado committed Jun 11, 2024
1 parent 8837f0a commit 1bfe9a7
Showing 1 changed file with 44 additions and 33 deletions.
77 changes: 44 additions & 33 deletions docs/Contingency.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 5
> 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.
> Se for usar esse método melhore o sistema emissão com muitas validações, para garantir que erros sejam identificados antes de geração do ducumento, para evitar problemas posteriores e multas.
> Se for usar esse método melhore o sistema emissão com muitas validações, para garantir que erros sejam identificados antes de geração do documento, para evitar problemas posteriores e multas.

## SVC-AN (tpEmis = 6) *Apenas NFe (modelo 55)*
Expand All @@ -34,9 +34,9 @@ Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 6
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, CE, DF, ES, MG, PA, PB, PI, RJ, RN, RO, RR, RS, SC, SE, SP, TO

> Este é o caso de uso da classe Contingency da nossa biblioteca, inclusive NFe emitidas em modo normal será automaticamente ajustadas para o ambiente de contingência e novamente assinadas quando contingencia SVCAN estiver ativada na class Tools.
> Este é o caso de uso da classe Contingency da nossa biblioteca, inclusive NFe emitida em modo normal será automaticamente ajustada para o ambiente de contingência e novamente assinada quando contingencia SVCAN estiver ativada na class Tools.
> IMPORTANTE: este processo irá alterar a chave da NFe, e portanto deverá ser regravada em sua base de dados (com a chave nova gerada pelo processo de envio).
> IMPORTANTE: este processo **irá alterar a chave da NFe**, e portanto deverá ser **regravada em sua base de dados** (com a chave nova gerada pelo processo de envio).
**Uso: SEFAZ OFFLINE, mas emitente com acesso à internet, e sistema de contigência SVCAN ativado pela SEFAZ autorizadora do seu estado.**

Expand All @@ -50,9 +50,9 @@ Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 7
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, GO, MA, MS, MT, PE, PR

> Este é o caso de uso da classe Contingency da nossa biblioteca, inclusive NFe emitidas em modo normal será automaticamente ajustadas para o ambiente de contingência e novamente assinadas quando contingencia SVCAN estiver ativada na class Tools.
> Este é o caso de uso da classe Contingency da nossa biblioteca, inclusive NFe emitida em modo normal será automaticamente ajustada para o ambiente de contingência e novamente assinada quando contingencia SVCRS estiver ativada na class Tools.
> IMPORTANTE: este processo irá alterar a chave da NFe, e portanto deverá ser regravada em sua base de dados (com a chave nova gerada pelo processo de envio).
> IMPORTANTE: este processo irá **alterar a chave da NFe**, e portanto deverá ser **regravada em sua base de dados** (com a chave nova gerada pelo processo de envio).
**Uso: SEFAZ OFFLINE, mas emitente com acesso à internet, e sistema de contigência SVCRS ativado pela SEFAZ autorizadora do seu estado.**

Expand All @@ -67,53 +67,56 @@ Nesse caso o xml da NFCe deve indicar na propriedade <tpEmis> o valor 9

> *IMPORTANTE*: Esse modo de contingência serve exclusivamente para as notas modelo 65 e não podem ser usadas em notas modelo 55.
> Todos os estados permitem a emissão de NFCe em modo OFFLINE, exceto SP, onde é obrigátorio o uso do SAT@ecf ou da emissão por EPEC NFCe
> Todos os estados permitem a emissão de NFCe em modo OFFLINE, exceto SP, onde é obrigátorio o uso do SAT@ecf ou da emissão por EPEC NFCe.
**Uso: Sem acesso a internet ou com a SEFAZ offline.**
> Outro problema com essas NFCe-OFFLINE é 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.
> Se for usar esse método melhore o sistema emissão com muitas validações, para garantir que erros sejam identificados antes de geração do documento, para evitar problemas posteriores e multas.
> Mas em caso de erro detectado pela SEFAZ pode corrigir a mesma NFCe, assinar novamente e enviar dentro do prazo estabelecido, mas o documento impresso originalmente estará diferente da versão final e em principio deverá ser substituido com o consumidor.
**Uso: Sem acesso a internet ou com a SEFAZ offline.**

## EPEC (tpEmis = 4) *NFe e NFCe*

Evento Prévio da Emissão em Contingência

Nesse caso o xml da NFe deve indicar na propriedade <tpEmis> o valor 4

Este é o processo mais complexo e "arriscado" entre todos os modos de contigência.
Este é o processo **mais complexo e "arriscado"** entre todos os modos de contigência.

São dois tipos diferentes mas que seguem basicamente as mesmas regras estruturas e condições, apenas são direcionados para webservices diferentes.

Em ambos os casos são criados eventos EPEC Evento Prévio de Emissão em Contingência, para emitir em EPEC devem ser observados os seguintes passos:
Em ambos os casos são criados eventos EPEC Evento Prévio de Emissão em Contingência, e para emitir em EPEC devem ser observados os seguintes passos:

1. criar a NFe ou a NFCe já marcada em contignência EPEC com **tpEmis = 4**, **dhCont = data hora de entrada em contingência** e **xJust = justificativa**
2. criar e enviar o evento EPEC pelos métodos da classe Tools, sendo:
- $tools->sefazEPEC($xml, $verAplic) para NFe (mod 55)
- $tools->sefazEpecNfce($xml, $verAplic) para NFCe (mod 65)
3. verificar se o evento foi autorizado, se sim protocolar, se não tratar o erro até ser autorizado
4. usar o xml e os dados do EPEC autorizado para imprimir o DANFE ou DANFCE
5. enviar o xml assim que a SEFAZ autorizadora retornar a operção normal
- $tools->sefazEPEC($xml, $verAplic) para NFe (mod 55)
- $tools->sefazEpecNfce($xml, $verAplic) para NFCe (mod 65)
3. verificar se o evento foi autorizado, se sim protocolar, se não tratar o erro até o evento ser autorizado
4. usar o xml da NFe/NFCe e os dados do EPEC autorizado para imprimir o DANFE ou DANFCE
5. enviar o xml assim que a SEFAZ autorizadora retornar a operação normal

### EPEC NFe (mod 55)

Este processo envia o EPEC para o ambiente nacional
Este processo envia o EPEC para o ambiente nacional da NFe.

### EPEC NFCe (mod 65)

Este processo envia o EPEC para o webservice de registro de EPEC especifico para NFCe exclusivamente no estado de São Paulo.
Este processo envia o EPEC para o webservice de registro de EPEC especifico para NFCe, exclusivamente no estado de São Paulo.

> NOTA: não existe EPEC para NFCe em outros estados, neles deve ser usado a contingência OFFLINE
> NOTA: não existe EPEC para NFCe em outros estados, neles deve ser usada a contingência OFFLINE
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.

**Uso: SEFAZ OFF e SVC OFF mas emitente com acesso à internet.**
> IMPORTANTE: a emissão de um evento EPEC cria a pendência do envio de uma nota que seja autorizada ou denegada dentro do limite de 7 dias para que seja vinculada ao EPEC, caso contrario, se algum evento EPEC não for vinculado ao uma NFe/NFCe, o emitente ficará **bloqueado e não mais porderá enviar eventos EPEC**.
# [Esclarecimentos sobre TIMEOUT](TimeOut.md)
**Uso: NFe SEFAZ OFF e SVC OFF mas emitente com acesso à internet.**

**Uso: NFCe SEFAZ-SP OFF e EPEC-NFCe-SP ativo e emitente com acesso à internet.**

# Class Factories\Contingency
# [Esclarecimentos sobre TIMEOUT](TimeOut.md)

## USAGE

**Habilitando o modo de contingência**
## USO

A classe Contingency somente será usada para envio de NFe (mod 55) para as contigências SVC-AN ou SVC-RS, que são substitutos diretos à emissão normal.

Expand All @@ -126,9 +129,9 @@ Os demais tipos de contingência como:

Como deve ser feito o processo no seu sistema:

1. ao entrar em contingência, sempre verifique se a mesma está ativa para o seu estado
2. ative o modo de contingência e grave o json retornado em um cache ou pbase de dados, para habilitar seu uso continuo
3. ao enviar uma NFe (mod 55), sempre verifique esse json no cache ou na base de dados e o recarregue em Contingency::class
1. ao entrar em contingência SVCAN ou SVCRS, sempre verifique se o webservice de contingência está ativo para o seu estado;
2. ative o modo de contingência e grave o json retornado em um cache ou base de dados, para habilitar seu uso continuo;
3. ao enviar uma NFe (mod 55), sempre verifique esse json no cache ou na base de dados, e o recarregue em Contingency::class
4. injete a Contingency::class na classe principal Tools::class
```php

Expand All @@ -142,7 +145,7 @@ if (!empty($json_contingencia_do_cache)) {
$tools = new Tools($configJson, $cert, $cont);
$tools->model(55);
```
5. ou carregue a proriedade publica da classe $tools->contingency
5. ou carregue diretamente a proriedade publica da classe $tools->contingency
```php
$cert = Certificate::readPfx(file_get_contents('certificado.pfx'), 'senha');
//recarrega a contingencia que foi enteriormente ativada e gravada em cache
Expand All @@ -156,6 +159,8 @@ $tools->contingency = $cont;
$tools->model(55);
```

## Habilitando o modo de contingência

```php
use NFePHP\NFe\Factories\Contingency;

Expand All @@ -170,6 +175,7 @@ $status = $contingency->activate($acronym, $motive, $type);
```
$status irá conter uma string JSON ENCODED, com as informações sobre a condição de contingência.

Como mostrado abaixo:

```json
{
Expand All @@ -179,8 +185,12 @@ $status irá conter uma string JSON ENCODED, com as informações sobre a condi
"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:

Essa string deverá ser mantida, em disco, cache 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 está normal.

Exemplo:

```php
$status_contingencia = '{
"motive":"SEFAZ fora do AR",
Expand All @@ -194,12 +204,13 @@ $tools->contingency = $contingency;
```

**Desabilitando o modo de contingência**
```php
use NFePHP\NFe\Factories\Contingency;

Você pode simplesmente apagar o registro anterior da string json da contigência ou desativa-la como indicado abaixo, e gravar onde estava registrada a anterior.

```php
//onde $status é a string json obtida quando entrou em modo de contingência.
$contingency = new Contingency($status);
$status = $contingency->deactivate();
$status = $contingency->deactivate(); ///grave o retorno no cache ou na base de dados

```
$status irá conter dados padrões em condições normais.
Expand All @@ -219,7 +230,7 @@ Essa string deverá ser arquivada, em disco ou em base de dados para uso posteri
public $type;

@var string
> Tipo da contingência SVCAN, SVCRS
> Tipo da contingência apenas SVCAN, SVCRS

public $motive;
Expand All @@ -241,7 +252,7 @@ public $tpEmis;
> Codigo numerico que representa os tipos de contingência acima indicados. Esse codigo fará parte na montagem as NFe no campo <tpEmis>.

## Methods
## Métodos

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.
Expand Down

0 comments on commit 1bfe9a7

Please sign in to comment.