using System; using System.Collections; using com.db4o; using Dominio.Afiliados; using Dominio.Autorizaciones; //using Dominio.Planes; namespace Reportes { /// /// Clase que representa una linea del Informe de Prestaciones Realizadas enviado por el /// Prestador. /// public class LineaInfoPrestacionesReport { #region Constructores public LineaInfoPrestacionesReport( int codAut, string tipoAut, int codAfiliado, string codPrestacion, DateTime fechaRealizacion, float porcentajeCobertura ) { this._codigoAutorizacion = codAut; this._tipoAutorizacion = tipoAut; this._codigoAfiliado = codAfiliado; this._codigoPrestacion = codPrestacion; this._fechaRealizacion = fechaRealizacion; this._porcentajeCobertura = porcentajeCobertura; } #endregion Constructores #region Campos Privados private bool _aprobada = false; private bool _existeAutorizacion = false; private string _motivoRechazo = string.Empty; private int _codigoAutorizacion; private string _tipoAutorizacion; private int _codigoAfiliado; private string _codigoPrestacion; private DateTime _fechaRealizacion; private float _porcentajeCobertura; #endregion Campos Privados #region Propiedades Públicas /// /// Determina si la linea fue aprobada por el método Validar() /// Sólo tiene sentido si fue ejecutado Validar() /// public bool Aprobada { get { return this._aprobada; } } public bool ExisteAutorizacion { get { return this._existeAutorizacion; } } /// /// Motivo por el cual se rechazó la línea, si es que se rechazó. /// En caso de haberse aprobado, debe estar vacío /// public string MotivoRechazo { get { return this._motivoRechazo; } } public int CodigoAutorizacion { get { return this._codigoAutorizacion; } } public string TipoAutorizacion { get { return this._tipoAutorizacion; } } public int CodigoAfiliado { get { return this._codigoAfiliado; } } public string CodigoPrestacion { get { return this._codigoPrestacion; } } public DateTime FechaRealizacion { get { return this._fechaRealizacion; } } public float PorcentajeCobertura { get { return this._porcentajeCobertura; } } #endregion Propiedades Públicas #region DB private com.db4o.ObjectContainer db = null; private ArrayList ObjectSetToArrayList (ObjectSet result) { ArrayList lst = new ArrayList (); Object s; if (result == null) return lst; while ((s = result.next ()) != null) { lst.Add (s); } return lst; } #endregion DB #region Métodos Públicos /// /// Valida la linea según las reglas de negocio (ver CU "Recibir y Cotejar") /// /// True si la linea es válida public bool Validar( Dominio.Autorizaciones.Prestador prestador ) { #region Chequeo de la autorización Autorizacion aut = this.getAutorizacion( this.CodigoAutorizacion ); if ( aut == null ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionInexistente ); this._existeAutorizacion = false; return false; } else { this._existeAutorizacion = true; if ( (aut.Prestador == null) || (aut.Prestador.Cuit != prestador.Cuit) ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestadorInvalido ); return false; } if ( (aut.Prestacion == null) || (aut.Prestacion.Codigo != this.CodigoPrestacion) ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestacionInvalida ); return false; } if ( aut.FechaRealizacion != DateTime.MinValue ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionYaRealizada ); return false; } if ( aut.getEstado(this.FechaRealizacion) != Autorizacion.Estado.Aprobada ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionNoAprobada ); return false; } if ( this.TipoAutorizacion.Trim() == "Manual" ) { if ( aut.GetType() != typeof(AutorizacionManual) ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido ); return false; } } else { if ( aut.GetType() != typeof(AutorizacionAutomatica) ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido ); return false; } } if ( aut.PorcentajeCobertura != this.PorcentajeCobertura ) { this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPorcentajeInvalido ); return false; } } #endregion Chequeo de la autorización #region Chequeo de Prestador if ( (prestador.FechaBaja != DateTime.MinValue) && (prestador.FechaBaja <= this.FechaRealizacion) ) { this.MarcarRechazada( MensajeMotivoRechazo.PrestadorDadoDeBaja ); return false; } #endregion Chequeo de Prestador #region Chequeo del Afiliado Afiliado a = this.getAfiliado( this.CodigoAfiliado ); if (a == null) { this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoInexistente ); return false; } else if ( (a.FechaBaja != DateTime.MinValue) && (a.FechaBaja <= this.FechaRealizacion) ) { this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoDadoDeBaja ); return false; } #endregion Chequeo del Afiliado #region Chequeo de la prestación Prestacion p = this.getPrestacion( this.CodigoPrestacion ); if ( p == null ) { this.MarcarRechazada( MensajeMotivoRechazo.PrestacionInexistente ); return false; } else { if ( (p.FechaBaja != DateTime.MinValue) && (p.FechaBaja <= this.FechaRealizacion) ) { this.MarcarRechazada( MensajeMotivoRechazo.PrestacionDadaDeBaja ); return false; } } #endregion Chequeo de la prestación this._aprobada = true; return true; } #endregion Métodos Públicos #region Métodos Privados private Afiliado getAfiliado( int codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = this.ObjectSetToArrayList( db.get( new Afiliado(this.CodigoAfiliado) ) ); Afiliado a = ( (al.Count == 0)? null : al[0] ) as Afiliado; this.db.close(); this.db = null; return a; } private Prestacion getPrestacion( string codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = this.ObjectSetToArrayList( db.get( new Prestacion(this.CodigoPrestacion) ) ); Prestacion p = ( (al.Count == 0)? null : al[0] ) as Prestacion; this.db.close(); this.db = null; return p; } private Autorizacion getAutorizacion( int codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = new ArrayList(); al = this.ObjectSetToArrayList( db.get( new AutorizacionManual(codigo) ) ); Autorizacion a = ( (al.Count == 0)? null : al[0] ) as AutorizacionManual; if ( a == null ) { al = this.ObjectSetToArrayList( db.get( new AutorizacionAutomatica(codigo) ) ); a = ( (al.Count == 0)? null : al[0] ) as AutorizacionAutomatica; } this.db.close(); this.db = null; return a; } private void MarcarRechazada( string motivo ) { this._aprobada = false; this._motivoRechazo = motivo; } #endregion Métodos Privados } //clase #region Motivos de rechazo public struct MensajeMotivoRechazo { public static string PrestadorDadoDeBaja = "El prestador estaba dado de baja en la fecha de realización de la prestación informada por el prestador"; public static string AfiliadoDadoDeBaja = "El afiliado estaba dado de baja en la fecha de realización de la prestación informada por el prestador"; public static string AfiliadoInexistente = "El afiliado informado por el prestador no existe en el Sistema"; public static string PrestacionDadaDeBaja = "La prestación estaba dada de baja en la fecha de realización de la prestación informada por el prestador"; public static string PrestacionInexistente = "La prestación informada por el prestador no existe en el Sistema"; public static string AutorizacionInexistente = "La autorizacion informada por el prestador no existe en el Sistema"; public static string AutorizacionPrestadorInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con dicho prestador"; public static string AutorizacionAfiliadoInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con el afiliado informado"; public static string AutorizacionPrestacionInvalida = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con la prestacion informada"; public static string AutorizacionYaRealizada = "La autorizacion informada por el prestador ya ha sido realizada, segun los datos del Sistema"; public static string AutorizacionNoAprobada = "La autorizacion no estaba aprobada, segun los datos del Sistema, en la fecha de realizacion informada por el prestador"; public static string AutorizacionTipoInvalido = "El tipo de autorizacion informado por el prestador, no coincide con el tipo de autorizacion en el Sistema"; public static string AutorizacionPorcentajeInvalido = "El porcentaje de cobertura informado por el prestador, es distinto al que se aplicaba al momento de la aprobación de la autorización, segun los datos del Sistema"; } #endregion Motivos de rechazo }