fix: gate cClassTrib applicability by CRT and date
This commit is contained in:
@@ -4,12 +4,17 @@ Substitui o modelo anterior de "escopo ampliado". Não existe segundo escopo, se
|
||||
|
||||
## 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)`).
|
||||
(`C000025.CCLASSTRIB`, `RTC_CCLASSTRIB(CCLASSTRIB, CSTIBSCBS)`, `RTC_CST(CSTIBSCBS)`). Isso habilita o recurso RTC; **não** torna cClassTrib obrigatório para todos os produtos.
|
||||
|
||||
- `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.
|
||||
`CCLASSTRIB_APPLICABLE = RTC_ENABLED E C000004.CRT conhecido E data atual >= data efetiva do CRT`:
|
||||
|
||||
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).
|
||||
- CRT 3: aplicável a partir de 2026-08-03.
|
||||
- CRT 1/2/4: aplicável a partir de 2027-01-01.
|
||||
- CRT ausente/desconhecido/conflitante: não aplicável até resolver o contexto, sem inferir regime.
|
||||
- RTC desligada, CRT sem aplicabilidade na data, ou contexto não resolvido: `CCLASSTRIB` é ignorado na validação/completude; não cria blocker nem candidato e não escreve. Os outros campos fiscais continuam avaliados.
|
||||
- RTC ligada e cClassTrib aplicável: validar o valor e manter os blockers de campo vazio/inválido/catálogo existentes.
|
||||
|
||||
Parâmetro ilegível ou conflito de valores continua fail-closed para o escopo RTC. A aplicabilidade de cClassTrib é calculada separadamente com CRT ao vivo de `C000004` e as datas efetivas.
|
||||
|
||||
## 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).
|
||||
@@ -27,13 +32,14 @@ Integridade do catálogo: sem órfãos (classe → CST inexistente), sem duplica
|
||||
## 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)
|
||||
## Fontes (ACCESSED_AT 2026-09-24/25)
|
||||
- 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).
|
||||
- `C000004.CRT`: regime da empresa lido ao vivo; a vigência de aplicabilidade segue o calendário oficial registrado por `legal_effective_context`.
|
||||
|
||||
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.
|
||||
O interruptor do ERP habilita o recurso RTC; `C000004.CRT` e a vigência decidem quando cClassTrib entra na completude. Assim, `USAR_REFORMA_TRIBUTARIA=1` por si só não causa 521 blockers em empresa CRT 1 antes de 2027.
|
||||
|
||||
## Fonte da verdade (ERP_RTC_ENABLED)
|
||||
Quem decide é o **Agent**, lendo o banco real daquela instalação **a cada varredura** (nunca uma decisão guardada no Hub, nunca cache local):
|
||||
@@ -41,13 +47,14 @@ Quem decide é o **Agent**, lendo o banco real daquela instalação **a cada var
|
||||
O estado observado vai em `fiscal_context` do resultado do job e aparece no painel com proveniência (tooltip): `rtc_enabled`/`erp_rtc_enabled`, `rtc_source` (`PARAMETROS.USAR_REFORMA_TRIBUTARIA`), `rtc_param`, `rtc_param_rows`, `rtc_param_conflict`, `rtc_observed_at` (UTC), `rtc_supported`, `rtc_catalog_valid`.
|
||||
O fingerprint dos blockers inclui o estado RTC: 0→1 cria blockers novos; 1→0 faz a varredura seguinte não reenviar os RTC e o Hub os fecha (`AUTO_REEVALUATION`).
|
||||
|
||||
## ERP_RTC_ENABLED × LEGAL_EFFECTIVE_CONTEXT (registrados separadamente)
|
||||
- `ERP_RTC_ENABLED` é a regra operacional do produto e a única que entra na completude.
|
||||
- `legal_effective_context(crt)` é **informativo** (`informational_only=true`, nunca blocker): para CRT 1/2/4 a NT 2025.002 v1.51 diz que as orientações de IBS/CBS em documentos virão em NT futura e que a tributação desses contribuintes ocorre a partir de 2027 (LC 214/2025 art. 348); para CRT 3 o preenchimento é obrigatório desde 01/01/2026. Uma empresa Simples com o interruptor ligado no SGV é validada; uma com o interruptor desligado não é, seja qual for o calendário legal.
|
||||
## ERP_RTC_ENABLED × CCLASSTRIB_APPLICABLE
|
||||
- `ERP_RTC_ENABLED` registra que o SGV ativou RTC e o schema suporta o recurso.
|
||||
- `CCLASSTRIB_APPLICABLE` usa `C000004.CRT` e a data efetiva acima; só quando verdadeiro `CCLASSTRIB` participa da completude e pode gerar blocker/candidato.
|
||||
- `legal_effective_context(crt)` continua reportando o contexto amplo de documentos; a decisão operacional por cClassTrib está registrada separadamente em `fiscal_context.cclasstrib_applicability` (`state`, `basis`, `effective_from`, `source`).
|
||||
|
||||
## Achado de corpus e causa da divergência de RTC (somente leitura)
|
||||
Estado atual do parâmetro nas cópias locais: `CONSTRUCAO=1`, `TESTESOFICIAIS=1`, `MMMODAS=0`, `RINCAO=0`, `UNIAO=0` (cada uma com **uma** linha em `PARAMETROS`, `ODS 11.2`, Firebird 2.5.9). O discovery de `TESTESOFICIAIS.FDB` registrou `0` às 15:25 de 24/09 e a leitura de hoje (mesmo arquivo, mesmas 521 linhas) retorna `1`. Causas descartadas: linha errada / várias linhas (há 1), cache do Hub (a leitura é direta no Firebird, o Agent lê ao vivo), outro arquivo (mesmo caminho canônico). Causa real comprovada: **o valor mudou no próprio banco depois do discovery** (mesmo arquivo, mesma linha única). O autor da mudança não é rastreável (o Firebird 2.5 não guarda histórico de valores e o SGV não tem tabela de log de parâmetros); a hipótese mais simples é a alteração do parâmetro "usar reforma tributária" no SGV 5.1.0.4, que é quem lê esse parâmetro. Por isso o Agent nunca reaproveita um estado anterior.
|
||||
Consequência medida (TESTESOFICIAIS, RTC ligada de fato): 521/521 produtos com `CCLASSTRIB_MISSING` ⇒ cobertura real 0%; com RTC desligada (estado do piloto) 94,82%.
|
||||
Baseline anterior ao gate CRT/vigência (TESTESOFICIAIS, RTC ligada): 521/521 produtos foram contados como blockers cClassTrib e cobertura ficou em 0%. A validação pós-gate do Agent 2 deve registrar as novas contagens após executar o Agent atualizado; a medição antiga não representa a regra atual.
|
||||
|
||||
## Determinação e preenchimento do cClassTrib
|
||||
Ver `docs/cclasstrib_resolution.md` (fontes oficiais, catálogo local × oficial, regras) e `docs/rtc_auto_apply.md` (auto-apply restrito a `CCLASSTRIB`, desligado por padrão).
|
||||
|
||||
Reference in New Issue
Block a user