Files
GTI_GERENCIADOR_FISCAL/central/static/docs/dossie_contador.md
T
gtiandClaude Sonnet 5 3e3858054f feat: CFOP/IPPT write-capability core (inert, not wired, not activated)
Missao 3 / Bloco C.1-C.2: new agent/src/gti_fiscal_agent/cfop_ippt_auto_apply.py
mirrors the existing rtc_auto_apply.py safety model for a new, narrower
capability (CFOP_IPPT_WRITE_V1): compare-before-write, stale-write guard
("human override sempre vence" - a value changed since the candidate was
selected is never overwritten), one transaction per cell, readback
verification, and rollback that only restores a value still equal to what
was written. Candidates come exclusively from field_contract.resolve_product's
own AUTO_FILL_SAFE classification for CFOP/IPPT - no new fiscal rule.
14 new tests (agent/tests/test_cfop_ippt_auto_apply.py) prove: flag OFF means
the caller never reaches a write; only CHANGE+write_eligible CFOP/IPPT cells
become candidates; a human edit between decision and write blocks the write;
a second run over an already-applied cell writes zero; a technical failure on
one cell never stops the batch; rollback refuses when the value changed again.

Deliberately NOT wired into agent/scripts/run_agent_service.py::execute_job,
and the Hub-side authorization/audit plumbing (Installation.cfop_ippt_write_mode,
audit table, job-delivered authorization - the same pattern as
central/app/rtc_audit.py) does not exist yet. No currently-published Agent
behavior (1.3.8) changes with this commit - nothing imports this new module.
See docs/CFOP_IPPT_WRITE_CAPABILITY_V1.md for the acceptance roteiro (test
products only, never real ones) and what remains before this can ever be
activated for a real installation - deliberately left for review before any
further step, per this mission's explicit instruction not to publish it active.

Also: dossie_contador.md (internal + anonymized) updated with the Bloco B
finding that the ~9.5% CST=01 anomaly is confined to a single calendar month
(not the whole year), with no fiscal-dimension (NCM/CFOP/CSOSN/ICMS group)
explaining which items got it - consistent with a one-off technical event,
not a deliberate rule.

REAL_PRODUCT_FISCAL_WRITES=0 (no write path exists in this commit).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:12:39 -03:00

5.1 KiB
Raw Blame History

Dossiê para o contador (2026-09-28)

Este documento não afirma nenhuma regra fiscal. Cada pergunta mostra a evidência real medida (somente leitura, sem gravação em nenhum banco) e qual clique na tela "Contexto Fiscal" do painel a resposta libera. Identificadores de cliente foram substituídos por rótulos genéricos (Cliente A–E); nenhum nome de produto, CNPJ ou razão social aparece aqui.

(a) Em CRT=1, o PIS/COFINS por item segue o cadastro do produto ou a operação/regime?

Evidência: em 5 instalações auditadas (Cliente A, CRT 1; Clientes B/C/E, CRT 1; Cliente D, CRT 3), o cadastro do produto nunca tem os campos de PIS/COFINS usados pela emissão: mesmo quando a nota fiscal emitida traz um CST de PIS/COFINS preenchido, o cadastro está em branco para o mesmo produto (23 casos confirmados no Cliente A). Nos Clientes B, C, D e E, a emissão nunca preenche o CST de PIS/COFINS (0% dos itens, em todos os anos de histórico disponíveis). Isso indica que a emissão não lê o cadastro — mas não decide se o valor correto é "não aplicável", "por operação" ou um perfil fixo por empresa. Libera: card "Perfil de PIS/COFINS" → escolher NOT_APPLICABLE, OPERATION_TIME ou um perfil JSON de 6 campos.

(b) O CST 01 emitido em ~9,5% dos itens é intencional?

Evidência: dos itens de NFC-e emitidos pelo Cliente A, 9,5% trazem CST de PIS/COFINS = "01" — e são exclusivamente de um único mês (dezembro de um ano específico), não do ano inteiro: 90,9% dos itens daquele mês têm o campo preenchido, todos os outros meses (incluindo o resto do mesmo ano) têm 0%. Testamos se o NCM, o grupo do produto, o CFOP ou o código de ICMS do item explicam quais itens recebem o valor: não há uma fórmula fiscal por trás — é um conjunto pequeno e homogêneo de vendas reais concentrado nesse único mês, que já havia sido sinalizado em outra auditoria interna como um período com problema de integridade de dados. A leitura mais provável é que não é uma política fiscal deliberada — é um efeito técnico de um evento pontual (ex.: uma migração de dados ou uma versão diferente do software de emissão usada só naquele mês). Não decidimos isso por evidência insuficiente para confirmar a causa exata; a pergunta é se o contador reconhece esse episódio.

(c) CFOP_ENTRADA no cadastro do produto é necessário ou é sempre definido na nota de compra?

Evidência:

  • Schema do banco: a coluna é opcional no próprio banco de dados (sem obrigatoriedade, sem valor padrão, sem regra de validação) — o sistema nunca exige um valor aqui a nível de banco.
  • Uso real é muito diferente entre clientes: em dois clientes o campo está praticamente sempre em branco; em outros três está preenchido em quase 100% dos produtos, com valores plausíveis — ou seja, alguns clientes efetivamente mantêm esse cadastro, outros não.
  • Isso mostra que não existe uma regra universal: depende de como cada loja opera. Por isso o motor já trata isso como uma decisão por instalação (entry_scope), nunca uma regra fixa do sistema.
  • Não verificado ainda (requer acesso à tela de entrada de nota do sistema, que não fizemos): se a tela de lançamento de nota de compra lê o CFOP_ENTRADA do cadastro como sugestão inicial, ou sempre pede a digitação manual. Roteiro de 5 passos para teste manual:
    1. Anote o CFOP_ENTRADA atual de um produto de teste (ou deixe em branco).
    2. Abra o cadastro do produto e grave um CFOP_ENTRADA diferente (ex.: 1102).
    3. Lance uma nota de entrada (compra) desse mesmo produto.
    4. Veja se o CFOP do item da nota já vem preenchido com o valor do cadastro, ou em branco.
    5. Repita com CFOP_ENTRADA em branco no cadastro e confirme se a nota exige digitação manual.
  • Libera: card "CFOP de entrada padrão" → INTRA, INTER ou MIXED_OR_DYNAMIC (este último não bloqueia mais a completude do produto).

(d) O que mais o levantamento deixou como decisão pendente com evidência insuficiente?

  • Origem da mercadoria (nacional/importado): nenhuma fonte automática existe para decidir isso — a grande maioria dos produtos não tem nenhuma evidência. Só pode ser respondido produto a produto ou por grupo, nunca por uma regra geral.
  • Tratamento de ICMS para um pequeno grupo de produtos cujo código fiscal está em branco — parte é cadastro de teste/incompleto, mas alguns produtos reais também aparecem.
  • Um pequeno número de produtos com o código fiscal (CSOSN) em branco hoje. Nenhuma simulação escreve nada; um valor padrão só se aplica de fato após a confirmação do "Tratamento padrão de ICMS" no card correspondente, e mesmo assim o motor consulta o tratamento antes de propor o código (nunca aplica um padrão cegamente).

Como usar este dossiê

Cada resposta é dada uma única vez, no painel ("Contexto Fiscal", aba do Agent), nunca escrevendo nada no ERP diretamente — a decisão fica registrada e auditada, e só depois disso o motor passa a considerar o campo resolvido (ou explicitamente não-bloqueante). Nenhuma decisão aqui é assumida por padrão.