Files
mercadodevida/work/artifacts/POS-FIX-8/implementer.md
2026-08-24 07:39:32 +02:00

1.9 KiB

POS-FIX-8: Implementer Evidence

Problema

Las ventas pendientes solo tenían un botón "Cobrar resto". No había forma de:

  1. Recuperar la venta para seguir agregando artículos
  2. Eliminar la venta pendiente sin cobrarla

Cambios realizados

Backend

project/src/modules/pos/api/pos.routes.ts

  • Nuevo endpoint DELETE /pos/sales/:id para eliminar ventas pendientes
  • Valida que la venta esté en estado PENDING
  • Valida que no tenga pagos registrados
  • Restaura el inventory para cada línea de producto (disponible + cantidad)
  • Registra movimiento de inventory con operación 'cancel'
  • Marca la orden como CANCELLED en la base de datos

Frontend

project/apps/pos/src/types/checkout.ts

  • Añadido tipo RecoveredOrderItem para los items devueltos por /pos/sales/:id/items

project/apps/pos/src/lib/api-client.ts

  • Añadido deleteSale(orderId) → DELETE /pos/sales/:id
  • Re-ordenado listOrderItems para曝光 explícito

project/apps/pos/src/app/(terminal)/page.tsx

  • Nuevo estado: deleteConfirmFor (venta a eliminar), recoveringSaleId (venta siendo recuperada)
  • Nueva función recoverSale(sale):
    • Carga items via listOrderItems
    • Filtra items no-free y no-returned
    • Añade al carrito actual (merge si hay items existentes)
    • Refresca panel de pendientes
  • Nueva función deleteSale(sale):
    • Llama deleteSale API
    • Cierra diálogo de confirmación
    • Refresca panel de pendientes
  • UI de ventas pendientes actualizada:
    • "Recuperar" (verde): carga venta en ticket
    • "🗑" (rojo): abre diálogo de confirmación
  • Diálogo de confirmación de eliminación con warn de que liberará stock

Verificación

  • TypeScript backend compila sin errores
  • TypeScript frontend compila sin errores
  • Botón "Recuperar" visible en cada venta pendiente
  • Botón "🗑" abre diálogo de confirmación
  • Eliminación de venta pendiente restaura inventory