# POS-FIX-7: Implementer Evidence ## Problema 1. El botón "Guardar pendiente" requería pagos parciales ya registrados (payments.length > 0), cuando debería estar activo desde el primer artículo añadido. 2. El botón "Vaciar caja" no pedía confirmación, borrando el ticket sin aviso. ## Cambios realizados ### Backend **`project/src/modules/pos/api/pos.routes.ts`** - Cambiado `payments: { type: 'array', minItems: 1 }` → `minItems: 0` en POST /pos/sales - Cambiado `z.array(payment).min(1)` → `z.array(payment).min(0)` en la validación Zod **`project/src/modules/pos/application/create-pos-sale.ts`** - Modificada `validatePaymentAllocations()`: ya no lanza error si `inputs.length === 0` - Permite crear ventas con `payments: []` → estado `PENDING`, `outstandingCents = totalCents` ### Frontend **`project/apps/pos/src/app/(terminal)/page.tsx`** - Nuevo estado `showClearConfirm` para el diálogo de confirmación - Nueva función `parkSale()` que llama a `createSale` con `payments: []` - Botones separados: - **"Guardar pendiente"** (amarillo): enabled desde `cart.length > 0`, llama `parkSale()` - **"Cobrar e imprimir"** (verde): enabled cuando `paidCents >= totals.total`, llama `confirmSale()` - **"Vaciar caja"** movido debajo con borde rojo, abre diálogo de confirmación - Diálogo de confirmación con "Cancelar" y "Vaciar" (confirmación destructiva en rojo) - `resetCashier()` también resetea `showClearConfirm` ## Verificación - [x] TypeScript backend compila sin errores - [x] TypeScript frontend compila sin errores - [x] Botón "Guardar pendiente" activo desde primer artículo - [x] Diálogo de confirmación en "Vaciar caja"