Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Patrones de salud para agentes de IA (beta)
Qué cambió en el registro de un paciente y qué se repite, calculado por reglas estadísticas fijas: tendencias, desviaciones del nivel habitual de la persona y recurrencia de síntomas, cada uno con su período, evidencia y limitaciones; no diagnósticos.
Anpheros calcula qué cambió en el registro de un paciente y qué se repite, mediante reglas estadísticas fijas, y entrega cada hallazgo a su aplicación o agente de IA con su período, los recursos subyacentes, la versión del método y sus limitaciones. Un modelo ya no tiene que adivinar una tendencia a partir de un puñado de números: recibe la tendencia, la incertidumbre en torno a ella y los datos para citar.
Beta. En el sandbox funciona con cualquier credencial de sandbox (claves sk_test_… y conexiones OAuth de sandbox). En registros de producción, solo se ejecuta bajo el consentimiento OAuth de un paciente que incluya el permiso anpheros/patterns por separado; las claves API de producción obtienen 403.
Qué encuentra
| Tipo | Pregunta que responde | Método |
|---|---|---|
trend |
¿Está una medición subiendo o bajando durante el período? | Pendiente de Theil–Sen con Mann–Kendall en un valor por día (medianas semanales para datos de vigilancia densos), corregido cuando los días vecinos son iguales |
trend (change_between_results) |
¿Cómo cambió una prueba de laboratorio con dos a cinco resultados? | Primer y último resultado, con el más reciente comparado con el rango de referencia del informe; descrito, no probado |
trend (event_rate_change) |
¿Se registra un síntoma con más o menos frecuencia? | Días de síntomas sobre días en que la persona registró algo, últimos 30 días comparados con los 90 anteriores, prueba exacta |
baseline_deviation |
¿Es la última semana inusual para esta persona? | Últimos 7 días comparados con los días 8–60, Mann–Whitney o una diferencia de medias ajustada por autocorrelación |
recurrence |
¿Los episodios de síntomas regresan a intervalos regulares? | Intervalos entre el inicio de los episodios, Monte Carlo sembrado contra episodios colocados al azar |
association (around_medication_start, sandbox) |
¿Se registra un síntoma con más o menos frecuencia desde el inicio de una medicación? | Días de síntomas sobre días activos en los 30 días desde el inicio comparado con hasta 90 días antes, prueba exacta |
association (after_short_sleep, sandbox) |
¿Se registra un síntoma con más frecuencia en días con menos de 6 horas de sueño? | Días con sueño medido y una entrada de la persona, noches cortas comparadas con noches más largas, prueba exacta de Fisher |
convergence (recent_changes_together, sandbox) |
¿Varios eventos cambiaron en el mismo período reciente? | Sin prueba nueva: agrupa al menos dos cambios recientes (una semana inusual, un síntoma con más o menos frecuencia) que están cada uno estadísticamente respaldados; solo dice que ocurrieron juntos |
Todas las pruebas de una ejecución se corrigen juntas (Benjamini–Hochberg). Un hallazgo es statistically_supported solo cuando el valor q corregido está por debajo de 0.05 y el cambio es al menos el umbral para esa medición.
Lo que no es
- No es un diagnóstico. Los hallazgos describen el registro; nunca nombran una condición ni recomiendan un cambio de tratamiento. Cada hallazgo lleva
safety.not_a_diagnosis = trueysafety.causal_claim = false. - No es una causa. Un cambio después de una nueva medicación, o dos cosas registradas juntas, no es evidencia de que una causó la otra. Las asociaciones solo dicen que dos cosas sucedieron al mismo tiempo; cada una lleva
confounding_possibleynot_causal, y solo los inicios de medicación y el sueño se prueban contra los síntomas, no cada par. Por ahora, solo con credenciales de sandbox. - No es un modelo de IA, y aún no ha sido revisado clínicamente. Cada número proviene de reglas estadísticas fijas y versionadas; ningún modelo de IA analiza los datos. Los umbrales para un cambio significativo se establecieron con ayuda de IA y aún no han sido revisados por un clínico; cada hallazgo lo indica en
review.thresholds_reviewed_by_clinician. El motor se valida en pacientes sintéticos con patrones plantados conocidos: encuentra lo que se plantó y permanece en silencio cuando no hay nada. Esa no es una validación clínica.
Pruébalo
Cada proyecto sandbox tiene 30 pacientes sintéticos, y seis de ellos tienen un patrón predefinido. Encuentra uno con GET /fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|<key>.
| Paciente | Qué se plantó | Qué reporta el motor |
|---|---|---|
| p01 Andrei Popescu | Presión arterial diaria en casa, disminuyendo aproximadamente 8/5 mmHg en seis meses | trend.decreasing para sistólica (8480-6) y diastólica (8462-4) |
| p06 Giulia Rossi | Dolor de cabeza cada 7 días, con una variación de uno | recurrence.intervals para dolor de cabeza (R51) |
| p17 Ciarán Murphy | Fatiga aproximadamente la mitad de los últimos 30 días, frente a 1 día de cada 12 antes | frequency.increased para fatiga (R53) |
| p19 Felix Gruber | Frecuencia cardíaca en reposo de un reloj, aproximadamente 9 lpm por encima de su nivel habitual en la última semana | baseline.higher para frecuencia cardíaca en reposo (40443-4) |
| p20 Ivana Horvat | Frecuencia cardíaca en reposo de un reloj, disminuyendo aproximadamente 16 lpm en seis meses | trend.decreasing para frecuencia cardíaca en reposo (40443-4) |
| p30 Jan Kowalczyk | Datos densos del reloj y del hogar sin nada plantado | No se encontró hallazgo compatible: el motor permanece en silencio |
Los proyectos creados antes del 16 de octubre de 2026 obtienen estos patrones después de restablecer sus pacientes sintéticos desde el dashboard; un restablecimiento reemplaza cualquier cambio realizado en ellos.
curl -s https://platform.anpheros.com/v1/patients/$PATIENT/patterns?window_days=180 \
-H "Authorization: Bearer $ANPHEROS_KEY"
Con el SDK de TypeScript (@anpheros/sdk 0.2.0 o posterior):
const run = await anpheros.patterns.run(patientId, { window_days: 180, min_strength: 'moderate' });
for (const f of run.findings) console.log(f.summary_text, f.strength, f.limitations.map(l => l.code));
Con el servidor MCP, pregúntale a tu agente: "¿Qué cambió en el registro de este paciente en los últimos seis meses?": llama a get_health_patterns, y puede continuar con get_pattern_evidence, get_series y compare_periods. POST /v1/context añade una sección patterns para preguntas sobre cambios y relaciones, o cuando solicitas la necesidad patterns.
Endpoints
| Endpoint | Qué devuelve |
|---|---|
GET /v1/patients/{id}/patterns |
un run: hallazgos, lo que no se pudo computar y por qué, qué consentimiento se omitió; filtros window_days (30–730), end, types, min_strength |
GET /v1/patients/{id}/patterns/{finding_id} |
un hallazgo, recalculado para la misma ventana |
GET /v1/patients/{id}/patterns/{finding_id}/evidence |
cada recurso de soporte, paginado |
GET /v1/patients/{id}/series?code=… |
una medición como un valor por día, con cobertura, huecos y cambios de origen |
POST /v1/patients/{id}/patterns/compare |
una medición en dos períodos que usted elija |
Lectura de un hallazgo
summary_text: una frase sencilla, segura de mostrar o citar.strength:strong,moderate,weakonot_tested. Los hallazgos débiles y no probados son descripciones, no evidencia.window,comparison_window: los períodos analizados.evidence(hasta 20, distribuidos a lo largo del período) yevidence_total: los recursos detrás del hallazgo, con versión, fecha, valor y tipo de autor.limitations: codificado, con texto. Muéstrelo con el hallazgo.review: si un clínico ha revisado los umbrales (falsepor ahora) y de dónde provienen.method,engine_version,input_fingerprint: los mismos datos, configuración y versiones dan el mismo resultado y el mismo id.
Reglas importantes
- Consentimiento primero. Bajo una concesión de OAuth, el motor lee solo lo que la concesión permite; lo que no pudo leer se enumera en
omitted, sin contenido. - IDs. Los pacientes aparecen con el ID de emparejamiento de su proyecto; los IDs de hallazgo se derivan por proyecto. Cuando el registro cambia, un hallazgo obtiene un nuevo ID y el anterior responde 404.
- Hora. Cuando la hora de una lectura lleva un desplazamiento explícito (
2026-10-16T00:30:00+03:00), se basa en el día propio de la persona; las horas en UTC (Z) o sin desplazamiento permanecen en el día UTC. Cada hallazgo indica cuál entime_basis(record_offsets,partly_localolocal_time_unknown). Los días locales se utilizan en los registros de sandbox y producción; los patrones de hora del día aún no se calculan. - Omitido. Los valores escritos por IA, los resultados marcados como "entered-in-error" y las fechas conocidas solo por el mes no se utilizan y se cuentan.
- Límites. 30 ejecuciones de patrones por minuto por credencial, además de las 600 solicitudes habituales por minuto.
Preguntas frecuentes
¿Utiliza un modelo de lenguaje?
No. Cada número proviene de métodos estadísticos fijos y versionados. Cualquier modelo, alojado o local, puede leer los resultados.
¿Por qué se marca como débil un cambio claro en mis datos?
Porque la evidencia no sobrevive a la corrección para todas las pruebas en la ejecución, la serie es corta o ruidosa, o el cambio está por debajo del umbral para esa medición. El hallazgo aún describe lo que muestra el registro.
¿Funciona en registros de producción?
Sí, a partir del 16 de octubre de 2026, pero solo bajo el consentimiento OAuth de un paciente que incluya el permiso anpheros/patterns separado, que la pantalla de consentimiento muestra en su propia línea. Solicite el scope junto a sus scopes patient/…; una concesión sin él, y cualquier clave API de producción, recibe un 403.
Relacionado
- Servidor MCP de FHIR para agentes de IA
- Aplicaciones LLM y datos de salud
- Agentes de IA y datos médicos
- API de salud con consentimiento del paciente
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card