4.6 KiB
4.6 KiB
POS-002 — Implementer notes
Cambios
Migraciones
project/migrations/043_pos_basics.js- Crea
pos_stores,pos_terminals,pos_payment_methods,pos_quick_products,pos_parked_tickets,pos_cash_sessions. - Seed idempotente de la tienda por defecto Natural - Mercado de Vida (
natural-mercado-de-vida) y métodoscash/card. - Índice parcial para impedir más de una sesión OPEN por terminal.
- Crea
project/migrations/044_pos_inventory_store.js- Añade
store_idainventory_stockeinventory_movements. - Backfill de las 14 filas de stock y 13 movimientos existentes a la tienda por defecto.
- Sustituye unicidad de
variant_idpor(variant_id, store_id).
- Añade
project/migrations/045_pos_orders_source.js- Añade
source,terminal_id,cash_session_idaorders_orders. - Añade estado
COMPLETEDal CHECK. - Permite
user_id NULLpara walk-ins POS, pero añade CHECKsource = 'pos' OR user_id IS NOT NULL.
- Añade
project/migrations/046_pos_backoffice_roles.js- Añade roles
pos_cashierypos_manageral CHECK debackoffice_users.role.
- Añade roles
project/migrations/047_orders_user_required_when_not_pos.js- Catch-up para bases que ya habían aplicado la versión inicial de 045 sin el CHECK de
user_id.
- Catch-up para bases que ya habían aplicado la versión inicial de 045 sin el CHECK de
Dominio/auth
src/shared/auth.ts:Roleahora incluyepos_cashierypos_manager; nuevorequireAnyRole().src/shared/tests/auth.test.ts: 8 tests, incluyendo roles POS y lista vacía.src/modules/orders/domain/order.ts:OrderState.COMPLETEDy estado terminal sin transiciones.
Inventario multi-tienda
StockItemahora exponestoreId.StockCommandahora exigestoreId.InventoryService.checkAvailability(variantId, storeId, quantity).- Repositorio PostgreSQL filtra y actualiza por
(variant_id, store_id); los movimientos también guardanstore_id. - El flujo ecommerce/cart usa
DEFAULT_STORE_IDpara mantener compatibilidad con la tienda única actual. - Endpoints inventory aceptan
storeIdopcional y usan la tienda por defecto si no se envía. - Bulk-adjust actualizado a la clave compuesta y movimiento con store.
- Tests unitarios e integración actualizados.
Build admin
project/apps/admin/next.config.ts:turbopack.root = __dirnamepara evitar que Next.js 16 elija el workspace incorrecto por la presencia de múltiples lockfiles (project/package-lock.json+project/frontend/package-lock.json).- Se verificó build limpio después de borrar
.next;/brandsy/categoriesprerenderizan correctamente.
Evidencia
Backend build: npm run build ✅
Backend tests: 191 passed, 56 skipped ✅
Backend typecheck: npx tsc --noEmit ✅
Admin build limpio: npm run build ✅
Admin typecheck: npx tsc --noEmit ✅
Admin ESLint relevante ✅
Migrations 043..047 aplicadas ✅
verify.sh ✅
Pruebas de constraint:
ecommerce + user_id NULL → CHECK violation ✅
pos + user_id NULL → insert allowed ✅
re-run migrations → No migrations to run ✅
Nota de build
El error reportado de Next.js (Export encountered an error on /brands/page) era un fallo de prerender con el backend inaccesible y raíz de Turbopack ambigua. El problema se reprodujo en el entorno reportado, se limpió .next, se fijó turbopack.root, y el build limpio pasó sin ECONNREFUSED, sin error de prerender y sin warning de lockfiles.
Archivos modificados
project/migrations/043_pos_basics.jsproject/migrations/044_pos_inventory_store.jsproject/migrations/045_pos_orders_source.jsproject/migrations/046_pos_backoffice_roles.jsproject/migrations/047_orders_user_required_when_not_pos.jsproject/src/shared/auth.tsproject/src/shared/tests/auth.test.tsproject/src/modules/orders/domain/order.tsproject/src/modules/inventory/domain/stock.tsproject/src/modules/inventory/domain/ports.tsproject/src/modules/inventory/application/inventory-service.tsproject/src/modules/inventory/infrastructure/pg-inventory-repository.tsproject/src/modules/inventory/api/inventory.routes.tsproject/src/modules/inventory/index.tsproject/src/modules/inventory/tests/inventory-service.test.tsproject/src/app/tests/inventory.itest.tsproject/src/modules/cart/application/cart-service.tsproject/src/modules/checkout/application/checkout-service.tsproject/src/modules/checkout/tests/checkout-service.test.tsproject/apps/admin/next.config.ts