Beispiel #1
0
        /// <summary>
        /// Obtiene los detalles de la consulta del paciente que debe estar programada en el momento de la solicitud
        /// </summary>
        /// <param name="piIdPaciente"></param>
        /// <param name="piIdColaborador"></param>
        /// <returns></returns>
        public IMDResponse <List <EntDetalleConsulta> > BGetConsultaMomento(int piIdPaciente, int piIdColaborador)
        {
            IMDResponse <List <EntDetalleConsulta> > response = new IMDResponse <List <EntDetalleConsulta> >();

            string metodo = nameof(this.BGetConsultaMomento);

            logger.Info(IMDSerialize.Serialize(67823458588333, $"Inicia {metodo}(int piIdPaciente, int piIdColaborador)", piIdPaciente, piIdColaborador));

            try
            {
                int iMinutosToleranciaAntes   = Convert.ToInt32(ConfigurationManager.AppSettings["iMinToleraciaConsultaInicio"]);
                int iMinutosToleranciaDespues = Convert.ToInt32(ConfigurationManager.AppSettings["iMinToleraciaConsultaFin"]);

                IMDResponse <DataTable> resGetConsulta = datConsulta.DGetConsultaProgramada(piIdPaciente, piIdColaborador, iMinutosToleranciaAntes, iMinutosToleranciaDespues);
                if (resGetConsulta.Code != 0)
                {
                    return(resGetConsulta.GetResponse <List <EntDetalleConsulta> >());
                }

                List <EntDetalleConsulta> lstConsultas = new List <EntDetalleConsulta>();

                foreach (DataRow drConsulta in resGetConsulta.Result.Rows)
                {
                    IMDDataRow dr = new IMDDataRow(drConsulta);

                    EntDetalleConsulta consulta = new EntDetalleConsulta
                    {
                        dtFechaConsultaFin      = dr.ConvertTo <DateTime?>("dtFechaConsultaFin"),
                        dtFechaConsultaInicio   = dr.ConvertTo <DateTime?>("dtFechaConsultaInicio"),
                        dtFechaCreacion         = dr.ConvertTo <DateTime?>("dtFechaCreacion"),
                        dtFechaProgramadaFin    = dr.ConvertTo <DateTime?>("dtFechaProgramadaFin"),
                        dtFechaProgramadaInicio = dr.ConvertTo <DateTime?>("dtFechaProgramadaInicio"),
                        iIdColaborador          = dr.ConvertTo <int?>("iIdColaborador"),
                        iIdConsulta             = dr.ConvertTo <int?>("iIdConsulta"),
                        iIdEstatusConsulta      = dr.ConvertTo <int?>("iIdEstatusConsulta"),
                        iIdPaciente             = dr.ConvertTo <int?>("iIdPaciente"),
                    };

                    lstConsultas.Add(consulta);
                }

                response.Code    = 0;
                response.Message = "Se han obtenido las consultas programadas en el horario programado actual.";
                response.Result  = lstConsultas;
            }
            catch (Exception ex)
            {
                response.Code    = 67823458589110;
                response.Message = "Ocurrió un error inesperado al verificar el horario de consulta del paciente.";

                logger.Error(IMDSerialize.Serialize(67823458589110, $"Error en {metodo}(int piIdPaciente, int piIdColaborador): {ex.Message}", piIdPaciente, piIdColaborador, ex, response));
            }
            return(response);
        }
