Social Care Interoperability Platform FHIR Implementation Guide
Version: 0.1.0, Status: draft

Social Care Interoperability Platform FHIR Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

StructureMap: ObservationSafeguardingToSafeguarding

Official URL: https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureMap/Observation-Safeguarding-Safeguarding Version: 0.1.0
Draft as of 2026-06-10 Computable Name: ObservationSafeguardingToSafeguarding

map "https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureMap/Observation-Safeguarding-Safeguarding" = "ObservationSafeguardingToSafeguarding"

uses "https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/MODS-SafeguardingObservation" alias SafeguardingObservation as source
uses "https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/MODS-Safeguarding" alias Safeguarding as target

group Safeguarding(source src : SafeguardingObservation, target tgt : Safeguarding) {
  src -> tgt.id = evaluate(src, id) "67ac6685-31a1-4b92-9b50-2908774f1f78";
  src ->  tgt.meta as meta,  meta.dataClass as dataClass then {
    src -> dataClass.name = 'Safeguarding Concern' "48e6c7c4-43fb-414e-b6c6-c92c788b5616";
  } "setDataClassName";
  src.subject as subject then {
    src -> tgt.subjectOfCare as subjectOfCare then {
      src -> subjectOfCare.id = evaluate(subject, reference.replace('Patient/','')) "b630035f-9914-4c48-a9a7-cbad44edf947";
      src -> subjectOfCare.type = 'SubjectOfCare' "5445188e-9422-4bd3-aa75-92629b205c39";
      src -> subjectOfCare.display = evaluate(subject, display) "8137f511-324f-4fb8-9658-ef16deacbf29";
    } "afc36ace-0239-4102-beab-741fed731cac";
  } "setSafeguardingSubject";
  src.extension as participantsExt where $this.url='https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/Extension-MODS-ParticipantCareActor' -> tgt.careWorker as careWorker then {
    participantsExt.extension as careWorkers where $this.url='participantRole'and$this.valueCode='performer' then {
      participantsExt.extension as careWorkerParticipantReferences where $this.url='participantReference' then {
        careWorkerParticipantReferences.valueReference as careWorkerParticipantRef then {
          src -> careWorker.id = evaluate(careWorkerParticipantRef, reference.replace('Practitioner/','')) "bd94cd9c-8cac-4aa2-a301-8bac187516c2";
          src -> careWorker.type = 'CareWorker' "dbb093a6-8870-46e9-9082-ebc2db755fbe";
          src -> careWorker.display = evaluate(careWorkerParticipantRef, display) "bb4c0534-4b5e-4304-8366-afebcefe79fc";
        };
      };
    };
  } "setSafeguardingCareWorker";
  src.effectivePeriod as period then {
    period.start as start then {
      src -> tgt.identifiedDateTime = evaluate(period, start) "97434c73-2c11-4a50-9a87-fa4e3326dcaf";
    };
    period.end as end then {
      src -> tgt.endedDateTime = evaluate(period, end) "790e61f2-75c4-4104-920d-1fe5134c2e4e";
    };
  } "setSafeguardingStartEndDates";
  src.component as component where $this.valueCodeableConcept.coding.system='http://snomed.info/sct' then {
    src -> tgt.coding as coding then {
      component.valueCodeableConcept as vcc, vcc.coding as vc then {
        src -> coding.code = evaluate(vc, code) "a735ab99-3bbc-42d2-afaf-bd8353cdf6e0";
        src -> coding.display = evaluate(vc, display) "e82e74e0-0603-4fa9-aa36-2ed9ac81b0af";
      } "valueCodeableConcept";
    } "16af1649-d0f2-41ad-9c19-7ef95e2ef3db";
  } "setSafeguardingCode";
  src.component as component where $this.code.coding.code='text' then {
    src -> tgt.text = evaluate(component, valueString) "5d081f9a-787d-4163-a851-ec0e1adacc7c";
  } "setSafeguardingText";
  src.component as component where $this.code.coding.code='gp-informed' then {
    src -> tgt.gpInformed as gpInformed then {
      component.valueCodeableConcept as vcc, vcc.coding as vc then {
        src -> gpInformed.code = evaluate(vc, code) "bad99e49-ae0b-4d95-991b-499d22348685";
        src -> gpInformed.display = evaluate(vc, display) "821f9a44-de66-4db6-bd3d-6847415e0a88";
      } "valueCodeableConcept";
    } "378a813d-ae4b-4a99-af77-21282252caea";
  } "setGpInformed";
  src.component as component where $this.code.coding.code='police-aware' then {
    src -> tgt.policeAware as policeAware then {
      component.valueCodeableConcept as vcc, vcc.coding as vc then {
        src -> policeAware.code = evaluate(vc, code) "a70041dc-8b50-4cc3-8cdc-330ff132eb9b";
        src -> policeAware.display = evaluate(vc, display) "8101f4cd-eb24-43cd-ad08-074762ffab13";
      } "valueCodeableConcept";
    } "bfa0cf67-a618-4500-8ab3-5d6754a8d79c";
  } "setPoliceAware";
}