# Versioning e deprecazione

> Come cambiano le interfacce FHIR R4 e REST v1, i payload dei webhook e gli SDK, e come vengono annunciate le modifiche che introducono incompatibilità.

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

- **FHIR R4** all'indirizzo `/fhir/R4` e **REST v1** all'indirizzo `/v1` sono interfacce stabili. Le modifiche additive (nuovi campi, nuovi tipi di risorse, nuovi endpoint, nuovi tipi di eventi) vengono rilasciate senza preavviso; gli SDK e `docs/openapi.json` vengono rigenerati nello stesso commit e altrimenti un test fallisce.
- Le **modifiche che introducono incompatibilità** ottengono un nuovo prefisso (`/v2`) e almeno **6 mesi** di operatività parallela; il vecchio prefisso risponde con un header `Deprecation` e `Sunset` durante tale periodo.
- I **payload dei webhook** contengono un `type`; i nuovi tipi sono additivi. Un sottoscrittore di `*` deve ignorare i tipi sconosciuti.
- Gli **SDK** seguono semver; una versione principale dell'SDK può eliminare un prefisso API in disuso.
- Le **correzioni di sicurezza** possono rendere più rigorosa la validazione (ad esempio, value set) senza un aumento di versione; tale irrigidimento viene annunciato nel changelog con un preavviso di 30 giorni, a meno che non chiuda una vulnerabilità attiva.

## Changelog

### 14 Ottobre 2026 (aggiuntivo: branding pagina consenso, single sign-on team)

