63 lines
3.7 KiB
Markdown
63 lines
3.7 KiB
Markdown
# 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 en `project/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 (`quickProductVariantIds` longitud 8).
|
|
|
|
### 3) Backend de catálogo para el buscador
|
|
- Extendí `GET /pos/admin/catalog-products` en `project/src/modules/pos/api/pos.routes.ts`.
|
|
- Ahora acepta:
|
|
- `q` (búsqueda)
|
|
- `limit`
|
|
- `variantIds` (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.ts` para que el TPV:
|
|
- recalcule el precio bruto autoritativo desde `pricing_variant_prices`
|
|
- valide descuentos contra el bruto real
|
|
- guarde `orders_orders.subtotal_cents` y `total_cents` en bruto
|
|
- guarde `orders_orders.tax_cents` con el IVA real
|
|
- Corregí `project/src/modules/pos/application/build-pos-receipt.ts` para 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.ts` para que las devoluciones reembolsen también el IVA del TPV.
|
|
- Ajusté lecturas POS en `project/src/modules/pos/api/pos.routes.ts` para que búsqueda, touch catalog y lookup devuelvan `priceCents` bruto al cajero.
|
|
- Ajusté la recuperación de ventas en `project/apps/pos/src/app/(terminal)/page.tsx` para 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/items` para 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 `POST` solo para líneas nuevas
|
|
- hace `PATCH` para igualar la cantidad exacta de líneas ya existentes
|
|
- mantiene `DELETE` para 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
|
|
|
|
## 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ón `057_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}.json` añadiendo `agent`, para que `verify.sh` no siga cayendo por metadata vieja.
|
|
- No se cerró la feature; sigue pendiente de gates.
|