refactor: Introduce accumulate_usage function for token aggregation, enhance alias map expansion in BatchProcessor, and streamline error handling in PreclassificationService. Update PDF processing utilities for improved image conversion and error logging.

This commit is contained in:
erik
2026-03-01 20:55:52 -05:00
parent 3c258ebf12
commit e7fde25227
29 changed files with 321 additions and 1206 deletions
+15 -1
View File
@@ -25,6 +25,8 @@ class MainProcessingTab:
self._create_config_section()
self._create_process_button()
self._create_output_section()
# Conectar el trace después de que todos los widgets existen
self.mode_var.trace_add("write", lambda *_: self.update_ui_for_mode())
def _setup_layout(self):
"""Configura el layout base de la pestaña."""
@@ -297,10 +299,22 @@ class MainProcessingTab:
def get_root_path(self) -> str:
"""Devuelve la ruta raíz seleccionada."""
return self.root_entry.get().strip()
def set_root_path(self, path: str) -> None:
"""Establece la ruta raíz."""
self.root_entry.configure(state="normal")
self.root_entry.delete(0, "end")
self.root_entry.insert(0, path)
def get_csv_path(self) -> str:
"""Devuelve la ruta del CSV."""
return self.csv_entry.get().strip()
def set_csv_path(self, path: str) -> None:
"""Establece la ruta del CSV."""
self.csv_entry.configure(state="normal")
self.csv_entry.delete(0, "end")
self.csv_entry.insert(0, path)
def get_process_mode(self) -> str:
"""Devuelve el modo de procesamiento: 'radicados' o 'general'."""
+4 -2
View File
@@ -3,8 +3,11 @@ import customtkinter as ctk
import tkinter.ttk as ttk
from gui.styles import AppStyles
# matplotlib es opcional
# matplotlib y numpy son opcionales
try:
import matplotlib
matplotlib.use("Agg") # backend no interactivo para render en canvas Tk
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
HAS_MPL = True
@@ -226,7 +229,6 @@ class MetricsTab:
extract_vals = [input_extract, cached_extract, output_extract]
norm_vals = [input_norm, cached_norm, output_norm]
import numpy as np
x = np.arange(len(labels))
width = 0.35
+7 -1
View File
@@ -388,7 +388,13 @@ class PreclassificationTab:
def get_root_path(self) -> str:
"""Devuelve la ruta raíz de preclasificación."""
return self.preclass_root_entry.get().strip()
def set_root_path(self, path: str) -> None:
"""Establece la ruta raíz de preclasificación."""
self.preclass_root_entry.configure(state="normal")
self.preclass_root_entry.delete(0, "end")
self.preclass_root_entry.insert(0, path)
def get_mode(self) -> str:
"""Devuelve el modo de preclasificación: 'radicados' o 'general'."""
try:
+7
View File
@@ -202,6 +202,13 @@ class ResultsTab:
def set_on_select_result(self, callback):
"""Vincula el callback al evento de selección de fila."""
self.tree_results.bind("<<TreeviewSelect>>", callback)
def get_selected_result_values(self) -> tuple | None:
"""Devuelve los valores de la fila seleccionada o None si no hay selección."""
selection = self.tree_results.selection()
if not selection:
return None
return self.tree_results.item(selection[0], "values") or None
def update_matches_table(self, rows):
"""Actualiza la tabla de matches con los datos proporcionados."""