Class: DaVinciPASTestKit::Generator::ProfileMetadataExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of ProfileMetadataExtractor.



11
12
13
14
15
16
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 11

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.



9
10
11
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 9

def 
  @ig_metadata
end

#ig_resourcesObject

Returns the value of attribute ig_resources.



9
10
11
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 9

def ig_resources
  @ig_resources
end

#profile_urlObject

Returns the value of attribute profile_url.



9
10
11
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 9

def profile_url
  @profile_url
end

#resource_capabilitiesObject

Returns the value of attribute resource_capabilities.



9
10
11
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 9

def resource_capabilities
  @resource_capabilities
end

Instance Method Details

#base_nameObject



57
58
59
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 57

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

#bindingsObject



144
145
146
147
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 144

def bindings
  @bindings ||=
    .terminology_bindings
end

#class_nameObject



65
66
67
68
69
70
71
72
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 65

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

#conformance_expectationObject



86
87
88
89
90
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 86

def conformance_expectation
  return unless resource_capabilities.present?

  resource_capabilities.extension&.first&.valueCode
end

#interactionsObject



108
109
110
111
112
113
114
115
116
117
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 108

def interactions
  @interactions ||=
    resource_capabilities.interaction.map do |interaction|
      {
        code: interaction.code,
        # TODO: fix expectation extension finding
        expectation: interaction.present? ? interaction.extension&.first&.valueCode : nil
      }
    end
end

#mandatory_elementsObject



160
161
162
163
164
165
166
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 160

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

#must_support_metadata_extractorObject



149
150
151
152
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 149

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

#must_supportsObject



154
155
156
157
158
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 154

def must_supports
  # binding.pry if profile_url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry'
  @must_supports ||=
    .must_supports
end

#nameObject



61
62
63
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 61

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

#operationsObject



119
120
121
122
123
124
125
126
127
128
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 119

def operations
  @operations ||=
    resource_capabilities.operation.map do |operation|
      {
        code: operation.name,
        # TODO: fix expectation extension finding
        expectation: operation.present? ? operation.extension&.first&.valueCode : nil
      }
    end
end

#profileObject



49
50
51
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 49

def profile
  @profile ||= ig_resources.profile_by_url(profile_url)
end

#profile_elementsObject



53
54
55
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 53

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

#profile_metadataObject



18
19
20
21
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 18

def 
  @profile_metadata ||=
    ProfileMetadata.new()
end

#profile_metadata_hashObject



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

def 
  @profile_metadata_hash ||=
    {
      name:,
      class_name:,
      version:,
      reformatted_version:,
      resource:,
      conformance_expectation:,
      profile_url:,
      profile_name:,
      profile_version:,
      title:,
      short_description:,
      interactions:,
      operations:,
      required_concepts:,
      must_supports:,
      mandatory_elements:,
      bindings:,
      references:
    }

  @profile_metadata_hash
end

#profile_nameObject



92
93
94
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 92

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

#profile_versionObject



96
97
98
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 96

def profile_version
  profile.version
end

#referencesObject



168
169
170
171
172
173
174
175
176
177
178
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 168

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



78
79
80
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 78

def reformatted_version
  .reformatted_version
end

#required_conceptsObject



130
131
132
133
134
135
136
137
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 130

def required_concepts
  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') }
end

#resourceObject



82
83
84
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 82

def resource
  profile.type
end

#short_descriptionObject



104
105
106
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 104

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

#terminology_binding_metadata_extractorObject



139
140
141
142
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 139

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

#titleObject



100
101
102
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 100

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

#versionObject



74
75
76
# File 'lib/davinci_pas_test_kit/generator/profile_metadata_extractor.rb', line 74

def version
  .ig_version
end