# 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.

Source: https://developers.anpheros.com/es/guides/health-patterns

**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 = true` y `safety.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_possible` y `not_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.

```bash
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):

```ts
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`, `weak` o `not_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) y `evidence_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 (`false` por 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 en `time_basis` (`record_offsets`, `partly_local` o `local_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](https://developers.anpheros.com/es/guides/mcp)
- [Aplicaciones LLM y datos de salud](https://developers.anpheros.com/es/guides/llm-healthcare-data)
- [Agentes de IA y datos médicos](https://developers.anpheros.com/es/guides/ai-agents-medical-data)
- [API de salud con consentimiento del paciente](https://developers.anpheros.com/es/guides/healthcare-api-patient-consent)
