Cómo cerrar un servicio TPV
Cierra la sesión activa de TPV de Marea Gran Via cuando el servicio ya está liquidado: todos los tickets están pagados, cerrados o anulados, y no queda ninguna caja abierta asociada al servicio.
En este artículo
El cierre de servicio marca una `service_session` como `closed`. No cobra tickets ni cierra cajas automáticamente; por eso conviene usarlo sólo cuando la operativa del servicio ya está resuelta.
En Marea Gran Via, el operador ejecuta el cierre desde el menú de acciones del TPV. Si Marta Ruiz está seleccionada, la app puede registrar `closed_by_staff_id`; si no hay empleado seleccionado, el cierre se envía sin ese dato.
Antes de empezar
- Sesión iniciada en Antylogic con acceso a Grupo Marea Demo y a la ubicación Marea Gran Via.
- Permiso `tpv:use` en la ubicación. No documentar `tpv:close-service` como suficiente por sí solo con la implementación actual.
- Una `service_session` activa en el TPV.
- Todos los tickets del servicio en estado `paid`, `closed` o `void`.
- Todas las cajas del servicio cerradas, incluidas las abiertas desde otros terminales.
- Empleado seleccionado en el TPV sólo si se quiere registrar quién ejecuta el cierre.
Instrucciones
- 1.
Abre el TPV activo
Entra en el TPV de Marea Gran Via en la vista de plano. Si hay un servicio activo, verás el TPV operativo; si no lo hay, la pantalla muestra el flujo de apertura y la acción de cierre no aparece.
- 2.
Cierra cualquier caja abierta
Antes de cerrar el servicio, revisa que no quede ninguna `cash_register_session` abierta para esa sesión. El TPV bloquea Cerrar servicio aunque la caja abierta pertenezca a otro terminal.
- 3.
Resuelve los tickets pendientes
Comprueba que no quedan tickets operativos pendientes. Cerrar servicio no cambia tickets: si alguno no está en `paid`, `closed` o `void`, el backend rechazará el cierre.
- 4.
Ejecuta Cerrar servicio
Abre el menú de acciones de la cabecera del TPV y pulsa Cerrar servicio. No hay confirmación intermedia: al pulsar, la app envía el cierre de la sesión activa con `closed_by_staff_id` sólo cuando hay empleado seleccionado.
- 5.
Revisa el resultado
Tras un cierre correcto, la app muestra "Servicio cerrado correctamente.", limpia la selección operativa y actualiza las sesiones. Después puedes revisar la sesión cerrada desde el histórico de sesiones.
Validaciones y límites
- La pantalla operativa y el wrapper actual exigen `tpv:use`.
- La UI actual usa `POST` para cerrar; el backend también acepta `PUT` en la misma ruta.
- El endpoint exige un cuerpo JSON decodificable, aunque `closed_by_staff_id` sea opcional.
- No puede existir ninguna `cash_register_session` con `status` `open` asociada a la `service_session`.
- Cada ticket de la sesión debe tener `status` exactamente `paid`, `closed` o `void`.
- `closed_by_staff_id` se recorta antes de guardar, pero no se valida contra `staff`.
- La acción queda deshabilitada mientras el cierre está en curso.
- No describir el cierre como idempotente: el análisis no verifica una regla explícita para sesiones ya cerradas.
Resultado esperado
La sesión queda guardada con `status` `closed` y hora de cierre en UTC. El detalle puede recalcular el resumen de facturación con tickets no anulados e incluir el evento u ocurrencia si la sesión estaba vinculada al calendario.