INSTALADOR SERVIDOR - T MARKET POS

Usa esta carpeta solo en la computadora principal.

Modos del instalador:

1. Actualizar sistema del servidor
   - Usa esta opcion cuando ya tienes el servidor instalado y solo quieres meter una version nueva.
   - No desinstala nada.
   - Conserva data, licencia, respaldos y base SQLite.
   - Crea respaldo automatico antes de copiar archivos nuevos.

2. Instalar limpio / nueva PC
   - En una PC nueva instala el sistema limpio, sin productos ni ventas de otra tienda.
   - Si ya existe una base en la carpeta elegida, la conserva y crea respaldo.
   - No busca ni copia bases externas de C:\TMarketPOS o C:\TMarketTPV.

3. Migrar servidor / restaurar respaldo
   - Usa esta opcion cuando quieras llevar los datos de otra PC.
   - Debes indicar un archivo .sqlite o una carpeta data.

Pasos:

1. Ejecuta "instalar-servidor-tmarket.bat".
2. Elige el modo:
   - Opcion 1 para actualizar un servidor ya instalado.
   - Opcion 2 para cliente nuevo o instalacion limpia.
   - Opcion 3 para restaurar respaldo/migrar.
3. Carpeta recomendada:
   C:\TMarketPOS
4. Puerto recomendado:
   3030
5. Si quieres que arranque solo al prender la computadora, responde S en "Iniciar servidor con Windows".
6. Si quieres que otras PCs entren por red, responde S en "Preparar regla de firewall".
   Si Windows pide permisos de administrador, aceptalos.
7. Al terminar, abre el acceso "T Market POS - Iniciar servidor" o deja que se inicie automaticamente.
8. Los accesos directos usaran el icono del logo de T Market.
9. Tambien aparecera en el menu Inicio y en Configuracion > Aplicaciones instaladas como:
   T Market POS Servidor
10. Si estas actualizando una instalacion existente, el instalador conserva la carpeta data y crea respaldo automatico antes de copiar archivos nuevos.
11. Si estas migrando a otra PC, usa la opcion 3 y escribe la ruta del archivo .sqlite o carpeta data.

URL local:

http://localhost:3030

URL para otras PCs:

http://IP-DE-LA-COMPUTADORA-SERVIDOR:3030

La base de datos quedara en:

C:\TMarketPOS\data\tmarket.sqlite

Respaldos:

Copia la carpeta:

C:\TMarketPOS\data

Archivo principal:

C:\TMarketPOS\data\tmarket.sqlite

Tambien puedes usar respaldos generados por el sistema:

C:\TMarketPOS\backups\*.sqlite

Migrar servidor a otra PC:

1. En la PC vieja crea respaldo desde Administracion > Base de datos.
2. Copia el archivo .sqlite a una USB o a la nueva PC.
3. En la PC nueva ejecuta este instalador.
4. Cuando pregunte "Ruta de respaldo para restaurar", pega la ruta del .sqlite.
5. Termina la instalacion y entra a Administracion > Conectar dispositivos para reconectar clientes y Android.

Actualizaciones:

- Para actualizar sin desinstalar, ejecuta el instalador y elige:
  1. Actualizar sistema del servidor
- El instalador NO borra la base existente.
- En una PC nueva NO incluye tus productos. Crea una base limpia.
- Antes de actualizar crea respaldo automatico en:
  C:\TMarketPOS\backups\installer-backup-FECHA
- Tambien copia un .sqlite al escritorio en:
  TMarketPOS-respaldos
- Antes de copiar archivos nuevos, el instalador revisa la salud de la base.
- Si detecta muchos precios de venta en cero, detiene la actualizacion o usa un respaldo sano de la misma instalacion.
- No usa bases externas automaticamente. Para migrar datos, usa la opcion "Migrar servidor / restaurar respaldo".
- Usa siempre la carpeta recomendada C:\TMarketPOS para evitar dos bases diferentes.

Desinstalar:

Configuracion > Aplicaciones instaladas > T Market POS Servidor > Desinstalar.
El desinstalador intentara detener el servidor y copiara data, backups, manifiesto y archivos LEEME al escritorio antes de borrar la instalacion.

Usuarios default:

- Administrador / 0000
- Cajero 1 / PIN aleatorio / Inactivo

Inicio visual:

El programa incluye una animacion de arranque con hexagonos que forman el logo.

Notas:

- La computadora servidor debe permanecer encendida.
- Si cambia la IP del servidor, vuelve a generar o reinstalar los accesos clientes con la nueva URL.
- Si la PC no tiene Node.js compatible con node:sqlite, el instalador intentara usar winget y,
  si no queda compatible, descargara un Node.js portatil dentro de C:\TMarketPOS\runtime\node.
  No necesitas desinstalar el Node viejo de Windows.



CAMBIO DE ESTA VERSION - LIBRERIAS LOCALES
------------------------------------------
El instalador intenta descargar y guardar localmente las librerias de la interfaz en:
C:\TMarketPOS\public\vendor

Esto reduce la dependencia de internet para:
- Iconos de la interfaz
- Exportar PDF
- Importar/exportar Excel
- Codigos de barras
- OCR/Tesseract

Si no hay internet durante la instalacion, el sistema conserva respaldo por CDN para no romper funciones.
Cuando tengas internet, puedes ejecutar:
PowerShell -ExecutionPolicy Bypass -File descargar-librerias-locales.ps1 -InstallDir "C:\TMarketPOS"


CAMBIO DE ESTA VERSION - CIERRE SEGURO DE CAJA
----------------------------------------------
Se quitó la sincronización antigua con Google Sheets / Google Apps Script.

El cierre de caja ahora revisa antes de guardar:
- Que el servidor local responda.
- Que la sesión siga válida.
- Que no existan movimientos offline pendientes.
- Que no exista una venta actual sin cobrar.

Si todo está correcto, guarda el corte normal.

Si hay problemas, el sistema ofrece:
- Reintentar revisión.
- Guardar cierre provisional local.
- Hacer cierre forzado con autorización de administrador.

El cierre forzado queda marcado en auditoría.
Los cierres provisionales se guardan localmente y el sistema intenta confirmarlos cuando vuelve la conexión con el servidor.


CAMBIO DE ESTA VERSION - MODO OFFLINE MEJORADO
-----------------------------------------------
Se reforzó el modo offline para ventas:

- Las ventas que no puedan confirmarse contra el servidor se guardan en una cola offline.
- Cada venta offline genera alerta en Auditoría IA como "Venta offline pendiente".
- El botón/indicador "En línea / por sincronizar" abre una ventana de pendientes offline.
- Desde esa ventana se puede reintentar sincronización o exportar respaldo JSON de pendientes.
- Al sincronizar una venta offline, el servidor evita duplicados con clientRequestId.
- Si una venta offline deja inventario negativo, se registra alerta crítica en Auditoría IA.
- La alerta crítica trae botón "Agregar inventario" para abrir Ajustar inventario con el SKU precargado.
- El servidor permite inventario negativo solo cuando la venta viene marcada como venta offline recuperada.

CAMBIO DE ESTA VERSION - VENTAS APP ANDROID LIGADAS A CAJA PC
-------------------------------------------------------------
Se reforzó el servidor para que la app Android no abra caja propia.

Nuevo comportamiento:
- Si el usuario inicia sesión desde Android, el servidor crea una sesión de acceso, pero sin caja propia.
- Las ventas recibidas desde Android se ligan automáticamente a una caja abierta en PC del mismo usuario.
- Si no existe caja abierta en PC para ese usuario, la venta Android se rechaza con aviso para abrir sesión en la PC y reintentar sincronización.
- Las entradas y salidas de efectivo desde Android quedan bloqueadas del lado servidor.
- Si Android intenta hacer movimiento de efectivo, se genera alerta en Auditoría IA.
- Cada venta móvil ligada a caja PC queda registrada en Auditoría IA.

Idea operativa recomendada:
1. El cajero abre turno/caja en la PC.
2. El mismo usuario inicia sesión en la app Android.
3. Si se va la luz o falla la PC, la app puede capturar ventas offline.
4. Cuando vuelva el servidor, las ventas se sincronizan hacia la caja PC abierta del mismo usuario.
5. Si todavía no hay caja PC abierta, la app debe mantener esas ventas pendientes y reintentar cuando el usuario vuelva a iniciar sesión en la PC.


