NFe via TSS — fluxo completo end-to-end
Como funciona emissao de NFe no Protheus via TSS: configuracao, geracao XML, envio SEFAZ, autorizacao, DANFE. Troubleshooting comum.
NFe e o pilar fiscal da venda no Protheus. Por baixo dos panos: TSS (TOTVS Service SOA) ou seu sucessor SAFe faz o middleware entre Protheus e SEFAZ. Saber o fluxo completo ajuda a debugar quando algo da errado.
Arquitetura
┌──────────────────┐ ┌─────────────┐ ┌─────────────────┐
│ Protheus │ ──→ │ TSS / SAFe │ ──→ │ SEFAZ (governo) │
│ (MATA461 emite) │ │ (middleware)│ │ (autoriza) │
└──────────────────┘ └─────────────┘ └─────────────────┘
│ │ │
└ Gera SF2/SD2 ───→ Recebe XML, ───→ Recebe pdo, retorna
assina, autorizacao+chave
envia de acesso (44 chars)
Fluxo passo a passo
1. Configuracao inicial (uma vez)
- Certificado digital A1/A3 instalado no servidor TSS
- Parametros do emitente (CNPJ, IE) cadastrados no TSS
- MV_NFEUF (UF de emissao) e MV_NFETOK (token TSS) configurados
- Schema XSD da SEFAZ atualizado (TSS baixa automaticamente)
2. Emissao no Protheus
// MATA461 cria SF2 + SD2
RecLock("SF2", .T.)
SF2->F2_FILIAL := xFilial("SF2")
SF2->F2_DOC := cNumNF // sequencial
SF2->F2_SERIE := "001"
SF2->F2_EMISSAO := dDataBase
SF2->F2_CLIENTE := cCliente
SF2->F2_VALMERC := nTotal
// ...
SF2->(MsUnlock())
3. Geracao XML
Protheus monta o XML conforme schema NFe 4.0. Mandando ao TSS via Web Service interno.
4. TSS assina + envia ao SEFAZ
TSS aplica assinatura digital com o certificado, envia ao SEFAZ via WS proprio.
5. Status retornado
| Codigo | Significado |
|---|---|
| 100 | Autorizado o uso da NFe — sucesso |
| 110 | Uso denegado — emissao foi rejeitada |
| 135 | Evento registrado e vinculado a NF |
| 205 | NFe esta denegada na base do SEFAZ |
| 217 | NFe nao consta na base do SEFAZ |
| 539 | Duplicidade de NFe com a mesma chave |
| 999 | Erro nao catalogado — checar log TSS |
6. Chave de acesso e atualizacao
Apos status 100, SEFAZ retorna chave de acesso de 44 digitos. TSS grava em SF2->F2_CHVNFE. Pode ser usada pra:
- Imprimir DANFE com chave (codigo de barras)
- Consultar status posterior (CCe, cancelamento)
- Referenciar em devolucao
Troubleshooting comum
Erro "Rejeicao: total da NF nao confere"
Soma de SD2 nao bate F2_VALMERC. Reconciliar antes de tentar denovo.
Erro "Rejeicao: CFOP nao permite tributacao"
CFOP definido na TES nao bate com a tributacao (CST ICMS, PIS, COFINS). Revisar TES.
Erro "Certificado expirou"
Renovar A1 no TSS. Status 217 ate trocar.
Erro "Indisponibilidade do SEFAZ"
Status 108-109. SEFAZ fora do ar. Aguardar ou usar contingencia (SVC).
Status 100 mas DANFE nao imprime
Geralmente: layout PDF nao processou. Cheque MV_NFEUF, MV_RELT (relatorio padrao).
Contingencia — SVC (Sefaz Virtual Contingencia)
Quando SEFAZ principal cai, voce pode emitir pela SVC. Protheus tem flag em MV_NFETIPO = "SVC". Apos retornar normal, deve transmitir NFs SVC pro SEFAZ regular.
Cancelamento
// MATA465 - Cancelar NFe (max 24h apos autorizacao)
// Por PE NFEAUT, voce e notificado quando cancelamento processa
// Status 135 = evento registrado
CCe (Carta de Correcao Eletronica)
Corrige erros nao-essenciais (descricao, observacao). Limite: 20 CCes por NFe. Use MATA468.
Pegadinhas importantes
- Numeracao sequencial obrigatoria — gaps levantam suspeita fiscal. Use SXE/SXF rigidamente.
- Data emissao = data envio — geralmente. Reenvio com data antiga pode ser rejeitado.
- Importacao: NFe importada (entrada de mercadoria) NAO eh emitida pelo Protheus — apenas registrada via MATA103.
- Tela "Inutilizacao" (MATA464) e diferente de cancelamento — usar pra numeros "saltados" por engano.
- NFC-e (modelo 65) tem fluxo semelhante mas eh pra varejo, com regras especificas.