1818)
1919from 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
0 commit comments