Skip to content

NF-e Entrada — Manifestação do Destinatário

Visão Geral

A tela de NF-e Entrada permite ao restaurante consultar e manifestar NF-es emitidas por fornecedores contra o seu CNPJ. Ao confirmar uma NF-e, o sistema automaticamente:

  1. Registra a entrada de estoque para cada item da nota
  2. Cria uma Conta a Pagar na data de competência correta (para o DRE)
  3. Dispara o recálculo das Fichas Técnicas (BOM) dos pratos que usam os insumos da nota

Localização

frontend-react/src/features/inbound-nfe/index.tsx

Rota: /t/:slug/admin/inbound-nfe

Funcionalidades

  • Sincronização de NF-es recebidas via provider (PlugNotas, Arquivei ou SEFAZ direto)
  • Listagem com filtro por status e período
  • Manifestação de cada NF-e individualmente (4 eventos possíveis)
  • Gestão de Contas a Pagar vinculadas às NF-es

Status das NF-es

StatusCódigo SEFAZDescrição
pendingBaixada mas ainda não manifestada
ciencia210210Ciência da Operação — confirma recebimento
confirmada210200Confirmação da Operação — estoque processado
desconhecida210220Desconhecimento da Operação (com justificativa)
nao_realizada210240Operação Não Realizada (com justificativa)

Eventos de Manifestação

EventoQuando usarJustificativa
CiênciaPara tomar conhecimento sem confirmar aindaNão obrigatória
ConfirmaçãoMercadoria recebida e confere com a notaNão obrigatória
DesconhecimentoNão reconhece a operaçãoObrigatória (mín. 15 chars)
Não RealizadaMercadoria recusada ou devolvidaObrigatória (mín. 15 chars)

Somente a Confirmação dispara o processamento de estoque e criação de Contas a Pagar.

Fluxo Automático pós-Confirmação

POST /inbound-nfe/:id/manifest { eventType: 'confirmacao' }

Para cada item da NF-e:
  → Busca InventoryItem por supplierCode (cProd) ou nome
  → Cria InventoryMovement { type: 'entry', reason: 'purchase' }
  → Atualiza InventoryItem.costPrice e physicalQuantity

Cria AccountsPayable {
  amount: nfe.total,
  dueDate: issueDate + 30 dias,
  competenceDate: nfe.issueDate  ← usado pelo DRE
}

BomService.recalculateAllForIngredients(affectedItemIds)
  → Novo BomCostSnapshot para cada prato afetado

Providers de NF-e

Configurado via variável de ambiente INBOUND_NFE_PROVIDER:

ProviderValorDescrição
PlugNotasplugnotasIntegração via API PlugNotas (padrão)
ArquiveiarquiveiIntegração via API Arquivei
SEFAZ Diretosefaz_directConsulta direta ao SEFAZ (nfeDistDFe)

Provider SEFAZ Direto

Usa a infraestrutura de certificado A1 já existente:

  • Consulta: nfeDistDFe — serviço nacional, NSU incremental por CNPJ
  • Manifestação: RecepcaoEvento4 — mesmo endpoint do cancelamento outbound
  • NSU: Persiste lastNfeDfNsu no tenant para polling incremental

Requer: certificado A1 configurado + fiscalConfig.cnpj + fiscalConfig.uf no tenant.

Componentes Frontend

ComponenteDescrição
InboundNfeTableTabela com badge de status colorido + action menu
ManifestModalRadio de eventType + textarea de justificativa (obrigatória para desconhecimento/nao_realizada)
AccountsPayableTableFornecedor, vencimento, competência, status, botão Pagar
MarkPaidModalInput de valor pago + data de pagamento

Backend

  • backend/src/inbound-nfe/inbound-nfe.module.ts
  • backend/src/inbound-nfe/inbound-nfe.service.ts
  • backend/src/inbound-nfe/inbound-nfe.controller.ts
  • backend/src/inbound-nfe/schemas/inbound-nfe.schema.ts
  • backend/src/inbound-nfe/schemas/accounts-payable.schema.ts
  • backend/src/inbound-nfe/providers/sefaz-inbound.provider.ts

Variáveis de Ambiente

env
INBOUND_NFE_PROVIDER=sefaz_direct   # plugnotas | arquivei | sefaz_direct
PLUGNOTAS_TOKEN=...                  # obrigatório se provider=plugnotas
ARQUIVEI_CLIENT_ID=...               # obrigatório se provider=arquivei
ARQUIVEI_API_KEY=...                 # obrigatório se provider=arquivei

Relacionados

Lançado sob a licença MIT.