Beispiel #2
0
        /// <summary>
        /// Cancela la consulta y el folio de un paciente
        /// </summary>
        /// <param name="consulta"></param>
        /// <returns></returns>
        public IMDResponse <bool> BCancelarConsulta(EntNuevaConsulta consulta)
        {
            IMDResponse <bool> response = new IMDResponse <bool>();

            string metodo = nameof(this.BCancelarConsulta);

            logger.Info(IMDSerialize.Serialize(67823458552591, $"Inicia {metodo}(EntNuevaConsulta consulta)", consulta));

            try
            {
                if (consulta == null)
                {
                    response.Code    = -767234562313709;
                    response.Message = "No se ingresó información de la consulta a cancelar";
                    return(response);
                }

                //Obtene detalle de la consulta
                IMDResponse <List <EntDetalleConsulta> > resGetDetalleConsulta = this.BGetDetalleConsulta(consulta.consulta.iIdConsulta);
                if (resGetDetalleConsulta.Code != 0)
                {
                    return(resGetDetalleConsulta.GetResponse <bool>());
                }

                if (resGetDetalleConsulta.Result.Count != 1)
                {
                    response.Code    = -5723613487698;
                    response.Message = "La consulta proporcionada no se encuentra programada.";
                    return(response);
                }

                EntDetalleConsulta detalleConsulta = resGetDetalleConsulta.Result.First();

                consulta.consulta.iIdEstatusConsulta = (int)EnumEstatusConsulta.Cancelado;

                //Cancelar la consulta del paciente
                IMDResponse <bool> resDelConsulta = datConsulta.DCancelarConsulta(consulta.consulta.iIdConsulta, consulta.iIdUsuarioMod, (int)consulta.consulta.iIdEstatusConsulta);
                if (resDelConsulta.Code != 0)
                {
                    return(resDelConsulta);
                }

                //Cancelar el folio del paciente si éste fue generado con origen Particular
                if (detalleConsulta.iIdOrigen == (int)EnumOrigen.Particular)
                {
                    EntFolioFV entFolio = new EntFolioFV
                    {
                        iIdEmpresa = (int)detalleConsulta.iIdEmpresa,
                        iIdUsuario = consulta.iIdUsuarioMod,
                        lstFolios  = new List <EntFolioFVItem>
                        {
                            new EntFolioFVItem
                            {
                                iIdFolio = (int)detalleConsulta.iIdFolio
                            }
                        }
                    };
                    BusFolio           busFolio            = new BusFolio();
                    IMDResponse <bool> resDesactivarFolios = busFolio.BEliminarFoliosEmpresa(entFolio);
                    if (resDesactivarFolios.Code != 0)
                    {
                        return(resDesactivarFolios);
                    }
                }

                response.Code    = 0;
                response.Result  = true;
                response.Message = "La consulta ha sido cancelada correctamente.";
            }
            catch (Exception ex)
            {
                response.Code    = 67823458553368;
                response.Message = "Ocurrió un error inesperado al cancelar la consulta del paciente.";

                logger.Error(IMDSerialize.Serialize(67823458553368, $"Error en {metodo}(EntNuevaConsulta consulta): {ex.Message}", consulta, ex, response));
            }
            return(response);
        }
