예제 #1
0
        private AutorizacionOs SetAutorizacionOs(string data, Authorize model)
        {
            var autorizacionOs = new AutorizacionOs();

            try
            {
                var det          = new AutorizacionOsDet();
                var osrepository = new OSRepository();
                autorizacionOs = new AutorizacionOs
                {
                    NnroAfiliado  = model.Credencial,
                    Idpre         = Convert.ToInt32(model.PrestadorId),
                    Ncodosoc      = osrepository.GetOSbyId(model.OSId),
                    Nestado       = 0,
                    NidUsuario    = Convert.ToInt32(model.UserId),
                    DfecEstado    = DateTime.Today.ToString(),
                    CcodAnulacion = "",
                    Idfacturador  = Convert.ToInt32(model.FacturadorId),
                };

                // convertimos respuesta en vector
                var msHL7 = HL7.DecifraHL7(data);

                // tomamos la fecha de la primera línea del vector - MSH
                var fechaint = HL7.CampoHL7(msHL7[0], 6, 0);

                var sFechaAut = fechaint.Substring(0, 4) + "-" + fechaint.Substring(4, 2) + "-" + fechaint.Substring(6, 2);
                sFechaAut += " " + fechaint.Substring(8, 2) + ":" + fechaint.Substring(10, 2) + ":" + fechaint.Substring(12, 2);

                autorizacionOs.DfecAutorizacion = sFechaAut;

                // número de la transacción tercera línea - ZAU **Codigo Interno de la transaccion
                var sIdTransaccion = HL7.CampoHL7(msHL7[2], 2, 0);
                autorizacionOs.CcodinternoAutorizacion = sIdTransaccion;
                autorizacionOs.CnroAutorizacion        = sIdTransaccion;

                // resultado autorización tercera línea - ZAU
                var sEstado = HL7.CampoHL7(msHL7[2], 3, 1);
                switch (sEstado)
                {
                case "B000":
                    sEstado = "Autorizada";
                    break;

                case "B001":
                    sEstado = "Autorizada Parcial";
                    break;

                default:
                    sEstado = "Rechazada";
                    break;
                }
                autorizacionOs.EstadoAutorizacion    = sEstado;
                autorizacionOs.ResultadoAutorizacion = sEstado;

                // mensaje corto autorizacion tercera línea - ZAU
                HL7.CampoHL7(msHL7[2], 3, 2);

                // nombre del afiliado quinta linea - PID
                autorizacionOs.CnomAfiliado = (HL7.CampoHL7(msHL7[5], 5, 1) + " " + HL7.CampoHL7(msHL7[5], 5, 2));

                // plan del afiliado sexta linea - IN1
                autorizacionOs.CdescripcionPlan = HL7.CampoHL7(msHL7[6], 2, 0);

                // condicion IVA septima linea - ZIN
                autorizacionOs.CdescripcionIva = HL7.CampoHL7(msHL7[7], 2, 2);

                var indice = 8;

                while (msHL7[indice] != "")
                {
                    switch (msHL7[indice].Substring(0, 4))
                    {
                    case "PR1|":
                        det.PracticaId = HL7.CampoHL7(msHL7[indice], 3, 1);
                        HL7.CampoHL7(msHL7[indice], 3, 2);
                        break;

                    case "AUT|":
                        det.PracticaCantAprob = HL7.CampoHL7(msHL7[indice], 8, 0);
                        break;

                    case "ZAU|":

                        var sEstadox = HL7.CampoHL7(msHL7[indice], 3, 1);
                        det.PracticaIdEstado = sEstadox == "B000" || sEstadox == "B001" ? "Autorizada" : "Rechazada";
                        det.PracticaDetAuth  = HL7.CampoHL7(msHL7[indice], 3, 2);

                        det.PracticaDes    = osrepository.GetPrescDesc(det.PracticaId, model.Prestaciones, model);
                        det.PracticaAuthNr = sIdTransaccion;

                        autorizacionOs.AutorizacionOsDet.Add(det);
                        det = new AutorizacionOsDet();
                        break;
                    }
                    indice++;
                }
            }
            catch (Exception ex)
            {
                autorizacionOs.SetError(GetType().Name, GetMethod.ErrorLine(ex), ex.Message, ex.InnerException?.ToString() ?? "", model, string.Empty);
            }
            return(autorizacionOs);
        }
