Ir al contenido

Modelo de datos y tools

EMA Emi no tiene base de datos propia. Es stateless: cada request trae sus mensajes y el agente responde sin memoria entre llamadas.

Acceden a Aidbox (FHIR) con scope por tenant:

ToolQué hace
list_appointmentsAgenda del día o rango
get_patient_summaryCondiciones, alergias, medicamentos, órdenes activas, flags GES
search_patientsBúsqueda por nombre o RUT
list_alertsENO, valores críticos, plazos GES
list_encountersWorklist del día (paciente, status, tipo, hora)
get_encounter_tasksTasks y formularios SDC asociados a un encuentro
evaluate_gesAplicación de criterios GES (70 patologías)
get_observationsLabs, vitales (FHIR Observation)
get_diagnostic_reportsReportes diagnósticos
list_prescriptionsMedicamentos activos del paciente
get_dashboard_summaryKPIs operativos de la clínica

Acceden a Supabase del proyecto emahub:

ToolQué hace
get_finance_summaryMRR, gastos, EBITDA, margin %, runway, BUPA
list_expensesGastos por categoría/período (fijos vs variables)
list_leadsPipeline de 7 etapas con probability weighted
get_team_hoursTracking horas por persona/fecha
list_obligationsVencimientos legales y fiscales
list_editorialCalendario editorial (status + publish dates)

Ninguna. Es Q&A puro basado en su system prompt: responde sobre productos, interoperabilidad, pricing y deriva al usuario al formulario de contacto si hay intención comercial.

MAX_TOOL_ITERATIONS = 5. Si Claude encadena 5 tool calls sin llegar a end_turn, el loop corta y devuelve la última respuesta. Esto previene loops costosos o accidentes de razonamiento.

Si una tool falla (red, query inválida, timeout), el agente retorna 503 al cliente y registra el error en el log del worker.

ProductoPath en clienteCómo invoca
emahealth/api/chat (proxy)Widget chatbot del website
emaclinic/api/emi/chat (proxy con apiFetch)EmiDrawer en header + EmiActions en ContextPanel
emavault/api/emi/chat (proxy con apiFetch)EmiDrawer en header

El cliente nunca llama a emaemi directamente desde el browser: siempre pasa por su propio worker (proxy) para incluir el token de Supabase del usuario y el X-Tenant-Id cuando corresponde.