From d2cad5e6b67332e38930732519581db10cc8e7f2 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Tue, 16 Jul 2024 12:16:30 -0300 Subject: [PATCH] =?UTF-8?q?[IMP]=20implementa=20a=20carta=20de=20corre?= =?UTF-8?q?=C3=A7=C3=A3o=20do=20CTE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/erpbrasil/edoc/cte.py | 80 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/erpbrasil/edoc/cte.py b/src/erpbrasil/edoc/cte.py index 446806c..bc41abb 100644 --- a/src/erpbrasil/edoc/cte.py +++ b/src/erpbrasil/edoc/cte.py @@ -12,6 +12,7 @@ ConsSitCte, ConsStatServCte, EvCancCte, + EvCceCte, EventoCte, RetConsSitCte, RetConsStatServCte, @@ -351,6 +352,85 @@ def cancela_documento( ) return raiz + def carta_correcao( + self, + chave, + protocolo_autorizacao, + justificativa, + sequencia, + data_hora_evento=False, + ): + tipo_evento = "110110" + condicao_uso = ( + "A Carta de Correcao e disciplinada pelo Art. 58-B do " + "CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de " + "correcao, para regularizacao de erro ocorrido na emissao de " + "documentos fiscais relativos a prestacao de servico de " + "transporte, desde que o erro nao esteja relacionado com: " + "I - as variaveis que determinam o valor do imposto tais como: " + "base de calculo, aliquota, diferenca de preco, quantidade, valor " + "da prestacao; " + "II - a correcao de dados cadastrais que implique mudanca do " + "emitente, tomador,remetente ou do destinatario; " + "III - a data de emissao ou de saida." + ) + + temp_string = justificativa.replace("\\n", "TEMP_NEW_LINE") + + # Separar a string pelo separador + lista = temp_string.split(";") + + # Dividir a lista em sublistas usando o separador temporário + result = [] + sublist = [] + + for item in lista: + if "TEMP_NEW_LINE" in item: + parts = item.split("TEMP_NEW_LINE") + sublist.append(parts[0]) + result.append(sublist) + sublist = [parts[1]] + else: + sublist.append(item) + + # Adicionar a última sublista + result.append(sublist) + correcoes = [] + nro_item = 1 # Inicia a sequência de itens alterados + + for linha in result: + grupo, campo, valor = linha + correcao = EvCceCte.InfCorrecao( + grupoAlterado=grupo, + campoAlterado=campo, + valorAlterado=valor, + nroItemAlterado=str( + nro_item + ), # Adiciona a sequência de itens alterados + ) + correcoes.append(correcao) + nro_item += 1 # Incrementa a sequência + + raiz = EventoCte.InfEvento( + Id="ID" + tipo_evento + chave + sequencia.zfill(3), + cOrgao=self.uf, + tpAmb=self.ambiente, + CNPJ=chave[6:20], + chCTe=chave, + dhEvento=data_hora_evento or self._hora_agora(), + tpEvento=tipo_evento, + nSeqEvento=sequencia, + detEvento=EventoCte.InfEvento.DetEvento( + EvCceCte( + descEvento="Carta de Correcao", + infCorrecao=correcoes, # Lista de correções + xCondUso=condicao_uso, + ), + versaoEvento="4.00", + ), + ) + return raiz + def consulta_recibo(self): pass