git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
45 lines
4.3 KiB
Markdown
45 lines
4.3 KiB
Markdown
# Matriz de completude fiscal — 18 campos (Missão 2 / Bloco 4)
|
|
|
|
Evidência: dry-run read-only de 2026-09-28 sobre GTI.FDB (Agent 2, 527 produtos, CRT=1, UF=BA,
|
|
CONTRIBUINTE_IPI=N — `docs/runs/GTI_dryrun_universe_summary.json`), cruzamento com CONSTRUCAO/
|
|
MMMODAS/RINCAO/UNIAO (`docs/runs/BLOCO2_PIS_COFINS_CROSS_DB_V1.json`) e metadados de esquema
|
|
Firebird lidos diretamente (`RDB$RELATION_FIELDS`/`RDB$CHECK_CONSTRAINTS`). Nenhuma regra fiscal
|
|
nova foi inventada: campos sem evidência suficiente ficam `pendente de contador`.
|
|
|
|
| Campo | Classificação | Condição | Fonte da evidência | Status |
|
|
|---|---|---|---|---|
|
|
| CLASSIFICACAO_FISCAL (NCM) | MANDATORY | sempre | dataset NCM oficial | comprovado |
|
|
| CEST | CONDITIONALLY_MANDATORY | só quando o NCM tem CEST oficial único | tabela CEST/CONFAZ | comprovado |
|
|
| IPI | CONDITIONALLY_MANDATORY | só quando TIPI dá alíquota numérica não-ambígua | TIPI/IPI | comprovado |
|
|
| EX_TIPI | OPTIONAL | só quando o NCM tem múltiplas linhas TIPI (EX) | TIPI/IPI | comprovado |
|
|
| SITUACAO_TRIBUTARIA | CONDITIONALLY_MANDATORY | depende do NCM ser válido | regra ST interna (BA Anexo 1) | comprovado |
|
|
| CFOP | CONDITIONALLY_MANDATORY | não aplicável a INPUT (matéria-prima) | product_role + ST | comprovado |
|
|
| CFOP_ENTRADA | OPERATION_TIME_ONLY | quando `entry_scope=MIXED_OR_DYNAMIC` (decisão ADMIN auditada); caso contrário CONDITIONALLY_MANDATORY (INTRA/INTER) | decisão ADMIN + product_role + ST; **schema Firebird: coluna NULLABLE, sem DEFAULT, sem CHECK — o próprio SGV nunca exige valor** | comprovado (schema); decisão de escopo pendente por instalação |
|
|
| CST | NOT_APPLICABLE | CRT=1 (Simples) sempre usa CSOSN, nunca CST | regra CRT/emissão | comprovado |
|
|
| CST_ENTRADA | NOT_APPLICABLE | mesma razão que CST | regra CRT/emissão | comprovado |
|
|
| CSOSN | CONDITIONALLY_MANDATORY | CRT=1; precisa de `icms_treatment` quando em branco | dataset CSOSN + contexto ADMIN | comprovado |
|
|
| ALIQUOTA (ICMS) | NOT_APPLICABLE | CSOSN Simples sem destaque de ICMS (102/103/300/400/500) | regra CSOSN | comprovado |
|
|
| COD_ORIGEM_MERCADORIA | CONDITIONALLY_MANDATORY | nenhuma fonte automática decide — sempre depende de contexto GROUP/PRODUCT | nenhuma (evidência zero no ERP) | pendente de contador/operador (sem fonte determinística) |
|
|
| CST_IPI | NOT_APPLICABLE | empresa não é contribuinte de IPI (C000004.CONTRIBUINTE_IPI=N) | heartbeat do Agent | comprovado |
|
|
| COD_ENTRADA_PIS / COD_SAIDA_PIS / ALIQ_PIS / COD_ENTRADA_COFINS / COD_SAIDA_COFINS / ALIQ_COFINS | CONDITIONALLY_MANDATORY (bloqueante) até decisão ADMIN; podem virar NOT_APPLICABLE ou OPERATION_TIME_ONLY só por decisão ADMIN auditada (`pis_cofins_profile`) | ver Bloco 2 — emissão nunca lê o cadastro em nenhum dos 5 bancos auditados | evidência de emissão (NFCE_ITENS) + decisão ADMIN | evidência forte (não-uso na emissão); classificação final pendente de confirmação contábil |
|
|
| INCIDENCIA_PISCOFINS | OPTIONAL | valor declarado válido não é contradito | regra de incidência | comprovado |
|
|
| PISCOFINS | OPTIONAL | idem | regra de incidência | comprovado |
|
|
| IAT | OPTIONAL | arredondamento, evidência fraca | regra + contexto `rounding` | comprovado (não bloqueia) |
|
|
| IPPT | CONDITIONALLY_MANDATORY | derivado de product_role/receita/compra quando role conhecido | evidência de produção/compra | comprovado |
|
|
|
|
## Regra de bloqueio do "COMPLETE"
|
|
|
|
`central/app/enrichment/status.py::coverage_status` já implementa exatamente a regra pedida:
|
|
`SAFE_BLOCKED` só quando existe campo `NEEDS_REVIEW` ou `INSUFFICIENT_EVIDENCE`; `NOT_APPLICABLE`,
|
|
`ALREADY_SET` e `AUTO_FILL_SAFE` nunca bloqueiam. Os dois ajustes de engine desta missão
|
|
(CFOP_ENTRADA com `entry_scope=MIXED_OR_DYNAMIC` → `NA`; PIS/COFINS com decisão ADMIN
|
|
`NOT_APPLICABLE`/`OPERATION_TIME` → `NA`) plugam diretamente nessa regra já existente — nenhuma
|
|
mudança adicional foi necessária em `coverage_status`. Sem decisão ADMIN, os dois grupos continuam
|
|
bloqueando exatamente como antes (testes de regressão em `central/tests/test_field_contract.py`).
|
|
|
|
## Pendente de contador (não implementado, não bloqueia nada além do que já bloqueava)
|
|
|
|
- COD_ORIGEM_MERCADORIA: nenhuma fonte automática existe; permanece MANUAL por produto/grupo.
|
|
- Classificação final de PIS/COFINS (NOT_APPLICABLE vs OPERATION_TIME vs perfil fixo): ver
|
|
`docs/dossie_contador.md`.
|