- Single sign-on per team: un'organizzazione può essere collegata al suo provider SAML o OIDC e ai suoi domini email
  (`PUT /admin/organizations/{id}/sso`, amministratori di piattaforma), e il single sign-on può essere richiesto per
  i membri. `GET /admin/sso/discover?email=` (nessuna autenticazione) restituisce il provider per un'email di lavoro. `OrganizationOut`
  ottiene `sso_provider_id`, `sso_domains` e `sso_required`. Vedi [Single sign-on per il tuo team](https://developers.anpheros.com/it/guides/team-sso).

- `PUT /admin/applications/{id}/branding` imposta il logo di un'applicazione (URI dati PNG/JPEG/WebP, fino a 64 KB) e
  il colore d'accento (contrasto almeno 4.5:1 con testo bianco), mostrato sulla pagina di consenso ospitata. `ApplicationOut`
  ottiene `logo` e `brand_color`. Vedi [Autenticazione e OAuth](auth-and-oauth.md#your-brand-on-the-consent-page).
- Pagina prezzi e [prezzi](https://developers.anpheros.com/it/guides/pricing): una nota di beta privata. La produzione apre dopo la verifica e un DPA firmato,
  i piani vengono fatturati via email e gli stanziamenti non sono ancora applicati automaticamente.

### 14 Ottobre 2026 (correzioni forma errore e mappatura laboratorio)
- Importazione laboratorio: *Uree* / *Urea* viene mappato a urea (`3091-6`; `22664-7` in mmol/L) invece che a urea nitrogen (`3094-0`), che
  viene mantenuto per *BUN* / *Urea nitrogen* (`14937-7` in mmol/L). I valori non vengono convertiti. Nessun dato di produzione ha utilizzato la vecchia mappatura.
- Importazione laboratorio: LDL con un metodo sul report viene mappato a LDL calcolato (`13457-7`) o LDL diretto (`18262-6`); senza un
  metodo rimane `2089-1`. *Direct* è ora un qualificatore, quindi *Bilirubina directa* non viene più mappato a bilirubina totale
  (`1975-2`); mantiene il codice del laboratorio. Nessun dato di produzione ha utilizzato la vecchia mappatura.
- Endpoint e metodi sconosciuti sotto `/v1` rispondono nella forma di errore documentata (`404 not-found`, `405 not-supported`)
  invece di `{"detail": "Not Found"}`; parametri di query non validi e il limite di frequenza per IP sotto `/v1` utilizzano
  `{"error": …}` invece di un `OperationOutcome` (invariato sotto `/fhir/R4`); un `500` inatteso sotto `/v1` porta
  `error.type = "exception"` (portava `error.code`).
- Importazione laboratorio: risultati HL7 v2 con un sistema di codifica locale o non-LOINC mantengono il codice del laboratorio sotto `urn:anpheros:lab-code`
  (precedentemente `urn:hl7:<system>`, per esempio `urn:hl7:l`). I risultati già memorizzati non vengono modificati.
- Importazione laboratorio: i nomi e i sinonimi LOINC in inglese vengono riconosciuti (*Hemoglobin A1c*, *Glycated hemoglobin*, *HDL cholesterol*,
  *LDL cholesterol*, *Haemoglobin*); un *Glucose* semplice viene mappato a siero o plasma (2345-7) come *Glicemie*. Nomi con un
  qualificatore che il concetto non ha (*urine*, *non-HDL*…) non vengono più abbinati a un test correlato: prima di questa modifica
  *HDL cholesterol* e *LDL cholesterol* inviati senza un codice LOINC venivano memorizzati come colesterolo totale (2093-3).
- Importazione laboratorio: il reinvio di un report non duplica più i risultati quando la mappatura LOINC cambia. I nuovi risultati portano un secondo identificatore, `urn:anpheros:lab-import:v2`, costruito dal report (ID report, nome e codice sul report,
  data, valore, unità); gli identificatori esistenti rimangono invariati e i risultati precedenti vengono riconosciuti per nome, data, valore, unità
  e ID report. Due risultati con nomi diversi sul report ma lo stesso codice LOINC, data e valore (ad esempio
  *Glucose* e *Glicemie*) non vengono più uniti in uno solo.

### 13 Ottobre 2026 (aggiuntivo, nessuna modifica contratto)
- Il consenso viene applicato su ogni vista derivata (`/v1/context`, `/v1/patients/{id}/timeline`, portale, `$everything`) con una
  regola condivisa; una sezione richiesta ma non coperta appare nel `omitted` del contesto.
- OpenAPI dichiara ora `servers`, `securitySchemes` (`bearer`, `apiKey`, `oauth2`, `firebase`), `security` per operazione
  e uno schema di risposta per ogni operazione; i client generati ottengono risposte tipizzate.
- Ogni `401` porta `WWW-Authenticate: Bearer`.
- La CapabilityStatement pubblicizza SMART (estensione `oauth-uris`, servizio `SMART-on-FHIR`) e la guida all'implementazione IPS.
- I redirect dietro il proxy mantengono `https://`.
- `python-multipart` 0.0.20 → 0.0.32; `pip-audit` blocca la build su vulnerabilità note.
- Gli URL dei webhook devono essere HTTPS pubblici: localhost (precedentemente accettato nella sandbox ma mai consegnato), indirizzi privati e riservati, e nomi che risolvono a essi vengono rifiutati alla registrazione con 400 su `url`; le consegne si connettono solo agli indirizzi IP che hanno appena verificato (DNS rebinding).

## Applicazione della conformità (annunciato il 23 settembre 2026)

Le scritture che non rispettano i requisiti di laboratorio IPS / HL7 Europe attualmente restituiscono `201`/`200` con un header `Anpheros-Conformance`. Dopo un periodo di osservazione (previsto: 60-90 giorni da questo avviso) la piattaforma passerà alla modalità **blocco**: tali scritture risponderanno con `422` e un `OperationOutcome` che elenca ogni lacuna. Gli integratori che necessitano di più tempo possono essere esentati per progetto durante la transizione. Tipi di risorse aggiunti il 23 settembre 2026: `Procedure`, `DiagnosticReport`, `CarePlan`, `FamilyMemberHistory`, `ServiceRequest`, `Goal` (additivi).
