Skip to content

Commit 70ceb70

Browse files
[IMP] implementa a carta de correção do CTE
1 parent 7787f3f commit 70ceb70

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

src/erpbrasil/edoc/cte.py

+78
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,25 @@
1212
ConsSitCte,
1313
ConsStatServCte,
1414
EvCancCte,
15+
EvCceCte,
1516
EventoCte,
1617
RetConsSitCte,
1718
RetConsStatServCte,
1819
RetCte,
1920
RetEventoCte,
2021
)
2122

23+
TEXTO_CARTA_CORRECAO = """A Carta de Correcao e disciplinada pelo Art. 58-B do \
24+
CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de \
25+
correcao, para regularizacao de erro ocorrido na emissao de \
26+
documentos fiscais relativos a prestacao de servico de \
27+
transporte, desde que o erro nao esteja relacionado com: \
28+
I - as variaveis que determinam o valor do imposto tais como: \
29+
base de calculo, aliquota, diferenca de preco, quantidade, \
30+
valor da prestacao; II - a correcao de dados cadastrais que \
31+
implique mudanca do emitente, tomador, remetente ou do \
32+
destinatario; III - a data de emissao ou de saida."""
33+
2234
AMBIENTE_PRODUCAO = "producao"
2335
AMBIENTE_HOMOLOGACAO = "homologacao"
2436

@@ -351,6 +363,72 @@ def cancela_documento(
351363
)
352364
return raiz
353365

366+
def carta_correcao(
367+
self,
368+
chave,
369+
protocolo_autorizacao,
370+
justificativa,
371+
sequencia,
372+
data_hora_evento=False,
373+
):
374+
tipo_evento = "110110"
375+
376+
temp_string = justificativa.replace("\\n", "TEMP_NEW_LINE")
377+
378+
# Separar a string pelo separador
379+
lista = temp_string.split(";")
380+
381+
# Dividir a lista em sublistas usando o separador temporário
382+
result = []
383+
sublist = []
384+
385+
for item in lista:
386+
if "TEMP_NEW_LINE" in item:
387+
parts = item.split("TEMP_NEW_LINE")
388+
sublist.append(parts[0])
389+
result.append(sublist)
390+
sublist = [parts[1]]
391+
else:
392+
sublist.append(item)
393+
394+
# Adicionar a última sublista
395+
result.append(sublist)
396+
correcoes = []
397+
nro_item = 1 # Inicia a sequência de itens alterados
398+
399+
for linha in result:
400+
grupo, campo, valor = linha
401+
correcao = EvCceCte.InfCorrecao(
402+
grupoAlterado=grupo,
403+
campoAlterado=campo,
404+
valorAlterado=valor,
405+
nroItemAlterado=str(
406+
nro_item
407+
), # Adiciona a sequência de itens alterados
408+
)
409+
correcoes.append(correcao)
410+
nro_item += 1 # Incrementa a sequência
411+
412+
raiz = EventoCte.InfEvento(
413+
Id="ID" + tipo_evento + chave + sequencia.zfill(3),
414+
cOrgao=self.uf,
415+
tpAmb=self.ambiente,
416+
CNPJ=chave[6:20],
417+
chCTe=chave,
418+
dhEvento=data_hora_evento or self._hora_agora(),
419+
tpEvento=tipo_evento,
420+
nSeqEvento=sequencia,
421+
detEvento=EventoCte.InfEvento.DetEvento(
422+
EvCceCte(
423+
descEvento="Carta de Correcao",
424+
infCorrecao=correcoes, # Lista de correções
425+
xCondUso=TEXTO_CARTA_CORRECAO,
426+
),
427+
versaoEvento="4.00",
428+
),
429+
)
430+
return raiz
431+
354432
def consulta_recibo(self):
355433
pass
356434

0 commit comments

Comments
 (0)