uds_plus_test_kit 0.9.1 → 1.0.1

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/uds_plus_test_kit/examples/condition.ndjson +1 -0
  3. data/lib/uds_plus_test_kit/examples/encounter.ndjson +1 -0
  4. data/lib/uds_plus_test_kit/examples/invalid_condition.ndjson +1 -0
  5. data/lib/uds_plus_test_kit/examples/invalid_encounter.ndjson +1 -0
  6. data/lib/uds_plus_test_kit/examples/invalid_patient.ndjson +2 -0
  7. data/lib/uds_plus_test_kit/examples/manifest.json +76 -14
  8. data/lib/uds_plus_test_kit/examples/observation.ndjson +3 -0
  9. data/lib/uds_plus_test_kit/examples/patient.ndjson +2 -0
  10. data/lib/uds_plus_test_kit/input_resource_tests/read_immunization_test.rb +54 -0
  11. data/lib/uds_plus_test_kit/input_resource_tests/read_lab_test.rb +54 -0
  12. data/lib/uds_plus_test_kit/input_resource_tests/read_med_request_test.rb +54 -0
  13. data/lib/uds_plus_test_kit/input_resource_tests/read_med_statement_test.rb +54 -0
  14. data/lib/uds_plus_test_kit/input_resource_tests/read_related_person_test.rb +54 -0
  15. data/lib/uds_plus_test_kit/input_resource_tests/read_service_request_test.rb +54 -0
  16. data/lib/uds_plus_test_kit/input_resource_tests/read_special_observation_test.rb +54 -0
  17. data/lib/uds_plus_test_kit/input_resource_tests/resource_group.rb +30 -2
  18. data/lib/uds_plus_test_kit/manifest_tests/invalid_type_test.rb +4 -1
  19. data/lib/uds_plus_test_kit/manifest_tests/uds_plus_test_group.rb +16 -2
  20. data/lib/uds_plus_test_kit/post_tests/post_group.rb +59 -0
  21. data/lib/uds_plus_test_kit/post_tests/post_manifest_test.rb +41 -0
  22. data/lib/uds_plus_test_kit/post_tests/read_post_test.rb +32 -0
  23. data/lib/uds_plus_test_kit/uds_plus_test_suite.rb +40 -0
  24. data/lib/uds_plus_test_kit/validate_immunization_test.rb +33 -0
  25. data/lib/uds_plus_test_kit/validate_income_test.rb +7 -10
  26. data/lib/uds_plus_test_kit/validate_lab_test.rb +65 -0
  27. data/lib/uds_plus_test_kit/validate_med_request_test.rb +33 -0
  28. data/lib/uds_plus_test_kit/validate_med_statement_test.rb +33 -0
  29. data/lib/uds_plus_test_kit/validate_related_person_test.rb +33 -0
  30. data/lib/uds_plus_test_kit/validate_service_request_test.rb +33 -0
  31. data/lib/uds_plus_test_kit/validate_sexual_orientation_test.rb +6 -9
  32. data/lib/uds_plus_test_kit/validate_special_observation_test.rb +65 -0
  33. data/lib/uds_plus_test_kit/version.rb +2 -2
  34. metadata +26 -4
  35. data/lib/uds_plus_test_kit/examples/manifest_2.json +0 -101
  36. data/lib/uds_plus_test_kit/examples/manifest_not_deidentified.json +0 -67
@@ -15,6 +15,20 @@ require_relative '../validate_procedure_test'
15
15
  require_relative '../validate_sexual_orientation_test'
16
16
  require_relative './read_manifest_ind_test'
17
17
  require_relative '../manifest_tests/validate_manifest_test'
