Class: USCoreTestKit::Generator::MustSupportMetadataExtractorUsCore3

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(profile, must_supports) ⇒ MustSupportMetadataExtractorUsCore3

Returns a new instance of MustSupportMetadataExtractorUsCore3.



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

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.



4
5
6
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 4

def must_supports
  @must_supports
end

#profileObject

Returns the value of attribute profile.



4
5
6
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 4

def profile
  @profile
end

Instance Method Details

#add_must_support_choicesObject



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 17

def add_must_support_choices
  choices = []

  case profile.type
  when 'Device'
    choices << { paths: ['udiCarrier.carrierAIDC', 'udiCarrier.carrierHRF'] }
  when 'DocumentReference'
    choices << { paths: ['content.attachment.data', 'content.attachment.url'] }
  end

  must_supports[:choices] = choices if choices.present?
end

#handle_special_casesObject



11
12
13
14
15
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 11

def handle_special_cases
  add_must_support_choices
  update_patient_previous_name_address
  remove_document_reference_custodian
end

#remove_document_reference_custodianObject

US Core clarified that server implmentation is not required to support DocumentReference.custodian (FHIR-28393)



99
100
101
102
103
104
105
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 99

def remove_document_reference_custodian
  return unless profile.type == 'DocumentReference'

  must_supports[:elements].delete_if do |element|
    element[:path] == 'custodian'
  end
end

#update_patient_previous_name_addressObject

FHIR-40299 adds USCDI MustSupport choices for:

  • address.period.end and address.use,

  • name.period.end and name.use



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/us_core_test_kit/generator/must_support_metadata_extractor_us_core_3.rb', line 33

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

  name_period_exists = false
  name_use_exists = false
  address_period_exists = false
  address_use_exists = false

  must_supports[:elements].each do |element|
    case element[:path]
    when 'name.period'
      element[:path] = 'name.period.end'
      element[:uscdi_only] = true
      name_period_exists = true
    when 'name.use'
      element[:fixed_value] = 'old'
      element[:uscdi_only] = true
      name_use_exists = true
    when 'address.period'
      element[:path] = 'address.period.end'
      element[:uscdi_only] = true
      address_period_exists = true
    when 'address.use'
      element[:fixed_value] = 'old'
      element[:uscdi_only] = true
      address_use_exists = true
    end
  end

  must_supports[:elements] << {
    path: 'name.period.end',
    uscdi_only: true
  } unless name_period_exists

  must_supports[:elements] << {
    path: 'name.use',
    fixed_value: 'old',
    uscdi_only: true
  } unless name_use_exists

  must_supports[:elements] << {
    path: 'address.period.end',
    uscdi_only: true
  } unless address_period_exists

  must_supports[:elements] << {
    path: 'address.use',
    fixed_value: 'old',
    uscdi_only: true
  } unless address_use_exists

  must_supports[:choices] ||= []

  must_supports[:choices] << {
    paths: ['address.period.end', 'address.use'],
    uscdi_only: true
  }

  must_supports[:choices] << {
    paths: ['name.period.end', 'name.use'],
    uscdi_only: true
  }

end