From dcd3c5f6865ab8571e12b6170c10c15a6fb29725 Mon Sep 17 00:00:00 2001 From: Ben Mustapha Date: Tue, 20 May 2025 16:13:11 +0200 Subject: [PATCH 1/3] Exemple de document FHIR : BIO-CR-BIO --- input/fsh/RessourcesFHIREntete/aliases.fsh | 11 +- input/fsh/exemple-document.fsh | 290 +++++++++++++++++++++ sushi-config.yaml | 7 +- 3 files changed, 306 insertions(+), 2 deletions(-) create mode 100644 input/fsh/exemple-document.fsh diff --git a/input/fsh/RessourcesFHIREntete/aliases.fsh b/input/fsh/RessourcesFHIREntete/aliases.fsh index f8d7dc2e2d..3698edc327 100644 --- a/input/fsh/RessourcesFHIREntete/aliases.fsh +++ b/input/fsh/RessourcesFHIREntete/aliases.fsh @@ -30,4 +30,13 @@ Alias: $TRE_R45-FonctionQualifiee = https://mos.esante.gouv.fr/NOS/TRE_R45-Fonct Alias: $TRE_R97-DroitExerciceCompl = https://mos.esante.gouv.fr/NOS/TRE_R97-DroitExerciceCompl/FHIR/TRE-R97-DroitExerciceCompl Alias: $TRE_G05-SousSectionTableauCNOP = https://mos.esante.gouv.fr/NOS/TRE_G05-SousSectionTableauCNOP/FHIR/TRE-G05-SousSectionTableauCNOP Alias: $TRE_R85-RolePriseCharge = https://mos.esante.gouv.fr/NOS/TRE_R85-RolePriseCharge/FHIR/TRE-R85-RolePriseCharge -Alias: $TRE_R04-TypeSavoirFaire = https://mos.esante.gouv.fr/NOS/TRE_R04-TypeSavoirFaire/FHIR/TRE-R04-TypeSavoirFaire \ No newline at end of file +Alias: $TRE_R04-TypeSavoirFaire = https://mos.esante.gouv.fr/NOS/TRE_R04-TypeSavoirFaire/FHIR/TRE-R04-TypeSavoirFaire + +// Code Systems +Alias: $LNC = http://loinc.org +Alias: $SCT = http://snomed.info/sct +Alias: $system = http://example.org/system +Alias: $v3-ActCode = http://terminology.hl7.org/CodeSystem/v3-ActCode + +//Value Sets +Alias: $consentscope = http://terminology.hl7.org/CodeSystem/consentscope \ No newline at end of file diff --git a/input/fsh/exemple-document.fsh b/input/fsh/exemple-document.fsh new file mode 100644 index 0000000000..fed042fdb0 --- /dev/null +++ b/input/fsh/exemple-document.fsh @@ -0,0 +1,290 @@ +Instance: clinical-document-bundle-BIO-CR-BIO +InstanceOf: Bundle +Description: "Document Bundle exemple FHIR du CR-BIO"Usage: #example +* meta.lastUpdated = "2025-05-07T13:28:17.000+00:00" +// Identifiant unique du document +* identifier.system = "urn:oid:1.2.250.1.213.1.1.1.55.12345.12" +* identifier.value = "2024.01" +// Document FHIR +* type = #document +// Date de création du bundle +* timestamp = "2025-05-07T13:28:17.000+00:00" + +* entry[0].fullUrl = "https://exemple.com/Composition/clinical-document-composition-BIO-CR-BIO" +* entry[=].resource = clinical-document-composition-BIO-CR-BIO +* entry[+].fullUrl = "https://exemple.com/Organization/custodianOrganization" +* entry[=].resource = custodianOrganization +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/fr-practitioner-role-exemple1" +* entry[=].resource = fr-practitioner-role-exemple1 +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/fr-practitioner-role-exemple2" +* entry[=].resource = fr-practitioner-role-exemple2 +* entry[+].fullUrl = "https://exemple.com/Patient/fr-patientExemple" +* entry[=].resource = fr-patientExemple +* entry[+].fullUrl = "https://exemple.com/Encounter/encounter-exemple" +* entry[=].resource = encounter-exemple +* entry[+].fullUrl = "https://exemple.com/ServiceRequest/service1" +* entry[=].resource = service1 +* entry[+].fullUrl = "https://exemple.com/Consent/consent1" +* entry[=].resource = consent1 + +Instance: clinical-document-composition-BIO-CR-BIO +InstanceOf: FrCompositionDocument +Description: "Composition exemple pour un CR de Biologie"Usage: #example +* meta.lastUpdated = "2024-05-07T13:28:17.000+00:00" +* language = #fr +* meta.profile = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/BIO-CR-BIO/2024.01" +// templeId à faire +* text.status = #additional +// Type de document +* type.coding[0].system = $LNC +* type.coding[0].code = #11502-2 +* type.coding[0].display = "Compte rendu du laboratoire [Recherche] Patient ; Document" + +* extension[R5-Composition-version].valueString = "1" +* text.div = "
+

Compte rendu d'examens biologiques

+

Practitioner: Dr. Marcel CAMPARINI

+

status: final

+

patient: DOMINIQUE MARIE-LOUISE PAT-TROIS

+

author: DR Marcel CAMPARINI / Laboratoire des charmes

+

encounter: ambulatoire (hors établissement), 2025-05-03 - 2024-05-07

+

confidentiality: N

