예제 #1
0
        public string ProcesarReglasDeCantidad(Autorizacion autorizacion, IEnumerable<Regla> reglas)
        {
            foreach (var r in reglas)
            {
                switch (r.EntidadAfectada)
                {
                    case TipoEntidadAfectada.Cobertura:
                        {
                            //Verificar si alguna de las coberturas de la autorizacion esta en regla antes de validarla
                            break;
                        }
                    case TipoEntidadAfectada.Prestacion:
                        {
                            //Verificar si alguna de las prestaciones de la autorizacion esta en regla antes de validarla
                            break;
                        }
                    case TipoEntidadAfectada.SubGrupo:
                        { break; }
                    case TipoEntidadAfectada.Grupo:
                        { break; }
                    case TipoEntidadAfectada.Sexo:
                        { break; }
                    case TipoEntidadAfectada.Edad:
                        { break; }
                    case TipoEntidadAfectada.Afiliado:
                        { break; }
                    case TipoEntidadAfectada.Prestadora:
                        { break; }

                }

            }
            return "";
        }
예제 #2
0
        public JustificacionResult CubreUnaParte(Autorizacion a)
        {
            JustificacionResult r = new JustificacionResult();

            r.resumen = string.Format("ARS IA, cubre ({0}RD$) de ({1}RD$) Solicitado por {2} {3}, Hoy {4} por concepto servicios de tipo {5} prestados en fecha {6}",
                  a.MontoAprobado,
                  a.MontoSolicitado,
                  adjetivo(a.Afiliado),
                  a.Afiliado.NombreCompleto,
                  DateTime.Now.ToShortDateString(),
                  a.TipoAutorizacion.Nombre,
                  a.FechaServicio.ToShortDateString());

            if (!string.IsNullOrEmpty(a.RulesAppliances))
            {
                r.detalle.Add(a.RulesAppliances);
            }

            var fd = FormatPrestaciones(a.Prestaciones);
            r.detalle.AddRange(fd);

            r.Autorizacion = ProjectarAutorizacionForInsert(a);

            r.Procede = true;
            return r;
        }
예제 #3
0
        public AutorizacionValidator(ArsDataContext db, Autorizacion autorizacion)
        {
            this.db = db;
            this.afiliadoService = new AfiliadoService(db);

            this.afiliado = db.Afiliados.Single(p => p.Id == autorizacion.AfiliadoId);
            this.autorizacion = autorizacion;
        }
예제 #4
0
        public void InitializeAutorizacionMedicamentos(Autorizacion autorizacion)
        {
            InitializeAutorizacion(autorizacion);

            autorizacion.FechaAutorizacion = DateTime.Now;
            autorizacion.FechaServicio = DateTime.Now;

            autorizacion.TipoAutorizacionId = 12;
        }
예제 #5
0
        private void InitializeAutorizacion(Autorizacion autorizacion)
        {
            autorizacion.PrestadoraId = this.Usuario.UsuariosPrestadoras.First().PrestadoraId;
            autorizacion.UsuarioId = Usuario.Id;

            foreach (var p in autorizacion.Prestaciones)
            {
                p.UsuarioId = Usuario.Id;
                p.FechaCreacion = DateTime.Now;
            }
        }
예제 #6
0
        void Init(Autorizacion a)
        {
            a.FechaCreacion = DateTime.Now;
            a.FechaAutorizacion = DateTime.Now;
            a.UsuarioId = this.Usuario.Id;

            foreach (var p in a.Prestaciones)
            {
                p.FechaCreacion = DateTime.Now;
                p.UsuarioId = this.Usuario.Id;
            }
        }
예제 #7
0
        public JustificacionResult CubreTodo(Autorizacion a)
        {
            JustificacionResult r = new JustificacionResult();
            r.resumen = string.Format("Ars IA, cubre por completo a {0} {1} por los servicios médicos prestados. Solicitud Por un monto de {2}",
                adjetivo(a.Afiliado),
                a.Afiliado.NombreCompleto,
                a.MontoAprobado);

            r.Autorizacion = ProjectarAutorizacionForInsert(a);
            r.Procede = true;

            return r;
        }