Beispiel #3
0
        /// <summary>
        /// Obtiene las consultas programadas en el horario solicitado para una nueva consulta
        /// </summary>
        /// <param name="piIdColaborador"></param>
        /// <param name="piIdConsulta"></param>
        /// <param name="pdtFechaProgramadaInicio"></param>
        /// <param name="pdtFechaProgramadaFin"></param>
        /// <returns></returns>
        public IMDResponse <List <EntDetalleConsulta> > BGetDisponibilidadConsulta(int?piIdColaborador = null, int?piIdConsulta = null, DateTime?pdtFechaProgramadaInicio = null, DateTime?pdtFechaProgramadaFin = null)
        {
            IMDResponse <List <EntDetalleConsulta> > response = new IMDResponse <List <EntDetalleConsulta> >();

            string metodo = nameof(this.BGetDisponibilidadConsulta);

            logger.Info(IMDSerialize.Serialize(67823458537051, $"Inicia {metodo}(int piIdColaborador, int piIdConsulta, DateTime? pdtFechaProgramadaInicio = null, DateTime? pdtFechaProgramadaFin = null)", piIdColaborador, piIdConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin));

            try
            {
                IMDResponse <DataTable> resGetConsulta = datConsulta.DGetDisponibilidadConsulta(piIdColaborador, piIdConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin);
                if (resGetConsulta.Code != 0)
                {
                    return(resGetConsulta.GetResponse <List <EntDetalleConsulta> >());
                }

                List <EntDetalleConsulta> lstConsultas = new List <EntDetalleConsulta>();

                foreach (DataRow drConsulta in resGetConsulta.Result.Rows)
                {
                    IMDDataRow dr = new IMDDataRow(drConsulta);

                    EntDetalleConsulta consulta = new EntDetalleConsulta
                    {
                        dtFechaConsultaFin      = dr.ConvertTo <DateTime?>("dtFechaConsultaFin"),
                        dtFechaConsultaInicio   = dr.ConvertTo <DateTime?>("dtFechaConsultaInicio"),
                        dtFechaCreacion         = dr.ConvertTo <DateTime?>("dtFechaCreacion"),
                        dtFechaProgramadaFin    = dr.ConvertTo <DateTime?>("dtFechaProgramadaFin"),
                        dtFechaProgramadaInicio = dr.ConvertTo <DateTime?>("dtFechaProgramadaInicio"),
                        dtFechaVencimiento      = dr.ConvertTo <DateTime?>("dtFechaVencimiento"),
                        iIdColaborador          = dr.ConvertTo <int?>("iIdColaborador"),
                        iIdConsulta             = dr.ConvertTo <int?>("iIdConsulta"),
                        iIdEmpresa         = dr.ConvertTo <int?>("iIdEmpresa"),
                        iIdEspecialidad    = dr.ConvertTo <int?>("iIdEspecialidad"),
                        iIdEstatusConsulta = dr.ConvertTo <int?>("iIdEstatusConsulta"),
                        iIdFolio           = dr.ConvertTo <int?>("iIdFolio"),
                        iIdPaciente        = dr.ConvertTo <int?>("iIdPaciente"),
                        iIdTipoDoctor      = dr.ConvertTo <int?>("iIdTipoDoctor"),
                        iIdTipoProducto    = dr.ConvertTo <int?>("iIdTipoProducto"),
                        iNumSala           = dr.ConvertTo <int?>("iNumSala"),
                        sFolio             = dr.ConvertTo <string>("sFolio"),
                        sFolioEmpresa      = dr.ConvertTo <string>("sFolioEmpresa"),
                    };

                    consulta.sFechaConsultaFin        = consulta.dtFechaConsultaFin?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaConsultaInicio     = consulta.dtFechaConsultaInicio?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaCreacion           = consulta.dtFechaCreacion?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaNacimientoPaciente = consulta.dtFechaNacimientoPaciente?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaProgramadaFin      = consulta.dtFechaProgramadaFin?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaProgramadaInicio   = consulta.dtFechaProgramadaInicio?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaVencimiento        = consulta.dtFechaVencimiento?.ToString("dd/MM/yyyy HH:mm");

                    lstConsultas.Add(consulta);
                }

                response.Code    = 0;
                response.Message = "Se ha consultado la disponibilidad del colaborador.";
                response.Result  = lstConsultas;
            }
            catch (Exception ex)
            {
                response.Code    = 67823458537828;
                response.Message = "Ocurrió un error inesperado al consultar la disponibilidad del colaborador.";

                logger.Error(IMDSerialize.Serialize(67823458537828, $"Error en {metodo}(int piIdColaborador, int piIdConsulta, DateTime? pdtFechaProgramadaInicio = null, DateTime? pdtFechaProgramadaFin = null): {ex.Message}", piIdColaborador, piIdConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin, ex, response));
            }
            return(response);
        }