CAMBIO DE ESTA VERSION - REPORTES DE CORTES
-------------------------------------------
Se corrigieron dos problemas en los reportes de cortes:
- La fecha del arqueo/corte ahora usa la fecha local de la PC, no UTC. Esto evita que un turno nocturno del 27 aparezca como 28 por desfase horario.
- Los cortes ahora llevan clientRequestId y el servidor evita duplicarlos si hay reintento, doble clic, sincronización posterior o recuperación de cierre provisional.
- En reportes se deduplican visualmente cortes con la misma sesión de caja / clientRequestId.


CAMBIO DE ESTA VERSION - NOTIFICACIONES TIPO FACEBOOK
-----------------------------------------------------
El botón de notificaciones de Auditoría IA ahora abre un panel flotante con las últimas alertas.
Cada alerta abre Auditoría IA y el botón "Ver todo" abre la vista completa.


CAMBIO DE ESTA VERSION - ESTABILIDAD DE SESION Y RESPALDOS
----------------------------------------------------------
1) Sesion vencida / servidor reiniciado:
- Se agrego indicador visual de estado de sesion/servidor.
- Si el servidor rechaza la sesion, el POS guarda la venta actual temporalmente.
- Al volver a iniciar sesion, el sistema ofrece recuperar la venta pendiente.
- Se registra alerta en Auditoria IA cuando ocurre sesion vencida y cuando se recupera una venta.

2) Respaldos automaticos:
- Al iniciar el servidor se crea un respaldo diario automatico si aun no existe uno del dia.
- Se guarda en la carpeta backups\daily.
- Se conservan los ultimos 30 respaldos diarios.
- Si falla el respaldo diario, se registra alerta en Auditoria IA.
- El instalador ya conserva respaldo previo antes de actualizar o reiniciar datos.


CAMBIO DE ESTA VERSION - ACTUALIZADOR SEGURO Y AMIGABLE
-------------------------------------------------------
Esta version pone enfasis en evitar perdida de datos durante instalacion, actualizacion o reparacion.

Protecciones agregadas:
- Detecta si ya existe una base de datos en C:\TMarketPOS\data\tmarket.sqlite.
- Antes de actualizar crea respaldo preventivo verificado.
- El respaldo se guarda en C:\TMarketPOS\backups\pre-update.
- Tambien deja copia extra en el Escritorio dentro de TMarketPOS-respaldos.
- Verifica tamaño y hash SHA256 del respaldo antes de copiar archivos nuevos.
- Si ocurre un error durante la actualizacion, intenta restaurar la carpeta data desde el respaldo preventivo.
- Conserva productos, ventas, cortes, usuarios, licencia, respaldos y configuracion de data.
- Crea install-manifest.json con fecha, modo de instalacion, version, puerto, URLs y respaldo usado.
- Agrega acceso "Reparar instalacion T Market POS" en el menu Inicio.
- El diagnostico y el LEEME instalado explican rutas de base de datos y respaldos.

Uso recomendado:
1. Cierra el TPV en las PCs cliente.
2. Ejecuta el instalador en la PC servidor.
3. Si ya existe instalacion, se tratara como actualizacion/reparacion.
4. Revisa al final la ruta de respaldo preventivo mostrada en pantalla.
5. Abre T Market POS y confirma productos, ventas y cortes.

Nota:
El instalador no borra la carpeta data. Para reiniciar base o restaurar respaldo se usan las opciones de Administracion del programa o el parametro RestoreBackupPath.


CAMBIO DE ESTA VERSION - SESION VENCIDA NO INVASIVA
---------------------------------------------------
Se corrigió el flujo de sesión vencida:
- Ya no muestra alertas repetidas que bloquean al usuario.
- Usa aviso flotante temporal en lugar de alertas invasivas.
- Al vencer la sesión, limpia correctamente el usuario activo para mostrar el login.
- Permite escribir usuario y PIN nuevamente.
- Evita bucle al intentar registrar la alerta de sesión vencida en Auditoría IA.
- Conserva la venta actual para recuperación después del login.


CAMBIO v5.3 - DIAGNÓSTICO ADMIN MÍNIMO
--------------------------------------
Se corroboró que el sistema ya tenía muchas funciones de diagnóstico y respaldos.
Para evitar redundancia, no se creó un módulo nuevo. Se agregó una tarjeta "Diagnóstico rápido"
dentro de Administración > Base de datos y respaldos.

La tarjeta muestra:
- Versión del servidor.
- Estado del servidor.
- URL principal para clientes.
- Estado/tamaño de la base de datos.
- Último respaldo diario.
- Último respaldo pre-update.
- Estado de librerías locales.
- Usuario/caja activa.
- Rutas de base, respaldos y HTML servido.

También se agregó botón para exportar diagnóstico en JSON.


CAMBIO v5.4.1 - MODULARIZACIÓN BASE DEL MÓDULO VENTAS
------------------------------------------------------
Se inició la separación gradual del módulo Ventas sin mover toda la lógica de golpe.

Nuevo archivo:
- public/modules/ventas.js

Qué se separó en esta primera etapa:
- Generación de clientRequestId.
- Guardado/lectura de ventas actuales pendientes.
- Limpieza de ventas pendientes.
- Detección de venta recuperable.
- Utilidades seguras de localStorage para ventas y colas.

La lógica visual y de cobro sigue dentro del HTML principal para reducir riesgo.
Esta versión deja preparada la base para mover más funciones de ventas en v5.4.x.


CORRECCIÓN v5.4.2 - RESTAURAR BACKUP / MIGRACIÓN
------------------------------------------------
Se corrigió un fallo al iniciar servidor con bases existentes/restauradas:
SQLite no permite agregar una columna nueva con DEFAULT CURRENT_TIMESTAMP sobre una tabla ya creada.
La migración de cut_reports.created_at ahora agrega la columna con valor vacío y luego rellena fecha por código.
Esto permite arrancar con respaldos anteriores sin borrar datos.


CAMBIO v5.4.3 - ALERTAS IA REVISADAS
------------------------------------
Se agregó control de seguimiento para Auditoría IA:
- Botón "Marcar revisado" por alerta.
- Botón "Marcar pendiente" para revertir.
- Filtro Estado: Pendientes, Revisadas, Todas.
- Métrica de alertas pendientes.
- Las alertas revisadas ya no cuentan como notificaciones pendientes en la campana.
- El estado revisado se guarda en la base de datos dentro del payload de la alerta.


CAMBIO v5.4.4 - ALERTAS DE INVENTARIO Y LISTA DE COMPRA
--------------------------------------------------------
Se ajustaron las alertas de bajo inventario para no confundir al capturar pedidos:
- Cuando un producto bajo/agregado ya está en lista de compra, deja de aparecer como pendiente.
- Nuevo filtro Estado en alertas: Pendientes, En lista, Todas.
- En la pantalla principal de inventario también se agregó filtro por estado.
- El tablero rápido muestra solo pendientes reales; los enviados a lista quedan en "En lista".
- No se elimina el producto de la lista ni se marca como recibido; solo cambia cómo se muestra la alerta.


CAMBIO v5.4.5 - PEDIDOS / AUDITORÍA / TOTAL VISIBLE
----------------------------------------------------
Se corrigieron dos puntos:
1) Al convertir productos de lista de compra a pedido, ya no se manda una alerta por cada producto quitado.
   Ahora se registra un solo evento "Pedido generado" con botón "Ver detalle de pedido".
2) En Punto de venta, el total queda fijo/visible en la parte inferior del panel de venta actual.
   Se ajustó CSS para pantallas horizontales de poca altura.


CAMBIO v5.4.6 - TOTAL VISIBLE EN MÓDULO VENTAS
-----------------------------------------------
Se ajustó específicamente el módulo Ventas / Punto de venta:
- La pantalla POS ahora usa una altura segura basada en la ventana visible.
- El bloque Artículos / Total queda dentro del panel Venta actual y no debajo de la pantalla.
- El carrito se desplaza si hay muchos productos, pero el total se mantiene visible.
- Se agregaron reglas para pantallas horizontales/bajas como escritorio remoto o ventanas con barra de tareas.


