VALIDACIÓN LOCAL · ChefManager 3.19.1-ge3 · 20/09/2026

188 verificaciones automatizadas superadas: 112 global/demos/PRO/comercial/interfaz,
34 paquetes a medida/delivery y 42 correo/landing.
98 archivos PHP sin errores de sintaxis y 5 JavaScript modificados verificados.
PHP 8.3.6, SQLite y Chromium 153 con Playwright. Instalaciones temporales aisladas.

Cobertura de interfaz: demos, red unificada y comisiones, ventas de todos los locales,
edición y vista previa de landing, borrador/publicación, correo y reenvío de acceso.
Revisión visual de escritorio y móvil (390 px); sin desbordamiento horizontal.
SMTP STARTTLS probado con certificado validado en servidor local de prueba.
Ningún correo externo, mensaje de WhatsApp ni transferencia bancaria real ejecutados.

Límites: no se instaló en producción ni se probó el SMTP del dominio del cliente.
No se realizaron pruebas de carga ni migración con una copia de su base operativa.
Configurar y probar el proveedor de correo real después de instalar.
Detalles de uso: docs/CORRECCIONES_DEMOS_DASHBOARD_Y_VENDEDORES.md.

GLOBAL, DEMOS, PRO, COMERCIAL E INTERFAZ
OK: Instalación limpia y SQLite íntegro
OK: Reapertura y migraciones conservan las ventas existentes
OK: API rechaza acceso sin sesión
OK: Página redirige al login sin sesión
OK: Servicio integrado: sales
OK: Servicio integrado: finance
OK: Servicio integrado: inventory
OK: Servicio integrado: payments
OK: Servicio integrado: brain
OK: Servicio integrado: chains
OK: Ventas cerradas, exclusión de pedidos impagos y límite final de fechas
OK: Devoluciones, costos y gastos por período
OK: Pronóstico original usa consumo y stock reales
OK: Pagos por confirmación y monedas separadas
OK: Pendientes vigentes sin tokens ni datos personales
OK: Red PRO del dueño consolida únicamente sus dos sucursales
OK: Browser desktop/mobile, branch filter, demo switching, no overflow or JavaScript errors
OK: Interfaz real en escritorio y móvil, filtros, cambio de demo y sin errores JavaScript
OK: Filtro por sucursal propia
OK: Rechazo de alcance ajeno: branch_id
OK: Rechazo de alcance ajeno: restaurant_id
OK: Rechazo de alcance ajeno: tenant_id
OK: Rechazo de alcance ajeno: chain_id
OK: Validación de entrada: {'from': '2020-02-30'}
OK: Validación de entrada: {'from': '2018-01-01'}
OK: Validación de entrada: {'from': '2020-02-01'}
OK: Validación de entrada: {'branch_id': '1 OR 1=1'}
OK: Validación de entrada: {'chain_id[]': '1'}
OK: Panel de solo lectura
OK: Ruta desconocida rechazada
OK: Alcance de sucursal se aplica también a la cadena
OK: Usuario de sucursal no puede cambiar a otra
OK: Permisos limitados no reciben métricas privadas
OK: Cuenta corporativa antigua no administra la red PRO del negocio
OK: Superadmin recibe ventas globales consolidadas
OK: Todas las ventas de locales, devoluciones y monedas separadas
OK: Detalle global excluye pedidos impagos y ventas fuera del período
OK: Filtro global de local y sucursal
OK: Filtro rechaza sucursal de otro local
OK: Propietario no consulta ventas de otros negocios
OK: Métricas globales protegidas para usuarios sin atribución
OK: Superadmin no consulta cadenas operativas de clientes
OK: Red de vendedores une nombre, venta, cobro confirmado y comisión sin duplicar prospectos
OK: Detalle vincula vendedor, cliente y paquete real
OK: Registro de pago de comisión exige referencia
OK: Comisión aprobada puede registrar su pago
OK: Dashboard comercial actualiza saldo y referencia del pago
OK: Comisión pagada conserva historial y no se reabre
OK: Vendedor solo consulta su propia cartera
OK: Negocio no accede a vendedores de la plataforma
OK: PRO reconoce cadena nacional y ciudades
OK: Superadmin no crea cadenas de los negocios
OK: Dueño PRO crea su local sin aprobación del Superadmin
OK: Dueño PRO no modifica sucursal de otro negocio
OK: Demo de plataforma excluye negocios reales
OK: Demo no puede abrir una cadena de negocios reales
OK: Demo Superadmin usa base independiente sin negocios reales
OK: Demo comercial incluye vendedores, ventas y tres estados de comisión
OK: Ingreso automático demo: superadmin
OK: Ingreso automático demo: platform_admin
OK: Ingreso automático demo: platform_sales
OK: Ingreso automático demo: platform_support
OK: Ingreso automático demo: platform_billing
OK: Ingreso automático demo: platform_analyst
OK: Ingreso automático demo: commission_seller
OK: Ingreso automático demo: multiempresa
OK: Ingreso automático demo: franchise_admin
OK: Ingreso automático demo: food_court_admin
OK: Ingreso automático demo: owner
OK: Ingreso automático demo: pro
OK: Ingreso automático demo: admin
OK: Ingreso automático demo: manager
OK: Ingreso automático demo: cashier
OK: Ingreso automático demo: waiter
OK: Ingreso automático demo: kitchen
OK: Ingreso automático demo: inventory
OK: Ingreso automático demo: delivery
OK: Ingreso automático demo: food_court
OK: Ingreso automático demo: food_court_tacos
OK: Ingreso automático demo: food_court_sushi
OK: Ingreso automático demo: franchise
OK: Ingreso automático demo: franchise_north
OK: Ingreso automático demo: franchise_south
OK: Cambio de perfil reutiliza Demo Total original
OK: Demo owner usa exclusivamente su negocio de ejemplo
OK: Superadmin real administra el catálogo completo de demos
OK: Superadmin agrega perfil demo público
OK: Nuevo demo aparece automáticamente en el selector público
OK: Superadmin puede ver la misma clave demo sin regenerarla
OK: Correo y clave demo abren exclusivamente una sesión de demostración
OK: Visitante demo no puede leer el catálogo privado ni las claves
OK: Visitante demo no obtiene claves administrativas
OK: Superadmin edita y oculta el perfil demo
OK: Demo oculto desaparece del selector público
OK: Demo oculto no permite ingreso automático público
OK: Demo privado conserva ingreso con su clave
OK: Desactivar un demo revoca su sesión en el siguiente acceso
OK: Superadmin regenera la clave demo
OK: La clave demo anterior deja de funcionar
OK: La nueva clave demo funciona
OK: Superadmin borra el perfil demo del catálogo
OK: El perfil borrado no reaparece al ejecutar las migraciones
OK: La clave de un perfil borrado no permite ingresar
OK: CRUD demo no crea usuarios en la base real
OK: Nuevo demo corporativo recibe la organización de ejemplo correspondiente
OK: Respeta desactivación de IA del negocio
OK: Fallo parcial visible sin convertir errores en ceros
OK: Paquete distinto de PRO no permite crear sucursales
OK: Módulos respetan el plan activo
OK: Suscripción vencida no se elude desde el panel global
OK: Integridad final de la base de prueba
OK: Consultas globales no modifican ventas
OK: Servidor sin errores fatales ni advertencias PHP

