Regras fiscais e apuração

Matching NCM/CFOP/UF, lançamento FAY002 e fechamento do período.

Matching (FAY006)

Critérios: NCM (prefixo mais longo pontua mais), CFOP, UF origem/destino, regime (SIMPLES_NACIONAL | LUCRO_PRESUMIDO | LUCRO_REAL), tipo de contribuinte, CEST, natureza, vigência, ativa.

RegraFiscalService.calcularImpostos(filialId, input):

  1. Busca a regra aplicável (score).
  2. baseGeral = produto + frete + seguro + despesas − desconto.
  3. ICMS com redução de BC; ICMS-ST (Convênio 142/2018) — substituto calcula; substituído CST 60 / CSOSN 500 não. Interna: MVA original; interestadual: MVA ajustada. DIFAL não mistura com ST no mesmo item.
  4. Lançamento rascunho idempotente em FAY002 (chave empresa+doc+item+tributo+versão).
  5. IPI / PIS / COFINS / IBS / CBS / ISS conforme CST e flags de XML.
  6. DIFAL via FAY007 se UFs diferem, aplicaDifal e o item não é ST.

Tabelas auxiliares: FAY001 IBS/CBS por ano, FAY003 MVA, FAY004 cClassTrib, FAY005 ajuste SPED, FAY007 alíquotas UF.

Onda de classificação (entrada/saída)

Importação, devolução, bonificação, remessa, ativo, uso/consumo, ST retido. Uso/consumo na entrada não credita. Devolução na saída lança crédito. ST retido na saída = ressarcimento (ICMS_ST crédito). IP ENTRY.BEFORE_CLASSIFY observa; não altera a regra sozinho.

Fechar período

POST /regras-fiscais/livro/:filialId/fechar corpo { "periodo": "YYYY-MM" } promove conferido → apurado.

IPs: IP.FISCAL.APURACAO.BEFORE_CLOSE / AFTER_CLOSE (wired, fail-open).

Eventos: fiscal.apuracao.closed / reopened.

EFD ICMS/IPI: com fiscal.apuracao.efd=false o Bloco E soma documentos (comportamento clássico). Flag on: Bloco E lê FAY002 apurado, sem recalcular alíquota.

infCpl NF-e 55

Template FAI011.nfe_inf_cpl_template ({pedido}, {duplicatas}, …) + override FAT003.nfe_inf_cpl no faturamento. NFC-e 65 usa texto atual de referência ao doc. de saída.