namespace Domain.Dtos.Stock { /// /// Ítem de expedición para lectura en UI e impresión (detalle ya resuelto). /// Contiene la información mínima y suficiente para mostrar/emitir la nota de entrega. /// public sealed class ExpeditionItemDto { /// /// Identificador interno del renglón (detalle) de la expedición. /// Útil para acciones sobre el ítem (eliminar, editar cantidad, etc.). /// public int Id { get; set; } /// /// Identificador del producto en el catálogo maestro (FK a PhLSM_Product.Id). /// No es necesariamente visible en impresión; se usa para joins y trazabilidad. /// public int ProductId { get; set; } /// /// Código de producto definido por la fábrica o fabricante. /// Puede variar según proveedor, presentación o país de origen. /// Recomendado como código “principal” a mostrar en la nota. /// public string FactoryCode { get; set; } = string.Empty; /// /// Nombre del producto tal como figura en el catálogo (técnico o comercial). /// Se utiliza para la descripción en la tabla de ítems de la impresión. /// public string ProductName { get; set; } = string.Empty; /// /// Cantidad a expedir para este ítem. /// Para productos con trazabilidad por unidad/serial, suele ser 1 por línea. /// Para productos por lote (batch), puede ser una cantidad agregada. /// public decimal Quantity { get; set; } /// /// Lote del producto (GS1 AI 10). /// Aplica a productos con trazabilidad por lote; puede ser null si no corresponde. /// public string? Batch { get; set; } /// /// Serial/Número de serie del producto (GS1 AI 21). /// Aplica a productos con trazabilidad por unidad; puede ser null si no corresponde. /// public string? Serial { get; set; } /// /// Fecha de vencimiento (GS1 AI 17) en precisión de día. /// Es null cuando el tipo de trazabilidad no requiere fecha. /// public DateOnly? Expiration { get; set; } /// /// Identificador de la ubicación/depósito desde donde se despacha (FK a StockLocation). /// Puede ser null si no aplica o no se registró en el momento de la expedición. /// public int? LocationId { get; set; } /// /// Nombre legible de la ubicación/depósito (resuelto por join). /// Se usa para impresión y visualización sin pedir más datos al front. /// public string? LocationName { get; set; } } }