@@ -28,6 +28,76 @@ El **script maestro (`run_master.py`)** es el corazón del sistema y reemplaza a
28286 . ** Correos** (` run_correos.py ` ): Sistema de envío de correos
29297 . ** Correo Tareas** (` run_correo_tareas.py ` ): Sistema de gestión de correos que interactúa con la base de datos de tareas
3030
31+ ### 🆕 Cambios Arquitectónicos Recientes (Refactor 2025)
32+
33+ Refactor integral para simplificar arquitectura, mejorar testabilidad y eliminar código legacy.
34+
35+ Principales mejoras:
36+ 1 . Capa de datos unificada:
37+ - Eliminados ` AccessAdapter ` y ` DemoDatabase ` .
38+ - Nueva clase única ` AccessDatabase ` con soporte opcional de pool.
39+ - Introducido ` AccessConnectionPool ` (gestiona instancias reutilizables por cadena de conexión).
40+ 2 . Gestión de tareas:
41+ - Reemplazo de funciones globales por clase ` TaskRegistry ` (extensible, inyectable, test-friendly).
42+ - API: ` get_daily_tasks() ` , ` get_continuous_tasks() ` , ` get_all_tasks() ` , ` summary() ` , filtros y extensión por parámetros ` extra_daily/extra_continuous ` .
43+ - Backwards compatibility: funciones wrapper conservadas para código legado.
44+ 3 . Script maestro (` run_master.py ` ):
45+ - Consolidado antiguo ` run_master_new.py ` (eliminado).
46+ - Añadido modo ` --simple ` sobre ` TaskRegistry ` con resumen estructurado.
47+ - Fast-path en tests (` MASTER_DRY_SUBPROCESS=1 ` ) evitando importaciones pesadas.
48+ 4 . Riesgos y No Conformidades: parametrización explícita de frecuencias vía variables de entorno para subtareas.
49+ 5 . Limpieza y cobertura:
50+ - Eliminado definitivamente archivo legacy ` database_adapter.py ` y su test.
51+ - Stub ligero de ` RiesgosTask ` para unit tests cuando el módulo completo no es necesario.
52+ 6 . Documentación actualizada: ejemplos de extensión de tareas, uso de pools y guía de migración.
53+
54+ Pendiente futuro (no implementado aún):
55+ - Sistema de plugins de tareas (descubrimiento dinámico).
56+ - Persistencia de métricas de ejecución (duración/estado) para observabilidad.
57+ - Reducción selectiva de coste de importación en módulos grandes (lazy loading adicional).
58+
59+ ### Uso de TaskRegistry
60+
61+ ``` python
62+ from common.task_registry import TaskRegistry
63+
64+ registry = TaskRegistry()
65+ for task in registry.get_daily_tasks():
66+ if task.debe_ejecutarse():
67+ task.ejecutar()
68+ task.marcar_como_completada()
69+ ```
70+
71+ Extender con tareas personalizadas:
72+
73+ ``` python
74+ from common.base_task import TareaDiaria
75+ from common.task_registry import TaskRegistry
76+
77+ class MiTarea (TareaDiaria ):
78+ def __init__ (self ):
79+ super ().__init__ (name = " MiTarea" , script_filename = " run_mi_tarea.py" , task_names = [" MiTareaDiaria" ], frequency_days = 1 )
80+ def debe_ejecutarse (self ):
81+ return True
82+ def marcar_como_completada (self ):
83+ pass
84+
85+ registry = TaskRegistry(extra_daily = [MiTarea()])
86+ ```
87+
88+ ### Acceso unificado a BD
89+
90+ ``` python
91+ from common.database import AccessDatabase
92+ from common.access_connection_pool import get_tareas_connection_pool
93+ from common.config import config
94+
95+ conn_str = config.get_db_tareas_connection_string()
96+ pool = get_tareas_connection_pool(conn_str)
97+ db = AccessDatabase(conn_str, pool = pool)
98+ rows = db.execute_query(" SELECT TOP 1 * FROM TbTareas" )
99+ ```
100+
31101### 🚀 Modo Verbose del Script Maestro
32102
33103El script maestro incluye un ** modo verbose** para debugging y monitoreo detallado:
@@ -135,7 +205,6 @@ scripts-python/
135205│ ├── run_correos.py # Script para módulo correos
136206│ ├── run_expedientes.py # Script para módulo expedientes
137207│ ├── run_master.py # Script maestro - daemon principal con modo verbose
138- │ ├── run_master_new.py # Nueva versión del script maestro
139208│ ├── run_no_conformidades.py # Script para no conformidades
140209│ └── run_riesgos.py # Script para módulo de riesgos
141210├── src/ # Código fuente
@@ -155,12 +224,11 @@ scripts-python/
155224│ │ ├── base_email_manager.py # Gestor base para emails
156225│ │ ├── base_task.py # Clase base para tareas
157226│ │ ├── config.py # Configuración multi-entorno
158- │ │ ├── database.py # Capa abstracción bases datos Access
159- │ │ ├── database_adapter.py # Adaptador de bases de datos
227+ │ │ ├── database.py # Capa unificada Access (AccessDatabase + pools)
160228│ │ ├── html_report_generator.py # Generador reportes HTML
161229│ │ ├── logger.py # Sistema de logging
162230│ │ ├── notifications.py # Sistema de notificaciones
163- │ │ ├── task_registry.py # Registro de tareas
231+ │ │ ├── task_registry.py # Registro de tareas (TaskRegistry OO)
164232│ │ ├── user_adapter.py # Adaptador de usuarios
165233│ │ └── utils.py # Utilidades HTML, logging, fechas
166234│ ├── correo_tareas/ # Módulo de gestión de correos que interactúa con la base de datos de tareas
@@ -611,7 +679,7 @@ El sistema soporta dos configuraciones SMTP:
611679| --------| -----------| -------|
612680| ` src/common/config.py ` | 88% | ✅ |
613681| ` src/common/database.py ` | 55% | ✅ |
614- | ` src/common/database_adapter .py ` | 95 % | ✅ |
682+ | ` src/common/task_registry .py ` | 64 % | ✅ |
615683| ` src/common/notifications.py ` | 100% | ✅ |
616684| ` src/common/utils.py ` | 49% | ✅ |
617685| ` src/correos/correos_manager.py ` | 91% | ✅ |
@@ -1015,7 +1083,7 @@ python tools/setup_local_environment.py --empty-correos
10151083
101610844 . ** Actualización de Vínculos** : Actualiza automáticamente todas las tablas vinculadas para que apunten a las bases de datos locales
10171085
1018- 5 . ** Logging Detallado** : Genera un log completo del proceso en ` setup_local_environment.log `
1086+ 5 . ** Logging Detallado** : Genera un log completo del proceso en ` logs/ setup_local_environment.log` (directorio de logs central). Si usas stack Grafana/Loki, puedes desactivar este archivo estableciendo la variable de entorno ` SETUP_LOCAL_FILE_LOG=0 ` y capturando stdout.
10191087
10201088** 📋 Casos de Uso Típicos:**
10211089
@@ -1430,7 +1498,7 @@ docker-compose down -v
14301498
14311499- ** config.py** : Gestión centralizada de configuración
14321500- ** database.py** : Abstracción para bases de datos Access con ODBC
1433- - ** database_adapter.py** : Adaptador de conexiones de base de datos
1501+ - (Eliminado) ` database_adapter.py ` sustituido por ` AccessDatabase `
14341502- ** utils.py** : Utilidades compartidas (HTML, fechas, logging)
14351503
14361504### Mejoras vs VBS Original
0 commit comments