# Guía de despliegue — Versión PHP + MySQL sobre XAMPP

Arquitectura: **PHP (interfaz + login MySQL)** sobre XAMPP/Apache, que llama al
**motor Python + Playwright** para operar el sistema de Insico.

```
Navegador ─> Apache/PHP (XAMPP) ─llama─> engine.py (Python + Playwright) ─> Insico
             login MySQL, historial          escribe estado/<job>.json
```

## 1. Requisitos en el servidor (Windows)

1. **XAMPP** (Apache + MySQL + PHP 8+). PHP debe tener `pdo_mysql` (viene por defecto).
2. **Python 3.11+** con las dependencias:
   ```
   pip install -r requirements.txt
   python -m playwright install chromium
   ```

## 2. Base de datos

1. Abre **phpMyAdmin** (http://localhost/phpmyadmin) e importa `sql/schema.sql`
   (crea la base `licencias_lapintana` y las tablas `usuarios` e `historial`).

## 3. Configuración

1. **Python:** copia `.env.example` a `.env` y completa las credenciales de Insico.
2. **PHP:** copia `php/config.example.php` a `php/config.php` y ajusta:
   - `db_user` / `db_pass` de MySQL.
   - `python_bin`: ruta a `python.exe` (ej. `C:\\Python313\\python.exe` o `python` si está en el PATH).
   - `project_dir`: por defecto es la carpeta padre de `/php` (no lo toques si dejas la estructura).

## 4. Publicar en Apache (XAMPP)

Opción simple: crea un **alias** en Apache apuntando a la carpeta `php/` del proyecto.
En `xampp\apache\conf\extra\httpd-vhosts.conf` (o `httpd.conf`) agrega:

```apache
Alias /licencias "C:/ruta/al/proyecto/php"
<Directory "C:/ruta/al/proyecto/php">
    Require all granted
    DirectoryIndex index.php
</Directory>
```

Reinicia Apache. Entra a **http://localhost/licencias/**

> El motor escribe en `entradas/`, `documentos/` y `estado/` (en la raíz del
> proyecto). Asegúrate de que el usuario de Apache tenga permiso de escritura ahí.

## 5. Crear el usuario administrador

Por navegador (una vez):
```
http://localhost/licencias/crear_usuario.php?u=admin&c=TU_CLAVE_SEGURA&nombre=Administrador&rol=admin
```
o por consola:
```
php php/crear_usuario.php admin TU_CLAVE_SEGURA "Administrador" admin
```
Luego **elimina o protege** `crear_usuario.php`.

> **Roles:** hay dos perfiles: **admin** (puede crear usuarios desde el menú 👥 Usuarios)
> y **usuario** (solo procesa y ve el historial). El admin crea al resto desde la app.
>
> **¿Ya tenías la base creada antes de los roles?** Ejecuta una vez `sql/migracion_roles.sql`
> en phpMyAdmin para agregar la columna `rol` y marcar a `admin`.

## 6. Acceso desde internet (opcional, con seguridad)

Este sistema guarda credenciales de Insico y datos de sueldos. Si lo expones a internet:

- **Usa HTTPS** (con XAMPP: configura SSL en Apache; o pon **IIS** delante como
  reverse proxy con certificado). Sin HTTPS las claves viajan en texto plano.
- **Restringe por IP** o **VPN** siempre que sea posible (mucho más seguro).
- Clave de admin robusta; revisa `usuarios` periódicamente.

### Alternativa: IIS como reverse proxy
Si prefieres IIS en vez de Apache: instala **URL Rewrite + ARR**, publica el sitio
PHP (o usa Apache de XAMPP en localhost) y deja que IIS ponga el HTTPS al frente.

## Estructura del proyecto

```
engine.py            Motor: PHP lo invoca; escribe estado/<job>.json
automation.py        Automatización Playwright (login, formulario, Cobro SIL)
remuneraciones.py    Extrae remuneraciones del PDF y escribe en el Excel
excel_reader.py      Lectura del Excel
leer_excel.py        Helper: Excel -> JSON (vista previa en PHP)
sueldos_excel.py     Helper: historial -> Excel de sueldos
config.py / .env     Config del motor Python
php/                 Interfaz web (PHP): login MySQL, procesar, historial, descargas
  config.php         (NO en git) credenciales MySQL y rutas
  assets/            flatpickr (datepicker)
sql/schema.sql       Tablas usuarios + historial
```

## Nota

La versión **Flask** (`web.py`) sigue funcionando como alternativa todo-en-Python
(sin PHP/MySQL). La versión PHP es para desplegar sobre XAMPP con login en MySQL.
