3.7 KiB
3.7 KiB
Implementer evidence — POS-RECEIPT-QUICK-FIXES
Cambios realizados
1) Productos rápidos: nuevo flujo con buscador + lista de hasta 8
- Reemplacé los
<select>de productos rápidos enproject/apps/admin/src/app/(dashboard)/pos/page.tsx. - Ahora el admin usa:
- buscador por nombre / SKU / EAN
- resultados con botón
Añadir - lista ordenada de 8 huecos máximos
- botones
↑ Subir,↓ Bajar,Quitar - botón explícito
Guardar accesos rápidos
- El modal ya hidrata los productos ya guardados mediante
variantIds, así se ven nombre/SKU al reabrir la configuración.
2) Fix del guardado que no persistía
- El bug principal en admin era funcional/UI: existía
saveTouchConfig()pero no había ningún botón que lo disparase. - Añadí el botón de guardado y mantuve el payload esperado por backend (
quickProductVariantIdslongitud 8).
3) Backend de catálogo para el buscador
- Extendí
GET /pos/admin/catalog-productsenproject/src/modules/pos/api/pos.routes.ts. - Ahora acepta:
q(búsqueda)limitvariantIds(para hidratar la selección ya guardada)
- Deja de ser necesario cargar toda la lista de variantes al entrar en la página del POS admin.
4) TPV: el ticket ya calcula IVA y totales con precio bruto
- Corregí
project/src/modules/pos/application/create-pos-sale.tspara que el TPV:- recalcule el precio bruto autoritativo desde
pricing_variant_prices - valide descuentos contra el bruto real
- guarde
orders_orders.subtotal_centsytotal_centsen bruto - guarde
orders_orders.tax_centscon el IVA real
- recalcule el precio bruto autoritativo desde
- Corregí
project/src/modules/pos/application/build-pos-receipt.tspara que el receipt renderice:- precio unitario bruto
- subtotal bruto
- descuento bruto
- IVA real
- total final bruto
- Corregí
project/src/modules/pos/application/apply-pos-return.tspara que las devoluciones reembolsen también el IVA del TPV. - Ajusté lecturas POS en
project/src/modules/pos/api/pos.routes.tspara que búsqueda, touch catalog y lookup devuelvanpriceCentsbruto al cajero. - Ajusté la recuperación de ventas en
project/apps/pos/src/app/(terminal)/page.tsxpara conservar el precio final bruto al convertir líneas recuperadas en libres.
5) Frontend checkout: sincronización del carrito sin duplicar cantidades
- Corregí
project/frontend/src/app/api/checkout/route.ts. - Antes el proxy de checkout hacía
POST /cart/itemspara todos los productos, así que si el carrito servidor ya tenía una unidad de la variante, el checkout intentaba sumar encima (ej. 16 en UI + 1 previa en servidor = 17 pedidas). - Ahora:
- hace
POSTsolo para líneas nuevas - hace
PATCHpara igualar la cantidad exacta de líneas ya existentes - mantiene
DELETEpara líneas eliminadas - parsea correctamente el envelope JSON del backend para mostrar solo el mensaje humano (
Only 16 units available; you requested 17.) y no el JSON entero
- hace
Validación
cd project && npm run typecheck✅cd project && npm run build✅cd project && npx vitest run src/modules/pos/tests/payment-allocation.test.ts✅cd project/apps/pos && npm run build✅cd project/frontend && npm run build✅cd project && TEST_DATABASE_URL=... npx vitest run src/app/tests/pos-checkout-receipts.itest.ts src/app/tests/pos-returns.itest.ts --no-file-parallelism⚠️ bloqueado por un fallo preexistente en migración057_product_variant_weight_and_expiry(type "w" does not exist), ajeno a estos cambios
Observaciones
- También corregí el artefacto heredado
work/artifacts/TPV-FIXES/{reviewer,security,qa}.jsonañadiendoagent, para queverify.shno siga cayendo por metadata vieja. - No se cerró la feature; sigue pendiente de gates.