" + + +/* // information-recipient-extension +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].system = "urn:oid:2.16.840.1.113883.5.90" +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].code = #PRCP +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].display = "primary information recipient" + +* extension[information-recipient].extension[party].valueReference = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" */ + + +* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" +* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].code = #INF +//* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" +* extension[InformantExtension].extension[party].valueReference = Reference(fr-patientExemple) + + +* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" +* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].code = #INF +//* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" +* extension[participant].extension[time].valuePeriod.start = "2025-06-12T10:00:00+01:00" +* extension[participant].extension[time].valuePeriod.end = "2025-06-12T14:00:00+01:00" + +* extension[ParticipantExtension].extension[party].valueReference = Reference(Practitioner/fr-practitioner-role-exemple2) + +* attester[legal_attester].mode = #legal +* attester[legal_attester].time = "2024-06-12T15:00:00+01:00" +* attester[legal_attester].party = Reference(fr-practitioner-role-exemple1) + +* attester[professional_attester].mode = #professional +* attester[professional_attester].time = "2024-06-12T14:30:00+01:00" +* attester[professional_attester].party = Reference(fr-practitioner-role-exemple1) + +* event[principalEvent].period.start = "2024-06-12T08:00:00+01:00" +* event[principalEvent].period.end = "2024-06-12T09:00:00+01:00" +* event[principalEvent].extension[perfomer].valueReference = Reference(fr-practitioner-role-exemple1) + +* identifier.value = "D52DE737-001D-4031-B571-0A0ED7C42300" +* status = #final + +* subject = Reference(fr-patientExemple) +* date = "2025-06-12T14:00:00+01:00" +* confidentiality = #N +* section[0].title = "Reason for visit Narrative" +* section[=].code = $LNC#29299-5 "Reason for visit Narrative" +* section[=].text.status = #additional +* section[=].text.div = "
\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n
Details\n\n
Acute Asthmatic attack. Was wheezing for days prior to admission.\n\n
\n\n
" + +* encounter = Reference(encounter-exemple) +* author = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" +* author.extension[time].valueDateTime = "2024-06-12T13:45:00+01:00" +* title = "Compte rendu d'examens biologiques" + +* relatesTo[+].code = #replaces +* relatesTo[=].targetIdentifier.type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" +* relatesTo[=].targetIdentifier.type.coding[0].code = #ACSN +* relatesTo[=].targetIdentifier.type.coding[0].display = "Accession ID" +* relatesTo[=].targetIdentifier.system = "urn:oid:1.2.250.1.213.1.4.10" +* relatesTo[=].targetIdentifier.value = "ABC123" + +* custodian = Reference(custodianOrganization) "Laboratoire des charmes" +* confidentiality = #N +/* * section[0].title = "Section vide" +* section[=].code = $LNC#29299-5 "Reason for visit Narrative" +* section[=].text.status = #additional +* section[=].text.div = "
\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n
Details\n\n
Acute Asthmatic attack. Was wheezing for days prior to admission.\n\n
\n\n
" + */ + +Instance: fr-patientExemple +InstanceOf: FrPatientINSDocument +Title: "Patient" +Usage: #inline +Description: "Patient" +* meta.profile = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/fr-patient-ins-document" +// Identifiant INS +* identifier[INS-NIR].use = #official +* identifier[INS-NIR].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[INS-NIR].type.coding[0].code = #INS-NIR +* identifier[INS-NIR].system = "urn:oid:1.2.250.1.213.1.4.8" +* identifier[INS-NIR].value = "123456789012244" + +// Données sociodémographiques +* gender = #female +* birthDate = "1979-03-28" +* deceasedBoolean = false + +// Nom officiel (de naissance) +* name[officialName].use = #official +* name[officialName].family = "PAT-TROIS" +* name[officialName].given = "DOMINIQUE MARIE-LOUISE" +* name[officialName].extension[birth-list-given-name].url = "https://hl7.fr/ig/fhir/core/StructureDefinition/fr-core-patient-birth-list-given-name" +* name[officialName].extension[birth-list-given-name].valueString = "DOMINIQUE MARIE-LOUISE" + +// Nom usuel +* name[usualName].use = #usual +* name[usualName].family = "PAT-TROIS" +* name[usualName].given = "DOMINIQUE MARIE-LOUISE" + +// Téléphones +* telecom[0].system = #phone +* telecom[0].value = "01 23 24 67 89" +* telecom[0].use = #home + +* telecom[1].system = #phone +* telecom[1].value = "01 99 88 77 66" +* telecom[1].use = #work +* telecom[1].rank = 1 + +* telecom[2].system = #phone +* telecom[2].value = "06 80 55 34 33" +* telecom[2].use = #mobile +* telecom[2].rank = 2 + +// Extension: Lieu de naissance +* extension[birthPlace].url = "http://hl7.org/fhir/StructureDefinition/patient-birthPlace" +* extension[birthPlace].valueAddress.city = "Ambléon" +* extension[birthPlace].valueAddress.extension[fr-core-address-insee-code].url = "https://hl7.fr/ig/fhir/core/StructureDefinition/fr-core-address-insee-code" +* extension[birthPlace].valueAddress.extension[fr-core-address-insee-code].valueCoding.system = "https://mos.esante.gouv.fr/NOS/TRE_R13-Commune/FHIR/TRE-R13-Commune" +* extension[birthPlace].valueAddress.extension[fr-core-address-insee-code].valueCoding.code = #01006 + +// Extension: Fiabilité de l'identité +* extension[identityReliability].url = "https://hl7.fr/ig/fhir/core/StructureDefinition/fr-core-identity-reliability" +* extension[identityReliability].extension[identityStatus].url = "identityStatus" +* extension[identityReliability].extension[identityStatus].valueCoding.system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0445" +* extension[identityReliability].extension[identityStatus].valueCoding.code = #VALI + +// Contact 1 +* contact[0].name.text = "Sophie NESSI" +* contact[0].relationship[RelationType].coding[0].system = "https://mos.esante.gouv.fr/NOS/JDV_J11-RelationPatient-CISIS/FHIR/JDV-J11-RelationPatient-CISIS" +* contact[0].relationship[RelationType].coding[0].code = #SIS +* contact[0].relationship[RelationType].coding[0].display = "Soeur" +* contact[0].relationship[Role].coding[0].system = "https://interop.esante.gouv.fr/ig/document/core/ValueSet/fr-doc-vs-patient-contact-role" +* contact[0].relationship[Role].coding[0].code = #ECON +* contact[0].relationship[Role].coding[0].display = "Personne à prévenir en cas d'urgence" + +* contact[0].name[0].family = "NESSI" +* contact[0].address.text = "12 rue des Lilas, 75012 Paris" + +// Contact 2 +* contact[1].name.text = "Sophie NESSI" +* contact[1].relationship[RelationType].coding[0].system = "https://mos.esante.gouv.fr/NOS/JDV_J11-RelationPatient-CISIS/FHIR/JDV-J11-RelationPatient-CISIS" +* contact[1].relationship[RelationType].coding[0].code = #SIS +* contact[1].relationship[RelationType].coding[0].display = "Soeur" +* contact[1].relationship[Role].coding[0].system = "https://interop.esante.gouv.fr/ig/document/core/ValueSet/fr-doc-vs-patient-contact-role" +* contact[1].relationship[Role].coding[0].code = #NOK +* contact[1].relationship[Role].coding[0].display = "Personne de confiance" + +* contact[1].name[0].family = "NESSI" +* contact[1].address.text = "12 rue des Lilas, 75012 Paris" + + + +Instance: custodianOrganization +InstanceOf: FrOrganizationDocument +Description: "exemple custodian content"Usage: #example +* identifier.system = "urn:ietf:rfc:3986" +* identifier.value = "urn:uuid:2.16.840.1.113883.19.5" +* name = "Laboratoire des charmes" + +Instance: fr-practitioner-role-exemple1 +InstanceOf: FrPractitionerRoleDocument +Description: "exemple practitioner role content"Usage: #example +* meta.lastUpdated = "2013-05-05T16:13:03Z" +* identifier.system = "http://www.acme.org/practitioners" +* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference("Practitioner/practitioner-exemple1") +* code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" +* code[0].coding[0].code = #doctor + +Instance: fr-practitioner-role-exemple2 +InstanceOf: FrPractitionerRoleDocument +Description: "exemple practitioner role content"Usage: #example +* meta.lastUpdated = "2013-05-05T16:13:03Z" +* identifier.system = "http://www.acme.org/practitioners" +* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference("Practitioner/practitioner-exemple2") +* code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" +* code[0].coding[0].code = #doctor + +Instance: practitioner-exemple1 +InstanceOf: FrPractitionerDocument +Usage: #example +Title: "Dr Marcel CAMPARINI" +* identifier[0].system = "http://identifiants.esante.gouv.fr" +* identifier[0].value = "123456789012345" +* identifier[0].type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" +* identifier[0].type.coding[0].code = #NPI +* identifier[0].type.coding[0].display = "Numéro du professionnel de santé" +* name[0].family = "CAMPARINI" +* name[0].given[0] = "Marcel" +* name[0].prefix[0] = "Dr" + +Instance: practitioner-exemple2 +InstanceOf: FrPractitionerDocument +Usage: #example +Title: "Dr MEDIOUNI Stéphane" +* identifier[0].system = "http://identifiants.esante.gouv.fr" +* identifier[0].value = "123456789012345" +* identifier[0].type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" +* identifier[0].type.coding[0].code = #NPI +* identifier[0].type.coding[0].display = "Numéro du professionnel de santé" +* name[0].family = "MEDIOUNI" +* name[0].given[0] = "Stéphane" +* name[0].prefix[0] = "Dr" + + +Instance: encounter-exemple +InstanceOf: Encounter +Description: "exemple encounter content"Usage: #example +* meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" +* identifier.value = "S100" +* status = #finished +* class = $v3-ActCode#AMB "ambulatoire (hors établissement)" +* type.text = "ambulatoire (hors établissement)" +* subject = Reference(fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* period.start = "2024-05-03T13:28:17.000+00:00" +* period.end = "2024-05-07T11:28:17.000+00:00" + + +Instance: service1 +InstanceOf: ServiceRequest +Description: "exemple service content" +Usage: #example +* meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" +* status = #active "Active" +* intent = #order +* subject = Reference(fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* code.text = "Discharge to home" + +Instance: consent1 +InstanceOf: Consent +Description: "exemple consent content" +Usage: #example +* meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" +* status = #active "Active" +* patient = Reference(Patient/fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* scope = $consentscope#patient-privacy +* category = $LNC#59284-0 +//* sourceAttachment.title = "The terms of the consent in lawyer speak." +* policyRule = $v3-ActCode#OPTIN \ No newline at end of file diff --git a/sushi-config.yaml b/sushi-config.yaml index b9a8b93a04..5d93492aa7 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -185,4 +185,9 @@ groups: name: Extensions FHIR resources: - StructureDefinition/fr-author-time - \ No newline at end of file + + Exemple de document FHIR: + name: Exemple de BIO-CR-BIO + description: Exemples pour montrer un document clinique. + resources: + - clinical-document-bundle-BIO-CR-BIO \ No newline at end of file From 237dc49ab55f8cd5c8462089d7f5d57deb0be89a Mon Sep 17 00:00:00 2001 From: Ben Mustapha Date: Wed, 21 May 2025 11:15:18 +0200 Subject: [PATCH 2/3] Modification des extensions de l'exemple --- input/fsh/exemple-document.fsh | 44 +++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/input/fsh/exemple-document.fsh b/input/fsh/exemple-document.fsh index fed042fdb0..509117fea5 100644 --- a/input/fsh/exemple-document.fsh +++ b/input/fsh/exemple-document.fsh @@ -59,19 +59,19 @@ Description: "Composition exemple pour un CR de Biologie"Usage: #example * extension[information-recipient].extension[party].valueReference = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" */ -* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" -* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].code = #INF +* extension[informant].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" +* extension[informant].extension[type].valueCodeableConcept.coding[0].code = #INF //* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" -* extension[InformantExtension].extension[party].valueReference = Reference(fr-patientExemple) +* extension[informant].extension[party].valueReference = Reference(fr-patientExemple) -* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" -* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].code = #INF +* extension[participant].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" +* extension[participant].extension[type].valueCodeableConcept.coding[0].code = #INF //* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" * extension[participant].extension[time].valuePeriod.start = "2025-06-12T10:00:00+01:00" * extension[participant].extension[time].valuePeriod.end = "2025-06-12T14:00:00+01:00" -* extension[ParticipantExtension].extension[party].valueReference = Reference(Practitioner/fr-practitioner-role-exemple2) +* extension[participant].extension[party].valueReference = Reference(Practitioner/fr-practitioner-role-exemple2) * attester[legal_attester].mode = #legal * attester[legal_attester].time = "2024-06-12T15:00:00+01:00" @@ -91,14 +91,10 @@ Description: "Composition exemple pour un CR de Biologie"Usage: #example * subject = Reference(fr-patientExemple) * date = "2025-06-12T14:00:00+01:00" * confidentiality = #N -* section[0].title = "Reason for visit Narrative" -* section[=].code = $LNC#29299-5 "Reason for visit Narrative" -* section[=].text.status = #additional -* section[=].text.div = "
\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n
Details\n\n
Acute Asthmatic attack. Was wheezing for days prior to admission.\n\n
\n\n
" * encounter = Reference(encounter-exemple) * author = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" -* author.extension[time].valueDateTime = "2024-06-12T13:45:00+01:00" +* author.extension[time].valueDateTime = "2024-01-04T13:45:00+01:00" * title = "Compte rendu d'examens biologiques" * relatesTo[+].code = #replaces @@ -109,12 +105,28 @@ Description: "Composition exemple pour un CR de Biologie"Usage: #example * relatesTo[=].targetIdentifier.value = "ABC123" * custodian = Reference(custodianOrganization) "Laboratoire des charmes" -* confidentiality = #N -/* * section[0].title = "Section vide" -* section[=].code = $LNC#29299-5 "Reason for visit Narrative" +* section[0].title = "Aucune donnée disponible" +* section[=].code = $LNC#29299-5 * section[=].text.status = #additional -* section[=].text.div = "
\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n
Details\n\n
Acute Asthmatic attack. Was wheezing for days prior to admission.\n\n
\n\n
" - */ +* section[=].text.div = " +
\n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n + \n\n +
Details\n\n +
Aucune donnée disponible (Section vide)\n\n +
\n\n +
" +* section[=].emptyReason = http://terminology.hl7.org/CodeSystem/list-empty-reason#notasked "Not Asked" + Instance: fr-patientExemple InstanceOf: FrPatientINSDocument From 28951dd48b9717696a7bbf720e56df8a1d5c6298 Mon Sep 17 00:00:00 2001 From: Ben Mustapha Date: Tue, 27 May 2025 14:23:06 +0200 Subject: [PATCH 3/3] commit de l'exemple de document BIO-CR-BIO --- .gitignore | 4 + fhir-ig-publisher | 1 + ig.ini | 1 + .../FrModelesLogiquesMetierEntete.fsh | 2 +- .../ModeleLogiqueMetierEntete/FrPatient.fsh | 2 +- .../profiles/FrDocumentReference.fsh | 6 + .../profils/FrCompositionDocument.fsh | 8 +- input/fsh/exemple-document.fsh | 512 ++++++++++++++---- sushi-config.yaml | 12 +- 9 files changed, 435 insertions(+), 113 deletions(-) create mode 160000 fhir-ig-publisher create mode 100644 input/fsh/RessourcesFHIRCorps/profiles/FrDocumentReference.fsh diff --git a/.gitignore b/.gitignore index ca835e7fba..0430264e0f 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,7 @@ Thumbs.db .settings/* target/* .mvn/wrapper/maven-wrapper.jar + + + +fhir-ig-publisher/ \ No newline at end of file diff --git a/fhir-ig-publisher b/fhir-ig-publisher new file mode 160000 index 0000000000..3408a3718e --- /dev/null +++ b/fhir-ig-publisher @@ -0,0 +1 @@ +Subproject commit 3408a3718e7af9fe66f30d8bedd24e799bee4b0b diff --git a/ig.ini b/ig.ini index 9ddb4d876c..1967d1099a 100644 --- a/ig.ini +++ b/ig.ini @@ -49,3 +49,4 @@ examples: # http://build.fhir.org/ig/FHIR/ig-guidance +generateNarratives = true \ No newline at end of file diff --git a/input/fsh/ModeleLogiqueMetierEntete/FrModelesLogiquesMetierEntete.fsh b/input/fsh/ModeleLogiqueMetierEntete/FrModelesLogiquesMetierEntete.fsh index 7456e0f0f0..424fff1078 100644 --- a/input/fsh/ModeleLogiqueMetierEntete/FrModelesLogiquesMetierEntete.fsh +++ b/input/fsh/ModeleLogiqueMetierEntete/FrModelesLogiquesMetierEntete.fsh @@ -13,7 +13,7 @@ Description: "Eléments de l'entête d'un document contenant les informations g * identifiantLotDeVersionsDocument 1..1 Identifier "Identifiant du lot de versions du même document." * versionDocument 1..1 string "Numéro de version du document." * statutDocument 1..1 code "Statut du document." -* patient 1..1 Patient "Patient / Usager." +* patient 1..1 PatientMetier "Patient / Usager." * auteur 1..* Auteur "Auteur du document." * operateurSaisie 0..1 OperateurSaisie "Opérateur de saisie." * informateur 0..* Informateur "Informateur ayant fourni des informations utiles à la production du document." diff --git a/input/fsh/ModeleLogiqueMetierEntete/FrPatient.fsh b/input/fsh/ModeleLogiqueMetierEntete/FrPatient.fsh index a9f3b3654e..30722a247a 100644 --- a/input/fsh/ModeleLogiqueMetierEntete/FrPatient.fsh +++ b/input/fsh/ModeleLogiqueMetierEntete/FrPatient.fsh @@ -1,5 +1,5 @@ // Logical Model : patient -Logical: Patient +Logical: PatientMetier Title: "Modèle métier - Patient / Usager" Description: """Patient/Usager concerné par le document.""" Characteristics: #can-be-target diff --git a/input/fsh/RessourcesFHIRCorps/profiles/FrDocumentReference.fsh b/input/fsh/RessourcesFHIRCorps/profiles/FrDocumentReference.fsh new file mode 100644 index 0000000000..c3429bbf37 --- /dev/null +++ b/input/fsh/RessourcesFHIRCorps/profiles/FrDocumentReference.fsh @@ -0,0 +1,6 @@ +// StructureDefinition for encounterParticipant +Profile: FrDocumentReference +Parent: http://hl7.org/fhir/StructureDefinition/DocumentReference +Id: fr-document-reference +Title: "Fr Document Reference" +Description: "DocumentReference restreint pour les documents PDF." \ No newline at end of file diff --git a/input/fsh/RessourcesFHIREntete/profils/FrCompositionDocument.fsh b/input/fsh/RessourcesFHIREntete/profils/FrCompositionDocument.fsh index 25d015aba0..b2f487cecc 100644 --- a/input/fsh/RessourcesFHIREntete/profils/FrCompositionDocument.fsh +++ b/input/fsh/RessourcesFHIREntete/profils/FrCompositionDocument.fsh @@ -94,7 +94,7 @@ Description: "Ce profil est utilisé pour représenter un document médical." * event 1..* * event.detail 0..1 * event.period ^short = "Date et heure de l’évènement documenté" -* event.extension contains fr-performer-event named perfomer 0..1 +* event.extension contains fr-performer-event named performer 0..1 // Slicing event : évènement documenté principal * event ^slicing.discriminator.type = #value @@ -105,8 +105,10 @@ Description: "Ce profil est utilisé pour représenter un document médical." * event[principalEvent] ^short = "Evènement documenté principal" * event[principalEvent].period 1..1 * event[principalEvent].detail 0..1 -* event[principalEvent].extension[perfomer] 1..1 -* event[principalEvent].extension[perfomer] ^short = "Exécutant de l'évènement documenté principal" +* event[principalEvent].extension[performer] 1..1 +* event[principalEvent].extension[performer] ^short = "Exécutant de l'évènement documenté principal" + +//* event contains secondaryEvent 0..* * relatesTo 1..* * relatesTo ^short = "Document de référence" diff --git a/input/fsh/exemple-document.fsh b/input/fsh/exemple-document.fsh index 509117fea5..092693036c 100644 --- a/input/fsh/exemple-document.fsh +++ b/input/fsh/exemple-document.fsh @@ -1,6 +1,7 @@ Instance: clinical-document-bundle-BIO-CR-BIO InstanceOf: Bundle -Description: "Document Bundle exemple FHIR du CR-BIO"Usage: #example +Description: "Document Bundle exemple FHIR du CR-BIO" +Usage: #example * meta.lastUpdated = "2025-05-07T13:28:17.000+00:00" // Identifiant unique du document * identifier.system = "urn:oid:1.2.250.1.213.1.1.1.55.12345.12" @@ -10,102 +11,168 @@ Description: "Document Bundle exemple FHIR du CR-BIO"Usage: #example // Date de création du bundle * timestamp = "2025-05-07T13:28:17.000+00:00" + * entry[0].fullUrl = "https://exemple.com/Composition/clinical-document-composition-BIO-CR-BIO" * entry[=].resource = clinical-document-composition-BIO-CR-BIO +* entry[+].fullUrl = "https://exemple.com/Patient/patientExemple" +* entry[=].resource = patientExemple +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/practitioner-role-exemple1" +* entry[=].resource = practitioner-role-exemple1 +* entry[+].fullUrl = "https://exemple.com/Practitioner/practitioner-exemple1" +* entry[=].resource = practitioner-exemple1 +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/practitioner-role-exemple2" +* entry[=].resource = practitioner-role-exemple2 +* entry[+].fullUrl = "https://exemple.com/Practitioner/practitioner-exemple2" +* entry[=].resource = practitioner-exemple2 +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/practitioner-role-exemple3" +* entry[=].resource = practitioner-role-exemple3 +* entry[+].fullUrl = "https://exemple.com/Practitioner/practitioner-exemple3" +* entry[=].resource = practitioner-exemple3 +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/practitioner-role-exemple4" +* entry[=].resource = practitioner-role-exemple4 +* entry[+].fullUrl = "https://exemple.com/Practitioner/practitioner-exemple4" +* entry[=].resource = practitioner-exemple4 +* entry[+].fullUrl = "https://exemple.com/PractitionerRole/practitioner-role-exemple5" +* entry[=].resource = practitioner-role-exemple5 +* entry[+].fullUrl = "https://exemple.com/Practitioner/practitioner-exemple5" +* entry[=].resource = practitioner-exemple5 +* entry[+].fullUrl = "https://exemple.com/Encounter/encounterExemple" +* entry[=].resource = encounterExemple +* entry[+].fullUrl = "https://exemple.com/ServiceRequest/orderExemple" +* entry[=].resource = orderExemple * entry[+].fullUrl = "https://exemple.com/Organization/custodianOrganization" * entry[=].resource = custodianOrganization -* entry[+].fullUrl = "https://exemple.com/PractitionerRole/fr-practitioner-role-exemple1" -* entry[=].resource = fr-practitioner-role-exemple1 -* entry[+].fullUrl = "https://exemple.com/PractitionerRole/fr-practitioner-role-exemple2" -* entry[=].resource = fr-practitioner-role-exemple2 -* entry[+].fullUrl = "https://exemple.com/Patient/fr-patientExemple" -* entry[=].resource = fr-patientExemple -* entry[+].fullUrl = "https://exemple.com/Encounter/encounter-exemple" -* entry[=].resource = encounter-exemple -* entry[+].fullUrl = "https://exemple.com/ServiceRequest/service1" -* entry[=].resource = service1 -* entry[+].fullUrl = "https://exemple.com/Consent/consent1" -* entry[=].resource = consent1 +* entry[+].fullUrl = "https://exemple.com/Location/locationExemple" +* entry[=].resource = locationExemple +* entry[+].fullUrl = "https://exemple.com/DocumentReference/documentReferenceExample" +* entry[=].resource = documentReferenceExample Instance: clinical-document-composition-BIO-CR-BIO InstanceOf: FrCompositionDocument -Description: "Composition exemple pour un CR de Biologie"Usage: #example +Description: "Exemple de Composition pour un CR de Biologie"Usage: #inline * meta.lastUpdated = "2024-05-07T13:28:17.000+00:00" -* language = #fr * meta.profile = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/BIO-CR-BIO/2024.01" -// templeId à faire -* text.status = #additional -// Type de document -* type.coding[0].system = $LNC -* type.coding[0].code = #11502-2 -* type.coding[0].display = "Compte rendu du laboratoire [Recherche] Patient ; Document" - -* extension[R5-Composition-version].valueString = "1" +* language = #fr * text.div = "

