Skip to content

Commit

Permalink
CST 02, 15, 53 - ICMS monofásico - NT2023.001v1.50
Browse files Browse the repository at this point in the history
  • Loading branch information
Roberto Godinho committed Dec 15, 2023
1 parent 4cd1367 commit 90bba9c
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 11 deletions.
34 changes: 33 additions & 1 deletion pynfe/entidades/notafiscal.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,18 @@ class NotaFiscal(Entidade):
# - Valor total do vICMSMonoRet
totais_icms_v_icms_mono_ret = Decimal()

# - Valor total da quantidade tributada do ICMS monofásico próprio
totais_icms_q_bc_mono = Decimal()

# - Valor total do ICMS monofásico próprio
totais_icms_v_icms_mono = Decimal()

# - Valor total da quantidade tributada do ICMS monofásico sujeito a retenção
totais_icms_q_bc_mono_reten = Decimal()

# - Valor total do ICMS monofásico sujeito a retenção
totais_icms_v_icms_mono_reten = Decimal()

# Transporte
# - Modalidade do Frete (obrigatorio - seleciona de lista) - MODALIDADES_FRETE
# 0=Contratação do Frete por conta do Remetente (CIF);
Expand Down Expand Up @@ -421,8 +433,15 @@ def adicionar_produto_servico(self, **kwargs):
self.totais_fcp_st_ret += obj.fcp_st_ret_valor
self.totais_icms_inter_destino += obj.icms_inter_destino_valor
self.totais_icms_inter_remetente += obj.icms_inter_remetente_valor

# - ICMS monofasico para combustiveis
self.totais_icms_q_bc_mono += obj.icms_q_bc_mono
self.totais_icms_v_icms_mono += obj.icms_v_icms_mono
self.totais_icms_q_bc_mono_reten += obj.icms_q_bc_mono_reten
self.totais_icms_v_icms_mono_reten += obj.icms_v_icms_mono_reten
self.totais_icms_q_bc_mono_ret += obj.icms_q_bc_mono_ret
self.totais_icms_v_icms_mono_ret += obj.icms_v_icms_mono_ret

# TODO calcular impostos aproximados
# self.totais_tributos_aproximado += obj.tributos

Expand Down Expand Up @@ -723,9 +742,22 @@ class NotaFiscalProduto(Entidade):
fcp_st_ret_valor = Decimal()
icms_inter_destino_valor = Decimal()
icms_inter_remetente_valor = Decimal()
icms_q_bc_mono_ret = Decimal()

# - ICMS monofásico
icms_ad_rem_icms = Decimal()
icms_v_icms_mono = Decimal()
icms_q_bc_mono = Decimal()
icms_ad_rem_icms_reten = Decimal()
icms_v_icms_mono_reten = Decimal()
icms_q_bc_mono_reten = Decimal()
icms_p_red_ad_rem = Decimal()
icms_mot_red_ad_rem = int()
icms_v_icms_mono_op = Decimal()
icms_v_icms_mono_dif = Decimal()
icms_ad_rem_icms_ret = Decimal()
icms_v_icms_mono_ret = Decimal()
icms_q_bc_mono_ret = Decimal()
icms_p_dif = Decimal()

# - IPI
# - Situacao tributaria (seleciona de lista) - IPI_TIPOS_TRIBUTACAO
Expand Down
70 changes: 60 additions & 10 deletions pynfe/processamento/serializacao.py
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,16 @@ def _serializar_imposto_icms(
produto_servico.fcp_valor or 0
) # Valor Fundo Combate a Pobreza

# 02=Tributação monofásica própria sobre combustíveis
elif produto_servico.icms_modalidade == "02":
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
etree.SubElement(icms_item, "orig").text = str(produto_servico.icms_origem)
etree.SubElement(icms_item, "CST").text = produto_servico.icms_modalidade

