# Historial de cambios de AxisPOS ## 5.26.10.28 — bloqueo de RS.GE corregido y rutinas del gimnasio en PDF - **RS.GE:** con RS.GE activo, cobrar una venta podía bloquear las demás cajas hasta que MySQL se rendía con «Lock wait timeout exceeded». El formulario de la guía se abría con la venta aún guardándose y retenía sus bloqueos mientras el cajero lo rellenaba. Ahora se abre con la venta ya guardada, y el envío en segundo plano nunca corre dentro de la transacción de una venta. - **Gimnasio:** exportar a PDF las rutinas de un socio, con las imágenes de los ejercicios y de los aparatos. ## 5.26.10.27 — Gimnasio con máquinas, ejercicios, rutinas y registro; terminales de huella; canales del hotel por iCal - **Gimnasio – máquinas, ejercicios, rutinas y registro:** la página Gym / SPA tiene tres secciones nuevas con sus permisos: *Máquinas* (por zona, estado con nota, foto y pegatinas QR), *Ejercicios* (biblioteca por músculo con 67 de inicio) y *Rutinas* (programa por socio con sus días, copiar semana, plantillas y registro de entrenamientos). Todo viaja con la central por la sincronización, junto con la foto del socio. - **Terminales de huella (ZKTeco):** Herramientas ▸ Terminales biométricos. Los terminales hablan con el servidor web de AxisPOS en la red local; cada lectura es un fichaje (mismas reglas que el reloj) o una entrada/salida del Gym / SPA. La recepción del Gym y el reloj de Fichaje enseñan la lectura al momento. Guía en docs/terminales-biometricos.md. - **Hotel – canales por iCal:** Booking, Airbnb, Expedia y otros por calendario iCal, uno por habitación: se importan sus reservas como estancias confirmadas y se publica nuestra ocupación. Las habitaciones tienen ahora tipo de habitación. - **Permisos de Gym / SPA y Hotel:** sus secciones y acciones aparecen en el árbol de derechos de acceso; quitar cargos del folio nace cerrado para los operadores. - **Central:** una terminal AxisPOS.Light puede sincronizar contra el escritorio de central, y el IVA de cada línea viaja con la venta. - **Numeración:** corregido el error «Lock wait timeout exceeded» (MySQL 1205) que podía hacer fallar un cobro cuando varias cajas guardaban a la vez. - **Español:** *Artículos* y *Contactos* en lugar de *Mercancías* y *Socios*; *Entidad* se dice *Mesa* o *Almacén* según el contexto. - **Núcleo compartido con AxisWeb:** los dos programas usan ahora el mismo núcleo; la base de datos crea ya las tablas de la factura electrónica cubana (FACEL), aún sin pantallas en el escritorio. ## 5.26.10.26 — Hotel: otros huéspedes, cantidades, cambio de fechas y fechas reales de la estancia; nuevas ventanas de licencia, derechos de acceso y Acerca de - **Hotel – otros huéspedes:** la tarjeta de la estancia tiene el botón *Otros huéspedes* para registrar a todos los que duermen en las habitaciones (nombre, documento, nacionalidad, cumpleaños y habitación si hay varias); la tarjeta muestra «Con: …». - **Hotel – cargar artículos:** después de elegir los artículos que se cargan a la habitación, una ventana pide la cantidad de cada uno (con botones − y +). - **Hotel – cambiar fechas:** una reserva que aún no ha entrado puede cambiar la llegada y la salida (*Cambiar fechas*); al mover la llegada se conservan las noches. Todas las habitaciones deben estar libres en las fechas nuevas; el régimen de comidas sigue a las noches. - **Hotel – fechas reales:** dar entrada en otro día que el reservado ofrece registrar la estancia desde hoy, con la salida que se elija; dar la salida en otro día que el previsto ofrece cobrar las noches que realmente estuvo. La estancia se factura y aparece en los reportes con sus fechas reales. - **Información de licencia:** rediseñada: el estado de un vistazo (activa, vigente hasta, vencida, demo), tipo, producto, cliente, vigencia y el código de la máquina con *Copiar*; los módulos en lista con su estado traducido. *Cerrar* ya no reinicia la aplicación. - **Derechos de acceso:** rediseñada: una sola lista de niveles de acceso y usuarios, árbol plegado con buscador y casillas de tres estados, *Copiar desde*, *Restablecer al nivel*, *Descartar cambios*. Al guardar un nivel se ofrece pasar a sus usuarios sólo lo que cambió, y cada uno conserva el resto de sus permisos. Corregido: los cambios de un nivel de acceso se perdían al reiniciar. - **Acerca de:** rediseñada, con los datos del sistema, .NET y base de datos y *Copiar para soporte*; sitio web y correo como enlaces. - **Importar/Exportar:** el último informe se lee después de iniciar sesión (la barra de estado ya no falla antes de entrar). ## 5.26.10.25 — gimnasio, spa y hotel sincronizados con la central y nueva ventana de Importar/Exportar - **Gimnasio, spa y hotel con la central:** la sincronización de la estación (Importar/Exportar, contabilidad en línea) intercambia ahora con la central (AxisWeb) los recursos, los horarios de clases, las membresías, los bonos, las reservas con sus líneas, los cargos a la habitación y las entradas del gimnasio. Las filas se reconocen por sus códigos y fechas de creación, sin actualizar la base de datos. Lo que cambia en un solo lado pasa al otro; si cambió en los dos, gana la central, salvo que la membresía se queda con la fecha de pago más lejana, el bono suma las sesiones gastadas en cada lado y la reserva conserva su último cambio. Una clase cambiada de hora y un cargo a la habitación quitado desaparecen también en el otro lado. Una reserva o un bono cobrados en un lado aparecen cobrados en el otro. - **Ventana de Importar/Exportar:** rediseñada. La pestaña *Estado* enseña la última sincronización (manual o automática), su resultado y duración, la próxima automática y cada etapa (conexión, usuarios, monedas, ubicaciones, artículos, socios, tipos de pago, gimnasio/spa/hotel, ventas, existencias) con su resumen y su tiempo, en vivo mientras corre; abajo, los avisos y errores. La pestaña *Ajustes* sustituye al diálogo de configuración aparte. El icono de la barra de estado dice cómo fue la última sincronización y abre la ventana. - **Arreglos de la sincronización:** un artículo, socio, usuario o ubicación sin grupo ya no corta toda la sincronización (va al grupo predeterminado y queda como aviso); una estación nueva recibe todos los socios de la central, no sólo los cambiados en los últimos 10 días, y ya no se los devuelve todos en cada pasada; una estación con SQLite puede subir sus ventas; un fallo en la etapa de gimnasio/spa/hotel ya no frena la subida de ventas. - **RS.GE:** formulario obligatorio antes de subir cada guía (direcciones, transporte, vehículo, conductor, fecha), propuesto con la empresa, el almacén, el cliente y los últimos vehículos; casilla «Enviar a RS.GE» en la ventana de pago de las ventas; ventas y traslados se exportan a RS.GE desde *Editar ▸ Imprimir de nuevo ▸ Exportar*. - **Retail:** la cuadrícula de artículos de un perfil Retail nuevo empieza con 3 columnas y 9 filas. ## 5.26.10.24 — compras desde guías RS.GE y diseñador de etiquetas al estilo LabelTrix - **Compra desde guía RS.GE (Operaciones ▸ Compra desde guía RS.GE…):** lista las guías que los proveedores han emitido a la empresa en rs.ge y convierte una en compra. El proveedor se busca por NIF y cada línea por código de barras o nombre; lo que falta se crea. La página de Compra se abre rellena para revisarla, y al guardarla se confirma la recepción en rs.ge. Una guía ya importada no se puede volver a importar. - **Diseñador de etiquetas:** reorganizado al estilo LabelTrix, con pestañas propias en la cinta (Etiqueta, Insertar), panel de capas, panel de registros con las filas que se imprimen, lienzo con cuadrícula de milímetros y reglas, órdenes para organizar (al frente, al fondo, duplicar, alinear) y barra de estado con zoom. ## 5.26.10.23 — guías RS.GE, fichaje y aprobaciones - **Guías RS.GE (Georgia):** módulo nuevo que declara las guías electrónicas del Servicio de Ingresos de Georgia. Las ventas a un cliente con NIF georgiano y los traslados entre entidades se encolan al guardarlos y se envían en segundo plano (la venta nunca espera a rs.ge). Anular o editar un documento anula o sustituye su guía. El botón RS.GE de los documentos envía, reintenta, anula o abre el PDF, y *Editar ▸ Documentos ▸ Guías RS.GE…* muestra su estado. Ajustes en la pestaña RS.GE. Se activa sola sólo con la aplicación en georgiano. Sustituye al antiguo controlador de Georgia, que ya no compilaba. - **Fichaje:** los empleados marcan la entrada y la salida con su código y PIN en una caja; puntos sólo de entrada. - **Aprobaciones (Operaciones ▸ Aprobaciones):** mermas, ajustes de inventario, bajas y pedidos que requieren aprobación esperan a tenerla antes de aplicarse, con las mismas reglas que AxisWeb. - **AxisMarket:** varios almacenes de existencias por tienda y opción de subir sólo los productos con existencia. - **Kiosco:** pago con AxisMarket por código QR en lugar del pago con tarjeta. - **Cinta de opciones:** el diseñador de etiquetas como botón grande en Inicio. - **Billar:** fuera del paquete por ahora. ## 5.26.10.22 — copias de seguridad, módulos y hotel - **Copias de seguridad (Archivo ▸ Copias de seguridad…):** sustituyen al antiguo add-in Backup & Restore, que copiaba sólo 36 de las ~200 tablas. Una copia (`.axbak`) guarda todas las tablas con su estructura, tomadas de una única instantánea coherente sin parar las cajas (SQLite y MySQL), y se verifica al escribirla y antes de restaurarla. Se puede restaurar en una base nueva o sobre una existente —lo habitual en servidores MySQL alojados, donde el usuario no puede crear bases—, y antes siempre se hace una copia de la base que se reemplaza. También se hace una copia automática antes de cada actualización de la base de datos. Las copias del add-in antiguo (`.woback`) ya no se leen. - **Módulos (Archivo ▸ Módulos… y un paso del asistente):** activar y desactivar los add-ins de cada base de datos. - **Hotel:** nueva vertical sobre las tablas de reservas: rack de habitaciones, limpieza, temporadas, régimen de comidas, factura parcial, bloqueo por mantenimiento, ficha del huésped, ocupación por noche, confirmación por e-mail y facturar a agencia; página `/web/hotel` para el móvil de recepción y camareras. - **AxisMarket:** sincronización de productos, pedidos y existencias; los pedidos online llegan a la pantalla del restaurante con su cliente, dirección, moneda y tasa. - **Cuadro de mando:** fichas de acceso directo; desaparece la página de inicio «Back Office» (sus accesos se migran). - **Base de datos remota:** una venta táctil se cobra en 5 viajes en vez de 13; lotes y recetas se resuelven una vez por documento. - **Reporte de modificaciones:** incluye la edición de un producto. ## 5.26.10.21 — cinta de opciones al estilo de Office - **Cinta de opciones:** la barra de menús de la ventana pasa a ser una fila de pestañas (Inicio, Operaciones, Editar, Administración, Ver, Informes, Herramientas y el botón Archivo) con sus grupos de botones grandes y pequeños e iconos de línea. Se construye con el menú, así que lleva también lo de los add-ins y respeta los permisos; los submenús son botones desplegables. En macOS el menú sigue además en la barra del sistema. - **Pestañas contextuales:** con Restaurante, Tienda o Gym / SPA como página activa sale su pestaña, sólo con lo que no está en su pantalla (pantalla de cocina, pantalla del cliente, servidor web, carta y precios, caja, informes, configuración). En las pantallas táctiles la cinta queda plegada en su fila de pestañas y la pestaña se abre encima de la página sin moverla; la flecha de la derecha pliega o fija la cinta en cada perfil de vista. - **Barra de acceso rápido:** la barra de favoritos queda bajo la cinta con los mismos iconos; con clic derecho en un botón de la cinta se añade o se quita. La búsqueda (⌘K / Ctrl+K) va en la fila de pestañas. - **Ver ▸ Ocultar la barra de título:** la ventana principal sin barra de título; el botón de cerrar pasa a la cinta donde lo pone cada sistema (círculo rojo a la izquierda en macOS, X a la derecha en Windows y Linux). - **Ver ▸ Menú clásico:** vuelve a la barra de menús de siempre en ese equipo. ## 5.26.10.20 — enlace público, paleta de comandos y barra de favoritos - **Acceso desde Internet (Servidor web… ▸ «Acceso desde Internet por un túnel»):** con un código de registro que da AxisSoft o el revendedor y el nombre del enlace (se propone el de la empresa y se comprueba si está libre mientras se escribe), AxisPOS se registra en Guard y obtiene `https://.apps.axissoft.cloud`, sin abrir puertos ni instalar nada más: el túnel va dentro de AxisPOS, arranca y para con el servidor web y se reconecta solo. Registrarse otra vez desde la misma instalación conserva el enlace, así los QR impresos siguen valiendo. El diálogo enseña el enlace, su plazo y el estado del túnel, con «Copiar enlace» y «Dejar el enlace»; la barra de estado añade el enlace junto a la dirección de la red. El diálogo ahora tiene desplazamiento y ancho fijo. - **Qué se sirve a Internet:** sólo el menú QR de los clientes (`/Table`), la entrada y las páginas Sumario, Carta QR, Camarero y Gestión. La pantalla de cocina, la puerta del gimnasio, el control de salida, el verificador de precios, la SyncApi local, las rutas del conector antiguo y la lista de usuarios se quedan en la red. Desde Internet el usuario se escribe, los intentos fallidos se limitan por visitante y por usuario (el bloqueo no afecta a la tienda), la cookie de sesión va Secure y los QR empiezan por la dirección pública. - **Paleta de comandos (Ver ▸ Buscar acción…, ⌘K / Ctrl+K):** busca en todo el menú, también lo de los add-ins, sin distinguir acentos, con la ruta del menú y el atajo de cada acción; respeta los permisos y recuerda las recientes. «Mercancías en existencia» pasa a ⇧⌘K / Ctrl+Mayús+K. - **Barra de favoritos:** la barra de herramientas fija se sustituye por una barra bajo el menú con las acciones que fija cada usuario (Venta, Compra, Mercancías, Socios y Reporte de ventas por defecto) y el botón «Buscar acción ⌘K»; se fija desde la paleta con la estrella o ⌘P / Ctrl+P, y con clic derecho se mueve o se quita. Los elementos del menú conservan sus iconos en GTK4. - **Gym / SPA:** los recordatorios por correo y la cuenta del socio (saldo, pendiente, venta a crédito) pasan al núcleo y se comparten con AxisWeb, que aplica exactamente las mismas reglas. - **Gym / SPA, gimnasios que sólo marcan la entrada:** en Ajustes ▸ Gym, «Registrar las salidas en el mostrador» y «Dar por salido al socio a las N horas» (2 por defecto; 0, nunca). Sin registrar salidas el mostrador no pide la salida ni dice «dentro» y siempre deja volver a entrar. «Dentro ahora» se cuenta por socio con esa salida automática, que sólo se calcula, y se oculta cuando no significa nada. La tarjeta y `/web/gym` sólo dicen «salió» si hay una salida registrada. Los dos ajustes van en la base de datos y valen para todos los puestos y AxisWeb. ## 5.26.10.19 — módulo Gym / SPA - **Gym / SPA (Operaciones ▸ Gym / SPA, vertical nueva):** recepción para gimnasios, estudios y spas sobre las tablas de reservas que AxisPOS ya compartía con AxisWeb; sin paso de base de datos nuevo. El asistente de configuración lo ofrece como «Front Office - Gym / SPA» con un modo de negocio, Gym o Spa: en Spa la página abre en la agenda, Citas va primero, el vocabulario pasa a cliente, terapeuta y cabina, y Clases y Taquillas se ocultan salvo que se activen en los ajustes. - **Mostrador:** lector de tarjetas o búsqueda, tarjeta de estado (al día, vencida, congelada, bono, sin membresía) con el saldo de la cuenta, la taquilla y la cita de hoy, «Registrar entrada» y «Registrar salida», las entradas de hoy, «Dentro ahora» (las entradas sin salida) y las membresías que vencen pronto. - **Socios y membresías:** filtros por estado y «Con deuda», alta de socio y de membresía, renovación y congelación. La cuota y los bonos se cobran con el circuito de cobro del POS (diálogo de pago, recibo, cajón); la vigencia y las sesiones se escriben al confirmarse la venta. - **Bonos y pases de día:** bonos de varias sesiones; «Pase de un día» vende un bono de una sesión que caduca hoy y registra la entrada, «Prueba gratis» para quien nunca entró, e «Invitado de un día» desde una tarjeta desconocida crea el socio y encadena el pase. - **Clases:** horario semanal (de lunes a domingo), salas con aforo, inscripción en la próxima sesión y baja. - **Citas:** la agenda del día por entrenador, terapeuta o sala en tramos de media hora, con desplazamiento lateral cuando hay muchas columnas. Una cita puede ocupar varios recursos a la vez (terapeuta + cabina), con control de solape en cada uno; anticipo a favor del socio, llegada, no presentado, cobro con la venta pendiente y los anticipos aplicados, y propina. Los entrenadores, salas y servicios reservables (duración, margen, depósito) se dan de alta ahí mismo. - **Cuenta del socio:** «Cargar a la cuenta» es una venta a crédito a un socio con membresía activa; «Liquidar cuenta» cobra todas sus deudas con el diálogo de pago del POS y aplica antes sus anticipos. - **Taquillas:** rejilla numerada, alta masiva, asignar a un socio y liberar, con alquiler opcional como mercancía. - **Reportes (Reportes ▸ Socios y teselas del Cuadro de mando):** entradas, membresías (periodicidad y estado como texto, días restantes), altas, renovaciones y bajas por mes, retención a 3 y 6 meses, entradas por hora y día de la semana, asistencia a clases frente al aforo, ingresos por cuotas, bonos y clases, morosos con los días de retraso, socios inactivos, y la liquidación de entrenadores y terapeutas (citas cobradas, propinas y comisión). - **Pantalla del cliente:** cada entrada enseña una tarjeta de bienvenida («Bienvenido, Juan» con el estado de la cuota o del bono) que vuelve sola a la publicidad. - **Recordatorios por correo:** aviso diario a los socios con la cuota por vencer (días de antelación, hora, asunto y cuerpo con {Name}, {PaidThrough}, {DaysLeft}, {Gym}), un último aviso al día siguiente de vencer, y las citas de mañana; botón «Enviar recordatorios ahora». - **Página /web/gym** (servidor web de AxisPOS): la tableta de la puerta escanea la tarjeta, ve la cuota y registra la entrada o la salida. - **Reportes en el tema oscuro:** las etiquetas de las filas fijas del diálogo de filtros (No. de operación, Fecha, Nombre, Suma total, Clasificar por) salían en negro sobre el fondo oscuro; ahora toman el color del tema. - Exportar a Excel vuelve a funcionar y genera .xlsx (el exportador .xls antiguo no funcionaba en .NET 10). ## 5.26.10.18 — el clic en el autocompletado elige el artículo en Windows - **Windows: el clic en la lista del autocompletado vuelve a elegir el artículo** (Venta, Compra y las demás operaciones). Al hacer clic, Windows activaba la ventana de la lista, la entrada perdía el foco y la lista se cerraba antes de recibir el clic, así que no se elegía nada; ahora la lista no se activa y el foco se queda en la entrada. ## 5.26.10.17 — Intro en Compra, imágenes de mercancía y teclado táctil al cambiar de socio - **Compra y el resto de operaciones:** tras elegir la mercancía, Intro pasa a Cant. y después al precio de compra; antes se saltaba Cant. Cada Intro, Tab o flecha que mueve la edición de la rejilla pasa sólo a la celda siguiente. - **Cambiar socio y Cambiar usuario:** el teclado táctil escribe en la búsqueda y en los campos de un socio nuevo. - **Botones con menú** (cambiar de usuario en el Restaurante y los demás): la flecha que abre el menú tiene una zona de toque más ancha. - **Ficha de mercancía:** la imagen elegida se guarda bien (la grande, hasta 800×600, y la miniatura de las tarjetas), una foto del teléfono sale derecha y una foto grande ya no estira el diálogo. El Kiosko usa la imagen grande y ve las cambiadas al volver a entrar. - Venta y Compra: un cierre inesperado al volver a editar la rejilla (después de Cambiar socio). - macOS: la lista del autocompletado de las operaciones ya no se queda pintada encima de la rejilla al cerrarse. - Windows: cambiar de pestaña ya no desmaximiza y vuelve a maximizar la ventana, y los diálogos vuelven a recordar su tamaño. ## 5.26.10.16 — combos y menús para bares y restaurantes - **Combos (Mercancías ▸ editar ▸ pestaña Combo, nuevo):** una mercancía pasa a ser un menú —«Menú Hamburguesa» a 9,50— al darle grupos de opciones: Guarnición, Bebida, Extras… Cada grupo tiene un mínimo y un máximo (elegir una, opcional hasta tres) y sus opciones son mercancías del catálogo que van incluidas (0,00), con suplemento (+1,00) o a su precio de catálogo. Una parte fija del menú (la hamburguesa) es un grupo oculto con una sola opción, así va a su estación de cocina y descuenta su existencia como cualquier otro componente. Los modificadores libres («sin cebolla») siguen como antes, en la nota del menú. - **Vender un menú:** Restaurante, Tienda y Kiosko abren una hoja táctil con los grupos en fichas, los extras con su precio, los modificadores, una nota y la cantidad; el precio final se ve en vivo y Aceptar no se activa hasta que todos los grupos son válidos. El menú se guarda como una línea propia (precio base, al IVA de la mercancía del menú) más una línea real por cada opción elegida (a su precio e IVA; las incluidas a 0,00), enlazadas al menú (`operations.ParentDetailID`). Así la existencia, las recetas y la producción automática trabajan sobre los componentes reales igual que con una línea suelta, y dos menús con bebidas distintas nunca se juntan. Editar la línea de un menú reabre la hoja con lo elegido; + y − cambian el menú entero. - **Agotados:** un componente de la lista de agotados de los camareros sale desactivado en la hoja; un menú sin nada que elegir en un grupo obligatorio sale como agotado en el Restaurante, la carta QR y el camarero web. - **Cocina:** cada componente va a la impresora y a la estación del KDS de su propio grupo, bajo una cabecera con el menú y sus modificadores («1 Menú Hamburguesa / - Patatas / > sin cebolla»); el KDS agrupa los componentes bajo el menú y marcar el menú los marca a ellos. - **Ticket del cliente:** el menú con su precio y los componentes indentados debajo, con importe sólo cuando suman algo; los tickets ESC/POS y el documento de venta terminan con el IVA desglosado por tipo (base y cuota). - **Carta QR y camarero web:** el cliente y el camarero eligen las opciones de un menú en el teléfono; el servidor comprueba la elección contra la definición, rechaza grupos obligatorios vacíos y opciones desconocidas o agotadas, y pone él el precio. Un pedido QR aceptado entra en la mesa como un menú real. Pasar líneas a otra mesa mueve el menú con todos sus componentes, y sólo entero. - **Informes:** Ventas por mercancías tiene una columna «Menú» con el menú al que pertenece cada componente y un filtro para dejar fuera los componentes (o ver sólo ellos); los informes de ticket y de turno separan un componente de la misma mercancía vendida suelta. - Se quita el antiguo «menú complejo» (`Warehouse.Neo.ComplexMenu`), que nunca funcionó bien; sus filas de configuración se quedan en la base de datos. Paso de base de datos 155 (`goodscombogroups`, `goodscombooptions`, `operations`/`operationstemp.ParentDetailID` y `ComboOptionID`). - **Teclado táctil:** los campos de texto ya no despliegan el teclado al recibir el foco. Un pequeño icono de teclado dentro del campo, a la derecha, lo abre y lo cierra; un teclado físico o el tabulador ya no se encuentran con él. - **Fichas de mercancía, socio, usuario y local:** la pestaña Grupos vuelve a ocupar toda la página (el árbol sólo enseñaba cuatro filas). - Compra: el aviso de un costo lejos del último habla en la unidad de la fila (costo de la caja contra costo de la caja, redondeados, con el nombre del formato). - Las casillas de los árboles («Seleccionar grupo») responden al toque en tabletas Windows. - Camarero web: el refresco ya no se queda colgado con una petición perdida ni pisa datos nuevos con una respuesta vieja, así que se ven los cambios hechos desde otro AxisPOS. - **Georgiano en mayúsculas en Windows:** los nombres de las mercancías y los botones de grupo salen en mayúsculas, y con la interfaz en georgiano Windows dibujaba las mayúsculas georgianas (mtavruli) como cuadros, porque su fuente georgiana (Sylfaen) no las tiene, y AxisPOS imponía Sylfaen a toda la interfaz en georgiano. AxisPOS trae ahora Noto Sans Georgian (`fonts/`, licencia SIL Open Font): el instalador la añade a las fuentes de Windows si no está, la app la carga al arrancar y, con la interfaz en georgiano, es la fuente principal (Sylfaen detrás). Lo que pasó al cargarla queda en `ExtraFonts.log` de la carpeta de datos del usuario. - **Tienda ▸ Reporte de ventas ya no cierra la aplicación:** el diálogo de informes desmarcaba «Ventas» al abrirse y fallaba con un error grave. Los informes añadidos («Ventas por mercancías…») ahora actualizan la vista previa al elegirlos, y la vista previa vuelve a tener su altura. El mismo arreglo respeta lo guardado en el diálogo de Exportar (a fichero, abrir fichero, por correo), que se invertía al abrirlo. - Windows: una ventana maximizada con el marco nativo ya no se mete debajo de la barra de tareas. ## 5.26.10.15 — formatos de venta: una caja o una docena con precio propio - **Formatos de venta (Mercancías ▸ editar ▸ pestaña Formatos de venta, nuevo):** una mercancía puede tener formatos —una caja, una docena, un palé…— cada uno con su nombre, unidad, códigos de barras y precios, que se venden y se compran sobre la existencia de la mercancía. Un formato es una mercancía hija (`goods.ParentID`): una versión anterior simplemente ve dos mercancías. Los formatos se ofrecen en el autocompletado y en el selector de mercancías de las páginas de gestión (venta, compra, transferencia, merma…) y por sus propios códigos; el inventario y la producción cuentan en la unidad base. - **La línea se guarda sobre la mercancía, en unidades base:** 2 cajas de 12 a 10,00 se guardan como 24 piezas a 0,8333… con el formato y su relación recordados en la línea (`operations.UnitItemID`, `UnitRatio`), así que la existencia, los lotes, el costo medio, los informes y la sincronización no cambian, y la pantalla, los documentos y el ticket muestran «2 caja × 10,00». Los precios se redondean en la unidad vendida, de modo que el total de la caja es exacto. Escribir una cantidad o un precio en esa línea es en la unidad vendida; cambiar de socio toma el precio del formato en el grupo nuevo. - **Verificador de precios:** lista los formatos de la mercancía con su propio precio cuando «mostrar el precio de la segunda unidad» está activo. - **El grid trabaja en la unidad de la fila:** una línea nueva de un formato empieza con una caja, no con una pieza (ni con 1/12 de caja en pantalla); un código escaneado o una tecla rápida añade una caja; las columnas Disponible y Restante muestran cajas; Compra muestra y toma el costo de la caja y el importe de la línea se divide por cajas; el punto de venta muestra el precio de la caja con IVA. Cambiar una línea entre pieza y caja conserva su cuenta. - Paso de base de datos 154 (`goods.ParentID`, `operations`/`operationstemp.UnitItemID` y `UnitRatio`). El paso 153 se salta: es el de los puntos de marcaje sólo de entrada de la copia del núcleo de AxisWeb. ## 5.26.10.13.r2 — la sincronización con la nube sobrevive a su token y ya no bloquea el catálogo - **Sincronización con la nube (contabilidad y tienda en línea):** el token de acceso que la nube da por 24 horas se renueva antes de que caduque, y una petición respondida con 401 pide un token nuevo y se envía otra vez. Un punto de venta encendido durante días ya no deja de sincronizar con 401 en cada llamada hasta reiniciarlo. - **La importación del catálogo escribe sólo lo que cambió:** cada pasada reescribía todas las mercancías recibidas de la nube en una sola transacción, lo que dejaba bloqueada toda la tabla `goods` mientras duraba y hacía fallar una segunda sincronización con «Lock wait timeout exceeded». Ahora una mercancía sólo se escribe cuando la nube envía algo distinto, y los grupos se buscan una vez por pasada en lugar de una vez por mercancía. - **Una sincronización a la vez:** la sincronización manual del diálogo Importar/Exportar ya no corre encima de la periódica; lo dice en su consola y pide volver a intentarlo cuando termine la que está en marcha. ## 5.26.10.14 — verificador de precios en el navegador - **Verificador de precios (`/web/price`, nuevo):** una página pública para una pantalla en la tienda (tableta, monitor táctil o un Android con navegador): el cliente escanea un código y ve durante unos segundos el nombre, el precio (con IVA, en la lista de precios del local), la unidad y la foto; entre escaneos pasa los anuncios de la pantalla del cliente (Editar > Pantalla del cliente: carpeta, logotipo, redes sociales, tema oscuro o claro). Los códigos de balanza y «3*código» muestran la cantidad y el total; los códigos desconocidos lo dicen. Sustituye a la app AxisPriceChecker, que descargaba todo el catálogo por el antiguo conector móvil. Ajustes en Servidor web: activado o no (desactivado por defecto), mostrar el precio de la segunda unidad (caja, paquete) y los segundos que el producto se queda en pantalla. ## 5.26.10.13 — conexiones con la nube que sobreviven a un DNS malo - **Conexiones con la nube (sincronización de contabilidad y tienda en línea, Tropipay, Alawao, eBioro, AxisMarket, opiniones):** el servidor se resuelve primero por IPv4, así que un servidor DNS IPv6 mal configurado en el adaptador de red ya no rompe la sincronización con «No such host is known» mientras el ping funciona. Se recuerda la última dirección que funcionó (`cloud-hosts.json` en la carpeta de datos del usuario) y se usa cuando el DNS no responde. - **Errores de red claros:** la consola de importación/exportación dice qué revisar (DNS del equipo, puerto cerrado, sin respuesta, certificado) en lugar del texto crudo del socket. - **Ajustes de Importar/Exportar ▸ Probar conexión:** comprueba la URL de la nube paso a paso (dirección, DNS IPv4/IPv6, puerto, certificado, respuesta HTTP) y muestra dónde falla. - Camarero web: la página ocupa toda la pantalla de una tableta y la letra escala con ella. ## 5.26.10.12 — camarero web, página del gerente y control de salida - **Comanda del camarero en el navegador (`/web/waiter`, nuevo):** la app Android del camarero, en el mismo Servidor web que sirve la pantalla de cocina y la carta QR, con los datos reales de AxisPOS. Cinco páginas que se deslizan (mesas, grupo, mercancías, comanda, órdenes) con los botones que el personal ya conoce; fotos de las mercancías; modificadores y comentarios; enviar a cocina (con su comanda); **Ticket** imprime la cuenta parcial del cliente en la impresora del punto de venta; ingredientes de una mercancía con una pulsación larga; agotados compartidos por todos los teléfonos; mover, unir o dividir una orden a otra mesa, cliente o camarero; el total de la orden con servicio y redondeo como en la cuenta impresa; instalable en la pantalla de inicio. Permiso «Camarero (web)». - **Modos de comanda** (Servidor web ▸ «Órdenes del camarero»): Individual, Combinado (todos ven y añaden a las órdenes de la mesa, que se guardan con el camarero que la abrió) y Limitado (una mesa abierta por otro camarero no se puede usar). - **Reglas de precio en las órdenes web:** las promociones y descuentos se aplican al enviar la orden y el teléfono muestra el precio final mientras se arma. - **Paleta más tranquila:** fichas planas en un azul apagado, verde para lo que la cocina marcó como listo, ámbar para las mesas de otros camareros; tema oscuro, claro o el del teléfono. - **HTTPS en la red local (Servidor web ▸ «Servir también por HTTPS»):** AxisPOS crea su propia autoridad de certificación y sirve las páginas en el puerto siguiente; cada teléfono instala la autoridad una vez desde `/web/ca.crt`. Permite mantener la pantalla encendida, el escáner con la cámara e instalar las páginas como app. - **Página del gerente (`/web/manager`, nuevo):** capturar **inventarios, compras, ventas y mermas** escaneando (cámara, lector Bluetooth o tecleando) y guardarlos como documentos reales a través del núcleo, con el mismo IVA, existencia y numeración que el escritorio (sustituye al Data Collector y Manager de Android, que escribían SQL directamente desde el teléfono). **Mercancías:** consultar una mercancía (existencia por local, precios, margen, últimas compras y ventas), crearla y editarla, y crear en el momento un código escaneado desconocido. Enlaces al Resumen y a las demás páginas según permisos. Permiso «Gerente (web)»; cada documento pide el permiso de escritorio de su tipo, y un usuario que no puede ver precios de compra no ve costos. - **Control de salida (`/web/checkpoint`, nuevo):** para el teléfono o la tableta del portero. Lista las últimas ventas, encuentra una por el número de ticket (escaneado o tecleado, entero o sus últimas cifras), muestra las líneas pagadas con fotos y marca la salida, una salida parcial o un problema con una nota. Una venta que ya salió no puede salir dos veces, y una venta sin pagar del todo queda señalada. Las marcas son entradas del registro de la aplicación (sin tabla nueva). Permiso «Control de salida (web)». - Mercancías: el precio de las últimas ventas en la ficha de la mercancía ya tiene en cuenta el IVA correctamente. ## 5.26.10.10 — kiosko de autoservicio y teclado táctil - **Kiosko (nuevo módulo de front office, `Warehouse.FrontOffice.Kiosk`):** una pantalla de autoservicio para el cliente, junto a Tienda y Restaurante (Operaciones ▸ Kiosko, propósito del asistente de configuración, permiso `resSTKiosk`). Catálogo con la barra de grupos de mercancías y tarjetas con foto y «+», hoja de la mercancía con los modificadores del restaurante y la cantidad, carrito («Mi compra») con botones de cantidad, quitar y una nota para la cocina por línea, forma de pago, pago por QR y una pantalla de agradecimiento que vuelve a empezar sola. Diseño horizontal o vertical (tótem), automático según la pantalla. - **Dos formas de terminar:** «Pagar en caja» deja una orden de restaurante abierta (con su comanda) para que el cajero la cierre desde la pantalla del Restaurante, cada orden en una mesa libre del grupo configurado para que nunca se junten; «Tarjeta» muestra un QR de pago (plantilla del perfil o el enlace del pago electrónico activo) y cierra la venta con el tipo de pago de tarjeta. - **Página de ajustes del Kiosko:** perfil, grupos, locales de venta y de órdenes, orientación, columnas, texto de bienvenida, tipo de pago de tarjeta y texto del QR, tiempos de inactividad y de agradecimiento, opciones de impresión. - **Teclado táctil (`AxisKeyboard`):** QWERTY con ñ, cifras, signos, mayúsculas, espacio, borrar e intro, en los colores del tema táctil. Se despliega bajo la búsqueda del Restaurante, los diálogos de teléfono/NIF/tarjeta del cliente y la nota de la Tienda cuando el campo recibe el foco, y se cierra con Escape, con un toque fuera o al abrir otra ventana; va fijo bajo la nota del kiosko y el campo de modificador nuevo. Interruptor: «Teclado táctil en los campos de texto» en los ajustes de la Tienda y del Restaurante. - Las tarjetas de mercancía del kiosko muestran la foto ocupando toda la tarjeta; las fotos de las mercancías se guardan en caché por tamaño. ## 5.26.10.9 — pantallas compactas y devoluciones en la Tienda - **Pantallas de baja resolución (menos de 800 px de alto):** las páginas táctiles de la Tienda y del Restaurante usan iconos de barra más pequeños, barras más bajas y botones de grupos más bajos, de modo que todos los grupos de mercancías caben sin desplazarse. - **Barra de la Tienda en esas pantallas:** limpiar fila y limpiar todo son un solo botón con menú desplegable, y el botón de turno ocupa el lugar del de salir, que pasa a su menú. - Un nombre de mercancía largo ya no ensancha la ventana: las etiquetas de estado bajo la venta se recortan con «…». - **Devolver desde una venta reciente (Tienda):** con el carrito vacío, Devolución lista las ventas de los últimos 3 días, deja elegir la cantidad de cada línea y devuelve al precio cobrado, atada a su venta (se descuenta lo ya devuelto). Con líneas en el carrito funciona como antes. El menú de Cobrar sigue activo sin mercancías. - **Orden de transferencia (Tienda):** el botón se desactiva con el carrito vacío y no se guarda una transferencia sin líneas. - **Editar mercancías:** las unidades de medida vuelven a verse y a poder editarse (estaban ocultas y no se guardaban). - **Mercancías ▸ grupos:** arrastrar mercancías a un grupo y reordenar los grupos vuelven a funcionar en GTK4.