CAMBIO v5.4.7 - COTIZACIÓN HOJA CARTA
--------------------------------------
Se corrigieron detalles de la hoja carta de cotización:
- Se agregó control "Mover encabezado carta Y mm" para subir o bajar el encabezado.
- La cotización usada en venta se marca como "Procesada".
- Al imprimir una cotización procesada, el título cambia a "Nota procesada".
- El folio usa texto plano "Folio:" para evitar caracteres/cuadritos raros.
- En ticket de cotización procesada también se usa "NOTA PROCESADA".


CAMBIO v5.4.8 - ALERTAS, PEDIDOS Y TAREAS
------------------------------------------
Se corrigieron tres puntos:
1) Las alertas locales de sesión vencida ya se pueden marcar como revisadas sin error "Alerta no encontrada".
2) Recibir un pedido existente ahora usa la ruta de recepción del pedido y queda ligado al pedido original.
   El pedido original se marca como recibido y deja de aparecer como pendiente en la pantalla principal.
3) Las tareas ahora tienen control de repetición:
   - Reiniciar cada semana
   - Reiniciar diario
   - Reiniciar cada mes
   - No reiniciar
   Las tareas completadas se reinician automáticamente al nuevo periodo, según su configuración.


CAMBIO v5.4.9 - AUDITORÍA IA REVISADO PERSISTENTE
--------------------------------------------------
Se corrigió que algunas alertas marcadas como revisadas volvieran a aparecer al salir y entrar.
Ahora el estado revisado se guarda también en una llave local persistente por ID y por firma de alerta.
Esto cubre:
- Alertas locales de sesión vencida.
- Alertas que primero fueron locales y luego se sincronizaron con servidor.
- Alertas que vuelven a mezclarse al recargar el estado del servidor.


CAMBIO v5.5.0 - LOGO Y MARCA DE AGUA EN VENTAS
-----------------------------------------------
Se actualizó el logo principal del programa con la imagen proporcionada.
También se agregó como marca de agua suave dentro del panel "Venta actual" del módulo Punto de venta.
La marca de agua queda detrás del carrito y los totales para no tapar la operación.


CAMBIO v5.5.1 - ALERTAS DE PRODUCTOS Y CONTROL DE CORTES
---------------------------------------------------------
Se agregaron avisos para productos sin movimiento:
- Si un producto activo tiene más de 10 días sin compra, venta ni ajuste, se genera alerta en Auditoría IA.
- Desde la alerta se puede mantener activo o enviarlo a productos en pausa.
- Los productos pausados ya no aparecen para vender ni generan alerta de bajo inventario.

Se agregaron controles suaves en cortes:
- Si hay gastos/proveedor pero no hay retiros capturados en el corte, se muestra aviso antes de guardar.
- Si no se detecta captura de efectivo final, se muestra aviso antes de guardar.
- Si hay faltante de $50 o más, la nota es obligatoria.
- Si hay sobrante de $100 o más, la nota es obligatoria.


CAMBIO v5.5.2 - PRODUCTOS EN PAUSA COMO DEPARTAMENTO
-----------------------------------------------------
Se cambió la lógica de productos en pausa:
- Ya no se ocultan del punto de venta.
- Al enviar un producto a pausa, se mueve al departamento "Productos en pausa".
- Si aún tiene piezas, sigue apareciendo para vender.
- Se conserva el departamento anterior para poder reactivarlo.
- Las alertas de bajo inventario no se generan para productos pausados.


CAMBIO v5.5.3 - AHORRO EN TICKET
---------------------------------
Se agregó aviso de ahorro en tickets de venta:
- Si un producto se vendió con mayoreo 1, mayoreo 2, promoción o precio autorizado menor al precio normal, el renglón muestra el ahorro.
- Al final del ticket aparece "UD. AHORRO" con el ahorro total.
- También aplica en impresión tipo hoja carta.


CAMBIO v5.5.4 - CENTAVOS EN PRECIOS Y COBRO
--------------------------------------------
Se corrigió el manejo de centavos en ventas:
- Los precios de venta, mayoreo y promoción se normalizan a centavos en el cálculo.
- Los totales de ticket se redondean a 2 decimales de forma consistente.
- Tarjeta, transferencia, crédito y puntos comparan contra el total ya normalizado a centavos.
- Se evita que el sistema pida una cantidad "completa" diferente por diferencias internas de decimales.
- El servidor también redondea importes finales a centavos al guardar ventas.


CAMBIO v5.5.5 - OPTIMIZACIÓN AL CAMBIAR DE MÓDULO
--------------------------------------------------
Se corrigió lentitud al cambiar de módulo:
- Ya no se renderiza el inicio al abrir cualquier módulo.
- La revisión de productos sin movimiento ya no se ejecuta de forma pesada en cada cambio de pantalla.
- La revisión se programa en segundo plano al entrar al inicio.
- Se agregó caché para calcular últimos movimientos por producto una sola vez por estado de datos.
- Se limita la creación de alertas de productos sin movimiento a lotes para evitar congelamientos.


CAMBIO v5.5.6 - RECEPCIÓN DE PEDIDO A NOTA DE COMPRA
----------------------------------------------------
Se corrigió el flujo de recepción de pedidos:
- Al presionar "Recibir pedido" ya no se recibe directo.
- Ahora el pedido se carga en el módulo "Recepciones de compra".
- La nota queda ligada al pedido original con sourceOrderId.
- Al guardar la recepción de compra, el servidor actualiza inventario y marca el pedido como recibido.
- Permite revisar cantidades, costos, venta, impuestos, flete y cambios antes de guardar.


CAMBIO v5.5.7 - PIE DE HOJA CARTA FIJO Y EDITABLE
-------------------------------------------------
Se corrigió impresión en hoja carta:
- El pie de página con totales queda fijo por defecto en el último cuarto de la hoja.
- Se agregó ajuste "Altura pie carta mm" en administración.
- Totales y pie se mantienen a la altura indicada aunque haya pocos productos.
- Se conservan márgenes clásicos de carta.
- Se limitó la altura del documento a una hoja para evitar página adicional en blanco.


CAMBIO v5.5.8 - FORMATO DE TICKET VISIBLE
-----------------------------------------
Se reforzó la opción para escoger el formato de impresión:
- El selector ahora dice claramente "Formato ticket de venta".
- Incluye ticket térmico 50/58/60/72/76/80/82 mm y hoja carta.
- Se aclaró que las cotizaciones/notas procesadas tienen su propio selector.


CAMBIO v5.5.9 - VISTA PREVIA EDITABLE SEGÚN FORMATO
----------------------------------------------------
Se mejoró la vista previa de impresión:
- La altura del encabezado y del pie de página ahora se ajustan dentro de la vista previa editable.
- La vista previa del ticket de venta cambia según el formato seleccionado: ticket térmico o hoja carta.
- Si el ticket de venta está en hoja carta, la vista previa muestra hoja carta con encabezado y pie fijos.
- El selector de cotizaciones/notas procesadas sigue separado del ticket de venta.


CAMBIO v5.5.10 - VISTA CARTA VERTICAL SIN SELECTOR EXTRA
--------------------------------------------------------
Se corrigió la vista previa cuando ticket de venta y cotización/nota procesada están en hoja carta:
- Si ambos son carta, las vistas se acomodan verticalmente para que no se amontonen.
- Primero aparece cotización / nota procesada editable.
- Debajo aparece ticket de venta / nota de venta.
- Se quitó el selector extra dentro de la vista previa; se usa el selector principal de formato.


CAMBIO v5.5.11 - PESTAÑAS DE VISTA PREVIA Y ALTO DE ENCABEZADO
---------------------------------------------------------------
Se mejoró la edición de formatos de impresión:
- La vista previa se separó en pestañas: Ticket de venta y Cotización / nota procesada.
- Ya no se muestran ambas hojas carta al mismo tiempo.
- El ajuste del encabezado ahora define el alto reservado del encabezado, no la posición donde empieza.
- El pie de carta conserva su altura configurable.
- El ticket de venta cambia su vista previa según el formato elegido: térmico o carta.


CAMBIO v5.5.12 - EDITAR Y ELIMINAR DEPARTAMENTOS
------------------------------------------------
Se mejoró el gestor de departamentos:
- Cada departamento ahora muestra botones Editar y Eliminar.
- Editar renombra el departamento y actualiza productos, inventario interno y etiquetas ligadas.
- Eliminar permite borrar departamentos sin uso.
- Si el departamento tiene productos/etiquetas ligados, pide un departamento destino para reasignar antes de eliminar.


