@@ -28,8 +28,7 @@ El **script maestro (`run_master.py`)** es el corazón del sistema y reemplaza a
28285 . ** Riesgos** (` run_riesgos.py ` ): Gestión de riesgos empresariales
2929
3030#### Tareas Continuas (ejecutadas en cada ciclo):
31- 6 . ** Correos** (` run_correos.py ` ): Sistema de envío de correos
32- 7 . ** Correo Tareas** (` run_correo_tareas.py ` ): Sistema de gestión de correos que interactúa con la base de datos de tareas
31+ 6 . ** Email Services** (` run_email_services.py ` ): Servicio unificado de envío de correos (fusiona antiguos módulos ` correos ` y ` correo_tareas ` )
3332
3433### 🆕 Cambios Arquitectónicos Recientes (Refactor 2025)
3534
@@ -105,10 +104,10 @@ Ejemplo de runner minimalista:
105104``` python
106105import sys
107106from common.utils import execute_task_with_standard_boilerplate
108- from correos.correos_task import CorreosTask
107+ from email_services.email_task import EmailServicesTask
109108
110109def main ():
111- task = CorreosTask ()
110+ task = EmailServicesTask ()
112111 code = execute_task_with_standard_boilerplate(" CORREOS" , task_obj = task)
113112 sys.exit(code)
114113
@@ -247,8 +246,7 @@ scripts-python/
247246│ │ └── add_status_to_tareas_db.py # Migración estado tareas
248247│ ├── run_agedys.py # Script para módulo AGEDYS
249248│ ├── run_brass.py # Script principal para módulo BRASS
250- │ ├── run_correo_tareas.py # Script para módulo correo tareas
251- │ ├── run_correos.py # Script para módulo correos
249+ │ ├── run_email_services.py # Runner unificado de servicios de correo
252250│ ├── run_expedientes.py # Script para módulo expedientes
253251│ ├── run_master.py # Script maestro - daemon principal con modo verbose
254252│ ├── run_no_conformidades.py # Script para no conformidades
@@ -277,14 +275,10 @@ scripts-python/
277275│ │ ├── task_registry.py # Registro de tareas (TaskRegistry OO)
278276│ │ ├── user_adapter.py # Adaptador de usuarios
279277│ │ └── utils.py # Utilidades HTML, logging, fechas
280- │ ├── correo_tareas / # Módulo de gestión de correos que interactúa con la base de datos de tareas
278+ │ ├── email_services / # Módulo unificado de correos (correos + tareas)
281279│ │ ├── __init__.py
282- │ │ ├── correo_tareas_manager.py # Gestor de correos para tareas empresariales
283- │ │ └── correo_tareas_task.py # Tareas de correo
284- │ ├── correos/ # Módulo de correos
285- │ │ ├── __init__.py
286- │ │ ├── correos_manager.py # Gestor de correos
287- │ │ └── correos_task.py # Tareas de correos
280+ │ │ ├── email_manager.py # Lógica centralizada de envío
281+ │ │ └── email_task.py # Task continua unificada
288282│ ├── expedientes/ # Módulo de expedientes
289283│ │ ├── __init__.py
290284│ │ ├── expedientes_manager.py # Gestor de expedientes
@@ -316,8 +310,7 @@ scripts-python/
316310│ │ ├── __init__.py
317311│ │ ├── agedys/ # Integración del sistema AGEDYS
318312│ │ ├── brass/ # Integración del sistema brass
319- │ │ ├── correo_tareas/ # Integración del sistema de correo tareas
320- │ │ ├── correos/ # Integración del sistema de correos
313+ │ │ ├── email_services/ # Integración del servicio unificado de correos
321314│ │ ├── database/ # Integración con bases de datos
322315│ │ ├── expedientes/ # Integración del sistema de expedientes
323316│ │ ├── no_conformidades/ # Integración no conformidades
@@ -327,7 +320,7 @@ scripts-python/
327320│ ├── agedys/ # Tests específicos AGEDYS
328321│ ├── brass/ # Tests específicos BRASS
329322│ ├── common/ # Tests módulos comunes
330- │ ├── correos / # Tests del módulo de correos
323+ │ ├── email_services / # Tests del servicio unificado de correos
331324│ ├── expedientes/ # Tests del módulo de expedientes
332325│ ├── no_conformidades/ # Tests no conformidades
333326│ └── riesgos/ # Tests del módulo de riesgos
@@ -728,7 +721,7 @@ El sistema soporta dos configuraciones SMTP:
728721| ` src/common/task_registry.py ` | 64% | ✅ |
729722| ` src/common/notifications.py ` | 100% | ✅ |
730723| ` src/common/utils.py ` | 49% | ✅ |
731- | ` src/correos/correos_manager .py ` | 91% | ✅ |
724+ | ` src/email_services/email_manager .py ` | 91% | ✅ |
732725| ` src/expedientes/expedientes_manager.py ` | 98% | ✅ |
733726| ` src/riesgos/riesgos_manager.py ` | 90% | ✅ |
734727
@@ -1081,15 +1074,12 @@ python scripts/run_riesgos.py # Ejecución normal
10811074python scripts/run_riesgos.py --force # Fuerza ejecución
10821075python scripts/run_riesgos.py --dry-run # Modo simulación
10831076
1084- # Correos - Sistema de envío de correos
1085- python scripts/run_correos.py # Ejecución normal
1086- python scripts/run_correos.py --force # Fuerza ejecución
1087- python scripts/run_correos.py --dry-run # Modo simulación
1077+ # Email Services - Servicio unificado de correo (remplaza correos y correo_tareas)
10881078
1089- # Tareas - Sistema de gestión de tareas
1090- python scripts/run_correo_tareas.py # Ejecución normal
1091- python scripts/run_correo_tareas .py --force # Fuerza ejecución
1092- python scripts/run_correo_tareas .py --dry-run # Modo simulación
1079+ # ## Manejo de errores transitorios SMTP (Refactor 2025)
1080+ Los errores de conexión SMTP (p.ej. desconexión inesperada, ` SMTPConnectError ` , ` ConnectionRefusedError ` ) ahora se consideran ** transitorios ** y no marcan el correo como fallido en la base de datos. El registro permanece pendiente para reintentos en futuros ciclos. Sólo errores definitivos (credenciales inválidas, destinatario rechazado, formato de mensaje inválido) marcan el correo como fallido. Esto incrementa la resiliencia ante caídas puntuales del servidor de correo.
1081+ python scripts/run_email_services .py # Ejecución normal
1082+ python scripts/run_email_services .py --force # (Reservado) Fuerza ejecución
10931083
10941084# Tests
10951085python scripts/run_tests.py
0 commit comments