/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }