Пример #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
        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),
                };

                var fechaint = "";

                using (var reader = XmlReader.Create(new StringReader(data)))
                {
                    reader.MoveToContent();
                    while (reader.Read())
                    {
                        if (reader.NodeType != XmlNodeType.Element)
                        {
                            continue;
                        }
                        switch (reader.Name)
                        {
                        case "AutCod":
                            var sIdTransaccion = reader.ReadElementContentAsString();
                            autorizacionOs.CcodinternoAutorizacion = sIdTransaccion;
                            autorizacionOs.CnroAutorizacion        = sIdTransaccion;
                            det.PracticaAuthNr = sIdTransaccion;
                            break;

                        case "AutEstadoId":
                            var sEstado = reader.ReadElementContentAsString();
                            //sCodEstado = sEstado;
                            switch (sEstado)
                            {
                            case "B000": sEstado = "Autorizada"; break;

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

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

                        case "AutObs":
                            autorizacionOs.Error.Mensaje = reader.ReadElementContentAsString();
                            break;

                        case "AfiliadoPlanDes":
                            autorizacionOs.CdescripcionPlan = reader.ReadElementContentAsString();
                            break;

                        case "AfiliadoNombre":
                            autorizacionOs.CnomAfiliado = reader.ReadElementContentAsString();
                            break;

                        case "AfiliadoIVADes":
                            autorizacionOs.CdescripcionIva = reader.ReadElementContentAsString();
                            break;

                        case "Year":
                            fechaint = "20" + reader.ReadElementContentAsString() + "-";
                            break;

                        case "Mes":
                            fechaint += reader.ReadElementContentAsString() + "-";
                            break;

                        case "Dia":
                            fechaint += reader.ReadElementContentAsString() + " ";
                            break;

                        case "Hora":
                            fechaint += reader.ReadElementContentAsString() + ":";
                            break;

                        case "Minutos":
                            fechaint += reader.ReadElementContentAsString() + ":";
                            break;

                        case "Seg":
                            fechaint += reader.ReadElementContentAsString();
                            autorizacionOs.DfecAutorizacion = fechaint;
                            break;

                        case "Practicas":

                            while (reader.Read())
                            {
                                if (reader.NodeType == XmlNodeType.Element)
                                {
                                    switch (reader.Name)
                                    {
                                    case "PracticaId":
                                        det.PracticaId = reader.ReadElementContentAsString();
                                        break;

                                    case "PracticaDes":
                                        det.PracticaDes = reader.ReadElementContentAsString();
                                        break;

                                    case "PracticaIdEstado":
                                        var sEstadox = reader.ReadElementContentAsString().Trim();
                                        det.PracticaIdEstado = sEstadox == "B000" || sEstadox == "B001"
                                                    ? "Autorizada"
                                                    : "Rechazada";
                                        break;

                                    case "PracticaCantAprob":
                                        det.PracticaCantAprob = reader.ReadElementContentAsString();
                                        break;

                                    case "PracticaObs":
                                        det.PracticaDetAuth = reader.ReadElementContentAsString();
                                        break;
                                    }
                                }
                                else
                                {
                                    if (reader.NodeType != XmlNodeType.EndElement || reader.Name != "Practica")
                                    {
                                        continue;
                                    }
                                    det.PracticaDetAuth = det.PracticaDetAuth == string.Empty ? "OK" : det.PracticaDetAuth;
                                    autorizacionOs.AutorizacionOsDet.Add(det);
                                    det = new AutorizacionOsDet {
                                        PracticaAuthNr = autorizacionOs.CnroAutorizacion
                                    };
                                }
                            }
                            break;
                        }
                    }
                }
                return(autorizacionOs);
            }
            catch (Exception ex)
            {
                autorizacionOs.SetError(GetType().Name, GetMethod.ErrorLine(ex), ex.Message, ex.InnerException?.ToString() ?? "", model, string.Empty);
            }
            return(autorizacionOs);
        }
