Skip to content

Commit 9409e32

Browse files
feat: serialização dos campos de redução de alíquota IBS/CBS
1 parent 911f113 commit 9409e32

2 files changed

Lines changed: 65 additions & 18 deletions

File tree

pynfe/processamento/serializacao.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
)
1919
from pynfe.utils.flags import (
2020
CODIGOS_ESTADOS,
21+
IBSCBS_CST_TRIBUTADOS,
22+
IBSCBS_CST_GRUPO_REDUCAO,
2123
NAMESPACE_MDFE,
2224
NAMESPACE_NFE,
2325
NAMESPACE_SIG,
@@ -1316,9 +1318,6 @@ def _serializar_imposto_importacao(
13161318
# Reforma Tributaria - IVA Dual (NT 2025.002-RTC)
13171319
# =============================================
13181320

1319-
# CSTs that have taxable values (vBC, rates, amounts)
1320-
_IBSCBS_CST_TRIBUTADOS = ("000", "010", "200", "400", "510", "600", "620", "800", "810", "900")
1321-
13221321
def _serializar_imposto_ibscbs(
13231322
self, produto_servico, modelo, tag_raiz="imposto", retorna_string=True
13241323
):
@@ -1347,7 +1346,7 @@ def _serializar_ibscbs(self, produto_servico, tag_raiz):
13471346
if produto_servico.ibscbs_c_class_trib:
13481347
etree.SubElement(ibscbs, "cClassTrib").text = produto_servico.ibscbs_c_class_trib
13491348

1350-
if produto_servico.ibscbs_cst in self._IBSCBS_CST_TRIBUTADOS:
1349+
if produto_servico.ibscbs_cst in IBSCBS_CST_TRIBUTADOS:
13511350
gibscbs = etree.SubElement(ibscbs, "gIBSCBS")
13521351

13531352
etree.SubElement(gibscbs, "vBC").text = "{:.2f}".format(produto_servico.ibscbs_vbc or 0)
@@ -1357,6 +1356,14 @@ def _serializar_ibscbs(self, produto_servico, tag_raiz):
13571356
etree.SubElement(gibsuf, "pIBSUF").text = "{:.4f}".format(
13581357
produto_servico.ibscbs_p_ibs_uf or 0
13591358
)
1359+
1360+
if produto_servico.ibscbs_cst in IBSCBS_CST_GRUPO_REDUCAO:
1361+
self._serializar_ibscbs_reducao_aliquota(
1362+
produto_servico.ibscbs_ibs_uf_p_red_aliq,
1363+
produto_servico.ibscbs_ibs_uf_p_aliq_efet,
1364+
gibsuf,
1365+
)
1366+
13601367
etree.SubElement(gibsuf, "vIBSUF").text = "{:.2f}".format(
13611368
produto_servico.ibscbs_v_ibs_uf or 0
13621369
)
@@ -1366,6 +1373,14 @@ def _serializar_ibscbs(self, produto_servico, tag_raiz):
13661373
etree.SubElement(gibsmun, "pIBSMun").text = "{:.4f}".format(
13671374
produto_servico.ibscbs_p_ibs_mun or 0
13681375
)
1376+
1377+
if produto_servico.ibscbs_cst in IBSCBS_CST_GRUPO_REDUCAO:
1378+
self._serializar_ibscbs_reducao_aliquota(
1379+
produto_servico.ibscbs_ibs_mun_p_red_aliq,
1380+
produto_servico.ibscbs_ibs_mun_p_aliq_efet,
1381+
gibsmun,
1382+
)
1383+
13691384
etree.SubElement(gibsmun, "vIBSMun").text = "{:.2f}".format(
13701385
produto_servico.ibscbs_v_ibs_mun or 0
13711386
)
@@ -1378,8 +1393,21 @@ def _serializar_ibscbs(self, produto_servico, tag_raiz):
13781393
# gCBS
13791394
gcbs = etree.SubElement(gibscbs, "gCBS")
13801395
etree.SubElement(gcbs, "pCBS").text = "{:.4f}".format(produto_servico.ibscbs_p_cbs or 0)
1396+
1397+
if produto_servico.ibscbs_cst in IBSCBS_CST_GRUPO_REDUCAO:
1398+
self._serializar_ibscbs_reducao_aliquota(
1399+
produto_servico.ibscbs_cbs_p_red_aliq,
1400+
produto_servico.ibscbs_cbs_p_aliq_efet,
1401+
gcbs,
1402+
)
1403+
13811404
etree.SubElement(gcbs, "vCBS").text = "{:.2f}".format(produto_servico.ibscbs_v_cbs or 0)
13821405

1406+
def _serializar_ibscbs_reducao_aliquota(self, p_red_aliq, p_aliq_efet, tag_raiz):
1407+
gred = etree.SubElement(tag_raiz, "gRed")
1408+
etree.SubElement(gred, "pRedAliq").text = "{:.4f}".format(p_red_aliq or 0)
1409+
etree.SubElement(gred, "pAliqEfet").text = "{:.4f}".format(p_aliq_efet or 0)
1410+
13831411
def _serializar_is(self, produto_servico, tag_raiz):
13841412
"""Serializa <IS> (Imposto Seletivo) como filho direto de <imposto>.
13851413

pynfe/utils/flags.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -552,24 +552,43 @@
552552
# =============================================
553553

554554
# CST para IBSCBS (IBS + CBS) — NT 2025.002-RTC (3-digit codes)
555+
# Atualizado de acordo com Informe Técnico 2025.002 v.1.60 - Publicado em 23/06/2026
555556
IBS_CBS_TIPOS_TRIBUTACAO = (
556557
("000", "Tributação integral"),
557-
("010", "Tributação com alíquota reduzida"),
558-
("100", "Tributação com suspensão"),
559-
("110", "Imunidade — exportação"),
560-
("200", "Tributação com diferimento"),
561-
("222", "Isenção"),
562-
("300", "Não incidência"),
563-
("400", "Tributação por substituição"),
564-
("410", "Tributação com alíquota zero"),
565-
("510", "Tributação integral — regime específico"),
566-
("600", "Tributação monofásica — incidência padrão"),
567-
("620", "Tributação monofásica — demais operações"),
568-
("800", "Crédito presumido"),
569-
("810", "Crédito presumido — ZFM"),
570-
("900", "Outros"),
558+
("010", "Tributação com alíquotas uniformes"),
559+
("011", "Tributação com alíquotas uniformes reduzidas"),
560+
("200", "Alíquota reduzida"),
561+
("220", "Alíquota fixa"),
562+
("221", "Alíquota fixa proporcional"),
563+
("222", "Redução de base de cálculo"),
564+
("400", "Isenção"),
565+
("410", "Imunidade e não incidência"),
566+
("510", "Diferimento"),
567+
("515", "Diferimento com redução de alíquota"),
568+
("550", "Suspensão"),
569+
("620", "Tributação monofásica"),
570+
("800", "Transferência de crédito"),
571+
("810", "Ajuste de IBS na ZFM"),
572+
("811", "Ajustes"),
573+
("820", "Tributação em documento específico"),
574+
("830", "Exclusão de base de cálculo"),
571575
)
572576

577+
IBSCBS_CST_TRIBUTADOS = (
578+
"000",
579+
"010",
580+
"011",
581+
"200",
582+
"220",
583+
"221",
584+
"222",
585+
"510",
586+
"515",
587+
"550",
588+
"830",
589+
)
590+
IBSCBS_CST_GRUPO_REDUCAO = ("011", "200", "515")
591+
573592
# CST para IS (Imposto Seletivo) — CSTSelec (NT 2025.002-RTC)
574593
IS_TIPOS_TRIBUTACAO = (
575594
("01", "Tributada integralmente"),

0 commit comments

Comments
 (0)