feat(expeditions): transición Emitida → EnTransito con reserva de stock #7
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?
feat(expeditions): transición Emitida → EnTransito con reserva de stock
Descripción funcional
Implementar la transición logística de una expedición desde estado
Emitida a EnTransito.
Esta transición representa el momento en que el material sale
físicamente del depósito, por lo tanto el sistema debe:
reserved_quantityLa acción será disparada desde la UI mediante un botón "Pasar a
tránsito" disponible en la consulta de expediciones.
Flujo funcional
ConfirmModalreserved_quantityReglas de negocio
Transición permitida
Emitida → EnTransito
No se permiten otras transiciones en esta story.
Reservas de stock
Las reservas se crean en:
PhLSM_StockReservationCon:
source_type = 'EXPEDITION'
source_id = expedition_id
status = Reserved
Impacto en stock
Cuando la expedición pasa a EnTransito:
Se incrementa:
PhLSM_StockItem.reserved_quantityNo se modifica aún:
quantityValidaciones obligatorias
Antes de crear reservas:
Si alguna validación falla → abortar operación.
Alcance técnico por capa
DATA
Repositorio de reservas:
PhLSMStockReservationRepositoryOperaciones mínimas:
Repositorio de expediciones:
Repositorio de stock:
reserved_quantityporstockitem_idDOMAIN
Usar entidades existentes:
ELSStockReservationELSExpeditionELSExpeditionDetailConvención de reservas:
source_type = EXPEDITION
status = Reserved
CORE
Agregar operación en:
ExpeditionServiceResponsabilidades:
API
Agregar endpoint:
POST
/api/expeditions/{id}/in-transitResponsabilidad:
UI (Blazor)
En la consulta de expediciones:
Agregar botón:
Pasar a tránsito
Visible solo si:
Status == EmitidaAl presionar:
ConfirmModalReutilizar:
Shared/Modals/ConfirmModal.razorCriterios de aceptación
Caso exitoso
Dada una expedición Emitida
Cuando el usuario la pasa a EnTransito
Entonces:
PhLSM_StockReservationreserved_quantityEnTransitoConflicto de stock serializado
Si algún
stockitem_idserializado ya está reservado en otraexpedición:
→ la operación falla.
Falta de disponibilidad
Si:
quantity - reserved_quantity < cantidad solicitada
→ la operación falla.
Estado inválido
Si la expedición no está en Emitida
→ la operación se rechaza.
Fuera de alcance de esta story
No se implementa aún:
EnTransito → EnDestinoStockOutEstas serán stories posteriores.
Checklist técnico
Data
PhLSMStockReservationRepositoryCore
MoveToInTransitAsyncAPI
/expeditions/{id}/in-transitUI