Data Management with FHIR
0.1.0 - ci-build France flag

Data Management with FHIR - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

StructureMap: Alignement de l''expression de besoin vers le modèle physique du DPI dans le cadre de l''usage Core

Official URL: https://interop.aphp.fr/ig/fhir/dm/StructureMap/CoreBusiness2Physical Version: 0.1.0
Draft as of 2025-10-23 Computable Name: CoreBusiness2Physical

Alignement de l''expression de besoin vers le modèle physique du DPI dans le cadre de l''usage Core

map "https://interop.aphp.fr/ig/fhir/dm/StructureMap/CoreBusiness2Physical" = "CoreBusiness2Physical"

// Alignement de l''expression de besoin vers le modèle physique du DPI dans le cadre de l''usage Core

uses "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" alias QR as source
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreDataSet" alias DataSet as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CorePatient" alias PatientTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreAddress" alias AddressTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreSejour" alias SejourTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreBiology" alias BiologyTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreClinical" alias ClinicalTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreDiag" alias DiagTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreActe" alias ActeTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreMedicationAdm" alias MedicationAdmTable as target
uses "https://interop.aphp.fr/ig/fhir/dm/StructureDefinition/CoreMedicationPre" alias MedicationPreTable as target

group init(source srcQR : QR, target tgtDS : DataSet) <<types>> {
  srcQR -> tgtDS.logicalId = uuid() "setId";
  srcQR ->  tgtDS.patient as tgtPatient,  tgtDS.sejour as tgtSejour,  tgtDS.biology as tgtBiol,  tgtDS.clinical as tgtClin,  tgtDS.medicationPre as tgtMedPre,  tgtDS.medicationAdm as tgtMedAdm then {
    srcQR.subject as srcSubject then {
      srcSubject.identifier as srcSubjectIdentifier where system = 'https://dpi.exemple/Patient/PatientNi' then {
        srcSubjectIdentifier.value as srcSubjectId then {
          srcQR.item as srcSocioDemoDataItem where linkId = '4647259356106' then {
            srcSocioDemoDataItem -> tgtDS.patient = create('PatientTable') as newPatient then Patient(srcSubjectId, srcSocioDemoDataItem, newPatient) "setPatient";
            srcSocioDemoDataItem.item as srcEnvItem where linkId = '5491974639955' -> tgtDS.address = create('AddressTable') as newAddress then Environement(srcSubjectId, srcEnvItem, newAddress) "setEnvironnement";
          } "navigationToSocioDemoData";
          srcQR.item as srcPMSIDataItem where linkId = '2825244231605' then {
            srcPMSIDataItem.item as srcPMSISexeItem where linkId = '3894630481120' then {
              srcPMSISexeItem.answer as srcPMSISexeAnswer then {
                srcPMSISexeAnswer.value : Coding as srcPMSISexeValueCoding -> tgtPatient.gender = (%srcPMSISexeValueCoding.code) "SetPMSISexeValue";
              } "SetPMSISexeAnswer";
            } "setPMSISexe";
            srcPMSIDataItem.item as srcPMSIDiagItem where linkId = '9391816419630' -> tgtDS.diag = create('DiagTable') as newDiag then PMSIDiag(srcSubjectId, srcPMSIDiagItem, newDiag) "navigationToPMSIDiag";
            srcPMSIDataItem.item as srcPMSIActeItem where linkId = '591926901726' -> tgtDS.acte = create('ActeTable') as newActe then PMSIActe(srcSubjectId, srcPMSIActeItem, newActe) "navigationToPMSIDiag";
          } "navigationToPMSIData";
        } "setIdentifierValue";
      } "selectPatientIdentifier";
    } "setPatientId";
  } "setTgtVar";
}