18
+ require_relative './read_special_observation_test'
19
+ require_relative '../validate_special_observation_test'
20
+ require_relative './read_related_person_test'
21
+ require_relative '../validate_related_person_test'
22
+ require_relative './read_immunization_test'
23
+ require_relative '../validate_immunization_test'
24
+ require_relative './read_lab_test'
25
+ require_relative '../validate_lab_test'
26
+ require_relative './read_med_request_test'
27
+ require_relative '../validate_med_request_test'
28
+ require_relative './read_med_statement_test'
29
+ require_relative '../validate_med_statement_test'
30
+ require_relative './read_service_request_test'
31
+ require_relative '../validate_service_request_test'
18
32
 
19
33
  module UDSPlusTestKit
20
34
  class UDSPlusResourceTestGroup < Inferno::TestGroup
@@ -39,13 +53,27 @@ module UDSPlusTestKit
39
53
  test from: :uds_plus_validate_diagnosis_test
40
54
  test from: :uds_plus_read_encounter_test
41
55
  test from: :uds_plus_validate_encounter_test
42
- test from: :uds_plus_read_income_test
43
- test from: :uds_plus_validate_income_test
44
56
  test from: :uds_plus_read_patient_test
45
57
  test from: :uds_plus_validate_patient_test
46
58
  test from: :uds_plus_read_procedure_test
47
59
  test from: :uds_plus_validate_procedure_test
60
+ test from: :uds_plus_read_related_person_test
61
+ test from: :uds_plus_validate_related_person_test
62
+ test from: :uds_plus_read_immunization_test
63
+ test from: :uds_plus_validate_immunization_test
64
+ test from: :uds_plus_read_income_test
65
+ test from: :uds_plus_validate_income_test
48
66
  test from: :uds_plus_read_sexual_orientation_test
49
67
  test from: :uds_plus_validate_sexual_orientation_test
68
+ test from: :uds_plus_read_lab_test
69
+ test from: :uds_plus_validate_lab_test
70
+ test from: :uds_plus_read_special_observation_test
71
+ test from: :uds_plus_read_medication_request_test
72
+ test from: :uds_plus_validate_medication_request_test
73
+ test from: :uds_plus_read_medication_statement_test
74
+ test from: :uds_plus_validate_medication_statement_test
75
+ test from: :uds_plus_read_service_request_test
76
+ test from: :uds_plus_validate_service_request_test
77
+ test from: :uds_plus_validate_special_observation_test
50
78
  end
51
79
  end
@@ -17,7 +17,10 @@ module UDSPlusTestKit
17
17
  def valid_data_types
18
18
  [
19
19
  'Coverage', 'Condition', 'Encounter',
20
- 'Observation', 'Patient', 'Procedure'
20
+ 'Observation', 'Patient', 'Procedure',
21
+ 'RelatedPerson', 'Immunization',
22
+ 'ServiceRequest', 'MedicationRequest',
23
+ 'MedicationStatement'
21
24
  ]
22
25
  end
23
26
 
@@ -10,10 +10,17 @@ require_relative './validate_manifest_test'
10
10
  require_relative '../validate_patient_test'
11
11
  require_relative '../validate_procedure_test'
12
12
  require_relative '../validate_sexual_orientation_test'
13
+ require_relative '../validate_special_observation_test'
14
+ require_relative '../validate_related_person_test'
15
+ require_relative '../validate_immunization_test'
16
+ require_relative '../validate_lab_test'
17
+ require_relative '../validate_med_request_test'
18
+ require_relative '../validate_med_statement_test'
19
+ require_relative '../validate_service_request_test'
13
20
 
14
21
  module UDSPlusTestKit
15
22
  class UDSPlusTestGroup < Inferno::TestGroup
16
- title 'Data Submitter Tests'
23
+ title 'Import Manifest Tests'
17
24
  id :uds_plus_test_group