예제 #8
0
        public ActionResult Solicitar(Autorizacion autorizacion)
        {
            Fill(autorizacion);

            MotorInferencia engine = new MotorInferencia();
            Justificador jf = new Justificador();

            var a = engine.Procesar(autorizacion);

            var result = jf.ExtraerResultado(a);

            return Json(result, JsonRequestBehavior.AllowGet);
        }
예제 #9
0
        void Fill(Autorizacion a)
        {
            ArsDataContext db = new ArsDataContext();
            a.Afiliado = db.Afiliados.Single(p => p.Id == a.AfiliadoId);
            a.TipoAutorizacion = db.TiposAutorizaciones.Single(p => p.Id == a.TipoAutorizacionId);
            //a.Diagnostico = db.Diagnosticos.Single(p => p.Id == a.DiagnosticoId);
            a.Prestadora = db.Prestadoras.Single(p => p.Id == a.PrestadoraId);

            foreach (var pr in a.Prestaciones)
            {
                pr.Prestacion = db.Prestaciones.Single(p => p.Id == pr.PrestacionId);
                pr.Autorizacion = a;
            }
        }
예제 #10
0
        public string Procesar(Autorizacion autorizacion)
        {
            var prestadora = autorizacion.Prestadora;

            var grupos = autorizacion.Prestaciones.Select(p => p.Prestacion.SubGrupo.Grupo);

            var subGrupos = autorizacion.Prestaciones.Select(p => p.Prestacion.SubGrupo);

            var prestaciones = autorizacion.Prestaciones;

            var coberturas = autorizacion.Prestaciones.Select(p => p.Prestacion.Cobertura);

            var afiliado = autorizacion.Afiliado;

            var reglas = reglasRepository.ReglasVigentes.OrderBy(p => p.TipoRegla);
            return "";
        }
예제 #11
0
        public ActionResult Guardar(Autorizacion autorizacion)
        {
            AutorizacionService service = new AutorizacionService(new ArsDataContext());

            Init(autorizacion);

            service.Crear(autorizacion);

            if (autorizacion.Id > 0)
            {
                Justificador jf = new Justificador();
                return Json(jf.MostrarAutorizacion(autorizacion), JsonRequestBehavior.AllowGet);
            }
            else
            {
                throw new InvalidOperationException("No se pudo crear la autorizacion");
            }
        }
예제 #12
0
        public decimal Balance(int tipoAutorizacionId, string subGrupoId, Autorizacion a, decimal limite)
        {
            var fechas = StaticHelpers.GetRangoAnual(a.Afiliado.FechaAfiliacion, a.FechaServicio);

            AfiliadoService service = new AfiliadoService(new ArsDataContext());

            var fechaInicial = fechas[0];
            var fechaFinal = fechas[1];

            var consumido = a.Afiliado
                .Autorizaciones
                .Where(p => (p.TipoAutorizacionId == tipoAutorizacionId) && p.Disponible && p.FechaServicio >= fechaInicial && p.FechaServicio <= fechaFinal)
                .SelectMany(p => p.Prestaciones.Where(q => (subGrupoId == null) || (q.Prestacion.SubGrupoId == subGrupoId) && q.Disponible))
                .Sum(p => p.Aprobado);

            consumido += a.Prestaciones.Where(p => p.Aprobado > 0).Sum(p => p.Aprobado);

            return limite - consumido < 0 ? 0 : limite - consumido;
        }
예제 #13
0
 dynamic Project(Autorizacion a)
 {
     return new
     {
         Numero = a.Id,
         Carne = a.Afiliado.Id,
         Cantidad = a.Prestaciones.Count,
         TipoAutorizacion = a.TipoAutorizacion.Nombre,
         Solicitado = a.MontoSolicitado,
         Aprobado = a.MontoAprobado,
         CoPago = a.MontoSolicitado - a.MontoAprobado,
         a.Afiliado.NombreCompleto,
         FechaAutorizacion = a.FechaAutorizacion.ToShortDateString(),
         FechaServicio = a.FechaServicio.ToShortDateString(),
         a.MontoAprobado,
         a.MontoSolicitado,
         a.Prestadora.Nombre,
         a.Disponible,
         Prestaciones = a.Prestaciones.Select(p => Project(p))
     };
 }
