Provenance — La genèse d'une ressource
Comment cette Observation est-elle arrivée dans le système ? Qui l'a signée ? À partir de quelle source ? Provenance documente la généalogie d'une ressource, aligné sur le standard W3C PROV.
Objet de la ressource
Provenance enregistre la généalogie d'une ou plusieurs ressources cibles : qui l'a créée, à partir de quelle source, dans quel contexte, avec quelle base juridique. C'est la pièce nécessaire pour :
- Signer numériquement une ressource (
signature). - Tracer l'import d'une donnée externe (ex : import d'un PDF dans un DocumentReference).
- Documenter une transformation (un Bundle FHIR généré à partir d'un message HL7 v2).
- Garantir l'intégrité longitudinale : qui, quand, comment, sur quoi.
Champs clés
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
target | Reference(Any)[] | 1..* | Obligatoire. Ressource(s) dont on documente la provenance. |
occurred[x] | Period | dateTime | 0..1 | Quand l'événement de création s'est produit. |
recorded | instant | 0..1 | Quand la Provenance a été consignée. |
policy | uri[] | 0..* | Politique appliquée (RGPD, BAA, consentement). |
location | Reference(Location) | 0..1 | Lieu de l'activité. |
authorization | CodeableReference[] | 0..* | Raison/base légale. |
activity | CodeableConcept | 0..1 | Type d'activité (CREATE, UPDATE, ATTEST…). |
basedOn | Reference(Any)[] | 0..* | Activité parente. |
patient | Reference(Patient) | 0..1 | Patient en contexte (R5). |
encounter | Reference(Encounter) | 0..1 | Encounter en contexte (R5). |
agent | BackboneElement[] | 1..* | Obligatoire. Acteurs ayant produit la ressource. |
agent.type | CodeableConcept | 0..1 | Type d'agent (author, verifier, performer…). |
agent.who | Reference | 1..1 | Identité. |
agent.onBehalfOf | Reference | 0..1 | Sur l'autorité de qui agit-il. |
entity | BackboneElement[] | 0..* | Entités utilisées (sources, dérivations). |
entity.role | code | 1..1 | derivation | revision | quotation | source | removal. |
entity.what | Reference | 1..1 | Référence à l'entité source/parente. |
signature | Signature[] | 0..* | Signature(s) numérique(s). |
Provenance vs AuditEvent
Deux ressources, deux usages :
- Provenance : Qui a produit cette ressource ? D'où vient-elle ? — créée 1 fois lors de la création (et amendements) de la ressource cible.
- AuditEvent : Qui a accédé à cette ressource ? Quand ? Avec succès ? — créée à chaque accès, lecture, modification.
En production, une ressource Patient typique aura : 1 Provenance (créée à l'admission) + N AuditEvent (un par lecture/écriture).
Exemple JSON
Provenance d'un consentement signé par le Dr Jones et vérifié par le patient, avec signature détachée XML :
{
"resourceType": "Provenance",
"id": "consent-signature",
"target": [{ "reference": "Consent/consent-example-signature" }],
"occurredDateTime": "2026-05-14T15:30:00+02:00",
"recorded": "2026-05-14T15:32:00.000Z",
"policy": ["http://acme.com/policies/Consent_2026"],
"location": { "reference": "Location/clinic-room-3" },
"authorization": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "TREAT",
"display": "treatment"
}]
}],
"activity": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation",
"code": "ATTEST",
"display": "attest"
}]
},
"agent": [{
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code": "author"
}]
},
"who": { "reference": "Practitioner/dr-jones" }
}, {
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code": "verifier"
}]
},
"who": { "reference": "Patient/example" }
}],
"entity": [{
"role": "source",
"what": { "reference": "DocumentReference/consent-form-template" }
}],
"signature": [{
"type": [{
"system": "urn:iso-astm:E1762-95:2013",
"code": "1.2.840.10065.1.12.1.1",
"display": "Author's Signature"
}],
"when": "2026-05-14T15:30:00+02:00",
"who": { "reference": "Practitioner/dr-jones" },
"sigFormat": "application/signature+xml",
"data": "Li4u"
}]
} Pièges courants
- Pas d'agent
author— toute Provenance DOIT identifier au moins un auteur. - Provenance manquante pour les imports externes — un PDF ou un message v2 transformé en FHIR DOIT être accompagné d'une Provenance qui pointe vers la source.
- Confondre
basedOnetentity—basedOnest une activité parente,entityest une donnée source. - Signature non détachée — préférer une signature détachée (XML-DSig ou JWS) référençant
targetpar hash plutôt qu'inline. - Provenance partagée entre ressources non liées — une Provenance peut référencer plusieurs
target, mais seulement si l'événement de création est unique pour toutes.
Ressources liées
- AuditEvent — qui a accédé (vs Provenance = qui a produit).
- Consent — base juridique souvent référencée.
- DocumentReference, Composition — cibles fréquentes d'une Provenance.
- Signature — type de donnée embarqué.