[debt] ShopCart no guarda la sesión de caja en que se hizo la venta #9

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

Qué es la deuda

ShopCart no guarda en qué sesión de caja ni en qué inventario se hizo la venta, ni a qué día de operación pertenece (apps/api/src/prisma/contract.prisma). Toda relación entre una venta y su caja se reconstruye por fechas o se adivina.

Qué estamos pagando hoy

  • La devolución tiene que adivinar el inventario y toma el primero que tenga el producto (#1).
  • "Ventas del día" en reportes usa la fecha del navegador (reportes/page.tsx:46, isToday) en lugar del día de operación.
  • Los cortes de caja no pueden listar las ventas que les corresponden.

Arreglo propuesto

  • Agregar sessionId (FK a CashRegisterSession) a ShopCart; el inventario y el día de operación se obtienen a través de la sesión
  • Migración: definir qué hacer con las ventas existentes (dejar sessionId nullable o asignarlo por fecha)
  • Guardar sessionId al crear la venta
  • Usar sessionId en devoluciones, "Ventas del día" y cortes de caja

Techo de esta ronda

Solo el vínculo venta → sesión y su uso en devoluciones, reportes del día y cortes. Fuera: mover la venta al servidor (#3), que debería guardar sessionId dentro de la misma transacción.

Superficie

Contrato Prisma (apps/api/src/prisma)

Módulos

Base de datos / contrato Prisma, Punto de venta (POS), Caja / sesiones de caja, Día de operación, Reportes

Esfuerzo

M — un PR, un día

Riesgo de no tocarlo

Alto (seguridad, datos, o bloquea el próximo corte)

### Qué es la deuda `ShopCart` no guarda en qué sesión de caja ni en qué inventario se hizo la venta, ni a qué día de operación pertenece (`apps/api/src/prisma/contract.prisma`). Toda relación entre una venta y su caja se reconstruye por fechas o se adivina. ### Qué estamos pagando hoy - La devolución tiene que adivinar el inventario y toma el primero que tenga el producto (#1). - "Ventas del día" en reportes usa la fecha del navegador (`reportes/page.tsx:46`, `isToday`) en lugar del día de operación. - Los cortes de caja no pueden listar las ventas que les corresponden. ### Arreglo propuesto - [ ] Agregar `sessionId` (FK a `CashRegisterSession`) a `ShopCart`; el inventario y el día de operación se obtienen a través de la sesión - [ ] Migración: definir qué hacer con las ventas existentes (dejar `sessionId` nullable o asignarlo por fecha) - [ ] Guardar `sessionId` al crear la venta - [ ] Usar `sessionId` en devoluciones, "Ventas del día" y cortes de caja ### Techo de esta ronda Solo el vínculo venta → sesión y su uso en devoluciones, reportes del día y cortes. Fuera: mover la venta al servidor (#3), que debería guardar `sessionId` dentro de la misma transacción. ### Superficie Contrato Prisma (apps/api/src/prisma) ### Módulos Base de datos / contrato Prisma, Punto de venta (POS), Caja / sesiones de caja, Día de operación, Reportes ### Esfuerzo M — un PR, un día ### Riesgo de no tocarlo Alto (seguridad, datos, o bloquea el próximo corte)
Nolberto was assigned by Carlos 2026-10-02 20:06:18 +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#9