Class: USCoreTestKit::Generator::MustSupportMetadataExtractorUsCore5

Inherits:
Object
  • Object
show all
Defined in:
lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(profile, must_supports) ⇒ MustSupportMetadataExtractorUsCore5

Returns a new instance of MustSupportMetadataExtractorUsCore5.



8
9
10
11
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 8

def initialize(profile, must_supports)
  self.profile = profile
  self.must_supports = must_supports
end

Instance Attribute Details

#must_supportsObject

Returns the value of attribute must_supports.



6
7
8
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 6

def must_supports
  @must_supports
end

#profileObject

Returns the value of attribute profile.



6
7
8
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 6

def profile
  @profile
end

Instance Method Details

#add_must_support_choicesObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 24

def add_must_support_choices
  us_core_4_extractor.add_must_support_choices

  more_choices = []

  case profile.type
  when 'CareTeam'
    more_choices << {
      target_profiles: [
        'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner',
        'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitionerrole'
      ]
    }
  when 'Condition'
    more_choices << {
      paths: ['onsetDateTime'],
      extension_ids: ['Condition.extension:assertedDate']
    }
  end

  if more_choices.present?
    must_supports[:choices] ||= []
    must_supports[:choices].concat(more_choices)
  end
end

#add_patient_uscdi_elementsObject



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 50

def add_patient_uscdi_elements
  return unless profile.type == 'Patient'

  us_core_4_extractor.add_patient_uscdi_elements

  must_supports[:extensions] << {
    id: 'Patient.extension:genderIdentity',
    path: 'extension',
    url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-genderIdentity',
    uscdi_only: true
  }
end

#add_value_set_expansionObject



63
64
65
66
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 63

def add_value_set_expansion
  add_document_reference_category_values
  add_service_request_category_values
end

#handle_special_casesObject



18
19
20
21
22
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 18

def handle_special_cases
  add_must_support_choices
  add_patient_uscdi_elements
  remove_survey_questionnaire_response
end

#remove_survey_questionnaire_responseObject

FHIR-37794 Server systems are not required to support US Core QuestionnaireResponse



69
70
71
72
73
74
75
76
77
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 69

def remove_survey_questionnaire_response
  return unless profile.type == 'Observation' &&
    ['us-core-observation-survey', 'us-core-observation-sdoh-assessment'].include?(profile.id)

  element = must_supports[:elements].find { |element| element[:path] == 'derivedFrom' }
  element[:target_profiles].delete_if do |url|
    url == 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse'
  end
end

#us_core_4_extractorObject



14
15
16
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_5.rb', line 14

def us_core_4_extractor
  @us_core_4_extractor ||= MustSupportMetadataExtractorUsCore4.new(profile, must_supports)
end