112 verificaciones superadas. Datos y credenciales temporales eliminados.

PAQUETES A MEDIDA Y DELIVERY
OK: Instalación limpia y SQLite íntegro
OK: Reapertura y migraciones conservan las ventas existentes
OK: Paquetes: prueba 60 días, Empresarial un local y PRO sucursales
OK: Empresarial y PRO comparten funcionalidades
OK: Tres paquetes a medida visibles en administración
OK: Ningún local puede crear paquetes a medida
OK: Multiempresa separa monedas y conserva operaciones por empresa
OK: Solo Superadmin habilita y deshabilita Multiempresa
OK: Multiempresa respeta empresas asignadas y oculta finanzas al analista
OK: Delivery manual prepara destinatario, dirección y saldo real
OK: Entrega completada libera chofer y no puede reabrirse por error
OK: Choferes y entregas no cruzan empresas
OK: Regalías calculadas sobre ventas registradas y contrato
OK: Pago parcial de regalías conserva saldo e historial
OK: Regalías pagadas sin sobrecobro ni sobrescritura
OK: Selector corporativo obtiene recetas reales de la casa matriz
OK: Receta diferente permanece pendiente, sin falsa conformidad
OK: Receta conforme verificada y bloqueada para conservar estándar
OK: Aprobación conserva condiciones comerciales solicitadas
OK: Franquicia bloqueada por Superadmin pierde acceso corporativo
OK: Patio habilita cobro central de forma independiente por local
OK: Pedido mixto separa saldo central de saldo por local
OK: Cobro central aplica solo al local habilitado y genera su venta
OK: El local cobra su parte en POS y el pedido mixto queda pagado
OK: Liquidación descuenta comisión y calcula importe a entregar al local
OK: Transferencia registrada y períodos de liquidación no duplicables
OK: Solo Superadmin puede habilitar el patio completo
OK: Menú público presenta productos y cobro por local
OK: Pedido público crea un subpedido real en cada local
OK: Seguimiento público muestra los dos locales y su pago pendiente
OK: Delivery y registro interno disponibles en Express, sin HR ni integraciones
OK: Native UI workflows, mobile landing, WhatsApp reviewed without opening or sending
OK: Interfaz: landing, paquetes, Multiempresa, Patio, Franquicia y WhatsApp sin envío
OK: Integridad SQLite tras operaciones y bloqueos
OK: Servidor sin errores fatales ni advertencias PHP

