# Visor e Indexador Autónomo de Documentos Digitales (IoPlay DCM)

Sistema de indexación continua y visor web optimizado (Dark Theme, Iframe-ready) para consultar facturas y documentos históricos generados en lotes por fecha.

---

## Características Principales

1. **Indexador Continuo y Autónomo (`watcher.py` + `indexer.py`)**:
   - Monitorea el directorio de almacenamiento de facturas (`STORAGE_PATH`).
   - Detecta automáticamente cuando el directorio crece o ingresan nuevos archivos.
   - Indexa metadatos (`customer_id`, `document_date`, `year`, `month`, `file_relative_path`, `file_size`, `file_mtime`) en SQLite (`data/facturas_index.db`).
   - **Indexación incremental rápida**: Solo procesa archivos nuevos o modificados, omitiendo en milisegundos los ya indexados.

2. **Visor Web de Facturas (`server.py` - Puerto 4000)**:
   - Integración nativa como Iframe: `http://localhost:4000/?owner_id={codigo_suscriptor}`.
   - Vista enriquecida con soporte de Zoom (+, -, 100%, pantalla completa), Arrastre/Pan, Rotación 90°, Impresión directa y Descarga.
   - Filtros dinámicos por **Año** y **Mes**.
   - Solo lectura (`Read-Only`): No permite modificar ni sobreescribir archivos en el almacenamiento.

---

## Estructura de Directorios Esperada

El sistema soporta estructuras jerárquicas como:
```text
storage/facturas/
├── 20260904/
│   ├── 625036.jpg
│   ├── 625071.jpg
│   └── 625106.jpg
└── {cableoperador}/{agencia}/{YYYYMMDD}/
    └── {abonado_id}.jpg
```

---

## Ejecución Local con Python

```bash
cd ioplay-dcm

# 1. Instalar dependencias
pip install -r requirements.txt

# 2. Iniciar servidor e indexador en segundo plano
python server.py
```
Accede a: `http://localhost:4000/?owner_id=625036`

---

## Ejecución con Docker

Configura en `.env` la ruta de tus facturas en el Host:
```env
HOST_INVOICES_PATH=C:/ruta/a/tus/facturas
PORT=4000
```

Levanta el contenedor:
```bash
docker compose up -d --build
```

---

## Endpoints de la API REST

- `GET /?owner_id=625036`: Renderiza el visor web para el suscriptor especificado.
- `GET /api/documents?owner_id=625036&year=2026&month=9`: Lista JSON de facturas con filtros.
- `GET /api/customer/625036/years`: Años disponibles con facturas del cliente.
- `GET /api/documents/<id>/file`: Visualización segura de la factura.
- `GET /api/documents/<id>/file?download=1`: Descarga como archivo adjunto.
- `GET /api/indexer/status`: Estado, estadísticas y total de facturas indexadas.
- `POST /api/indexer/scan`: Fuerza un escaneo y reindexación inmediata.
- `POST /api/indexer/reset?reindex=1`: Limpia la base de datos y la deja lista para indexar.

---

## Inicialización / Limpieza de Base de Datos en Linux

Para vaciar la base de datos o dejarla lista antes de iniciar una indexación completa desde cero:

### Opción 1: Con el Script Bash en Servidor Linux (Recomendado)
```bash
cd ioplay-dcm

# Modo interactivo
./reset_db.sh

# Modo desatendido + reindexación inmediata
./reset_db.sh -f -r
```

### Opción 2: Ejecutando directamente con Docker
```bash
docker exec -it ioplay-dcm python reset_db.py --force --reindex
```

### Opción 3: Mediante la API REST (HTTP)
```bash
curl -X POST "http://localhost:4000/api/indexer/reset?reindex=1"
```