CAMBIO v5.5.13 - PREVENTA/ENTREGA Y PEDIDO POR ESCANEO
-------------------------------------------------------
Se mejoró proveedores y pedidos:
- Proveedores ahora tienen días de preventa/pedido y días de entrega.
- En Inicio puede aparecer el mismo proveedor como preventa para hacer pedido y como entrega para recibir nota, según el día.
- Si el proveedor es tipo Entrega y solo usa días de visita, se conserva compatibilidad.
- En lista de compras, al escanear/agregar SKU se abre ventana para capturar cantidad.
- Al presionar Enter en cantidad, agrega el producto, cierra la ventana y regresa al campo SKU para seguir escaneando.


CAMBIO v5.5.14 - NOTIFICACIONES Y SELECTORES AL EDITAR PRODUCTO
----------------------------------------------------------------
Se mejoraron notificaciones:
- La campana se marca en rojo cuando hay notificaciones sin abrir.
- El contador muestra las notificaciones pendientes de abrir.
- Al abrir la campana o entrar a Auditoría IA, se marcan como vistas.

Se corrigió edición de producto:
- Al editar un producto, departamento y proveedor ya no se reinician al primero de la lista cuando el sistema se refresca o cambia de módulo.
- Si el producto tiene un proveedor/departamento que no está en la lista, se conserva temporalmente para evitar pérdida del valor al editar.


CAMBIO v5.5.15 - REINICIAR CONTEO AL MANTENER PRODUCTO ACTIVO
-------------------------------------------------------------
Se ajustó la alerta de productos sin movimiento:
- Al presionar "Mantener activo", se guarda la fecha de revisión.
- El conteo de 10 días se reinicia desde esa fecha.
- Si el producto no tiene venta, compra, ajuste ni nueva revisión durante otros 10 días, vuelve a generar alerta.
- Si hay movimiento real antes de 10 días, el conteo se reinicia por ese movimiento.


CAMBIO v5.5.16 - ALERTA CON DÍAS EXACTOS SIN MOVIMIENTO
-------------------------------------------------------
Se mejoró el texto de la alerta de productos sin movimiento:
- El título ahora indica los días exactos, por ejemplo: "Producto sin movimiento: 15 días".
- La referencia también muestra SKU y días.
- El detalle explica desde qué fecha se cuenta y que "Mantener activo" reinicia el conteo.


CAMBIO v5.5.17 - ALERTA DE PRODUCTOS SIN INVENTARIO POR CATEGORÍA
-----------------------------------------------------------------
Se mejoró la alerta de productos inactivos:
- Si el producto tiene stock 0 o menor, la alerta dice "Producto sin inventario: X días".
- La alerta incluye categoría/departamento, SKU y días exactos.
- La severidad sube a Alta cuando el producto está sin inventario.
- Si todavía tiene stock, mantiene la alerta "Producto sin movimiento: X días".


CAMBIO v5.5.18 - SESIONES SEGURAS ADMIN
- Regla: una sesión/caja activa por usuario y dispositivo.
- Si el mismo usuario intenta entrar en la misma PC con sesión abierta, el sistema permite reanudar o cerrar y abrir nueva con autorización.
- Salir ahora valida si hay ventas o movimientos sin corte. Si hay actividad, pide ir a corte o cierre forzado por admin/autorizado.
- El administrador también recibe advertencia al salir si tiene actividad sin corte.
- Se agrega permiso: Forzar cierre de sesiones.
- Se reemplaza Reportes > Capturadora por Reportes > Monitoreo de sesiones.
- Monitoreo permite ver sesiones abiertas, actividad y forzar cierre.


CAMBIO v5.5.19 - UI DE SESIONES Y FILTROS
- Reemplaza confirm/prompt/alert de cierre/login de sesiones por avisos visuales tipo modal.
- Agrega métricas visuales en avisos de sesión: ventas, movimientos, caja, corte.
- Agrega filtros en Monitoreo de sesiones: categoría, usuario, dispositivo y estado.
- No se toca cálculo de caja.


CAMBIO v5.5.20 - SALIR SEGURO SESIONES
- Refuerza servidor /logout: si hay ventas o movimientos sin corte, bloquea cierre normal y requiere corte o cierre forzado autorizado.
- Refuerza UI del botón Salir con avisos visuales y motivo obligatorio para cierre forzado.
- Mantiene regla una sesión activa por usuario/dispositivo.
- No toca cálculo de caja.


CAMBIO v5.5.21 - AVISO AL REABRIR SESION
- Si se cierra el programa sin usar Salir, al abrir de nuevo ya no entra directo sin avisar.
- Al arrancar detecta sesión abierta guardada y muestra aviso visual: Reanudar sesión o Salir/cerrar.
- Si hay ventas o movimientos sin corte, recomienda entrar a hacer corte o forzar cierre solo si el usuario está autorizado.
- Mantiene regla una sesión activa por usuario/dispositivo.
- No toca cálculo de caja.


CAMBIO v5.5.22 - AUDITORIA FLUIDA Y AVISOS CLAROS
- Los modales de sesión ya no muestran "Dato requerido" de forma genérica: ahora piden PIN de administrador/autorizado o Motivo del cierre forzado.
- Auditoría IA usa títulos y detalles más amigables en campana y tabla.
- Al actuar desde Auditoría IA (pausar producto, mantener activo, editar/revisar precio, abrir pedido, agregar inventario) la alerta se marca como revisada.
- Al mover productos a pausa desde Auditoría IA no se genera una alerta nueva de auditoría por esa misma acción.
- No se toca cálculo de caja.


CAMBIO v5.5.23 - AVISOS SIN DATO REQUERIDO
- Se elimina por completo el texto genérico "Dato requerido" de los avisos visuales.
- Si el campo es para autorización, ahora muestra: PIN de administrador/autorizado.
- Si el campo es para cierre forzado, ahora muestra: Motivo del cierre forzado.
- Si algún aviso futuro usa campo de texto sin etiqueta, mostrará: Información solicitada.
- No se toca cálculo de caja.


CAMBIO v5.5.24 - PIN PARA REANUDAR SESIÓN
- Si se cierra el programa sin usar Salir, ya no permite reanudar una sesión guardada sin PIN.
- Para reanudar sesión abierta pide claramente: PIN del usuario para reanudar sesión.
- El PIN se valida en servidor con /api/session/confirm-pin.
- Si el PIN es incorrecto o se cancela, limpia la sesión local y regresa a pantalla de login.
- Se reemplaza el texto ambiguo "Información solicitada" por etiquetas concretas.
- No se toca cálculo de caja.


CAMBIO v5.5.25 - PIN OBLIGATORIO PARA REANUDAR
- Corrige el caso donde se podía presionar Reanudar sin escribir PIN.
- El modal ya no cierra ni continúa si el campo PIN está vacío.
- Se elimina el bypass persistente de reanudación guardado en localStorage.
- Cada vez que el programa se cierra sin Salir y se abre de nuevo, debe pedir PIN del usuario para reanudar.
- El PIN sigue validándose en servidor con /api/session/confirm-pin.
- No se toca cálculo de caja.


CAMBIO v5.5.26 - REANUDAR SIN PIN / FORZAR CON PIN
- Al reabrir una sesión activa, sigue apareciendo la ventana de aviso.
- Reanudar sesión ya no pide PIN.
- El PIN solo se pide si se elige Forzar cierre.
- El cierre forzado acepta PIN de administrador/autorizado desde el servidor.
- Si no hay movimientos, Salir/cerrar sesión puede cerrar normal.
- No se toca cálculo de caja.


CAMBIO v5.5.27 - CÁLCULO MÍNIMO DE MANEJO DE CAJA
- El efectivo esperado ahora se calcula por sesión con una sola regla:
  ventas en efectivo netas + entradas de efectivo POS - salidas de efectivo POS.
- Los pagos/gastos por tarjeta o transferencia ya no descuentan efectivo.
- El cambio entregado al cliente se descuenta del efectivo total de la venta, incluyendo ventas con dólares.
- El campo interno sistema efectivo ahora guarda el efectivo esperado, no el efectivo bruto.
- Los retiros manuales del corte siguen sumándose al arqueo: físico contado + retiros manuales.
- Se agregan advertencias si hay salidas POS y retiros manuales al mismo tiempo, para evitar duplicar una salida.
- No se tocaron sesiones, login, inventario ni ventas.


