FHIR Cross-Version Mapping Pack
0.1.0 - Ballot for Release 5.1.0 International flag

FHIR Cross-Version Mapping Pack, published by HL7 International / FHIR Infrastructure. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-cross-version/ and changes regularly. See the Directory of published versions

StructureMap: ElementDefinition Transforms: R4 to R3

Official URL: http://hl7.org/fhir/StructureMap/ElementDefinition4to3 Version: 0.1.0
Standards status: Draft Maturity Level: 1 Computable Name: ElementDefinition4to3

ElementDefinitionTransformsR4toR3

/// url = 'http://hl7.org/fhir/StructureMap/ElementDefinition4to3'
/// name = 'ElementDefinition4to3'
/// title = 'ElementDefinition Transforms: R4 to R3'
/// status = 'active'

uses "http://hl7.org/fhir/4.0/ElementDefinition" alias ElementDefinition as source
uses "http://hl7.org/fhir/3.0/ElementDefinition" alias ElementDefinitionR3 as target

imports "http://hl7.org/fhir/StructureMap/*4to3"

group ElementDefinition(source src : ElementDefinition, target tgt : ElementDefinitionR3) extends BackboneElement <<type+>> {
  src.path -> tgt.path;
  src.representation -> tgt.representation;
  src.sliceName -> tgt.sliceName;
  src.label -> tgt.label;
  src.code -> tgt.code;
  src.slicing as vs0 -> tgt.slicing as vt0 then slicing(vs0, vt0);
  src.short -> tgt.short;
  src.definition -> tgt.definition;
  src.comment -> tgt.comment;
  src.requirements -> tgt.requirements;
  src.alias -> tgt.alias;
  src.min -> tgt.min;
  src.max -> tgt.max;
  src.base as vs0 -> tgt.base as vt0 then base(vs0, vt0);
  src.type as vs0 -> tgt.type as vt0 then type(vs0, vt0);
  src.contentReference -> tgt.contentReference;
  src.defaultValue : base64Binary as vs -> tgt.defaultValue = create('base64Binary') as vt then base64Binary(vs, vt);
  src.defaultValue : boolean as vs -> tgt.defaultValue = create('boolean') as vt then boolean(vs, vt);
  src.defaultValue : code as vs -> tgt.defaultValue = create('code') as vt then code(vs, vt);
  src.defaultValue : date as vs -> tgt.defaultValue = create('date') as vt then date(vs, vt);
  src.defaultValue : dateTime as vs -> tgt.defaultValue = create('dateTime') as vt then dateTime(vs, vt);
  src.defaultValue : decimal as vs -> tgt.defaultValue = create('decimal') as vt then decimal(vs, vt);
  src.defaultValue : id as vs -> tgt.defaultValue = create('id') as vt then id(vs, vt);
  src.defaultValue : instant as vs -> tgt.defaultValue = create('instant') as vt then instant(vs, vt);
  src.defaultValue : integer as vs -> tgt.defaultValue = create('integer') as vt then integer(vs, vt);
  src.defaultValue : markdown as vs -> tgt.defaultValue = create('markdown') as vt then markdown(vs, vt);
  src.defaultValue : oid as vs -> tgt.defaultValue = create('oid') as vt then oid(vs, vt);
  src.defaultValue : positiveInt as vs -> tgt.defaultValue = create('positiveInt') as vt then positiveInt(vs, vt);
  src.defaultValue : string as vs -> tgt.defaultValue = create('string') as vt then string(vs, vt);
  src.defaultValue : time as vs -> tgt.defaultValue = create('time') as vt then time(vs, vt);
  src.defaultValue : unsignedInt as vs -> tgt.defaultValue = create('unsignedInt') as vt then unsignedInt(vs, vt);
  src.defaultValue : uri as vs -> tgt.defaultValue = create('uri') as vt then uri(vs, vt);
  src.defaultValue : Address as vs -> tgt.defaultValue = create('Address') as vt then Address(vs, vt);
  src.defaultValue : Age as vs -> tgt.defaultValue = create('Age') as vt then Age(vs, vt);
  src.defaultValue : Annotation as vs -> tgt.defaultValue = create('Annotation') as vt then Annotation(vs, vt);
  src.defaultValue : Attachment as vs -> tgt.defaultValue = create('Attachment') as vt then Attachment(vs, vt);
  src.defaultValue : CodeableConcept as vs -> tgt.defaultValue = create('CodeableConcept') as vt then CodeableConcept(vs, vt);
  src.defaultValue : Coding as vs -> tgt.defaultValue = create('Coding') as vt then Coding(vs, vt);
  src.defaultValue : ContactPoint as vs -> tgt.defaultValue = create('ContactPoint') as vt then ContactPoint(vs, vt);
  src.defaultValue : Count as vs -> tgt.defaultValue = create('Count') as vt then Count(vs, vt);
  src.defaultValue : Distance as vs -> tgt.defaultValue = create('Distance') as vt then Distance(vs, vt);
  src.defaultValue : Duration as vs -> tgt.defaultValue = create('Duration') as vt then Duration(vs, vt);
  src.defaultValue : HumanName as vs -> tgt.defaultValue = create('HumanName') as vt then HumanName(vs, vt);
  src.defaultValue : Identifier as vs -> tgt.defaultValue = create('Identifier') as vt then Identifier(vs, vt);
  src.defaultValue : Money as vs -> tgt.defaultValue = create('Money') as vt then Money(vs, vt);
  src.defaultValue : Period as vs -> tgt.defaultValue = create('Period') as vt then Period(vs, vt);
  src.defaultValue : Quantity as vs -> tgt.defaultValue = create('Quantity') as vt then Quantity(vs, vt);
  src.defaultValue : Range as vs -> tgt.defaultValue = create('Range') as vt then Range(vs, vt);
  src.defaultValue : Ratio as vs -> tgt.defaultValue = create('Ratio') as vt then Ratio(vs, vt);
  src.defaultValue : Reference as vs -> tgt.defaultValue = create('Reference') as vt then Reference(vs, vt);
  src.defaultValue : SampledData as vs -> tgt.defaultValue = create('SampledData') as vt then SampledData(vs, vt);
  src.defaultValue : Signature as vs -> tgt.defaultValue = create('Signature') as vt then Signature(vs, vt);
  src.defaultValue : Timing as vs -> tgt.defaultValue = create('Timing') as vt then Timing(vs, vt);
  src.meaningWhenMissing -> tgt.meaningWhenMissing;
  src.orderMeaning -> tgt.orderMeaning;
  src.fixed : base64Binary as vs -> tgt.fixed = create('base64Binary') as vt then base64Binary(vs, vt);
  src.fixed : boolean as vs -> tgt.fixed = create('boolean') as vt then boolean(vs, vt);
  src.fixed : code as vs -> tgt.fixed = create('code') as vt then code(vs, vt);
  src.fixed : date as vs -> tgt.fixed = create('date') as vt then date(vs, vt);
  src.fixed : dateTime as vs -> tgt.fixed = create('dateTime') as vt then dateTime(vs, vt);
  src.fixed : decimal as vs -> tgt.fixed = create('decimal') as vt then decimal(vs, vt);
  src.fixed : id as vs -> tgt.fixed = create('id') as vt then id(vs, vt);
  src.fixed : instant as vs -> tgt.fixed = create('instant') as vt then instant(vs, vt);
  src.fixed : integer as vs -> tgt.fixed = create('integer') as vt then integer(vs, vt);
  src.fixed : markdown as vs -> tgt.fixed = create('markdown') as vt then markdown(vs, vt);
  src.fixed : oid as vs -> tgt.fixed = create('oid') as vt then oid(vs, vt);
  src.fixed : positiveInt as vs -> tgt.fixed = create('positiveInt') as vt then positiveInt(vs, vt);
  src.fixed : string as vs -> tgt.fixed = create('string') as vt then string(vs, vt);
  src.fixed : time as vs -> tgt.fixed = create('time') as vt then time(vs, vt);
  src.fixed : unsignedInt as vs -> tgt.fixed = create('unsignedInt') as vt then unsignedInt(vs, vt);
  src.fixed : uri as vs -> tgt.fixed = create('uri') as vt then uri(vs, vt);
  src.fixed : Address as vs -> tgt.fixed = create('Address') as vt then Address(vs, vt);
  src.fixed : Age as vs -> tgt.fixed = create('Age') as vt then Age(vs, vt);
  src.fixed : Annotation as vs -> tgt.fixed = create('Annotation') as vt then Annotation(vs, vt);
  src.fixed : Attachment as vs -> tgt.fixed = create('Attachment') as vt then Attachment(vs, vt);
  src.fixed : CodeableConcept as vs -> tgt.fixed = create('CodeableConcept') as vt then CodeableConcept(vs, vt);
  src.fixed : Coding as vs -> tgt.fixed = create('Coding') as vt then Coding(vs, vt);
  src.fixed : ContactPoint as vs -> tgt.fixed = create('ContactPoint') as vt then ContactPoint(vs, vt);
  src.fixed : Count as vs -> tgt.fixed = create('Count') as vt then Count(vs, vt);
  src.fixed : Distance as vs -> tgt.fixed = create('Distance') as vt then Distance(vs, vt);
  src.fixed : Duration as vs -> tgt.fixed = create('Duration') as vt then Duration(vs, vt);
  src.fixed : HumanName as vs -> tgt.fixed = create('HumanName') as vt then HumanName(vs, vt);
  src.fixed : Identifier as vs -> tgt.fixed = create('Identifier') as vt then Identifier(vs, vt);
  src.fixed : Money as vs -> tgt.fixed = create('Money') as vt then Money(vs, vt);
  src.fixed : Period as vs -> tgt.fixed = create('Period') as vt then Period(vs, vt);
  src.fixed : Quantity as vs -> tgt.fixed = create('Quantity') as vt then Quantity(vs, vt);
  src.fixed : Range as vs -> tgt.fixed = create('Range') as vt then Range(vs, vt);
  src.fixed : Ratio as vs -> tgt.fixed = create('Ratio') as vt then Ratio(vs, vt);
  src.fixed : Reference as vs -> tgt.fixed = create('Reference') as vt then Reference(vs, vt);
  src.fixed : SampledData as vs -> tgt.fixed = create('SampledData') as vt then SampledData(vs, vt);
  src.fixed : Signature as vs -> tgt.fixed = create('Signature') as vt then Signature(vs, vt);
  src.fixed : Timing as vs -> tgt.fixed = create('Timing') as vt then Timing(vs, vt);
  src.pattern : base64Binary as vs -> tgt.pattern = create('base64Binary') as vt then base64Binary(vs, vt);
  src.pattern : boolean as vs -> tgt.pattern = create('boolean') as vt then boolean(vs, vt);
  src.pattern : code as vs -> tgt.pattern = create('code') as vt then code(vs, vt);
  src.pattern : date as vs -> tgt.pattern = create('date') as vt then date(vs, vt);
  src.pattern : dateTime as vs -> tgt.pattern = create('dateTime') as vt then dateTime(vs, vt);
  src.pattern : decimal as vs -> tgt.pattern = create('decimal') as vt then decimal(vs, vt);
  src.pattern : id as vs -> tgt.pattern = create('id') as vt then id(vs, vt);
  src.pattern : instant as vs -> tgt.pattern = create('instant') as vt then instant(vs, vt);
  src.pattern : integer as vs -> tgt.pattern = create('integer') as vt then integer(vs, vt);
  src.pattern : markdown as vs -> tgt.pattern = create('markdown') as vt then markdown(vs, vt);
  src.pattern : oid as vs -> tgt.pattern = create('oid') as vt then oid(vs, vt);
  src.pattern : positiveInt as vs -> tgt.pattern = create('positiveInt') as vt then positiveInt(vs, vt);
  src.pattern : string as vs -> tgt.pattern = create('string') as vt then string(vs, vt);
  src.pattern : time as vs -> tgt.pattern = create('time') as vt then time(vs, vt);
  src.pattern : unsignedInt as vs -> tgt.pattern = create('unsignedInt') as vt then unsignedInt(vs, vt);
  src.pattern : uri as vs -> tgt.pattern = create('uri') as vt then uri(vs, vt);
  src.pattern : Address as vs -> tgt.pattern = create('Address') as vt then Address(vs, vt);
  src.pattern : Age as vs -> tgt.pattern = create('Age') as vt then Age(vs, vt);
  src.pattern : Annotation as vs -> tgt.pattern = create('Annotation') as vt then Annotation(vs, vt);
  src.pattern : Attachment as vs -> tgt.pattern = create('Attachment') as vt then Attachment(vs, vt);
  src.pattern : CodeableConcept as vs -> tgt.pattern = create('CodeableConcept') as vt then CodeableConcept(vs, vt);
  src.pattern : Coding as vs -> tgt.pattern = create('Coding') as vt then Coding(vs, vt);
  src.pattern : ContactPoint as vs -> tgt.pattern = create('ContactPoint') as vt then ContactPoint(vs, vt);
  src.pattern : Count as vs -> tgt.pattern = create('Count') as vt then Count(vs, vt);
  src.pattern : Distance as vs -> tgt.pattern = create('Distance') as vt then Distance(vs, vt);
  src.pattern : Duration as vs -> tgt.pattern = create('Duration') as vt then Duration(vs, vt);
  src.pattern : HumanName as vs -> tgt.pattern = create('HumanName') as vt then HumanName(vs, vt);
  src.pattern : Identifier as vs -> tgt.pattern = create('Identifier') as vt then Identifier(vs, vt);
  src.pattern : Money as vs -> tgt.pattern = create('Money') as vt then Money(vs, vt);
  src.pattern : Period as vs -> tgt.pattern = create('Period') as vt then Period(vs, vt);
  src.pattern : Quantity as vs -> tgt.pattern = create('Quantity') as vt then Quantity(vs, vt);
  src.pattern : Range as vs -> tgt.pattern = create('Range') as vt then Range(vs, vt);
  src.pattern : Ratio as vs -> tgt.pattern = create('Ratio') as vt then Ratio(vs, vt);
  src.pattern : Reference as vs -> tgt.pattern = create('Reference') as vt then Reference(vs, vt);
  src.pattern : SampledData as vs -> tgt.pattern = create('SampledData') as vt then SampledData(vs, vt);
  src.pattern : Signature as vs -> tgt.pattern = create('Signature') as vt then Signature(vs, vt);
  src.pattern : Timing as vs -> tgt.pattern = create('Timing') as vt then Timing(vs, vt);
  src.example as vs0 -> tgt.example as vt0 then {
    vs0.label -> vt0.label;
    vs0.value : base64Binary as vs -> vt0.value = create('base64Binary') as vt then base64Binary(vs, vt);
    vs0.value : boolean as vs -> vt0.value = create('boolean') as vt then boolean(vs, vt);
    vs0.value : code as vs -> vt0.value = create('code') as vt then code(vs, vt);
    vs0.value : date as vs -> vt0.value = create('date') as vt then date(vs, vt);
    vs0.value : dateTime as vs -> vt0.value = create('dateTime') as vt then dateTime(vs, vt);
    vs0.value : decimal as vs -> vt0.value = create('decimal') as vt then decimal(vs, vt);
    vs0.value : id as vs -> vt0.value = create('id') as vt then id(vs, vt);
    vs0.value : instant as vs -> vt0.value = create('instant') as vt then instant(vs, vt);
    vs0.value : integer as vs -> vt0.value = create('integer') as vt then integer(vs, vt);
    vs0.value : markdown as vs -> vt0.value = create('markdown') as vt then markdown(vs, vt);
    vs0.value : oid as vs -> vt0.value = create('oid') as vt then oid(vs, vt);
    vs0.value : positiveInt as vs -> vt0.value = create('positiveInt') as vt then positiveInt(vs, vt);
    vs0.value : string as vs -> vt0.value = create('string') as vt then string(vs, vt);
    vs0.value : time as vs -> vt0.value = create('time') as vt then time(vs, vt);
    vs0.value : unsignedInt as vs -> vt0.value = create('unsignedInt') as vt then unsignedInt(vs, vt);
    vs0.value : uri as vs -> vt0.value = create('uri') as vt then uri(vs, vt);
    vs0.value : Address as vs -> vt0.value = create('Address') as vt then Address(vs, vt);
    vs0.value : Age as vs -> vt0.value = create('Age') as vt then Age(vs, vt);
    vs0.value : Annotation as vs -> vt0.value = create('Annotation') as vt then Annotation(vs, vt);
    vs0.value : Attachment as vs -> vt0.value = create('Attachment') as vt then Attachment(vs, vt);
    vs0.value : CodeableConcept as vs -> vt0.value = create('CodeableConcept') as vt then CodeableConcept(vs, vt);
    vs0.value : Coding as vs -> vt0.value = create('Coding') as vt then Coding(vs, vt);
    vs0.value : ContactPoint as vs -> vt0.value = create('ContactPoint') as vt then ContactPoint(vs, vt);
    vs0.value : Count as vs -> vt0.value = create('Count') as vt then Count(vs, vt);
    vs0.value : Distance as vs -> vt0.value = create('Distance') as vt then Distance(vs, vt);
    vs0.value : Duration as vs -> vt0.value = create('Duration') as vt then Duration(vs, vt);
    vs0.value : HumanName as vs -> vt0.value = create('HumanName') as vt then HumanName(vs, vt);
    vs0.value : Identifier as vs -> vt0.value = create('Identifier') as vt then Identifier(vs, vt);
    vs0.value : Money as vs -> vt0.value = create('Money') as vt then Money(vs, vt);
    vs0.value : Period as vs -> vt0.value = create('Period') as vt then Period(vs, vt);
    vs0.value : Quantity as vs -> vt0.value = create('Quantity') as vt then Quantity(vs, vt);
    vs0.value : Range as vs -> vt0.value = create('Range') as vt then Range(vs, vt);
    vs0.value : Ratio as vs -> vt0.value = create('Ratio') as vt then Ratio(vs, vt);
    vs0.value : Reference as vs -> vt0.value = create('Reference') as vt then Reference(vs, vt);
    vs0.value : SampledData as vs -> vt0.value = create('SampledData') as vt then SampledData(vs, vt);
    vs0.value : Signature as vs -> vt0.value = create('Signature') as vt then Signature(vs, vt);
    vs0.value : Timing as vs -> vt0.value = create('Timing') as vt then Timing(vs, vt);
  };
  src.minValue : date as vs -> tgt.minValue = create('date') as vt then date(vs, vt);
  src.minValue : dateTime as vs -> tgt.minValue = create('dateTime') as vt then dateTime(vs, vt);
  src.minValue : instant as vs -> tgt.minValue = create('instant') as vt then instant(vs, vt);
  src.minValue : time as vs -> tgt.minValue = create('time') as vt then time(vs, vt);
  src.minValue : decimal as vs -> tgt.minValue = create('decimal') as vt then decimal(vs, vt);
  src.minValue : integer as vs -> tgt.minValue = create('integer') as vt then integer(vs, vt);
  src.minValue : positiveInt as vs -> tgt.minValue = create('positiveInt') as vt then positiveInt(vs, vt);
  src.minValue : unsignedInt as vs -> tgt.minValue = create('unsignedInt') as vt then unsignedInt(vs, vt);
  src.minValue : Quantity as vs -> tgt.minValue = create('Quantity') as vt then Quantity(vs, vt);
  src.maxValue : date as vs -> tgt.maxValue = create('date') as vt then date(vs, vt);
  src.maxValue : dateTime as vs -> tgt.maxValue = create('dateTime') as vt then dateTime(vs, vt);
  src.maxValue : instant as vs -> tgt.maxValue = create('instant') as vt then instant(vs, vt);
  src.maxValue : time as vs -> tgt.maxValue = create('time') as vt then time(vs, vt);
  src.maxValue : decimal as vs -> tgt.maxValue = create('decimal') as vt then decimal(vs, vt);
  src.maxValue : integer as vs -> tgt.maxValue = create('integer') as vt then integer(vs, vt);
  src.maxValue : positiveInt as vs -> tgt.maxValue = create('positiveInt') as vt then positiveInt(vs, vt);
  src.maxValue : unsignedInt as vs -> tgt.maxValue = create('unsignedInt') as vt then unsignedInt(vs, vt);
  src.maxValue : Quantity as vs -> tgt.maxValue = create('Quantity') as vt then Quantity(vs, vt);
  src.maxLength -> tgt.maxLength;
  src.condition -> tgt.condition;
  src.constraint as vs0 -> tgt.constraint as vt0 then {
    vs0.key -> vt0.key;
    vs0.requirements -> vt0.requirements;
    vs0.severity -> vt0.severity;
    vs0.human -> vt0.human;
    vs0.expression -> vt0.expression;
    vs0.xpath -> vt0.xpath;
    vs0.source -> vt0.source;
  };
  src.mustSupport -> tgt.mustSupport;
  src.isModifier -> tgt.isModifier;
  src.isSummary -> tgt.isSummary;
  src.binding as vs0 -> tgt.binding as vt0 then binding(vs0, vt0) "ElementDefinition-binding";
  src.mapping as vs0 -> tgt.mapping as vt0 then {
    vs0.identity -> vt0.identity;
    vs0.language -> vt0.language;
    vs0.map -> vt0.map;
    vs0.comment -> vt0.comment;
  };
}

