GabrielGD commited on
Commit
40d829a
·
verified ·
1 Parent(s): b11775f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -21
app.py CHANGED
@@ -17,6 +17,7 @@ from datetime import datetime
17
  from ratelimiter import RateLimiter
18
  import difflib
19
  from html import escape
 
20
 
21
  load_dotenv()
22
 
@@ -480,15 +481,15 @@ def calcular_progresso():
480
 
481
  def comparar_peticao_melhorada(caso, peticao_texto, correcao):
482
  if not caso:
483
- return "⚠️ Forneça um caso antes de comparar.", "", "", "", ""
484
  peticao = peticao_texto if peticao_texto else (HISTORICO[-1]["peticao"] if HISTORICO else "")
485
  if not peticao:
486
- return "⚠️ Forneça uma petição para comparar ou corrija uma antes.", "", "", "", ""
487
  if not correcao:
488
- return "⚠️ Corrija a petição antes de comparar.", "", "", "", ""
489
  ultima_correcao = HISTORICO[-1]["correcao_completa"] if HISTORICO else ""
490
  if not ultima_correcao:
491
- return "⚠️ Nenhuma correção disponível no histórico.", "", "", "", ""
492
  peticao_corrigida = extrair_peticao_corrigida(ultima_correcao)
493
 
494
  orig_lines = peticao.split('\n')
@@ -552,32 +553,31 @@ def comparar_peticao_melhorada(caso, peticao_texto, correcao):
552
  total_removidas = len([linha for linha in resultado_diff if "linha-removida" in linha])
553
  total_adicionadas = len([linha for linha in resultado_diff if "linha-adicionada" in linha])
554
 
555
- resumo_alteracoes = []
 
 
 
 
 
 
 
556
  for secao, alteracoes in secoes.items():
557
  if alteracoes:
558
  adicionadas = sum(1 for alt in alteracoes if alt.startswith("+"))
559
  removidas = sum(1 for alt in alteracoes if alt.startswith("-"))
560
- resumo_alteracoes.append(f"""
561
  ### {secao}
562
  | Tipo | Quantidade |
563
  |--------------|------------|
564
  | Adicionadas | {adicionadas} |
565
  | Removidas | {removidas} |
566
- """)
567
  for alt in alteracoes[:5]:
568
  texto = alt[:60] + "..." if len(alt) > 60 else alt
569
- resumo_alteracoes.append(f" {texto}")
570
  if len(alteracoes) > 5:
571
- resumo_alteracoes.append(f" - ... e mais {len(alteracoes) - 5} alterações")
572
 
573
- resumo_estatistico = f"""
574
- - **Linhas Removidas:** {total_removidas}
575
- - **Linhas Adicionadas:** {total_adicionadas}
576
- - **Diferença Líquida:** {total_adicionadas - total_removidas} linhas
577
- """
578
-
579
- criticas_texto = "\n".join(criticas) if criticas else "Nenhuma mudança crítica detectada."
580
- alteracoes_texto = "".join(resumo_alteracoes)
581
  visualizacao_detalhada = f"""
582
  <style>
583
  .linha-igual {{ color: #000000; margin: 2px 0; }}
@@ -588,6 +588,32 @@ def comparar_peticao_melhorada(caso, peticao_texto, correcao):
588
  """
589
  return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, alteracoes_texto, visualizacao_detalhada
590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
591
  def interface_gradio():
592
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
593
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
@@ -658,11 +684,16 @@ def interface_gradio():
658
 
659
  with gr.Row():
660
  with gr.Column(scale=1):
 
 
661
  resumo_alteracoes_output = gr.Markdown(label="📊 Resumo das Alterações")
662
  criticas_output = gr.Markdown(label="🚨 Mudanças Críticas")
663
- with gr.Column(scale=2):
664
  visualizacao_detalhada_output = gr.HTML(label="📝 Alterações Detalhadas")
665
 
 
 
 
 
666
  with gr.Accordion("📜 Histórico de Correções", open=False):
667
  historico_output = gr.Markdown()
668
  historico_btn = gr.Button("🔄 Ver Histórico")
@@ -683,17 +714,25 @@ def interface_gradio():
683
  outputs=[resultado_output]
684
  )
685
  clear_btn.click(
686
- fn=lambda: [None, None, None, None, "", "", "", "", "", "", ""],
687
  inputs=None,
688
  outputs=[caso_input, peticao_texto, peticao_arquivo, arquivo_preview, resultado_output, dica_contextual,
689
  peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
690
- visualizacao_detalhada_output]
691
  )
692
  comparar_btn.click(
693
  fn=comparar_peticao_melhorada,
694
  inputs=[caso_input, peticao_texto, resultado_output],
695
  outputs=[peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
696
- visualizacao_detalhada_output]
 
 
 
 
 
 
 
 
697
  )
698
 
699
  with gr.Accordion("📘 Critérios Detalhados", open=False):
 
17
  from ratelimiter import RateLimiter
18
  import difflib
19
  from html import escape
20
+ from weasyprint import HTML # Para gerar PDF com cores
21
 
22
  load_dotenv()
23
 
 
481
 
482
  def comparar_peticao_melhorada(caso, peticao_texto, correcao):
483
  if not caso:
484
+ return "⚠️ Forneça um caso antes de comparar.", "", "", "", "", ""
485
  peticao = peticao_texto if peticao_texto else (HISTORICO[-1]["peticao"] if HISTORICO else "")
486
  if not peticao:
487
+ return "⚠️ Forneça uma petição para comparar ou corrija uma antes.", "", "", "", "", ""
488
  if not correcao:
