# Modèles de santé pour agents IA (bêta)

> Ce qui a changé dans le dossier d'un patient et ce qui se répète, calculé par des règles statistiques fixes : tendances, écarts par rapport au niveau habituel de la personne et récurrence des symptômes, chacun avec sa période, ses preuves et ses limites ; pas des diagnostics.

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

**Anpheros calcule ce qui a changé dans le dossier d'un patient et ce qui se répète, par des règles statistiques fixes, et transmet chaque constatation à votre application ou agent IA avec sa période, les ressources sous-jacentes, la version de la méthode et ses limites.** Un modèle n'a plus à deviner une tendance à partir d'une poignée de chiffres : il obtient la tendance, l'incertitude qui l'entoure et les données à citer.

Bêta. Dans le sandbox, cela fonctionne avec toutes les informations d'identification du sandbox (clés `sk_test_…` et connexions OAuth sandbox). Sur les dossiers de production, cela ne fonctionne que sous le consentement OAuth d'un patient qui inclut l'autorisation séparée `anpheros/patterns` ; les clés API de production renvoient 403.

## Ce qu'il trouve

| Type | Question à laquelle il répond | Méthode |
|---|---|---|
| `trend` | Une mesure est-elle en hausse ou en baisse sur la période ? | Pente de Theil–Sen avec Mann–Kendall sur une valeur par jour (médianes hebdomadaires pour les données de surveillance denses), corrigée lorsque les jours voisins sont identiques |
| `trend` (`change_between_results`) | Comment un test de laboratoire avec deux à cinq résultats a-t-il évolué ? | Premier et dernier résultat, le plus récent par rapport à la plage de référence du rapport ; décrit, non testé |
| `trend` (`event_rate_change`) | Un symptôme est-il enregistré plus ou moins souvent ? | Jours de symptômes par rapport aux jours où la personne a enregistré quelque chose, 30 derniers jours par rapport aux 90 précédents, test exact |
| `baseline_deviation` | La dernière semaine est-elle inhabituelle pour cette personne ? | 7 derniers jours par rapport aux jours 8-60, Mann–Whitney ou différence de moyennes ajustée par autocorrélation |
| `recurrence` | Les épisodes de symptômes reviennent-ils à intervalles réguliers ? | Intervalles entre les débuts d'épisodes, Monte Carlo amorcé par rapport à des épisodes placés aléatoirement |
| `association` (`around_medication_start`, sandbox) | Un symptôme est-il enregistré plus ou moins souvent depuis le début d'un médicament ? | Jours de symptômes par rapport aux jours actifs dans les 30 jours suivant le début par rapport à jusqu'à 90 jours avant, test exact |
| `association` (`after_short_sleep`, sandbox) | Un symptôme est-il enregistré plus souvent les jours suivant moins de 6 heures de sommeil ? | Jours avec sommeil mesuré et une entrée par la personne, nuits courtes par rapport à plus longues, test exact de Fisher |
| `convergence` (`recent_changes_together`, sandbox) | Plusieurs choses ont-elles changé au cours de la même période récente ? | Pas de nouveau test : regroupe au moins deux changements récents (une semaine inhabituelle, un symptôme plus ou moins souvent) qui sont chacun statistiquement étayés ; indique seulement qu'ils se sont produits ensemble |

Tous les tests d'une exécution sont corrigés ensemble (Benjamini–Hochberg). Une découverte est `statistically_supported` uniquement lorsque la valeur q corrigée est inférieure à 0.05 **et** que le changement est au moins le seuil pour cette mesure.

## Ce que ce n'est pas

- **Pas un diagnostic.** Les constatations décrivent le dossier ; elles ne nomment jamais une condition ni ne recommandent un changement de traitement. Chaque constatation porte `safety.not_a_diagnosis = true` et `safety.causal_claim = false`.
- **Pas une cause.** Un changement après un nouveau médicament, ou deux choses enregistrées ensemble, ne prouve pas que l'un a causé l'autre. Les associations indiquent seulement que deux choses se sont produites à peu près en même temps ; chacune porte `confounding_possible` et `not_causal`, et seuls les débuts de médication et le sommeil sont testés par rapport aux symptômes, pas chaque paire. Avec des identifiants de sandbox uniquement pour l'instant.
- **Pas un modèle d'IA, et pas encore revu cliniquement.** Chaque chiffre provient de règles statistiques fixes et versionnées ; aucun modèle d'IA n'analyse les données. Les seuils pour un changement significatif ont été définis avec l'aide de l'IA et n'ont pas encore été revus par un clinicien ; chaque constatation le mentionne dans `review.thresholds_reviewed_by_clinician`. Le moteur est validé sur des patients synthétiques avec des schémas connus et plantés : il trouve ce qui a été planté et reste silencieux quand il n'y a rien. Ce n'est pas une validation clinique.

## Essayer

Chaque projet sandbox contient 30 patients synthétiques, et six d'entre eux présentent un schéma pré-planté. Trouvez-en un avec `GET /fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|<key>`.

| Patient | Ce qui a été planté | Ce que le moteur rapporte |
|---|---|---|
| p01 Andrei Popescu | Tension artérielle quotidienne à domicile, en baisse d'environ 8/5 mmHg sur six mois | `trend.decreasing` pour la systolique (8480-6) et la diastolique (8462-4) |
| p06 Giulia Rossi | Un mal de tête tous les 7 jours, à un jour près | `recurrence.intervals` pour le mal de tête (R51) |
| p17 Ciarán Murphy | Fatigue environ la moitié du temps sur les 30 derniers jours, contre 1 jour sur 12 auparavant | `frequency.increased` pour la fatigue (R53) |
| p19 Felix Gruber | Fréquence cardiaque au repos mesurée par une montre, environ 9 bpm au-dessus de son niveau habituel la semaine dernière | `baseline.higher` pour la fréquence cardiaque au repos (40443-4) |
| p20 Ivana Horvat | Fréquence cardiaque au repos mesurée par une montre, en baisse d'environ 16 bpm sur six mois | `trend.decreasing` pour la fréquence cardiaque au repos (40443-4) |
| p30 Jan Kowalczyk | Données denses de montre et à domicile sans rien de planté | aucune découverte prise en charge : le moteur reste silencieux |