CAMBIO v5.5.28 - DÓLARES Y PUNTOS EN MANEJO DE CAJA
- Los dólares recibidos se muestran separados como dólares físicos y como equivalente en MXN.
- Los dólares convertidos a MXN siguen formando parte del efectivo esperado.
- El cambio entregado al cliente se muestra como dato separado.
- Los puntos usados no suman a efectivo, tarjeta ni transferencia; quedan informativos.
- Los puntos otorgados quedan informativos.
- El corte guarda desglose de dólares, cambio y puntos dentro de cashCalculation.


CAMBIO v5.5.29 - PUNTOS, DEVOLUCIONES, CANCELACIONES Y CRÉDITO
- La utilidad bruta ahora descuenta el costo de puntos otorgados desde el momento en que se generan.
- En reportes, cortes y calculadora de utilidades, la utilidad mostrada queda después de restar puntos otorgados.
- El corte guarda utilidad antes de puntos, costo de puntos y utilidad después de puntos.
- Cancelaciones/devoluciones de ticket no cuentan en ventas ni caja porque dejan de estar Completadas.
- Si una devolución pertenece a una sesión anterior y se devuelve efectivo en la sesión actual, se registra salida de efectivo POS para afectar la caja actual.
- Si la venta fue a crédito y se cancela/devuelve, se reversa el adeudo del cliente.
- Si se redimieron puntos y se cancela/devuelve, se regresan al cliente.
- Si se otorgaron puntos y se cancela/devuelve, se descuentan del cliente.
- Los abonos de crédito siguen entrando a caja solo si fueron en efectivo; tarjeta/transferencia quedan informativos y no afectan efectivo esperado.


CAMBIO v5.5.30 - PERMISOS Y DEVOLUCIÓN PARCIAL
- Se agregan permisos separados: Cancelar tickets de venta y Devolver productos/tickets.
- Administrador los trae por defecto; cajeros deben recibirlos manualmente si se desea.
- En Historial de ventas los botones quedan como Cancelar ticket y Devolver productos.
- Si el usuario activo no tiene permiso, aparece una ventana para capturar usuario y PIN autorizado.
- El servidor valida el permiso; no depende solo de la pantalla.
- La devolución permite seleccionar todo el ticket, ciertos productos o cantidades parciales.
- La devolución parcial ajusta inventario, reduce la venta restante y registra auditoría.
- Si la devolución corresponde a una venta de otra sesión y se devuelve efectivo, se registra salida de efectivo en la caja actual.


CAMBIO v5.5.31 - AVISOS SIN CAMPO INNECESARIO
- Corrige el aviso visual al cerrar sesión: ya no muestra campo ni texto de "escribe información" cuando no se requiere escribir nada.
- El campo del modal solo aparece cuando realmente se necesita, por ejemplo PIN, usuario autorizado o motivo de cierre forzado.
- Se agregó regla CSS para ocultar correctamente el campo aunque el modal use display:grid.
- No se tocaron cálculos de caja ni devolución parcial.


CAMBIO v5.5.32 - DEVOLUCIÓN, TICKET Y CORTE SEGURO
- Reimpresión de ticket después de devolución parcial: si hubo devolución parcial, el ticket se reconstruye con los productos/cantidades actuales.
- Se agregó nota de devolución imprimible con folio original, productos devueltos, importe, método, motivo y usuario que autorizó.
- La devolución permite elegir método: efectivo, tarjeta, transferencia, puntos, saldo/crédito cliente o sin devolución de dinero.
- Si un ticket ya pertenece a un corte cerrado, se bloquea la cancelación normal; se permite devolución con autorización.
- Si se devuelve efectivo de un ticket de corte cerrado o de otra sesión, se registra salida de efectivo POS en la caja actual.
- Historial de ventas muestra "Devolución parcial" cuando una venta quedó completada pero ya tuvo productos devueltos.


CAMBIO v5.5.33 - LISTA DE COMPRA A PEDIDO / BORRADOR
- En Lista de compra se agrega casilla "Seleccionar todos visibles".
- El botón cambió a "Añadir a pedido" para no confundirlo con recibir nota.
- Añadir a pedido abre un borrador editable por proveedor; no genera pedido hasta presionar Pedir.
- Si hay productos de varios proveedores, se pide seleccionar proveedor.
- Las cantidades se ajustan a múltiplos de piezas por paquete cuando el producto tiene packagePieces; se pueden editar en el borrador/pedido.
- Al cerrar un borrador sin pedir, muestra aviso con tres opciones: salir sin guardar, guardar pedido, o salir y guardar borrador.
- Los pedidos y borradores guardan packagePieces y requestedQuantity para conservar el contexto del ajuste.
- No se tocaron caja, sesiones ni devoluciones.


CAMBIO v5.5.34 - COSTOS CON CENTAVOS, CAMBIO A PUNTOS Y EDICIÓN DE PEDIDOS
- Los precios de costo se conservan como decimal; no se convierten a entero al guardar producto, importar o sincronizar.
- En Cobrar se agregó la casilla "Enviar cambio a puntos".
- Si hay cambio y se marca esa casilla, el sistema pide confirmar cuántos puntos se enviarán.
- El cambio enviado a puntos se suma al cliente y ya no queda como cambio en efectivo a entregar.
- El servidor valida que exista cliente seleccionado para enviar cambio a puntos.
- En detalle de pedidos se agregó "Añadir producto".
- En pedidos se pueden editar cantidades/costos/precios y borrar líneas antes de guardar o recibir.
- Al capturar SKU en una línea nueva de pedido, se autocompletan descripción, costo y precio si existe en catálogo.


CAMBIO v5.5.35 - PRODUCTOS SUGERIDOS SIN DUPLICAR LISTA/PEDIDOS
- Productos sugeridos ya no muestra productos que estén en lista de compra.
- Productos sugeridos ya no muestra productos que estén en pedidos pendientes, borradores o pedidos generados.
- El filtro "En lista" ahora se llama "En lista / pedido" y muestra ambos casos.
- Si se elimina el producto de la lista de compra o de un pedido, vuelve a sugeridos si sigue por debajo del mínimo.
- Si un pedido se recibe/cierra y un producto no llegó o ya no está en el pedido, vuelve a sugeridos si sigue bajo inventario.
- No se tocaron cobros, caja ni devoluciones.


CAMBIO v5.5.36 - CLIENTE POR VENTA Y RESPALDO DE MAYOREO
- Cada venta/pestaña del POS guarda su propio cliente y teléfono de puntos.
- Al cambiar de venta ya no se hereda el cliente de otra venta abierta.
- Al cobrar, la venta usa el cliente propio de esa pestaña, evitando aplicar mayoreo de otro cliente.
- Si un cliente tiene Mayoreo 2 pero el producto tiene Mayoreo 2 en cero, se usa Mayoreo 1.
- Si Mayoreo 1 también está en cero, se usa Precio general.
- Si Precio general está en cero, entonces sí se bloquea el cobro.


CAMBIO v5.5.37 - VENTA CON INVENTARIO NEGATIVO CONTROLADA Y PIN TEMPORAL
- En Configuración > General se agregó "Permitir vender con inventario negativo".
- Se puede elegir quién puede hacerlo: solo administrador/PIN temporal, cajeros seleccionados, o todos.
- Se agregó permiso de cajero "Vender sin inventario".
- Al vender con inventario insuficiente se pide motivo, confirma la venta y se genera alerta en Auditoría.
- Si el producto queda en -3 o menos (configurable), se avisa al cajero que debe notificar al administrador.
- La alerta de Auditoría incluye botón "Ajustar inventario" directo al ajuste del producto.
- Se agregó generador de PIN temporal de administrador en Configuración > General.
- El PIN temporal se guarda con vigencia y sirve para autorizar venta negativa u otras acciones que validen PIN de administrador.