group Patient(source srcSubjectId, source srcSocioDemoDataItem, target newPatient : PatientTable) {
  srcSocioDemoDataItem.item as srcPatientIdItem where linkId = '2958000860428' then {
    srcPatientIdItem.item as srcNomItem where linkId = '8605698058770' then {
      srcNomItem.answer as srcNomAnswer then {
        srcNomAnswer.value : string as srcNomValue -> newPatient.name = srcNomValue "SetNomValue";
      } "setNomAnswer";
    } "setNom";
    srcPatientIdItem.item as srcPrenomItem where linkId = '6214879623503' then {
      srcPrenomItem.answer as srcPrenomAnswer then {
        srcPrenomAnswer.value : string as srcPrenomValue -> newPatient.firstName = srcPrenomValue "SetPrenomValue";
      } "setPrenomAnswer";
    } "setPrenom";
    srcPatientIdItem.item as srcNIRItem where linkId = '5711960356160' then {
      srcNIRItem.answer as srcNIRAnswer then {
        srcNIRAnswer.value : string as srcNIRValue -> newPatient.nir = srcNIRValue "SetNIRValue";
      } "setNIRAnswer";
    } "setNIR";
    srcPatientIdItem.item as srcDDNItem where linkId = '5036133558154' then {
      srcDDNItem.answer as srcDDNAnswer then {
        srcDDNAnswer.value : date as srcDDNValue -> newPatient.birthDate = srcDDNValue "SetDDNValue";
      } "setDDNAnswer";
    } "setDDN";
    srcPatientIdItem.item as srcDDDItem where linkId = '5036133558154' then {
      srcDDDItem.answer as srcDDDAnswer then {
        srcDDDAnswer.value : date as srcDDDValue "SetDDDValue";
      } "setDDDAnswer";
      srcDDDItem.item as srcDDDSourceItem where linkId = '9098810065693' then {
        srcDDDSourceItem.answer as srcDDDSourceAnswer then {
          srcDDDSourceAnswer.value : Coding as srcDDDSourceValue "SetDDDSourceValue";
        } "setDDDSourceAnswer";
      } "setDDDSource";
    } "setDDD";
    srcPatientIdItem.item as srcGemRankItem where linkId = '6931296968515' then {
      srcGemRankItem.answer as srcGemRankAnswer then {
        srcGemRankAnswer.value : integer as srcGemRankValue "SetGemRankValue";
      } "SetGemRankAnswer";
    } "SetGemRank";
  } "navigationToPatientId";
}

group Environement(source srcSubjectId, source srcEnvItem, target newAddress : AddressTable) {
  srcEnvItem.item as srcGeocodItem where linkId = '3816475533472' -> newAddress.patientNi as newAddressPatient then {
    srcGeocodItem -> newAddressPatient.reference = ('PatientCore/' + %srcSubjectId.toString()) "setAddressPatientRef";
    srcGeocodItem.item as srcLatItem where linkId = '3709843054556' then {
      srcLatItem.answer as srcLatAnswer then {
        srcLatAnswer.value : decimal as srcLatValue -> newAddress.latitude = srcLatValue "SetLatValue";
      } "setLatAnswer";
    } "setLat";
    srcGeocodItem.item as srcLongItem where linkId = '7651448032665' then {
      srcLongItem.answer as srcLongAnswer then {
        srcLongAnswer.value : decimal as srcLongValue -> newAddress.longitude = srcLongValue "SetLongValue";
      } "setLongAnswer";
    } "setLong";
    srcGeocodItem.item as srcGeocodDateItem where linkId = '1185653257776' then {
      srcGeocodDateItem.answer as srcGeocodDateAnswer then {
        srcGeocodDateAnswer.value : date as srcGeocodDateValue "SetGeocodDateValue";
      } "setGeocodDateAnswer";
    } "setGeocodDate";
  } "navigationToGeocod";
  srcEnvItem.item as srcIrisItem where linkId = '7621032273792' then {
    srcIrisItem.answer as srcIrisAnswer then {
      srcIrisAnswer.value : Coding as srcIrisValue "SetIrisValue";
    } "setIrisAnswer";
    srcIrisItem.item as srcIrisDateItem where linkId = '4999580038872' then {
      srcIrisDateItem.answer as srcIrisDateAnswer then {
        srcIrisDateAnswer.value : date as srcIrisDateValue "SetIrisDateValue";
      } "setIrisDateAnswer";
    } "setIrisDate";
  } "setIris";
}

