149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
# File 'lib/onc_certification_g10_test_kit/g10_certification_suite.rb', line 149
def self.setup_validator(us_core_version_requirement)
fhir_resource_validator :default, required_suite_options: us_core_version_requirement do
cli_context do
txServer nil
displayWarnings true
disableDefaultResourceFetcher true
end
us_core_version_num = G10Options::US_CORE_VERSION_NUMBERS[us_core_version_requirement[:us_core_version]]
igs("hl7.fhir.us.core##{us_core_version_num}")
us_core_message_filters =
case us_core_version_requirement[:us_core_version]
when G10Options::US_CORE_3
USCoreTestKit::USCoreV311::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
when G10Options::US_CORE_4
USCoreTestKit::USCoreV400::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
when G10Options::US_CORE_5
USCoreTestKit::USCoreV501::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
when G10Options::US_CORE_6
USCoreTestKit::USCoreV610::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
when G10Options::US_CORE_7
USCoreTestKit::USCoreV700::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
end
exclude_message do |message|
if message.type == 'info' ||
(message.type == 'warning' && WARNING_INCLUSION_FILTERS.none? do |filter|
filter.match? message.message
end) ||
us_core_message_filters.any? { |filter| filter.match? message.message } ||
(message.type == 'error' && ERROR_FILTERS.any? { |filter| message.message.match? filter })
true
else
false
end
end
perform_additional_validation do |resource, profile_url|
versionless_profile_url, profile_version = profile_url.split('|')
profile_version = case profile_version
when '6.1.0'
'610'
when '4.0.0'
'400'
when '5.0.1'
'501'
else
'311'
end
us_core_suite = USCoreTestKit.const_get("USCoreV#{profile_version}")::USCoreTestSuite
metadata = us_core_suite.metadata.find do |metadata_candidate|
metadata_candidate.profile_url == versionless_profile_url
end
next if metadata.nil?
validation_messages = if resource.instance_of?(FHIR::Provenance)
USCoreTestKit::ProvenanceValidator.validate(resource)
else
[]
end
terminology_validation_messages = metadata.bindings
.select { |binding_definition| binding_definition[:strength] == 'required' }
.flat_map do |binding_definition|
TerminologyBindingValidator.validate(resource, binding_definition)
rescue Inferno::UnknownValueSetException, Inferno::UnknownCodeSystemException => e
{ type: 'warning', message: e.message }
end.compact
validation_messages.concat(terminology_validation_messages)
validation_messages
end
end
end
|