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

        /// <summary>
        /// Documento comercial interno vinculado al documento fiscal.
        /// </summary>
        public int SalesdocumentId { get; set; }

        /// <summary>
        /// Estado fiscal independiente del estado comercial. Ejemplos: None, Pending, Authorized, Rejected, Error, PendingReconciliation.
        /// </summary>
        public int FiscalStatus { get; set; }

        /// <summary>
        /// Ambiente fiscal usado para autorizacion: homologacion, produccion u otro valor definido por configuracion.
        /// </summary>
        public string Environment { get; set; } = null!;

        /// <summary>
        /// Punto de venta fiscal ARCA/AFIP.
        /// </summary>
        public short? PointOfSale { get; set; }

        /// <summary>
        /// Tipo de comprobante fiscal ARCA/AFIP utilizado en FECAESolicitar.
        /// </summary>
        public int? VoucherType { get; set; }

        /// <summary>
        /// Letra fiscal del comprobante autorizado o a autorizar.
        /// </summary>
        public string? VoucherLetter { get; set; }

        /// <summary>
        /// Numero fiscal del comprobante asignado para ARCA. Se mantiene separado del numero interno.
        /// </summary>
        public int? VoucherNumber { get; set; }

        /// <summary>
        /// Codigo de autorizacion electronico obtenido desde ARCA/AFIP.
        /// </summary>
        public string? Cae { get; set; }

        /// <summary>
        /// Fecha de vencimiento del CAE.
        /// </summary>
        public DateTime? CaeExpirationDate { get; set; }

        /// <summary>
        /// Huella de idempotencia fiscal para evitar duplicacion de solicitudes ante ARCA.
        /// </summary>
        public string? RequestFingerprint { get; set; }

        /// <summary>
        /// Indica si el resultado fiscal es final y no debe volver a mutar salvo procesos controlados de auditoria.
        /// </summary>
        public bool IsFinal { get; set; }

        /// <summary>
        /// Payload JSON enviado a ARCA/AFIP.
        /// </summary>
        public string? ArcaRequestPayloadJson { get; set; }

        /// <summary>
        /// Payload JSON recibido desde ARCA/AFIP.
        /// </summary>
        public string? ArcaResponsePayloadJson { get; set; }

        /// <summary>
        /// Errores devueltos por ARCA/AFIP serializados como JSON.
        /// </summary>
        public string? ErrorsJson { get; set; }

        /// <summary>
        /// Eventos devueltos por ARCA/AFIP serializados como JSON.
        /// </summary>
        public string? EventsJson { get; set; }

        /// <summary>
        /// Observaciones devueltas por ARCA/AFIP serializadas como JSON.
        /// </summary>
        public string? ObservationsJson { get; set; }

        /// <summary>
        /// Fecha/hora UTC del intento de autorizacion fiscal.
        /// </summary>
        public DateTime? AttemptedAtUtc { get; set; }

        /// <summary>
        /// Fecha/hora UTC de finalizacion del flujo fiscal.
        /// </summary>
        public DateTime? CompletedAtUtc { get; set; }

        /// <summary>
        /// Indica que el documento fiscal fue resuelto mediante reconciliacion posterior a timeout o resultado ambiguo.
        /// </summary>
        public bool ReconciledAfterTimeout { get; set; }

        public DateTime Createdat { get; set; }

        public DateTime? Modifiedat { get; set; }

        public virtual ICollection<ESalesFiscalDocumentAssociation> PhSSalesFiscalDocumentAssociations { get; set; } = new List<ESalesFiscalDocumentAssociation>();
    }
}
