using System;
using System.Collections.Generic;

namespace Models.Models;

public partial class PhLsmStockOut
{
    /// <summary>
    /// Identificador único del egreso de stock
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Producto retirado del stock
    /// </summary>
    public int ProductId { get; set; }

    /// <summary>
    /// Cantidad retirada del producto
    /// </summary>
    public decimal Quantity { get; set; }

    /// <summary>
    /// Precio unitario usado para valorizar el egreso
    /// </summary>
    public decimal Unitprice { get; set; }

    /// <summary>
    /// Moneda utilizada en la valorización (ARS, USD, EUR)
    /// </summary>
    public string Currency { get; set; } = null!;

    /// <summary>
    /// Tasa de conversión de la moneda a ARS
    /// </summary>
    public decimal Exchangerate { get; set; }

    /// <summary>
    /// Fecha del egreso de stock
    /// </summary>
    public DateTime Outdate { get; set; }

    /// <summary>
    /// Referencia visible del movimiento (NE, devolución, cirugía)
    /// </summary>
    public string? Reference { get; set; }

    /// <summary>
    /// Tipo de origen del egreso (surgery, expiration, manual, etc.)
    /// </summary>
    public string? Sourcetype { get; set; }

    /// <summary>
    /// ID de la entidad que generó el egreso (ej: nota de expedición)
    /// </summary>
    public int? SourceId { get; set; }

    /// <summary>
    /// Identificador del caso quirúrgico asociado al egreso
    /// </summary>
    public Guid? TicketId { get; set; }

    /// <summary>
    /// Ubicación física desde donde se retiró el producto
    /// </summary>
    public int? LocationId { get; set; }

    /// <summary>
    /// Lote del producto egresado (si aplica trazabilidad)
    /// </summary>
    public string? Batch { get; set; }

    /// <summary>
    /// Fecha de vencimiento del producto egresado (si aplica)
    /// </summary>
    public DateOnly? Expiration { get; set; }

    /// <summary>
    /// Fecha de creación del registro
    /// </summary>
    public DateTime Createdat { get; set; }

    public virtual PhLsmProduct Product { get; set; } = null!;
}
