namespace Domain.Entities { /// Estado de la reserva (establecido en decisiones 2025-10-12) public enum StockReservationStatus { Reserved = 1, // Activa: descuenta disponibilidad Consumed = 2, // Consumida al cerrar expedición Released = 3 // Liberada por cancelación / devolución } public class ELSStockReservation { /// /// Identificador autoincremental de la reserva. /// public int Id { get; set; } /// /// Tipo de origen de la reserva. 1=Expedition (extensible a futuros orígenes). /// public byte SourceType { get; set; } /// /// Identificador del origen. Ej.: expedition_id cuando source_type=1. /// public int SourceId { get; set; } /// /// Referencia al StockItem exacto bloqueado (FK a PhLSM_StockItem). Define producto/ubicación/trazabilidad por JOIN. /// public int StockitemId { get; set; } /// /// Cantidad reservada (bloqueada). No disponible mientras status=1 (Reserved). /// public decimal ReservedQuantity { get; set; } /// /// Estado de la reserva: 1=Reserved, 2=Released, 3=Consumed. /// public StockReservationStatus Status { get; set; } = StockReservationStatus.Reserved; /// /// Fecha/hora de creación (UTC). /// public DateTime Createdat { get; set; } /// /// Última modificación (UTC). Puede ser NULL si nunca se actualizó. /// public DateTime? Modifiedat { get; set; } /// /// Token de concurrencia optimista (ROWVERSION) para actualizaciones seguras. /// public byte[] Rowversion { get; set; } = Array.Empty(); } }