Antylogic
Probar demoAcceso app

399 guías operativas

Secciones de Docs
DocsTPV y cobro
Dispositivo

Cómo cerrar un ticket TPV

Cierra una cuenta TPV ya cobrada, registra el empleado de cierre cuando está disponible y actualiza el detalle del ticket sin crear pagos, facturas ni impresiones nuevas.

En este artículo

Cerrar un ticket es el paso operativo posterior al cobro. Sirve para sacar la cuenta del trabajo activo de sala cuando los clientes ya han pagado y el equipo necesita dejar limpia la mesa, la reserva o el servicio.

En el demo ES, el ejemplo se documenta sobre `Grupo Marea Demo`, ubicación `Marea Gran Via`, con el empleado TPV `Marta Ruiz`. La acción parte de un ticket en estado `paid`; si el ticket sigue pendiente, parcialmente pagado, anulado o ya cerrado, el cierre queda bloqueado.

Antes de empezar

  • Tener sesión iniciada en `Grupo Marea Demo` y en la ubicación `Marea Gran Via`.
  • Abrir un ticket que pertenezca a la misma ubicación del contexto `/api/app/{orgId}/{locationId}`.
  • Trabajar sobre un ticket en estado `paid`; en el runtime demo ES se usa `TPV_PAID_TICKET_ID`.
  • Entrar desde TPV con `ticketId`, `terminalId` y, si está disponible, `staffId` en la ruta del detalle.
  • Disponer de `tickets:manage` o de acceso TPV válido con `tpv:use` sobre la sesión de servicio activa.

Instrucciones

  1. 1.

    Abre el ticket cobrado

    Desde el TPV de `Marea Gran Via`, entra en el detalle del ticket que ya aparece como cobrado. Para una captura directa se puede usar `${APP_DEEPLINK_BASE}${ORG_ID}/${LOCATION_ID}/tpv/ticket?ticketId=${TPV_PAID_TICKET_ID}&terminalId=${TPV_TERMINAL_ID}&staffId=${TPV_STAFF_ID}&sourceTab=floor`.

  2. 2.

    Comprueba que el cierre está disponible

    Abre el menú de acciones del detalle. La opción `Cerrar ticket` debe aparecer habilitada y acompañada por la ayuda de cierre operativo cuando los clientes dejan el local.

  3. 3.

    Pulsa Cerrar ticket

    La app envía el cierre del ticket y, cuando existe empleado TPV activo, incluye `closed_by_staff_id`; en el demo corresponde a `TPV_STAFF_ID` para `Marta Ruiz`.

  4. 4.

    Revisa el detalle actualizado

    Después del refresco, confirma que el ticket queda cerrado. El detalle conserva líneas, pagos y factura asociada si existía, pero el cierre no añade cobros ni emite una factura nueva.

Validaciones y límites

  • Solo se pueden cerrar tickets con estado `paid`.
  • Un ticket `pending`, `partially_paid`, `void` o `closed` no es cerrable.
  • El ticket debe pertenecer a la ubicación actual; si no coincide, se trata como no encontrado.
  • Con `tpv:use` sin `tickets:manage`, el ticket debe pertenecer a la sesión de servicio activa.
  • La operación documentada usa `POST /api/app/{orgId}/{locationId}/tickets/{ticketId}/close` con payload opcional `{ "closed_by_staff_id": "<staffId>" }`.
  • No documentar `PUT /api/app/{orgId}/{locationId}/tickets/{ticketId}` como cierre: actualizar el ticket solo permite anularlo con `void`, no cerrarlo con `closed`.
  • El backend acepta `POST` y `PUT` sobre `/close`, pero el cliente TPV usa `POST`.
  • No hay flujo implementado para reabrir un ticket `closed`.
  • Algunas condiciones de UI contemplan `tpv:manage`, pero el cierre en backend exige `tickets:manage` o `tpv:use` válido para la sesión activa.

Resultado esperado

El ticket queda en estado `closed`, guarda `closed_by_staff_id` si se envió y deja de ocupar las asignaciones activas de mesa o reserva en TPV. La pantalla vuelve a mostrar el detalle con líneas, pagos y factura existente cuando aplica.

Artículos relacionados