CHEFMANAGER IA 3.17.8 - POS OFFLINE Y SINCRONIZACION SEGURA
============================================================

Esta entrega es acumulativa y se instala sobre la misma base de ChefManager 3.17.7.
La migración sqlite-v39-pos-offline.sql se ejecuta automáticamente y no elimina datos.

FUNCIONES IMPLEMENTADAS
-----------------------
1. El POS y sus dependencias principales (incluido React) se sirven localmente y quedan
   precargados por el Service Worker; no dependen de una CDN para arrancar.
2. Los GET operativos visitados por el POS se guardan en IndexedDB: catálogo, categorías,
   variantes, opciones, mesas, clientes, caja, impresión y configuración relacionada.
3. Sin conexión, el cajero puede crear pedidos/comandas con numeración provisional OFF-*.
4. Cada operación queda en una cola local visible en el POS con estado, intentos y error.
5. Al volver internet, la sincronización se ejecuta automáticamente o con el botón manual.
6. Cada pedido usa una clave idempotente. El servidor devuelve el pedido existente si recibe
   el mismo evento nuevamente y rechaza con conflicto si la clave trae contenido diferente.
7. La base registra auditoría en pos_offline_operations y relaciona la operación con el pedido.
8. Puede registrarse un cobro local pendiente. Se sincroniza después del pedido y siempre crea
   un recibo interno, nunca una factura fiscal electrónica mientras la operación está offline.
9. Si está habilitada la impresión automática de cocina, el POS genera una comanda local marcada
   como OFFLINE para imprimir en la impresora accesible desde la estación/red local.
10. El panel del POS muestra conexión, pendientes, conflictos, errores y sincronización en curso.

CONDICIONES OPERATIVAS IMPORTANTES
---------------------------------
- El navegador debe abrir el POS al menos una vez con conexión para guardar la aplicación,
  sesión operativa y catálogo vigente.
- IndexedDB y Service Worker requieren HTTPS (o localhost) y no deben bloquearse en el navegador.
- La caja debe haberse abierto antes de la caída. Al sincronizar, el servidor vuelve a comprobar
  permisos, caja, disponibilidad, precios, opciones, stock y reglas de negocio.
- Una comanda impresa localmente llega a cocina mediante el circuito de impresión local ya
  configurado. Un KDS en otro equipo requiere que el servidor ChefManager sea accesible por LAN;
  la aplicación no inventa conectividad entre dispositivos cuando la instalación vive solo en nube.
- Las operaciones que ya no cumplen reglas del servidor quedan como conflicto para revisión y no
  se fuerzan ni se duplican.
- Los cobros offline no deben usarse como confirmación de una pasarela que no haya autorizado
  realmente la transacción. El responsable conserva la obligación de conciliación.

ARCHIVOS PRINCIPALES
--------------------
- database/sqlite-v39-pos-offline.sql
- public/assets/offline-pos.js
- public/assets/react.production.min.js
- public/assets/react-dom.production.min.js
- service-worker.js
- public/assets/app.js
- api/index.php
- app/Support/Database.php

VALIDACION RECOMENDADA
----------------------
1. Ingresar, abrir caja y entrar al POS con conexión.
2. Esperar que carguen productos, mesas, clientes y configuración.
3. Activar modo sin conexión del navegador, recargar y crear un pedido.
4. Confirmar número OFF-*, impresión local y contador pendiente.
5. Restaurar conexión y pulsar "Sincronizar ahora".
6. Verificar un solo pedido en Pedidos y la operación en GET /api/index.php?path=pos-offline-sync.
7. Repetir la misma clave para comprobar que el servidor responde duplicate=true sin crear otro pedido.

LIMITACION LEGAL DELIBERADA
---------------------------
ChefManager 3.17.8 bloquea la factura fiscal electrónica para cobros originados offline. La emisión
fiscal solo puede procesarse con conexión y mediante el proveedor tributario legalmente configurado.
