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: RelatedPersonToProxyForSubjectOfCare

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

map "https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureMap/RelatedPerson-ProxyForSubjectOfCare" = "RelatedPersonToProxyForSubjectOfCare"

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

group Proxy(source src : RelatedPerson, target tgt : Proxy) {
  src -> tgt.id = evaluate(src, id) "setProxyId";
  src ->  tgt.meta as meta,  meta.dataClass as dataClass then {
    src -> dataClass.name = 'Proxy for Subject of Care' "bd5f2262-5fa0-441c-8732-43a92465a378";
  } "setDataClassName";
  src.patient as patient then {
    src -> tgt.subjectOfCare as subjectOfCare then {
      src -> subjectOfCare.id = evaluate(patient, reference.replace('Patient/','')) "eac4254c-41af-432b-b0e5-3f5ceba39c2f";
      src -> subjectOfCare.type = 'SubjectOfCare' "fea9e9c7-f22c-4e79-a551-676c6aa2eea6";
      src -> subjectOfCare.display = evaluate(patient, display) "eebf9127-2285-4ee4-bc48-59262d6f3964";
    } "dd9e83d7-012d-45ad-9292-e962f3bdd122";
  } "setProxySubject";
  src.relationship as relationshipCodeableConcept then {
    src -> tgt.relationship as relationship then {
      src -> relationship.system = 'https://data.digitisingsocialcare.co.uk/mods/v1/person-marital-status' "ab8f9ba0-b692-4137-9398-580b1599ad5f";
      src -> relationship.code = evaluate(relationshipCodeableConcept, coding.code) "17682885-a9f2-483f-bd0c-a6a90771810f";
      src -> relationship.display = evaluate(relationshipCodeableConcept, coding.display) "9301d71b-7547-4eea-8dfc-9c0213f76eab";
    } "d3d86dbb-e026-4fbd-b7b3-d1af899974ce";
  } "setProxyRelationship";
  src -> tgt.name as name then {
    src.name as humanName then {
      src -> name.given = evaluate(humanName, given) "084df918-6967-4652-bc27-306bf4ea2536";
      src -> name.family = evaluate(humanName, family) "2c19a053-6ec0-4827-8bf5-813befe8a5f4";
    } "setProxyFamilyAndGivenName";
  } "setProxyName";
  src.address as address -> src.addresses as addresses then {
    addresses as addr then {
      address -> addr.addressEntry1 = evaluate(address, line[0]) "1f400c35-a0bb-40e0-a818-f8e05fde41dd";
      address -> addr.addressEntry2 = evaluate(address, line[1]) "39e642d4-4fc0-42b1-bd67-3bee7b288a25";
      address -> addr.addressEntry3 = evaluate(address, line[2]) "e6c660e0-7afb-4439-88ce-e3c2ccb25f2a";
      address -> addr.addressEntry4 = evaluate(address, line[3]) "40b85216-b7b5-46b0-9471-5aaf0efaf43a";
      address -> addr.postCode = evaluate(address, postalCode) "d454b3ff-adb1-4e9f-809e-6285ae8d1678";
      address.extension as countryExt where $this.url='https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/Extension-MODS-AddressCountry' then {
        address -> addr.country as country then {
          address -> country.system = 'https://data.digitisingsocialcare.co.uk/mods/v1/country' "bad6cfb5-db16-4c45-b5cc-9c22ebc96126";
          address -> country.code = evaluate(countryExt, valueCoding.code) "893f09d4-5aa3-464b-a86f-0ec923fb2662";
          address -> country.display = evaluate(countryExt, valueCoding.display) "c5f96b7b-4ebe-4103-b442-51d86462f9f9";
        } "ad239250-2c82-4671-9580-680fc5c1c159";
      };
    } "c1b0e248-80ac-4281-acc5-2d14370b3337";
    addresses -> tgt.address "811c02ca-c90e-49a9-b340-7f848bdec059";
  } "setProxyAddress";
  src -> tgt.contactDetails as contactDetails then {
    src.telecom as emailAddress where $this.system='email' -> contactDetails.emailAddressDetails as emailAddressDetails then {
      src -> emailAddressDetails.emailAddress = evaluate(emailAddress, value) "85409499-ac1a-490c-916f-4f7b2558b034";
      src -> emailAddressDetails.preferredOrder = evaluate(emailAddress, rank) "2dbcbd9d-0343-41b4-ad6c-68eda17ef4b8";
      emailAddress.extension as emailAddressTypeExt where $this.url='https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/Extension-MODS-PersonEmailAddressType' then {
        src -> emailAddressDetails.type as emailAddressType then {
          src -> emailAddressType.system = 'https://data.digitisingsocialcare.co.uk/mods/v1/person-email-address-type' "f9b33ebe-da9e-4f44-9b20-ee007b180864";
          src -> emailAddressType.code = evaluate(emailAddressTypeExt, valueCoding.code) "6745ad25-20e4-4bae-a5e7-19a6df367c13";
          src -> emailAddressType.display = evaluate(emailAddressTypeExt, valueCoding.display) "f4d1ad39-e2de-44f7-bfd3-41c62414613c";
        } "3c3ebdef-62b9-4b4a-94a8-05522b03e443";
      };
    };
    src.telecom as telephoneNumber where $this.system='phone' -> contactDetails.telephoneDetails as telephoneNumberDetails then {
      src -> telephoneNumberDetails.telephoneNumber = evaluate(telephoneNumber, value) "d6acef1e-06f3-4cc7-a7cd-ab9852529096";
      src -> telephoneNumberDetails.preferredOrder = evaluate(telephoneNumber, rank) "9435538f-d874-4a08-bdd2-40893425ade1";
      telephoneNumber.extension as telephoneNumberExt where $this.url='https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/Extension-MODS-PersonTelephoneNumberType' then {
        src -> telephoneNumberDetails.type as telephoneNumberType then {
          src -> telephoneNumberType.system = 'https://data.digitisingsocialcare.co.uk/mods/v1/person-telephone-type' "a2b10265-dca9-4d7a-8d13-2075921cde9e";
          src -> telephoneNumberType.code = evaluate(telephoneNumberExt, valueCoding.code) "f8ebd68c-7283-43f1-bbce-706db793eb9b";
          src -> telephoneNumberType.display = evaluate(telephoneNumberExt, valueCoding.display) "2cda0ece-f28d-437b-b511-681af091b1cd";
        } "b1e08b43-96fd-484c-b9a1-6d5e71c426ea";
      };
    };
  } "setProxyContactDetails";
  src.extension as careProviderExt where $this.url='https://metadata.phase2.scip.synanetics.cloud/fhir/r4/StructureDefinition/Extension-MODS-PersonCareProvider' -> tgt.organisation as organisation then {
    careProviderExt.valueReference as careProviderReference then {
      src -> organisation.id = evaluate(careProviderReference, identifier.value) "55cb11ed-a9d7-4def-a020-894ede8f03d4";
      src -> organisation.type = 'CareOrganisation' "46ed7b30-2987-41ad-9603-0a7db4d8e96c";
      src -> organisation.display = evaluate(careProviderReference, display) "45da40dc-a86b-4298-a266-cb41f0769870";
    };
  } "setProxyOrganisation";
}