34 verificaciones superadas.

CORREO Y LANDING
OK: Correo desactivado y sin credenciales en respuesta inicial
OK: Local no puede leer configuración SMTP
OK: Vendedor interno no puede leer configuración SMTP
OK: Configuración de correo exige CSRF
OK: Superadmin guarda SMTP con clave protegida
OK: Archivo SMTP tiene permisos privados
OK: Producción rechaza enlaces de correo sin HTTPS
OK: Producción rechaza SMTP sin cifrado
OK: Editar configuración conserva clave SMTP al dejarla vacía
OK: Envío SMTP STARTTLS real aceptado por servidor de prueba local
OK: Prueba solo al superadmin autenticado; ignora destinatario arbitrario
OK: Alta de local envía acceso automáticamente sin marcar parámetro
OK: Correo contiene enlace seguro y omite contraseña temporal
OK: Nuevo propietario puede gestionar su red PRO sin quedar limitado a sucursal principal
OK: Reenvío directo genera enlace nuevo al correo registrado
OK: Base de datos guarda hash y no token de acceso
OK: Enlace anterior deja de servir tras reenvío
OK: Destinatario establece contraseña con enlace recibido
OK: Enlace de acceso es de un solo uso
OK: Local puede enviar acceso a su propio equipo
OK: Local no puede enviar accesos a otro negocio
OK: Local no puede enviar acceso de superadmin
OK: Error SMTP visible sin perder la cuenta creada
OK: Acceso fallido puede reintentarse desde el sistema
OK: API de configuración general nunca expone contraseña SMTP
OK: Guardar borrador de landing
OK: Borrador persiste entre sesiones
OK: Borrador no modifica página pública
OK: Vista previa usa textos, colores y secciones reales sin publicar
OK: Editor rechaza inyección CSS
OK: Editor rechaza URL de logo ejecutable
OK: Local no puede publicar landing de ChefManager
OK: Publicar aplica el borrador a la página pública
OK: Publicación limpia borrador pendiente
OK: Demo superadmin inicia en entorno separado
OK: Demo no lee credenciales del servidor
OK: Demo no envía correos reales
OK: Alta y reenvío de acceso desde navegador
OK: Navegador crea local con envío automático, muestra fallo y reenvía desde ventana de acceso
OK: Recuperación pública limita reenvíos por cuenta y mantiene respuesta genérica (4 correos nuevos; 5 enlaces)
OK: Todos los mensajes se capturaron en SMTP local con destinatarios ficticios
OK: Servidor sin errores PHP, advertencias ni obsolescencias
OK: Base de prueba íntegra

42 verificaciones de correo y landing superadas. No se enviaron correos externos.
