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: Dosage Transforms: R3 to R4

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

DosageTransformsR3toR4

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

uses "http://hl7.org/fhir/3.0/Dosage" alias DosageR3 as source
uses "http://hl7.org/fhir/4.0/Dosage" alias Dosage as target

imports "http://hl7.org/fhir/StructureMap/*3to4"

group Dosage(source src : DosageR3, target tgt : Dosage) extends BackboneElement <<type+>> {
  src.sequence -> tgt.sequence;
  src.text -> tgt.text;
  src.additionalInstruction -> tgt.additionalInstruction;
  src.patientInstruction -> tgt.patientInstruction;
  src.timing -> tgt.timing;
  src.asNeeded : boolean as vs -> tgt.asNeeded = create('boolean') as vt then boolean(vs, vt);
  src.asNeeded : CodeableConcept as vs -> tgt.asNeeded = create('CodeableConcept') as vt then CodeableConcept(vs, vt);
  src.site -> tgt.site;
  src.route -> tgt.route;
  src.method -> tgt.method;
  src where dose.exists() or rate.exists() -> tgt.doseAndRate as vt0 then doseAndRate(src, vt0) "doserate";
  src.maxDosePerPeriod -> tgt.maxDosePerPeriod;
  src.maxDosePerAdministration -> tgt.maxDosePerAdministration;
  src.maxDosePerLifetime -> tgt.maxDosePerLifetime;
}

group doseAndRate(source src, target tgt) {
  src.dose : Range as vs -> tgt.dose = create('Range') as vt then Range(vs, vt);
  src.dose : Quantity as vs -> tgt.dose = create('Quantity') as vt then Quantity(vs, vt);
  src.rate : Ratio as vs -> tgt.rate = create('Ratio') as vt then Ratio(vs, vt);
  src.rate : Range as vs -> tgt.rate = create('Range') as vt then Range(vs, vt);
  src.rate : Quantity as vs -> tgt.rate = create('Quantity') as vt then Quantity(vs, vt);
}