Les projets créés avant le 16 octobre 2026 obtiennent ces schémas après avoir réinitialisé leurs patients synthétiques depuis le tableau de bord ; une réinitialisation remplace toutes les modifications qui leur ont été apportées.

```bash
curl -s https://platform.anpheros.com/v1/patients/$PATIENT/patterns?window_days=180 \
  -H "Authorization: Bearer $ANPHEROS_KEY"
```

Avec le SDK TypeScript (`@anpheros/sdk` 0.2.0 ou version ultérieure) :

```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));
```

Avec le serveur MCP, demandez à votre agent : « Qu'est-ce qui a changé dans le dossier de ce patient au cours des six derniers mois ? » : il appelle `get_health_patterns`, et peut ensuite suivre avec `get_pattern_evidence`, `get_series` et `compare_periods`. `POST /v1/context` ajoute une section `patterns` pour les questions sur les changements et les relations, ou lorsque vous demandez le besoin `patterns`.

## Points de terminaison

| Point de terminaison | Ce qui est retourné |
|---|---|
| `GET /v1/patients/{id}/patterns` | un run : résultats, ce qui n'a pas pu être calculé et pourquoi, ce que le consentement a omis ; filtres `window_days` (30–730), `end`, `types`, `min_strength` |
| `GET /v1/patients/{id}/patterns/{finding_id}` | un résultat, recalculé pour la même fenêtre |
| `GET /v1/patients/{id}/patterns/{finding_id}/evidence` | chaque ressource de support, paginée |
| `GET /v1/patients/{id}/series?code=…` | une mesure sous forme d'une valeur par jour, avec couverture, lacunes et changements de source |
| `POST /v1/patients/{id}/patterns/compare` | une mesure sur deux périodes de votre choix |

## Lecture d'un constat

- `summary_text` : une phrase simple, sans risque d'être montrée ou citée.
- `strength` : `strong`, `moderate`, `weak` ou `not_tested`. Les constats faibles et non testés sont des descriptions, pas des preuves.
- `window`, `comparison_window` : les périodes analysées.
- `evidence` (jusqu'à 20, répartis sur la période) et `evidence_total` : les ressources derrière le constat, avec la version, la date, la valeur et le type d'auteur.
- `limitations` : codé, avec du texte. Affichez-les avec le constat.
- `review` : si un clinicien a examiné les seuils (`false` pour l'instant) et d'où ils proviennent.
- `method`, `engine_version`, `input_fingerprint` : les mêmes données, configuration et versions donnent le même résultat et le même identifiant.

## Règles à connaître

- **Le consentement d'abord.** Dans le cadre d'une autorisation OAuth, le moteur ne lit que ce que l'autorisation permet ; ce qu'il n'a pas pu lire est listé dans `omitted`, sans contenu.
- **Identifiants.** Les patients apparaissent avec l'identifiant par paire de votre projet ; les identifiants de recherche sont dérivés par projet. Lorsque l'enregistrement change, une découverte obtient un nouvel identifiant et l'ancien renvoie 404.
- **Heure.** Lorsque l'heure d'une lecture porte un décalage explicite (`2026-10-16T00:30:00+03:00`), elle est comptée dans le jour propre à la personne ; les heures en UTC (`Z`) ou sans décalage restent dans le jour UTC. Chaque découverte indique lequel dans `time_basis` (`record_offsets`, `partly_local` ou `local_time_unknown`). Les jours locaux sont utilisés sur les enregistrements sandbox et de production ; les modèles d'heure de la journée ne sont pas encore calculés.
- **Omis.** Les valeurs écrites par l'IA, les résultats marqués comme "saisie erronée" et les dates connues uniquement au mois ne sont pas utilisées et sont comptabilisées.
- **Limites.** 30 exécutions de modèles par minute par identifiant, en plus des 600 requêtes par minute habituelles.

## Foire aux questions

### Utilise-t-il un modèle linguistique ?
Non. Chaque nombre provient de méthodes statistiques fixes et versionnées. Tout modèle, hébergé ou local, peut lire les résultats.

### Pourquoi un changement clair dans mes données est-il marqué comme faible ?
Parce que les preuves ne survivent pas à la correction pour tous les tests de l'exécution, que la série est courte ou bruitée, ou que le changement est inférieur au seuil pour cette mesure. La découverte décrit toujours ce que le dossier indique.

### Fonctionne-t-il sur les dossiers de production ?
Oui, à partir du 16 octobre 2026, mais uniquement sous le consentement OAuth d'un patient qui inclut l'autorisation séparée `anpheros/patterns`, qui s'affiche sur sa propre ligne dans l'écran de consentement. Demandez le scope à côté de vos scopes `patient/…` ; une autorisation sans celui-ci, et toute clé API de production, renvoie une erreur 403.

## Liens connexes

- [Serveur MCP FHIR pour agents IA](https://developers.anpheros.com/fr/guides/mcp)
- [Applications LLM et données de santé](https://developers.anpheros.com/fr/guides/llm-healthcare-data)
- [Agents IA et données médicales](https://developers.anpheros.com/fr/guides/ai-agents-medical-data)
- [API de santé avec consentement du patient](https://developers.anpheros.com/fr/guides/healthcare-api-patient-consent)
