Narrative

  /// url = 'http://hl7.org/fhir/StructureMap/Composition4to5'
  /// name = 'Composition4to5'
  /// title = 'FML Conversion for Composition: R4 to R5'
  /// status = 'active'
  
  conceptmap "CompositionStatus" {
    prefix s = "http://hl7.org/fhir/4.0/composition-status"
    prefix t = "http://hl7.org/fhir/composition-status"
  
    // s:"registered" - t:"registered"
    // s:"partial" - t:"partial"
    s:preliminary - t:preliminary
    s:final - t:final
    s:amended - t:amended
    // s:"corrected" - t:"corrected"
    // s:"appended" - t:"appended"
    // s:"cancelled" - t:"cancelled"
    s:"entered-in-error" - t:"entered-in-error"
    // s:"deprecated" - t:"deprecated"
    // s:"unknown" - t:"unknown"
  }
  
  conceptmap "SectionMode" {
    prefix s = "http://hl7.org/fhir/4.0/list-mode"
    prefix t = "http://hl7.org/fhir/list-mode"
  
    s:working - t:working
    s:snapshot - t:snapshot
    s:changes - t:changes
  }
  
  uses "http://hl7.org/fhir/4.0/StructureDefinition/Composition" alias CompositionR4 as source
  uses "http://hl7.org/fhir/StructureDefinition/Composition" alias CompositionR5 as target
  
  imports "http://hl7.org/fhir/StructureMap/*4to5"
  
  group Composition(source src : CompositionR4, target tgt : CompositionR5) extends DomainResource <<type+>> {
    // Section comment
    // src.url -> tgt.url;
    src.identifier -> tgt.identifier; // comment
    // src.version -> tgt.version;
    src.status as v -> tgt.status = translate(v, '#CompositionStatus', 'code');
    src.type -> tgt.type;
    src.category -> tgt.category;
    src.subject -> tgt.subject;
    src.encounter -> tgt.encounter;
    src.date -> tgt.date;
    // src.useContext -> tgt.useContext;
    src.author -> tgt.author;
    // src.name -> tgt.name;
    src.title -> tgt.title;
    // src.note -> tgt.note;
    src.attester as s -> tgt.attester as t then CompositionAttester(s, t); // another comment at the end
    src.custodian -> tgt.custodian;
    src.relatesTo as s -> tgt.relatesTo as t then CompositionRelatesTo(s, t);
    src.event as s -> tgt.event as t then CompositionEvent(s, t);
    src.section as s -> tgt.section as t then CompositionSection(s, t);
  // comment again
  }
  
  group CompositionAttester(source src, target tgt) extends BackboneElement {
    src.mode as s ->  tgt.mode = create('CodeableConcept') as t,  t.coding = create('Coding') as tc,  tc.system = 'http://hl7.org/fhir/composition-attestation-mode',  tc.code = s;
    src.time -> tgt.time;
    src.party -> tgt.party;
  }
  
  group CompositionEvent(source src, target tgt) extends BackboneElement {
    src.code -> tgt.code;
    src.period -> tgt.period;
    src.detail -> tgt.detail;
  }
  
  group CompositionRelatesTo(source src, target tgt) extends Element {
    src.code -> tgt.type;
    src.target : Identifier as s ->  tgt.resourceReference as t,  t.identifier = s;
    src.target : Reference -> tgt.resourceReference;
  }
  
  group CompositionSection(source src, target tgt) extends BackboneElement {
    src.title -> tgt.title;
    src.code -> tgt.code;
    src.author -> tgt.author;
    src.focus -> tgt.focus;
    src.text -> tgt.text;
    src.mode as v -> tgt.mode = translate(v, '#SectionMode', 'code');
    src.orderedBy -> tgt.orderedBy;
    src.entry -> tgt.entry;
    src.emptyReason -> tgt.emptyReason;
  }