Compte rendu d'examens biologiques

Practitioner: Dr. Marcel CAMPARINI

status: final

patient: DOMINIQUE MARIE-LOUISE PAT-TROIS

author: DR Marcel CAMPARINI / Laboratoire des charmes

+

Personne à prévenir en cas d'urgence: Sophie NESSI

+

Personne de confiance: Sophie NESSI

+

Organisation chargée de la conservation du document: Laboratoire des charmes

+

Responsable du document: Dr. Marcel CAMPARINI

+

Biologiste ayant validé des résultats présents sur le compte rendu: Dr. Jean DE SANTS / Dr. Thierry DIAZ

+

encounter: ambulatoire (hors établissement), 2025-05-03 - 2024-05-07

confidentiality: N

" +// Version du document +* extension[R5-Composition-version].valueString = "1" -/* // information-recipient-extension -* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].system = "urn:oid:2.16.840.1.113883.5.90" -* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].code = #PRCP -* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].display = "primary information recipient" - -* extension[information-recipient].extension[party].valueReference = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" */ - - +// Informant * extension[informant].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" * extension[informant].extension[type].valueCodeableConcept.coding[0].code = #INF -//* extension[InformantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" -* extension[informant].extension[party].valueReference = Reference(fr-patientExemple) +* extension[informant].extension[party].valueReference = Reference(patientExemple) +/* // information-recipient-extension (non utilisé dans la BIO) +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].system = "urn:oid:2.16.840.1.113883.5.90" +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].code = #PRCP +* extension[information-recipient].extension[type].valueCodeableConcept.coding[0].display = "primary information recipient" +* extension[information-recipient].extension[party].valueReference = Reference(practitioner-role-exemple1) "DR Marcel CAMPARINI" */ +// Participant +* extension[participant].extension[type].url = "type" * extension[participant].extension[type].valueCodeableConcept.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" -* extension[participant].extension[type].valueCodeableConcept.coding[0].code = #INF -//* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].display = "informant" +* extension[participant].extension[type].valueCodeableConcept.coding[0].code = #REF +* extension[ParticipantExtension].extension[type].valueCodeableConcept.coding[0].display = "Référent / Prescripteur" * extension[participant].extension[time].valuePeriod.start = "2025-06-12T10:00:00+01:00" * extension[participant].extension[time].valuePeriod.end = "2025-06-12T14:00:00+01:00" +* extension[participant].extension[party].valueReference = Reference(practitioner-role-exemple4) -* extension[participant].extension[party].valueReference = Reference(Practitioner/fr-practitioner-role-exemple2) +// order +* extension[order].url = "http://hl7.org/fhir/uv/fhir-clinical-document/StructureDefinition/OrderExtension" +* extension[order].valueReference = Reference(orderExemple) -* attester[legal_attester].mode = #legal -* attester[legal_attester].time = "2024-06-12T15:00:00+01:00" -* attester[legal_attester].party = Reference(fr-practitioner-role-exemple1) +// identifier (setId) +* identifier.value = "1.2.250.1.213.1.1.1.55.2024.5" -* attester[professional_attester].mode = #professional -* attester[professional_attester].time = "2024-06-12T14:30:00+01:00" -* attester[professional_attester].party = Reference(fr-practitioner-role-exemple1) +// statut du document +* status = #final -* event[principalEvent].period.start = "2024-06-12T08:00:00+01:00" -* event[principalEvent].period.end = "2024-06-12T09:00:00+01:00" -* event[principalEvent].extension[perfomer].valueReference = Reference(fr-practitioner-role-exemple1) +* text.status = #additional -* identifier.value = "D52DE737-001D-4031-B571-0A0ED7C42300" -* status = #final +// Type de document +* type.coding[0].system = $LNC +* type.coding[0].code = #11502-2 +* type.coding[0].display = "Compte rendu du laboratoire [Recherche] Patient ; Document" + +// Patient +* subject = Reference(patientExemple) + +// Association du document à une prise en charge +* encounter = Reference(encounterExemple) -* subject = Reference(fr-patientExemple) +// Date de création * date = "2025-06-12T14:00:00+01:00" -* confidentiality = #N -* encounter = Reference(encounter-exemple) -* author = Reference(fr-practitioner-role-exemple1) "DR Marcel CAMPARINI" +// Auteur du document +* author = Reference(practitioner-role-exemple1) "DR Marcel CAMPARINI" * author.extension[time].valueDateTime = "2024-01-04T13:45:00+01:00" + +// Titre du document CDA * title = "Compte rendu d'examens biologiques" -* relatesTo[+].code = #replaces +// Niveau de confidentialité +* confidentiality = #N + +// Responsable du document +* attester[legal_attester].mode = #legal +* attester[legal_attester].time = "2024-01-04T15:00:00+01:00" +* attester[legal_attester].party = Reference(practitioner-role-exemple1) + +// Professionnel attestant la validité du contenu du document +* attester[professional_attester][0].mode = #professional +* attester[professional_attester][0].time = "2024-01-04T14:30:00+01:00" +* attester[professional_attester][0].party = Reference(practitioner-role-exemple2) + +* attester[professional_attester][1].mode = #professional +* attester[professional_attester][1].time = "2024-01-04T14:30:00+01:00" +* attester[professional_attester][1].party = Reference(practitioner-role-exemple3) + +// Structure chargée de la conservation du document +* custodian = Reference(custodianOrganization) "Laboratoire des charmes" + +// Document de référence +* relatesTo[+].code = #appends * relatesTo[=].targetIdentifier.type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" * relatesTo[=].targetIdentifier.type.coding[0].code = #ACSN * relatesTo[=].targetIdentifier.type.coding[0].display = "Accession ID" -* relatesTo[=].targetIdentifier.system = "urn:oid:1.2.250.1.213.1.4.10" -* relatesTo[=].targetIdentifier.value = "ABC123" +* relatesTo[=].targetIdentifier.system = "urn:oid:1.2.250.1.213.1.1.9" +* relatesTo[=].targetIdentifier.value = "202411111123" -* custodian = Reference(custodianOrganization) "Laboratoire des charmes" -* section[0].title = "Aucune donnée disponible" +// Actes documentés +* event[0].code.coding.code = #18723-7 +* event[0].code.coding.system = $LNC +* event[0].code.coding.display = "Hématologie" + +* event[1].code.coding.code = #18725-2 +* event[1].code.coding.system = $LNC +* event[1].code.coding.display = "Microbiologie" + +* event[principalEvent].period.start = "2024-06-12T08:00:00+01:00" +* event[principalEvent].period.end = "2024-06-12T09:00:00+01:00" +* event[principalEvent].code.coding.code = #18719-5 +* event[principalEvent].code.coding.system = $LNC +* event[principalEvent].code.coding.display = "Biochimie" +* event[principalEvent].extension[performer].url = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/fr-performer-event" +* event[principalEvent].extension[performer].valueReference = Reference(practitioner-role-exemple1) + +// Section obligatoire +* section[+].entry[+] = Reference(Binary) +* section[=].title = "PDF" +/* * section[0].title = "Section vide" * section[=].code = $LNC#29299-5 * section[=].text.status = #additional * section[=].text.div = " @@ -127,13 +194,15 @@ Description: "Composition exemple pour un CR de Biologie"Usage: #example " * section[=].emptyReason = http://terminology.hl7.org/CodeSystem/list-empty-reason#notasked "Not Asked" - -Instance: fr-patientExemple + */ +//***************Instances*********************// +Instance: patientExemple InstanceOf: FrPatientINSDocument Title: "Patient" Usage: #inline Description: "Patient" * meta.profile = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/fr-patient-ins-document" + // Identifiant INS * identifier[INS-NIR].use = #official * identifier[INS-NIR].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" @@ -210,93 +279,326 @@ Description: "Patient" * contact[1].name[0].family = "NESSI" * contact[1].address.text = "12 rue des Lilas, 75012 Paris" - - Instance: custodianOrganization InstanceOf: FrOrganizationDocument -Description: "exemple custodian content"Usage: #example -* identifier.system = "urn:ietf:rfc:3986" -* identifier.value = "urn:uuid:2.16.840.1.113883.19.5" +Description: "exemple custodian "Usage: #inline +* identifier[idNatSt].system = "urn:oid:1.2.250.1.71.4.2.2" +* identifier[idNatSt].value = "1120459876" +* identifier[idNatSt].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[idNatSt].type.coding[0].code = #IDNST * name = "Laboratoire des charmes" +// Téléphones +* telecom[0].system = #phone +* telecom[0].value = "01 74 58 96 07" +* telecom[0].use = #work + +Instance: practitioner-role-exemple1 +InstanceOf: FrPractitionerRoleDocument +Description: "exemple practitioner role "Usage: #inline +* meta.lastUpdated = "2013-05-05T16:13:03Z" +//* identifier[idSituationExercice].system = "https://rpps.esante.gouv.fr" +//* identifier[idSituationExercice].value = "801234534765" +* practitioner = Reference(practitioner-exemple1) +* code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" +* code[0].coding[0].code = #doctor +* organization = Reference(organizationExemple) + +Instance: practitioner-role-exemple2 +InstanceOf: FrPractitionerRoleDocument +Description: "exemple practitioner role "Usage: #inline +* meta.lastUpdated = "2013-05-05T16:13:03Z" +//* identifier.system = "http://www.acme.org/practitioners" +//* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference(practitioner-exemple2) +* code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" +* code[0].coding[0].code = #doctor +* organization = Reference(organizationExemple) -Instance: fr-practitioner-role-exemple1 +Instance: practitioner-role-exemple3 InstanceOf: FrPractitionerRoleDocument -Description: "exemple practitioner role content"Usage: #example +Description: "exemple practitioner role "Usage: #inline * meta.lastUpdated = "2013-05-05T16:13:03Z" -* identifier.system = "http://www.acme.org/practitioners" -* identifier.value = "1.2.250.1.71.4.2.1" -* practitioner = Reference("Practitioner/practitioner-exemple1") +//* identifier.system = "http://www.acme.org/practitioners" +//* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference(practitioner-exemple3) * code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" * code[0].coding[0].code = #doctor +* organization = Reference(organizationExemple) -Instance: fr-practitioner-role-exemple2 +Instance: practitioner-role-exemple4 InstanceOf: FrPractitionerRoleDocument -Description: "exemple practitioner role content"Usage: #example +Description: "exemple practitioner role "Usage: #inline * meta.lastUpdated = "2013-05-05T16:13:03Z" -* identifier.system = "http://www.acme.org/practitioners" -* identifier.value = "1.2.250.1.71.4.2.1" -* practitioner = Reference("Practitioner/practitioner-exemple2") +//* identifier.system = "http://www.acme.org/practitioners" +//* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference(practitioner-exemple4) * code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" * code[0].coding[0].code = #doctor +* organization = Reference(organizationExemple) + +Instance: practitioner-role-exemple5 +InstanceOf: FrPractitionerRoleDocument +Description: "exemple practitioner role "Usage: #inline +* meta.lastUpdated = "2013-05-05T16:13:03Z" +//* identifier.system = "http://www.acme.org/practitioners" +//* identifier.value = "1.2.250.1.71.4.2.1" +* practitioner = Reference(practitioner-exemple5) +* code[0].coding[0].system = "http://terminology.hl7.org/CodeSystem/practitioner-role" +* code[0].coding[0].code = #nurse +* code[0].coding[0].display = "Nurse" +* organization = Reference(organizationExemple) Instance: practitioner-exemple1 InstanceOf: FrPractitionerDocument -Usage: #example -Title: "Dr Marcel CAMPARINI" -* identifier[0].system = "http://identifiants.esante.gouv.fr" -* identifier[0].value = "123456789012345" -* identifier[0].type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" -* identifier[0].type.coding[0].code = #NPI -* identifier[0].type.coding[0].display = "Numéro du professionnel de santé" +Usage: #inline +Title: "Exemple 1: practitioner" +* identifier[rpps].system = "https://rpps.esante.gouv.fr" +* identifier[rpps].value = "801234534765" +* identifier[rpps].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[rpps].type.coding[0].code = #RPPS +* identifier[rpps].type.coding[0].display = "Numéro du professionnel de santé" +* address.text = "8 Rue Frédéric Bastia, 92100 BOULOGNE-BILLANCOURT" * name[0].family = "CAMPARINI" * name[0].given[0] = "Marcel" * name[0].prefix[0] = "Dr" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].code = #SM03 +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].display = "Biologie médicale (SM)" + +* qualification[savoirFaire][professionMedecin].issuer = Reference(organizationExemple) + +// Téléphones +* telecom.system = #phone +* telecom.value = "01 74 58 96 07" +* telecom.use = #work +* telecom.rank = 1 + Instance: practitioner-exemple2 InstanceOf: FrPractitionerDocument -Usage: #example -Title: "Dr MEDIOUNI Stéphane" -* identifier[0].system = "http://identifiants.esante.gouv.fr" -* identifier[0].value = "123456789012345" -* identifier[0].type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v2-0203" -* identifier[0].type.coding[0].code = #NPI -* identifier[0].type.coding[0].display = "Numéro du professionnel de santé" -* name[0].family = "MEDIOUNI" -* name[0].given[0] = "Stéphane" +Usage: #inline +Title: "Exemple 2: practitioner" +* identifier[rpps].system = "https://rpps.esante.gouv.fr" +* identifier[rpps].value = "801234567898" +* identifier[rpps].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[rpps].type.coding[0].code = #RPPS +* identifier[rpps].type.coding[0].display = "Numéro du professionnel de santé" +* address.text = "8 Rue Frédéric Bastia, 92100 BOULOGNE-BILLANCOURT" +* name[0].family = "DE SANTS" +* name[0].given[0] = "Jean" +* name[0].prefix[0] = "Dr" + +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].code = #SM03 +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].display = "Biologie médicale (SM)" +* qualification[savoirFaire][professionMedecin].issuer = Reference(organizationExemple) + +// Téléphones +* telecom.system = #phone +* telecom.value = "01 74 58 96 07" +* telecom.use = #work +* telecom.rank = 1 + +Instance: practitioner-exemple3 +InstanceOf: FrPractitionerDocument +Usage: #inline +Title: "Exemple 3: practitioner" +* identifier[rpps].system = "https://rpps.esante.gouv.fr" +* identifier[rpps].value = "801234567898" +* identifier[rpps].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[rpps].type.coding[0].code = #RPPS +* identifier[rpps].type.coding[0].display = "Numéro du professionnel de santé" +* address.text = "8 Rue Frédéric Bastia, 92100 BOULOGNE-BILLANCOURT" +* name[0].family = "DIAZ" +* name[0].given[0] = "Thierry" +* name[0].prefix[0] = "Dr" + +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].code = #SM03 +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].display = "Biologie médicale (SM)" +* qualification[savoirFaire][professionMedecin].issuer = Reference(organizationExemple) + +// Téléphones +* telecom.system = #phone +* telecom.value = "01 74 58 96 07" +* telecom.use = #work +* telecom.rank = 1 + +Instance: practitioner-exemple4 +InstanceOf: FrPractitionerDocument +Usage: #inline +Title: "Exemple 4: practitioner" +* identifier[rpps].system = "https://rpps.esante.gouv.fr" +* identifier[rpps].value = "801234534765" +* identifier[rpps].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[rpps].type.coding[0].code = #RPPS +* identifier[rpps].type.coding[0].display = "Numéro du professionnel de santé" +* name[0].family = "BLUE" +* name[0].given[0] = "Eva" +* name[0].prefix[0] = "Dr" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].code = #SM19 +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" +* qualification[savoirFaire][professionMedecin].code.coding[savoirFaire].display = "Gynécologie médicale (SM)" + +* qualification[savoirFaire][professionMedecin].issuer = Reference(organizationExemple2) + +// Téléphones +* telecom.system = #phone +* telecom.value = "01 47 15 00 00" +* telecom.use = #work +* telecom.rank = 1 + + +Instance: practitioner-exemple5 +InstanceOf: FrPractitionerDocument +Usage: #inline +Title: "Exemple 5: practitioner" +* identifier[rpps].system = "https://rpps.esante.gouv.fr" +* identifier[rpps].value = "801234534765" +* identifier[rpps].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[rpps].type.coding[0].code = #RPPS +* identifier[rpps].type.coding[0].display = "Numéro du professionnel de santé" +* address.text = "12 Rue du renard, 92100 BOULOGNE-BILLANCOURT" +* name[0].family = "BLEEDER" +* name[0].given[0] = "Roberta" * name[0].prefix[0] = "Dr" +* qualification[savoirFaire][professionInfirmier].code.coding[savoirFaire].code = #60 +* qualification[savoirFaire][professionInfirmier].code.coding[savoirFaire].system = "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante" +* qualification[savoirFaire][professionInfirmier].code.coding[savoirFaire].display = "Infirmier" +* qualification[savoirFaire][professionInfirmier].issuer = Reference(organizationExemple3) -Instance: encounter-exemple -InstanceOf: Encounter -Description: "exemple encounter content"Usage: #example +// Téléphones +* telecom.system = #phone +* telecom.value = "01 49 15 45 78" +* telecom.use = #work +* telecom.rank = 1 + +Instance: encounterExemple +InstanceOf: FrEncounterDocument +Description: "exemple encounter" +Usage: #inline * meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" -* identifier.value = "S100" +* identifier.system = "urn:uuid:1.2.250.1.71.4.2.1" +* identifier.value = "801234534765" +* identifier.type.coding.code = #VN +* identifier.type.coding.system = "https://hl7.fr/ig/fhir/core/ValueSet/fr-core-vs-encounter-identifier-type" +* identifier.type.coding.display = "Visit Number" * status = #finished * class = $v3-ActCode#AMB "ambulatoire (hors établissement)" +* type.coding.code = #U +* type.coding.system = "https://hl7.fr/ig/fhir/core/ValueSet/fr-core-vs-encounter-type" +* type.coding.display = "Emergency|Caractère d’urgence aigue du problème quel que soit le service d’entrée" * type.text = "ambulatoire (hors établissement)" -* subject = Reference(fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* subject = Reference(patientExemple) "DOMINIQUE MARIE-LOUISE" * period.start = "2024-05-03T13:28:17.000+00:00" * period.end = "2024-05-07T11:28:17.000+00:00" - - -Instance: service1 +* participant.individual = Reference(practitioner-role-exemple1) +* participant[responsibleParty].type.coding.code = #DIS +* participant[responsibleParty].type.coding.system = "https://mos.esante.gouv.fr/NOS/TRE_A13-HL7ParticipationType/FHIR/TRE-A13-HL7ParticipationType" +* participant[responsibleParty].individual = Reference(practitioner-role-exemple1) +* location[0].location = Reference(locationExemple) +* location[0].status = #completed +* location[0].period.start = "2024-05-03T13:28:17.000+00:00" +* location[0].period.end = "2024-05-07T11:28:17.000+00:00" + +Instance: locationExemple +InstanceOf: FrLocationDocument +Description: "exemple location " +Usage: #inline +* identifier.system = "urn:oid:1.2.250.1.71.4.2.2" +* identifier.value = "1120459876" +* identifier.type.coding.system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-location-identifier-type" +* identifier.type.coding.code = #IDNST +* identifier.type.coding.display = "Identification nationale de structure définie par l’ASIP-SANTE dans le CI_SIS" +* name = "Laboratoire des charmes" +* type.coding[secteurActivite].code = #SA25 +* type.coding[secteurActivite].system = "https://mos.esante.gouv.fr/NOS/JDV_J02-XdsHealthcareFacilityTypeCode-CISIS/FHIR/JDV-J02-XdsHealthcareFacilityTypeCode-CISIS" +* type.coding[secteurActivite].display = "Laboratoire de biologie médicale" +* type.coding[categorieEtablissement].code = #611 +* type.coding[categorieEtablissement].system = "https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement" +* type.coding[categorieEtablissement].display = "Laboratoire de Biologie Médicale" +* address.text = "8 Rue Frédéric Bastia, 92100 BOULOGNE-BILLANCOURT" +* managingOrganization = Reference(custodianOrganization) + +Instance: orderExemple InstanceOf: ServiceRequest -Description: "exemple service content" -Usage: #example +Description: "exemple service " +Usage: #inline * meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" +* identifier.system = "urn:oid:1.2.250.1.213.1.1.9" +* identifier.value = "2024123456789" * status = #active "Active" * intent = #order -* subject = Reference(fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* subject = Reference(patientExemple) "DOMINIQUE MARIE-LOUISE" * code.text = "Discharge to home" -Instance: consent1 +/* Instance: consentExemple InstanceOf: Consent -Description: "exemple consent content" -Usage: #example +Description: "exemple consent " +Usage: #inline * meta.lastUpdated = "2024-05-07T11:28:17.000+00:00" * status = #active "Active" -* patient = Reference(Patient/fr-patientExemple) "DOMINIQUE MARIE-LOUISE" +* patient = Reference(patientExemple) "DOMINIQUE MARIE-LOUISE" * scope = $consentscope#patient-privacy * category = $LNC#59284-0 //* sourceAttachment.title = "The terms of the consent in lawyer speak." -* policyRule = $v3-ActCode#OPTIN \ No newline at end of file +* policyRule = $v3-ActCode#OPTIN */ + +Instance: organizationExemple +InstanceOf: FrOrganizationDocument +Description: "exemple organization " +Usage: #inline +* identifier.system = "urn:ietf:rfc:3986" +* identifier.value = "urn:uuid:2.16.840.1.113883.19.5" +* name = "Laboratoire des charmes" + + +Instance: organizationExemple2 +InstanceOf: FrOrganizationDocument +Description: "exemple organization " +Usage: #inline +* identifier[idNatSt].system = "urn:oid:1.2.250.1.71.4.2.2" +* identifier[idNatSt].value = "1120459876" +* identifier[idNatSt].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[idNatSt].type.coding[0].code = #IDNST +* name = "Cabinet du DR BLUE" +// Téléphones +* telecom[0].system = #phone +* telecom[0].value = "01 45 37 86 53" +* telecom[0].use = #work + +Instance: organizationExemple3 +InstanceOf: FrOrganizationDocument +Description: "exemple organization " +Usage: #inline +* identifier[idNatSt].system = "urn:oid:1.2.250.1.71.4.2.2" +* identifier[idNatSt].value = "1120459876" +* identifier[idNatSt].type.coding[0].system = "https://hl7.fr/ig/fhir/core/CodeSystem/fr-core-cs-v2-0203" +* identifier[idNatSt].type.coding[0].code = #IDNST +* name = "Cabinet d'infirmières de BB" +// Téléphones +* telecom[0].system = #phone +* telecom[0].value = "01 38 47 54 39" +* telecom[0].use = #work + +/* Instance: ExampleBinary +InstanceOf: Binary +Usage: #inline +* contentType = #application/pdf +* data = """ +JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgovTGFuZyAoZW4tVVMpCi9TdHJ1Y3RQYXJlbnRzIDw8L1BhZ2VzIDIgMCBSPj4KPj4KZW5kb2JqCjIgMCBvYmoKPDwvVHlwZSAvUGFnZXMKL0tpZHNbMyAwIFJdCi9Db3VudCAxCj4+CmVuZG9iagozIDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovUmVzb3VyY2VzIDw8Pj4KL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KL0NvbnRlbnRzIDQgMCBSCj4+CmVuZG9iago0IDAgb2JqCjw8L0xlbmd0aCAzNDA+PgpzdHJlYW0KSGVsbG8sIFRoaXMgaXMgYSB0ZXN0IFBERi4KZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgNQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAxMDAgMDAwMDAgbiAKMDAwMDAwMDIyMCAwMDAwMCBuIAowMDAwMDAwMzQwIDAwMDAwIG4gCjAwMDAwMDA1MDAgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDUKL1Jvb3QgMSAwIFIKL0luZm8gNSAwIFIKPj4Kc3RhcnR4cmVmCjY2NQolJUVPRgo= +""" + */ +Instance: documentReferenceExample +InstanceOf: DocumentReference +Usage: #inline +* status = #current +* type = $LNC#55107-7 "Clinical note" +* content[0].attachment.contentType = #application/pdf +* content[0].attachment.url = "Binary/ExampleBinary" +//* content[0].attachment.url = "ressources/media/exempleBIO.pdf" +* content[0].attachment.title = "Résultat PDF" +* content[0].attachment.creation = "2025-05-01T10:00:00+01:00" + + diff --git a/sushi-config.yaml b/sushi-config.yaml index 5d93492aa7..77c8e76f9d 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -63,7 +63,10 @@ pages: securite.md: title: Sécurité downloads.md: - title: Téléchargements et usages + title: Téléchargements et usages + #exemples.md: + #title : Exemple de document FHIR + menu: Accueil: index.html @@ -96,6 +99,7 @@ menu: "Standard FHIR": new-tab https://hl7.org/fhir/R4/index.html "Documentation des guides d'implémentation de l'ANS": new-tab https://interop.esante.gouv.fr/ig/documentation/index.html Téléchargements et usage: downloads.html + #Exemples: exemples.html groups: Modèles logiques: @@ -103,7 +107,7 @@ groups: #description: Modèle logique métier resources: - EnteteDocument - - Patient + - PatientMetier - Auteur - PersonneStructure - PersonneStructureAuteur @@ -175,6 +179,7 @@ groups: - StructureDefinition/fr-encounter-document - StructureDefinition/fr-location-document - StructureDefinition/fr-related-person-document + - StructureDefinition/fr-document-reference Data Type FHIR: name: Data Type Profiles @@ -190,4 +195,5 @@ groups: name: Exemple de BIO-CR-BIO description: Exemples pour montrer un document clinique. resources: - - clinical-document-bundle-BIO-CR-BIO \ No newline at end of file + - clinical-document-bundle-BIO-CR-BIO + \ No newline at end of file