group PMSIDiag(source srcSubjectId, source srcPMSIDiagItem, target newDiag : DiagTable) {
  srcPMSIDiagItem -> newDiag.patientNi as newDiagPatient then {
    srcPMSIDiagItem -> newDiagPatient.reference = ('PatientCore/' + %srcSubjectId.toString()) "setDiagPatientRef";
  } "setDiagPatient";
  srcPMSIDiagItem.item as srcPMSIDiagDateItem where linkId = '7114466839467' then {
    srcPMSIDiagDateItem.answer as srcPMSIDiagDateAnswer then {
      srcPMSIDiagDateAnswer.value : date as srcPMSIDiagDateValue "SetPMSIDiagDateValue";
    } "SetPMSIDiagDateAnswer";
  } "SetPMSIDiagDate";
  srcPMSIDiagItem.item as srcPMSIDiagTypeItem where linkId = '6427586743735' then {
    srcPMSIDiagTypeItem.answer as srcPMSIDiagTypeAnswer then {
      srcPMSIDiagTypeAnswer.value : Coding as srcPMSIDiagTypeValueCoding -> newDiag.codeType = (%srcPMSIDiagTypeValueCoding.display) "SetPMSIDiagTypeValue";
    } "SetPMSIDiagTypeAnswer";
  } "SetPMSIDiagType";
  srcPMSIDiagItem.item as srcPMSIDiagCodeItem where linkId = '5505101189372' then {
    srcPMSIDiagCodeItem.answer as srcPMSIDiagCodeAnswer then {
      srcPMSIDiagCodeAnswer.value : Coding as srcPMSIDiagCodeValueCoding -> newDiag.code = (%srcPMSIDiagCodeValueCoding.code) "SetPMSIDiagCodeValue";
    } "SetPMSIDiagCodeAnswer";
  } "SetPMSIDiagCode";
}

group PMSIActe(source srcSubjectId, source srcPMSIActeItem, target newActe : ActeTable) {
  srcPMSIActeItem -> newActe.patientNi as newActePatient then {
    srcPMSIActeItem -> newActePatient.reference = ('PatientCore/' + %srcSubjectId.toString()) "setActePatientRef";
  } "setActePatient";
  srcPMSIActeItem.item as srcPMSIActeDateRecItem where linkId = '9436509453137' then {
    srcPMSIActeDateRecItem.answer as srcPMSIActeDateRecAnswer then {
      srcPMSIActeDateRecAnswer.value : date as srcPMSIActeDateRecValue "SetPMSIActeDateRecValue";
    } "SetPMSIActeDateRecAnswer";
  } "SetPMSIActeDateRec";
  srcPMSIActeItem.item as srcPMSIActeDateItem where linkId = '5066866286682' then {
    srcPMSIActeDateItem.answer as srcPMSIActeDateAnswer then {
      srcPMSIActeDateAnswer.value : dateTime as srcPMSIActeDateValue ->  newActe.dateStart = srcPMSIActeDateValue,  newActe.dateEnd = srcPMSIActeDateValue "SetPMSIActeDateValue";
    } "SetPMSIActeDateAnswer";
  } "SetPMSIActeDate";
  srcPMSIActeItem.item as srcPMSIActeCodeItem where linkId = '7758110033600' then {
    srcPMSIActeCodeItem.answer as srcPMSIActeCodeAnswer then {
      srcPMSIActeCodeAnswer.value : Coding as srcPMSIActeCodeValueCoding -> newActe.code = (%srcPMSIActeCodeValueCoding.code) "SetPMSIActeCodeValue";
    } "SetPMSIActeCodeAnswer";
  } "SetPMSIActeCode";
}