first commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# 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]
|
||||
Reference in New Issue
Block a user