namespace Domain.Entities
{
    public partial class ESalesDocumentDetail
    {
        public int Id { get; set; }

        /// <summary>
        /// Documento comercial al que pertenece el detalle.
        /// </summary>
        public int SalesdocumentId { get; set; }

        /// <summary>
        /// Numero de linea dentro del documento.
        /// </summary>
        public int LineNumber { get; set; }

        /// <summary>
        /// Origen logico del item. Persistir como codigo semantico: MANUAL, QUOTE, DELIVERY_NOTE, CAPITA o ADJUSTMENT.
        /// </summary>
        public string OriginType { get; set; } = null!;

        /// <summary>
        /// Identificador generico del origen cuando aplique.
        /// </summary>
        public int? OriginId { get; set; }

        /// <summary>
        /// Detalle del presupuesto aprobado que origina la linea, cuando exista. Puede ser NULL en ventas manuales.
        /// </summary>
        public int? QuoteDetailId { get; set; }

        /// <summary>
        /// Producto asociado a la linea, si aplica.
        /// </summary>
        public int? ProductId { get; set; }

        /// <summary>
        /// Descripcion visible de la linea facturada.
        /// </summary>
        public string Description { get; set; } = null!;

        /// <summary>
        /// Cantidad facturada.
        /// </summary>
        public decimal Quantity { get; set; }

        /// <summary>
        /// Precio unitario autorizado o de referencia proveniente del origen comercial.
        /// </summary>
        public decimal? AuthorizedUnitPrice { get; set; }

        /// <summary>
        /// Importe autorizado o de referencia proveniente del origen comercial.
        /// </summary>
        public decimal? AuthorizedAmount { get; set; }

        /// <summary>
        /// Porcentaje facturado sobre el origen. Permite facturacion parcial obra social / particular.
        /// </summary>
        public decimal? BilledPercentage { get; set; }

        /// <summary>
        /// Precio unitario efectivo de la linea del documento.
        /// </summary>
        public decimal UnitPrice { get; set; }

        /// <summary>
        /// Importe neto de la linea.
        /// </summary>
        public decimal NetAmount { get; set; }

        /// <summary>
        /// Importe de impuestos de la linea.
        /// </summary>
        public decimal TaxAmount { get; set; }

        /// <summary>
        /// Importe total de la linea.
        /// </summary>
        public decimal TotalAmount { get; set; }

        /// <summary>
        /// Snapshot JSON del origen de la linea para trazabilidad historica.
        /// </summary>
        public string? OriginSnapshotJson { get; set; }

        public DateTime Createdat { get; set; }

        public DateTime? Modifiedat { get; set; }

        public virtual ICollection<ESalesDocumentCoverage> PhSSalesDocumentCoverages { get; set; } = new List<ESalesDocumentCoverage>();
    }

}