Пример #3
0
        public async Task <AutorizacionOs> Autorizar(Authorize model)
        {
            var    autorizacionOs = new AutorizacionOs();
            string resultado;

            try
            {
                var output = new StringBuilder();
                using (var writer = XmlWriter.Create(output))
                {
                    writer.WriteStartElement("SOLICITUD");

                    writer.WriteStartElement("EMISOR");
                    writer.WriteElementString("ID", "00001-22222");
                    writer.WriteElementString("PROT", "CA_V20");
                    writer.WriteElementString("MSGID", DateTime.Now.ToString("yyyyMMdd") + model.Efector.Matricula);//completar
                    writer.WriteElementString("TER", "");
                    writer.WriteElementString("APP", "HMS_CAWEB");
                    writer.WriteElementString("TIME", DateTime.Now.ToString());
                    writer.WriteEndElement();

                    writer.WriteStartElement("SEGURIDAD");
                    writer.WriteElementString("TIPOAUT", "U");
                    writer.WriteElementString("USRID", "7040521");
                    writer.WriteElementString("USRPASS", "DAT_MGR");
                    writer.WriteEndElement();

                    writer.WriteStartElement("OPER");
                    writer.WriteElementString("TIPO", "AP");
                    writer.WriteElementString("FECHA", DateTime.Now.ToString("yyyy-MM-dd"));
                    writer.WriteElementString("IDASEG", "ACA_SALUD");
                    writer.WriteElementString("IDPRESTADOR", "7040521");
                    writer.WriteEndElement();

                    writer.WriteStartElement("PID");
                    if (model.Tipo == "B")
                    {
                        writer.WriteElementString("TIPOID", "CODIGO");
                    }
                    writer.WriteElementString("ID", model.Credencial);
                    if (model.Tipo == "B")
                    {
                        writer.WriteElementString("VERIFID", "AUTO");
                    }
                    writer.WriteEndElement();

                    writer.WriteStartElement("CONTEXTO");
                    writer.WriteElementString("TIPO", "A");
                    writer.WriteEndElement();

                    writer.WriteStartElement("PRESCRIP");
                    writer.WriteElementString("ORG", "MP A");
                    writer.WriteElementString("MAT", model.Efector.Matricula.ToString());
                    writer.WriteElementString("FECHA", DateTime.Now.ToString("yyyy-MM-dd"));
                    writer.WriteEndElement();

                    foreach (var objPrestacion in model.Prestaciones)
                    {
                        writer.WriteStartElement("PR");
                        writer.WriteElementString("TIPO", "P");
                        writer.WriteElementString("ID", objPrestacion.CodPres);
                        writer.WriteElementString("CANT", objPrestacion.Cant.ToString());

                        writer.WriteStartElement("EFECTOR");
                        writer.WriteElementString("ORG", "MP A");
                        writer.WriteElementString("MAT", model.Efector.Matricula.ToString());
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();
                }

                //using (var client = new HttpClient())
                //{
                //    var url = urlBase + HttpUtility.UrlEncode(output.ToString());
                //    client.BaseAddress = new Uri(url);
                //    client.DefaultRequestHeaders.Accept.Clear();

                //    Task<HttpResponseMessage> response = client.GetAsync(url);
                //    resultado = await response.Result.Content.ReadAsStringAsync();
                //    resultado = HttpUtility.HtmlDecode(resultado);
                //}

                //logResult(output.ToString(), resultado, "A");

                //return SetAutorizacionOs(resultado, model);
                return(null);
            }
            catch (Exception ex)
            {
                autorizacionOs.SetError(GetType().Name, GetMethod.ErrorLine(ex), ex.Message, ex.InnerException?.ToString() ?? "", model, string.Empty);
                return(autorizacionOs);
            }
        }
Пример #4
0
        private AutorizacionOs SetAutorizacionOs(string data, Authorize authorize)
        {
            var autorizacionOs = new AutorizacionOs();

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

                /******************************************************************************************************************/
                /********************************************** AcaSalud Return Data **********************************************/
                /******************************************************************************************************************/
                using (XmlReader reader = XmlReader.Create(new StringReader(data)))
                {
                    reader.MoveToContent();
                    while (reader.Read())
                    {
                        if (reader.NodeType != XmlNodeType.Element)
                        {
                            continue;
                        }
                        switch (reader.Name)
                        {
                        case "IDTRAN":
                            autorizacionOs.CnroAutorizacion = reader.ReadElementContentAsString();

                            //autorizacionOs.CcodinternoAutorizacion = reader.ReadElementContentAsString();
                            break;

                        case "STATUS":
                            var sEstado = reader.ReadElementContentAsString();
                            var std     = sEstado == "OK" ? "Autorizada" : "Rechazada";
                            autorizacionOs.EstadoAutorizacion    = std;
                            autorizacionOs.ResultadoAutorizacion = std;
                            break;

                        case "RSPCODG":
                            //autorizacionOs.Error.Estado = reader.ReadElementContentAsString();
                            break;

                        case "RSPMSGG":
                            autorizacionOs.Error.Mensaje += reader.ReadElementContentAsString();
                            break;

                        case "RSPMSGGADIC":
                            autorizacionOs.Error.Mensaje += reader.ReadElementContentAsString();
                            break;

                        case "AFIPLAN":
                            break;

                        case "AFIPLANADIC":
                            autorizacionOs.CdescripcionPlan = reader.ReadElementContentAsString();
                            break;

                        case "AFIAPE":     //Apellido del Afiliado
                            autorizacionOs.CnomAfiliado = reader.ReadElementContentAsString();
                            break;

                        case "AFINOM":     //Nombre del Afiliado
                            autorizacionOs.CnomAfiliado =
                                autorizacionOs.CnomAfiliado + ", " + reader.ReadElementContentAsString();
                            break;

                        case "AFISEXO":
                            break;

                        case "AFINAC":
                            break;

                        case "AFIAFIL":
                            autorizacionOs.CdescripcionIva = reader.ReadElementContentAsString();
                            break;

                        case "IDAUT":
                            var cod = reader.ReadElementContentAsString();
                            autorizacionOs.CcodinternoAutorizacion = cod;
                            //autorizacionOs.CnroAutorizacion = cod;
                            break;

                        case "FECHAOPER":
                            autorizacionOs.DfecAutorizacion = reader.ReadElementContentAsString();
                            break;

                        case "PR":
                            /******************************************************************************************************************/
                            /********************************************* Detalle de Autorizacion ********************************************/
                            /******************************************************************************************************************/
                            var bElementoIniciado = false;
                            while (reader.Read())
                            {
                                if (reader.NodeType == XmlNodeType.Element)
                                {
                                    switch (reader.Name)
                                    {
                                    case "TIPO":
                                        bElementoIniciado = true;
                                        reader.ReadElementContentAsString();
                                        break;

                                    case "ID":
                                        det.PracticaId = reader.ReadElementContentAsString();
                                        break;

                                    case "DESCRIPCION":
                                        det.PracticaDes = reader.ReadElementContentAsString();
                                        break;

                                    case "IDTORD":
                                        var sIdTord = reader.ReadElementContentAsString();
                                        break;

                                    case "DESCTORD":
                                        var sDescOrd = reader.ReadElementContentAsString();
                                        break;

                                    case "STATUS":
                                        det.PracticaIdEstado =
                                            reader.ReadElementContentAsString().Trim() == "OK"
                                                        ? "Autorizada"
                                                        : "Rechazada";
                                        break;

                                    case "RSPCODP":
                                        var sRspcodp = reader.ReadElementContentAsString();
                                        break;

                                    case "RSPMSGP":
                                        det.PracticaDetAuth = reader.ReadElementContentAsString();
                                        break;

                                    case "REALIZNOM":
                                        var sRealizNom = reader.ReadElementContentAsString();
                                        break;

                                    case "CANT":
                                        det.PracticaCantAprob = reader.ReadElementContentAsString();
                                        break;
                                    }
                                }
                                else
                                {
                                    if (reader.NodeType != XmlNodeType.EndElement || !bElementoIniciado)
                                    {
                                        continue;
                                    }
                                    if (det.PracticaId == null)
                                    {
                                        continue;
                                    }
                                    det.PracticaAuthNr = autorizacionOs.CcodinternoAutorizacion;
                                    autorizacionOs.AutorizacionOsDet.Add(det);
                                    det = new AutorizacionOsDet();
                                }
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                autorizacionOs.SetError(GetType().Name, GetMethod.ErrorLine(ex), ex.Message, ex.InnerException?.ToString() ?? "", authorize, string.Empty);
            }
            return(autorizacionOs);
        }
Пример #5
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);
        }