Beispiel #4
0
        /// <summary>
        /// Obtiene la lista de detalles de la consulta solicitada
        /// </summary>
        /// <param name="piIdConsulta">Filtro por consulta</param>
        /// <param name="piIdPaciente">Filtro por paciente</param>
        /// <param name="piIdColaborador">Filtro por colaborador</param>
        /// <param name="piIdEstatusConsulta">Filtro por estatus de consulta</param>
        /// <param name="pdtFechaProgramadaInicio">Filtro</param>
        /// <param name="pdtFechaProgramadaFin">Filtro</param>
        /// <param name="pdtFechaConsultaInicio">Filtro</param>
        /// <param name="pdtFechaConsultaFin">Filtro</param>
        /// <returns></returns>
        public IMDResponse <List <EntDetalleConsulta> > BGetDetalleConsulta(int?piIdConsulta = null, int?piIdPaciente = null, int?piIdColaborador = null, int?piIdEstatusConsulta = null, DateTime?pdtFechaProgramadaInicio = null, DateTime?pdtFechaProgramadaFin = null, DateTime?pdtFechaConsultaInicio = null, DateTime?pdtFechaConsultaFin = null)
        {
            IMDResponse <List <EntDetalleConsulta> > response = new IMDResponse <List <EntDetalleConsulta> >();

            string metodo = nameof(this.BGetDetalleConsulta);

            logger.Info(IMDSerialize.Serialize(67823458530835, $"Inicia {metodo}(int? piIdConsulta = null, int? piIdPaciente = null, int? piIdColaborador = null, int? piIdEstatusConsulta = null, DateTime? pdtFechaProgramadaInicio = null, DateTime? pdtFechaProgramadaFin = null, DateTime? pdtFechaConsultaInicio = null, DateTime? pdtFechaConsultaFin = null)", piIdConsulta, piIdPaciente, piIdColaborador, piIdEstatusConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin, pdtFechaConsultaInicio, pdtFechaConsultaFin));

            try
            {
                pdtFechaProgramadaInicio = pdtFechaProgramadaInicio?.Date;
                pdtFechaProgramadaFin    = pdtFechaProgramadaFin?.AddDays(1).Date;

                //Consultar datos de la base
                IMDResponse <DataTable> resGetConsulta = datConsulta.DGetDetalleConsulta(piIdConsulta, piIdPaciente, piIdColaborador, piIdEstatusConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin, pdtFechaConsultaInicio, pdtFechaConsultaFin);
                if (resGetConsulta.Code != 0)
                {
                    return(resGetConsulta.GetResponse <List <EntDetalleConsulta> >());
                }

                List <EntDetalleConsulta> lstConsultas = new List <EntDetalleConsulta>();

                foreach (DataRow drConsulta in resGetConsulta.Result.Rows)
                {
                    IMDDataRow dr = new IMDDataRow(drConsulta);

                    EntDetalleConsulta consulta = new EntDetalleConsulta
                    {
                        bTerminosYCondiciones     = Convert.ToBoolean(dr.ConvertTo <int>("bTerminosYCondiciones")),
                        dtFechaConsultaFin        = dr.ConvertTo <DateTime?>("dtFechaConsultaFin"),
                        dtFechaConsultaInicio     = dr.ConvertTo <DateTime?>("dtFechaConsultaInicio"),
                        dtFechaCreacion           = dr.ConvertTo <DateTime?>("dtFechaCreacion"),
                        dtFechaNacimientoPaciente = dr.ConvertTo <DateTime?>("dtFechaNacimientoPaciente"),
                        dtFechaProgramadaFin      = dr.ConvertTo <DateTime?>("dtFechaProgramadaFin"),
                        dtFechaProgramadaInicio   = dr.ConvertTo <DateTime?>("dtFechaProgramadaInicio"),
                        dtFechaVencimiento        = dr.ConvertTo <DateTime?>("dtFechaVencimiento"),
                        iIdColaborador            = dr.ConvertTo <int?>("iIdColaborador"),
                        iIdConsulta              = dr.ConvertTo <int?>("iIdConsulta"),
                        iIdEmpresa               = dr.ConvertTo <int?>("iIdEmpresa"),
                        iIdEspecialidad          = dr.ConvertTo <int?>("iIdEspecialidad"),
                        iIdEstatusConsulta       = dr.ConvertTo <int?>("iIdEstatusConsulta"),
                        iIdFolio                 = dr.ConvertTo <int?>("iIdFolio"),
                        iIdOrigen                = dr.ConvertTo <int?>("iIdOrigen"),
                        iIdPaciente              = dr.ConvertTo <int?>("iIdPaciente"),
                        iIdTipoDoctor            = dr.ConvertTo <int?>("iIdTipoDoctor"),
                        iIdTipoProducto          = dr.ConvertTo <int?>("iIdTipoProducto"),
                        iNumSala                 = dr.ConvertTo <int?>("iNumSala"),
                        sApellidoMaternoPaciente = dr.ConvertTo <string>("sApellidoMaternoPaciente"),
                        sApellidoPaternoPaciente = dr.ConvertTo <string>("sApellidoPaternoPaciente"),
                        sCorreoColaborador       = dr.ConvertTo <string>("sCorreoColaborador"),
                        sCorreoEmpresa           = dr.ConvertTo <string>("sCorreoEmpresa"),
                        sCorreoPaciente          = dr.ConvertTo <string>("sCorreoPaciente"),
                        sEspecialidad            = dr.ConvertTo <string>("sEspecialidad"),
                        sEstatusConsulta         = dr.ConvertTo <string>("sEstatusConsulta"),
                        sFechaConsultaFin        = string.Empty,
                        sFechaConsultaInicio     = string.Empty,
                        sFechaCreacion           = string.Empty,
                        sFechaNacimientoPaciente = string.Empty,
                        sFechaProgramadaFin      = string.Empty,
                        sFechaProgramadaInicio   = string.Empty,
                        sFechaVencimiento        = string.Empty,
                        sFolio              = dr.ConvertTo <string>("sFolio"),
                        sPassword           = dr.ConvertTo <string>("sPassword"),
                        sFolioEmpresa       = dr.ConvertTo <string>("sFolioEmpresa"),
                        sNombreColaborador  = dr.ConvertTo <string>("sNombreColaborador"),
                        sNombreEmpresa      = dr.ConvertTo <string>("sNombreEmpresa"),
                        sNombrePaciente     = dr.ConvertTo <string>("sNombrePaciente"),
                        sNombreProducto     = dr.ConvertTo <string>("sNombreProducto"),
                        sOrdenConekta       = dr.ConvertTo <string>("sOrdenConekta"),
                        sOrigen             = dr.ConvertTo <string>("sOrigen"),
                        sSexoPaciente       = dr.ConvertTo <string>("sSexoPaciente"),
                        sTelefonoPaciente   = dr.ConvertTo <string>("sTelefonoPaciente"),
                        sTipoDoctor         = dr.ConvertTo <string>("sTipoDoctor"),
                        sTipoProducto       = dr.ConvertTo <string>("sTipoProducto"),
                        sTipoSangrePaciente = dr.ConvertTo <string>("sTipoSangrePaciente"),
                    };

                    consulta.sFechaConsultaFin        = consulta.dtFechaConsultaFin?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaConsultaInicio     = consulta.dtFechaConsultaInicio?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaCreacion           = consulta.dtFechaCreacion?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaNacimientoPaciente = consulta.dtFechaNacimientoPaciente?.ToString("dd/MM/yyyy");
                    consulta.sFechaProgramadaFin      = consulta.dtFechaProgramadaFin?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaProgramadaInicio   = consulta.dtFechaProgramadaInicio?.ToString("dd/MM/yyyy HH:mm");
                    consulta.sFechaVencimiento        = consulta.dtFechaVencimiento?.ToString("dd/MM/yyyy HH:mm");

                    lstConsultas.Add(consulta);
                }

                response.Code    = 0;
                response.Message = lstConsultas.Count == 0 ? "No se encontraron las consultas solicitadas." : "Se han obtenido los detalles de las consultas.";
                response.Result  = lstConsultas;
            }
            catch (Exception ex)
            {
                response.Code    = 67823458531612;
                response.Message = "Ocurrió un error inesperado al consultar el detalle de la consulta médica.";

                logger.Error(IMDSerialize.Serialize(67823458531612, $"Error en {metodo}(int? piIdConsulta = null, int? piIdPaciente = null, int? piIdColaborador = null, int? piIdEstatusConsulta = null, DateTime? pdtFechaProgramadaInicio = null, DateTime? pdtFechaProgramadaFin = null, DateTime? pdtFechaConsultaInicio = null, DateTime? pdtFechaConsultaFin = null): {ex.Message}", piIdConsulta, piIdPaciente, piIdColaborador, piIdEstatusConsulta, pdtFechaProgramadaInicio, pdtFechaProgramadaFin, pdtFechaConsultaInicio, pdtFechaConsultaFin, ex, response));
            }
            return(response);
        }
