# Versionnement et obsolescence

> Comment les interfaces FHIR R4 et REST v1, les charges utiles des webhooks et les SDK évoluent, et comment les changements majeurs sont annoncés.

Source: https://developers.anpheros.com/fr/guides/versioning

- **FHIR R4** à l'adresse `/fhir/R4` et **REST v1** à l'adresse `/v1` sont des interfaces stables. Les changements additifs (nouveaux champs, nouveaux types de ressources, nouveaux points de terminaison, nouveaux types d'événements) sont déployés sans préavis ; les SDK et `docs/openapi.json` sont régénérés dans le même commit et un test échoue sinon.
- Les **changements majeurs** reçoivent un nouveau préfixe (`/v2`) et au moins **6 mois** de fonctionnement parallèle ; l'ancien préfixe répond avec un en-tête `Deprecation` et `Sunset` pendant cette période.
- Les **charges utiles des webhooks** portent un `type` ; les nouveaux types sont additifs. Un abonné à `*` doit ignorer les types inconnus.
- Les **SDK** suivent semver ; une version majeure de SDK peut abandonner un préfixe d'API obsolète.
- Les **corrections de sécurité** peuvent resserrer la validation (par exemple, les jeux de valeurs) sans incrémenter la version ; un tel resserrement est annoncé dans le journal des modifications avec un préavis de 30 jours, sauf s'il corrige une vulnérabilité active.

## Journal des modifications

### 14 octobre 2026 (ajout : image de marque de la page de consentement, authentification unique pour les équipes)

- Authentification unique pour les équipes : une organisation peut être liée à son fournisseur SAML ou OIDC et à ses domaines de messagerie
  (`PUT /admin/organizations/{id}/sso`, administrateurs de la plateforme), et l'authentification unique peut être requise pour
  les membres. `GET /admin/sso/discover?email=` (sans authentification) renvoie le fournisseur pour une adresse e-mail professionnelle. `OrganizationOut`
  gagne `sso_provider_id`, `sso_domains` et `sso_required`. Voir [Authentification unique pour votre équipe](https://developers.anpheros.com/fr/guides/team-sso).

- `PUT /admin/applications/{id}/branding` définit le logo d'une application (données au format URI PNG/JPEG/WebP, jusqu'à 64 Ko) et
  la couleur d'accentuation (contraste d'au moins 4,5:1 avec du texte blanc), affichés sur la page de consentement hébergée. `ApplicationOut`
  gagne `logo` et `brand_color`. Voir [Authentification et OAuth](auth-and-oauth.md#your-brand-on-the-consent-page).
- Page de tarification et [tarifs](https://developers.anpheros.com/fr/guides/pricing) : une note de bêta privée. L'ouverture en production se fait après vérification et signature
  d'un DPA, les plans sont facturés par e-mail, et les allocations ne sont pas encore appliquées automatiquement.

### 14 octobre 2026 (corrections de la forme des erreurs et du mappage des laboratoires)
- Importation de laboratoire : *Uree* / *Urea* est mappé à l'urée (`3091-6` ; `22664-7` en mmol/L) au lieu de l'azote uréique (`3094-0`), qui
  est conservé pour *BUN* / *Urea nitrogen* (`14937-7` en mmol/L). Les valeurs ne sont pas converties. Aucune donnée de production n'a utilisé l'ancien mappage.
- Importation de laboratoire : le LDL avec une méthode sur le rapport est mappé au LDL calculé (`13457-7`) ou au LDL direct (`18262-6`) ; sans méthode, il reste `2089-1`. *Direct* est maintenant un qualificateur, donc *Bilirubina directa* n'est plus mappé à la bilirubine totale
  (`1975-2`) ; il conserve le code du laboratoire. Aucune donnée de production n'a utilisé l'ancien mappage.
- Les points de terminaison et méthodes inconnus sous `/v1` répondent avec la forme d'erreur documentée (`404 not-found`, `405 not-supported`)
  au lieu de `{"detail": "Not Found"}` ; les paramètres de requête invalides et la limite de débit par IP sous `/v1` utilisent
  `{"error": …}` au lieu d'un `OperationOutcome` (inchangé sous `/fhir/R4`) ; un `500` inattendu sous `/v1` transporte
  `error.type = "exception"` (il transportait `error.code`).
- Importation de laboratoire : les résultats HL7 v2 avec un système de codage local ou non-LOINC conservent le code du laboratoire sous `urn:anpheros:lab-code`
  (précédemment `urn:hl7:<system>`, par exemple `urn:hl7:l`). Les résultats déjà stockés ne sont pas modifiés.
- Importation de laboratoire : les noms et synonymes LOINC en anglais sont reconnus (*Hemoglobin A1c*, *Glycated hemoglobin*, *HDL cholesterol*,
  *LDL cholesterol*, *Haemoglobin*) ; un *Glucose* seul est mappé au sérum ou au plasma (2345-7) comme *Glicemie*. Les noms avec un
  qualificateur que le concept n'a pas (*urine*, *non-HDL*…) ne sont plus mis en correspondance avec un test associé : avant cette modification,
  *HDL cholesterol* et *LDL cholesterol* envoyés sans code LOINC étaient stockés comme cholestérol total (2093-3).
- Importation de laboratoire : la réémission d'un rapport ne duplique plus les résultats lorsque le mappage LOINC change. Les nouveaux résultats portent un deuxième identifiant, `urn:anpheros:lab-import:v2`, construit à partir du rapport (ID du rapport, nom et code sur le rapport,
  date, valeur, unité) ; les identifiants existants restent inchangés et les résultats antérieurs sont reconnus par nom, date, valeur, unité
  et ID du rapport. Deux résultats avec des noms différents sur le rapport mais le même code LOINC, date et valeur (par exemple
  *Glucose* et *Glicemie*) ne sont plus fusionnés en un seul.

### 13 octobre 2026 (ajout, pas de changement de contrat)
- Le consentement est appliqué sur chaque vue dérivée (`/v1/context`, `/v1/patients/{id}/timeline`, portail, `$everything`) avec une
  règle partagée ; une section demandée mais non couverte apparaît dans le `omitted` du contexte.
- OpenAPI déclare maintenant `servers`, `securitySchemes` (`bearer`, `apiKey`, `oauth2`, `firebase`), `security` par opération
  et un schéma de réponse pour chaque opération ; les clients générés obtiennent des réponses typées.
- Chaque `401` transporte `WWW-Authenticate: Bearer`.
- Le CapabilityStatement annonce SMART (extension `oauth-uris`, service `SMART-on-FHIR`) et le guide d'implémentation IPS.
- Les redirections derrière le proxy conservent `https://`.
- `python-multipart` 0.0.20 → 0.0.32 ; `pip-audit` bloque la compilation en cas de vulnérabilités connues.
- Les URL de webhook doivent être HTTPS publiques : localhost (précédemment accepté dans le sandbox mais jamais délivré), les adresses privées et réservées, et les noms qui s'y résolvent sont refusés à l'enregistrement avec un 400 sur `url` ; les livraisons ne se connectent qu'aux adresses IP qu'elles viennent de vérifier (usurpation DNS).

## Application des règles de conformité (annoncé le 23 septembre 2026)

Les écritures qui manquent aux exigences du laboratoire IPS / HL7 Europe renvoient actuellement `201`/`200` avec un en-tête `Anpheros-Conformance`. Après une période d'observation (prévue : 60 à 90 jours à compter de cet avis), la plateforme passera en mode **blocage** : ces écritures répondront `422` avec un `OperationOutcome` listant chaque écart. Les intégrateurs qui ont besoin de plus de temps peuvent être exemptés par projet pendant la transition. Types de ressources ajoutés le 23 septembre 2026 : `Procedure`, `DiagnosticReport`, `CarePlan`, `FamilyMemberHistory`, `ServiceRequest`, `Goal` (additif).
