# Web Push completo — SERINTSA build 20260803-59

## Incluye

- Push API y `PushSubscription` en el navegador.
- Service Worker para recibir notificaciones con la aplicación cerrada.
- Autenticación VAPID P-256.
- Cifrado `aes128gcm` del payload en el servidor.
- Suscripciones guardadas por usuario y dispositivo.
- Cola de entrega con reintentos y desactivación de endpoints vencidos.
- Envío inmediato al crear el ticket.
- Procesador CLI para reintentos mediante Cron de cPanel.
- Restricción: solo se notifican los Supervisores del área efectiva del ticket.

## Instalación

1. Extraer el parche en la raíz del proyecto y sobrescribir los archivos indicados.
2. Confirmar que el sitio se abre mediante HTTPS.
3. Ingresar como Supervisor y pulsar **Activar y probar**.
4. Aceptar el permiso del navegador.
5. La prueba debe llegar desde el servidor, no desde JavaScript local.

Las tablas se crean automáticamente cuando el primer Supervisor abre el sistema. Si el usuario de MySQL no posee permiso `CREATE`, importar manualmente:

`admin/sql/web_push_schema.sql`

## Cron recomendado en cPanel

Configurar una tarea cada minuto. Sustituir las rutas por las de la cuenta:

```text
* * * * * /usr/local/bin/php -q /home/USUARIO_CPANEL/public_html/mesa/admin/cron/process_web_push.php >/dev/null 2>&1
```

En algunos hostings la ruta de PHP puede ser una de estas:

```text
/usr/local/bin/ea-php82
/opt/cpanel/ea-php82/root/usr/bin/php
```

## Claves VAPID

Las claves se encuentran en:

`admin/config/webpush.local.php`

El archivo está bloqueado por `admin/config/.htaccess`. No cambie las claves después de que los dispositivos se hayan suscrito. Si se cambian, los usuarios deberán volver a suscribirse.

## Requisitos del servidor

- PHP 8.2 o superior.
- OpenSSL con soporte de curva P-256.
- cURL recomendado; existe un respaldo mediante streams PHP.
- Salida HTTPS por el puerto 443 hacia los servicios Push de los navegadores.

## iPhone / iPad

La aplicación debe agregarse a la pantalla de inicio. Después se abre desde el icono instalado y se pulsa **Activar y probar**.

## Archivos principales

- `admin/js/supervisor_browser_notifications.js`
- `admin/supervisor-notifications-sw.js`
- `admin/ajax/push_config_ajax.php`
- `admin/ajax/push_subscription_ajax.php`
- `admin/ajax/push_test_ajax.php`
- `admin/lib/WebPushLite.php`
- `admin/lib/SerintsaWebPushService.php`
- `admin/config/webpush.php`
- `admin/config/webpush.local.php`
- `admin/cron/process_web_push.php`
- `admin/sql/web_push_schema.sql`
