us_core_test_kit 0.2.2 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/us_core_test_kit/fhir_resource_navigation.rb +11 -3
- data/lib/us_core_test_kit/generated/v3.1.1/allergy_intolerance/allergy_intolerance_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/allergy_intolerance/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodyheight/bodyheight_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodyheight/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodytemp/bodytemp_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodytemp/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodyweight/bodyweight_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bodyweight/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bp/bp_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/bp/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/care_plan/care_plan_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/care_plan/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/care_team/care_team_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/care_team/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/condition/condition_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/condition/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/device/device_must_support_test.rb +1 -2
- data/lib/us_core_test_kit/generated/v3.1.1/device/device_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/device/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_lab/diagnostic_report_lab_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_lab/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_note/diagnostic_report_note_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_note/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/document_reference/document_reference_must_support_test.rb +1 -2
- data/lib/us_core_test_kit/generated/v3.1.1/document_reference/document_reference_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/document_reference/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/encounter/encounter_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/encounter/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/goal/goal_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/goal/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/head_circumference/head_circumference_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/head_circumference/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/heartrate/heartrate_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/heartrate/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/immunization/immunization_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/immunization/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/medication_request/medication_request_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/medication_request/medication_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/medication_request/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/metadata.yml +32 -0
- data/lib/us_core_test_kit/generated/v3.1.1/observation_lab/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/observation_lab/observation_lab_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/organization/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/organization/organization_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/patient/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/patient/patient_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pediatric_bmi_for_age/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pediatric_bmi_for_age/pediatric_bmi_for_age_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pediatric_weight_for_height/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pediatric_weight_for_height/pediatric_weight_for_height_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/practitioner/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/practitioner/practitioner_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/procedure/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/procedure/procedure_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/provenance/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/provenance/provenance_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pulse_oximetry/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/pulse_oximetry/pulse_oximetry_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/resprate/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/resprate/resprate_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/smokingstatus/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/smokingstatus/smokingstatus_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v3.1.1/us_core_test_suite.rb +2 -2
- data/lib/us_core_test_kit/generated/v4.0.0/allergy_intolerance/allergy_intolerance_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/allergy_intolerance/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/blood_pressure/blood_pressure_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/blood_pressure/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/bmi/bmi_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/bmi/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_height/body_height_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_height/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_temperature/body_temperature_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_temperature/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_weight/body_weight_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/body_weight/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/care_plan/care_plan_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/care_plan/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/care_team/care_team_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/care_team/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/condition/condition_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/condition/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/device/device_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/device/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_lab/diagnostic_report_lab_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_lab/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_note/diagnostic_report_note_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_note/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/document_reference/document_reference_must_support_test.rb +1 -2
- data/lib/us_core_test_kit/generated/v4.0.0/document_reference/document_reference_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/document_reference/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/encounter/encounter_must_support_test.rb +2 -4
- data/lib/us_core_test_kit/generated/v4.0.0/encounter/encounter_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/encounter/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/goal/goal_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/goal/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/head_circumference/head_circumference_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/head_circumference/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/head_circumference_percentile/head_circumference_percentile_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/head_circumference_percentile/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/heart_rate/heart_rate_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/heart_rate/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/immunization/immunization_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/immunization/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_request_must_support_test.rb +1 -2
- data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_request_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/medication_request/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/metadata.yml +47 -2
- data/lib/us_core_test_kit/generated/v4.0.0/observation_lab/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/observation_lab/observation_lab_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/organization/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/organization/organization_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/patient/metadata.yml +13 -1
- data/lib/us_core_test_kit/generated/v4.0.0/patient/patient_must_support_test.rb +8 -6
- data/lib/us_core_test_kit/generated/v4.0.0/patient/patient_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pediatric_bmi_for_age/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pediatric_bmi_for_age/pediatric_bmi_for_age_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pediatric_weight_for_height/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pediatric_weight_for_height/pediatric_weight_for_height_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/practitioner/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/practitioner/practitioner_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/procedure/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/procedure/procedure_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/provenance/metadata.yml +1 -1
- data/lib/us_core_test_kit/generated/v4.0.0/provenance/provenance_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pulse_oximetry/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/pulse_oximetry/pulse_oximetry_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/respiratory_rate/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/respiratory_rate/respiratory_rate_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/metadata.yml +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/smokingstatus_validation_test.rb +1 -0
- data/lib/us_core_test_kit/generated/v4.0.0/us_core_test_suite.rb +2 -2
- data/lib/us_core_test_kit/generator/group_metadata.rb +1 -0
- data/lib/us_core_test_kit/generator/group_metadata_extractor.rb +5 -0
- data/lib/us_core_test_kit/generator/ig_loader.rb +12 -5
- data/lib/us_core_test_kit/generator/must_support_metadata_extractor.rb +23 -22
- data/lib/us_core_test_kit/generator/must_support_test_generator.rb +26 -3
- data/lib/us_core_test_kit/generator/validation_test_generator.rb +4 -0
- data/lib/us_core_test_kit/generator.rb +9 -14
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodyheight.json +0 -0
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodytemp.json +0 -0
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodyweight.json +0 -0
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bp.json +0 -0
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-heartrate.json +0 -0
- data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-resprate.json +0 -0
- data/lib/us_core_test_kit/igs/{v311/package.tgz → us_core_311.tgz} +0 -0
- data/lib/us_core_test_kit/igs/{v400/package.tgz → us_core_400.tgz} +0 -0
- data/lib/us_core_test_kit/must_support_test.rb +25 -3
- data/lib/us_core_test_kit/search_test.rb +107 -48
- data/lib/us_core_test_kit/validation_test.rb +4 -2
- data/lib/us_core_test_kit/version.rb +3 -1
- metadata +13 -13
|
@@ -31,7 +31,7 @@ module USCoreTestKit
|
|
|
31
31
|
if fixed_value_search?
|
|
32
32
|
fixed_value_search_param_values.map { |value| fixed_value_search_params(value, patient_id) }
|
|
33
33
|
else
|
|
34
|
-
[search_params_with_values(patient_id)]
|
|
34
|
+
[search_params_with_values(search_param_names, patient_id)]
|
|
35
35
|
end
|
|
36
36
|
new_params.reject! do |params|
|
|
37
37
|
params.any? { |_key, value| value.blank? }
|
|
@@ -135,6 +135,9 @@ module USCoreTestKit
|
|
|
135
135
|
check_search_response
|
|
136
136
|
|
|
137
137
|
post_search_resources = fetch_all_bundled_resources.select { |resource| resource.resourceType == resource_type }
|
|
138
|
+
|
|
139
|
+
filter_devices(post_search_resources) if resource_type == 'Device'
|
|
140
|
+
|
|
138
141
|
get_resource_count = get_search_resources.length
|
|
139
142
|
post_resource_count = post_search_resources.length
|
|
140
143
|
|
|
@@ -225,8 +228,9 @@ module USCoreTestKit
|
|
|
225
228
|
|
|
226
229
|
search_and_check_response(params_with_comparator)
|
|
227
230
|
|
|
228
|
-
fetch_all_bundled_resources
|
|
229
|
-
|
|
231
|
+
fetch_all_bundled_resources.each do |resource|
|
|
232
|
+
check_resource_against_params(resource, params_with_comparator) if resource.resourceType == resource_type
|
|
233
|
+
end
|
|
230
234
|
end
|
|
231
235
|
|
|
232
236
|
search_variant_test_records[:comparator_searches] << name
|
|
@@ -240,10 +244,11 @@ module USCoreTestKit
|
|
|
240
244
|
new_search_params = params.merge('patient' => "Patient/#{params['patient']}")
|
|
241
245
|
search_and_check_response(new_search_params)
|
|
242
246
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
+
reference_with_type_resources = fetch_all_bundled_resources.select { |resource| resource.resourceType == resource_type }
|
|
248
|
+
|
|
249
|
+
filter_devices(reference_with_type_resources) if resource_type == 'Device'
|
|
250
|
+
|
|
251
|
+
new_resource_count = reference_with_type_resources.count
|
|
247
252
|
|
|
248
253
|
assert new_resource_count == resource_count,
|
|
249
254
|
"Expected search by `#{params['patient']}` to to return the same results as searching " \
|
|
@@ -256,9 +261,7 @@ module USCoreTestKit
|
|
|
256
261
|
def perform_search_with_system(params, patient_id)
|
|
257
262
|
return if search_variant_test_records[:token_variants]
|
|
258
263
|
|
|
259
|
-
new_search_params = token_search_params
|
|
260
|
-
search_params[name] = search_param_value(name, patient_id, include_system: true)
|
|
261
|
-
end
|
|
264
|
+
new_search_params = search_params_with_values(token_search_params, patient_id, include_system: true)
|
|
262
265
|
return if new_search_params.any? { |_name, value| value.blank? }
|
|
263
266
|
|
|
264
267
|
search_params = params.merge(new_search_params)
|
|
@@ -308,7 +311,7 @@ module USCoreTestKit
|
|
|
308
311
|
definition = metadata.search_definitions[param_name]
|
|
309
312
|
return [] if definition.blank?
|
|
310
313
|
|
|
311
|
-
definition[:multiple_or] == 'SHALL' ? [definition[:values].join(',')] :
|
|
314
|
+
definition[:multiple_or] == 'SHALL' ? [definition[:values].join(',')] : Array.wrap(definition[:values])
|
|
312
315
|
end
|
|
313
316
|
|
|
314
317
|
|
|
@@ -317,7 +320,7 @@ module USCoreTestKit
|
|
|
317
320
|
|
|
318
321
|
all_search_params.each do |patient_id, params_list|
|
|
319
322
|
next unless params_list.present?
|
|
320
|
-
|
|
323
|
+
|
|
321
324
|
search_params = params_list.first
|
|
322
325
|
existing_values = {}
|
|
323
326
|
missing_values = {}
|
|
@@ -423,11 +426,29 @@ module USCoreTestKit
|
|
|
423
426
|
end
|
|
424
427
|
end
|
|
425
428
|
|
|
426
|
-
def search_params_with_values(patient_id)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
429
|
+
def search_params_with_values(search_param_names, patient_id, include_system: false)
|
|
430
|
+
resources = scratch_resources_for_patient(patient_id)
|
|
431
|
+
|
|
432
|
+
if resources.empty?
|
|
433
|
+
return search_param_names.each_with_object({}) do |name, params|
|
|
434
|
+
value = patient_id_param?(name) ? patient_id : nil
|
|
435
|
+
params[name] = value
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
params_with_partial_value = resources.each_with_object({}) do |resource, outer_params|
|
|
440
|
+
results_from_one_resource = search_param_names.each_with_object({}) do |name, params|
|
|
441
|
+
value = patient_id_param?(name) ? patient_id : search_param_value(name, resource, include_system: include_system)
|
|
442
|
+
params[name] = value
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
outer_params.merge!(results_from_one_resource)
|
|
446
|
+
|
|
447
|
+
# stop if all parameter values are found
|
|
448
|
+
return outer_params if outer_params.all? { |_key, value| value.present? }
|
|
430
449
|
end
|
|
450
|
+
|
|
451
|
+
params_with_partial_value
|
|
431
452
|
end
|
|
432
453
|
|
|
433
454
|
def patient_id_list
|
|
@@ -446,10 +467,10 @@ module USCoreTestKit
|
|
|
446
467
|
|
|
447
468
|
def search_param_paths(name)
|
|
448
469
|
paths = metadata.search_definitions[name.to_sym][:paths]
|
|
449
|
-
if paths.first =='class'
|
|
470
|
+
if paths.first =='class'
|
|
450
471
|
paths[0] = 'local_class'
|
|
451
472
|
end
|
|
452
|
-
|
|
473
|
+
|
|
453
474
|
paths
|
|
454
475
|
end
|
|
455
476
|
|
|
@@ -470,8 +491,13 @@ module USCoreTestKit
|
|
|
470
491
|
end
|
|
471
492
|
|
|
472
493
|
def no_resources_skip_message(resource_type = self.resource_type)
|
|
473
|
-
"No #{resource_type} resources appear to be available
|
|
474
|
-
|
|
494
|
+
msg = "No #{resource_type} resources appear to be available"
|
|
495
|
+
|
|
496
|
+
if (resource_type == 'Device' && implantable_device_codes.present?)
|
|
497
|
+
msg.concat(" with the following Device Type Code filter: #{implantable_device_codes}")
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
msg + ". Please use patients with more information"
|
|
475
501
|
end
|
|
476
502
|
|
|
477
503
|
def fetch_all_bundled_resources(
|
|
@@ -507,11 +533,16 @@ module USCoreTestKit
|
|
|
507
533
|
valid_resource_types = [resource_type, 'OperationOutcome'].concat(additional_resource_types)
|
|
508
534
|
valid_resource_types << 'Medication' if resource_type == 'MedicationRequest'
|
|
509
535
|
|
|
510
|
-
|
|
511
|
-
resources.
|
|
536
|
+
invalid_resource_types =
|
|
537
|
+
resources.reject { |entry| valid_resource_types.include? entry.resourceType }
|
|
538
|
+
.map(&:resourceType)
|
|
539
|
+
.uniq
|
|
512
540
|
|
|
513
|
-
|
|
514
|
-
|
|
541
|
+
if invalid_resource_types.any?
|
|
542
|
+
info "Received resource type(s) #{invalid_resource_types.join(', ')} in search bundle, " \
|
|
543
|
+
"but only expected resource types #{valid_resource_types.join(', ')}. " + \
|
|
544
|
+
"This is unusual but allowed if the server believes additional resource types are relevant."
|
|
545
|
+
end
|
|
515
546
|
|
|
516
547
|
resources
|
|
517
548
|
end
|
|
@@ -520,11 +551,11 @@ module USCoreTestKit
|
|
|
520
551
|
"Could not resolve next bundle: #{link}"
|
|
521
552
|
end
|
|
522
553
|
|
|
523
|
-
def search_param_value(name,
|
|
554
|
+
def search_param_value(name, resource, include_system: false)
|
|
524
555
|
paths = search_param_paths(name)
|
|
525
556
|
search_value = nil
|
|
526
557
|
paths.each do |path|
|
|
527
|
-
element = find_a_value_at(
|
|
558
|
+
element = find_a_value_at(resource, path) { |element| element_has_valid_value?(element, include_system) }
|
|
528
559
|
|
|
529
560
|
search_value =
|
|
530
561
|
case element
|
|
@@ -541,34 +572,37 @@ module USCoreTestKit
|
|
|
541
572
|
if include_system
|
|
542
573
|
coding =
|
|
543
574
|
find_a_value_at(element, 'coding') { |coding| coding.code.present? && coding.system.present? }
|
|
544
|
-
|
|
575
|
+
"#{coding.system}|#{coding.code}"
|
|
545
576
|
else
|
|
546
577
|
find_a_value_at(element, 'coding.code')
|
|
547
578
|
end
|
|
548
579
|
when FHIR::Identifier
|
|
549
|
-
|
|
550
|
-
identifier = find_a_value_at(scratch_resources_for_patient(patient_id), path) do |identifier|
|
|
551
|
-
identifier.value.present? && identifier.system.present?
|
|
552
|
-
end
|
|
553
|
-
identifier.present? ? "#{identifier.system}|#{identifier.value}" : nil
|
|
554
|
-
else
|
|
555
|
-
element.value
|
|
556
|
-
end
|
|
580
|
+
include_system ? "#{element.system}|#{element.value}" : element.value
|
|
557
581
|
when FHIR::Coding
|
|
558
|
-
|
|
559
|
-
coding = find_a_value_at(scratch_resources_for_patient(patient_id), path) do |coding|
|
|
560
|
-
coding.code.present? && coding.system.present?
|
|
561
|
-
end
|
|
562
|
-
coding.present? ? "#{coding.system}|#{coding.code}" : nil
|
|
563
|
-
else
|
|
564
|
-
element.code
|
|
565
|
-
end
|
|
582
|
+
include_system ? "#{element.system}|#{element.code}" : element.code
|
|
566
583
|
when FHIR::HumanName
|
|
567
584
|
element.family || element.given&.first || element.text
|
|
568
585
|
when FHIR::Address
|
|
569
586
|
element.text || element.city || element.state || element.postalCode || element.country
|
|
570
587
|
else
|
|
571
|
-
|
|
588
|
+
if metadata.version != 'v3.1.1' &&
|
|
589
|
+
metadata.search_definitions[name.to_sym][:type] == 'date' &&
|
|
590
|
+
params_with_comparators&.include?(name)
|
|
591
|
+
# convert date search to greath-than comparator search with correct precision
|
|
592
|
+
# For all date search parameters:
|
|
593
|
+
# Patient.birthDate does not mandate comparators so cannot be converted
|
|
594
|
+
# Goal.target-date has day precision
|
|
595
|
+
# All others have second + time offset precision
|
|
596
|
+
if /^\d{4}$/.match?(element) || # YYYY
|
|
597
|
+
/^\d{4}-\d{2}$/.match?(element) || # YYYY-MM
|
|
598
|
+
(/^\d{4}-\d{2}-\d{2}$/.match?(element) && resource_type != "Goal") # YYYY-MM-DD AND Resource is NOT Goal
|
|
599
|
+
"gt#{(DateTime.xmlschema(element)-1).xmlschema}"
|
|
600
|
+
else
|
|
601
|
+
element
|
|
602
|
+
end
|
|
603
|
+
else
|
|
604
|
+
element
|
|
605
|
+
end
|
|
572
606
|
end
|
|
573
607
|
|
|
574
608
|
break if search_value.present?
|
|
@@ -578,6 +612,31 @@ module USCoreTestKit
|
|
|
578
612
|
escaped_value
|
|
579
613
|
end
|
|
580
614
|
|
|
615
|
+
def element_has_valid_value?(element, include_system)
|
|
616
|
+
case element
|
|
617
|
+
when FHIR::Reference
|
|
618
|
+
element.reference.present?
|
|
619
|
+
when FHIR::CodeableConcept
|
|
620
|
+
if include_system
|
|
621
|
+
coding =
|
|
622
|
+
find_a_value_at(element, 'coding') { |coding| coding.code.present? && coding.system.present? }
|
|
623
|
+
coding.present?
|
|
624
|
+
else
|
|
625
|
+
find_a_value_at(element, 'coding.code').present?
|
|
626
|
+
end
|
|
627
|
+
when FHIR::Identifier
|
|
628
|
+
include_system ? element.value.present? && element.system.present? : element.value.present?
|
|
629
|
+
when FHIR::Coding
|
|
630
|
+
include_system ? element.code.present? && element.system.present? : element.code.present?
|
|
631
|
+
when FHIR::HumanName
|
|
632
|
+
(element.family || element.given&.first || element.text).present?
|
|
633
|
+
when FHIR::Address
|
|
634
|
+
(element.text || element.city || element.state || element.postalCode || element.country).present?
|
|
635
|
+
else
|
|
636
|
+
true
|
|
637
|
+
end
|
|
638
|
+
end
|
|
639
|
+
|
|
581
640
|
def save_resource_reference(resource_type, reference)
|
|
582
641
|
scratch[:references] ||= {}
|
|
583
642
|
scratch[:references][resource_type] ||= Set.new
|
|
@@ -647,9 +706,9 @@ module USCoreTestKit
|
|
|
647
706
|
address&.country&.downcase&.start_with?(search_value_downcase)
|
|
648
707
|
end
|
|
649
708
|
when 'CodeableConcept'
|
|
650
|
-
# FHIR token search (https://www.hl7.org/fhir/search.html#token): "When in doubt, servers SHOULD
|
|
651
|
-
# treat tokens in a case-insensitive manner, on the grounds that including undesired data has
|
|
652
|
-
# less safety implications than excluding desired behavior".
|
|
709
|
+
# FHIR token search (https://www.hl7.org/fhir/search.html#token): "When in doubt, servers SHOULD
|
|
710
|
+
# treat tokens in a case-insensitive manner, on the grounds that including undesired data has
|
|
711
|
+
# less safety implications than excluding desired behavior".
|
|
653
712
|
codings = values_found.flat_map(&:coding)
|
|
654
713
|
if search_value.include? '|'
|
|
655
714
|
system = search_value.split('|').first
|
|
@@ -691,7 +750,7 @@ module USCoreTestKit
|
|
|
691
750
|
values_found.any? { |value_found| search_values.include? value_found }
|
|
692
751
|
end
|
|
693
752
|
end
|
|
694
|
-
|
|
753
|
+
|
|
695
754
|
break if match_found
|
|
696
755
|
end
|
|
697
756
|
|
|
@@ -5,6 +5,7 @@ module USCoreTestKit
|
|
|
5
5
|
|
|
6
6
|
def perform_validation_test(resources,
|
|
7
7
|
profile_url,
|
|
8
|
+
profile_version,
|
|
8
9
|
skip_if_empty: true)
|
|
9
10
|
|
|
10
11
|
skip_if skip_if_empty && resources.blank?,
|
|
@@ -13,14 +14,15 @@ module USCoreTestKit
|
|
|
13
14
|
omit_if resources.blank?,
|
|
14
15
|
"No #{resource_type} resources provided so the #{profile_url} profile does not apply"
|
|
15
16
|
|
|
17
|
+
profile_with_version = "#{profile_url}|#{profile_version}"
|
|
16
18
|
resources.each do |resource|
|
|
17
|
-
resource_is_valid?(resource: resource, profile_url:
|
|
19
|
+
resource_is_valid?(resource: resource, profile_url: profile_with_version)
|
|
18
20
|
check_for_dar(resource)
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
errors_found = messages.any? { |message| message[:type] == 'error' }
|
|
22
24
|
|
|
23
|
-
assert !errors_found, "Resource does not conform to the profile #{
|
|
25
|
+
assert !errors_found, "Resource does not conform to the profile #{profile_with_version}"
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
def check_for_dar(resource)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: us_core_test_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stephen MacVicar
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-05
|
|
11
|
+
date: 2022-08-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: inferno_core
|
|
@@ -818,14 +818,14 @@ files:
|
|
|
818
818
|
- lib/us_core_test_kit/generator/suite_generator.rb
|
|
819
819
|
- lib/us_core_test_kit/generator/terminology_binding_metadata_extractor.rb
|
|
820
820
|
- lib/us_core_test_kit/generator/validation_test_generator.rb
|
|
821
|
-
- lib/us_core_test_kit/igs/
|
|
822
|
-
- lib/us_core_test_kit/igs/
|
|
823
|
-
- lib/us_core_test_kit/igs/
|
|
824
|
-
- lib/us_core_test_kit/igs/
|
|
825
|
-
- lib/us_core_test_kit/igs/
|
|
826
|
-
- lib/us_core_test_kit/igs/
|
|
827
|
-
- lib/us_core_test_kit/igs/
|
|
828
|
-
- lib/us_core_test_kit/igs/
|
|
821
|
+
- lib/us_core_test_kit/igs/us_core_311.tgz
|
|
822
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bodyheight.json
|
|
823
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bodytemp.json
|
|
824
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bodyweight.json
|
|
825
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bp.json
|
|
826
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-heartrate.json
|
|
827
|
+
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-resprate.json
|
|
828
|
+
- lib/us_core_test_kit/igs/us_core_400.tgz
|
|
829
829
|
- lib/us_core_test_kit/must_support_test.rb
|
|
830
830
|
- lib/us_core_test_kit/read_test.rb
|
|
831
831
|
- lib/us_core_test_kit/reference_resolution_test.rb
|
|
@@ -840,7 +840,7 @@ licenses:
|
|
|
840
840
|
metadata:
|
|
841
841
|
homepage_uri: https://github.com/inferno_framework/us-core-test-kit
|
|
842
842
|
source_code_uri: https://github.com/inferno_framework/us-core-test-kit
|
|
843
|
-
post_install_message:
|
|
843
|
+
post_install_message:
|
|
844
844
|
rdoc_options: []
|
|
845
845
|
require_paths:
|
|
846
846
|
- lib
|
|
@@ -856,7 +856,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
856
856
|
version: '0'
|
|
857
857
|
requirements: []
|
|
858
858
|
rubygems_version: 3.1.6
|
|
859
|
-
signing_key:
|
|
859
|
+
signing_key:
|
|
860
860
|
specification_version: 4
|
|
861
861
|
summary: US Core Inferno tests
|
|
862
862
|
test_files: []
|