Class: CancerRegistryReportingTestKit::HdeaGenerator::GroupMetadataExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_capabilities, profile_url, ig_metadata, ig_resources) ⇒ GroupMetadataExtractor

Returns a new instance of GroupMetadataExtractor.



13
14
15
16
17
18
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 13

def initialize(resource_capabilities, profile_url, , ig_resources)
  self.resource_capabilities = resource_capabilities
  self.profile_url = profile_url
  self. = 
  self.ig_resources = ig_resources
end

Instance Attribute Details

#ig_metadataObject

Returns the value of attribute ig_metadata.



11
12
13
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 11

def 
  @ig_metadata
end

#ig_resourcesObject

Returns the value of attribute ig_resources.



11
12
13
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 11

def ig_resources
  @ig_resources
end

#profile_urlObject

Returns the value of attribute profile_url.



11
12
13
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 11

def profile_url
  @profile_url
end

#resource_capabilitiesObject

Returns the value of attribute resource_capabilities.



11
12
13
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 11

def resource_capabilities
  @resource_capabilities
end

Instance Method Details

#base_nameObject



101
102
103
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 101

def base_name
  profile_url.split('StructureDefinition/').last
end

#bindingsObject



169
170
171
172
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 169

def bindings
  @bindings ||=
    .terminology_bindings
end

#class_nameObject



109
110
111
112
113
114
115
116
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 109

def class_name
  base_name
    .split('-')
    .map(&:capitalize)
    .join
    # .gsub('UsCore', "USCore#{ig_metadata.reformatted_version}")
    .concat('Sequence')
end

#group_metadataObject



20
21
22
23
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 20

def 
  @group_metadata ||=
    GroupMetadata.new()
end

#group_metadata_hashObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 25

def 
  @group_metadata_hash ||=
    {
      name: name,
      class_name: class_name,
      version: version,
      reformatted_version: reformatted_version,
      resource: resource,
      profile_url: profile_url,
      profile_name: profile_name,
      profile_version: profile_version,
      title: title,
      short_description: short_description,
      must_supports: must_supports,
      mandatory_elements: mandatory_elements
    }

  @group_metadata_hash
end

#mandatory_elementsObject



184
185
186
187
188
189
190
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 184

def mandatory_elements
  @mandatory_elements ||=
    profile_elements
      .select { |element| element.min.positive? }
      .map(&:path)
      .uniq
end

#must_support_metadata_extractorObject



174
175
176
177
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 174

def 
  @must_support_metadata_extractor ||=
    MustSupportMetadataExtractor.new(profile_elements, profile, resource, ig_resources)
end

#must_supportsObject



179
180
181
182
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 179

def must_supports
  @must_supports ||=
    .must_supports
end

#nameObject



105
106
107
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 105

def name
  base_name.tr('-', '_')
end

#profileObject

END SPECIAL CASES ###



87
88
89
90
91
92
93
94
95
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 87

def profile
  if resource_capabilities.title == 'Must Support'
    SpecialCases.MUST_SUPPORT_GROUP_PROFILE
  elsif resource_capabilities.title == 'Validation'
    SpecialCases.VALIDATION_GROUP_PROFILE
  else
    @profile ||= ig_resources.profile_by_url(profile_url)
  end
end

#profile_elementsObject



97
98
99
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 97

def profile_elements
  @profile_elements ||= profile.snapshot.element
end

#profile_nameObject



130
131
132
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 130

def profile_name
  profile.title.gsub('  ', ' ')
end

#profile_versionObject



134
135
136
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 134

def profile_version
  profile.version
end

#referencesObject



192
193
194
195
196
197
198
199
200
201
202
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 192

def references
  @references ||=
    profile_elements
      .select { |element| element.type&.first&.code == 'Reference' }
      .map do |reference_definition|
      {
        path: reference_definition.path,
        profiles: reference_definition.type.first.targetProfile
      }
    end
end

#reformatted_versionObject



122
123
124
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 122

def reformatted_version
  .reformatted_version
end

#required_conceptsObject



152
153
154
155
156
157
158
159
160
161
162
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 152

def required_concepts
  # The base FHIR vital signs profile has a required binding that isn't
  # relevant for any of its child profiles
  return [] if resource == 'Observation'

  profile_elements
    .select { |element| element.type&.any? { |type| type.code == 'CodeableConcept' } }
    .select { |element| element.binding&.strength == 'required' }
    .map { |element| element.path.gsub("#{resource}.", '').gsub('[x]', 'CodeableConcept') }
    .uniq
end

#resourceObject



126
127
128
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 126

def resource
  resource_capabilities.type
end

#short_descriptionObject



148
149
150
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 148

def short_description
  "Verify support for the server capabilities required by the #{profile_name}."
end

#terminology_binding_metadata_extractorObject



164
165
166
167
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 164

def 
  @terminology_binding_metadata_extractor ||=
    TerminologyBindingMetadataExtractor.new(profile_elements, ig_resources, resource)
end

#titleObject



138
139
140
141
142
143
144
145
146
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 138

def title
  title = profile.title.gsub(/\s*Profile/, '').strip

  if Naming.resources_with_multiple_profiles.include?(resource) && !title.start_with?(resource) && version != 'v3.1.1'
    title = "#{resource} #{title.split(resource).map(&:strip).join(' ')}"
  end

  title
end

#versionObject



118
119
120
# File 'lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb', line 118

def version
  .ig_version
end