Beispiel #5
0
        /// <summary>
        /// Crea o busca la consulta para un paciente dependiendo del tipo de colaborador basandose en el folio proporcionado
        /// </summary>
        /// <param name="iIdColaborador"></param>
        /// <param name="sFolio"></param>
        /// <param name="iIdUsuarioMod"></param>
        /// <returns></returns>
        public IMDResponse <EntCallCenter> BAccesoConsulta(int iIdColaborador, string sFolio, int iIdUsuarioMod)
        {
            IMDResponse <EntCallCenter> response = new IMDResponse <EntCallCenter>();

            string metodo = nameof(this.BAccesoConsulta);

            logger.Info(IMDSerialize.Serialize(67823458513741, $"Inicia {metodo}(int iIdColaborador, string sFolio, int iIdUsuarioMod)", iIdColaborador, sFolio, iIdUsuarioMod));

            try
            {
                EntCallCenter entCallCenter = new EntCallCenter();

                //Obtener info de colaborador
                IMDResponse <List <EntColaborador> > resGetColaborador = busColaborador.BGetColaborador(piIdColaborador: iIdColaborador);
                if (resGetColaborador.Code != 0)
                {
                    return(resGetColaborador.GetResponse <EntCallCenter>());
                }
                if (resGetColaborador.Result.Count != 1)
                {
                    response.Code    = -88793457892374;
                    response.Message = "No se encontró la información del colaborador.";
                    return(response);
                }

                entCallCenter.entColaborador = resGetColaborador.Result.First();

                //Obtener info del folio
                IMDResponse <List <EntFolioReporte> > resGetFolio = busFolio.BGetFolios(psFolio: sFolio, pbActivo: null, pbBaja: null);
                if (resGetFolio.Code != 0)
                {
                    return(resGetFolio.GetResponse <EntCallCenter>());
                }
                if (resGetFolio.Result.Count != 1)
                {
                    response.Code    = -23459710761984;
                    response.Message = "No se encontró el folio solicitado.";
                    return(response);
                }

                entCallCenter.entFolio = resGetFolio.Result.First();

                if (entCallCenter.entFolio.dtFechaVencimiento != null)
                {
                    if (DateTime.Now > entCallCenter.entFolio.dtFechaVencimiento)
                    {
                        response.Code    = -9776259868345;
                        response.Message = $"El folio expiró el {entCallCenter.entFolio.dtFechaVencimiento?.ToString("dd/MM/yyyy")} a las {entCallCenter.entFolio.dtFechaVencimiento?.ToString("hh:mm tt")}";
                        return(response);
                    }
                }

                //Obtener información del paciente
                IMDResponse <List <EntPaciente> > resGetPaciente = busPaciente.BGetPacientes(piIdFolio: entCallCenter.entFolio.iIdFolio);
                if (resGetPaciente.Code != 0)
                {
                    return(resGetPaciente.GetResponse <EntCallCenter>());
                }

                if (resGetPaciente.Result.Count != 1)
                {
                    response.Code    = -2345771987764112;
                    response.Message = "No se encontró información del paciente.";
                    return(response);
                }

                entCallCenter.entPaciente = resGetPaciente.Result.First();

                //Validar tipo de colaborador
                if (entCallCenter.entColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoCallCenter || entCallCenter.entColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoAdministrativo)
                {
                    if (entCallCenter.entFolio.iIdOrigen == (int)EnumOrigen.Particular)
                    {
                        response.Code    = -19854873834598;
                        response.Message = "El folio proporcionado solo es válido para consultas programadas con Especialistas.";
                        return(response);
                    }

                    if (!entCallCenter.entFolio.bActivo || entCallCenter.entFolio.bBaja)
                    {
                        response.Code    = -8634576876234;
                        response.Message = "El folio ha expirado o ha sido dado de baja.";
                        return(response);
                    }

                    //Para doctores callcenter, generar la consulta y retornar datos
                    EntConsulta entConsulta = new EntConsulta
                    {
                        iIdColaborador          = entCallCenter.entColaborador.iIdColaborador,
                        iIdPaciente             = entCallCenter.entPaciente.iIdPaciente,
                        iIdEstatusConsulta      = (int)EnumEstatusConsulta.CreadoProgramado,
                        dtFechaProgramadaInicio = DateTime.Now
                    };

                    IMDResponse <EntConsulta> resSaveConsulta = busConsulta.BSaveConsulta(entConsulta, iIdUsuarioMod);
                    if (resSaveConsulta.Code != 0)
                    {
                        return(resSaveConsulta.GetResponse <EntCallCenter>());
                    }

                    entCallCenter.entConsulta = resSaveConsulta.Result;

                    //Consultar historial clínico generado por otros colaboradores callcenter
                    List <int> doctoresCallCenter = new List <int> {
                        (int)EnumTipoDoctor.MedicoCallCenter, (int)EnumTipoDoctor.MedicoAdministrativo
                    };

                    IMDResponse <List <EntHistorialClinico> > resGetHistorial = busConsulta.BGetHistorialMedico(piIdFolio: entCallCenter.entFolio.iIdFolio, psIdTipoDoctor: string.Join(",", doctoresCallCenter));
                    if (resGetHistorial.Code != 0)
                    {
                        return(resGetHistorial.GetResponse <EntCallCenter>());
                    }

                    entCallCenter.lstHistorialClinico = resGetHistorial.Result;
                }
                else if (entCallCenter.entColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoEspecialista)
                {
                    //Para doctores especialistas, buscar consultas programadas en la agenda
                    IMDResponse <List <EntDetalleConsulta> > resVerificarConsulta = busConsulta.BGetConsultaMomento(entCallCenter.entPaciente.iIdPaciente, entCallCenter.entColaborador.iIdColaborador);
                    if (resVerificarConsulta.Code != 0)
                    {
                        return(resVerificarConsulta.GetResponse <EntCallCenter>());
                    }

                    if (resVerificarConsulta.Result.Count < 1)
                    {
                        response.Code    = -56878843909375;
                        response.Message = $"No se encontró una consulta programada para el paciente. La tolerancia para el horario programado de la consulta es de {ConfigurationManager.AppSettings["iMinToleraciaConsultaInicio"]} minutos antes de la hora.";
                        return(response);
                    }

                    //Validar que la consulta programada esté en el horario programada y con status válido
                    List <EntDetalleConsulta> HayConsultaProgramadaOReprograma = resVerificarConsulta.Result.Where(x => x.iIdEstatusConsulta != (int)EnumEstatusConsulta.Finalizado && x.iIdEstatusConsulta != (int)EnumEstatusConsulta.Cancelado).ToList();
                    if (HayConsultaProgramadaOReprograma.Count > 0)
                    {
                        EntDetalleConsulta entDetalleConsulta = HayConsultaProgramadaOReprograma.First();

                        EntConsulta entConsulta = new EntConsulta
                        {
                            iIdConsulta        = (int)entDetalleConsulta.iIdConsulta,
                            iIdColaborador     = entCallCenter.entColaborador.iIdColaborador,
                            iIdPaciente        = entCallCenter.entPaciente.iIdPaciente,
                            iIdEstatusConsulta = entDetalleConsulta.iIdEstatusConsulta,
                        };

                        entCallCenter.entConsulta = entConsulta;
                    }
                    else
                    {
                        EntDetalleConsulta entDetalleConsulta = resVerificarConsulta.Result.Last();

                        if (entDetalleConsulta.iIdEstatusConsulta == (int)EnumEstatusConsulta.Cancelado)
                        {
                            response.Code    = -978912879598735;
                            response.Message = $"La consulta ya fue cancelada.";
                            return(response);
                        }

                        if (entDetalleConsulta.iIdEstatusConsulta == (int)EnumEstatusConsulta.Finalizado)
                        {
                            response.Code    = -4498871498234;
                            response.Message = $"La consulta ya ha finalizado.";
                            return(response);
                        }
                    }

                    //Obtener historial clínico sólo de las consultas con el colaborador especialista actual
                    IMDResponse <List <EntHistorialClinico> > resGetHistorial = busConsulta.BGetHistorialMedico(piIdFolio: entCallCenter.entFolio.iIdFolio, piIdColaborador: entCallCenter.entColaborador.iIdColaborador);
                    if (resGetHistorial.Code != 0)
                    {
                        return(resGetHistorial.GetResponse <EntCallCenter>());
                    }

                    entCallCenter.lstHistorialClinico = resGetHistorial.Result;
                }
                else
                {
                    response.Code    = -3338296867623;
                    response.Message = $"No se puede determinar el tipo de cuenta del usuario.";
                    return(response);
                }



                response.Code    = 0;
                response.Result  = entCallCenter;
                response.Message = "Se ha accedido a la consulta.";
            }
            catch (Exception ex)
            {
                response.Code    = 67823458514518;
                response.Message = "Ocurrió un error inesperado al acceder a la consulta del paciente.";

                logger.Error(IMDSerialize.Serialize(67823458514518, $"Error en {metodo}(int iIdColaborador, string sFolio, int iIdUsuarioMod): {ex.Message}", iIdColaborador, sFolio, iIdUsuarioMod, ex, response));
            }
            return(response);
        }