CAMBIO v5.5.37.1 - ARRANQUE SEGURO
- Corrección de seguridad sobre v5.5.37 para evitar que configuración vieja o PIN temporal mal guardado impida iniciar.
- Validación de PIN temporal protegida: si falla, usa PIN admin normal y no tumba el servidor.
- Configuración de venta con inventario negativo ahora se normaliza con valores por defecto.
- La revisión de inventario negativo en pantalla de cobro queda protegida para no romper el POS.
- Mantiene: permiso vender sin inventario, alerta de auditoría, botón ajustar inventario y PIN temporal.


CAMBIO v5.5.37.2 - FIX INTRO / ARRANQUE
- Se corrigió un error de JavaScript que dejaba el programa pegado al terminar el video de introducción.
- Causa: quedó un "async" suelto antes de una función de pedidos/lista de compra.
- El error no aparecía en la revisión de sintaxis, pero sí al cargar en navegador.
- Mantiene las funciones de v5.5.37.1: venta negativa controlada, auditoría y PIN temporal.


CAMBIO v5.6 - PANTALLA CLIENTE Y PUBLICIDAD
- En Configuración > General se agregó Pantalla para cliente.
- Botón para abrir una segunda ventana ligera: customer-display.html.
- La segunda ventana muestra productos escaneados, subtotal, total, pagado, cambio y cliente.
- La zona derecha muestra publicidad/promociones.
- Se agregó lista de reproducción de imágenes/videos por URL o ruta pública.
- La comunicación usa BroadcastChannel/localStorage; no abre otra copia completa del POS.
- Pensada para segunda pantalla en Windows usando modo Extender pantalla.


CAMBIO v5.6.1 - INVENTARIO NEGATIVO DESDE EL CARRITO
- Corrige el bloqueo que impedía agregar productos al carrito cuando el stock estaba en 0.
- Si "Permitir vender con inventario negativo" está activo, el producto se puede agregar a la venta.
- La autorización/motivo se sigue pidiendo al cobrar, no al escanear.
- Las tarjetas de búsqueda ya no se deshabilitan cuando el producto tiene 0 si venta negativa está activada.
- También se permite aumentar cantidad y vender a granel por encima del stock cuando la configuración lo permite.
- Mantiene pantalla cliente y publicidad de v5.6.


CAMBIO v5.6.2 - CONFIGURACIÓN ORGANIZADA, CARPETA DE PUBLICIDAD Y PUNTOS DECIMALES
- Se reorganizó Configuración > General en secciones separadas: impuestos/envíos, inventario negativo, PIN temporal y pantalla cliente.
- Se eliminó la duplicación visual de pantalla cliente junto al PIN temporal.
- Se agregó botón "Examinar carpeta" para cargar imágenes/videos de una carpeta durante la sesión actual.
- La carpeta seleccionada no se guarda en la base; sirve para evitar meter videos pesados al respaldo. Para uso permanente sigue disponible la lista por ruta/URL.
- Si no hay cliente seleccionado, se oculta "Enviar cambio a puntos".
- Cambio a puntos ya no redondea hacia arriba/entero: $0.50 se guarda como 0.5 puntos.
- Redención y saldo de puntos ahora aceptan decimales.


CAMBIO v5.6.3 - FIX COTIZACIÓN EN HOJA CARTA
- Corrige error al generar cotización en formato hoja carta.
- Corrige error al reimprimir cotización en formato hoja carta.
- Causa: la plantilla de hoja carta de cotización usaba una variable de alineación no definida.
- Se agregó protección para que si falla la impresión, la cotización no quede sin guardar ni se afecte la venta activa.
- Mantiene pantalla cliente, inventario negativo y puntos decimales de v5.6.2.


CAMBIO v5.6.4 - COBRO DE ABONOS/LIQUIDACIONES CON VENTANA TIPO VENTA
- La ventana de abono/liquidación de crédito se rediseñó como la ventana de cobro de ventas.
- Incluye modos: efectivo, tarjeta, dólares, transferencia y mixto.
- Se eliminó la opción de crédito por lógica de operación.
- No pide seleccionar cliente porque ya se abre desde el cliente/deuda elegida.
- En liquidación se precarga el total del adeudo.
- En abono se captura el monto a aplicar.
- Tarjeta/transferencia deben ser exactas; efectivo y dólares permiten cambio.
- Se guarda el método detallado y nota con pagado/cambio.
- Se evita aplicar abonos mayores al adeudo.


CAMBIO v5.6.5 - FIX REDIMIR PUNTOS Y CLIENTE VISIBLE EN COBRO
- Corrige la redención de puntos en la ventana de cobro.
- Se agregó un método de pago "Puntos" en la ventana de cobro para redimir directamente puntos del cliente.
- La redención de puntos ya no se pierde por estar el campo oculto o deshabilitado visualmente.
- Se corrigió el llenado rápido de puntos para que acepte decimales y respete el máximo disponible/total.
- En la ventana de cobro se muestra un recuadro discreto con el cliente seleccionado, nivel de precio, puntos disponibles y máximo redimible.
- Si no hay cliente seleccionado, el método "Puntos" queda deshabilitado.


NOTA v5.6.5
- Se corrigió además que el valor de "Redimir puntos" se borraba cada vez que la venta se refrescaba por pestañas/cliente activo.


CAMBIO v5.6.6 - PANTALLA CLIENTE CON COBRO VISUAL
- La segunda ventana del cliente ahora muestra el método de pago activo y el estado del cobro.
- Muestra desglose de pago mixto: efectivo, tarjeta, transferencia, dólares, puntos y crédito cuando apliquen.
- Muestra pagado, resta por cobrar, cambio y puntos usados.
- Muestra cliente, nivel de precio y puntos disponibles en la pantalla del cliente.
- Se agregaron miniaturas de productos en la pantalla cliente.
- Para rendimiento, solo se envían fotos pequeñas; si una foto es pesada, se muestran iniciales del producto.
- La copia en localStorage se guarda sin fotos para no hacer lento el navegador ni crecer memoria.


CAMBIO v5.6.7 - COBRO MÁS DISCRETO Y PANTALLA CLIENTE SOLO TOTAL
- Se quitó el botón grande de "Puntos" en la ventana de cobro.
- La redención de puntos queda nuevamente dentro de Pago mixto, de forma más discreta.
- La segunda ventana del cliente ya no muestra lista de productos ni miniaturas.
- La segunda ventana muestra principalmente el total.
- Cuando se abre la ventana de cobro, la segunda ventana entra en modo cobro y muestra pagado, resta, cambio y desglose de pago.
- Al cerrar/cancelar/terminar el cobro, la segunda ventana regresa a vista simple de total.
- Se redujo aún más la carga enviada a la segunda ventana para mejor rendimiento.


CAMBIO v5.6.8 - PANTALLA CLIENTE EN DOS MODOS
- Corrige la lógica de la segunda ventana del cliente.
- Modo venta: mientras se agregan/escanean productos, el cliente ve la lista de productos y el total acumulado.
- Modo cobro: cuando el cajero abre la ventana de cobro, se oculta la lista de productos y la pantalla cliente muestra el cobro en vivo.
- En modo cobro se muestra total a pagar, pagado, resta, cambio y desglose si es pago mixto.
- Se mantiene la redención de puntos dentro de Pago mixto, sin botón grande separado.
- La lista de productos se envía sin imágenes para mantener buen rendimiento.


CAMBIO v5.6.9 - DETALLE DE CORTE CON VISTA DE MANEJO DE CAJA
- En Reportes de cortes > Ver detalle se agregó una vista tipo Manejo de caja, pero en solo lectura.
- El detalle muestra tarjetas de Totalizaciones, Dinero en caja y Arqueo/diferencias similares al módulo de caja.
- Se agregó un bloque desplegable "Abrir arqueo capturado" para ver billetes, monedas, terminales y retiros.
- Los retiros muestran monto, moneda original y detalle de denominaciones retiradas cuando fue capturado.
- No permite modificar datos desde el detalle; solo consulta.


CAMBIO v5.6.10 - DIFERENCIAR RETIROS INTERNOS Y GASTOS/PROVEEDORES
- Se separó claramente retiro interno de gasto/proveedor.
- Los gastos/proveedores de pantalla Gastos sí descuentan el dinero esperado porque el dinero sale de la tienda.
- Los retiros de Manejo de caja no se tratan como gasto: solo separan dinero del cajón, pero sigue en la tienda.
- Manejo de caja ahora muestra: esperado del turno antes de retiros, retiros internos y debe quedar físicamente en cajón.
- La diferencia de caja se calcula contra lo que debe quedar físicamente en el cajón, equivalente a contado + retiros internos contra esperado del turno.
- El detalle del corte conserva esta separación en la vista solo lectura.