489
+ return "⚠️ Corrija a petição antes de comparar.", "", "", "", "", ""
490
  ultima_correcao = HISTORICO[-1]["correcao_completa"] if HISTORICO else ""
491
  if not ultima_correcao:
492
+ return "⚠️ Nenhuma correção disponível no histórico.", "", "", "", "", ""
493
  peticao_corrigida = extrair_peticao_corrigida(ultima_correcao)
494
 
495
  orig_lines = peticao.split('\n')
 
553
  total_removidas = len([linha for linha in resultado_diff if "linha-removida" in linha])
554
  total_adicionadas = len([linha for linha in resultado_diff if "linha-adicionada" in linha])
555
 
556
+ resumo_estatistico = f"""
557
+ Linhas Removidas: {total_removidas}
558
+ Linhas Adicionadas: {total_adicionadas}
559
+ Diferença Líquida: {total_adicionadas - total_removidas} linhas
560
+ """
561
+
562
+ criticas_texto = "\n".join(criticas) if criticas else "Nenhuma mudança crítica detectada."
563
+ alteracoes_texto = ""
564
  for secao, alteracoes in secoes.items():
565
  if alteracoes:
566
  adicionadas = sum(1 for alt in alteracoes if alt.startswith("+"))
567
  removidas = sum(1 for alt in alteracoes if alt.startswith("-"))
568
+ alteracoes_texto += f"""
569
  ### {secao}
570
  | Tipo | Quantidade |
571
  |--------------|------------|
572
  | Adicionadas | {adicionadas} |
573
  | Removidas | {removidas} |
574
+ """
575
  for alt in alteracoes[:5]:
576
  texto = alt[:60] + "..." if len(alt) > 60 else alt
577
+ alteracoes_texto += f" {texto}\n"
578
  if len(alteracoes) > 5:
579
+ alteracoes_texto += f" - ... e mais {len(alteracoes) - 5} alterações\n"
580
 
 
 
 
 
 
 
 
 
581
  visualizacao_detalhada = f"""
582
  <style>
583
  .linha-igual {{ color: #000000; margin: 2px 0; }}
 
588
  """
589
  return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, alteracoes_texto, visualizacao_detalhada
590
 
591
+ def exportar_diferencas_html(caso, peticao_texto, correcao):
592
+ _, _, resumo_estatistico, criticas_texto, _, visualizacao_detalhada = comparar_peticao_melhorada(caso, peticao_texto, correcao)
593
+ html_content = f"""
594
+ <html>
595
+ <head>
596
+ <title>Diferenças na Petição</title>
597
+ <style>
598
+ .linha-igual {{ color: #000000; margin: 2px 0; }}
599
+ .linha-removida {{ color: #ffffff; background-color: #b30000; margin: 2px 0; padding: 2px; }}
600
+ .linha-adicionada {{ color: #ffffff; background-color: #006600; margin: 2px 0; padding: 2px; }}
601
+ </style>
602
+ </head>
603
+ <body>
604
+ <h2>Estatísticas</h2>
605
+ <pre>{resumo_estatistico}</pre>
606
+ <h2>Mudanças Críticas</h2>
607
+ <pre>{criticas_texto}</pre>
608
+ <h2>Alterações Detalhadas</h2>
609
+ {visualizacao_detalhada}
610
+ </body>
611
+ </html>
612
+ """
613
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp:
614
+ HTML(string=html_content).write_pdf(tmp.name)
615
+ return tmp.name
616
+
617
  def interface_gradio():
618
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
619
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
 
684
 
685
  with gr.Row():
686
  with gr.Column(scale=1):
687
+ alteracoes_texto_output = gr.Markdown(label="🔍 Alterações por Seção")
688
+ with gr.Column(scale=2):
689
  resumo_alteracoes_output = gr.Markdown(label="📊 Resumo das Alterações")
690
  criticas_output = gr.Markdown(label="🚨 Mudanças Críticas")
 
691
  visualizacao_detalhada_output = gr.HTML(label="📝 Alterações Detalhadas")
692
 
693
+ with gr.Row():
694
+ download_btn = gr.Button("📥 Baixar Diferenças em PDF", visible=False)
695
+ download_file = gr.File(label="Download", visible=False)
696
+
697
  with gr.Accordion("📜 Histórico de Correções", open=False):
698
  historico_output = gr.Markdown()
699
  historico_btn = gr.Button("🔄 Ver Histórico")
 
714
  outputs=[resultado_output]
715
  )
716
  clear_btn.click(
717
+ fn=lambda: [None, None, None, None, "", "", "", "", "", "", "", gr.update(visible=False), gr.update(visible=False)],
718
  inputs=None,
719
  outputs=[caso_input, peticao_texto, peticao_arquivo, arquivo_preview, resultado_output, dica_contextual,
720
  peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
721
+ visualizacao_detalhada_output, download_btn, download_file]
722
  )
723
  comparar_btn.click(
724
  fn=comparar_peticao_melhorada,
725
  inputs=[caso_input, peticao_texto, resultado_output],
726
  outputs=[peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
727
+ alteracoes_texto_output, visualizacao_detalhada_output]
728
+ ).then(
729
+ fn=lambda: gr.update(visible=True),
730
+ outputs=[download_btn]
731
+ )
732
+ download_btn.click(
733
+ fn=exportar_diferencas_html,
734
+ inputs=[caso_input, peticao_texto, resultado_output],
735
+ outputs=[download_file]
736
  )
737
 
738
  with gr.Accordion("📘 Critérios Detalhados", open=False):