Guide d’Implémentation FHIR – Pré-admission Hospitalière en Ligne
1.0.0-ballot - ballot France (la)

This page is part of the Guide d'Implémentation FHIR – Pré-admission Hospitalière en Ligne (v1.0.0-ballot: draft Ballot 1) based on FHIR (HL7® FHIR® Standard) R4. No current official version has been published yet. For a full list of available versions, see the Directory of published versions

Resource Profile: Fr Preadmission Consent Profile

Official URL: https://hl7.fr/ig/fhir/preadmission/StructureDefinition/preadmission-consent-fr Version: 1.0.0-ballot
Active as of 2026-10-21 Computable Name: PreadmissionConsentFr

Profil Consent pour les consentements lors de la préadmission

Consentements dans le cadre de la préadmission hospitalière

Les consentements relatifs à la préadmission hospitalière doivent être exprimés par des ressources Consent distinctes conformes à FHIR R4, chacune couvrant un aspect spécifique tel que la consultation du DMP, l’alimentation du DMP, le traitement des données personnelles (RGPD) ou le partage d’informations personnelles avec un autre logiciel (par exemple, un portail de préadmission pour contacter le patient par SMS ou e-mail). En raison des catégories différentes utilisées (57016-8 pour le RGPD et 59284-0 pour les autres consentements), les consentements RGPD doivent être séparés des autres consentements dans des ressources Consent distinctes. Il est recommandé d’utiliser une ressource Consent par type de consentement pour une clarté maximale, bien que les consentements DMP et partage avec un logiciel puissent être regroupés dans une même ressource si nécessaire, car ils partagent la même catégorie (59284-0).

Chaque consentement est structuré par des provisions. Une provision définit l’action pour laquelle le patient consent ou refuse un traitement. Chaque provision comporte un code (définissant le contenu du consentement) et un purpose (précisant la finalité de l’action). Une ressource Consent contient généralement une seule provision pour représenter un consentement spécifique (par exemple, RGPD ou consultation DMP). Dans certains cas, une ressource peut contenir plusieurs provisions si elles partagent la même catégorie (par exemple, consultation et alimentation du DMP).

Définition des champs scope et category

Les champs scope et category aident à classifier le consentement de façon uniforme :

  • scope :
    • scope.coding.system : http://terminology.hl7.org/CodeSystem/consentscope
    • scope.coding.code : patient-privacy
      Cela indique que le consentement concerne la confidentialité des informations du patient.
  • category :
    • category.coding.system : http://loinc.org
    • category.coding.code :
      • 59284-0 (Consent Document) pour les consentements liés à l’alimentation du DMP, la consultation du DMP, et le partage avec un logiciel.
      • 57016-8 (Privacy Policy Acknowledgment Document) pour le consentement RGPD.
        Ces codes LOINC standardisés identifient le type de document de consentement. En raison de ces catégories différentes, une ressource Consent ne peut pas combiner le RGPD avec les autres consentements ; ils doivent être séparés en ressources distinctes.

Ces valeurs sont appliquées systématiquement afin d’assurer une classification conforme aux standards d’interopérabilité FHIR R4.

Types de consentements et leurs champs

Recueil des consentements liés à Mon Espace Santé

Le recueil des consentements des patients est défini conformément aux dispositions de l’article R. 1111-46 du Code de la santé publique, tel que précisé dans l’annexe 4 disponible sur Légifrance :
https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000048368264

Ce dispositif encadre les conditions de recueil, de conservation et de traçabilité du consentement des personnes concernées, afin de garantir le respect de leurs droits en matière d’information, de confidentialité et de protection des données de santé.

Le recueil du consentement doit être effectué à chaque nouvel épisode de soin, afin de s’assurer que le patient est pleinement informé et consentant pour chaque prise en charge.

