Admisiones
Gestión de admisiones de pacientes en el módulo de Salud de Davix ERPX.
Descripción general
La pantalla Lista de admisiones permite gestionar las admisiones de pacientes al establecimiento de salud: registrar nuevas admisiones, cambiar estados (en espera, llamado, en atención, atendido), reprogramar citas y dar de baja admisiones. Cada admisión se vincula a un paciente, un médico o equipo médico, una especialidad, un lugar de atención y un horario específico.
Ruta de navegación: Inicio → Salud → Admisiones
Vista principal (listado de admisiones)
Encabezado
| Elemento | Descripción |
|---|---|
| Título | "Lista de admisiones" |
| Subtítulo | "Muestra el listado y las herramientas para gestionar las admisiones" |
| Botón "Actualizar" | Icono pi pi-refresh. Recarga la tabla. |
| Botón "Nueva admisión" | Icono pi pi-plus. Abre el diálogo de creación de nueva admisión. |
Barra de búsqueda y filtros
| Elemento | Tipo | Descripción |
|---|---|---|
| Campo de búsqueda | pInputText con icono pi pi-search | Búsqueda por texto libre (ancho: 4/12 columnas). Se ejecuta al presionar Enter o al hacer clic en "Buscar". |
| Chips de filtros activos | p-chip | Filtros aplicados como chips removibles. Al hacer clic en un chip se abre el overlay para editarlo. |
| Botón "Agregar filtro" | Icono pi pi-filter | Abre el panel overlay de filtros. En móvil muestra solo "filtros". |
| Botón "Quitar filtros" | Icono pi pi-filter-slash | Elimina todos los filtros activos. En móvil muestra solo "Quitar". |
| Botón "Buscar" | Icono pi pi-search | Ejecuta la búsqueda con los filtros activos. Solo visible en escritorio. |
Panel de filtros (overlay)
Se abre como p-overlayPanel con ancho de 350px y botón de cierre.
| Filtro | Valor | Campos adicionales |
|---|---|---|
| Fecha de atención | 1 | Fecha de atención inicio* (input[type=date]), Fecha de atención fin* (input[type=date]). Valor por defecto: fecha actual. |
| Paciente | 2 | Paciente* (p-dropdown con búsqueda, lazy loading). Muestra: "{apellido_paterno} {apellido_materno} {nombres}". |
| Médico | 3 | Médico* (p-dropdown con búsqueda, filterBy="text"). Muestra: "{apellido_paterno} {apellido_materno} {nombres}". |
| Lugar de atención | 4 | Lugar de atención* (p-dropdown con búsqueda, filterBy="nombre"). Muestra el campo "nombre". |
| Modalidad | 5 | Modalidad* (p-dropdown). Opciones: EN CONSULTORIO (1), VIRTUAL (2). |
| Tipo de atención | 6 | Tipo de atención* (p-dropdown, filterBy="value"). Opciones: CONSULTA, RECONSULTA. |
| Especialidad | 7 | Especialidad* (p-dropdown con búsqueda, filterBy="nombres", optionLabel="nombres"). |
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"*.
Al guardar un filtro, se agrega como chip con formato descriptivo. Por ejemplo, para fecha: "Fecha de atención desde DD/MM/YYYY hasta DD/MM/YYYY".
Formato de consulta (query) por filtro:
| Filtro | Query generado |
|---|---|
| Fecha de atención | atencion_fecha:[YYYY-MM-DD TO YYYY-MM-DD] |
| Paciente | paciente_id:\{id\} |
| Médico | medico_id:\{id\} |
| Lugar de atención | lugar_id:\{id\} |
| Modalidad | modalidad:\{value\} |
| Tipo de atención | atencion_tipo:\{value\} |
| Especialidad | especialidad_id:\{id\} |
Indicador de paginación
"Mostrando página {N} con {X} registros de {T} entradas"
Columnas de la tabla
| Columna | Descripción |
|---|---|
| Fecha | Fecha y hora de la atención programada. |
| Médico / Equipo médico | Nombre del médico asignado o nombre del equipo médico. |
| Paciente | Nombre completo del paciente (apellido_paterno apellido_materno nombres). |
| Modalidad | Modalidad de atención: "EN CONSULTORIO" o "VIRTUAL". |
| Estado | Botón dividido (p-splitButton) que muestra el estado actual y permite cambiarlo. |
Cuando no hay registros: "No se encontraron datos".
Estados de admisión
Cada admisión tiene un estado representado por un p-splitButton con código de color:
| Estado | Código | Color del botón | Etiqueta |
|---|---|---|---|
| En espera | 0 | secondary (gris) | "EN ESPERA" |
| En llamado | 1 | warning (amarillo) | "EN LLAMADO" |
| En atención | 2 | primary (azul) | "EN ATENCIÓN" |
| Atendido | 3 | success (verde) | "ATENDIDO" |
| Baja | 4 | danger (rojo) | "BAJA" |
| Reprogramado | 5 | danger (rojo) | "REPROGRAMADO" |
| Baja venta | 6 | danger (rojo) | "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 admisión no esté ya en estado Baja (código 4).
Opciones del splitButton (cambio de estado)
Al hacer clic en el dropdown del p-splitButton, se muestran las siguientes opciones de transición de estado:
| Opción | Descripción |
|---|---|
| PACIENTE EN ESPERA | Cambia el estado a En espera (0). |
| LLAMAR AL PACIENTE | Cambia el estado a En llamado (1). |
| PACIENTE EN ATENCIÓN | Cambia el estado a En atención (2). |
| PACIENTE ATENDIDO | Cambia el estado a Atendido (3). |
Al seleccionar una opción, se abre un diálogo de confirmación (ver sección Cambiar estado).
Menú contextual
El menú contextual varía según el estado actual de la admisión:
| Estado actual | Opciones disponibles |
|---|---|
| En espera (0) | Detalles, Reprogramar, Baja |
| En llamado (1) | Detalles, Reprogramar, Baja |
| En atención (2) | Detalles |
| Atendido (3) | Detalles |
| Baja (4) | Detalles, Reprogramar, Baja |
| Reprogramado (5) | — (sin menú contextual) |
| Baja venta (6) | Detalles, Baja |
| Opción | Icono | Descripción |
|---|---|---|
| Detalles | pi pi-eye | Abre el diálogo de detalles en modo lectura. |
| Reprogramar | pi pi-calendar | Abre el diálogo de reprogramación. |
| Baja | pi pi-trash | 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), siguiente, última página. Tamaño de página: 50 registros.
Crear nueva admisión
Al hacer clic en "Nueva admisión", se abre un diálogo a pantalla completa (p-dialog) con título "Nueva admisión".
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 |
|---|---|---|---|
| Cita | p-dropdown con búsqueda | No | Selecciona una cita existente para vincular. Al seleccionar una cita, se auto-rellenan los demás campos (paciente, modalidad, tipo atención, especialidad, médico/equipo, lugar). Formato de visualización: "PACIENTE: {num_doc} - {apellidos} {nombres} / MÉDICO/EQUIPO: {info} / {fecha_hora}". |
| Paciente | p-dropdown con búsqueda, lazy loading | Sí | Selecciona el paciente. Muestra: "{apellido_paterno} {apellido_materno} {nombres}". |
| 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 | Sí | Lista de especialidades médicas. Muestra el tipo entre paréntesis: "{nombres} (MÉDICO)" para tipo 0, "{nombres} (EQUIPO MÉDICO)" 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 | 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 | 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. |
| 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 (medico.lugares_atenciones o equipo_medico.lugares_atenciones). Al cambiar, recarga los cupos. |
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).
Mensaje de error para campos obligatorios: " Obligatorio". Para el campo Equipo Médico: " Ingrese médico válido".
Columna derecha: Horario (calendario semanal)
El calendario muestra los cupos disponibles organizados por día de la semana.
Estructura del calendario:
- Navegación: Dos botones 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 (altura mínima del contenedor: 500px).
Botones de horario:
| Estado | Estilo | Ancho |
|---|---|---|
| Disponible (no seleccionado) | Botón gris (estilo por defecto) | 78px |
| Seleccionado | Botón verde (p-button-success) | 78px |
- Cada botón muestra la hora en formato hh:mm A (12 horas, ej: "09:00 AM").
- Selección única: Solo se puede seleccionar un horario a la vez. Al seleccionar uno nuevo, se deselecciona el anterior automáticamente.
- Al seleccionar un horario, se establece el valor de
atencion_fechacon el formatoYYYY-MM-DD HH:mm:ss. - Al deseleccionar (clic en el mismo horario), se limpia el valor de
atencion_fecha.
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. Si falta alguno, el calendario aparece vacío.
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 (anticipado_tiempo). 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 | pi pi-check (cambia a 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, duración: 5s, posición: bottom-left).
Datos enviados al servidor
| Campo | Descripción |
|---|---|
fecha_creacion | Fecha y hora actual en formato YYYY-MM-DD HH:mm:ss. |
estado | 0 (En espera). |
cita_id | ID de la cita seleccionada (o null si no se seleccionó cita). |
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. |
referencia_venta_id | ID de la referencia de venta de la cita (o null). |
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 admisión
Al seleccionar "Detalles" del menú contextual, se abre un diálogo a pantalla completa (DynamicDialog) en modo solo lectura.
Campos mostrados
| Campo | Descripción |
|---|---|
| Paciente | Nombre completo del paciente. |
| Médico / Equipo médico | Nombre del médico o equipo médico asignado. |
| Especialidades | Especialidad médica asociada. |
| Lugar atención | Lugar donde se realizará la atención. |
| Modalidad | "EN CONSULTORIO" o "VIRTUAL". |
| Tipo atención | "CONSULTA", "RECONSULTA" o "PROCEDIMIENTO MEDICO". |
| Horario | Fecha y hora programada para la atención. |
Cambiar estado
Al seleccionar una opción de transición de estado desde el p-splitButton, se abre un diálogo de confirmación (DynamicDialog).
Diálogo de confirmación
| Elemento | Descripción |
|---|---|
| Título | "Confirmación" |
| Icono | pi pi-exclamation-triangle (tamaño 2rem) |
| Mensaje | "Estas seguro de proceder con la actualización?" |
| Botón "No" | Icono pi pi-times. Cierra el diálogo sin cambiar el estado. |
| Botón "Si" | Icono pi pi-check (cambia a spinner durante el proceso). Ejecuta el cambio de estado. |
El cambio de estado se realiza mediante un PATCH al endpoint de admisiones con el nuevo valor de estado.
Notificaciones
| Resultado | Severidad | Título | Mensaje | Duración |
|---|---|---|---|---|
| Éxito | success | "Alerta" | "Se ha actualizado con éxito" | 5 segundos |
| Error | error | "Error {código}" | Mensaje de error del servidor | 5 segundos |
Reprogramar admisión
Al seleccionar "Reprogramar" del menú contextual, se abre un diálogo a pantalla completa (p-dialog) con título "Reprogramar Admisión".
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 admisión (columna izquierda con campos + columna derecha con calendario), con las siguientes diferencias:
| Campo | Tipo | Obligatorio | Diferencia con nueva admisión |
|---|---|---|---|
| Cita | p-dropdown | No | Deshabilitado (solo lectura). Muestra la cita original si existe. |
| Paciente | p-dropdown con búsqueda | Sí | Pre-rellenado con el paciente de la admisión original. |
| Modalidad | p-dropdown | Sí | Pre-rellenado con la modalidad original. |
| Tipo de atención | p-dropdown | Sí | Pre-rellenado con el tipo de atención original. Opciones: CONSULTA, RECONSULTA, PROCEDIMIENTO MEDICO. |
| Especialidades | p-dropdown con búsqueda | Sí | Pre-rellenado con la especialidad original. |
| Médico / Equipo Médico | p-dropdown con búsqueda | Sí (condicional) | Pre-rellenado con el médico o equipo original. |
| Lugar atención | p-dropdown con búsqueda | Sí | Pre-rellenado con el lugar original. |
| Horario | Calendario semanal | Sí | Calendario vacío; el usuario debe seleccionar un nuevo horario. |
Al reprogramar, los campos se pre-rellenan con los datos de la admisión original. El usuario puede modificar cualquier campo excepto la cita (que permanece deshabilitada), pero debe seleccionar un nuevo horario obligatoriamente.
Flujo de guardado
La reprogramación ejecuta los siguientes pasos en secuencia:
Actualizar cita original
Si la admisión tiene una cita asociada (cita_id), 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. El ID de la nueva cita se almacena para el siguiente paso.
Marcar admisión original como reprogramada
Se envía un PATCH a la admisión original con estado: 5 (Reprogramado).
Crear nueva admisión
Se crea una nueva admisión con estado: 0 (En espera) y el cita_id de la nueva cita creada en el paso 2.
Datos enviados al servidor
Los datos son idénticos a los de una nueva admisión (ver sección Datos enviados al servidor), con la adición del campo id que contiene el ID de la admisión original que se está reprogramando.
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 admisión
Al seleccionar "Baja" del menú contextual, se abre un diálogo de confirmación (DynamicDialog) con título "Confirmación" y ancho de 50vw.
| Elemento | Descripción |
|---|---|
| Icono | pi pi-exclamation-triangle (tamaño 2rem) |
| Mensaje | "Estas seguro de proceder con la eliminación?" |
| Botón "No" | Icono pi pi-times. Cierra sin dar de baja. |
| Botón "Si" | Icono pi pi-check (cambia a spinner). Ejecuta la baja. |
Al confirmar, se envía un PATCH con estado: 4 (Baja).
Si la admisión tiene una cita asociada (cita_id), al dar de baja la admisión también se actualiza la cita correspondiente con estado: 3 (Baja en citas).
Notificaciones
| Resultado | Severidad | Título | Mensaje | Duración |
|---|---|---|---|---|
| Éxito | success | "Alerta" | "Eliminado." | 5 segundos |
| Error | error | "Error {código}" | Mensaje de error del servidor | 5 segundos |
Endpoints
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v2.0.3/erpx/salud/admisiones/ | Lista todas las admisiones con paginación, búsqueda y filtros. |
GET | /v2.0.3/erpx/salud/admisiones/\{id\} | Obtiene una admisión por su ID. |
POST | /v2.0.3/erpx/salud/admisiones/ | Crea una nueva admisión. |
PATCH | /v2.0.3/erpx/salud/admisiones/\{id\} | Actualiza parcialmente una admisión (cambio de estado). |
GET | /v2.0.3/erpx/salud/citas/ | Lista las citas disponibles. |
GET | /v2.0.3/erpx/salud/citas/\{id\} | Obtiene una cita por su ID. |
POST | /v2.0.3/erpx/salud/citas/ | Crea una nueva cita (al reprogramar). |
PATCH | /v2.0.3/erpx/salud/citas/\{id\} | Actualiza parcialmente una cita (cambio de estado). |
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/pacientes/ | Lista los pacientes para el dropdown. |
GET | /v2.0.3/erpx/salud/especialidades/ | Lista las especialidades médicas. |
GET | /v2.0.4/erpx/salud/medicos/ | Lista los médicos por especialidad. |
GET | /v2.0.3/erpx/salud/equipos-medicos/ | Lista los equipos médicos por especialidad. |
GET | /v2.0.1/erpx/global/params/ | Obtiene los parámetros de configuración (tiempo de atención, tiempo de anticipación). |
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| "Revise bien, hay formularios por validar" | Campos obligatorios sin completar en el formulario de nueva admisión 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. Si ya pasó la hora del cupo más el tiempo de anticipación, no se muestra. | Seleccione un horario en un día futuro o navegue a la siguiente semana. |
| No se puede reprogramar una admisión | La admisión tiene estado "Reprogramado" (5) o "Atendido" (3) o "En atención" (2). | Solo se pueden reprogramar admisiones en estado "En espera", "En llamado" o "Baja". |
| 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. |
| La admisión cambió a "Baja venta" automáticamente | La referencia de venta asociada a la admisión tiene estado = 4. | Este es un comportamiento automático del sistema. Contacte al administrador si necesita revertir el estado. |
Páginas relacionadas
- Citas — Gestión de citas médicas.
- Médicos — Gestión de médicos internos del establecimiento.
- Médicos Referentes — Gestión de médicos referentes externos.