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-03-24 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' "3962abac-af28-4327-ab68-7caa99f87b8d";
  } "setDataClassName";
  src.patient as patient then {
    src -> tgt.subjectOfCare as subjectOfCare then {
      src -> subjectOfCare.id = evaluate(patient, reference.replace('Patient/','')) "f1ead33b-b3a9-4663-bbd9-069092e273cf";
      src -> subjectOfCare.type = 'SubjectOfCare' "e9525080-6679-4c08-8964-80750507d37f";
      src -> subjectOfCare.display = evaluate(patient, display) "ad81f3dd-86eb-4da9-925e-c183b848a391";
    } "7abc1d2b-e964-4093-aa38-e4a0fc2f12ff";
  } "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' "969a90c2-b837-46ed-b0c1-1a5041beab0b";
      src -> relationship.code = evaluate(relationshipCodeableConcept, coding.code) "c15501ec-5665-4143-96cd-5da339065397";
      src -> relationship.display = evaluate(relationshipCodeableConcept, coding.display) "f1a41f9f-69bd-4407-b0ae-9452e726e2fa";
    } "8622ee2e-a48b-44f5-8fc7-e41029dd62a4";
  } "setProxyRelationship";
  src -> tgt.name as name then {
    src.name as humanName then {
      src -> name.given = evaluate(humanName, given) "50623afe-a95a-4503-8470-015a6c042835";
      src -> name.family = evaluate(humanName, family) "fde0cd17-a67f-45a5-b751-2c782565090d";
    } "setProxyFamilyAndGivenName";
  } "setProxyName";
  src.address as address -> src.addresses as addresses then {
    addresses as addr then {
      address -> addr.addressEntry1 = evaluate(address, line[0]) "e05ed7c5-de2c-4dcf-a61d-d65d25c22e71";
      address -> addr.addressEntry2 = evaluate(address, line[1]) "eb789793-140c-4101-80d2-86d338377b11";
      address -> addr.addressEntry3 = evaluate(address, line[2]) "8e8bd8c5-c226-4be4-9196-3af02f0f74d7";
      address -> addr.addressEntry4 = evaluate(address, line[3]) "76b791a2-1ef3-465b-b7d7-b2d0e975837f";
      address -> addr.postCode = evaluate(address, postalCode) "e7361fe5-f432-46b3-8aab-e945dc1fa4fe";
      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' "ed6d2b05-7402-4dca-84e8-b54ebe83595b";
          address -> country.code = evaluate(countryExt, valueCoding.code) "8e995954-3551-479c-9abe-470f12e691d3";
          address -> country.display = evaluate(countryExt, valueCoding.display) "aec6988f-b119-452a-8799-d9fdeba2a6f7";
        } "68e7bbdd-e76e-480c-9668-3c3f9785844e";
      };
    } "1fadf555-c8b2-4ea3-a3b0-69cc7f0dd34c";
    addresses -> tgt.address "0ceffdae-391c-46a7-be2c-8f2e326d75df";
  } "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) "852fbd38-2bab-4798-9e9a-47347446e3c1";
      src -> emailAddressDetails.preferredOrder = evaluate(emailAddress, rank) "1d8fab4d-380e-48a0-bf21-3475ec3aa622";
      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' "799e594a-e1ae-461f-b511-12fa9230becc";
          src -> emailAddressType.code = evaluate(emailAddressTypeExt, valueCoding.code) "ac0f5c3a-cff5-4ef2-94d5-71a40c2e81c8";
          src -> emailAddressType.display = evaluate(emailAddressTypeExt, valueCoding.display) "ab1af801-bd61-468d-86d1-197a0caae4bf";
        } "c8c18109-be37-4266-bd00-0b7083daf158";
      };
    };
    src.telecom as telephoneNumber where $this.system='phone' -> contactDetails.telephoneDetails as telephoneNumberDetails then {
      src -> telephoneNumberDetails.telephoneNumber = evaluate(telephoneNumber, value) "df200086-4111-4fc0-a773-6ca4d66e52de";
      src -> telephoneNumberDetails.preferredOrder = evaluate(telephoneNumber, rank) "28039973-32d4-4d16-adc5-5d764bc8956d";
      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' "1b991f78-0946-4a80-94ff-0b6214ad8a11";
          src -> telephoneNumberType.code = evaluate(telephoneNumberExt, valueCoding.code) "a291ccde-c5fd-4762-b037-3465f13ea674";
          src -> telephoneNumberType.display = evaluate(telephoneNumberExt, valueCoding.display) "8fcd7d68-9796-4d7d-a334-f246f9d6b484";
        } "683b404c-2ab5-4f03-a0b9-0d24e5a64916";
      };
    };
  } "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) "416b8dcb-e752-4822-a464-1c10fc33a8f9";
      src -> organisation.type = 'CareOrganisation' "6e6c8b87-c6db-404a-8af2-f8086f0ff727";
      src -> organisation.display = evaluate(careProviderReference, display) "2a557171-8d94-46f2-9505-9639873c3294";
    };
  } "setProxyOrganisation";
}