Beispiel #6
0
        /// <summary>
        /// Finaliza la consulta seteando la fecha de fin de consulta proporcionado
        /// </summary>
        /// <param name="iIdConsulta"></param>
        /// <param name="iIdColaborador"></param>
        /// <param name="iIdUsuarioMod"></param>
        /// <returns></returns>
        public IMDResponse <bool> BFinalizarConsulta(int iIdConsulta, int iIdColaborador, int iIdUsuarioMod)
        {
            IMDResponse <bool> response = new IMDResponse <bool>();

            string metodo = nameof(this.BFinalizarConsulta);

            logger.Info(IMDSerialize.Serialize(67823458527727, $"Inicia {metodo}(int iIdConsulta, int iIdColaborador, int iIdUsuarioMod)", iIdConsulta, iIdColaborador, iIdUsuarioMod));

            try
            {
                if (iIdConsulta == 0)
                {
                    response.Code    = -676363680712478;
                    response.Message = "La información para finalizar la consulta está incompleta.";
                    return(response);
                }

                //Obtener el detalle de la consulta actual
                IMDResponse <List <EntDetalleConsulta> > resGetConsulta = busConsulta.BGetDetalleConsulta(piIdConsulta: iIdConsulta);
                if (resGetConsulta.Code != 0)
                {
                    return(resGetConsulta.GetResponse <bool>());
                }

                if (resGetConsulta.Result.Count < 1)
                {
                    response.Code    = -87812314544512;
                    response.Message = "No se encontró la consulta.";
                    return(response);
                }

                EntConsulta entConsulta = new EntConsulta
                {
                    iIdConsulta        = iIdConsulta,
                    dtFechaConsultaFin = DateTime.Now,
                    iIdEstatusConsulta = (int)EnumEstatusConsulta.Finalizado
                };

                //Actualizar fecha de fin de consulta
                IMDResponse <EntConsulta> resSaveConsulta = busConsulta.BSaveConsulta(entConsulta, iIdUsuarioMod);
                if (resSaveConsulta.Code != 0)
                {
                    return(resSaveConsulta.GetResponse <bool>());
                }

                EntDetalleConsulta consulta = resGetConsulta.Result.First();
                EntFolioFV         entFolio = new EntFolioFV
                {
                    iIdEmpresa = (int)consulta.iIdEmpresa,
                    iIdUsuario = iIdUsuarioMod,
                    lstFolios  = new List <EntFolioFVItem>
                    {
                        new EntFolioFVItem
                        {
                            iIdFolio = (int)consulta.iIdFolio
                        }
                    }
                };

                if (consulta.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoCallCenter || consulta.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoAdministrativo)
                {
                    if (consulta.iIdTipoProducto == (int)EnumTipoProducto.Servicio)
                    {
                        //Dar de baja a los folios de servicio que hayan sido atendido por colaborador callcenter
                        IMDResponse <bool> resDesactivarFolios = busFolio.BEliminarFoliosEmpresa(entFolio);
                        if (resDesactivarFolios.Code != 0)
                        {
                            return(resDesactivarFolios);
                        }
                    }
                }
                else
                {
                    if (consulta.iIdOrigen == (int)EnumOrigen.Particular)
                    {
                        //Dar de baja a los folios cuando sean generados por un especialista y tengan el origen Particular
                        IMDResponse <bool> resDesactivarFolios = busFolio.BEliminarFoliosEmpresa(entFolio);
                        if (resDesactivarFolios.Code != 0)
                        {
                            return(resDesactivarFolios);
                        }
                    }
                }

                response.Code    = 0;
                response.Message = "La consulta ha finalizado.";
                response.Result  = true;
            }
            catch (Exception ex)
            {
                response.Code    = 67823458528504;
                response.Message = "Ocurrió un error inesperado al intentar finalizar la consulta.";

                logger.Error(IMDSerialize.Serialize(67823458528504, $"Error en {metodo}(int iIdConsulta, int iIdColaborador, int iIdUsuarioMod): {ex.Message}", iIdConsulta, iIdColaborador, iIdUsuarioMod, ex, response));
            }
            return(response);
        }