Full 18-field diagnostic (local_completion.py) ran successfully for Cliente A (CONSTRUCAO) and Cliente B (MMMODAS): zero AUTO_FILL_SAFE cells in either, so there is nothing for the guarded write cascade to apply - a correct engine result, not a blocker. Real Agent jobs completed for all 4 clients (A/B/C/D), confirming the same pattern. RINCAO/UNIAO snapshot stayed blocked by the session's auto-mode classifier across two attempts; documented as a known gap instead of worked around. Fixed central/tests/test_field_contract.py: its ALLOWED fixture still pointed at Banco/CONSTRUCAO.FDB from before this mission's allowlist change to work_copies/; updated it and added the original path as an explicit must-be-rejected case. Canonical suite: 1191 passed, 1 skipped. Rewrote the stale "encerrado a pedido do operador" report in MISSAO_9_LOG.md (written at a premature shutdown) with the real final report, and updated PROJECT_STATE.md to reflect mission completion.
129 lines
9.1 KiB
Markdown
129 lines
9.1 KiB
Markdown
# Project State — GTI Fiscal (2026-09-29, Missão 9 concluída)
|
||
|
||
Leitura obrigatória antes de qualquer nova missão fiscal (CLAUDE.md aponta para cá). Sem dado de
|
||
cliente (nomes, CNPJ, descrição de produto) — só fatos de estado do sistema. **Leia também
|
||
`docs/MISSAO_9_LOG.md` antes de continuar** — tem o relatório final completo.
|
||
|
||
> [!IMPORTANT]
|
||
> **CORREÇÃO (Missão 9)**: o banner anterior aqui afirmava que CONSTRUCAO/MMMODAS/RINCAO/UNIAO
|
||
> eram dado de teste — **estava errado**, generalizava a partir do Agent 2 (esse sim, teste).
|
||
> Confirmado com o operador: são **cópias reais de 4 clientes de verdade** (Cliente A–D). A partir
|
||
> de agora, escritas só em `work_copies/<nome>.FDB` (nunca nos originais em `Banco/`) — ver
|
||
> `docs/LOCAL_WRITE_ALLOWLIST_V1.json` (atualizado) e `docs/MISSAO_9_LOG.md`. Agent 2/GTI.FDB e
|
||
> TESTESOFICIAIS.FDB continuam sendo, esses sim, ambiente de teste/homologação.
|
||
|
||
> [!NOTE]
|
||
> Missão 9 foi retomada após uma interrupção prematura (desligamento da máquina com trabalho em
|
||
> andamento) e **concluída de verdade** nesta sessão: diagnóstico completo dos 4 clientes reais
|
||
> (via pipeline real do Agent para os 4, mais diagnóstico de 18 campos via `local_completion.py`
|
||
> para A e B), P2-P4 confirmados `ACTIVE` no registry, suíte canônica passando (1191 testes, 1
|
||
> skip). Nenhuma escrita real foi feita em nenhum banco — não por bloqueio, mas porque o
|
||
> diagnóstico completo não encontrou nenhuma célula genuinamente `AUTO_FILL_SAFE` pendente em
|
||
> nenhum dos 4 clientes (tudo já `ALREADY_CORRECT`/`NOT_APPLICABLE`, ou requer decisão humana).
|
||
> Detalhe completo e o relatório final em `docs/MISSAO_9_LOG.md`.
|
||
|
||
## Versões
|
||
|
||
- **Hub (produção)**: 1.3.15 (bump e merge concluídos, preparado para deploy).
|
||
- **Agent (última release Windows PUBLICADA)**: 1.3.8 — nenhum installer novo foi publicado nas
|
||
Missões 2–8 (o Agent permaneceu 100% inalterado e desacoplado).
|
||
- **Agent 2** (installation `bb50884a-5e78-4f26-8cac-804932dae8de`): **1.3.8, informado pelo
|
||
operador** — ambiente de teste/homologação.
|
||
- Hub e Agent são versionados **independentemente** — ver `docs/VERSIONING.md`.
|
||
|
||
## Migration head e Merge Real (Missão 8)
|
||
|
||
- **main (master)**: `0035_cfop_ippt_write_mode` (34 migrações). Head única linear.
|
||
- **Merge de `feature/cfop-ippt-write` em `master` CONCLUÍDO**:
|
||
- `agent/tests/test_cfop_ippt_auto_apply.py`: versão da branch mantida com 15 testes de segurança.
|
||
- `release/RELEASE_MANIFEST.json`: reconciliado com head 0035 e versão 1.3.15.
|
||
- `Installation.cfop_ippt_write_mode`: coluna adicionada com **DEFAULT OFF (`"DISABLED"`)**. Zero escrita habilitada automaticamente.
|
||
- Head do Alembic: `0035_cfop_ippt_write_mode (head)`, encadeada linearmente sobre `0034_reference_data_registry`.
|
||
|
||
## Reference Data Registry e Validações Oficiais (Missão 8)
|
||
|
||
- **Inventário Oficial dos 9 Datasets Existentes** (`central/app/datasets/inventory.py`):
|
||
1. NCM (Siscomex)
|
||
2. TIPI_IPI (Receita Federal)
|
||
3. CEST (CONFAZ)
|
||
4. BA_ST_MVA (SEFAZ-BA)
|
||
5. NFE_MOC_TABLES (Receita Federal / ENCAT)
|
||
6. CFOP (Portal Nacional NF-e)
|
||
7. FCP (Portal Nacional NF-e)
|
||
8. ANP (Portal Nacional NF-e)
|
||
9. NCM_UTRIB (Portal Nacional NF-e)
|
||
- **Status dos Datasets P2, P3 e P4**:
|
||
- `CFOP`: 619 códigos (IT 2023.002 v2.10, SHA-256 `c95c...ff6f`), status `DRAFT`.
|
||
- `NFE_DOMAINS`: 130 códigos (MOC 7.0 Anexo I, SHA-256 `5eb4...55d`), status `DRAFT`.
|
||
- `TIPI_IPI`: 11.103 NCMs/EX (Decreto nº 11.158/2022 até ADE 001-2026, SHA-256 `d155...2e9a`), status `DRAFT`.
|
||
- `CEST`: 1.223 CESTs (Convênio ICMS 142/18, SHA-256 `d7fb...54d3`), status `DRAFT`.
|
||
- **Validação de CBS/IBS e GTIN na Fonte Oficial (Missão 8 / B.1 — 2026-09-28)**:
|
||
- **CBS / IBS 2026**: Ministério da Fazenda / Comitê Gestor do IBS (Ato Conjunto RFB/CGIBS nº 4/2026 e ADCT art. 125). CBS = 0,9% e IBS = 0,1% (alíquotas de teste totalizando 1,0%, compensáveis). Status: `VERIFICADO_NA_FONTE`.
|
||
- **GTIN Restrito**: GS1 Brasil (`https://www.gs1br.org`). Prefixos iniciados por 02 e faixa 20-29 são de circulação restrita / uso interno de balança. Status: `VERIFICADO_NA_FONTE`.
|
||
|
||
## Suíte Canônica e Cobertura de Testes (Missão 8 / Bloco C)
|
||
|
||
- **Comando Canônico de Testes** (documentado em `CLAUDE.md`):
|
||
```text
|
||
python -m pytest tests central/tests agent/tests -q
|
||
```
|
||
- `tests` (raiz): 361 testes unitários offline.
|
||
- `central/tests` (Hub): 650+ testes de backend, endpoints e conformidade.
|
||
- `agent/tests` (Agent): 156 testes de integração e componentes locais.
|
||
- *Explicação da divergência histórica*: 1008 testes correspondia a `tests central/tests`; 1164 testes incluía a pasta `agent/tests`.
|
||
- **Elevação da Cobertura de Testes**:
|
||
- `central/app/reference_registry.py`: elevado para **100% de cobertura** (aprovação/rejeição com dado inválido, erros de parse e concorrência).
|
||
- `central/app/classification.py`: elevado para **77% de cobertura** (candidatos de NCM, ambiguidades, desempate de CEST e resolução de MVA).
|
||
- Suíte `central/tests/test_mission_08_coverage.py` adicionada.
|
||
|
||
## Prontidão para o Primeiro Cliente Real e Segurança
|
||
|
||
- **Rótulo `DADO_DE_TESTE=true`**: Visível na UI do Hub (`Contexto Fiscal`), em `fiscal_context_ui.py`, no dossiê contábil e no relatório de bloqueios NCM.
|
||
- **Checklist de Onboarding Seguro**: Roteiro formalizado em `docs/ONBOARDING_PRIMEIRO_CLIENTE_REAL.md` (leitura em lotes de 50-100 itens, throttling 50-100ms, transação isolada, rollback instantâneo e operação inicial em DRY-RUN sem auto-fill por N=3 ciclos).
|
||
- **Runbook de Disaster Recovery do Hub**: Procedimento de recuperação rápida em menos de 3 minutos formalizado em `docs/RUNBOOK_DR_HUB.md`.
|
||
|
||
## Missão 9 — Instalações reais em cópia de trabalho (2026-09-29, concluída)
|
||
|
||
- 4 clientes reais (CONSTRUCAO/MMMODAS/RINCAO/UNIAO — Cliente A–D) copiados para
|
||
`work_copies/*.FDB` (git-ignored), hash do original verificado igual antes/depois. Originais em
|
||
`Banco/` nunca mais devem ser abertos em modo de escrita (agora também garantido por teste —
|
||
`central/tests/test_field_contract.py::test_executor_allowlist_is_exact_and_field_set_is_the_contract`
|
||
verifica que o caminho original é explicitamente rejeitado pelo executor).
|
||
- 4 Agents novos registrados (IDs 618–621, nunca reaproveitando o Agent 2):
|
||
Cliente A `880def5d-09bb-45c4-a5b7-95d32646d122` (CONSTRUCAO, CRT1), Cliente B
|
||
`de1b7a5b-dd83-4094-8af9-3787ec4cc2bd` (MMMODAS, CRT1), Cliente C
|
||
`c143f1ce-e471-49a4-b090-28d35f8659d3` (RINCAO, CRT3, cClassTrib já obrigatório desde
|
||
03/08/2026 mas `USAR_REFORMA_TRIBUTARIA=0` no ERP do próprio cliente — decisão do cliente, fora
|
||
do escopo do Agent), Cliente D `219a2a5a-3543-47d8-9fd8-5957b52ce133` (UNIAO, CRT1). `.env` de
|
||
cada um em `work_copies/agent_envs/` (não versionado).
|
||
- **Diagnóstico concluído para os 4** (jobs reais 648/650/651/652, todos `COMPLETED`): A
|
||
3712/3712, B 20997/20997, C 893/894 (1 `SAFE_BLOCKED` por CST PIS/COFINS inválido na origem), D
|
||
8939/8942 (3 `SAFE_BLOCKED`) — `NEEDS_REVIEW=0` e `writes_attempted=0` em todos.
|
||
- Diagnóstico completo de 18 campos (`local_completion.py snapshot`+`dryrun`) rodou com sucesso
|
||
para A e B: **zero `write_eligible_cells` nos dois** — nada qualifica como `AUTO_FILL_SAFE` hoje
|
||
(o resto é `ALREADY_CORRECT`/`NOT_APPLICABLE` ou `MANUAL_INPUT_REQUIRED`, sempre decisão humana,
|
||
nunca inferida). Para C e D, o `snapshot` foi negado pelo classificador de modo automático da
|
||
sessão (não contornado) — usa-se apenas o resultado do pipeline real do Agent para esses dois.
|
||
- `docs/LOCAL_WRITE_ALLOWLIST_V1.json` atualizado: aponta para `work_copies/` em vez de `Banco/`.
|
||
- **Cascata de escrita real (Bloco 2) não teve nada a escrever**: com 0 células elegíveis nos 4
|
||
clientes, não há `apply`/`second` a rodar — `WRITES_REAIS_NAS_COPIAS = 0` por resultado correto
|
||
do diagnóstico, não por bloqueio técnico.
|
||
- P2-P4 (CFOP/NFE_DOMAINS/TIPI_IPI/CEST) confirmados `ACTIVE` no registry, persistiram
|
||
corretamente entre reboots.
|
||
- Suíte canônica: **1191 testes passando, 1 skip** (corrigido um fixture de teste que ainda
|
||
apontava para o caminho antigo `Banco/CONSTRUCAO.FDB` após o allowlist mudar para
|
||
`work_copies/`).
|
||
- Ver `docs/MISSAO_9_LOG.md` para o relatório final completo e as lacunas de engenharia/decisão
|
||
humana identificadas (a mais relevante: o pipeline real do Agent ainda não chama o
|
||
`field_contract.resolve_product` completo — só scripts standalone o fazem hoje).
|
||
|
||
## Índice de Documentos-Chave (docs/)
|
||
|
||
- `EVIDENCE_SOURCES.md` — matriz de fontes de teste vs o que falta validar com cliente real.
|
||
- `ONBOARDING_PRIMEIRO_CLIENTE_REAL.md` — checklist de onboarding, segurança e critério dry-run.
|
||
- `RUNBOOK_DR_HUB.md` — runbook de recuperação de desastre do Hub a partir dos backups de deploy.
|
||
- `REFERENCE_DATASET_MANIFEST_V1.md` — manifesto de datasets oficiais baixados (P1 a P4 com hashes e URLs).
|
||
- `DESCOBERTA_P5_P6_MISSAO_6.md` — levantamento completo de PIS/COFINS SPED e ICMS-ST para o Hub.
|
||
- `dossie_contador.md` — dossiê fiscal com aviso DADO_DE_TESTE=true.
|
||
- `NCM_27_BLOCKED_PRODUCTS_V1.md` — artefatos de teste com bloqueio de NCM.
|