예제 #14
0
        public dynamic ProyectarAutorizacion(Autorizacion autorizacion)
        {
            //Fill(autorizacion);

            return autorizacion == null ? null : new
            {
                autorizacion.Id,
                FechaServicio = autorizacion.FechaServicio.ToString("dd/MM/yyyy"),
                Afiliado = ProyectarAfiliado(autorizacion.Afiliado),
                autorizacion.TipoAutorizacionId,
                TipoAutorizacion = autorizacion.TipoAutorizacion.Nombre,
                autorizacion.DiagnosticoId,
                Diagnostico = autorizacion.Diagnostico == null ? null : autorizacion.Diagnostico.Descripcion,
                autorizacion.Contacto,
                autorizacion.MontoAprobado,
                autorizacion.Comentario,
                Prestaciones = autorizacion.Prestaciones.Where(p => p.Disponible).Select(p => ProyectarPrestacionAutorizacion(p)).ToList(),
                Estado = autorizacion.Disponible ? "Disponible" : "Cancelada",

                autorizacion.Usuario.Login,
                autorizacion.AccidenteTransito,
                autorizacion.AccidenteLaboral
            };
        }
예제 #15
0
        public void Crear(Autorizacion autorizacion)
        {
            db.Autorizaciones.Add(autorizacion);

            db.SaveChanges();
        }
예제 #16
0
        public dynamic ExtraerResultado(Autorizacion a)
        {
            string resumen = string.Empty;

            List<string> detalle = new List<string>();

            if (a.MontoAprobado == 0)
            {
                return NoCubreNada(a);
            }
            else
            {
                if (a.MontoAprobado == a.MontoSolicitado)
                {
                    return CubreTodo(a);
                }
                else
                {
                    return CubreUnaParte(a);
                }
            }
        }
예제 #17
0
 public dynamic MostrarAutorizacion(Autorizacion a)
 {
     return new
     {
         a.Id,
         a.MontoAprobado,
         a.MontoSolicitado,
         Prestaciones = a.Prestaciones.Count(),
     };
 }
예제 #18
0
 public string ProjectMensajeCreacion(Autorizacion autorizacion)
 {
     return string.Format("Autorización creada satisfactoriamente. \n número ({0}) por un monto de ({1} RD$), \n Prestadora (\"{2}\").", autorizacion.Id, autorizacion.MontoAprobado, autorizacion.Prestadora.Nombre == null ? "foo" : autorizacion.Prestadora.Nombre);
 }
예제 #19
0
        public JustificacionResult NoCubreNada(Autorizacion a)
        {
            JustificacionResult r = new JustificacionResult();
            r.resumen = string.Format("Lo sentimos, no podemos cubrir {0} {1} en ninguno de los servicios solicitados. A continuación mas detalle", adjetivo(a.Afiliado), a.Afiliado.NombreCompleto);

            if (!string.IsNullOrEmpty(a.RulesAppliances))
                r.detalle.Add(a.RulesAppliances);

            var fd = FormatPrestaciones(a.Prestaciones);
            r.detalle.AddRange(fd);
            r.Procede = false;

            return r;
        }
예제 #20
0
 public dynamic ProjectarAutorizacionForInsert(Autorizacion a)
 {
     return new
     {
         a.PrestadoraId,
         a.AfiliadoId,
         a.FechaAutorizacion,
         a.FechaServicio,
         a.TipoAutorizacionId,
         a.UsuarioId,
         a.DiagnosticoId,
         a.Contacto,
         a.Comentario,
         a.AccidenteTransito,
         a.AccidenteLaboral,
         a.RulesAppliances,
         Prestaciones = a.Prestaciones.Select(p => new
         {
             p.PrestacionId,
             p.Cantidad,
             p.Tarifa,
             p.Aprobado,
             Simon = p.Prestacion.Cobertura.SIMON,
             Nombre = p.Prestacion.Cobertura.Nombre,
             CoPago = p.Tarifa - p.Aprobado,
             p.RulesAppliances,
             p.UsuarioId
         })
     };
 }