# Guia de Configuracion ## config.json Archivo de configuracion principal con credenciales y rutas. **No commitear este archivo al repositorio.** ### Estructura completa ```json { "hana": { "server": "IP_DEL_SERVIDOR", "port": 30015, "user": "USUARIO_HANA", "password": "CONTRASENA_HANA" }, "outlook": { "client_id": "CLIENT_ID_AZURE_AD", "client_secret": "CLIENT_SECRET_AZURE_AD", "tenant_id": "TENANT_ID_AZURE_AD", "download_folder": "./adjuntos", "verify_ssl": false, "ca_bundle": null }, "smb": { "server": "IP_SERVIDOR_SMB", "username": "USUARIO_SMB", "password": "CONTRASENA_SMB", "share": "NOMBRE_DEL_SHARE", "mount_points": { "windows": "S:", "linux": "/mnt/FileSAP", "mac": "/Users/usuario/FileSAP", "docker": "/mnt/FileSAP" } }, "mails": [ { "email": "correo@empresa.com", "ruta_descarga": "./adjuntos/empresa", "ruta_final": "./resultado/empresa", "base_datos": "SBO_EMPRESA_XX", "usuario": "manager", "password": "CONTRASENA_SAP", "smb_folder": "/COMPRAS/EMPRESA/ADJUNTOS_CORREOS/2025-03" } ] } ``` ### Secciones #### hana Conexion a SAP HANA Database para consultas de datos de negocio. | Campo | Descripcion | |-------|-------------| | `server` | IP o hostname del servidor HANA | | `port` | Puerto (por defecto 30015) | | `user` | Usuario de conexion | | `password` | Contrasena | #### outlook Credenciales de la aplicacion registrada en Azure AD para Microsoft Graph API. | Campo | Descripcion | |-------|-------------| | `client_id` | ID de la aplicacion en Azure AD | | `client_secret` | Secreto de la aplicacion | | `tenant_id` | ID del tenant de Azure AD | | `download_folder` | Carpeta temporal para descarga de adjuntos | | `verify_ssl` | `true` para verificar certificados SSL, `false` para omitir | | `ca_bundle` | Ruta a bundle CA personalizado, `null` para usar el del sistema | **Como obtener credenciales de Outlook:** 1. Ir a [Azure Portal](https://portal.azure.com) > Azure Active Directory > App registrations 2. Crear una nueva aplicacion o usar una existente 3. Configurar permisos de Microsoft Graph: `Mail.Read` (delegated) 4. Copiar el Application (client) ID, Directory (tenant) ID, y crear un Client Secret #### smb Configuracion del servidor de archivos compartidos SMB/CIFS. | Campo | Descripcion | |-------|-------------| | `server` | IP o hostname del servidor SMB | | `username` | Usuario de autenticacion | | `password` | Contrasena | | `share` | Nombre del recurso compartido | | `mount_points` | Puntos de montaje segun el sistema operativo | Los `mount_points` se usan automaticamente segun donde se ejecute: - `docker` se usa cuando corre en contenedor - `linux`, `mac`, `windows` para ejecucion local #### mails Lista de buzones de correo a monitorear. Cada entrada es un buzón independiente. | Campo | Descripcion | |-------|-------------| | `email` | Direccion del buzón de correo | | `ruta_descarga` | Carpeta temporal para descargar adjuntos de este buzón | | `ruta_final` | Carpeta donde se mueven los archivos procesados | | `base_datos` | Codigo de base de datos SAP Business One | | `usuario` | Usuario de SAP Business One | | `password` | Contrasena de SAP Business One | | `smb_folder` | Ruta destino en el share SMB para sincronizar | Se pueden configurar multiples buzones en el array `mails`. --- ## scheduler.json Define los horarios de operacion del daemon. ### Estructura ```json { "HORARIOS": [ [6, 30, 13, 15, 300, "rapido"], [13, 15, 14, 0, 3600, "full"], [14, 0, 17, 30, 300, "rapido"], [17, 30, 21, 30, 3600, "full"] ], "DIAS_ACTIVOS": [0, 1, 2, 3, 4] } ``` ### HORARIOS Cada entrada es un array con 6 valores: ``` [hora_inicio, minuto_inicio, hora_fin, minuto_fin, intervalo_segundos, modo] ``` | Indice | Descripcion | |--------|-------------| | 0 | Hora de inicio (0-23) | | 1 | Minuto de inicio (0-59) | | 2 | Hora de fin (0-23) | | 3 | Minuto de fin (0-59) | | 4 | Intervalo entre ciclos en segundos | | 5 | Modo de operacion (`rapido` o `full`) | **Ejemplo:** `[6, 30, 13, 15, 300, "rapido"]` significa: - Activo desde las 06:30 hasta las 13:15 - Cada 300 segundos (5 minutos) - Modo rapido ### DIAS_ACTIVOS Array con los dias de la semana en formato numerico: | Valor | Dia | |-------|-----| | 0 | Lunes | | 1 | Martes | | 2 | Miercoles | | 3 | Jueves | | 4 | Viernes | | 5 | Sabado | | 6 | Domingo | **Ejemplo:** `[0, 1, 2, 3, 4]` = Lunes a Viernes ### Modos de operacion - **rapido**: Busca correos con frecuencia alta (cada 5 min). Indicado para horas pico. - **full**: Busca correos con frecuencia baja (cada 1 hora). Indicado para horas de baja actividad. --- ## Variables de Entorno | Variable | Valor | Descripcion | |----------|-------|-------------| | `PYTHONUNBUFFERED` | `1` | Desactiva buffering de Python para logs en tiempo real | | `TZ` | `America/Lima` | Zona horaria del contenedor | Estas se configuran en el `Dockerfile` y `docker-compose.yml`. --- ## Seguridad - **Nunca commitear** `config.json` al repositorio (ya esta en `.gitignore`) - Usar volumenes Docker montados como solo lectura (`:ro`) para archivos sensibles - En produccion, considerar usar Docker secrets o variables de entorno en vez de archivos JSON