Citas
Gestión de citas médicas de pacientes en el módulo de Salud de Davix ERPX.
Descripción general
La pantalla Citas permite gestionar las citas médicas programadas para los pacientes: crear nuevas citas, consultar detalles, reprogramar citas existentes y darlas de baja. Cada cita se vincula a un paciente, un médico o equipo médico, una especialidad, un lugar de atención y un horario específico seleccionado desde un calendario semanal de cupos disponibles.
Ruta de navegación: Inicio → Salud → Citas
Vista principal (listado de citas)
Encabezado
| Elemento | Descripción |
|---|---|
| Título | "Citas" |
| Subtítulo | "Muestra el listado y las herramientas para gestionar las citas" |
| Botón "Actualizar" | Icono pi pi-refresh. Recarga la tabla. |
| Botón "Nueva cita" | Icono pi pi-plus. Abre el diálogo de creación de nueva cita. |
Columnas de la tabla
| Columna | Ancho | Descripción |
|---|---|---|
| Fecha | 180px fijo | Fecha y hora de la cita, formato DD/MM/YYYY hh:mm A. |
| Medico / Equipo medico | Flexible | Nombre del médico ({apellido_paterno} {apellido_materno} {nombres}) o nombre del equipo médico. |
| Paciente | Flexible | Nombre completo del paciente ({apellido_paterno} {apellido_materno} {nombres}). |
| Modalidad | 150px fijo | "EN CONSULTORIO" (valor 1) o "VIRTUAL" (valor 2). |
| Estado | 150px fijo | Badge con el nombre del estado y código de color. |
| Acciones | 100px fijo, centrado | Icono de tres puntos (pi pi-ellipsis-h) para el menú contextual. |
Cuando no hay registros: "No se encontraron datos" (con icono pi pi-exclamation-triangle).
Indicador de paginación
"Mostrando pagina {N} con {X} registros de {T} entradas"
Estados de cita
Cada cita muestra un badge con código de color según su estado:
| Estado | Código | Color | Etiqueta |
|---|---|---|---|
| Nuevo | 0 | Azul (bgblue) | "NUEVO" |
| Atendido | 1 | Verde (bggreen) | "ATENDIDO" |
| Reprogramado | 2 | Naranja (bgorange) | "REPROGRAMADO" |
| Baja | 3 | Rojo (bgred) | "BAJA" |
| Baja venta | 6 | Rojo (bgred) | "BAJA VENTA" |
El estado Baja venta (código 6) se asigna automáticamente cuando la referencia de venta asociada tiene estado == 4, siempre y cuando la cita no esté ya en estado Baja (código 3).
Menú contextual
El menú contextual varía según el estado actual de la cita:
| Estado actual | Opciones disponibles |
|---|---|
| Nuevo (0) | Detalles, Reprogramar, Baja |
| Atendido (1) | Detalles |
| Reprogramado (2) | Detalles |
| Baja (3) | Detalles, Reprogramar |
| Baja venta (6) | Detalles, Baja |
| Opción | Icono | Descripción |
|---|---|---|
| Detalles | pi pi-eye | Abre el diálogo de detalles en modo solo lectura. |
| Reprogramar | pi pi-calendar | Abre el diálogo de reprogramación. |
| Baja | pi pi-lock | Abre el diálogo de confirmación para dar de baja. |
Paginación
Controles de paginación: primera página, anterior, selector de página (dropdown con búsqueda), siguiente, última página. Tamaño de página: 50 registros.
Crear nueva cita
Al hacer clic en "Nueva cita", se abre un diálogo a pantalla completa (p-dialog) con título "Cita".
Subtítulo: "Se tienen que rellenar los campos que contengan () obligatoriamente que se requiere para el registro"*
Mientras se cargan los datos del formulario, se muestra el mensaje: "Cargando sus datos" con un spinner.
Campos del formulario
El formulario se divide en dos columnas: la columna izquierda (7/12) contiene los campos, y la columna derecha (5/12) contiene el calendario de horarios.
Columna izquierda
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Paciente | p-dropdown con búsqueda, lazy loading, filterBy="text" | Sí | Selecciona el paciente. Muestra: "{apellido_paterno} {apellido_materno} {nombres}". Al escribir en el filtro, busca en el endpoint de pacientes. |
| Modalidad | p-dropdown | Sí | Opciones: EN CONSULTORIO (1), VIRTUAL (2). Al cambiar, recarga los cupos disponibles. |
| Tipo de atención | p-dropdown | Sí | Opciones: CONSULTA, RECONSULTA, PROCEDIMIENTO MEDICO. Al cambiar, recarga los cupos disponibles. |
| Especialidades | p-dropdown con búsqueda, filterBy="text" | Sí | Lista de especialidades médicas. Muestra el tipo entre paréntesis: "{nombres} (MEDICO)" para tipo 0, "{nombres} (EQUIPO MEDICO)" para tipo 1. Al seleccionar, determina si se muestra el campo Médico o Equipo Médico. |
| Médico | p-dropdown con búsqueda, lazy loading, filterBy="text" | Sí (si especialidad tipo = 0) | Visible solo cuando la especialidad seleccionada es de tipo Médico (tipo = 0). Muestra: "{apellido_paterno} {apellido_materno} {nombres}". Al cambiar, recarga los cupos y los lugares de atención. |
| Equipo Médico | p-dropdown con búsqueda, lazy loading, filterBy="text" | Sí (si especialidad tipo = 1) | Visible solo cuando la especialidad seleccionada es de tipo Equipo Médico (tipo = 1). Al cambiar, recarga los cupos y los lugares de atención. Mensaje de error: "* Ingrese medico valido". |
| Lugar atención | p-dropdown con búsqueda, filterBy="nombre" | Sí | Lista de lugares de atención extraída de los lugares asociados al médico o equipo médico seleccionado. Deshabilitado hasta que se seleccione un médico o equipo médico. Al cambiar, recarga los cupos. |
Todos los dropdowns tienen placeholder="SELECCIONE", [showClear]="true", emptyMessage="No se encontraron registros." y emptyFilterMessage="No se han encontrado resultados".
Mensaje de error para campos obligatorios: " Obligatorio"*.
Los campos Médico y Equipo Médico son mutuamente excluyentes. Solo se muestra uno de los dos según el tipo de la especialidad seleccionada: tipo 0 = Médico (atención individual), tipo 1 = Equipo Médico (atención en equipo).
Columna derecha: Horario (calendario semanal)
El calendario muestra los cupos disponibles organizados por día de la semana. Su funcionamiento es idéntico al descrito en Admisiones — Horario.
Estructura del calendario:
- Navegación: Dos botones redondos de flecha (
pi pi-chevron-leftypi pi-chevron-right) para navegar a la semana anterior o siguiente. - Columnas: 7 columnas (Domingo a Sábado), cada una de 110px de ancho.
- Encabezado de columna: Nombre del día (ej: "Lunes") y fecha en formato DD/MM/YYYY.
- Contenido: Botones con los horarios disponibles.
Botones de horario:
| Estado | Estilo | Ancho |
|---|---|---|
| Disponible (no seleccionado) | Botón azul (p-button-sm) | 78px |
| Seleccionado | Botón verde (p-button-sm p-button-success) | 78px |
- Cada botón muestra la hora en formato hh:mm A (12 horas).
- Selección única: Solo se puede seleccionar un horario a la vez.
- Al seleccionar un horario, se establece
atencion_fechacon formatoYYYY-MM-DD HH:mm:ss.
Carga de cupos disponibles:
Los cupos se cargan automáticamente cuando están seleccionados todos los campos requeridos: modalidad, tipo de atención, médico o equipo médico, especialidad y lugar de atención.
Solo se muestran los cupos cuya hora de inicio sea igual o posterior a la hora actual más el tiempo de anticipación configurado. Por ejemplo, si el tiempo de anticipación es de 20 minutos y son las 10:00 AM, solo se mostrarán cupos desde las 10:20 AM en adelante.
Parámetros de configuración:
| Parámetro | Dominio | Descripción | Valor por defecto |
|---|---|---|---|
| Tiempo de atención | CONFIG-ERPX-RRHH-HORARIO | Duración de cada cita (formato HH:mm:ss). | 00:20:00 (20 minutos) |
| Tiempo de anticipación | CONFIG-ERPX-RRHH-HORARIO | Minutos mínimos antes de la hora de la cita para permitir el registro. | 20 minutos |
Botones del diálogo
| Botón | Icono | Descripción |
|---|---|---|
| Cancelar | pi pi-times | Cierra el diálogo sin guardar. |
| Guardar | Spinner durante el proceso | Valida el formulario y guarda. Se deshabilita durante el guardado. |
Validaciones al guardar
Campos obligatorios:
- Paciente
- Modalidad
- Tipo de atención
- Especialidades
- Médico (si especialidad tipo = 0) o Equipo Médico (si especialidad tipo = 1)
- Lugar atención
- Horario (atencion_fecha)
Si hay errores: "Revise bien, hay formularios por validar." (severidad: error, título: "Alerta", duración: 5s).
Datos enviados al servidor
| Campo | Descripción |
|---|---|
fecha_creacion | Fecha y hora actual en formato YYYY-MM-DD HH:mm:ss. |
estado | 0 (Nuevo). |
modalidad | 1 (En consultorio) o 2 (Virtual). |
paciente_id | ID del paciente seleccionado. |
medico_id | ID del médico seleccionado (o null si es equipo médico). |
equipo_medico_id | ID del equipo médico seleccionado (o null si es médico individual). |
especialidad_id | ID de la especialidad seleccionada. |
atencion_tipo | Tipo de atención: "CONSULTA", "RECONSULTA" o "PROCEDIMIENTO MEDICO". |
atencion_fecha | Fecha y hora del cupo seleccionado (YYYY-MM-DD HH:mm:ss). |
atencion_tiempo | Duración de la atención (ej: 00:20:00). |
atencion_estado | 0. |
observacion | null. |
lugar_id | ID del lugar de atención seleccionado. |
Notificaciones
| Resultado | Severidad | Título | Mensaje | Duración |
|---|---|---|---|---|
| Éxito | success | "Alerta" | "Registro exitoso." | 5 segundos |
| Error | error | "Error {código}" | Mensaje de error del servidor | 5 segundos |
Detalles de cita
Al seleccionar "Detalles" del menú contextual, se abre un diálogo a pantalla completa (p-dialog) con título "Cita" en modo solo lectura.
Campos mostrados
| Campo | Descripción |
|---|---|
| Paciente | Nombre completo: {apellido_paterno} {apellido_materno} {nombres}. |
| Medico / Equipo medico | Nombre del médico o nombre del equipo médico. |
| Especialidades | Nombre de la especialidad médica. |
| Lugar atencion | Nombre del lugar de atención. |
| Modalidad | "EN CONSULTORIO" o "VIRTUAL". |
| Tipo de atencion | "CONSULTA", "RECONSULTA" o "PROCEDIMIENTO MEDICO". |
| Horario | Fecha y hora, formato DD/MM/YYYY hh:mm A. |
Botón del diálogo:
| Botón | Icono | Descripción |
|---|---|---|
| Cancelar | pi pi-times | Cierra el diálogo. |
Reprogramar cita
Al seleccionar "Reprogramar" del menú contextual, se abre un diálogo a pantalla completa (p-dialog) con título "Reprogramar Cita".
Subtítulo: "Se tienen que rellenar los campos que contengan () obligatoriamente que se requiere para el registro"*
Campos del formulario
El formulario tiene la misma estructura que el de nueva cita (columna izquierda con campos + columna derecha con calendario), con los datos pre-rellenados de la cita original:
- Paciente: Pre-seleccionado con el paciente de la cita original.
- Modalidad: Pre-seleccionada con la modalidad original.
- Tipo de atención: Pre-seleccionado con el tipo original.
- Especialidades: Pre-seleccionada con la especialidad original.
- Médico / Equipo Médico: Pre-seleccionado con el médico o equipo original.
- Lugar atención: Pre-seleccionado con el lugar original.
- Horario: Calendario vacío; el usuario debe seleccionar un nuevo horario.
Al reprogramar, todos los campos se pre-rellenan con los datos de la cita original. El usuario puede modificar cualquier campo y debe seleccionar un nuevo horario obligatoriamente.
Flujo de guardado
La reprogramación ejecuta los siguientes pasos en secuencia:
Marcar cita original como reprogramada
Se envía un PATCH a la cita original con estado: 2 (Reprogramado).
Crear nueva cita
Se crea una nueva cita con los datos del formulario mediante un POST, con estado: 0 (Nuevo).
Notificaciones
| Resultado | Severidad | Título | Mensaje | Duración |
|---|---|---|---|---|
| Éxito | success | "Alerta" | "Registro exitoso." | 5 segundos |
| Error | error | "Error {código}" | Mensaje de error del servidor | 5 segundos |
Dar de baja cita
Al seleccionar "Baja" del menú contextual, se abre un diálogo de confirmación (DynamicDialog) con título "Confirmacion" y ancho de 50vw.
| Elemento | Descripción |
|---|---|
| Icono | pi pi-exclamation-triangle (tamaño 2rem) |
| Mensaje | "Estas seguro de proceder a cambiar el estado BAJA?" |
| Botón "No" | Icono pi pi-times. Cierra el diálogo sin dar de baja. |
| Botón "Si" | Icono pi pi-check (cambia a spinner durante el proceso). Ejecuta la baja. |
Si existen documentos de venta asociados que deben darse de baja primero, el diálogo muestra el mensaje "NESESITA DAR DE BAJA ESTOS DOCUMENTOS PREVIAMENTE" junto con una lista de los documentos (tipo, serie, número) y sus documentos hijos.
Al confirmar, se envía un PATCH con estado: 3 (Baja).
Si la cita tiene una admisión asociada (que no esté en estado Reprogramado), al dar de baja la cita también se actualiza la admisión correspondiente con estado: 4 (Baja en admisiones).
Notificaciones
| Resultado | Severidad | Título | Mensaje | Duración |
|---|---|---|---|---|
| Éxito | success | "Alerta" | "Estado actualizado." | 5 segundos |
| Error | error | "Error {código}" | Mensaje de error del servidor | 5 segundos |
Endpoints
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v2.0.2/erpx/salud/citas/ | Lista todas las citas con paginación y búsqueda. |
GET | /v2.0.2/erpx/salud/citas/\{id\} | Obtiene una cita por su ID. |
POST | /v2.0.2/erpx/salud/citas/ | Crea una nueva cita. |
PUT | /v2.0.2/erpx/salud/citas/\{id\} | Actualiza una cita existente. |
PATCH | /v2.0.2/erpx/salud/citas/\{id\} | Actualiza parcialmente una cita (cambio de estado). |
DELETE | /v2.0.2/erpx/salud/citas/\{id\} | Elimina una cita. |
GET | /v2.0.2/erpx/salud/especialidades/ | Lista las especialidades médicas. |
GET | /v2.0.2/erpx/salud/pacientes/ | Lista los pacientes para el dropdown. |
GET | /v2.0.4/erpx/salud/medicos/ | Lista los médicos por especialidad. |
GET | /v2.0.1/erpx/salud/equipos-medicos/ | Lista los equipos médicos por especialidad. |
GET | /v2.0.3/erpx/rrhh/colaboradores-horarios-detalles/cupos/ | Obtiene los cupos disponibles para el calendario de horarios. |
GET | /v2.0.3/erpx/salud/admisiones/ | Consulta admisiones asociadas a la cita (para baja). |
PATCH | /v2.0.3/erpx/salud/admisiones/\{id\} | Actualiza la admisión asociada al dar de baja la cita. |
GET | /v2.0.1/erpx/global/params/ | Obtiene los parámetros de configuración. |
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| "Revise bien, hay formularios por validar" | Campos obligatorios sin completar en el formulario de nueva cita o reprogramación. | Complete todos los campos obligatorios marcados con (*), incluyendo la selección de un horario en el calendario. |
| El calendario de horarios aparece vacío | No se han seleccionado todos los campos requeridos (modalidad, tipo de atención, médico/equipo, especialidad, lugar) o no hay cupos disponibles para la semana mostrada. | Seleccione todos los campos del formulario y navegue a otra semana usando las flechas del calendario. |
| No aparecen horarios para el día actual | Los horarios disponibles se filtran según el tiempo de anticipación configurado. | Seleccione un horario en un día futuro o navegue a la siguiente semana. |
| No se puede reprogramar una cita | La cita tiene estado "Atendido" (1) o "Reprogramado" (2). | Solo se pueden reprogramar citas en estado "Nuevo" o "Baja". |
| La cita cambió a "Baja venta" automáticamente | La referencia de venta asociada a la cita tiene estado = 4. | Este es un comportamiento automático del sistema. Contacte al administrador si necesita revertir el estado. |
| El campo "Médico" no aparece | La especialidad seleccionada es de tipo Equipo Médico (tipo = 1). | Seleccione una especialidad de tipo Médico (tipo = 0) o use el campo "Equipo Médico" que aparece en su lugar. |
Páginas relacionadas
- Admisiones — Gestión de admisiones de pacientes.
- Atenciones — Gestión de atenciones clínicas.
- Médicos — Gestión de médicos internos del establecimiento.