Files
TransferData-main/README.md
T
2026-05-09 14:00:04 -04:00

131 lines
5.2 KiB
Markdown

# DataTransferV2
## Descripción
DataTransferV2 es una aplicación automatizada de ETL (Extract-Transform-Load) desarrollada en Python que extrae datos de bases de datos SQL Server, los transforma en reportes Excel y los distribuye a través de múltiples plataformas como FTP, SFTP, SharePoint y webhooks N8N. El sistema se ejecuta de manera programada y incluye una interfaz web para ejecución manual de ETL y una API para descargas de datos.
La aplicación está diseñada para automatizar transferencias de datos de inteligencia de negocio para clientes minoristas, procesando reportes comerciales (Cobertura, Negociadas, Promociones, QualityDisplay, Checkout, etc.) en una ventana móvil de 3 días.
**Versión:** 2.0.0
**Autor:** eurbina
## Características Principales
- **Soporte Multi-Proyecto:** Maneja proyectos independientes como PG (Pentagono Group), FEDURO y Corripio con configuraciones aisladas.
- **Procesamiento Multi-Reporte:** Procesa 16-18 reportes por proyecto automáticamente.
- **Procesamiento por Lotes:** Ejecuta una ventana móvil de 3 días (hoy, ayer, anteayer).
- **Múltiples Distribuciones:** FTP, SFTP, SharePoint, webhooks N8N y notificaciones WhatsApp.
- **Manejo de Errores:** Errores no bloqueantes permiten que el pipeline continúe; errores catastróficos se registran.
- **Lógica de Reintento:** Reintentos automáticos para subidas FTP fallidas.
- **Registro de Auditoría:** Todas las ejecuciones se registran en la base de datos con timestamps, estados y mensajes.
- **Soporte de Zonas Horarias:** Manejo explícito para zonas horarias de Centroamérica y el Caribe.
- **Interfaz Web:** Interfaz para disparadores manuales de ETL con selección de proyecto/reporte/fechas.
- **API REST:** Endpoint para descargas de datos con parámetros de consulta.
- **Contenedorizado:** Configuración Docker y Docker Compose para despliegue.
## Tecnologías Utilizadas
- **Lenguaje:** Python 3.x
- **Framework Web:** Flask
- **Base de Datos:** SQL Server (via pyodbc)
- **Formatos de Archivo:** Excel (openpyxl, pandas)
- **Integración en la Nube:** SharePoint (office365), Azure Storage Blob
- **Transferencia de Archivos:** FTP, SFTP (paramiko), webhooks N8N
- **Notificaciones:** WhatsApp (via webhooks)
- **Programación:** APScheduler (programación de tareas en segundo plano)
- **Autenticación:** Tokens Bearer, credenciales de usuario
- **Pruebas:** pytest
- **Contenedorización:** Docker & Docker Compose
## Arquitectura y Componentes
### Estructura del Proyecto
- **main.py:** Punto de entrada principal para ejecución programada de ETL.
- **main2.py:** Versión alternativa/prototipo.
- **App/Config/:** Configuraciones por proyecto (GeneralConfig, pgConfig, feduroConfig, etc.).
- **App/Services/:** Servicios core (etl_service, api_service, ui_service).
- **App/Utils/:** Utilidades (db_utils, report_utils, ftp_utils, sftp_utils, sharepoint_utils, notification_utils).
- **App/Models/:** Modelos de base de datos (actualmente vacío).
- **App/Static/ y App/Templates/:** Recursos estáticos y plantillas para la UI web.
- **requirements.txt:** Dependencias Python.
- **Dockerfile y docker-compose.yml:** Configuración para contenedorización.
- **Tests/ y tests/:** Pruebas unitarias.
- **Logs/:** Archivos de log.
- **Reportes/:** Reportes generados organizados por proyecto y tipo.
### Flujo de Datos
1. **Inicialización:** Carga configuraciones de proyectos.
2. **Para cada proyecto:** Itera sobre reportes y fechas (3 días).
3. **ETL por reporte:**
- **Extract:** Consulta SQL Server.
- **Transform:** Genera archivo Excel.
- **Load:** Distribuye según flags de configuración (FTP, SFTP, SharePoint, N8N).
4. **Agregación de Resultados:** Cuenta éxitos, fallos, errores y advertencias.
5. **Notificaciones:** Envía resumen por WhatsApp.
## Instalación y Configuración
### Prerrequisitos
- Python 3.x
- SQL Server con bases de datos configuradas
- Credenciales para FTP, SFTP, SharePoint
- Docker (opcional para contenedorización)
### Instalación
1. Clona el repositorio.
2. Crea un entorno virtual: `python -m venv env`
3. Activa el entorno: `env\Scripts\activate` (Windows)
4. Instala dependencias: `pip install -r requirements.txt`
### Configuración
Edita los archivos en `App/Config/` para configurar:
- Credenciales de base de datos
- Endpoints de FTP/SFTP/SharePoint
- Webhooks de notificaciones
## Uso
### Ejecución Automática
Ejecuta `python main.py` para procesar todos los proyectos y reportes en la ventana de 3 días.
### Interfaz Web
Lanza la UI: `python -m flask run` (desde App/) y accede a `http://localhost:5000` para ejecución manual.
### API
Endpoint: `GET /api/download?project=<>&task=<>&start_date=<>&end_date=<>`
Devuelve datos en JSON/CSV.
### Docker
```bash
docker build -t datatransfer .
docker run -p 5000:5000 datatransfer
```
## Estado Actual
- **Proyectos Activos:** PG, FEDURO (Corripio comentado)
- **Reportes:** ~16-18 por proyecto
- **Procesamiento Diario:** ~102 ejecuciones ETL por ciclo
## Notas de Seguridad
- Las credenciales están hardcodeadas en GeneralConfig.py (considera usar variables de entorno).
- Implementa autenticación adecuada para producción.
## Contribuciones
Si deseas contribuir, por favor contacta al autor o crea un issue en el repositorio.
## Licencia
[Especifica la licencia si aplica]