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
Como administrador, cerrar el día de operación actual sin abrir uno nuevo (o empezar con la tabla operating_day vacía).
Como cajero, abrir caja.
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 Carlos2026-10-02 20:04:44 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.tsni el POS (apps/web/src/app/pos) revisan que exista unOperatingDayconstatus = "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
operating_dayvacía).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:20regresanew Date()cuando no encuentra día. El comentario deoperating-day-badge.tsx:16también es incorrecto: dice "según la caja abierta", pero usa el día de operación.Evidencia
Arreglo sugerido: en
CashRegisterSessionService.create, rechazar con400si 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?
Antes de abrir