Files
GTI_GERENCIADOR_FISCAL/fiscal/docs/pis_cofins_applicability.md
T
gti d21a9d1140 Add 'fiscal/' from commit '102ba84500dbd9655a0471288c3e278652593ca9'
git-subtree-dir: fiscal
git-subtree-mainline: d95165fc8f
git-subtree-split: 102ba84500
2026-09-29 14:43:23 -03:00

5.5 KiB
Raw Blame History

PIS/COFINS — aplicabilidade no cadastro de produto (SGV)

Implementação: central/app/unified_fiscal_coverage.py (pis_cofins_applicability, evaluate_pis_cofins, canonical_cst). Somente leitura; nenhum valor é preenchido nem normalizado no ERP. ACCESSED_AT das fontes: 2026-09-24 (hashes em docs/sources/SOURCES_MANIFEST_UNIFIED_FISCAL_V1.json e SOURCES_MANIFEST_V3.json).

1. O que o campo do produto é (e o que não é)

Campos: COD_ENTRADA_PIS, COD_SAIDA_PIS, ALIQ_PIS, COD_ENTRADA_COFINS, COD_SAIDA_COFINS, ALIQ_COFINS, PISCOFINS (N/S), INCIDENCIA_PISCOFINS (NENHUMA / MONOFÁSICA / SUBST.TRIBUTÁRIA).

  • São defaults de cadastro (tela Produtos > Config. Impostos > CST PIS/COFINS; binding por DFM em docs/SGV_PRODUCT_FISCAL_UI_MAP_V1.json). Os campos CST usam um seletor com a lista oficial "NN - descrição" (2 dígitos).
  • O SGV copia esses defaults para os itens de documentos de entrada (SQL de inserção do item no executável).
  • Não são a tributação efetiva do documento. DOCUMENT_PIS_COFINS_SOURCE: em NFCE_ITENS.CST_PIS_COFINS o CST não vem do cadastro do produto. TESTESOFICIAIS: os 3.336 itens com CST 01 são todos de dezembro/2022 (dias 01–31, notas contíguas), independentes do produto (PISCOFINS=N, campos vazios); antes e depois os itens saem em branco; o produto com CST 04 cadastrado emitiu em branco. Nas 4 bases de clientes (~570 mil itens) 100% saem em branco. O emissor de NFC-e não existe localmente (o executável SGV não contém CST_PIS_COFINS), então a regra exata do documento não é comprovável aqui.

2. Modelo de aplicabilidade — não circular

A aplicabilidade usa somente sinais independentes dos seis campos: regime da empresa (CRT), flag PISCOFINS, INCIDENCIA_PISCOFINS e as regras oficiais abaixo. Campo vazio é estado de dado, nunca prova de não aplicabilidade: o veredito é idêntico com os campos vazios ou preenchidos (teste test_applicability_never_depends_on_whether_the_six_fields_are_empty).

Estado Condição Efeito
REQUIRED flag S, ou incidência MONOFÁSICA / SUBST.TRIBUTÁRIA (declaração própria do produto) CST de saída válido obrigatório (vazio ⇒ *_CST_MISSING); alíquota conforme o CST
NOT_APPLICABLE CRT 1/2/4 (Simples) sem tratamento especial declarado não entra na completude; valor digitado vira só warning
OPTIONAL regime tributado (CRT 3 ou outro) e declaração explícita "sem tratamento especial" (flag N + incidência NENHUMA) nada obrigatório; o que existir tem de ser válido
NEEDS_REVIEW incidência fora do vocabulário do SGV, ou regime tributado com flag/incidência em branco (declaração ilegível) único caso não decidível → "Não classificado"

Por quê (fontes): Simples — LC 123/2006 art. 13, IV e V (Cofins e PIS no DAS) e art. 18, §4º-A, I (segregação da receita monofásica): o produto sem tratamento especial não tem PIS/COFINS de documento a calcular. Regime normal — Lei 9.718/1998 arts. 2º–3º (cumulativo), Lei 10.637/2002 art. 1º (PIS) e Lei 10.833/2003 art. 1º (Cofins) (não cumulativo): o tributo incide, mas o perfil (cumulativo/não cumulativo) é fato da empresa; o default do produto é opcional porque o padrão vem da empresa. Regimes especiais por NCM (SPED 4.3.10–4.3.15, Lei 10.147/2000) servem para coerência de CST e para o motor de correção — não tornam obrigatório um produto que não declara nada, porque o SGV não usa o campo na emissão e a extração das tabelas por NCM é parcial. Documento — NT 2025.002-RTC v1.51, Grupos Q/S: o grupo é obrigatório no item da NF-e (rejeições 745/748), o que vale para o documento e não para o cadastro.

3. CST: normalização canônica (somente leitura)

canonical_cst: aceita exatamente 2 dígitos oficiais (SPED 4.3.3/4.3.4: 01–09, 49, 50–56, 60–67, 70–75, 98, 99) ou um dígito cujo preenchimento com zero à esquerda seja um código oficial (4 → 04). Nada mais é normalizado (049, 000, 060, 2x, 0 continuam inválidos).

  • VALID_AFTER_NORMALIZATION: semanticamente válido para a cobertura e para as regras (CST × incidência, alíquota); gera warning não bloqueante CST_PIS_NON_CANONICAL_FORMAT / CST_COFINS_NON_CANONICAL_FORMAT (contagem e amostras em fiscal_context.non_canonical_warnings).
  • Nada é escrito no Firebird; escrever 04 seria decisão futura.

4. Blockers (só onde o campo se aplica: REQUIRED/OPTIONAL)

Blocker Quando
{PIS,COFINS}_CST_INVALID CST digitado que não é canônico nem normalizável
{PIS,COFINS}_CST_MISSING produto REQUIRED sem CST de saída
{PIS,COFINS}_RATE_MISSING CST de saída (canônico) 01/02 sem alíquota
{PIS,COFINS}_RATE_INVALID alíquota não numérica ou > 100
{PIS,COFINS}_CST_INCIDENCE_MISMATCH MONOFÁSICA com CST fora de {02,03,04}; SUBST.TRIBUTÁRIA com CST ≠ 05
PIS_COFINS_FLAG_INCONSISTENT flag N com incidência especial; flag S sem incidência e sem códigos

Warnings (nunca bloqueiam): CST_*_NON_CANONICAL_FORMAT, CST_*_INVALID_IGNORED (valor inválido digitado em produto NOT_APPLICABLE).

5. Regimes no corpus SGV

CRT 1 (CONSTRUCAO, MMMODAS, UNIAO, TESTESOFICIAIS) e CRT 3 (RINCAO, via EMISSOR). Nenhuma regra assume CRT 1.

6. Campos ignorados quando não aplicáveis / write targets candidatos

Produto NOT_APPLICABLE: os 6 campos, PISCOFINS e INCIDENCIA_PISCOFINS não contam. Candidatos futuros (sem escrita nesta versão): COD_SAIDA_PIS, COD_SAIDA_COFINS e a normalização 4→04.