Guide d'implémentation du GT Standards et Interopérabilité pour les EDS
0.1.0 - ci-build France flag

Guide d'implémentation du GT Standards et Interopérabilité pour les EDS - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

StructureMap: FHIR EDS Patient to Tables CDM OMOP

Official URL: https://interop.esante.gouv.fr/ig/fhir/eds/StructureMap/Patient Version: 0.1.0
Draft as of 2024-09-10 Computable Name: Patient

Cette ressource présente les spécifications de l’‘alignement entre la ressource EDSPatient vers les tables correspodantes du CDM OMOP.

Limites

  • L’utilisation des StructureDefinition datatype ne passe pas la validation de l’IG Publisher (1.6.22) alors que donne le résultat attendu avec matchbox.
  • La gestion de l’intégrité référentielle est absente.

Generated Narrative: StructureMap Patient

map "https://interop.esante.gouv.fr/ig/fhir/eds/StructureMap/Patient" = "Patient"

// Cette ressource présente les spécifications de l''alignement entre la ressource `EDSPatient` vers les tables correspodantes du CDM OMOP.

uses "https://interop.esante.gouv.fr/ig/fhir/eds/StructureDefinition/EDSPatient" alias EDSPatient as source
uses "https://interop.esante.gouv.fr/ig/fhir/eds/StructureDefinition/LogicalBundle" alias LogicalBundle as target
uses "https://interop.esante.gouv.fr/ig/fhir/eds/StructureDefinition/OMOPPerson" alias PersonTable as target
uses "https://interop.esante.gouv.fr/ig/fhir/eds/StructureDefinition/OMOPLocation" alias LocationTable as target
uses "https://interop.esante.gouv.fr/ig/fhir/eds/StructureDefinition/OMOPDeath" alias DeathTable as target

imports "https://interop.esante.gouv.fr/ig/fhir/eds/StructureMap/Person"
imports "https://interop.esante.gouv.fr/ig/fhir/eds/StructureMap/Location"
imports "https://interop.esante.gouv.fr/ig/fhir/eds/StructureMap/Death"

group Patient(source src : EDSPatient, target tgtBundle : LogicalBundle) {
  src -> tgtBundle.id = uuid() "setId";
  src -> tgtBundle.type = 'transaction' "setType";
  src -> tgtBundle.entry as newEntry then {
    src -> newEntry.person = create('PersonTable') as newPerson then {
      src then Person(src, newPerson) "transformPerson";
    } "createPerson";
  } "newEntryPerson";
  src.address as srcAddress where (use = 'home') and period.end.empty() -> tgtBundle.entry as newEntry then {
    srcAddress -> newEntry.location = create('LocationTable') as newLocation then {
      // srcAddress then MultiLocation(srcAddress, newLocation) "transformLocation";
      srcAddress then Location(src, newLocation) "transformLocation";
    } "createLocation";
  } "newEntryLocation";
  src where deceased.is(System.DateTime) or deceased.is(System.Boolean) -> tgtBundle.entry as newEntry then {
    src -> newEntry.death = create('DeathTable') as newDeath then {
      src then Death(src, newDeath) "transformDeath";
    } "createDeath";
  } "newEntryDeath";
}