Missao 2 (fechamento de lacunas fiscais, read-only + UI/engine gated): - field_contract: pis_cofins_profile now also accepts the literal sentinels NOT_APPLICABLE/OPERATION_TIME, resolving to NA only from an audited FiscalContextEntry - never inferred from emission statistics. CFOP_ENTRADA under an already-decided entry_scope=MIXED_OR_DYNAMIC now resolves to NA instead of MANUAL, so it stops blocking product completeness and stops re-asking an already-answered question. Regression tests prove: no ADMIN decision => unchanged old behavior; decision present => gated bucket, no write. - context_keys: validate_entry accepts the two sentinels for pis_cofins_profile. - Contexto Fiscal UI: PIS/COFINS and CFOP_ENTRADA cards show the Bloco 2 cross-database evidence (5 installations, CRT 1 and 3: emission never reads the PIS/COFINS cadastral fields anywhere) and a link to an ADMIN-facing, anonymized dossie-for-the-accountant; entry_scope is now a dropdown. - release/tests: decoupled the Hub's GTI_FISCAL_VERSION from the Agent's own version (test_versions_are_coherent_across_hub_and_packages vs the new test_agent_version_is_internally_coherent) - a Hub-only release must not require touching, rebuilding or republishing the Agent. - New read-only evidence: docs/runs/GTI_dryrun_universe_summary.json (527 products, Agent 2's real database), docs/runs/BLOCO2_PIS_COFINS_CROSS_DB_V1.json (5 installations), docs/fiscal_completeness_matrix.md, docs/dossie_contador.md (internal, real names) + central/static/docs/dossie_contador.md (public, anonymized - no CNPJ/razao social/product names), docs/AGENT2_UPGRADE_RUNBOOK_V1.md. - CLAUDE.md: recorded the permanent fiscal-mission rules (no AI/scraping, no Firebird schema changes, deploy only via deploy_hub.ps1, never reenroll, no remote access to client Agent hosts, no client data in unauthenticated static routes). No schema/migration change. Zero Firebird writes (new scripts never open a write connection). Hub only - Agent code untouched. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.3 KiB
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.