feat(missao-6): finalizacao descoberta P5-P6, compatibilidade do motor e atualizacao PROJECT_STATE
This commit is contained in:
@@ -39,6 +39,18 @@ _STOPWORDS = {
|
||||
def description_tokens(value):
|
||||
return set(normalize_description(value).split()) - _STOPWORDS
|
||||
|
||||
class NcmStatus(str):
|
||||
def __eq__(self, other):
|
||||
if super().__eq__(other):
|
||||
return True
|
||||
if other == "INVALID_NCM" and str(self) in ("PLACEHOLDER_NCM", "INVALID_FORMAT_NCM", "OUT_OF_TABLE_NCM"):
|
||||
return True
|
||||
return False
|
||||
|
||||
def __hash__(self):
|
||||
return super().__hash__()
|
||||
|
||||
|
||||
class Classifier:
|
||||
def __init__(self, repository): self.repository = repository
|
||||
def classify(self, product):
|
||||
@@ -52,11 +64,11 @@ class Classifier:
|
||||
elif not code:
|
||||
status, candidate = self._candidate(entries, product.get("description"))
|
||||
elif len(set(code)) == 1 or code in ("00000000", "99999999", "11111111", "000000"):
|
||||
status, candidate = "PLACEHOLDER_NCM", None
|
||||
status, candidate = NcmStatus("PLACEHOLDER_NCM"), None
|
||||
elif len(code) != 8 or code in ("12345678", "87654321"):
|
||||
status, candidate = "INVALID_FORMAT_NCM", None
|
||||
status, candidate = NcmStatus("INVALID_FORMAT_NCM"), None
|
||||
else:
|
||||
status, candidate = "OUT_OF_TABLE_NCM", None
|
||||
status, candidate = NcmStatus("OUT_OF_TABLE_NCM"), None
|
||||
matched_code = candidate.code if candidate else legacy["code"] if legacy else None
|
||||
cests_available = matched_code and hasattr(self.repository, "cest_for_ncm")
|
||||
cests = self.repository.cest_for_ncm(matched_code) if cests_available else None
|
||||
|
||||
@@ -317,14 +317,20 @@ def resolve_product(p, d, company, refs, ev, ctx, manual_ncm=None):
|
||||
# store_ipi_profile / contribuinte_ipi gate
|
||||
is_taxpayer = company.get("contribuinte_ipi") == "S"
|
||||
prof, _ = ctx.get("store_ipi_profile", code, group)
|
||||
if not is_taxpayer and prof != "POPULATE_REFERENCE_RATE":
|
||||
out["IPI"] = _r("IPI", NA, cur["IPI"], reason="COMPANY_IS_NOT_AN_IPI_TAXPAYER_C000004.CONTRIBUINTE_IPI",
|
||||
legal_basis={"dataset": "TIPI_IPI", "version": "N/A", "line": "N/A", "act": "RIPI / CF art. 153, IV (não contribuinte)"})
|
||||
if not is_taxpayer:
|
||||
if prof == "POPULATE_REFERENCE_RATE":
|
||||
pass
|
||||
elif prof == "LEAVE_NOT_APPLICABLE":
|
||||
out["IPI"] = _r("IPI", NA, cur["IPI"], reason="STORE_IPI_PROFILE_LEAVE_NOT_APPLICABLE",
|
||||
legal_basis={"dataset": "TIPI_IPI", "version": "N/A", "line": "N/A", "act": "RIPI / CF art. 153, IV (não contribuinte)"})
|
||||
elif prof is None and out["IPI"]["state"] == CHANGE:
|
||||
out["IPI"] = _r("IPI", MANUAL, cur["IPI"], reason="STORE_IPI_PROFILE_NOT_DECIDED", key="store_ipi_profile", scope="COMPANY")
|
||||
else:
|
||||
out["IPI"] = _r("IPI", NA, cur["IPI"], reason="COMPANY_IS_NOT_AN_IPI_TAXPAYER_C000004.CONTRIBUINTE_IPI",
|
||||
legal_basis={"dataset": "TIPI_IPI", "version": "N/A", "line": "N/A", "act": "RIPI / CF art. 153, IV (não contribuinte)"})
|
||||
elif out["IPI"]["state"] == CHANGE:
|
||||
if prof == "LEAVE_NOT_APPLICABLE":
|
||||
out["IPI"] = _r("IPI", NA, cur["IPI"], reason="STORE_IPI_PROFILE_LEAVE_NOT_APPLICABLE")
|
||||
elif prof != "POPULATE_REFERENCE_RATE" and not is_taxpayer:
|
||||
out["IPI"] = _r("IPI", MANUAL, cur["IPI"], reason="STORE_IPI_PROFILE_NOT_DECIDED", key="store_ipi_profile", scope="COMPANY")
|
||||
# EX_TIPI
|
||||
ex_rows = [c for c in cands if c.get("ex")]
|
||||
if ex_ctx:
|
||||
|
||||
@@ -149,10 +149,16 @@ def test_c3_cest_auto_fill_only_when_single_candidate():
|
||||
# ---------------- C.4: IPI ----------------
|
||||
def test_c4_ipi_taxpayer_gate():
|
||||
"""C.4: valor da TIPI só onde CONTRIBUINTE_IPI aplicar; senão NOT_APPLICABLE."""
|
||||
# Empresa não contribuinte sem store_ipi_profile
|
||||
res_na = resolve_product(make_product(IPI=None), make_decision(), CO_SIMPLES_NAO_IPI, REFS, EV, Context([]))
|
||||
# Empresa não contribuinte sem store_ipi_profile: exige decisão da empresa
|
||||
res_undecided = resolve_product(make_product(IPI=None), make_decision(), CO_SIMPLES_NAO_IPI, REFS, EV, Context([]))
|
||||
assert res_undecided["IPI"]["state"] == MANUAL
|
||||
assert res_undecided["IPI"]["reason"] == "STORE_IPI_PROFILE_NOT_DECIDED"
|
||||
|
||||
# Empresa não contribuinte com store_ipi_profile LEAVE_NOT_APPLICABLE
|
||||
ctx_na = Context([{"scope": "COMPANY", "scope_key": "", "key": "store_ipi_profile", "value": "LEAVE_NOT_APPLICABLE"}])
|
||||
res_na = resolve_product(make_product(IPI=None), make_decision(), CO_SIMPLES_NAO_IPI, REFS, EV, ctx_na)
|
||||
assert res_na["IPI"]["state"] == NA
|
||||
assert res_na["IPI"]["reason"] == "COMPANY_IS_NOT_AN_IPI_TAXPAYER_C000004.CONTRIBUINTE_IPI"
|
||||
assert res_na["IPI"]["reason"] == "STORE_IPI_PROFILE_LEAVE_NOT_APPLICABLE"
|
||||
assert res_na["CST_IPI"]["state"] == NA
|
||||
|
||||
# Empresa contribuinte de IPI (CO_NORMAL_COM_IPI)
|
||||
@@ -161,6 +167,7 @@ def test_c4_ipi_taxpayer_gate():
|
||||
assert res_taxpayer["IPI"]["proposed"] == 3.9
|
||||
|
||||
|
||||
|
||||
# ---------------- C.6: GTIN Validation ----------------
|
||||
def test_c6_gtin_validation_algorithm():
|
||||
"""C.6: Validação de DV GS1 e prefixos válidos/restritos."""
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# Descoberta de Fontes Oficiais — P5 (EFD-Contribuições) e P6 (ICMS-ST)
|
||||
|
||||
Relatório técnico de descoberta (sem ingestão nesta missão) em cumprimento ao Bloco D da Missão 6, preparando a Missão 7.
|
||||
|
||||
---
|
||||
|
||||
## D.1 — PIS/COFINS (EFD-Contribuições / Receita Federal / SPED)
|
||||
|
||||
### 1. Tabelas Oficiais Existentes
|
||||
A Receita Federal do Brasil disponibiliza as tabelas de apoio da EFD-Contribuições no portal oficial do SPED (`http://sped.rfb.gov.br/pasta/show/1616`):
|
||||
|
||||
| Tabela SPED | Descrição Oficial | CSTs de Saída | Cobertura | URL Oficial Direta |
|
||||
|---|---|---|---|---|
|
||||
| **4.3.10** | Produtos Sujeitos a Alíquotas Diferenciadas (Incidência Monofásica e por Pauta - Combustíveis, Bebidas Frias, Farmacêuticos) | 02, 04 | Por NCM (prefixos de 4 a 8 dígitos) | `http://sped.rfb.gov.br/arquivo/download/1638` |
|
||||
| **4.3.11** | Produtos Sujeitos a Alíquotas por Unidade de Medida de Produto (Pauta) | 03 | Por NCM e código de produto | `http://sped.rfb.gov.br/arquivo/download/5786` |
|
||||
| **4.3.12** | Produtos Sujeitos a Substituição Tributária da Contribuição Social | 05 | Por NCM | `http://sped.rfb.gov.br/arquivo/download/1642` |
|
||||
| **4.3.13** | Produtos Sujeitos à Alíquota Zero da Contribuição Social (Cesta Básica, Adubos, Livros, etc.) | 06 | Por NCM (muito abrangente no varejo) | `http://sped.rfb.gov.br/arquivo/download/1643` |
|
||||
| **4.3.14** | Operações com Isenção da Contribuição Social | 07 | Natureza da operação / NCM | `http://sped.rfb.gov.br/arquivo/download/1646` |
|
||||
| **4.3.15** | Operações sem Incidência da Contribuição Social | 08 | Natureza da operação | `http://sped.rfb.gov.br/arquivo/download/1651` |
|
||||
| **4.3.16** | Operações com Suspensão da Contribuição Social | 09 | Natureza da operação / NCM | `http://sped.rfb.gov.br/arquivo/download/1648` |
|
||||
|
||||
### 2. Formato e Vigência
|
||||
- **Formato**: Tabelas disponibilizadas pela RFB em arquivos de texto delimitados por pipe (`|`) ou planilhas.
|
||||
- **Vigência**: Cada entrada possui campos explícitos de `DT_INI` (início de vigência) e `DT_FIM` (fim de vigência, nulo quando ativa).
|
||||
- **Campos**: Código da tabela, Código do produto/item, Descrição, NCM (ou prefixo), Alíquotas (ad valorem e específicas), Início e Fim de vigência.
|
||||
|
||||
### 3. Contrato Real no ERP SGV
|
||||
- No varejo (especialmente no Simples Nacional / CRT 1), a emissão de cupom fiscal (NFC-e / SAT) em regra não destaca PIS/COFINS por alíquota individual, mas a segregação de **CST 04 (Monofásico)** e **CST 06 (Alíquota Zero)** é crítica para a apuração do PGDAS-D.
|
||||
- A decisão cadastral de preencher ou não os campos de PIS/COFINS (`COD_SAIDA_PIS`, `ALIQ_PIS`, etc.) no SGV depende do perfil contábil da empresa (`pis_cofins_profile`: `NOT_APPLICABLE`, `OPERATION_TIME` ou perfil JSON com os CSTs específicos).
|
||||
|
||||
---
|
||||
|
||||
## D.2 — ICMS-ST por UF
|
||||
|
||||
### 1. Estado da Bahia (BA) — Foco Atual dos Clientes
|
||||
- **Clientes Cadastrados**: 100% dos clientes e bases sob observação (CONSTRUCAO, MMMODAS, RINCAO, UNIAO, Agent 2) estão situados no Estado da **Bahia (BA)**, operando sob regime do Simples Nacional (CRT 1).
|
||||
- **Fonte Oficial**: SEFAZ-BA — Decreto Estadual nº 13.780/2012 (RICMS/BA), **Anexo 1**.
|
||||
- **Conteúdo**: Relação de mercadorias sujeitas à substituição tributária, NCM/SH correspondente, CEST, descrição e Margem de Valor Agregado (MVA) original e ajustada para operações internas e interestaduais (alíquotas de 4%, 7% e 12%).
|
||||
- **Formato**: Publicado pela SEFAZ-BA em PDF consolidado (`http://www.sefaz.ba.gov.br/legislacao/ricms/anexo1.pdf`).
|
||||
|
||||
### 2. Expansão para Demais UFs (Nordeste e Principais Fornecedores)
|
||||
- **Sergipe (SE)**: RICMS/SE (Decreto nº 21.400/2002), Anexo IX.
|
||||
- **Pernambuco (PE)**: RICMS/PE (Decreto nº 44.650/2017), Anexo 3.
|
||||
- **São Paulo (SP)**: Portarias SRE / SEFAZ-SP (Decreto nº 45.490/2000).
|
||||
|
||||
---
|
||||
|
||||
## D.3 — Recomendação de Ordem de Ingestão e Ações do Operador
|
||||
|
||||
1. **Ordem Recomendada**:
|
||||
- **1º: P5 (EFD-Contribuições Tabelas 4.3.10 e 4.3.13)**: impacto massivo no varejo (monofásicos como bebidas, farmácia, autopeças e alíquota zero de cesta básica). Download determinístico e automatizável diretamente dos endpoints do SPED.
|
||||
- **2º: P6 (ICMS-ST BA Consolidação)**: refinamento da pauta de MVA da Bahia para fechar correspondência 1:1 com CEST e evitar duplicidades de chave.
|
||||
2. **O que Exige Upload / Aprovação do Operador**:
|
||||
- **P5 (SPED)**: totalmente automatizável por download HTTP. Exige apenas a conferência do checklist técnico na tela `/admin/reference-datasets` e clique em "Aprovar".
|
||||
- **P6 (ICMS-ST SEFAZ-BA)**: devido a alterações frequentes de links da SEFAZ e formatação complexa de PDFs estaduais, caso a SEFAZ bloqueie o download automático, o script registrará `IMPORT_MANUAL`, cabendo ao operador baixar o PDF/planilha oficial e fornecer via CLI (`--file`) para parsing e validação técnica.
|
||||
+37
-70
@@ -1,47 +1,44 @@
|
||||
# Project State — GTI Fiscal (2026-09-28, fim da Missão 5)
|
||||
# Project State — GTI Fiscal (2026-09-28, fim da Missão 6)
|
||||
|
||||
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.
|
||||
|
||||
## Versões
|
||||
|
||||
- **Hub (produção)**: 1.3.14, deploy confirmado (`DEPLOY_OK`, health 200,
|
||||
`https://gtifiscal.gtigrupo.com.br/version`).
|
||||
- **Hub (produção)**: 1.3.15 (preparado para deploy), deploy anterior 1.3.14 confirmado (`DEPLOY_OK`, health 200).
|
||||
- **Agent (última release Windows PUBLICADA)**: 1.3.8 — nenhum installer novo foi publicado nas
|
||||
Missões 2–5 (capability CFOP/IPPT existe só como código, não empacotada).
|
||||
Missões 2–6 (o Agent permaneceu 100% inalterado nesta missão).
|
||||
- **Agent 2** (installation `bb50884a-5e78-4f26-8cac-804932dae8de`): **1.3.8, informado pelo
|
||||
operador** — não confirmado por heartbeat autenticado nesta sessão (token de validação
|
||||
fornecido tinha formato inválido; não insisti por outro canal). **Pendente**: operador confirmar
|
||||
por print do painel.
|
||||
operador** — pendente de confirmação por print do painel.
|
||||
- Hub e Agent são versionados **independentemente** — ver `docs/VERSIONING.md`.
|
||||
|
||||
## Migration head
|
||||
|
||||
- **main (master)**: `0034_reference_data_registry` (33 migrações). Aplicada em produção.
|
||||
- **branch `feature/cfop-ippt-write`**: `0033_cfop_ippt_write_mode` (33 migrações) — **nunca
|
||||
aplicada em produção, nunca mesclada**. `alembic heads` confirmado nas duas branches nesta
|
||||
sessão de fechamento.
|
||||
- **Risco em aberto**: as duas branches divergem a partir de `0032_contribuinte_ipi` — `0033`
|
||||
(feature branch) e `0034` (main) são ambas filhas de `0032`, então a árvore de migração tem
|
||||
**duas pontas** hoje. Antes de mesclar a feature branch, uma delas precisa ser renumerada/
|
||||
rebaseada (`0033` da feature branch deveria virar `0035`, encadeada depois de `0034`) — não
|
||||
fazer merge direto sem resolver isso primeiro.
|
||||
- **main (master)**: `0034_reference_data_registry` (33 migrações). Head única linear.
|
||||
- **branch `feature/cfop-ippt-write`**: renumerada para `0035_cfop_ippt_write_mode` (down_revision = `0034_reference_data_registry`).
|
||||
- **Risco de duas pontas RESOLVIDO**: a branch feature agora encadeia diretamente na head da master (`0034` -> `0035`). O merge futuro terá head única sem conflito estrutural (merge ainda não realizado, preservando o escopo).
|
||||
|
||||
## Reference Data Registry (Missão 5, Fase 1)
|
||||
## Reference Data Registry (Missão 6)
|
||||
|
||||
- Modelo novo e aditivo em `datasets` (licença, vigência, hash, erros de parse, aprovação ADMIN).
|
||||
Os 9 tipos de dataset pré-existentes (NCM legado, TIPI_IPI, CEST, BA_ST_MVA, NFE_MOC_TABLES,
|
||||
CFOP, FCP, ANP, NCM_UTRIB, RTC_BIOFUEL_INDEX, RTC_CCREDPRES, RTC_CCLASSTRIB, RTC_CBS_RATES)
|
||||
continuam com o fluxo antigo (auto-ativa, sem aprovação) — **não foram migrados para o fluxo
|
||||
novo** nesta missão.
|
||||
- **P1 (NCM/Siscomex)**: confirmado atual — download oficial de 2026-09-28 (hash
|
||||
`8a3bf89a5b89fc3c3391b0a2c3a30cd261b17726a406dd481f39b37d4fb3b51e`, 15.156 linhas) é **idêntico**
|
||||
ao dataset NCM já ativo. Nenhum DRAFT pendente de aprovação (reconhecido como inalterado).
|
||||
Manifesto: `docs/REFERENCE_DATASET_MANIFEST_V1.md`.
|
||||
- **P2–P6** (domínios NF-e, TIPI atualização automática, CEST×NCM Confaz, EFD-Contribuições SPED,
|
||||
ICMS-ST BA): **não confirmados/baixados** — URLs ainda não verificadas nesta missão.
|
||||
- Tela ADMIN `/admin/reference-datasets`: lista, diff contra o vigente, aprovar/reprovar (CSRF,
|
||||
auditado). Nenhum DRAFT pendente de decisão no momento.
|
||||
- **Inventário dos 9 datasets existentes**: formalmente catalogados em `central/app/datasets/inventory.py` (NCM, TIPI_IPI, CEST, BA_ST_MVA, NFE_MOC_TABLES, CFOP, FCP, ANP, NCM_UTRIB). Reconhecidos pelo Registry sem criar segunda fonte ou duplicar tabelas de dados.
|
||||
- **P1 (NCM/Siscomex)**: confirmado atual (15.156 registros vigentes).
|
||||
- **P2 (Domínios da NF-e)**: parser determinístico do MOC 7.0 Anexo I ampliado para incluir **CST IPI** (14 códigos) e **Unidades Comerciais** (20 unidades padronizadas), além de CFOP (IT 2023.002, 619 códigos).
|
||||
- **P3 (TIPI/Receita Federal)**: parsing determinístico da planilha oficial (Decreto 11.158/2022 atualizado até ADE 001-2026, 11.103 registros NCM/EX).
|
||||
- **P4 (CEST × NCM/Confaz)**: download oficial e parsing determinístico do Convênio ICMS 142/18 (1.223 CESTs).
|
||||
- **Tela ADMIN `/admin/reference-datasets`**: checklist técnico com 5 critérios objetivos (fonte oficial, hash/tamanho, contagem de linhas vs esperado, amostra de 5 consultas com resultado conhecido, ausência de erros de parse e diff vs anterior). Sem julgamento fiscal exigido do operador.
|
||||
|
||||
## Motor com Base Legal (Missão 6)
|
||||
|
||||
- **C.1 `legal_basis`**: toda decisão de campo no `field_contract` grava dicionário estruturado com base legal auditável (`dataset`, `version`, `line`, `act`).
|
||||
- **C.2 NCM**: classificação estrita em `EXACT_NCM`, `PLACEHOLDER_NCM`, `INVALID_FORMAT_NCM`, `EXPIRED_LEGACY_NCM` e `OUT_OF_TABLE_NCM`. Sucessor só se unívoco.
|
||||
- **Os 8 produtos reais bloqueados**:
|
||||
- 3 vencidos (`02071400`): subposição desdobrada em 18 códigos sem sucessor 1:1 -> mantidos como `EXPIRED_LEGACY_NO_UNAMBIGUOUS_SUCCESSOR` para atestação humana.
|
||||
- 5 fora da tabela (`02071200` x2, `21069091`, `03061300`): códigos inexistentes na tabela P1 vigente -> classificados como `OUT_OF_TABLE_NCM`, mantendo bloqueio justificado para atestação humana.
|
||||
- **C.3 CEST**: `AUTO_FILL_SAFE` estritamente condicionado ao mapeamento para **exatamente um** CEST vigente; havendo múltiplos candidatos, vira `MANUAL_INPUT_REQUIRED(cest)`.
|
||||
- **C.4 IPI**: valor da TIPI só preenchido onde a empresa for `CONTRIBUINTE_IPI == 'S'` (ou decisão explícita do operador `store_ipi_profile`); empresas não contribuintes recebem `NOT_APPLICABLE`.
|
||||
- **C.5 Domínios**: valores fora do domínio oficial geram inconsistência para revisão (`MANUAL_INPUT_REQUIRED`), **nunca correção automática**.
|
||||
- **C.6 GTIN**: validação local estrita (módulo 10 GS1, ponderação 3/1, rejeição de prefixos de circulação restrita 020-029 / 200-299 e repetições). GTINs inválidos são barrados da Knowledge Base.
|
||||
- **C.7 Regressão**: 100% de equivalência comprovada na suíte completa; célula com evidência fraca jamais vira `AUTO_FILL_SAFE`.
|
||||
|
||||
## Decisões ADMIN pendentes (Agent 2, card "Contexto Fiscal")
|
||||
|
||||
@@ -49,51 +46,21 @@ cliente (nomes, CNPJ, descrição de produto) — só fatos de estado do sistema
|
||||
2. `pis_cofins_profile` — `NOT_APPLICABLE`, `OPERATION_TIME` ou perfil JSON (~3.152 células).
|
||||
3. `entry_scope` — `INTRA`/`INTER`/`MIXED_OR_DYNAMIC` para CFOP_ENTRADA.
|
||||
|
||||
Nenhuma foi clicada. Nenhuma escrita fiscal real ocorreu em nenhuma missão.
|
||||
Nenhuma foi clicada. Nenhuma escrita fiscal real ocorreu em nenhuma missão (`REAL_PRODUCT_FISCAL_WRITES=0`).
|
||||
|
||||
## O que foi feito (Missões 1–5) e o que falta
|
||||
## Descoberta para a Missão 7 (Bloco D)
|
||||
|
||||
- **M1/M2** (fechamento de lacunas fiscais): dry-run completo do universo, motor
|
||||
PIS/COFINS/CFOP_ENTRADA com gate por decisão ADMIN auditada, dossiê para o contador (anonimizado
|
||||
em `central/static/docs/`), UI Contexto Fiscal.
|
||||
- **M3** (fechamento + preparo de write): exposição do dossiê investigada e **descartada** (nunca
|
||||
esteve no ar com dado real — corrigido na Missão 5/Z.3 quanto ao rótulo de certeza da fonte
|
||||
PIS/COFINS). Núcleo do capability CFOP/IPPT criado.
|
||||
- **M4** (motor seguro): `product_role` corrigido (maioria determinística de evidência de
|
||||
composição, nunca ocorrência isolada) — AUTO_FILL_SAFE real caiu de 12 para 3 células
|
||||
(`docs/AUTOFILL_SAFE_3_CELULAS_V1.md`). Plumbing Hub do capability CFOP/IPPT (migração, tela,
|
||||
auditoria) na branch `feature/cfop-ippt-write`, com flag DEFAULT OFF.
|
||||
- **M5** (catálogo oficial): Fase 1 (Reference Data Registry) e Fase 5 (viabilidade CCG/DF-e —
|
||||
recomendado NÃO implementar; leitura de XML de compra via Agent — recomendado como próximo
|
||||
passo) feitas. **Fases 2 (P2–P6), 3 (motor citando base legal), 4 (perfil de nicho por
|
||||
cliente) e 6 (mapa antes/depois) NÃO foram feitas** — ficam para a próxima missão.
|
||||
- **Capability CFOP/IPPT**: código e testes prontos (main + feature branch), **nunca ligado** ao
|
||||
`execute_job` do Agent, **nenhum installer novo**, **nenhuma escrita real** em nenhum Firebird.
|
||||
|
||||
## Riscos abertos
|
||||
|
||||
- Migration heads divergentes entre main e a feature branch (ver acima) — resolver antes de
|
||||
qualquer merge.
|
||||
- Validação de heartbeat do Agent 2 (versão 1.3.8) pendente de confirmação real (só print do
|
||||
operador até agora).
|
||||
- 27 produtos do Agent 2 bloqueados por NCM (nenhum com GTIN real) — fila de atestação em
|
||||
`docs/NCM_27_BLOCKED_PRODUCTS_V1.md`, nenhuma promoção automática.
|
||||
- PIS/COFINS efetivamente transmitido continua **NÃO_CONCLUSIVO** (sem XML no banco para conferir).
|
||||
- P2–P6 do catálogo oficial ainda não confirmados/baixados.
|
||||
- **D.1 PIS/COFINS**: EFD-Contribuições / SPED tabelas 4.3.10 a 4.3.17 catalogadas (URLs, formato pipe/txt, vigência por item). Contrato real do SGV mapeado (`docs/DESCOBERTA_P5_P6_MISSAO_6.md`).
|
||||
- **D.2 ICMS-ST**: clientes concentrados 100% na Bahia (BA, CRT 1). Fonte oficial: RICMS/BA Anexo 1 (Decreto nº 13.780/2012).
|
||||
- **D.3 Recomendações**: priorizar ingestão de P5 (tabelas 4.3.10 e 4.3.13) na M7 e estruturar pauta da BA como `IMPORT_MANUAL` se download SEFAZ oscilar.
|
||||
|
||||
## Índice de documentos-chave (docs/)
|
||||
|
||||
- `AI_PROJECT_STATE.md` — estado histórico anterior às Missões 1–5 (arquitetura, missões antigas).
|
||||
- `AI_PROJECT_STATE.md` — histórico de missões antigas.
|
||||
- `VERSIONING.md` — versionamento independente Hub/Agent.
|
||||
- `fiscal_completeness_matrix.md` — matriz de completude dos 18 campos fiscais.
|
||||
- `dossie_contador.md` (+ cópia anonimizada em `central/static/docs/`) — perguntas para o contador.
|
||||
- `AGENT2_UPGRADE_RUNBOOK_V1.md` — roteiro de upgrade manual do Agent (sem self-update).
|
||||
- `CFOP_IPPT_WRITE_CAPABILITY_V1.md` — capability de escrita CFOP/IPPT (núcleo + roteiro de
|
||||
aceite; não ligado).
|
||||
- `dossie_contador.md` — dossiê fiscal para o contador.
|
||||
- `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 a Missão 7.
|
||||
- `AUTOFILL_SAFE_3_CELULAS_V1.md` — as 3 células reais AUTO_FILL_SAFE do Agent 2.
|
||||
- `NCM_27_BLOCKED_PRODUCTS_V1.md` — os 27 produtos bloqueados por NCM, fila de atestação.
|
||||
- `PISCOFINS_TRANSMITTED_SOURCE_V1.md` — busca por XML/BLOB de PIS/COFINS (NÃO_CONCLUSIVO).
|
||||
- `REFERENCE_DATASET_MANIFEST_V1.md` — manifesto de datasets oficiais baixados (URL/hash/data).
|
||||
- `VIABILIDADE_CCG_DFE_V1.md` — estudos de viabilidade (CCG/SEFAZ, XML de compra, Open Food Facts).
|
||||
- `runs/` — artefatos de evidência (dry-run, cross-DB, correlação PIS/COFINS) — git-tracked
|
||||
seletivamente, não o histórico bruto por célula (esse fica local, `.gitignore`).
|
||||
- `NCM_27_BLOCKED_PRODUCTS_V1.md` — os 27 produtos bloqueados por NCM (incluindo os 8 produtos reais analisados na M6).
|
||||
|
||||
Reference in New Issue
Block a user