Fase 3: Operación Crítica del WMS, Idempotencia y Condiciones de Carrera
Objetivo: Habilitar el registro físico de movimientos en almacén bloqueando colisiones de datos simultáneas y duplicados de red.
1. Track Backend (.NET 10 & PostgreSQL)
[ ] Task 3.1: Lógica Transaccional de Movimientos (Kardex)
- Descripción: Implementar la escritura inmutable de transacciones del almacén.
- Detalle:
- Crear e instanciar servicios para movimientos de inventario (
wms.movimientos_inventarioywms.movimientos_inventario_detalle). - Restringir la base de datos a nivel de roles y políticas de seguridad para prohibir instrucciones de modificación (
UPDATE) o eliminación (DELETE), garantizando el Ledger de Kardex.
- Crear e instanciar servicios para movimientos de inventario (
[ ] Task 3.2: Aislamiento Pesimista con Bloqueo de Filas (FOR UPDATE)
- Descripción: Blindar los saldos físicos contra actualizaciones simultáneas.
- Detalle:
- Escribir queries con bloqueo de fila nativo (
FOR UPDATE) en Entity Framework Core al recuperar el stock de medicamentos. - Asegurar el flujo del Lock Wait para poner en cola de espera cualquier transacción concurrente que colisione con el mismo registro en disco.
- Escribir queries con bloqueo de fila nativo (
[ ] Task 3.3: Middleware de Idempotencia Transaccional
- Descripción: Crear filtros de infraestructura para evitar cargos dobles causados por reconexiones de red.
- Detalle:
- Desarrollar un filtro global de acción en .NET 10 (
IdempotentFilter.cs). - Extraer y comprobar el valor de la cabecera
Idempotency-Key(UUIDv4) contra una caché rápida en memoria de 120 segundos antes de ejecutar mutaciones en base de datos.
- Desarrollar un filtro global de acción en .NET 10 (
2. Track Frontend (React SPA & Dexie.js)
[ ] Task 3.4: Formularios de Operación WMS y Módulo Comercial
- Descripción: Diseñar pantallas de captura para el flujo físico de inventario y las operaciones comerciales críticas.
- Detalle:
- Crear las interfaces de usuario para el WMS: Registro de Entradas (Recepcón de OC), Surtido/Picking guiado por ruta FEFO con escaneo de código de barras por cada ítem, y Ajustes/Mermas con motivo de ajuste.
- Implementar el flujo de Pedido en Borrador (
COM_Bor): guardado parcial enpending_pedidosde Dexie, reanudación desde cualquier dispositivo y transición a estadoEnviadoal confirmar (RF-COM-07). - Implementar el flujo de Transferencias Inter-CEDIS: selección de origen/destino, escaneo de lotes, confirmación de recepción con diferencias (RF-WMS-05).
- Implementar el módulo de Corte de Caja (
FAC_Cor): desglose de ventas por forma de pago, cálculo automático de diferencias de arqueo y generación del registro de cierre de turno (RF-FAC-07). - Implementar el flujo de Clasificación de Devoluciones: captura del motivo (7 categorías), destino del lote (reintegro al WMS o baja sanitaria) y nota de crédito al cliente.
[ ] Task 3.5: Almacenamiento Local de Transacciones en Cola (Dexie.js)
- Descripción: Habilitar todas las colas offline en IndexedDB con el prefijo
pending_para cada flujo operativo. - Detalle:
- Crear y mapear los almacenes locales en la instancia de Dexie correspondiente al módulo:
pending_movimientos(WMS: entradas, salidas, ajustes)pending_pickings(WMS: confirmaciones de surtido por lote)pending_pedidos(Comercial: borradores y pedidos capturados sin red)pending_abonos(Crédito: registros de pago capturados en campo)
- Modificar el comportamiento de todos los formularios: si falla la comunicación de red, el payload se almacena localmente con estado
Pendientey libera la pantalla sin bloquear al operador.
- Crear y mapear los almacenes locales en la instancia de Dexie correspondiente al módulo:
[ ] Task 3.6: Inyección Automática de Llaves de Idempotencia
- Descripción: Diseñar la firma criptográfica de peticiones desde el cliente.
- Detalle:
- Configurar las peticiones de envío del frontend para inyectar una cabecera HTTP
Idempotency-Keycon un valor UUIDv4 generado mediante la API nativa de JavaScriptcrypto.randomUUID().
- Configurar las peticiones de envío del frontend para inyectar una cabecera HTTP