Files
GTI_GERENCIADOR_FISCAL/docs/rtc_pis_cofins_model.md
T
gtiandClaude Sonnet 5 b15dbea213 feat: unified fiscal coverage - PIS/COFINS applicability + conditional RTC in one definition, one queue, one panel
- central/app/unified_fiscal_coverage.py: pure rules (PIS/COFINS NOT_APPLICABLE/REQUIRED/OPTIONAL/NEEDS_REVIEW, RTC only when the ERP switch is on)
- agent: read-only loader (unified_fiscal.py) replaces the legacy/expanded module; findings feed the single operational state, coverage and blocker queue
- hub: BLOCKED_FISCAL_DATA blockers (PIS/COFINS/RTC) share the queue; stale ones close on the next full pass; dashboard breakdown gains CEST/PIS/COFINS/RTC
- panel: legacy/expanded coverage block removed; discreet 'Reforma Tributaria: Ativa/Desativada'
- docs: unified_fiscal_completeness, pis_cofins_applicability, rtc_pis_cofins_model + official source manifests; read-only E2E script

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 16:39:53 -03:00

3.6 KiB

Reforma Tributária (RTC) no cadastro de produto — modelo condicional

Substitui o modelo anterior de "escopo ampliado". Não existe segundo escopo, segundo painel ou segunda fila: RTC é uma condição da definição única de completude (docs/unified_fiscal_completeness.md).

Regra definitiva

RTC_ENABLED = PARAMETROS.USAR_REFORMA_TRIBUTARIA truthy (1/S/T/TRUE) E o schema comporta RTC (C000025.CCLASSTRIB, RTC_CCLASSTRIB(CCLASSTRIB, CSTIBSCBS), RTC_CST(CSTIBSCBS)).

  • RTC_ENABLED=false (parâmetro 0, nulo, ausente ou schema antigo): CCLASSTRIB e CST IBS/CBS não entram na completude; nenhum blocker RTC; o painel só mostra "Reforma Tributária: Desativada".
  • RTC_ENABLED=true: RTC passa a ser obrigatório para todo produto.

Não há estado "desconhecido": um parâmetro ilegível conta como não habilitado pelo ERP (fail-closed para escopo, sem inflar cobertura porque o campo não é exigido).

Validação com RTC ativa

C000025.CCLASSTRIB → RTC_CCLASSTRIB.CSTIBSCBS → RTC_CST (o CST IBS/CBS não é coluna do produto; é derivado pela relação).

Blocker (PT-BR) Condição
CCLASSTRIB_MISSING cClassTrib ausente vazio
CCLASSTRIB_INVALID_FORMAT cClassTrib com formato inválido não tem exatamente 6 dígitos
CCLASSTRIB_NOT_IN_CATALOG cClassTrib fora do catálogo local inexistente em RTC_CCLASSTRIB, ou fora da vigência (INICIO_VIGENCIA futura / FIM_VIGENCIA passada — colunas do próprio catálogo)
RTC_CST_MISSING CST IBS/CBS ausente no catálogo a classe não aponta CST ou o CST não existe em RTC_CST
RTC_CATALOG_INVALID Catálogo RTC local inválido catálogo com órfãos, duplicatas ou formatos inválidos (todo produto, enquanto RTC ativa)

Integridade do catálogo: sem órfãos (classe → CST inexistente), sem duplicatas, classes com 6 dígitos, CST com 3 dígitos. TESTESOFICIAIS: 145 classes, 18 CSTs, 0 órfãos, 0 duplicatas.

O que NÃO é validado

O schema do produto não modela alíquota IBS/CBS, valor IBS/CBS nem cCredPres. Não existem blockers desses campos e nenhum write target foi inventado. A validação do produto reflete só o que o SGV guarda como default: CCLASSTRIB.

Fontes (ACCESSED_AT 2026-09-24)

  • NT 2025.002-RTC v1.51, Portal Nacional da NF-e (publicada 04/08/2026): campos IBS/CBS (grupo UB) obrigatórios em 2026; para emitentes CRT 1/2/4 as orientações "serão publicadas em NT futura" porque a tributação IBS/CBS/IS desses contribuintes ocorre a partir de 2027 (art. 348 da LC 214/2025).
  • LC 214/2025 (Planalto, compilada): art. 348 (2026: IBS/CBS compensados com PIS/Cofins; alíquotas de teste).
  • Catálogo local do ERP (RTC_CCLASSTRIB/RTC_CST, PUBLICACAO/INICIO_VIGENCIA) e cClassTrib oficial no Hub (cClassTrib 2026-06-22.xlsx).
  • PARAMETROS.USAR_REFORMA_TRIBUTARIA: parâmetro do próprio SGV (executável 5.1.0.4 o lê; o 5.0.6.124 não tem RTC).

Nota fiscal vs. regra do produto: para CRT 1 a legislação só exige IBS/CBS no documento a partir de 2027; a regra deste motor segue o interruptor do ERP — quando o cliente liga a reforma no SGV, o cadastro passa a ser cobrado.

Achado de corpus (somente leitura)

A cópia local TESTESOFICIAIS.FDB tem USAR_REFORMA_TRIBUTARIA=1 e 0 produtos com CCLASSTRIB, enquanto o piloto confirmado pelo operador tem 0. Nada foi alterado no arquivo; o resultado do piloto é reproduzido por simulação pura (RTC_ENABLED=false, scripts/unified_coverage_e2e.py).

Testes

RTC off/on, CCLASSTRIB vazio/válido/inválido/órfão/expirado, catálogo inválido: central/tests/test_unified_fiscal_coverage.py, agent/tests/test_unified_fiscal.py.