Modelo de datos y tools
Persistencia interna
Sección titulada «Persistencia interna»EMA Emi no tiene base de datos propia. Es stateless: cada request trae sus mensajes y el agente responde sin memoria entre llamadas.
Tools de SupportAgent (emaclinic)
Sección titulada «Tools de SupportAgent (emaclinic)»Acceden a Aidbox (FHIR) con scope por tenant:
| Tool | Qué hace |
|---|---|
list_appointments | Agenda del día o rango |
get_patient_summary | Condiciones, alergias, medicamentos, órdenes activas, flags GES |
search_patients | Búsqueda por nombre o RUT |
list_alerts | ENO, valores críticos, plazos GES |
list_encounters | Worklist del día (paciente, status, tipo, hora) |
get_encounter_tasks | Tasks y formularios SDC asociados a un encuentro |
evaluate_ges | Aplicación de criterios GES (70 patologías) |
get_observations | Labs, vitales (FHIR Observation) |
get_diagnostic_reports | Reportes diagnósticos |
list_prescriptions | Medicamentos activos del paciente |
get_dashboard_summary | KPIs operativos de la clínica |
Tools de AnalyticsAgent (emavault)
Sección titulada «Tools de AnalyticsAgent (emavault)»Acceden a Supabase del proyecto emahub:
| Tool | Qué hace |
|---|---|
get_finance_summary | MRR, gastos, EBITDA, margin %, runway, BUPA |
list_expenses | Gastos por categoría/período (fijos vs variables) |
list_leads | Pipeline de 7 etapas con probability weighted |
get_team_hours | Tracking horas por persona/fecha |
list_obligations | Vencimientos legales y fiscales |
list_editorial | Calendario editorial (status + publish dates) |
Tools de SalesAgent (emahealth)
Sección titulada «Tools de SalesAgent (emahealth)»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.
Sobre el tool loop
Sección titulada «Sobre el tool loop»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.
Integración con productos cliente
Sección titulada «Integración con productos cliente»| Producto | Path en cliente | Có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.