CAMBIO v5.6.11 - CAJA: ESPERADO DESCUENTA RETIROS Y ETIQUETAS CLARAS
- En "Debe quedar en cajón" se mantiene el cálculo descontando gastos/pagos y también retiros internos.
- "Faltante" ahora se muestra como "Faltante por retirar".
- "Salidas de efectivo POS" se renombró a "Gastos y pagos".
- Se quitó el renglón visible de "Cambio entregado" en Manejo de caja y en el detalle de corte; el sistema lo sigue usando internamente para calcular efectivo neto.
- Se renombró "Retiros internos" a "Retiros internos por retirar" para que quede más claro.


CAMBIO v5.6.12 - DETALLE DE CORTE LIMPIO CON ARQUEOS
- Se simplificó el detalle de corte para evitar conceptos repetidos y hacerlo más corto.
- Se quitaron los bloques largos de comparativo, ventas del turno, ideas y reportes duplicados.
- Se mantiene un resumen mínimo del corte.
- Se conserva el arqueo del dinero con detalle de billetes y monedas MXN/USD.
- Se conserva el arqueo de retiros internos con hora, motivo, monto, moneda original y detalle de denominaciones retiradas.
- Todo sigue en solo lectura.


CAMBIO v5.6.13 - DETALLE DE CORTE CON MÓDULOS DE MANEJO DE CAJA
- En el detalle de corte se restauraron arriba los tres módulos de colores igual que en Manejo de caja:
  Totalizaciones, Dinero en caja y Arqueo y diferencias.
- Los módulos muestran solo datos del corte consultado y son de solo lectura.
- Debajo se conserva el detalle del conteo/arqueo de billetes y monedas.
- Debajo se conserva el arqueo de retiros internos.
- Se mantiene el detalle compacto, sin comparativos repetidos ni bloques largos duplicados.


CAMBIO v5.6.14 - AUDITORÍA IA CON AJUSTE DE INVENTARIO Y PRECIOS RÁPIDOS
- En Auditoría IA se agregaron acciones rápidas para productos detectados:
  Ajustar inventario, Editar precio y Ver ficha completa.
- Las acciones se abren en ventanas flotantes sobre Auditoría IA, sin cambiar al módulo Inventario.
- Ajuste rápido permite capturar nuevo stock físico, motivo y nota.
- Edición rápida permite corregir costo, venta, mayoreo, mínimo y estado.
- Al guardar desde la alerta, la alerta queda marcada como revisada.
- Se mantienen permisos del servidor para inventario, ajustes y ajustes negativos.


CAMBIO v5.6.15 - CORRECCIONES AUDITORÍA IA Y ETIQUETAS
- Se corrigió la impresión/generación de etiquetas cuando una recepción de compra recibida sube precios.
- Las etiquetas ahora usan una captura del nuevo precio antes de sincronizar, para que no se pierda el documento.
- Si el navegador bloquea la ventana de impresión, genera un archivo HTML de etiquetas como respaldo.
- En Auditoría IA ya no aparece “Ajustar inventario” en todas las alertas. Solo aparece cuando aplica por inventario negativo o producto sin inventario.
- “Editar precio” solo aparece cuando la alerta está relacionada con precio/costo/margen.
- “Ver ficha completa” queda disponible para productos, pero no marca la alerta como revisada.
- En alertas por falta de movimiento se muestra descripción clara del producto, stock, departamento y días sin movimiento.
- Las ediciones normales de precio hechas por administrador se envían con bandera de no auditoría.


CAMBIO v5.6.16 - DETALLE DE CORTES Y AUDITORÍA CONTEXTUAL
- En detalle de cortes se agregó historial detallado de entradas de efectivo.
- En detalle de cortes se agregó historial detallado de gastos/proveedores.
- En detalle de cortes se agregó arqueo de terminales con Afirme, Mercado Pago, total y diferencia.
- En Auditoría IA, Ver ficha completa ahora abre una ficha contextual de la alerta, no un producto aleatorio.
- Si la alerta es de producto/inventario, muestra producto y últimos movimientos: venta, compra y ajuste.
- Si la alerta es de sesión/cierre forzado, muestra información de sesión, caja, motivo y actividad.
- Si la alerta es de retiro/efectivo, muestra concepto, método, referencia, monto y sesión.
- Si la alerta es de respaldo/base de datos, muestra archivo, motivo, usuario, fecha y ruta.
- Ver ficha completa no marca la alerta como revisada; solo las acciones que corrigen o atienden la alerta lo hacen.


CAMBIO v5.6.17 - AUDITORÍA MÁS FLUIDA Y FICHAS DE PRODUCTO CON ACCIONES
- En fichas completas de alertas de producto se agregaron acciones:
  Editar precio sin revisar y Ajustar inventario sin revisar.
- Abrir ficha completa y usar acciones dentro de la ficha no marca la alerta como revisada.
- Las acciones principales desde la tabla de Auditoría IA siguen marcando revisado cuando corresponde.
- Se restringió la detección de producto para evitar que alertas de sesión, respaldo, caja o cierre forzado abran productos al azar.
- Mantener activo / pausar ahora quita la alerta de pendientes de inmediato y confirma en servidor en segundo plano.
- Se agregaron notificaciones flotantes no bloqueantes en el lado izquierdo, permitiendo varias a la vez y mostrando el producto o concepto afectado.


CAMBIO v5.6.18 - UTILIDADES: FECHA DE GASTO DEL DÍA
- Se corrigió el bug donde un gasto del día podía guardarse o mostrarse como día siguiente.
- Se quitó el uso de fecha UTC como respaldo para gastos de utilidades.
- El servidor ahora usa fecha local YYYY-MM-DD para gastos del día.
- El cliente normaliza la fecha seleccionada antes de enviarla al servidor.
- Si el gasto se captura para 2026-06-03, se conserva exactamente como 2026-06-03.


CAMBIO v5.6.19 - UTILIDADES: TABLA DE GASTOS FILTRADA POR DÍA/RANGO
- La tabla inferior de Utilidades ya no muestra todos los gastos registrados.
- Ahora solo muestra gastos del día que correspondan a la fecha o rango seleccionado.
- Los gastos fijos diarios se siguen mostrando porque aplican al día/rango seleccionado.
- Si seleccionas otro día, los gastos del día anterior desaparecen de la tabla.
- El cálculo de utilidad neta se mantiene igual, pero la visualización queda coherente con el filtro.


CAMBIO v5.6.20 - AUDITORÍA: NOTIFICACIONES NO BLOQUEANTES Y SIN DUPLICADOS
- Las notificaciones flotantes ya no muestran mensajes intermedios de "guardando en servidor".
- Ahora solo aparece notificación final cuando el movimiento ya fue confirmado.
- Las notificaciones flotantes ya no bloquean clics ni el trabajo aunque haya ventanas abiertas.
- Auditoría IA carga la tabla por bloques de 80 alertas para mejorar velocidad con cientos de registros.
- Se agregó botón "Mostrar más alertas" en lugar de dibujar 300+ filas al mismo tiempo.
- Se quitó el duplicado local/servidor de eventos iguales de auditoría.
- Se evita duplicar "producto modificado" cuando ya existe una alerta de ajuste sensible de inventario para el mismo SKU.


CAMBIO v5.6.21 - RENDIMIENTO SEGURO ANTES DE ARCHIVADO HISTÓRICO
- Se agregaron índices SQLite para auditoría, ventas, cortes, movimientos de caja, ajustes de inventario, recepciones de compra y gastos.
- La base activa no se comprime ni se mueve todavía; esta versión solo optimiza lectura y búsqueda.
- Auditoría IA ahora tiene consulta ligera al servidor con límite por bloques.
- Estado inicial y sincronización ligera cargan menos auditorías para no saturar el navegador.
- Auditoría IA conserva botón "Mostrar más alertas", pero consulta al servidor en lugar de renderizar cientos de registros de golpe.
- Se agregó búsqueda en Auditoría IA por SKU, usuario, tipo, referencia o detalle.
- Esta versión prepara el terreno para archivo histórico mensual en v5.7 sin tocar datos históricos todavía.