etree.SubElement(icms_item, "qBCMono").text = "{:.4f}".format(produto_servico.icms_q_bc_mono or 0)
etree.SubElement(icms_item, "adRemICMS").text = "{:.4f}".format(produto_servico.icms_ad_rem_icms or 0)
etree.SubElement(icms_item, "vICMSMono").text = "{:.2f}".format(produto_servico.icms_v_icms_mono or 0)

# 10=Tributada e com cobrança do ICMS por substituição tributária
elif produto_servico.icms_modalidade == "10":
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
Expand Down Expand Up @@ -556,6 +566,24 @@ def _serializar_imposto_icms(
produto_servico.fcp_st_valor or 0
)


# 15=Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis
elif produto_servico.icms_modalidade == "15":
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
etree.SubElement(icms_item, "orig").text = str(produto_servico.icms_origem)
etree.SubElement(icms_item, "CST").text = produto_servico.icms_modalidade

etree.SubElement(icms_item, "qBCMono").text = "{:.4f}".format(produto_servico.icms_q_bc_mono or 0)
etree.SubElement(icms_item, "adRemICMS").text = "{:.4f}".format(produto_servico.icms_ad_rem_icms or 0)
etree.SubElement(icms_item, "vICMSMono").text = "{:.2f}".format(produto_servico.icms_v_icms_mono or 0)
etree.SubElement(icms_item, "qBCMonoReten").text = "{:.4f}".format(produto_servico.icms_q_bc_mono_reten or 0)
etree.SubElement(icms_item, "adRemICMSReten").text = "{:.4f}".format(produto_servico.icms_ad_rem_icms_reten or 0)
etree.SubElement(icms_item, "vICMSMonoReten").text = "{:.2f}".format(produto_servico.icms_v_icms_mono_reten or 0)
if produto_servico.icms_p_red_ad_rem:
etree.SubElement(icms_item, "pRedAdRem").text = "{:.2f}".format(produto_servico.icms_p_red_ad_rem or 0)
etree.SubElement(icms_item, "motRedAdRem").text = str(produto_servico.icms_mot_red_ad_rem)


# 20=Com redução de base de cálculo
elif produto_servico.icms_modalidade == "20":
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
Expand Down Expand Up @@ -677,6 +705,21 @@ def _serializar_imposto_icms(
produto_servico.fcp_valor or 0
) # Valor Fundo Combate a Pobreza


# 53=Tributação monofásica sobre combustíveis com recolhimento diferido
elif produto_servico.icms_modalidade == "53":
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
etree.SubElement(icms_item, "orig").text = str(produto_servico.icms_origem)
etree.SubElement(icms_item, "CST").text = produto_servico.icms_modalidade

etree.SubElement(icms_item, "qBCMono").text = "{:.4f}".format(produto_servico.icms_q_bc_mono or 0)
etree.SubElement(icms_item, "adRemICMS").text = "{:.4f}".format(produto_servico.icms_ad_rem_icms or 0)
etree.SubElement(icms_item, "vICMSMonoOp").text = "{:.2f}".format(produto_servico.icms_v_icms_mono_op or 0)
etree.SubElement(icms_item, "pDif").text = "{:.4f}".format(produto_servico.icms_p_dif or 0)
etree.SubElement(icms_item, "vICMSMonoDif").text = "{:.4f}".format(produto_servico.icms_v_icms_mono_dif or 0)
etree.SubElement(icms_item, "vICMSMono").text = "{:.2f}".format(produto_servico.icms_v_icms_mono or 0)


