us_core_test_kit 0.3.0 → 0.3.2
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/custom_groups/v4.0.0/device_udi_pi_test.rb +1 -1
- data/lib/us_core_test_kit/custom_groups/v4.0.0/document_reference_custodian_test.rb +1 -1
- data/lib/us_core_test_kit/date_search_validation.rb +14 -7
- data/lib/us_core_test_kit/generated/v4.0.0/metadata.yml +4 -315
- data/lib/us_core_test_kit/generated/v4.0.0/patient/metadata.yml +0 -8
- data/lib/us_core_test_kit/generated/v4.0.0/patient/patient_must_support_test.rb +1 -1
- data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/metadata.yml +4 -6
- data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/smokingstatus_patient_category_date_search_test.rb +0 -2
- data/lib/us_core_test_kit/generated/v5.0.1/metadata.yml +1922 -3532
- data/lib/us_core_test_kit/generated/v5.0.1/observation_sdoh_assessment/metadata.yml +0 -1
- data/lib/us_core_test_kit/generated/v5.0.1/patient/metadata.yml +2 -7
- data/lib/us_core_test_kit/generated/v5.0.1/patient/patient_must_support_test.rb +2 -1
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/metadata.yml +288 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_id_search_test.rb +42 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_must_support_test.rb +56 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_authored_search_test.rb +49 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_questionnaire_search_test.rb +48 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_search_test.rb +63 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_status_search_test.rb +48 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_tag_authored_search_test.rb +50 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_tag_search_test.rb +49 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_provenance_revinclude_search_test.rb +52 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_read_test.rb +26 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_reference_resolution_test.rb +39 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_validation_test.rb +40 -0
- data/lib/us_core_test_kit/generated/v5.0.1/questionnaire_response_group.rb +101 -0
- data/lib/us_core_test_kit/generated/v5.0.1/smokingstatus/metadata.yml +4 -6
- data/lib/us_core_test_kit/generated/v5.0.1/smokingstatus/smokingstatus_patient_category_date_search_test.rb +0 -2
- data/lib/us_core_test_kit/generated/v5.0.1/us_core_test_suite.rb +2 -0
- data/lib/us_core_test_kit/generator/group_generator.rb +5 -0
- data/lib/us_core_test_kit/generator/group_metadata_extractor.rb +5 -1
- data/lib/us_core_test_kit/generator/ig_metadata_extractor.rb +9 -0
- data/lib/us_core_test_kit/generator/must_support_metadata_extractor.rb +17 -16
- data/lib/us_core_test_kit/generator/special_cases.rb +4 -10
- data/lib/us_core_test_kit/read_test.rb +1 -1
- data/lib/us_core_test_kit/reference_resolution_test.rb +16 -4
- data/lib/us_core_test_kit/search_test.rb +2 -3
- data/lib/us_core_test_kit/version.rb +1 -1
- metadata +16 -2
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative '../../../search_test'
|
2
|
+
require_relative '../../../generator/group_metadata'
|
3
|
+
|
4
|
+
module USCoreTestKit
|
5
|
+
module USCoreV501
|
6
|
+
class QuestionnaireResponsePatientTagSearchTest < Inferno::Test
|
7
|
+
include USCoreTestKit::SearchTest
|
8
|
+
|
9
|
+
title 'Server returns valid results for QuestionnaireResponse search by patient + _tag'
|
10
|
+
description %(
|
11
|
+
A server SHOULD support searching by
|
12
|
+
patient + _tag on the QuestionnaireResponse resource. This test
|
13
|
+
will pass if resources are returned and match the search criteria. If
|
14
|
+
none are returned, the test is skipped.
|
15
|
+
|
16
|
+
[US Core Server CapabilityStatement](http://hl7.org/fhir/us/core//CapabilityStatement-us-core-server.html)
|
17
|
+
|
18
|
+
)
|
19
|
+
|
20
|
+
id :us_core_v501_questionnaire_response_patient__tag_search_test
|
21
|
+
optional
|
22
|
+
|
23
|
+
input :patient_ids,
|
24
|
+
title: 'Patient IDs',
|
25
|
+
description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
|
26
|
+
|
27
|
+
def self.properties
|
28
|
+
@properties ||= SearchTestProperties.new(
|
29
|
+
resource_type: 'QuestionnaireResponse',
|
30
|
+
search_param_names: ['patient', '_tag'],
|
31
|
+
possible_status_search: true,
|
32
|
+
token_search_params: ['_tag']
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.metadata
|
37
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml')))
|
38
|
+
end
|
39
|
+
|
40
|
+
def scratch_resources
|
41
|
+
scratch[:questionnaire_response_resources] ||= {}
|
42
|
+
end
|
43
|
+
|
44
|
+
run do
|
45
|
+
run_search_test
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative '../../../search_test'
|
2
|
+
require_relative '../../../generator/group_metadata'
|
3
|
+
|
4
|
+
module USCoreTestKit
|
5
|
+
module USCoreV501
|
6
|
+
class QuestionnaireResponseProvenanceRevincludeSearchTest < Inferno::Test
|
7
|
+
include USCoreTestKit::SearchTest
|
8
|
+
|
9
|
+
title 'Server returns Provenance resources from QuestionnaireResponse search by patient + revInclude:Provenance:target'
|
10
|
+
description %(
|
11
|
+
A server SHALL be capable of supporting _revIncludes:Provenance:target.
|
12
|
+
|
13
|
+
This test will perform a search by patient + revInclude:Provenance:target and
|
14
|
+
will pass if a Provenance resource is found in the response.
|
15
|
+
%)
|
16
|
+
|
17
|
+
id :us_core_v501_questionnaire_response_provenance_revinclude_search_test
|
18
|
+
|
19
|
+
input :patient_ids,
|
20
|
+
title: 'Patient IDs',
|
21
|
+
description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
|
22
|
+
|
23
|
+
def properties
|
24
|
+
@properties ||= SearchTestProperties.new(
|
25
|
+
resource_type: 'QuestionnaireResponse',
|
26
|
+
search_param_names: ['patient'],
|
27
|
+
possible_status_search: true
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.metadata
|
32
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml')))
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.provenance_metadata
|
36
|
+
@provenance_metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, '..', 'provenance', 'metadata.yml')))
|
37
|
+
end
|
38
|
+
|
39
|
+
def scratch_resources
|
40
|
+
scratch[:questionnaire_response_resources] ||= {}
|
41
|
+
end
|
42
|
+
|
43
|
+
def scratch_provenance_resources
|
44
|
+
scratch[:provenance_resources] ||= {}
|
45
|
+
end
|
46
|
+
|
47
|
+
run do
|
48
|
+
run_provenance_revinclude_search_test
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../../../read_test'
|
2
|
+
|
3
|
+
module USCoreTestKit
|
4
|
+
module USCoreV501
|
5
|
+
class QuestionnaireResponseReadTest < Inferno::Test
|
6
|
+
include USCoreTestKit::ReadTest
|
7
|
+
|
8
|
+
title 'Server returns correct QuestionnaireResponse resource from QuestionnaireResponse read interaction'
|
9
|
+
description 'A server SHALL support the QuestionnaireResponse read interaction.'
|
10
|
+
|
11
|
+
id :us_core_v501_questionnaire_response_read_test
|
12
|
+
|
13
|
+
def resource_type
|
14
|
+
'QuestionnaireResponse'
|
15
|
+
end
|
16
|
+
|
17
|
+
def scratch_resources
|
18
|
+
scratch[:questionnaire_response_resources] ||= {}
|
19
|
+
end
|
20
|
+
|
21
|
+
run do
|
22
|
+
perform_read_test(all_scratch_resources)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative '../../../reference_resolution_test'
|
2
|
+
require_relative '../resource_list'
|
3
|
+
|
4
|
+
module USCoreTestKit
|
5
|
+
module USCoreV501
|
6
|
+
class QuestionnaireResponseReferenceResolutionTest < Inferno::Test
|
7
|
+
include USCoreTestKit::ReferenceResolutionTest
|
8
|
+
include ResourceList
|
9
|
+
|
10
|
+
title 'MustSupport references within QuestionnaireResponse resources can be read'
|
11
|
+
description %(
|
12
|
+
This test will attempt to read external references provided within elements
|
13
|
+
marked as 'MustSupport', if any are available. Elements which may provide
|
14
|
+
external references include:
|
15
|
+
|
16
|
+
* QuestionnaireResponse.author
|
17
|
+
* QuestionnaireResponse.subject
|
18
|
+
)
|
19
|
+
|
20
|
+
id :us_core_v501_questionnaire_response_reference_resolution_test
|
21
|
+
|
22
|
+
def resource_type
|
23
|
+
'QuestionnaireResponse'
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.metadata
|
27
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml')))
|
28
|
+
end
|
29
|
+
|
30
|
+
def scratch_resources
|
31
|
+
scratch[:questionnaire_response_resources] ||= {}
|
32
|
+
end
|
33
|
+
|
34
|
+
run do
|
35
|
+
perform_reference_resolution_test(scratch_resources[:all])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../../../validation_test'
|
2
|
+
|
3
|
+
module USCoreTestKit
|
4
|
+
module USCoreV501
|
5
|
+
class QuestionnaireResponseValidationTest < Inferno::Test
|
6
|
+
include USCoreTestKit::ValidationTest
|
7
|
+
|
8
|
+
id :us_core_v501_questionnaire_response_validation_test
|
9
|
+
title 'QuestionnaireResponse resources returned during previous tests conform to the US Core QuestionnaireResponse Profile'
|
10
|
+
description %(
|
11
|
+
This test verifies resources returned from the first search conform to
|
12
|
+
the [US Core QuestionnaireResponse Profile](http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse).
|
13
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
14
|
+
|
15
|
+
It verifies the presence of mandatory elements and that elements with
|
16
|
+
required bindings contain appropriate values. CodeableConcept element
|
17
|
+
bindings will fail if none of their codings have a code/system belonging
|
18
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
19
|
+
fail if their code/system are not found in the valueset.
|
20
|
+
|
21
|
+
)
|
22
|
+
output :dar_code_found, :dar_extension_found
|
23
|
+
|
24
|
+
def resource_type
|
25
|
+
'QuestionnaireResponse'
|
26
|
+
end
|
27
|
+
|
28
|
+
def scratch_resources
|
29
|
+
scratch[:questionnaire_response_resources] ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
run do
|
33
|
+
perform_validation_test(scratch_resources[:all] || [],
|
34
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse',
|
35
|
+
'5.0.1',
|
36
|
+
skip_if_empty: true)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_search_test'
|
2
|
+
require_relative 'questionnaire_response/questionnaire_response_id_search_test'
|
3
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_authored_search_test'
|
4
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_tag_authored_search_test'
|
5
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_status_search_test'
|
6
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_tag_search_test'
|
7
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_questionnaire_search_test'
|
8
|
+
require_relative 'questionnaire_response/questionnaire_response_read_test'
|
9
|
+
require_relative 'questionnaire_response/questionnaire_response_provenance_revinclude_search_test'
|
10
|
+
require_relative 'questionnaire_response/questionnaire_response_validation_test'
|
11
|
+
require_relative 'questionnaire_response/questionnaire_response_must_support_test'
|
12
|
+
require_relative 'questionnaire_response/questionnaire_response_reference_resolution_test'
|
13
|
+
|
14
|
+
module USCoreTestKit
|
15
|
+
module USCoreV501
|
16
|
+
class QuestionnaireResponseGroup < Inferno::TestGroup
|
17
|
+
title 'QuestionnaireResponse Tests'
|
18
|
+
short_description 'Verify support for the server capabilities required by the US Core QuestionnaireResponse Profile.'
|
19
|
+
description %(
|
20
|
+
# Background
|
21
|
+
|
22
|
+
The US Core QuestionnaireResponse sequence verifies that the system under test is
|
23
|
+
able to provide correct responses for QuestionnaireResponse queries. These queries
|
24
|
+
must contain resources conforming to the US Core QuestionnaireResponse Profile as
|
25
|
+
specified in the US Core v5.0.1 Implementation Guide.
|
26
|
+
|
27
|
+
# Testing Methodology
|
28
|
+
## Searching
|
29
|
+
This test sequence will first perform each required search associated
|
30
|
+
with this resource. This sequence will perform searches with the
|
31
|
+
following parameters:
|
32
|
+
|
33
|
+
* patient
|
34
|
+
* _id
|
35
|
+
|
36
|
+
### Search Parameters
|
37
|
+
The first search uses the selected patient(s) from the prior launch
|
38
|
+
sequence. Any subsequent searches will look for its parameter values
|
39
|
+
from the results of the first search. For example, the `identifier`
|
40
|
+
search in the patient sequence is performed by looking for an existing
|
41
|
+
`Patient.identifier` from any of the resources returned in the `_id`
|
42
|
+
search. If a value cannot be found this way, the search is skipped.
|
43
|
+
|
44
|
+
### Search Validation
|
45
|
+
Inferno will retrieve up to the first 20 bundle pages of the reply for
|
46
|
+
QuestionnaireResponse resources and save them for subsequent tests. Each of
|
47
|
+
these resources is then checked to see if it matches the searched
|
48
|
+
parameters in accordance with [FHIR search
|
49
|
+
guidelines](https://www.hl7.org/fhir/search.html). The test will fail,
|
50
|
+
for example, if a Patient search for `gender=male` returns a `female`
|
51
|
+
patient.
|
52
|
+
|
53
|
+
|
54
|
+
## Must Support
|
55
|
+
Each profile contains elements marked as "must support". This test
|
56
|
+
sequence expects to see each of these elements at least once. If at
|
57
|
+
least one cannot be found, the test will fail. The test will look
|
58
|
+
through the QuestionnaireResponse resources found in the first test for these
|
59
|
+
elements.
|
60
|
+
|
61
|
+
## Profile Validation
|
62
|
+
Each resource returned from the first search is expected to conform to
|
63
|
+
the [US Core QuestionnaireResponse Profile](http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse). Each element is checked against
|
64
|
+
teminology binding and cardinality requirements.
|
65
|
+
|
66
|
+
Elements with a required binding are validated against their bound
|
67
|
+
ValueSet. If the code/system in the element is not part of the ValueSet,
|
68
|
+
then the test will fail.
|
69
|
+
|
70
|
+
## Reference Validation
|
71
|
+
At least one instance of each external reference in elements marked as
|
72
|
+
"must support" within the resources provided by the system must resolve.
|
73
|
+
The test will attempt to read each reference found and will fail if no
|
74
|
+
read succeeds.
|
75
|
+
|
76
|
+
)
|
77
|
+
|
78
|
+
id :us_core_v501_questionnaire_response
|
79
|
+
run_as_group
|
80
|
+
optional
|
81
|
+
|
82
|
+
|
83
|
+
def self.metadata
|
84
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'questionnaire_response', 'metadata.yml')))
|
85
|
+
end
|
86
|
+
|
87
|
+
test from: :us_core_v501_questionnaire_response_patient_search_test
|
88
|
+
test from: :us_core_v501_questionnaire_response__id_search_test
|
89
|
+
test from: :us_core_v501_questionnaire_response_patient_authored_search_test
|
90
|
+
test from: :us_core_v501_questionnaire_response_patient__tag_authored_search_test
|
91
|
+
test from: :us_core_v501_questionnaire_response_patient_status_search_test
|
92
|
+
test from: :us_core_v501_questionnaire_response_patient__tag_search_test
|
93
|
+
test from: :us_core_v501_questionnaire_response_patient_questionnaire_search_test
|
94
|
+
test from: :us_core_v501_questionnaire_response_read_test
|
95
|
+
test from: :us_core_v501_questionnaire_response_provenance_revinclude_search_test
|
96
|
+
test from: :us_core_v501_questionnaire_response_validation_test
|
97
|
+
test from: :us_core_v501_questionnaire_response_must_support_test
|
98
|
+
test from: :us_core_v501_questionnaire_response_reference_resolution_test
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -42,17 +42,15 @@
|
|
42
42
|
- patient
|
43
43
|
- category
|
44
44
|
- date
|
45
|
-
:names_not_must_support_or_mandatory:
|
46
|
-
|
47
|
-
:must_support_or_mandatory: false
|
45
|
+
:names_not_must_support_or_mandatory: []
|
46
|
+
:must_support_or_mandatory: true
|
48
47
|
- :expectation: SHOULD
|
49
48
|
:names:
|
50
49
|
- patient
|
51
50
|
- code
|
52
51
|
- date
|
53
|
-
:names_not_must_support_or_mandatory:
|
54
|
-
|
55
|
-
:must_support_or_mandatory: false
|
52
|
+
:names_not_must_support_or_mandatory: []
|
53
|
+
:must_support_or_mandatory: true
|
56
54
|
- :expectation: SHALL
|
57
55
|
:names:
|
58
56
|
- patient
|
@@ -18,8 +18,6 @@ none are returned, the test is skipped.
|
|
18
18
|
)
|
19
19
|
|
20
20
|
id :us_core_v501_smokingstatus_patient_category_date_search_test
|
21
|
-
optional
|
22
|
-
|
23
21
|
input :patient_ids,
|
24
22
|
title: 'Patient IDs',
|
25
23
|
description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
|
@@ -37,6 +37,7 @@ require_relative 'pediatric_bmi_for_age_group'
|
|
37
37
|
require_relative 'head_circumference_percentile_group'
|
38
38
|
require_relative 'body_weight_group'
|
39
39
|
require_relative 'procedure_group'
|
40
|
+
require_relative 'questionnaire_response_group'
|
40
41
|
require_relative 'service_request_group'
|
41
42
|
require_relative 'organization_group'
|
42
43
|
require_relative 'practitioner_group'
|
@@ -120,6 +121,7 @@ module USCoreTestKit
|
|
120
121
|
group from: :us_core_v501_head_circumference_percentile
|
121
122
|
group from: :us_core_v501_body_weight
|
122
123
|
group from: :us_core_v501_procedure
|
124
|
+
group from: :us_core_v501_questionnaire_response
|
123
125
|
group from: :us_core_v501_service_request
|
124
126
|
group from: :us_core_v501_organization
|
125
127
|
group from: :us_core_v501_practitioner
|
@@ -70,9 +70,13 @@ module USCoreTestKit
|
|
70
70
|
|
71
71
|
any_must_support_slices = must_supports[:slices].any? do |slice|
|
72
72
|
# only handle type slices because that is all we need for now
|
73
|
+
# for a slice like Observation.effective[x]:effectiveDateTime, the search parameter's expression could be
|
74
|
+
# either Observation.effective or Observation.effectiveDateTime.
|
73
75
|
if slice[:discriminator] && slice[:discriminator][:type] == 'type'
|
74
76
|
full_must_support_path = "#{resource}.#{slice[:path].sub('[x]', slice[:discriminator][:code])}"
|
75
|
-
|
77
|
+
base_must_support_path = "#{resource}.#{slice[:path].sub('[x]', '')}"
|
78
|
+
|
79
|
+
full_paths.intersection([full_must_support_path,base_must_support_path]).present?
|
76
80
|
else
|
77
81
|
false
|
78
82
|
end
|
@@ -9,6 +9,7 @@ module USCoreTestKit
|
|
9
9
|
def initialize(ig_resources)
|
10
10
|
self.ig_resources = ig_resources
|
11
11
|
add_missing_supported_profiles
|
12
|
+
remove_extra_supported_profiles
|
12
13
|
self.metadata = IGMetadata.new
|
13
14
|
end
|
14
15
|
|
@@ -51,6 +52,14 @@ module USCoreTestKit
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
55
|
+
def remove_extra_supported_profiles
|
56
|
+
ig_resources.capability_statement.rest.first.resource
|
57
|
+
.find { |resource| resource.type == 'Observation' }
|
58
|
+
.supportedProfile.delete_if do |profile_url|
|
59
|
+
SpecialCases::PROFILES_TO_EXCLUDE.include?(profile_url)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
54
63
|
def add_metadata_from_resources
|
55
64
|
metadata.groups =
|
56
65
|
resources_in_capability_statement.flat_map do |resource|
|
@@ -296,6 +296,7 @@ module USCoreTestKit
|
|
296
296
|
when '5.0.1'
|
297
297
|
add_patient_uscdi_elements
|
298
298
|
add_document_reference_category_values
|
299
|
+
remove_survey_questionnaire_response
|
299
300
|
end
|
300
301
|
end
|
301
302
|
|
@@ -374,11 +375,6 @@ module USCoreTestKit
|
|
374
375
|
choices << { paths: ['location.location', 'serviceProvider'] }
|
375
376
|
when 'MedicationRequest'
|
376
377
|
choices << { paths: ['reportedBoolean', 'reportedReference'] }
|
377
|
-
when 'Patient'
|
378
|
-
choices << {
|
379
|
-
paths: ['name.period.end', 'name.use'],
|
380
|
-
uscdi_only: true
|
381
|
-
}
|
382
378
|
end
|
383
379
|
when '5.0.1'
|
384
380
|
case profile.type
|
@@ -399,13 +395,7 @@ module USCoreTestKit
|
|
399
395
|
choices << { paths: ['location.location', 'serviceProvider'] }
|
400
396
|
when 'MedicationRequest'
|
401
397
|
choices << { paths: ['reportedBoolean', 'reportedReference'] }
|
402
|
-
when 'Patient'
|
403
|
-
choices << {
|
404
|
-
paths: ['name.period.end', 'name.use'],
|
405
|
-
uscdi_only: true
|
406
|
-
}
|
407
398
|
end
|
408
|
-
|
409
399
|
end
|
410
400
|
|
411
401
|
@must_supports[:choices] = choices if choices.present?
|
@@ -444,11 +434,6 @@ module USCoreTestKit
|
|
444
434
|
path: 'name.suffix',
|
445
435
|
uscdi_only: true
|
446
436
|
}
|
447
|
-
@must_supports[:elements] << {
|
448
|
-
path: 'name.use',
|
449
|
-
fixed_value: 'old',
|
450
|
-
uscdi_only: true
|
451
|
-
}
|
452
437
|
@must_supports[:elements] << {
|
453
438
|
path: 'name.period.end',
|
454
439
|
uscdi_only: true
|
@@ -482,6 +467,11 @@ module USCoreTestKit
|
|
482
467
|
fixed_value: 'old',
|
483
468
|
uscdi_only: true
|
484
469
|
}
|
470
|
+
@must_supports[:elements] << {
|
471
|
+
path: 'name.use',
|
472
|
+
fixed_value: 'old',
|
473
|
+
uscdi_only: true
|
474
|
+
}
|
485
475
|
end
|
486
476
|
end
|
487
477
|
|
@@ -492,6 +482,17 @@ module USCoreTestKit
|
|
492
482
|
|
493
483
|
slice[:discriminator][:values] << 'clinical-note' if slice.present?
|
494
484
|
end
|
485
|
+
|
486
|
+
# FHIR-37794 Server systems are not required to support US Core QuestionnaireResponse
|
487
|
+
def remove_survey_questionnaire_response
|
488
|
+
return unless profile.type == 'Observation' &&
|
489
|
+
['us-core-observation-survey', 'us-core-observation-sdoh-assessment'].include?(profile.id)
|
490
|
+
|
491
|
+
element = @must_supports[:elements].find { |element| element[:path] == 'derivedFrom' }
|
492
|
+
element[:target_profiles].delete_if do |url|
|
493
|
+
url == 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse'
|
494
|
+
end
|
495
|
+
end
|
495
496
|
end
|
496
497
|
end
|
497
498
|
end
|
@@ -4,23 +4,17 @@ module USCoreTestKit
|
|
4
4
|
RESOURCES_TO_EXCLUDE = [
|
5
5
|
'Location',
|
6
6
|
'Medication',
|
7
|
-
'PractitionerRole'
|
8
|
-
'QuestionnaireResponse'
|
7
|
+
'PractitionerRole'
|
9
8
|
].freeze
|
10
9
|
|
11
10
|
PROFILES_TO_EXCLUDE = [
|
12
|
-
'
|
13
|
-
'
|
11
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-survey',
|
12
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-vital-signs'
|
14
13
|
].freeze
|
15
14
|
|
16
15
|
class << self
|
17
|
-
def exclude_resource?(resource)
|
18
|
-
RESOURCES_TO_EXCLUDE.include? resource
|
19
|
-
end
|
20
|
-
|
21
16
|
def exclude_group?(group)
|
22
|
-
RESOURCES_TO_EXCLUDE.include?(group.resource)
|
23
|
-
PROFILES_TO_EXCLUDE.include?(group.name)
|
17
|
+
RESOURCES_TO_EXCLUDE.include?(group.resource)
|
24
18
|
end
|
25
19
|
end
|
26
20
|
end
|
@@ -32,7 +32,7 @@ module USCoreTestKit
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def no_resources_skip_message
|
35
|
-
"No #{resource_type} resources
|
35
|
+
"No #{resource_type} resources appear to be available. " \
|
36
36
|
'Please use patients with more information.'
|
37
37
|
end
|
38
38
|
|
@@ -76,10 +76,10 @@ module USCoreTestKit
|
|
76
76
|
|
77
77
|
if metadata.must_supports[:choices].present?
|
78
78
|
@unresolved_references.delete_if do |reference|
|
79
|
-
choice_profiles = metadata.must_supports[:choices].find { |choice| choice[:target_profiles]
|
79
|
+
choice_profiles = metadata.must_supports[:choices].find { |choice| choice[:target_profiles]&.include?(reference[:target_profile]) }
|
80
80
|
|
81
81
|
choice_profiles.present? &&
|
82
|
-
choice_profiles[:target_profiles]
|
82
|
+
choice_profiles[:target_profiles]&.any? { |profile| @unresolved_references.none? { |element| element[:target_profile] == profile } }
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
@@ -136,7 +136,19 @@ module USCoreTestKit
|
|
136
136
|
def resource_is_valid_with_target_profile?(resource, target_profile)
|
137
137
|
return true if target_profile.blank?
|
138
138
|
|
139
|
-
|
139
|
+
# Only need to know if the resource is valid.
|
140
|
+
# Calling resource_is_valid? causes validation errors to be logged.
|
141
|
+
validator = find_validator(:default)
|
142
|
+
|
143
|
+
outcome = FHIR::OperationOutcome.new(JSON.parse(validator.validate(resource, target_profile)))
|
144
|
+
|
145
|
+
message_hashes = outcome.issue&.map { |issue| validator.message_hash_from_issue(issue, resource) } || []
|
146
|
+
|
147
|
+
message_hashes.concat(validator.additional_validation_messages(resource, target_profile))
|
148
|
+
|
149
|
+
validator.filter_messages(message_hashes)
|
150
|
+
|
151
|
+
message_hashes.none? { |message_hash| message_hash[:type] == 'error' }
|
140
152
|
end
|
141
153
|
end
|
142
154
|
end
|
@@ -609,9 +609,8 @@ module USCoreTestKit
|
|
609
609
|
# Patient.birthDate does not mandate comparators so cannot be converted
|
610
610
|
# Goal.target-date has day precision
|
611
611
|
# All others have second + time offset precision
|
612
|
-
if /^\d{4}
|
613
|
-
|
614
|
-
(/^\d{4}-\d{2}-\d{2}$/.match?(element) && resource_type != "Goal") # YYYY-MM-DD AND Resource is NOT Goal
|
612
|
+
if /^\d{4}(-\d{2})?$/.match?(element) || # YYYY or YYYY-MM
|
613
|
+
(/^\d{4}-\d{2}-\d{2}$/.match?(element) && resource_type != "Goal") # YYY-MM-DD AND Resource is NOT Goal
|
615
614
|
"gt#{(DateTime.xmlschema(element)-1).xmlschema}"
|
616
615
|
else
|
617
616
|
element
|
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.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inferno_core
|
@@ -1207,6 +1207,20 @@ files:
|
|
1207
1207
|
- lib/us_core_test_kit/generated/v5.0.1/pulse_oximetry/pulse_oximetry_reference_resolution_test.rb
|
1208
1208
|
- lib/us_core_test_kit/generated/v5.0.1/pulse_oximetry/pulse_oximetry_validation_test.rb
|
1209
1209
|
- lib/us_core_test_kit/generated/v5.0.1/pulse_oximetry_group.rb
|
1210
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/metadata.yml
|
1211
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_id_search_test.rb
|
1212
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_must_support_test.rb
|
1213
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_authored_search_test.rb
|
1214
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_questionnaire_search_test.rb
|
1215
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_search_test.rb
|
1216
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_status_search_test.rb
|
1217
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_tag_authored_search_test.rb
|
1218
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_patient_tag_search_test.rb
|
1219
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_provenance_revinclude_search_test.rb
|
1220
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_read_test.rb
|
1221
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_reference_resolution_test.rb
|
1222
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response/questionnaire_response_validation_test.rb
|
1223
|
+
- lib/us_core_test_kit/generated/v5.0.1/questionnaire_response_group.rb
|
1210
1224
|
- lib/us_core_test_kit/generated/v5.0.1/related_person/metadata.yml
|
1211
1225
|
- lib/us_core_test_kit/generated/v5.0.1/related_person/related_person_id_search_test.rb
|
1212
1226
|
- lib/us_core_test_kit/generated/v5.0.1/related_person/related_person_must_support_test.rb
|