예제 #2
0
        public AutorizacionOs Autorizar(Authorize model, string resultado, string cadena)
        {
            var autorizacionOs = new AutorizacionOs();

            try
            {
                var det          = new AutorizacionOsDet();
                var osrepository = new OSRepository();
                autorizacionOs = new AutorizacionOs
                {
                    NnroAfiliado  = model.Credencial,
                    Idpre         = Convert.ToInt32(model.PrestadorId),
                    Ncodosoc      = osrepository.GetOSbyId(model.OSId),
                    Nestado       = 0,
                    NidUsuario    = Convert.ToInt32(model.UserId),
                    DfecEstado    = DateTime.Today.ToString(),
                    CcodAnulacion = "",
                    Idfacturador  = Convert.ToInt32(model.FacturadorId),
                };

                var resul     = resultado.Split(':');
                var solicitud = cadena.Split(',');
                var datosAut  = resul[0].Split(',');
                var datosRec  = resul[1].Split(',');

                string sEstado;
                var    sNroAutorizacion = "0";
                string sMsgCorto;

                autorizacionOs.DfecAutorizacion = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                // resultado autorización
                if (datosRec[0].Trim() != "RECHAZ")
                {
                    sEstado          = "Autorizada";
                    sNroAutorizacion = datosAut[0];
                    sMsgCorto        = "Autorizada";
                }
                else
                {
                    if (datosAut[0].Trim() == "")
                    {
                        sEstado   = "Rechazada";
                        sMsgCorto = "Rechazada";
                    }
                    else
                    {
                        sEstado          = "Autorizada Parcial";
                        sNroAutorizacion = datosAut[0];
                        sMsgCorto        = "Aut. parcial";
                    }
                }

                autorizacionOs.ResultadoAutorizacion   = sEstado;
                autorizacionOs.EstadoAutorizacion      = sEstado;
                autorizacionOs.CnroAutorizacion        = sNroAutorizacion;
                autorizacionOs.CcodinternoAutorizacion = sNroAutorizacion;
                autorizacionOs.Mensaje          = sMsgCorto;
                autorizacionOs.CnomAfiliado     = model.AfiliadoNombre;
                autorizacionOs.CdescripcionPlan = model.AfiliadoPlan;


                if (datosAut.Length > 1)
                {
                    for (var i = 1; i < datosAut.Length; i++)
                    {
                        det.PracticaId = datosAut[i].Replace(".", "").Trim();

                        for (var j = 0; j <= solicitud.Length; j++)
                        {
                            var prestasol = solicitud[j].Split('-');
                            if (det.PracticaId != prestasol[0].Trim())
                            {
                                continue;
                            }
                            det.PracticaCantAprob = prestasol[1];
                            break;
                        }

                        det.PracticaDes      = osrepository.GetPrescDesc(det.PracticaId, model.Prestaciones, model);
                        det.PracticaIdEstado = "Autorizada";
                        autorizacionOs.AutorizacionOsDet.Add(det);
                        det = new AutorizacionOsDet();
                    }
                }

                // se graban las rechazadas
                if (datosRec.Length > 1)
                {
                    for (var i = 1; i < datosRec.Length; i++)
                    {
                        var presta = datosRec[i].Split('-');
                        det.PracticaId = datosRec[i].Replace(".", "").Trim();

                        switch (presta[1])
                        {
                        case "1":
                            sMsgCorto = "El codigo es de alta complejidad, se debe emitir con autorizacion";
                            break;

                        case "2":
                            sMsgCorto = "La cantidad solicitada supera el tope establecido ";
                            break;

                        case "3":
                            sMsgCorto = "Codigo inexistente en el nomenclador";
                            break;
                        }

                        det.PracticaDetAuth = sMsgCorto;
                        det.PracticaDes     = osrepository.GetPrescDesc(det.PracticaId, model.Prestaciones, model);

                        det.PracticaIdEstado = "Rechazada";

                        autorizacionOs.AutorizacionOsDet.Add(det);
                        det = new AutorizacionOsDet();
                    }
                }
            }
            catch (Exception ex)
            {
                autorizacionOs.SetError(GetType().Name, GetMethod.ErrorLine(ex), ex.Message, ex.InnerException?.ToString() ?? "", model, string.Empty);
            }
            return(autorizacionOs);
        }