# Procesador de Facturas Mercedes-Benz

Sistema de procesamiento automático de facturas Mercedes-Benz en PDF. Extrae, clasifica y agrupa facturas basándose en metadatos (número de factura, página, código postal) extraídos de regiones específicas de cada página. Genera códigos de barras Code128, calcula estadísticas de zonas de Correos y produce un ZIP final para envío.

## Instalación

```bash
pip3 install -r requirements.txt
cp .env.example .env  # Configurar credenciales FTP
```

## Configuración

Editar `.env` con las credenciales:

```bash
# FTP
FTP_HOST=tu_servidor_ftp.com
FTP_USER=tu_usuario
FTP_PASS=tu_contraseña

# Mailjet (para notificaciones por email)
MAILJET_API_KEY=tu_api_key
MAILJET_SECRET_KEY=tu_secret_key
MAILJET_SENDER_EMAIL=remitente@tudominio.com
MAILJET_SENDER_NAME=FRESBE x Daimler Trucks
MAILJET_RECIPIENT_EMAIL=destinatario@ejemplo.com
```

## Uso

### Procesar facturas

```bash
# Procesar todos los PDFs de la carpeta 'input'
python3 process_invoices.py

# Procesar y subir por FTP
python3 process_invoices.py --ftp

# Procesar, subir por FTP y enviar email de notificación
python3 process_invoices.py --ftp --email

# Procesar un PDF específico
python3 process_invoices.py <pdf_path>

# Procesar un PDF específico, subir y notificar
python3 process_invoices.py <pdf_path> --ftp --email
```

Si no se especifica un PDF, el script busca automáticamente en `input/` y mueve los archivos procesados a `data/XXXX/origin/`.

### Utilidades para explorar PDFs

```bash
# Extraer texto de una región específica
python3 tools/extract_region.py extract <pdf> <page> <x0> <y0> <x1> <y1>

# Buscar coordenadas de un texto
python3 tools/extract_region.py find <pdf> <texto> [page]

# Ver dimensiones del PDF
python3 tools/extract_region.py dims <pdf>

# Listar todas las palabras con coordenadas
python3 tools/extract_region.py words <pdf> [page]
```

### Herramienta Web

Abrir `tools/GUI_pdf_extractor.html` en el navegador para definir coordenadas visualmente. Permite seleccionar regiones arrastrando sobre el PDF y exportar como código Python.

## Pipeline de Procesamiento

El sistema ejecuta 7 pasos secuenciales:

1. **Extracción**: Separa cada página en archivos individuales, extrae metadatos, mueve región definida y añade código de barras Code128.

2. **Agrupación**: Combina páginas que pertenecen a la misma factura, ordenadas por número de página.

3. **Unificación**: Agrupa todas las facturas según su número de páginas, ordenadas por código postal.

4. **Estadísticas**: Calcula y exporta estadísticas de zonas de Correos basándose en códigos postales.

5. **ZIP**: Empaqueta los PDFs unificados en un archivo comprimido.

6. **FTP** (opcional): Sube el ZIP al servidor FTP en la carpeta `DAIMLER_TRUCKS`.

7. **Email** (opcional con `--email`): Envía notificación por email con los archivos de estadísticas y confirmación FTP adjuntos. El asunto incluye el ID de ejecución (ej: `[DAIMLER] 20260508_201030`) e indica si el FTP fue exitoso o fallido.

## Estructura de Salida

```
data/YYYYMMDD_HHMMSS/
├── origin/  # PDFs originales (si se procesa desde carpeta input)
├── step1/   # Páginas individuales con código de barras
├── step2/   # Facturas agrupadas
├── step3/   # PDFs unificados por número de páginas
└── output/
    ├── estadisticas_correos.txt   # Estadísticas por zona
    └── DAIMLERTRUCKS_*.zip        # ZIP final
```

## Zonas de Correos

El sistema clasifica los envíos según el código postal español:

| Zona | Descripción |
|------|-------------|
| 1 | Nacional Local (CP 280xx) |
| 2 | Destino 1 Canarias (CP 350xx, 380xx y listado especial) |
| 3 | Destino 1 Ceuta (CP 51xxx) |
| 4 | Destino 1 Melilla (CP 52xxx) |
| 5 | Destino 2 Canarias (resto de 35xxx, 38xxx) |
| 6 | Destino 2 Andorra (CP ADxxx) |
| 7 | Destino 1 (CP xx0xx y listado especial) |
| 8 | Destino 2 (resto) |
| 9 | Internacional |
