feat(expeditions): bloqueo doble traza por stockitem_id (MVP) #5
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexto
Ya se persiste stockitem_id en PhLSM_ExpeditionDetails.
FK e índices creados.
UI preserva StockItemId.
CreateFullExpeditionAsync persiste correctamente.
Issue #3 cerrada. Base de trazabilidad física lista.
Objetivo (MVP)
Implementar una validación en Core para impedir que un stockitem_id pueda asociarse a más de una Expedición activa.
Definición de “activa”
Activa = Status NOT IN (Cerrada, Anulada)
(equivalente a estados 1–4 en ExpeditionStatus actual).
Alcance / Enfoque
Validación se ejecuta antes de persistir (Core).
Se consulta a Data/Repository para detectar conflictos (sin modificar modelos EF scaffold).
Error de negocio debe devolverse como 400 con mensaje claro (ya hay manejo de InvalidOperationException).
Criterios de aceptación
Si intento crear una expedición con un stockitem_id ya asociado a una expedición activa → rechazar con error de negocio.
Si el stockitem_id existe solo en expediciones Cerrada o Anulada → permitir.
Si el request trae el mismo stockitem_id repetido en múltiples líneas → rechazar (validación intra-request).
No se modifican modelos EF de Models/ generados por scaffold.
Impacto por capas (plan abajo hacia arriba)
Data: agregar método en repo para detectar conflictos por stockitem_id en expediciones activas.
Domain: agregar DTO pequeño para reportar conflictos (stockitem_id, expedition_id/number, status).
Core: aplicar regla de negocio en CreateAndIssueAsync (o flujo equivalente).
API/UI: sin cambios funcionales esperados (solo propagar mensaje).
Notas / Riesgos
Este MVP no cubre condición de carrera concurrente (se resuelve más adelante con reservas/concurrencia).