Saltar al contenido principal

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​

  1. Entra a "Recepción" — es la primera pantalla que ves al iniciar sesión (o a la que regresas seguido). Se abre en "Resumen".
  2. 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).
  3. 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​

  1. En "Casos por atender" verás la lista de conversaciones que el sistema escaló para que las revise una persona.
  2. 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.
  3. 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​

  1. 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.
  2. 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ó​

  1. En "Rechazadas por doctor · requieren reasignación" verás las citas que el médico no aceptó, junto con el motivo si lo dio.
  2. 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​

  1. En "Citas del día" aparecen todas las citas programadas para hoy, ordenadas por hora.
  2. 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.).
  3. Da clic sobre una cita para abrir su detalle.

Cómo crear una cita nueva​

  1. Da clic en el botón "Nueva cita" (arriba a la derecha).
  2. 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​

  1. Al entrar a esta pestaña, primero ves las conversaciones Escaladas — son las que el bot ya no puede atender solo.
  2. Usa las pestañas de arriba para cambiar entre "Todas", "Activas" (las atiende el bot), "Escaladas" (te necesitan a ti) y "Cerradas".
  3. El número naranja junto a "Escaladas" te dice cuántas están esperando respuesta tuya en este momento.
  4. Las conversaciones urgentes o de alta prioridad aparecen primero en la lista, sin importar cuándo llegó el último mensaje.
  5. Escribe en el buscador el nombre del paciente para encontrar su conversación más rápido.

Cómo leer una conversación​

  1. Da clic sobre la conversación en la lista de la izquierda.
  2. A la derecha verás el historial completo: en gris los mensajes del paciente, en color los del bot o de recepción.
  3. Si alguien de recepción ya respondió, verás la etiqueta "Recepción" sobre su mensaje.
  4. 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​

  1. Abre la conversación.
  2. Da clic en "Tomar control".
  3. La conversación pasa a estado "Escalada" y queda asignada a tu nombre — verás el aviso "Tú estás atendiendo esta conversación".
  4. 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​

  1. Con la conversación escalada y abierta, escribe tu respuesta en el cuadro de texto de abajo.
  2. Presiona Enter para enviar (o el botón de enviar). Usa Shift+Enter si quieres escribir varias líneas antes de enviar.
  3. 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.

  1. Da clic en "Crear/asociar paciente".
  2. Completa los datos del paciente (o búscalo si ya existe) en la ventana que se abre.
  3. 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​

  1. Con la conversación ya ligada a un paciente, da clic en "Asignar cita" (o "Reasignar cita" si el doctor rechazó una anterior).
  2. Elige fecha, hora y doctor en la ventana que se abre.
  3. 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:

  1. Da clic en "Registrar llamada al doctor".
  2. Indica qué pasó (no contestó, ocupado, pidió que le devuelvan la llamada, etc.).
  3. Guarda — así queda registro de los intentos de contacto.

Cómo cerrar una conversación​

  1. Abre la conversación.
  2. Da clic en "Cerrar conversación".
  3. 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 pasaPor qué pasaQué hacer
No veo ninguna tarjeta arriba en ResumenNo hay nada pendiente en este momentoEs 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 chatPuede ser un problema de conexión momentáneoRecarga la página (F5)
Veo una etiqueta "Insiste" con un número altoEl paciente ha escrito varias veces sin respuestaAtiende ese caso primero, es prioridad
No puedo escribirle al pacienteLa 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íaDa clic en "Crear/asociar paciente" primero
Llegó un mensaje nuevo y no veo la conversación en mi listaPuede estar en otra pestaña de estado, o filtrada por tu búsquedaRevisa la pestaña "Todas" y borra el texto del buscador
El paciente dice que no le llegó mi respuestaPuede 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 pacientePor defecto solo se muestran los mensajes normalesDa clic en "Ver detalles técnicos" dentro de la conversación
Cerré una conversación por errorSe cerró antes de tiempoPor 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 en RecepcionDashboard.tsx), src/features/recepcion/ConversacionesTab.tsx (chat, antes src/pages/Inbox.tsx), src/features/recepcion/resolveTab.ts (decide tab activa desde ?tab=/?id=), src/features/recepcion/conversacionAuditLog.ts (payload de audit_logs para tomar-control/cerrar), src/features/inbox/ConversationActionPanel.tsx + QuickPatientDialog.tsx + AssignAppointmentDialog.tsx + DoctorCallDialog.tsx (panel de acciones cuando está escalada, sin mover — siguen en features/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ía user_roles, sin cambios)
  • RLS: conversaciones (SELECT/UPDATE), mensajes (SELECT), doctor_contact_attempts (SELECT) incluyen los 4 roles staff desde la migración 20260723140000_recepcion_conversaciones_rls_doctor_nurse.sql — antes solo admin/receptionist
  • Realtime: ResumenTab se suscribe al canal recepcion-realtime (conversaciones, appointments); ConversacionesTab se suscribe aparte al canal inbox-realtime (mensajes INSERT, conversaciones INSERT/UPDATE); el panel de acciones se suscribe aparte a appointments filtrado por conversacion_id
  • Ruta y tabs: todo vive en /recepcion; el tab activo se controla con ?tab=resumen|conversaciones y se puede combinar con ?id=<conversacion_id> para abrir directo una conversación. /inbox y /conversaciones son redirects (RedirectToRecepcionConversaciones en App.tsx) a /recepcion?tab=conversaciones, por compatibilidad con links viejos
  • Estados de conversación: activa (bot responde), escalada (humano responde, requiere asignada_humano_id), cerrada (solo lectura)
  • Auditoría: tomarControl() y cerrarConversacion() en ConversacionesTab.tsx insertan en audit_logs vía buildConversacionAuditPayload("conv_tomada" | "conv_cerrada", ...)
  • Orden de la lista de conversaciones: escaladas primero, luego por prioridad (urgente > alta > resto), luego por last_message_at descendente — lógica en el useMemo de filteredOrdered en ConversacionesTab.tsx
  • Cómo agregar un canal nuevo: agregar la entrada en CANAL_META (icono, color, label) en ConversacionesTab.tsx; el tipo CanalTipo y la columna canal_id en identidades_canal deben incluir el nuevo valor
  • Cómo agregar una tarjeta nueva en Resumen: agregar el cálculo correspondiente a stats/opStats en ResumenTab.tsx, luego un objeto { show, el } al arreglo cards con el ícono de lucide-react y el variant de StatCard
  • Cómo agregar una regla de negocio nueva: si es de Resumen y depende de datos ya cargados, ajustar el select/filtro en loadAll() de ResumenTab.tsx; si es de Conversaciones (ej. nuevo umbral de tiempo sin confirmar), la lógica de badges/alertas vive en ConversationActionPanel.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