Flusso G — Annullamento referto già pubblicato su T4MED¶
Operazione: PUT /DocumentReference/{id}
Flusso: G — grepoServices → gt4medServices → T4MED
Contesto¶
Il Flusso G si applica quando un referto già pubblicato su T4MED (tramite Flusso E o Flusso F) deve essere revocato — ad esempio a seguito di un annullamento richiesto dal medico entro la finestra di tempo disponibile dopo la firma (vedi 05-vincoli-e-eccezioni.md).
A differenza dei Flussi E/F (Bundle transaction con POST), l'annullamento si esegue con un PUT sul DocumentReference originale, impostando status = "entered-in-error".
Richiede il T4MedDocumentId del DocumentReference da annullare. Come chiarito in Flusso E — "Relazione tra gli identificativi", questo id non è derivabile dallo UniqueDocumentId del documento da annullare: è il valore genuinamente assegnato da T4MED e già acquisito da gt4medServices dalla response al momento della pubblicazione originale (Flusso E o Flusso F) — non richiede quindi una nuova chiamata dedicata a T4MED, ma nemmeno un calcolo a partire da altri campi.
L'attachment referenzia il Binary già esistente tramite il T4MedBinaryId (Binary/<T4MedBinaryId-originale>), anch'esso genuinamente assegnato da T4MED, non derivabile, e conservato da gt4medServices al momento della pubblicazione originale.
document-version viene comunque incrementato (> 1) e riportato anche in questo messaggio, per uniformità con gli altri scenari, sebbene non sia strettamente necessario per l'annullamento.
Dati del caso di esempio¶
| Campo | Valore |
|---|---|
| T4MED Appointment ID | T00450 |
| Codice fiscale (= T4MED Patient ID) | RSVDMN11A41H620X |
| Paziente | ROSAVIOLA DALMINA (nome di fantasia) |
| UniqueDocumentId (documento da annullare) | urn:uuid:e7c3f91b-8a42-4d5e-9f16-3b8c7a2e5d41 |
| T4MedDocumentId (documento originale) | DOC-T4MED-000123 (acquisito dalla response del Flusso E, non derivato dallo UniqueDocumentId) |
| T4MedBinaryId (documento originale) | BIN-T4MED-000123 (acquisito dalla response del Flusso E) |
| Codice Azione SINED | CAD |
Conformità allo standard FHIR R4¶
Per il Flusso G la specifica T4MED e lo standard FHIR R4 coincidono: PUT /DocumentReference/{id} con sostituzione completa della risorsa e status = "entered-in-error" è il meccanismo standard FHIR R4 per marcare una risorsa come erroneamente pubblicata.
Per il formato dell'identificativo (DocumentReference.identifier) e il limite di lunghezza, vedi le sezioni corrispondenti nel Flusso E — si applicano invariati anche al Flusso G.
Endpoint e autenticazione¶
PUT https://biocaretest.evisus.it/api/fhir/DocumentReference/DOC-T4MED-000123
Content-Type: application/fhir+json
X-API-Key: <chiave>
Endpoint di TEST. In PROD:
https://biocaresuite.evisus.it/api/fhir. Autenticazione tramite header customX-API-Key.
Referto annullativo¶
REQUEST¶
PUT https://biocaretest.evisus.it/api/fhir/DocumentReference/DOC-T4MED-000123
Content-Type: application/fhir+json
X-API-Key: <chiave>
{
"resourceType": "DocumentReference",
"id": "DOC-T4MED-000123",
"status": "entered-in-error",
"identifier": [
{
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:e7c3f91b-8a42-4d5e-9f16-3b8c7a2e5d41"
}
],
"type": {
"coding": [
{
"system": "http://loinc.org",
"code": "11488-4",
"display": "Consult note"
}
]
},
"subject": {
"reference": "Patient/RSVDMN11A41H620X",
"display": "ROSAVIOLA DALMINA"
},
"date": "2026-06-03T11:00:00+02:00",
"securityLabel": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-Confidentiality",
"code": "R",
"display": "restricted"
}
]
}
],
"extension": [
{
"url": "http://t4med.it/fhir/StructureDefinition/patient-visibility-authorized",
"valueCode": "S"
},
{
"url": "http://t4med.it/fhir/StructureDefinition/ticket-payment-status",
"valueCode": "P"
},
{
"url": "http://t4med.it/fhir/StructureDefinition/document-version",
"valueInteger": 2
}
],
"content": [
{
"attachment": {
"contentType": "application/pdf",
"url": "Binary/BIN-T4MED-000123"
}
}
],
"context": {
"related": [
{
"reference": "Appointment/T00450"
}
]
}
}
RESPONSE ATTESA¶
{
"resourceType": "DocumentReference",
"id": "DOC-T4MED-000123",
"status": "entered-in-error",
"...": "(resto della risorsa invariato)"
}
Azione gt4medServices dopo la risposta:
- Aggiornare lo stato interno del documento come annullato, in modo coerente con l'annullamento già effettuato lato REPO/FSE.
Nota — Aggiornamento dei soli metadati (stesso meccanismo, senza cambio di stato)¶
Il Flusso G riusa l'endpoint PUT /DocumentReference/{id}, che serve anche per un caso distinto dall'annullamento: l'aggiornamento di un metadato di riservatezza/visibilità (es. ticket-payment-status) senza variare il PDF, la versione, né lo status (che resta "current"). Questo scenario è documentato separatamente nel Flusso H, a cui si rimanda.
Response di fallimento¶
Per il formato generale e l'elenco completo degli scenari di errore vedi 06-response-failure.md.
DocumentReference originale non trovato
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "not-found",
"details": {
"text": "Nessuna risorsa DocumentReference trovata con id '<id-t4med-del-documento-originale>'"
},
"diagnostics": "PUT /DocumentReference/<id-t4med-del-documento-originale>"
}
]
}
Documento già annullato (status già entered-in-error)
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "conflict",
"details": {
"text": "Il DocumentReference '<id-t4med-del-documento-originale>' e' gia' nello stato 'entered-in-error'"
},
"diagnostics": "PUT /DocumentReference/<id-t4med-del-documento-originale>"
}
]
}
AZIONE gt4medServices:
- Su
404/409: non ritentare, segnalare il disallineamento per verifica (vedi Eccezione E2 in 05-vincoli-e-eccezioni.md) — il referto risulterà annullato su REPO/FSE ma non correttamente riflesso su T4MED.