# 60=ICMS cobrado anteriormente por substituição tributária
elif produto_servico.icms_modalidade in ["ST", "60"]:
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
Expand Down Expand Up @@ -704,10 +747,10 @@ def _serializar_imposto_icms(
icms_item = etree.SubElement(icms, "ICMS" + produto_servico.icms_modalidade)
etree.SubElement(icms_item, "orig").text = str(produto_servico.icms_origem)
etree.SubElement(icms_item, "CST").text = "61"
etree.SubElement(icms_item, "qBCMonoRet").text = "{:.2f}".format(
etree.SubElement(icms_item, "qBCMonoRet").text = "{:.4f}".format(
produto_servico.icms_q_bc_mono_ret or 0
)
etree.SubElement(icms_item, "adRemICMSRet").text = "{:.2f}".format(
etree.SubElement(icms_item, "adRemICMSRet").text = "{:.4f}".format(
produto_servico.icms_ad_rem_icms_ret or 0
)
etree.SubElement(icms_item, "vICMSMonoRet").text = "{:.2f}".format(
Expand Down Expand Up @@ -1510,14 +1553,6 @@ def _serializar_nota_fiscal(
etree.SubElement(icms_total, "vICMSUFRemet").text = "{:.2f}".format(
nota_fiscal.totais_icms_remetente
)
if nota_fiscal.totais_icms_q_bc_mono_ret:
etree.SubElement(icms_total, "qBCMonoRet").text = "{:.2f}".format(
nota_fiscal.totais_icms_q_bc_mono_ret
)
if nota_fiscal.totais_icms_v_icms_mono_ret:
etree.SubElement(icms_total, "vICMSMonoRet").text = "{:.2f}".format(
nota_fiscal.totais_icms_v_icms_mono_ret
)
etree.SubElement(icms_total, "vFCP").text = "{:.2f}".format(
nota_fiscal.totais_fcp
)
Expand All @@ -1533,6 +1568,21 @@ def _serializar_nota_fiscal(
etree.SubElement(icms_total, "vFCPSTRet").text = "{:.2f}".format(
nota_fiscal.totais_fcp_st_ret
)

# ICMS monofasico
if nota_fiscal.totais_icms_q_bc_mono:
etree.SubElement(icms_total, "qBCMono").text = "{:.2f}".format(nota_fiscal.totais_icms_q_bc_mono)
if nota_fiscal.totais_icms_v_icms_mono:
etree.SubElement(icms_total, "vICMSMono").text = "{:.2f}".format(nota_fiscal.totais_icms_v_icms_mono)
if nota_fiscal.totais_icms_q_bc_mono_reten:
etree.SubElement(icms_total, "qBCMonoReten").text = "{:.2f}".format(nota_fiscal.totais_icms_q_bc_mono_reten)
if nota_fiscal.totais_icms_v_icms_mono_reten:
etree.SubElement(icms_total, "vICMSMonoReten").text = "{:.2f}".format(nota_fiscal.totais_icms_v_icms_mono_reten)
if nota_fiscal.totais_icms_q_bc_mono_ret:
etree.SubElement(icms_total, "qBCMonoRet").text = "{:.2f}".format(nota_fiscal.totais_icms_q_bc_mono_ret)
if nota_fiscal.totais_icms_v_icms_mono_ret:
etree.SubElement(icms_total, "vICMSMonoRet").text = "{:.2f}".format(nota_fiscal.totais_icms_v_icms_mono_ret)

etree.SubElement(icms_total, "vProd").text = str(
nota_fiscal.totais_icms_total_produtos_e_servicos
)
Expand Down
4 changes: 4 additions & 0 deletions pynfe/utils/flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@

ICMS_TIPOS_TRIBUTACAO = (
("00", "ICMS 00 - Tributada integralmente"),
("02", "ICMS 02 - Tributação monofásica própria sobre combustíveis"),
("10", "ICMS 10 - Tributada com cobranca do ICMS por substituicao tributaria"),
("15", "ICMS 15 - Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis"),
("20", "ICMS 20 - Com reducao da base de calculo"),
(
"30",
Expand All @@ -54,7 +56,9 @@
("41", "ICMS 41 - Nao tributada"),
("50", "ICMS 50 - Suspensao"),
("51", "ICMS 51 - Diferimento"),
("53", "ICMS 53 - Tributação monofásica sobre combustíveis com recolhimento diferido"),
("60", "ICMS 60 - Cobrado anteriormente por substituicao tributaria"),
("61", "ICMS 61 - Tributação monofásica sobre combustíveis cobrada anteriormente"),
(
"70",
(
Expand Down

0 comments on commit 90bba9c

Please sign in to comment.