18
25
  description %(
19
26
  The tests below validate the import manifest produced by a UDS+ Data Submitter.
@@ -30,10 +37,17 @@ module UDSPlusTestKit
30
37
  test from: :uds_plus_validate_coverage_test
31
38
  test from: :uds_plus_validate_diagnosis_test
32
39
  test from: :uds_plus_validate_encounter_test
33
- test from: :uds_plus_validate_income_test
34
40
  test from: :uds_plus_validate_patient_test
35
41
  test from: :uds_plus_validate_procedure_test
42
+ test from: :uds_plus_validate_related_person_test
43
+ test from: :uds_plus_validate_immunization_test
44
+ test from: :uds_plus_validate_income_test
36
45
  test from: :uds_plus_validate_sexual_orientation_test
46
+ test from: :uds_plus_validate_lab_test
47
+ test from: :uds_plus_validate_special_observation_test
48
+ test from: :uds_plus_validate_medication_request_test
49
+ test from: :uds_plus_validate_medication_statement_test
50
+ test from: :uds_plus_validate_service_request_test
37
51
  test from: :uds_plus_invalid_type_test
38
52
  end
39
53
  end
@@ -0,0 +1,59 @@
1
+
2
+ require_relative '../version'
3
+
4
+ require_relative './post_manifest_test'
5
+ require_relative './read_post_test'
6
+
7
+ require_relative '../manifest_tests/invalid_type_test'
8
+ require_relative '../manifest_tests/read_data_test'
9
+ require_relative '../manifest_tests/validate_manifest_test'
10
+
11
+ require_relative '../validate_coverage_test'
12
+ require_relative '../validate_diagnosis_test'
13
+ require_relative '../validate_encounter_test'
14
+ require_relative '../validate_income_test'
15
+ require_relative '../validate_patient_test'
16
+ require_relative '../validate_procedure_test'
17
+ require_relative '../validate_sexual_orientation_test'
18
+ require_relative '../validate_special_observation_test'
19
+ require_relative '../validate_related_person_test'
20
+ require_relative '../validate_immunization_test'
21
+ require_relative '../validate_lab_test'
22
+ require_relative '../validate_med_request_test'
23
+ require_relative '../validate_med_statement_test'
24
+ require_relative '../validate_service_request_test'
25
+
26
+ module UDSPlusTestKit
27
+ class UDSPlusPostGroup < Inferno::TestGroup
28
+ title 'End-to-End Import Manifest Tests'
29
+ id :uds_plus_manifest_post_group
30
+ description %(
31
+ The tests below validate the import manifest produced by a UDS+ Data Submitter.
32
+ This receiver will take a provided Import Manifest via POST request to a given
33
+ location and validate its contents. This includes validating the structure
34
+ of the manifest, as well as the structure of the data the manifest points to.
35
+ )
36
+
37
+ run_as_group
38
+
39
+ test from: :uds_plus_post_manifest_test
40
+ test from: :uds_plus_read_post_test
41
+ test from: :uds_plus_validate_manifest_test
42
+ test from: :uds_plus_read_data_test
43
+ test from: :uds_plus_validate_coverage_test
44
+ test from: :uds_plus_validate_diagnosis_test
45
+ test from: :uds_plus_validate_encounter_test
46
+ test from: :uds_plus_validate_patient_test
47
+ test from: :uds_plus_validate_procedure_test
48
+ test from: :uds_plus_validate_related_person_test
49
+ test from: :uds_plus_validate_immunization_test
50
+ test from: :uds_plus_validate_income_test
51
+ test from: :uds_plus_validate_sexual_orientation_test
52
+ test from: :uds_plus_validate_lab_test
53
+ test from: :uds_plus_validate_special_observation_test
54
+ test from: :uds_plus_validate_medication_request_test
55
+ test from: :uds_plus_validate_medication_statement_test
56
+ test from: :uds_plus_validate_service_request_test
57
+ test from: :uds_plus_invalid_type_test
58
+ end
59
+ end
@@ -0,0 +1,41 @@
1
+ require 'json'
2
+
3
+
4
+ module UDSPlusTestKit
5
+ class PostManifestTest < Inferno::Test
6
+ id :uds_plus_post_manifest_test
7
+ title 'Receive UDS+ Import Manifest via POST request'
8
+ description %(
9
+ Test waits for an import manifest to be posted at the
10
+ provided location. Test passes if it recieves a post
11
+ request within 3 mins of test start.
12
+ )
13
+
14
+ receives_request :import_manifest
15
+
16
+ def id_gen
17
+ output = ''
18
+ ranNum = Random.new
19
+ for _ in 1..10
20
+ output += ranNum.rand(10).to_s
21
+ end
22
+ output
23
+ end
24
+
25
+ run do
26
+ session_id = id_gen
27
+ wait(
28
+ identifier: session_id,
29
+ timeout: 300,
30
+ message: %(
31
+ Post your Import Manifest JSON to the following URL:
32
+ #{Inferno::Application['base_url']}/custom/uds_plus/postHere?id=#{session_id}
33
+
34
+ If the test times out or is cancelled for any reason, rerunning the test group will restart the timeout.
35
+
36
+ Your request body MUST be your Import Manifest in raw json format. Testing will resume automatically after a valid POST is received.
37
+ )
38
+ )
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ require 'json'
2
+
3
+
4
+ module UDSPlusTestKit
5
+ class ReadPostTest < Inferno::Test
6
+ id :uds_plus_read_post_test
7
+ title 'Read Input from POST Request'
8
+ description %(
9
+ Test takes the file POSTed in the previous test,
10
+ and validates whether a FHIR resource can be generated from the input data.
11
+ )
12
+
13
+ uses_request :import_manifest
14
+
15
+ def manifest_scratch
16
+ scratch[:manifest_resources] ||= {}
17
+ end
18
+
19
+ def manifest_resources
20
+ manifest_scratch[:all] ||= []
21
+ end
22
+
23
+ run do
24
+ found_resource = FHIR::Json.from_json(request.request_body)
25
+ assert found_resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
26
+
27
+ if found_resource.is_a?(FHIR::Model)
28
+ manifest_resources << found_resource
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,6 +2,7 @@ require 'inferno/dsl/oauth_credentials'
2
2
  require_relative './version'
3
3
  require_relative './manifest_tests/uds_plus_test_group'
4
4
  require_relative './input_resource_tests/resource_group'
5
+ require_relative './post_tests/post_group'
5
6
 
6
7
  module UDSPlusTestKit
7
8
  class UDSPlusTestSuite < Inferno::TestSuite
@@ -29,6 +30,44 @@ module UDSPlusTestKit
29
30
 
30
31
  id :uds_plus
31
32
 
33
+ # Example urls generated here
34
+ patient_ex = File.read(File.join(__dir__, 'examples/patient.ndjson'))
35
+ patient_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [patient_ex]] }
36
+ route(:get, "/examples/patient", patient_ex_route_handler)
37
+
38
+ condition_ex = File.read(File.join(__dir__, 'examples/condition.ndjson'))
39
+ condition_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [condition_ex]] }
40
+ route(:get, "/examples/condition", condition_ex_route_handler)
41
+
42
+ encounter_ex = File.read(File.join(__dir__, 'examples/encounter.ndjson'))
43
+ encounter_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [encounter_ex]] }
44
+ route(:get, "/examples/encounter", encounter_ex_route_handler)
45
+
46
+ manifest_ex = File.read(File.join(__dir__, 'examples/manifest.json'))
47
+ manifest_ex_route_handler = proc { [200, { 'Content-Type' => 'application/json' }, [manifest_ex]] }
48
+ route(:get, "/examples/manifest", manifest_ex_route_handler)
49
+
50
+ bad_condition_ex = File.read(File.join(__dir__, 'examples/invalid_condition.ndjson'))
51
+ bad_condition_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [bad_condition_ex]] }
52
+ route(:get, "/examples/invalid_condition", bad_condition_ex_route_handler)
53
+
54
+ bad_patient_ex = File.read(File.join(__dir__, 'examples/invalid_patient.ndjson'))
55
+ bad_patient_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [bad_patient_ex]] }
56
+ route(:get, "/examples/invalid_patient", bad_patient_ex_route_handler)
57
+
58
+ bad_encounter_ex = File.read(File.join(__dir__, 'examples/invalid_encounter.ndjson'))
59
+ bad_encounter_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [bad_encounter_ex]] }
60
+ route(:get, "/examples/invalid_encounter", bad_encounter_ex_route_handler)
61
+
62
+ observation_ex = File.read(File.join(__dir__, 'examples/observation.ndjson'))
63
+ observation_ex_route_handler = proc { [200, { 'Content-Type' => 'application/ndjson' }, [observation_ex]] }
64
+ route(:get, "/examples/observation", observation_ex_route_handler)
65
+
66
+ # Receive Manifest via POST set-up
67
+ resume_test_route :post, '/postHere' do |request|
68
+ request.query_parameters["id"]
69
+ end
70
+
32
71
  links [
33
72
  {
34
73
  label: 'Report Issue',
@@ -45,6 +84,7 @@ module UDSPlusTestKit
45
84
  ]
46
85
 
47
86
  group from: :uds_plus_test_group
87
+ group from: :uds_plus_manifest_post_group
48
88
  group from: :uds_plus_resource_test_group
49
89
  end
50
90
  end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateImmunizationTest < Inferno::Test
6
+ id :uds_plus_validate_immunization_test
7
+ title 'Validate UDS+ Immunization Data'
8
+ description %(
9
+ Test takes the Immunization resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['Immunization'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-immunization'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -22,21 +22,20 @@ module UDSPlusTestKit
22
22
  run do
23
23
  omit_if data_to_test.empty?, "No data of this type was identified."
24
24
 
25
- profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-income-observation'
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-income-observation'
26
26
  profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
27
 
28
28
  no_resource_of_this_type = true
29
29
  identifier_fail_message = %(Resource.meta.profile should contain the HTTP location of the
30
30
  resource's Structure Definition. Resource.meta.profile either does
31
31
  not exist in this resource, or its contents do not point to a valid
32
- location for type Observation (Income/Sexual Orientation). **NOTE:**
33
- If this error occurs, it will trigger a fail for both the Income and
34
- Sexual Orientation tests, regardless of whether both tests were meant
35
- to run.)
32
+ location for type Observation. **NOTE:**
33
+ If this error occurs, it can trigger a fail for all observation-type tests,
34
+ regardless of whether both tests were meant to run.)
36
35
 
37
36
  data_to_test.each do |resource|
38
- # All these assertions are to differentaite Observation data between Income Data and Sexual Orientation data.
39
- # A resource is skipped if it is a sexual orientation resource and fails if it cannot be identified as an income resource.
37
+ # All these assertions are to differentaite Observation data between orientation types.
38
+ # A resource is skipped if it cannot be identified as an income resource.
40
39
  type_identifier = resource.to_hash
41
40
  assert type_identifier['meta'].present?, identifier_fail_message
42
41
 
@@ -51,10 +50,8 @@ module UDSPlusTestKit
51
50
 
52
51
  type_identifier = type_identifier.first
53
52
  assert type_identifier.is_a?(String), identifier_fail_message
54
- if type_identifier.include?("sexual-orientation")
53
+ if !type_identifier.include?("income")
55
54
  next
56
- else
57
- assert type_identifier.include?("income"), identifier_fail_message
58
55
  end
59
56
 
60
57
  no_resource_of_this_type = false
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateLabTest < Inferno::Test
6
+ id :uds_plus_validate_lab_test
7
+ title 'Validate UDS+ Lab Observation Data'
8
+ description %(
9
+ Test takes the Lab Observation resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['Observation'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-lab-observation'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ no_resource_of_this_type = true
29
+ identifier_fail_message = %(Resource.meta.profile should contain the HTTP location of the
30
+ resource's Structure Definition. Resource.meta.profile either does
31
+ not exist in this resource, or its contents do not point to a valid
32
+ location for type Observation. **NOTE:**
33
+ If this error occurs, it can trigger a fail for all observation-type tests,
34
+ regardless of whether both tests were meant to run.)
35
+
36
+ data_to_test.each do |resource|
37
+ # All these assertions are to differentaite Observation data between Income Data and Sexual Orientation data.
38
+ # A resource is skipped if it is a sexual orientation resource and fails if it cannot be identified as an income resource.
39
+ type_identifier = resource.to_hash
40
+ assert type_identifier['meta'].present?, identifier_fail_message
41
+
42
+ type_identifier = type_identifier['meta']
43
+ assert type_identifier.is_a?(Hash), identifier_fail_message
44
+ assert type_identifier['profile'].present?, identifier_fail_message
45
+
46
+ type_identifier = type_identifier['profile']
47
+ assert type_identifier.is_a?(Array), identifier_fail_message
48
+ assert !type_identifier.empty?, identifier_fail_message
49
+
50
+
51
+ type_identifier = type_identifier.first
52
+ assert type_identifier.is_a?(String), identifier_fail_message
53
+ if !type_identifier.include?("-lab-")
54
+ next
55
+ end
56
+
57
+ no_resource_of_this_type = false
58
+
59
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
60
+ end
61
+
62
+ omit_if no_resource_of_this_type, "No data of this type was identified."
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateMedicationRequestTest < Inferno::Test
6
+ id :uds_plus_validate_medication_request_test
7
+ title 'Validate UDS+ Medication Request Data'
8
+ description %(
9
+ Test takes the Medication Request resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['MedicationRequest'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-medicationrequest'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateMedicationStatementTest < Inferno::Test
6
+ id :uds_plus_validate_medication_statement_test
7
+ title 'Validate UDS+ Medication Statement Data'
8
+ description %(
9
+ Test takes the Medication Statement resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['MedicationStatement'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-medicationstatement'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateRelatedPersonTest < Inferno::Test
6
+ id :uds_plus_validate_related_person_test
7
+ title 'Validate UDS+ Related Person Data'
8
+ description %(
9
+ Test takes the Related Person resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['RelatedPerson'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-relatedperson'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateServiceRequestTest < Inferno::Test
6
+ id :uds_plus_validate_service_request_test
7
+ title 'Validate UDS+ Service Request Data'
8
+ description %(
9
+ Test takes the Service Request resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['ServiceRequest'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-servicerequest'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -29,14 +29,13 @@ module UDSPlusTestKit
29
29
  identifier_fail_message = %(Resource.meta.profile should contain the HTTP location of the
30
30
  resource's Structure Definition. Resource.meta.profile either does
31
31
  not exist in this resource, or its contents do not point to a valid
32
- location for type Observation (Income/Sexual Orientation). **NOTE:**
33
- If this error occurs, it will trigger a fail for both the Income and
34
- Sexual Orientation tests, regardless of whether both tests were meant
35
- to run.)
32
+ location for type Observation. **NOTE:**
33
+ If this error occurs, it can trigger a fail for all observation-type tests,
34
+ regardless of whether both tests were meant to run.)
36
35
 
37
36
  data_to_test.each do |resource|
38
- # All these assertions are to differentaite Observation data between Income Data and Sexual Orientation data.
39
- # A resource is skipped if it is an income resource and fails if it cannot be identified as a sexual orientation resource.
37
+ # All these assertions are to differentaite Observation data between orientation types.
38
+ # A resource is skipped if it cannot be identified as a sexual orientation resource.
40
39
  type_identifier = resource.to_hash
41
40
  assert type_identifier['meta'].present?, identifier_fail_message
42
41
 
@@ -51,10 +50,8 @@ module UDSPlusTestKit
51
50
 
52
51
  type_identifier = type_identifier.first
53
52
  assert type_identifier.is_a?(String), identifier_fail_message
54
- if type_identifier.include?("income")
53
+ if !type_identifier.include?("sexual-orientation")
55
54
  next
56
- else
57
- assert type_identifier.include?("sexual-orientation"), identifier_fail_message
58
55
  end
59
56
 
60
57
  no_resource_of_this_type = false