CAMBIO v5.6.22 - FIX AUDITORÍA REVISADOS
- Corrige que en v5.6.21 algunas alertas no se vieran marcadas como revisadas.
- Se invalida la caché ligera de Auditoría IA al marcar revisado/pendiente.
- Después de marcar revisado se refresca únicamente la consulta ligera de auditoría, no toda la pantalla pesada.
- El filtro de pendientes/revisadas en servidor ahora usa json_extract(payload_json, '$.reviewed') para detectar mejor el estado.
- El endpoint /audit-events/review devuelve también la alerta actualizada.


CAMBIO v5.6.32 - BASE CARTA v5.6.22 + FOLIOS / NOTA DE VENTA
- Se usa como base directa la v5.6.22, que fue la última versión donde la impresión carta funcionaba correctamente.
- No se aplican los cambios de carta/CSS de v5.6.25 a v5.6.31.

CAMBIO v5.7 - PEDIDOS UNIFICADOS
- Fusiona el flujo operativo de lista de compra, pedidos y recepción en el módulo Pedidos.
- Las alertas de bajo inventario envían productos al borrador activo del proveedor principal.
- Los pedidos permiten editar, reimprimir y recibir desde la misma sección.
- La recepción ligada a pedido mejora la navegación con teclado entre cantidades, costos y precios.
- Se corrige únicamente la generación de folios únicos en cotizaciones.
- Las cotizaciones procesadas se imprimen como Nota de venta.
- Una cotización procesada/vencida/cancelada no se puede volver a abrir en venta.
- Se conserva la recarga silenciosa de pendientes de Auditoría IA sin tocar impresión.

CAMBIO v5.8.16.11 - DESBLOQUEO DE REVISION DE COMPRAS

- Agrega ruta administrativa para desbloquear una nota de compra revisada accidentalmente.
- En el detalle de nota recibida aparece "Desbloquear revisión" para administradores.
- El desbloqueo no mueve inventario; solo permite editar/revisar nuevamente y deja auditoría.

CAMBIO v5.8.16.10 - FILTRO DE PERIODO EN PEDIDOS

- Corrige el filtro Hoy/Ayer/periodo en pedidos para usar la fecha principal del pedido.
- Las recepciones o revisiones posteriores ya no hacen aparecer pedidos viejos en el filtro Hoy.
- Los borradores activos/pausados tambien respetan el filtro de periodo.

CAMBIO v5.8.16.9 - DESGLOSE DINERO EN CAJA

- Reordena la columna Dinero en caja para mostrar la formula operativa: ventas en efectivo/dolares + entradas - gastos - retiros internos.
- El mismo desglose aparece en el detalle de cortes guardados.

CAMBIO v5.8.16.8 - PREVIEW DE CORTE POR SERVIDOR

- Agrega /api/cuts/preview para calcular el corte final con datos completos de SQLite antes de guardar.
- La ventana de corte final muestra el resumen autoritativo del servidor y mantiene cálculo local solo como respaldo temporal.
- La comparación de terminales usa ventas por tarjeta, dejando transferencias separadas.

CAMBIO v5.8.16.7 - ESTADO MODULAR DIRECTO

- Agrega endpoints de estado por modulo: /api/state/pos, /api/state/inventory, /api/state/customers, /api/state/purchases, /api/state/audit y /api/state/reports.
- Mantiene /api/state para compatibilidad con clientes existentes.
- La sincronizacion automatica del navegador usa el modulo activo para reducir cargas grandes.
- Los endpoints modulares consultan directo sus datos, sin armar el estado completo del sistema.

CAMBIO v5.8.13.3 - SOPORTE Y MANUAL
- Se agrega MANUAL-RAPIDO-CLIENTE.md en el paquete.
- Se agrega public/manual-rapido-cliente.html para abrir/imprimir desde el sistema.
- En Administracion > Base de datos y respaldos > Diagnostico rapido se agrega paquete de soporte exportable y resumen de rendimiento.





CAMBIO v5.8.19.32 - ARQUEO EN ENTRADAS Y SALIDAS DE CAJA

- Agrega opciones separadas para pedir arqueo al registrar entradas de efectivo y salidas/gastos.
- Cuando el arqueo esta activo, el modal de movimiento muestra conteo por billetes MXN, monedas MXN y dolares USD.
- El monto del movimiento se toma automaticamente del total arqueado.
- El ticket de entrada/salida muestra referencia de arqueo cuando aplica.

CAMBIO v5.8.19.31 - TICKETS DE ENTRADA, SALIDA Y RETIRO INTERNO

- Agrega opciones en Administracion > Configuracion > Manejo de caja para activar/desactivar tickets de entrada, salida/gasto y retiro interno.
- Cada ticket puede incluir firma de cajero y firma de recibio.
- Permite imprimir solo original u original y copia.
- La reimpresion manual queda disponible desde historial de movimientos y lista de retiros internos.

CAMBIO v5.8.19.30 - VERSION UNIFICADA Y PRUEBAS DE EVIDENCIAS

- Alinea servidor, instalador de cliente Windows y APK Android a la version 5.8.19.30.
- Mantiene el ajuste de corte de caja para ventas en efectivo netas.
- Confirma el plan de evidencias de tareas: imagenes fuera de SQLite, miniaturas, detalle bajo demanda y respaldo/restauracion de task-media.

CAMBIO v5.8.19.5 - VENTAS EN EFECTIVO NETAS EN CORTE

- En Manejo de caja, "Ventas efectivo MXN" muestra únicamente el efectivo aplicado al valor de las ventas.
- El efectivo bruto entregado por el cliente se conserva para auditoría, pero ya no se presenta como venta efectiva.
- El cambio entregado se descuenta antes de separar efectivo MXN y dólares aplicados a las ventas.
- Los cortes nuevos guardan ambos importes para que el historial conserve el cálculo exacto.

CAMBIO v5.8.19.4 - EVIDENCIAS DE TAREAS OPTIMIZADAS

- Las fotos de tareas se guardan fuera de SQLite en data/task-media.
- El navegador genera automáticamente una evidencia optimizada y una miniatura.
- Las listas de tareas ya no transportan imágenes completas; el detalle las carga bajo demanda.
- Se agregaron niveles por antigüedad: 0 a 15, 16 a 30, 31 a 180 y más de 180 días.
- La conservación y el manejo de originales se configuran desde Administración.
- Los respaldos manuales y diarios incluyen una carpeta asociada de task-media.
- La migración de evidencias antiguas verifica la escritura antes de retirar el contenido de SQLite.

CAMBIO v5.8.19.39 - AUDITORIA IA COMPACTA Y ORDENABLE

- Muestra solo Eventos sensibles, Alta, Critica, Media y Pendientes.
- Quita importes vigilados e importes excluidos.
- Las cabeceras ordenan cada columna de forma ascendente o descendente.

CAMBIO v5.8.19.40 - PANTALLA CLIENTE MANUAL Y CARRUSEL ESTABLE

- La ventana cliente se abre exclusivamente con el botón inferior o desde Configuración.
- El botón inferior solo aparece si la función está activada.
- La carpeta de publicidad puede quedar recordada para recuperar sus imágenes automáticamente.
- Se quita la leyenda superior y se recupera el carrusel si una imagen o video se atasca.

CAMBIO v5.8.19.41 - VENTAS RAPIDAS Y AUDITORIA NOCTURNA

- La pantalla cliente se abre una sola vez después del primer inicio de sesión de cada arranque del servidor.
- Se reduce la respuesta de registro de venta a los datos que realmente cambiaron.
- La revisión de productos sin movimiento sale del horario operativo y usa la hora nocturna con menor tráfico promedio.

CAMBIO v5.8.19.42 - FOTOS BAJO DEMANDA Y SINCRONIZACION EN REPOSO

- Reduce varios megabytes por sincronización cargando las fotos solo cuando se necesitan.
- La actualización automática no compite con clics, teclado ni cobros activos.
- Reduce escrituras innecesarias de la caché offline sin quitar su protección.

CAMBIO v5.8.19.43 - ADMINISTRACION MODULAR

- Administración abre con reportes recientes en vez del estado histórico completo.
- Solo calcula y dibuja la pestaña que el usuario está viendo.
- Los módulos secundarios se cargan al seleccionarlos.