Consentement pour la consultation du DMP

  • Objectif : Permettre au patient de donner ou de refuser son consentement pour la consultation de son Dossier Médical Partagé (DMP).
  • Ressource dédiée : Une ressource Consent distincte avec category 59284-0.
  • Provisions :
    • Code : access (indiquant l’accès aux données du DMP, issu du CodeSystem http://terminology.hl7.org/CodeSystem/consentaction).
    • Purpose : TREAT
      (Ce code, issu du ValueSet http://hl7.org/fhir/ValueSet/v3-PurposeOfUse, signale que l’accès au DMP a pour finalité la prise en charge clinique.)
    • Validation :
      • permit si le consentement est donné.
      • deny en cas de refus.
    • Cas d’absence de consentement explicite :
      En l’absence d’une réponse claire (ni consentement ni refus), le champ provision.type est laissé vide pour indiquer l’absence de consentement explicite.

Consentement pour l’alimentation du DMP

  • Objectif : Permettre au patient de consentir ou refuser l’alimentation (mise à jour) de son DMP.
  • Ressource dédiée : Une ressource Consent distincte avec category 59284-0, ou combinée avec la consultation DMP ou le partage avec un logiciel si plusieurs provisions sont nécessaires.
  • Provisions :
    • Code : collect (indiquant la collecte de données pour le DMP, issu du CodeSystem http://terminology.hl7.org/CodeSystem/consentaction).
    • Purpose : TREAT
      (Ce code précise que l’alimentation du DMP s’inscrit dans la prise en charge clinique.)
    • Validation :
      • permit en cas d’accord.
      • deny en cas de refus.
    • Cas d’absence de position explicite :
      En l’absence d’une réponse claire (ni consentement ni refus), le champ provision.type est laissé vide pour indiquer l’absence de consentement explicite.

Consentement au RGPD

  • Objectif : Permettre au patient de consentir ou refuser le traitement de ses données personnelles dans le cadre du RGPD.
  • Ressource dédiée : Une ressource Consent distincte avec category 57016-8, séparée des autres consentements en raison de la catégorie différente.
  • Provisions :
    • Code : collect (indiquant la collecte de données personnelles, issu du CodeSystem http://terminology.hl7.org/CodeSystem/consentaction).
    • Purpose : PATREQ
      (Ce code, issu du ValueSet http://hl7.org/fhir/ValueSet/v3-PurposeOfUse, indique que le traitement des données repose sur une demande explicite du patient, conformément aux exigences du RGPD.)
    • Validation :
      • permit si le consentement est accordé.
      • deny en cas de refus.

Consentement pour le partage des informations personnelles avec un autre logiciel

  • Objectif : Permettre au patient de consentir ou refuser le partage de ses informations personnelles (par exemple, numéro de téléphone ou adresse e-mail) avec un logiciel tiers pour des communications directes, telles que l’envoi de SMS ou d’e-mails (par exemple, rappels de rendez-vous ou informations administratives).
  • Ressource dédiée : Une ressource Consent distincte avec category 59284-0, ou combinée avec les consentements DMP si plusieurs provisions sont nécessaires.
  • Provisions :
    • Code : disclose (indiquant la divulgation d’informations à un tiers, issu du CodeSystem http://terminology.hl7.org/CodeSystem/consentaction).
    • Purpose : PATREQ
      (Ce code, issu du ValueSet http://hl7.org/fhir/ValueSet/v3-PurposeOfUse, indique que le partage d’informations est effectué à la demande explicite du patient pour permettre des communications directes.)
    • Validation :
      • permit en cas d’autorisation.
      • deny en cas de refus.

Cas particulier : consentements DMP non recueillis

Dans certains cas, le consentement pour la consultation ou l’alimentation du DMP peut ne pas être explicitement exprimé (ni acceptation, ni refus clairement indiqué). Dans ce contexte, il est recommandé de :

  • Créer une ressource Consent pour documenter l’absence de consentement explicite, avec category 59284-0.
  • Laisser le champ provision.type vide (non défini) pour indiquer qu’aucune décision formelle n’a été exprimée.

Cette approche permet de garantir une traçabilité précise et de distinguer un refus explicite d’une absence de réponse.

Résumé des champs à renseigner pour chaque consentement

Consentement Category Code Provision Code Purpose Type de provision
Consultation du DMP 59284-0 access TREAT permit, deny ou vide
Alimentation du DMP 59284-0 collect TREAT permit, deny ou vide
RGPD 57016-8 collect PATREQ permit ou deny
Partage des informations personnelles 59284-0 disclose PATREQ permit ou deny

Dans le cadre de la préadmission hospitalière, nous utilisons des codes issus du ValueSet http://hl7.org/fhir/ValueSet/v3-PurposeOfUse pour préciser la finalité des provisions dans la ressource Consent. Les choix retenus sont :

  • TREAT pour la consultation et l’alimentation du DMP
    (Indiquant que le consentement soutient la prise en charge clinique.)
  • PATREQ pour le traitement des données personnelles (RGPD) et le partage d’informations personnelles avec un logiciel tiers
    (Indiquant que ces actions reposent sur une demande explicite du patient, conforme au RGPD ou aux préférences de communication du patient.)

Pour récupérer les ressources Consent associées à un rendez-vous (Appointment) ou à un séjour (Encounter), il est recommandé d’utiliser le champ Consent.data. Ce champ permet de référencer directement les ressources concernées par le consentement.

Exemple de requête GET : récupérer les consentements liés à un rendez-vous (Appointment) :
GET [base]/Consent?data=Appointment/5678
Cette requête retourne tous les consentments associées au rendez-vous d’ID 5678.

Exemple de requête GET : récupérer les consentements liés à un séjour (Encounter) : GET [base]/Consent?data=Encounter/9876 Cette requête retourne tous les consentments associées à l’encounter d’ID 9876.

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description Differentials, Snapshots, and other representations.

Terminology Bindings

Path Status Usage ValueSet Version Source
Consent.status Base required ConsentState 📍4.0.1 FHIR Std.
Consent.scope Base extensible Consent Scope Codes 📍4.0.1 FHIR Std.
Consent.category Base extensible Consent Category Codes 📍4.0.1 FHIR Std.
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG

Constraints

Id Grade Path(s) Description Expression
dom-2 error Consent If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Consent If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Consent If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Consent If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Consent A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
ppc-1 error Consent Either a Policy or PolicyRule policy.exists() or policyRule.exists()
ppc-2 error Consent IF Scope=privacy, there must be a patient patient.exists() or scope.coding.where(system='something' and code='patient-privacy').exists().not()
ppc-3 error Consent IF Scope=research, there must be a patient patient.exists() or scope.coding.where(system='something' and code='research').exists().not()
ppc-4 error Consent IF Scope=adr, there must be a patient patient.exists() or scope.coding.where(system='something' and code='adr').exists().not()
ppc-5 error Consent IF Scope=treatment, there must be a patient patient.exists() or scope.coding.where(system='something' and code='treatment').exists().not()

This structure is derived from Consent

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG

Terminology Bindings

Path Status Usage ValueSet Version Source
Consent.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Consent.status Base required ConsentState 📍4.0.1 FHIR Std.
Consent.scope Base extensible Consent Scope Codes 📍4.0.1 FHIR Std.
Consent.category Base extensible Consent Category Codes 📍4.0.1 FHIR Std.
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.policyRule Base extensible Consent PolicyRule Codes 📍4.0.1 FHIR Std.
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.actor.​role Base extensible SecurityRoleType 📍4.0.1 FHIR Std.
Consent.provision.action Base example Consent Action Codes 📍4.0.1 FHIR Std.
Consent.provision.securityLabel Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Consent.provision.purpose Base extensible PurposeOfUse 📦3.1.0 THO v7.4
Consent.provision.class Base extensible Consent Content Class 📍4.0.1 FHIR Std.
Consent.provision.code Base example Consent Content Codes 📍4.0.1 FHIR Std.
Consent.provision.data.​meaning Base required ConsentDataMeaning 📍4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​actor.role Base extensible SecurityRoleType 📍4.0.1 FHIR Std.
Consent.provision.provision.​action Base example Consent Action Codes 📍4.0.1 FHIR Std.
Consent.provision.provision.​securityLabel Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​class Base extensible Consent Content Class 📍4.0.1 FHIR Std.
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​data.meaning Base required ConsentDataMeaning 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Consent If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Consent If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Consent If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Consent If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Consent A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
ppc-1 error Consent Either a Policy or PolicyRule policy.exists() or policyRule.exists()
ppc-2 error Consent IF Scope=privacy, there must be a patient patient.exists() or scope.coding.where(system='something' and code='patient-privacy').exists().not()
ppc-3 error Consent IF Scope=research, there must be a patient patient.exists() or scope.coding.where(system='something' and code='research').exists().not()
ppc-4 error Consent IF Scope=adr, there must be a patient patient.exists() or scope.coding.where(system='something' and code='adr').exists().not()
ppc-5 error Consent IF Scope=treatment, there must be a patient patient.exists() or scope.coding.where(system='something' and code='treatment').exists().not()

This structure is derived from Consent

Summary

Mandatory: 4 elements(2 nested mandatory elements)
Fixed: 1 element

Structures

This structure refers to these other structures:

Key Elements View

Terminology Bindings

Path Status Usage ValueSet Version Source
Consent.status Base required ConsentState 📍4.0.1 FHIR Std.
Consent.scope Base extensible Consent Scope Codes 📍4.0.1 FHIR Std.
Consent.category Base extensible Consent Category Codes 📍4.0.1 FHIR Std.
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG

Constraints

Id Grade Path(s) Description Expression
dom-2 error Consent If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Consent If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Consent If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Consent If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Consent A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
ppc-1 error Consent Either a Policy or PolicyRule policy.exists() or policyRule.exists()
ppc-2 error Consent IF Scope=privacy, there must be a patient patient.exists() or scope.coding.where(system='something' and code='patient-privacy').exists().not()
ppc-3 error Consent IF Scope=research, there must be a patient patient.exists() or scope.coding.where(system='something' and code='research').exists().not()
ppc-4 error Consent IF Scope=adr, there must be a patient patient.exists() or scope.coding.where(system='something' and code='adr').exists().not()
ppc-5 error Consent IF Scope=treatment, there must be a patient patient.exists() or scope.coding.where(system='something' and code='treatment').exists().not()

Differential View

This structure is derived from Consent

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG

Snapshot ViewView

Terminology Bindings

Path Status Usage ValueSet Version Source
Consent.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Consent.status Base required ConsentState 📍4.0.1 FHIR Std.
Consent.scope Base extensible Consent Scope Codes 📍4.0.1 FHIR Std.
Consent.category Base extensible Consent Category Codes 📍4.0.1 FHIR Std.
Consent.category.coding Base required preadmission-consent-category-vs 📦1.0.0-ballot This IG
Consent.policyRule Base extensible Consent PolicyRule Codes 📍4.0.1 FHIR Std.
Consent.provision.type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.actor.​role Base extensible SecurityRoleType 📍4.0.1 FHIR Std.
Consent.provision.action Base example Consent Action Codes 📍4.0.1 FHIR Std.
Consent.provision.securityLabel Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Consent.provision.purpose Base extensible PurposeOfUse 📦3.1.0 THO v7.4
Consent.provision.class Base extensible Consent Content Class 📍4.0.1 FHIR Std.
Consent.provision.code Base example Consent Content Codes 📍4.0.1 FHIR Std.
Consent.provision.data.​meaning Base required ConsentDataMeaning 📍4.0.1 FHIR Std.
Consent.provision.provision.​type Base required ConsentProvisionType 📦4.0.1 FHIR Std.
Consent.provision.provision.​actor.role Base extensible SecurityRoleType 📍4.0.1 FHIR Std.
Consent.provision.provision.​action Base example Consent Action Codes 📍4.0.1 FHIR Std.
Consent.provision.provision.​securityLabel Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Consent.provision.provision.​purpose Base required preadmission-consent-purpose-reason-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​class Base extensible Consent Content Class 📍4.0.1 FHIR Std.
Consent.provision.provision.​code Base required preadmission-consent-code-vs 📦1.0.0-ballot This IG
Consent.provision.provision.​data.meaning Base required ConsentDataMeaning 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Consent If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Consent If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Consent If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Consent If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Consent A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
ppc-1 error Consent Either a Policy or PolicyRule policy.exists() or policyRule.exists()
ppc-2 error Consent IF Scope=privacy, there must be a patient patient.exists() or scope.coding.where(system='something' and code='patient-privacy').exists().not()
ppc-3 error Consent IF Scope=research, there must be a patient patient.exists() or scope.coding.where(system='something' and code='research').exists().not()
ppc-4 error Consent IF Scope=adr, there must be a patient patient.exists() or scope.coding.where(system='something' and code='adr').exists().not()
ppc-5 error Consent IF Scope=treatment, there must be a patient patient.exists() or scope.coding.where(system='something' and code='treatment').exists().not()

This structure is derived from Consent

Summary

Mandatory: 4 elements(2 nested mandatory elements)
Fixed: 1 element

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron