feat(POS-FIX-11): completed feature

This commit is contained in:
chattie
2026-08-24 08:13:43 +02:00
parent 579e0a18eb
commit d103b634aa
13 changed files with 207 additions and 13 deletions

View File

@@ -0,0 +1,38 @@
# POS-FIX-11: Implementer Evidence
## Problema
Al guardar un ticket pendiente sin cliente asociado, no había forma de identificarlo. Solo se mostraba el ID o receipt number.
## Cambios realizados
### Migración
**`project/migrations/059_pos_pending_label.js`**
- Añade columna `pos_label` a `orders_orders` para almacenar nombre identificativo
### Backend
**`project/src/modules/pos/domain/pos-sale.ts`**
- Añade campo `posLabel?: string` a `PosSaleInput`
**`project/src/modules/pos/api/pos.routes.ts`**
- Schema: acepta `posLabel` en POST /pos/sales
- Query listSales: devuelve `pos_label AS "posLabel"`
**`project/src/modules/pos/application/create-pos-sale.ts`**
- INSERT: guarda `input.posLabel` en columna `pos_label`
### Frontend
**`project/apps/pos/src/types/checkout.ts`**
- Añade `posLabel?: string | null` a `PosPendingSale`
**`project/apps/pos/src/app/(terminal)/page.tsx`**
- Nuevo estado `pendingParkName` para el diálogo de nombre
- Nueva función `doParkSale(name?)` que acepta nombre opcional
- parkSale ahora abre diálogo si no hay cliente
- Diálogo para pedir nombre con input y botones Guardar/Cancelar
- Panel de ventas pendientes muestra: nombre/receipt → fecha+hora · total · pendiente
## Verificación
- [x] TypeScript compila sin errores
- [x] Diálogo aparece al guardar pendiente sin cliente
- [x] Nombre se muestra en el panel junto con fecha
- [x] Migración creada correctamente

View File

@@ -0,0 +1,6 @@
{
"agent": "leader",
"stage": "close",
"verdict": "APPROVED",
"notes": "POS-FIX-11 cerrado: pedir nombre al guardar pendiente sin cliente, mostrar nombre+fecha en panel. verify.sh verde."
}

View File

@@ -0,0 +1,6 @@
{
"agent": "qa",
"stage": "qa_gate",
"verdict": "APPROVED",
"notes": "Flows: (1) Con cliente -> guardar pendiente -> no pide nombre. (2) Sin cliente -> guardar pendiente -> pide nombre -> guarda y muestra en panel con fecha. (3) Con nombre -> panel muestra nombre + fecha."
}

View File

@@ -0,0 +1,6 @@
{
"agent": "reviewer",
"stage": "review_gate",
"verdict": "APPROVED",
"notes": "Migracion para pos_label anadida. Backend guarda y devuelve el label. Frontend muestra dialogo si no hay cliente y muestra nombre+fecha en panel. TypeScript OK."
}

View File

@@ -0,0 +1,6 @@
{
"agent": "security",
"stage": "security_gate",
"verdict": "APPROVED",
"notes": "Campo posLabel limitado a 100 chars, no expone datos sensibles. Input sanitizado en frontend. No hay vectores de injection."
}