Recepción
Es la pantalla principal donde ves de un vistazo todo lo que necesita tu atención hoy — casos pendientes en el chat, citas que esperan confirmación del doctor y la agenda del día — y desde la misma pantalla, en la pestaña "Conversaciones", respondes esos chats. La usan recepción, doctor, enfermería y administración.
Operación — cómo se usa
Recepción tiene dos pestañas: Resumen (panel de control) y Conversaciones (chat con pacientes). Cambia entre ellas con los botones de arriba a la derecha.
Pestaña Resumen
Cómo revisar qué necesita atención ahora
- Entra a "Recepción" — es la primera pantalla que ves al iniciar sesión (o a la que regresas seguido). Se abre en "Resumen".
- Mira las tarjetas de arriba: cada una solo aparece si hay algo de ese tipo pendiente (si no ves una tarjeta de "Urgentes", por ejemplo, es porque no hay ninguna ahorita).
- Atiende primero las tarjetas en rojo (urgentes, rechazadas por doctor, insistencias) y luego las amarillas (pendientes, sin paciente, sin cita).
Cómo atender un caso del chat
- En "Casos por atender" verás la lista de conversaciones que el sistema escaló para que las revise una persona.
- Revisa las etiquetas de cada caso:
- Urgente — necesita atención inmediata.
- Insiste — el paciente ha vuelto a escribir sin que nadie le responda; el número te dice cuántas veces.
- Sin paciente — quien escribe no está identificado en el sistema todavía.
- Sin cita — no tiene una cita asociada a esta conversación.
- Doctor pendiente / Doctor rechazó — la cita relacionada está esperando o fue rechazada por el médico.
- Da clic en "Abrir" para cambiar a la pestaña "Conversaciones" con ese caso ya seleccionado.
Cómo dar seguimiento a citas que esperan al doctor
- En "Pendientes de confirmar por doctor" verás las citas que ya se agendaron pero el médico todavía no ha dicho si las acepta.
- Da clic sobre cualquier renglón para abrir el detalle de esa cita y darle seguimiento (por ejemplo, llamar al doctor).
Cómo reasignar una cita que el doctor rechazó
- En "Rechazadas por doctor · requieren reasignación" verás las citas que el médico no aceptó, junto con el motivo si lo dio.
- Da clic sobre el renglón para abrir la cita y asignarla a otro doctor u horario.
Cómo ver la agenda del día
- En "Citas del día" aparecen todas las citas programadas para hoy, ordenadas por hora.
- Cada renglón muestra el horario, el paciente, el doctor, el teléfono (si está registrado) y el estado de la cita (Solicitada, Confirmada, Cancelada, etc.).
- Da clic sobre una cita para abrir su detalle.
Cómo crear una cita nueva
- Da clic en el botón "Nueva cita" (arriba a la derecha).
- Completa el flujo de agendado que se abre.
Pestaña Conversaciones
Aquí ves y respondes los mensajes que llegan de Telegram, WhatsApp, Instagram y Facebook. Un bot contesta automáticamente la mayoría; cuando el bot no puede resolver algo, te avisa para que tú tomes el control.
Cómo ver las conversaciones que necesitan tu atención
- Al entrar a esta pestaña, primero ves las conversaciones Escaladas — son las que el bot ya no puede atender solo.
- Usa las pestañas de arriba para cambiar entre "Todas", "Activas" (las atiende el bot), "Escaladas" (te necesitan a ti) y "Cerradas".
- El número naranja junto a "Escaladas" te dice cuántas están esperando respuesta tuya en este momento.
- Las conversaciones urgentes o de alta prioridad aparecen primero en la lista, sin importar cuándo llegó el último mensaje.
- Escribe en el buscador el nombre del paciente para encontrar su conversación más rápido.
Cómo leer una conversación
- Da clic sobre la conversación en la lista de la izquierda.
- A la derecha verás el historial completo: en gris los mensajes del paciente, en color los del bot o de recepción.
- Si alguien de recepción ya respondió, verás la etiqueta "Recepción" sobre su mensaje.
- Si necesitas ver el detalle técnico (lo que el bot consultó por dentro), da clic en "Ver detalles técnicos" — normalmente no lo necesitas.
Cómo tomar control de una conversación
- Abre la conversación.
- Da clic en "Tomar control".
- La conversación pasa a estado "Escalada" y queda asignada a tu nombre — verás el aviso "Tú estás atendiendo esta conversación".
- Ahora puedes escribir y enviar mensajes directamente al paciente, por el mismo canal donde te escribió (Telegram, WhatsApp, etc.).
Cómo responder a un paciente
- Con la conversación escalada y abierta, escribe tu respuesta en el cuadro de texto de abajo.
- Presiona Enter para enviar (o el botón de enviar). Usa Shift+Enter si quieres escribir varias líneas antes de enviar.
- Tu mensaje se envía al paciente por el canal original y aparece marcado como "Recepción" en el historial.
Mientras una conversación está "Activa" (no escalada), no puedes escribir — el bot es quien responde. Si necesitas intervenir, primero da clic en "Tomar control".
Cómo asociar o crear un paciente desde una conversación
Si ves la etiqueta "Sin paciente", esa persona escribió pero todavía no tiene expediente en el sistema.
- Da clic en "Crear/asociar paciente".
- Completa los datos del paciente (o búscalo si ya existe) en la ventana que se abre.
- Al guardar, la conversación queda ligada a ese paciente y se abre automáticamente la ventana para asignarle una cita.
Cómo asignar una cita desde una conversación
- Con la conversación ya ligada a un paciente, da clic en "Asignar cita" (o "Reasignar cita" si el doctor rechazó una anterior).
- Elige fecha, hora y doctor en la ventana que se abre.
- El motivo y el nivel de dolor que reportó el paciente (si los dio) se copian automáticamente a las notas de la cita.
Cómo registrar una llamada al doctor
Cuando una cita está "Pendiente confirmación doctor" y ya intentaste contactarlo, deja constancia:
- Da clic en "Registrar llamada al doctor".
- Indica qué pasó (no contestó, ocupado, pidió que le devuelvan la llamada, etc.).
- Guarda — así queda registro de los intentos de contacto.
Cómo cerrar una conversación
- Abre la conversación.
- Da clic en "Cerrar conversación".
- La conversación pasa a "Cerradas" y deja de aparecer en pendientes. Ya no podrás escribir en ella desde aquí.
Reglas de negocio — por qué se comporta así
- Lo que pasa: las tarjetas y listas de Resumen solo muestran información, no se puede editar nada directamente desde ahí. Por qué: esa pestaña es un panel de control para detectar pendientes rápido; para actuar (responder un chat, cambiar una cita) siempre te manda a Conversaciones o al detalle de la cita.
- Lo que pasa: una tarjeta (como "Urgentes" o "Sin cita asignada") desaparece sola cuando ya no hay ningún caso de ese tipo. Por qué: así la pantalla no se llena de tarjetas en cero y resalta solo lo que realmente necesita tu atención.
- Lo que pasa: la información se actualiza sola, sin que tengas que recargar la página. Por qué: ambas pestañas están conectadas en tiempo real a conversaciones y citas, para que veas casos nuevos o cambios de estado apenas ocurren.
- Lo que pasa: solo ves en "Casos por atender" (Resumen) las conversaciones marcadas como escaladas. Por qué: son las que el sistema (o alguien más) decidió que necesitan que una persona las revise; las demás siguen su curso normal en Conversaciones.
- Lo que pasa: no puedes escribir en una conversación "Activa". Por qué: mientras nadie ha tomado el control, el bot es quien está respondiendo; si dos "personas" contestan a la vez se duplican o contradicen mensajes al paciente.
- Lo que pasa: las conversaciones "Escaladas" siempre aparecen primero en la lista, y las urgentes antes que las de prioridad normal. Por qué: son las que tienen a un paciente esperando una respuesta humana — no se deben perder entre las que el bot ya está atendiendo bien.
- Lo que pasa: ves la etiqueta "Sin paciente" y el botón de "Asignar cita" no aparece hasta que asocias o creas el paciente. Por qué: una cita siempre necesita un expediente de paciente al que pertenecer; el sistema te obliga a resolver eso primero.
- Lo que pasa: cuando el doctor rechaza una cita, ves "Rechazada por doctor" y el motivo que dio. Por qué: para que sepas por qué no se puede confirmar y reasignes con otro horario o doctor en vez de dejar al paciente sin respuesta.
- Lo que pasa: si una cita lleva más de 15 minutos esperando que el doctor la confirme, aparece en rojo "Sin confirmar". Por qué: para que no se quede esperando indefinidamente y alguien le dé seguimiento al doctor.
- Lo que pasa: en conversaciones marcadas como urgentes, el sistema te recuerda valorar atención inmediata o recomendar acudir a urgencias / llamar al 911. Por qué: son casos donde el paciente reportó síntomas que podrían ser graves — es un recordatorio de seguridad, no un diagnóstico automático.
- Lo que pasa: doctor y enfermería ven y usan Recepción igual que recepcionistas, con las mismas dos pestañas. Por qué: para temas médicos urgentes (síntomas graves, dolor alto) a veces necesitan tomar control de la conversación directamente, sin esperar a que recepción esté disponible.
Preguntas frecuentes
| Lo que pasa | Por qué pasa | Qué hacer |
|---|---|---|
| No veo ninguna tarjeta arriba en Resumen | No hay nada pendiente en este momento | Es buena señal, no necesitas hacer nada |
| Un caso dice "Sin paciente" | Quien escribió no está vinculado a un registro de paciente todavía | Ábrelo desde "Abrir" y crea o vincula el paciente desde Conversaciones |
| Una cita aparece en "Rechazadas por doctor" | El médico revisó la cita y no la aceptó (puede dar un motivo) | Da clic en la cita y reasígnala a otro doctor u horario |
| Llevo rato sin ver actualizarse algo aunque ya respondí el chat | Puede ser un problema de conexión momentáneo | Recarga la página (F5) |
| Veo una etiqueta "Insiste" con un número alto | El paciente ha escrito varias veces sin respuesta | Atiende ese caso primero, es prioridad |
| No puedo escribirle al paciente | La conversación sigue "Activa" (la atiende el bot) | Da clic en "Tomar control" primero |
| No encuentro el botón de "Asignar cita" | La conversación no tiene paciente asociado todavía | Da clic en "Crear/asociar paciente" primero |
| Llegó un mensaje nuevo y no veo la conversación en mi lista | Puede estar en otra pestaña de estado, o filtrada por tu búsqueda | Revisa la pestaña "Todas" y borra el texto del buscador |
| El paciente dice que no le llegó mi respuesta | Puede ser un problema de conexión con el canal (Telegram/WhatsApp/etc.) | Revisa que el mensaje se haya enviado sin error (mensaje de aviso rojo); si persiste, avisa a soporte técnico |
| Quiero ver qué le preguntó el bot por dentro al paciente | Por defecto solo se muestran los mensajes normales | Da clic en "Ver detalles técnicos" dentro de la conversación |
| Cerré una conversación por error | Se cerró antes de tiempo | Por ahora no hay botón de "reabrir" — vuelve a contactar al paciente o pide ayuda técnica para reabrirla |
Implementación — para el siguiente dev/agente
- Archivo(s) principal(es):
src/pages/RecepcionDashboard.tsx(shell con tabs, sin datos propios),src/features/recepcion/ResumenTab.tsx(dashboard, antes vivía enRecepcionDashboard.tsx),src/features/recepcion/ConversacionesTab.tsx(chat, antessrc/pages/Inbox.tsx),src/features/recepcion/resolveTab.ts(decide tab activa desde?tab=/?id=),src/features/recepcion/conversacionAuditLog.ts(payload deaudit_logspara tomar-control/cerrar),src/features/inbox/ConversationActionPanel.tsx+QuickPatientDialog.tsx+AssignAppointmentDialog.tsx+DoctorCallDialog.tsx(panel de acciones cuando está escalada, sin mover — siguen enfeatures/inbox/) - Tablas Supabase involucradas:
appointments,patients,doctors,conversaciones,mensajes,identidades_canal,doctor_contact_attempts,audit_logs - Edge function:
enviar-mensaje-humano(envía la respuesta de recepción/doctor/enfermería al canal externo correspondiente; ya acepta los 4 roles víauser_roles, sin cambios) - RLS:
conversaciones(SELECT/UPDATE),mensajes(SELECT),doctor_contact_attempts(SELECT) incluyen los 4 roles staff desde la migración20260723140000_recepcion_conversaciones_rls_doctor_nurse.sql— antes solo admin/receptionist - Realtime:
ResumenTabse suscribe al canalrecepcion-realtime(conversaciones,appointments);ConversacionesTabse suscribe aparte al canalinbox-realtime(mensajesINSERT,conversacionesINSERT/UPDATE); el panel de acciones se suscribe aparte aappointmentsfiltrado porconversacion_id - Ruta y tabs: todo vive en
/recepcion; el tab activo se controla con?tab=resumen|conversacionesy se puede combinar con?id=<conversacion_id>para abrir directo una conversación./inboxy/conversacionesson redirects (RedirectToRecepcionConversacionesenApp.tsx) a/recepcion?tab=conversaciones, por compatibilidad con links viejos - Estados de conversación:
activa(bot responde),escalada(humano responde, requiereasignada_humano_id),cerrada(solo lectura) - Auditoría:
tomarControl()ycerrarConversacion()enConversacionesTab.tsxinsertan enaudit_logsvíabuildConversacionAuditPayload("conv_tomada" | "conv_cerrada", ...) - Orden de la lista de conversaciones: escaladas primero, luego por prioridad (
urgente>alta> resto), luego porlast_message_atdescendente — lógica en eluseMemodefilteredOrderedenConversacionesTab.tsx - Cómo agregar un canal nuevo: agregar la entrada en
CANAL_META(icono, color, label) enConversacionesTab.tsx; el tipoCanalTipoy la columnacanal_idenidentidades_canaldeben incluir el nuevo valor - Cómo agregar una tarjeta nueva en Resumen: agregar el cálculo correspondiente a
stats/opStatsenResumenTab.tsx, luego un objeto{ show, el }al arreglocardscon el ícono delucide-reacty elvariantdeStatCard - Cómo agregar una regla de negocio nueva: si es de Resumen y depende de datos ya cargados, ajustar el
select/filtro enloadAll()deResumenTab.tsx; si es de Conversaciones (ej. nuevo umbral de tiempo sin confirmar), la lógica de badges/alertas vive enConversationActionPanel.tsx; si la regla debe ser inviolable (no solo visual), agregarla también como validación en el RPC/edge function correspondiente, no solo en el frontend