[bug] Se puede abrir caja y vender sin día de operación abierto #17

Open
opened 2026-10-02 18:47:39 +00:00 by Carlos · 0 comments
Member

Qué pasa

Se puede abrir caja y vender sin un día de operación abierto. Ni apps/api/src/modules/cash-register-session/cash-register-session.service.ts ni el POS (apps/web/src/app/pos) revisan que exista un OperatingDay con status = "open".

Entorno

local

Módulos

Día de operación, Caja / sesiones de caja, Punto de venta (POS), API / backend, Reportes

Severidad

Molesta; hay workaround

Pasos para reproducir

  1. Como administrador, cerrar el día de operación actual sin abrir uno nuevo (o empezar con la tabla operating_day vacía).
  2. Como cajero, abrir caja.
  3. Registrar una venta.

Esperado

No se puede abrir caja (ni vender) si no hay un día de operación abierto; el cajero ve un mensaje que pide abrir el día.

Actual

La caja se abre y la venta se registra. La venta no pertenece a ningún día de operación, y el panel de administración ("Ventas del día", admin/page.tsx:26) la cuenta o no según la fecha del navegador.

Además, sin día abierto el badge "Fecha de operación" muestra la fecha de hoy como si hubiera un día abierto: apps/web/src/app/_core/hooks/use-operating-day.ts:20 regresa new Date() cuando no encuentra día. El comentario de operating-day-badge.tsx:16 también es incorrecto: dice "según la caja abierta", pero usa el día de operación.

Evidencia

Encontrado en auditoría de código; no reproducido en ejecución.

// cash-register-session.service.ts — create() solo revisa si hay otra caja abierta en el inventario
const alreadyOpen = all.some((s) => s.inventoryId === data.inventoryId && s.status === "open");

Arreglo sugerido: en CashRegisterSessionService.create, rechazar con 400 si no hay día de operación abierto; en el POS, mostrar el estado y deshabilitar "Abrir caja"; en el badge, mostrar "Sin día abierto" en vez de la fecha de hoy. Workaround: abrir el día antes de que los cajeros abran caja.

¿Está también en producción?

  • Sí — este issue no basta; hay que abrir un Incidente / hotfix
  • No — solo local / staging
  • No sé

Antes de abrir

  • Busqué un issue duplicado
### Qué pasa Se puede abrir caja y vender sin un día de operación abierto. Ni `apps/api/src/modules/cash-register-session/cash-register-session.service.ts` ni el POS (`apps/web/src/app/pos`) revisan que exista un `OperatingDay` con `status = "open"`. ### Entorno local ### Módulos Día de operación, Caja / sesiones de caja, Punto de venta (POS), API / backend, Reportes ### Severidad Molesta; hay workaround ### Pasos para reproducir 1. Como administrador, cerrar el día de operación actual sin abrir uno nuevo (o empezar con la tabla `operating_day` vacía). 2. Como cajero, abrir caja. 3. Registrar una venta. ### Esperado No se puede abrir caja (ni vender) si no hay un día de operación abierto; el cajero ve un mensaje que pide abrir el día. ### Actual La caja se abre y la venta se registra. La venta no pertenece a ningún día de operación, y el panel de administración ("Ventas del día", `admin/page.tsx:26`) la cuenta o no según la fecha del navegador. Además, sin día abierto el badge "Fecha de operación" muestra la fecha de hoy como si hubiera un día abierto: `apps/web/src/app/_core/hooks/use-operating-day.ts:20` regresa `new Date()` cuando no encuentra día. El comentario de `operating-day-badge.tsx:16` también es incorrecto: dice "según la caja abierta", pero usa el día de operación. ### Evidencia ```shell Encontrado en auditoría de código; no reproducido en ejecución. // cash-register-session.service.ts — create() solo revisa si hay otra caja abierta en el inventario const alreadyOpen = all.some((s) => s.inventoryId === data.inventoryId && s.status === "open"); ``` Arreglo sugerido: en `CashRegisterSessionService.create`, rechazar con `400` si no hay día de operación abierto; en el POS, mostrar el estado y deshabilitar "Abrir caja"; en el badge, mostrar "Sin día abierto" en vez de la fecha de hoy. Workaround: abrir el día antes de que los cajeros abran caja. ### ¿Está también en producción? - [ ] Sí — este issue no basta; hay que abrir un Incidente / hotfix - [ ] No — solo local / staging - [x] No sé ### Antes de abrir - [x] Busqué un issue duplicado
Miguel was assigned by Carlos 2026-10-02 20:04:44 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RynextTechnologies/PDV#17