Files
mercadodevida/work/artifacts/POS-FIX-7/implementer.md
2026-08-24 07:23:55 +02:00

1.6 KiB

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

  • TypeScript backend compila sin errores
  • TypeScript frontend compila sin errores
  • Botón "Guardar pendiente" activo desde primer artículo
  • Diálogo de confirmación en "Vaciar caja"