group slicing(source src, target tgt) extends Element {
  src.discriminator as vs0 -> tgt.discriminator as vt0 then discriminator(vs0, vt0);
  src.description -> tgt.description;
  src.ordered -> tgt.ordered;
  src.rules -> tgt.rules;
}

group discriminator(source src, target tgt) extends Element {
  src.type -> tgt.type;
  src.path -> tgt.path;
}

group binding(source src, target tgt) extends Element {
  src.strength -> tgt.strength;
  src.description -> tgt.description;
  src.valueSet as vs0 where value.startsWith('http://hl7.org').not() -> tgt.valueSet = create('uri') as vt0 then canonical2Uri(vs0, vt0) "binding-valueSetU";
  src.valueSet as vs0 where value.startsWith('http://hl7.org') -> tgt.valueSet = create('Reference') as vt0 then canonical2Reference(vs0, vt0) "binding-valueSetR";
}

group base(source src, target tgt) extends Element {
  src.path -> tgt.path;
  src.min -> tgt.min;
  src.max -> tgt.max;
}

group type(source src, target tgt) extends Element {
  src.code -> tgt.code;
  src.profile -> tgt.profile;
  src.targetProfile -> tgt.targetProfile;
  src.aggregation -> tgt.aggregation;
  src.versioning -> tgt.versioning;
}