davinci_pdex_test_kit 0.10.6 → 0.12.0

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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/pdex_payer_client_postman_preset.json +12 -0
  3. data/config/presets/pdex_payer_server_fhir_foundry_ri_preset.json +96 -0
  4. data/config/presets/pdex_payer_server_inferno_ri_preset.json +96 -0
  5. data/lib/davinci_pdex_test_kit/docs/davinci_pdex_test_kit_description_v200.md +33 -0
  6. data/lib/davinci_pdex_test_kit/docs/payer_client_suite_description_v200.md +107 -17
  7. data/lib/davinci_pdex_test_kit/fhir_resource_navigation.rb +5 -1
  8. data/lib/davinci_pdex_test_kit/group_metadata.rb +5 -1
  9. data/lib/davinci_pdex_test_kit/igs/davinci-pdex-2.0.0.tgz +0 -0
  10. data/lib/davinci_pdex_test_kit/igs/us-core-3.1.1.tgz +0 -0
  11. data/lib/davinci_pdex_test_kit/metadata.rb +16 -0
  12. data/lib/davinci_pdex_test_kit/must_support_test.rb +3 -0
  13. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_member_match_tests/client_member_match_validation_test.rb +21 -17
  14. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_validation_test.rb +96 -43
  15. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_workflow_interaction_test.rb +50 -0
  16. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/allergyintolerance_clinical_data_request_test.rb +18 -16
  17. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/careplan_clinical_data_request_test.rb +18 -16
  18. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/careteam_clinical_data_request_test.rb +18 -16
  19. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/clinical_data_request_check_test.rb +24 -0
  20. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/condition_clinical_data_request_test.rb +18 -16
  21. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/device_clinical_data_request_test.rb +19 -17
  22. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/diagnosticreport_clinical_data_request_test.rb +18 -16
  23. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/documentreference_clinical_data_request_test.rb +18 -16
  24. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/encounter_clinical_data_request_test.rb +18 -16
  25. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/explanationofbenefit_clinical_data_request_test.rb +18 -16
  26. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/goal_clinical_data_request_test.rb +18 -16
  27. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/immunization_clinical_data_request_test.rb +18 -16
  28. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/location_clinical_data_request_test.rb +18 -16
  29. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/medicationdispense_clinical_data_request_test.rb +18 -16
  30. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/medicationrequest_clinical_data_request_test.rb +18 -16
  31. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/observation_clinical_data_request_test.rb +18 -16
  32. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/organization_clinical_data_request_test.rb +18 -16
  33. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/patient_clinical_data_request_test.rb +18 -16
  34. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/patient_id_search_request_check_test.rb +21 -0
  35. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/practitioner_clinical_data_request_test.rb +18 -16
  36. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/practitionerrole_clinical_data_request_test.rb +18 -16
  37. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/procedure_clinical_data_request_test.rb +18 -16
  38. data/lib/davinci_pdex_test_kit/pdex_payer_client/collection.rb +46 -44
  39. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/binary_endpoint.rb +26 -0
  40. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/export_endpoint.rb +29 -0
  41. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/export_status_endpoint.rb +38 -0
  42. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/member_match_endpoint.rb +51 -0
  43. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/next_page_endpoint.rb +23 -0
  44. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/patient_endpoint.rb +25 -0
  45. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/patient_everything_endpoint.rb +34 -0
  46. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/proxy_endpoint.rb +178 -0
  47. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/resource_read_endpoint.rb +21 -0
  48. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/resource_search_endpoint.rb +22 -0
  49. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server/token_endpoint.rb +27 -0
  50. data/lib/davinci_pdex_test_kit/pdex_payer_client/mock_server.rb +53 -0
  51. data/lib/davinci_pdex_test_kit/pdex_payer_client/tags.rb +15 -0
  52. data/lib/davinci_pdex_test_kit/pdex_payer_client/urls.rb +51 -0
  53. data/lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb +99 -144
  54. data/lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_minimal_data_validation.rb +1 -1
  55. data/lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_must_support_validation.rb +1 -1
  56. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_must_support_test.rb +50 -0
  57. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_patient_search_test.rb +68 -0
  58. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_patient_type_search_test.rb +54 -0
  59. data/lib/davinci_pdex_test_kit/pdex_payer_server/{explanation_of_benefit/explanation_of_benefit_provenance_revinclude_search_test.rb → device/device_provenance_revinclude_search_test.rb} +16 -13
  60. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_read_test.rb +26 -0
  61. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_reference_resolution_test.rb +42 -0
  62. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/device_validation_test.rb +39 -0
  63. data/lib/davinci_pdex_test_kit/pdex_payer_server/device/metadata.yml +154 -0
  64. data/lib/davinci_pdex_test_kit/pdex_payer_server/device_group.rb +88 -0
  65. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_id_search_test.rb +10 -26
  66. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_identifier_search_test.rb +13 -26
  67. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_must_support_test.rb +40 -7
  68. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_lastupdated_search_test.rb +48 -0
  69. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_search_test.rb +62 -0
  70. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_service_date_search_test.rb +13 -28
  71. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_type_search_test.rb +12 -28
  72. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_read_test.rb +1 -1
  73. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_reference_resolution_test.rb +10 -6
  74. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_validation_test.rb +10 -11
  75. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/metadata.yml +285 -273
  76. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb +69 -73
  77. data/lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb +11 -13
  78. data/lib/davinci_pdex_test_kit/pdex_payer_server/export_validation_group.rb +3 -8
  79. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_must_support_test.rb +42 -0
  80. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_patient_search_test.rb +64 -0
  81. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_patient_status_search_test.rb +54 -0
  82. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_patient_status_type_search_test.rb +55 -0
  83. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_provenance_revinclude_search_test.rb +54 -0
  84. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_read_test.rb +26 -0
  85. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_reference_resolution_test.rb +42 -0
  86. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/medication_dispense_validation_test.rb +39 -0
  87. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense/metadata.yml +206 -0
  88. data/lib/davinci_pdex_test_kit/pdex_payer_server/medication_dispense_group.rb +69 -0
  89. data/lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_local_references_validation.rb +1 -1
  90. data/lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_profile_validation.rb +1 -3
  91. data/lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb +36 -37
  92. data/lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb +30 -31
  93. data/lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb +16 -16
  94. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance/metadata.yml +173 -0
  95. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance/provenance_must_support_test.rb +51 -0
  96. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance/provenance_read_test.rb +26 -0
  97. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance/provenance_reference_resolution_test.rb +46 -0
  98. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance/provenance_validation_test.rb +39 -0
  99. data/lib/davinci_pdex_test_kit/pdex_payer_server/provenance_group.rb +59 -0
  100. data/lib/davinci_pdex_test_kit/pdex_payer_server/workflow_clinical_data_group.rb +25 -16
  101. data/lib/davinci_pdex_test_kit/pdex_payer_server/workflow_everything_group.rb +21 -10
  102. data/lib/davinci_pdex_test_kit/pdex_payer_server/workflow_export_group.rb +24 -20
  103. data/lib/davinci_pdex_test_kit/pdex_payer_server/workflow_member_match_group.rb +56 -38
  104. data/lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb +124 -112
  105. data/lib/davinci_pdex_test_kit/pdex_provider_client_suite.rb +8 -8
  106. data/lib/davinci_pdex_test_kit/requirements/davinci-pdex-test-kit_out_of_scope_requirements.csv +1 -0
  107. data/lib/davinci_pdex_test_kit/requirements/davinci-pdex-test-kit_requirements.csv +64 -0
  108. data/lib/davinci_pdex_test_kit/requirements/generated/davinci-pdex-test-kit_requirements_coverage.csv +64 -0
  109. data/lib/davinci_pdex_test_kit/version.rb +2 -3
  110. data/lib/davinci_pdex_test_kit.rb +2 -2
  111. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
  112. data/lib/inferno_requirements_tools/rake/rakefile_template +19 -0
  113. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
  114. data/lib/requirements_config.yaml +17 -0
  115. metadata +113 -27
  116. data/lib/davinci_pdex_test_kit/ext/inferno_core/record_response_route.rb +0 -98
  117. data/lib/davinci_pdex_test_kit/ext/inferno_core/request.rb +0 -19
  118. data/lib/davinci_pdex_test_kit/ext/inferno_core/runnable.rb +0 -18
  119. data/lib/davinci_pdex_test_kit/mock_server.rb +0 -281
  120. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_member_match_tests/client_member_match_submit_test.rb +0 -24
  121. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_must_support_tests/client_member_match_must_support_submit_test.rb +0 -26
  122. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_must_support_tests/client_member_match_must_support_validation_test.rb +0 -32
  123. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_must_support_tests/metadata.yml +0 -61
  124. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_scratch_storing.rb +0 -32
  125. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb +0 -31
  126. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_last_updated_search_test.rb +0 -63
  127. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_patient_use_search_test.rb +0 -68
  128. data/lib/davinci_pdex_test_kit/tags.rb +0 -11
  129. data/lib/davinci_pdex_test_kit/urls.rb +0 -77
  130. /data/lib/davinci_pdex_test_kit/{metadata → pdex_payer_client/mock_server/resources}/mock_capability_statement.json +0 -0
  131. /data/lib/davinci_pdex_test_kit/{metadata → pdex_payer_client/mock_server/resources}/mock_operation_outcome_resource.json +0 -0
@@ -0,0 +1,154 @@
1
+ ---
2
+ :name: pdex_device
3
+ :class_name: PdexDeviceSequence
4
+ :version: v2.0.0
5
+ :reformatted_version: v200
6
+ :resource: Device
7
+ :profile_url: http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/pdex-device
8
+ :profile_name: PDex Device
9
+ :profile_version: 2.0.0
10
+ :title: PDex Device
11
+ :short_description: Verify support for the server capabilities required by the PDex
12
+ Device.
13
+ :is_delayed: false
14
+ :interactions:
15
+ - :code: search-type
16
+ :expectation: SHALL
17
+ - :code: read
18
+ :expectation: SHALL
19
+ - :code: vread
20
+ :expectation: SHOULD
21
+ - :code: history-instance
22
+ :expectation: SHOULD
23
+ - :code: history-type
24
+ :expectation: MAY
25
+ :operations: []
26
+ :searches:
27
+ - :names:
28
+ - patient
29
+ :expectation: SHALL
30
+ :names_not_must_support_or_mandatory: []
31
+ :must_support_or_mandatory: true
32
+ - :expectation: SHOULD
33
+ :names:
34
+ - patient
35
+ - type
36
+ :names_not_must_support_or_mandatory: []
37
+ :must_support_or_mandatory: true
38
+ - :expectation: SHOULD
39
+ :names:
40
+ - patient
41
+ - status
42
+ :names_not_must_support_or_mandatory: []
43
+ :must_support_or_mandatory: true
44
+ :search_definitions:
45
+ :patient:
46
+ :paths:
47
+ - patient
48
+ :full_paths:
49
+ - Device.patient
50
+ :comparators: {}
51
+ :values: []
52
+ :type: Reference
53
+ :contains_multiple: false
54
+ :multiple_or: MAY
55
+ :type:
56
+ :paths:
57
+ - type
58
+ :full_paths:
59
+ - Device.type
60
+ :comparators: {}
61
+ :values: []
62
+ :type: CodeableConcept
63
+ :contains_multiple: false
64
+ :multiple_or: MAY
65
+ :status:
66
+ :paths:
67
+ - status
68
+ :full_paths:
69
+ - Device.status
70
+ :comparators: {}
71
+ :values: []
72
+ :type: CodeableConcept
73
+ :contains_multiple: false
74
+ :multiple_or: MAY
75
+ :include_params: []
76
+ :revincludes:
77
+ - Provenance:target
78
+ :required_concepts: []
79
+ :must_supports:
80
+ :extensions: []
81
+ :slices: []
82
+ :elements:
83
+ - :path: udiCarrier
84
+ - :path: udiCarrier.deviceIdentifier
85
+ - :path: udiCarrier.carrierAIDC
86
+ - :path: udiCarrier.carrierHRF
87
+ - :path: status
88
+ - :path: distinctIdentifier
89
+ - :path: expirationDate
90
+ - :path: lotNumber
91
+ - :path: serialNumber
92
+ - :path: type
93
+ - :path: patient
94
+ :types:
95
+ - Reference
96
+ :target_profiles:
97
+ - http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient
98
+ - :path: url
99
+ :mandatory_elements:
100
+ - Device.udiCarrier.deviceIdentifier
101
+ - Device.deviceName.name
102
+ - Device.deviceName.type
103
+ - Device.type
104
+ - Device.specialization.systemType
105
+ - Device.version.value
106
+ - Device.property.type
107
+ - Device.patient
108
+ :bindings:
109
+ - :type: code
110
+ :strength: required
111
+ :system: http://hl7.org/fhir/ValueSet/udi-entry-type
112
+ :path: udiCarrier.entryType
113
+ - :type: code
114
+ :strength: required
115
+ :system: http://hl7.org/fhir/ValueSet/device-status
116
+ :path: status
117
+ - :type: code
118
+ :strength: required
119
+ :system: http://hl7.org/fhir/ValueSet/device-nametype
120
+ :path: deviceName.type
121
+ :references:
122
+ - :path: Device.definition
123
+ :profiles:
124
+ - http://hl7.org/fhir/StructureDefinition/DeviceDefinition
125
+ - :path: Device.patient
126
+ :profiles:
127
+ - http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient
128
+ - :path: Device.owner
129
+ :profiles:
130
+ - http://hl7.org/fhir/StructureDefinition/Organization
131
+ - :path: Device.location
132
+ :profiles:
133
+ - http://hl7.org/fhir/StructureDefinition/Location
134
+ - :path: Device.parent
135
+ :profiles:
136
+ - http://hl7.org/fhir/StructureDefinition/Device
137
+ :tests:
138
+ - :id: pdex_device_patient_search
139
+ :file_name: device_patient_search_test.rb
140
+ - :id: pdex_device_patient_type_search
141
+ :file_name: device_patient_type_search_test.rb
142
+ - :id: pdex_device_read
143
+ :file_name: device_read_test.rb
144
+ - :id: pdex_device_provenance_revinclude_search
145
+ :file_name: device_provenance_revinclude_search_test.rb
146
+ - :id: pdex_device_validation
147
+ :file_name: device_validation_test.rb
148
+ - :id: pdex_device_must_support
149
+ :file_name: device_must_support_test.rb
150
+ - :id: pdex_device_ref_resolution
151
+ :file_name: device_reference_resolution_test.rb
152
+ :id: pdex_device
153
+ :file_name: device_group.rb
154
+ :delayed_references: []
@@ -0,0 +1,88 @@
1
+ require_relative 'device/device_patient_search_test'
2
+ require_relative 'device/device_patient_type_search_test'
3
+ require_relative 'device/device_read_test'
4
+ require_relative 'device/device_provenance_revinclude_search_test'
5
+ require_relative 'device/device_validation_test'
6
+ require_relative 'device/device_must_support_test'
7
+ require_relative 'device/device_reference_resolution_test'
8
+
9
+ module DaVinciPDexTestKit
10
+ module PDexPayerServer
11
+ class DeviceGroup < Inferno::TestGroup
12
+ title 'PDex Device Tests'
13
+ short_description 'Verify support for the server capabilities required by the PDex Device.'
14
+ description %(
15
+ # Background
16
+
17
+ The PDex Device sequence verifies that the system under test is
18
+ able to provide correct responses for Device queries. These queries
19
+ must contain resources conforming to the PDex Device as
20
+ specified in the PDex v2.0.0 Implementation Guide.
21
+
22
+ # Testing Methodology
23
+ ## Searching
24
+ This test sequence will first perform each required search associated
25
+ with this resource. This sequence will perform searches with the
26
+ following parameters:
27
+
28
+ * patient
29
+
30
+ ### Search Parameters
31
+ The first search uses the selected patient(s) from the prior launch
32
+ sequence. Any subsequent searches will look for its parameter values
33
+ from the results of the first search. For example, the `identifier`
34
+ search in the patient sequence is performed by looking for an existing
35
+ `Patient.identifier` from any of the resources returned in the `_id`
36
+ search. If a value cannot be found this way, the search is skipped.
37
+
38
+ ### Search Validation
39
+ Inferno will retrieve up to the first 20 bundle pages of the reply for
40
+ Device resources and save them for subsequent tests. Each of
41
+ these resources is then checked to see if it matches the searched
42
+ parameters in accordance with [FHIR search
43
+ guidelines](https://www.hl7.org/fhir/search.html). The test will fail,
44
+ for example, if a Patient search for `gender=male` returns a `female`
45
+ patient.
46
+
47
+
48
+ ## Must Support
49
+ Each profile contains elements marked as "must support". This test
50
+ sequence expects to see each of these elements at least once. If at
51
+ least one cannot be found, the test will fail. The test will look
52
+ through the Device resources found in the first test for these
53
+ elements.
54
+
55
+ ## Profile Validation
56
+ Each resource returned from the first search is expected to conform to
57
+ the [PDex Device](http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/pdex-device). Each element is checked against
58
+ teminology binding and cardinality requirements.
59
+
60
+ Elements with a required binding are validated against their bound
61
+ ValueSet. If the code/system in the element is not part of the ValueSet,
62
+ then the test will fail.
63
+
64
+ ## Reference Validation
65
+ At least one instance of each external reference in elements marked as
66
+ "must support" within the resources provided by the system must resolve.
67
+ The test will attempt to read each reference found and will fail if no
68
+ read succeeds.
69
+ )
70
+
71
+ id :pdex_device
72
+ run_as_group
73
+
74
+ def self.metadata
75
+ @metadata ||= USCoreTestKit::USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'device', 'metadata.yml'),
76
+ aliases: true))
77
+ end
78
+
79
+ test from: :pdex_device_patient_search
80
+ test from: :pdex_device_patient_type_search
81
+ test from: :pdex_device_read
82
+ test from: :pdex_device_provenance_revinclude_search
83
+ test from: :pdex_device_validation
84
+ test from: :pdex_device_must_support
85
+ test from: :pdex_device_ref_resolution
86
+ end
87
+ end
88
+ end
@@ -7,47 +7,31 @@ module DaVinciPDexTestKit
7
7
  class ExplanationOfBenefitIdSearchTest < Inferno::Test
8
8
  include USCoreTestKit::SearchTest
9
9
 
10
- title 'Server returns valid results for Patient search by _id'
10
+ title 'Server returns valid results for ExplanationOfBenefit search by _id'
11
11
  description %(
12
- A server SHALL support searching by
13
- _id on the ExplanationOfBenefit resource. This test
14
- will pass if resources are returned and match the search criteria. If
15
- none are returned, the test is skipped.
16
-
17
- Because this is the first search of the sequence, resources in the
18
- response will be used for subsequent tests.
19
-
20
- Additionally, this test will check that GET and POST search methods
21
- return the same number of results. Search by POST is required by the
22
- FHIR R4 specification, and these tests interpret search by GET as a
23
- requirement of DaVinci PDex v2.0.0.
24
-
25
- [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
12
+ A server SHALL support searching by
13
+ _id on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
26
16
 
17
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
27
18
  )
28
19
 
29
- id :pdex_explanation_of_benefit__id_search_test
30
-
31
- input :patient_ids,
32
- title: 'Patient IDs',
33
- description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
34
-
35
- # TODO: test if this test runs
36
-
20
+ id :pdex_eob_id_search
37
21
  def self.properties
38
22
  @properties ||= USCoreTestKit::SearchTestProperties.new(
39
23
  resource_type: 'ExplanationOfBenefit',
40
24
  search_param_names: ['_id']
41
- # TODO: any more search test properties?
42
25
  )
43
26
  end
44
27
 
45
28
  def self.metadata
46
- @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
29
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
30
+ aliases: true))
47
31
  end
48
32
 
49
33
  def scratch_resources
50
- scratch[:patient_resources] ||= {}
34
+ scratch[:explanation_of_benefit_resources] ||= {}
51
35
  end
52
36
 
53
37
  run do
@@ -7,47 +7,34 @@ module DaVinciPDexTestKit
7
7
  class ExplanationOfBenefitIdentifierSearchTest < Inferno::Test
8
8
  include USCoreTestKit::SearchTest
9
9
 
10
- title 'Server returns valid results for Patient search by identifier'
10
+ title 'Server returns valid results for ExplanationOfBenefit search by identifier'
11
11
  description %(
12
- A server SHALL support searching by
13
- identifier on the ExplanationOfBenefit resource. This test
14
- will pass if resources are returned and match the search criteria. If
15
- none are returned, the test is skipped.
16
-
17
- Because this is the first search of the sequence, resources in the
18
- response will be used for subsequent tests.
19
-
20
- Additionally, this test will check that GET and POST search methods
21
- return the same number of results. Search by POST is required by the
22
- FHIR R4 specification, and these tests interpret search by GET as a
23
- requirement of DaVinci PDex v2.0.0.
24
-
25
- [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
12
+ A server SHALL support searching by
13
+ identifier on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
26
16
 
17
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
27
18
  )
28
19
 
29
- id :pdex_explanation_of_benefit_identifier_search_test
30
-
31
- input :patient_ids,
32
- title: 'Patient IDs',
33
- description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
34
-
35
- # TODO: test if this test runs
20
+ id :pdex_eob_identifier_search
21
+ optional
36
22
 
37
23
  def self.properties
38
24
  @properties ||= USCoreTestKit::SearchTestProperties.new(
39
25
  resource_type: 'ExplanationOfBenefit',
40
- search_param_names: ['identifier']
41
- # TODO: any more search test properties?
26
+ search_param_names: ['identifier'],
27
+ token_search_params: ['identifier']
42
28
  )
43
29
  end
44
30
 
45
31
  def self.metadata
46
- @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
32
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
33
+ aliases: true))
47
34
  end
48
35
 
49
36
  def scratch_resources
50
- scratch[:patient_resources] ||= {}
37
+ scratch[:explanation_of_benefit_resources] ||= {}
51
38
  end
52
39
 
53
40
  run do
@@ -8,24 +8,57 @@ module DaVinciPDexTestKit
8
8
 
9
9
  title 'All must support elements are provided in the ExplanationOfBenefit resources returned'
10
10
  description %(
11
- US Core Responders SHALL be capable of populating all data elements as
12
- part of the query results as specified by the US Core Server Capability
11
+ PDex Responders SHALL be capable of populating all data elements as
12
+ part of the query results as specified by the PDex Server Capability
13
13
  Statement. This test will look through the ExplanationOfBenefit resources
14
14
  found previously for the following must support elements:
15
15
 
16
- #### TODO: list out MS elements:
17
-
18
- * ...
16
+ * ExplanationOfBenefit.adjudication
17
+ * ExplanationOfBenefit.adjudication.category
18
+ * ExplanationOfBenefit.adjudication.extension:reviewAction
19
+ * ExplanationOfBenefit.adjudication:adjudicationamounttype
20
+ * ExplanationOfBenefit.adjudication:denialreason
21
+ * ExplanationOfBenefit.careTeam.provider
22
+ * ExplanationOfBenefit.enterer
23
+ * ExplanationOfBenefit.extension:levelOfServiceType
24
+ * ExplanationOfBenefit.facility
25
+ * ExplanationOfBenefit.insurer
26
+ * ExplanationOfBenefit.item.adjudication.extension:reviewAction
27
+ * ExplanationOfBenefit.item.adjudication:adjudicationamounttype
28
+ * ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount
29
+ * ExplanationOfBenefit.item.adjudication:allowedunits
30
+ * ExplanationOfBenefit.item.adjudication:allowedunits.value
31
+ * ExplanationOfBenefit.item.adjudication:consumedunits
32
+ * ExplanationOfBenefit.item.adjudication:consumedunits.value
33
+ * ExplanationOfBenefit.item.adjudication:denialreason
34
+ * ExplanationOfBenefit.item.adjudication:denialreason.reason
35
+ * ExplanationOfBenefit.item.category
36
+ * ExplanationOfBenefit.item.extension:administrationReferenceNumber
37
+ * ExplanationOfBenefit.item.extension:authorizedItemDetail
38
+ * ExplanationOfBenefit.item.extension:authorizedProvider
39
+ * ExplanationOfBenefit.item.extension:itemTraceNumber
40
+ * ExplanationOfBenefit.item.extension:preAuthIssueDate
41
+ * ExplanationOfBenefit.item.extension:preAuthPeriod
42
+ * ExplanationOfBenefit.item.extension:previousAuthorizationNumber
43
+ * ExplanationOfBenefit.patient
44
+ * ExplanationOfBenefit.preAuthRefPeriod
45
+ * ExplanationOfBenefit.provider
46
+ * ExplanationOfBenefit.status
47
+ * ExplanationOfBenefit.total.category
48
+ * ExplanationOfBenefit.total.extension:priorauth-utilization
49
+ * ExplanationOfBenefit.type
50
+ * ExplanationOfBenefit.use
19
51
  )
20
52
 
21
- id :pdex_explanation_of_benefit_must_support_test
53
+ id :pdex_eob_must_support
22
54
 
23
55
  def resource_type
24
56
  'ExplanationOfBenefit'
25
57
  end
26
58
 
27
59
  def self.metadata
28
- @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
60
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
61
+ aliases: true))
29
62
  end
30
63
 
31
64
  def scratch_resources
@@ -0,0 +1,48 @@
1
+ require 'us_core_test_kit/search_test'
2
+ require 'us_core_test_kit/search_test_properties'
3
+ require 'us_core_test_kit/generator/group_metadata'
4
+
5
+ module DaVinciPDexTestKit
6
+ module PDexPayerServer
7
+ class ExplanationOfBenefitPatientLastupdatedSearchTest < Inferno::Test
8
+ include USCoreTestKit::SearchTest
9
+
10
+ title 'Server returns valid results for ExplanationOfBenefit search by patient + _lastUpdated'
11
+ description %(
12
+ A server SHALL support searching by
13
+ patient + _lastUpdated on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
16
+
17
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
18
+ )
19
+
20
+ id :pdex_eob_patient_last_updated_search
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 ||= USCoreTestKit::SearchTestProperties.new(
29
+ resource_type: 'ExplanationOfBenefit',
30
+ search_param_names: ['patient', '_lastUpdated']
31
+ )
32
+ end
33
+
34
+ def self.metadata
35
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
36
+ aliases: true))
37
+ end
38
+
39
+ def scratch_resources
40
+ scratch[:explanation_of_benefit_resources] ||= {}
41
+ end
42
+
43
+ run do
44
+ run_search_test
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,62 @@
1
+ require 'us_core_test_kit/search_test'
2
+ require 'us_core_test_kit/search_test_properties'
3
+ require 'us_core_test_kit/generator/group_metadata'
4
+
5
+ module DaVinciPDexTestKit
6
+ module PDexPayerServer
7
+ class ExplanationOfBenefitPatientSearchTest < Inferno::Test
8
+ include USCoreTestKit::SearchTest
9
+
10
+ title 'Server returns valid results for ExplanationOfBenefit search by patient'
11
+ description %(
12
+ A server SHALL support searching by
13
+ patient on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
16
+
17
+ This test verifies that the server supports searching by reference using
18
+ the form `patient=[id]` as well as `patient=Patient/[id]`. The two
19
+ different forms are expected to return the same number of results. US
20
+ Core requires that both forms are supported by PDex responders.
21
+
22
+ Because this is the first search of the sequence, resources in the
23
+ response will be used for subsequent tests.
24
+
25
+ Additionally, this test will check that GET and POST search methods
26
+ return the same number of results. Search by POST is required by the
27
+ FHIR R4 specification, and these tests interpret search by GET as a
28
+ requirement of PDex v2.0.0.
29
+
30
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
31
+ )
32
+
33
+ id :pdex_eob_patient_search
34
+ input :patient_ids,
35
+ title: 'Patient IDs',
36
+ description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
37
+
38
+ def self.properties
39
+ @properties ||= USCoreTestKit::SearchTestProperties.new(
40
+ first_search: true,
41
+ resource_type: 'ExplanationOfBenefit',
42
+ search_param_names: ['patient'],
43
+ test_reference_variants: true,
44
+ test_post_search: true
45
+ )
46
+ end
47
+
48
+ def self.metadata
49
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
50
+ aliases: true))
51
+ end
52
+
53
+ def scratch_resources
54
+ scratch[:explanation_of_benefit_resources] ||= {}
55
+ end
56
+
57
+ run do
58
+ run_search_test
59
+ end
60
+ end
61
+ end
62
+ end
@@ -9,46 +9,31 @@ module DaVinciPDexTestKit
9
9
 
10
10
  title 'Server returns valid results for ExplanationOfBenefit search by patient + service-date'
11
11
  description %(
12
- A server SHALL support searching by
13
- patient + service-date on the ExplanationOfBenefit resource. This test
14
- will pass if resources are returned and match the search criteria. If
15
- none are returned, the test is skipped.
16
-
17
- This test verifies that the server supports searching by reference using
18
- the form `patient=[id]` as well as `patient=Patient/[id]`. The two
19
- different forms are expected to return the same number of results. US
20
- Core requires that both forms are supported by US Core responders, and
21
- PDex expands upon US Core.
22
-
23
- Because this is the first search of the sequence, resources in the
24
- response will be used for subsequent tests.
25
-
26
- Additionally, this test will check that GET and POST search methods
27
- return the same number of results. Search by POST is required by the
28
- FHIR R4 specification, and these tests interpret search by GET as a
29
- requirement of PDex v2.0.0.
30
-
31
- [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
12
+ A server SHALL support searching by
13
+ patient + service-date on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
32
16
 
17
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
33
18
  )
34
19
 
35
- id :pdex_explanation_of_benefit_patient_service_date_search_test
20
+ id :pdex_eob_patient_service_date_search
21
+ optional
36
22
 
37
23
  input :patient_ids,
38
- title: 'Patient IDs',
39
- description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
40
-
24
+ title: 'Patient IDs',
25
+ description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
26
+
41
27
  def self.properties
42
28
  @properties ||= USCoreTestKit::SearchTestProperties.new(
43
29
  resource_type: 'ExplanationOfBenefit',
44
- search_param_names: ['patient', 'service-date'],
45
- test_post_search: true
46
- # TODO other properties?
30
+ search_param_names: ['patient', 'service-date']
47
31
  )
48
32
  end
49
33
 
50
34
  def self.metadata
51
- @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
35
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
36
+ aliases: true))
52
37
  end
53
38
 
54
39
  def scratch_resources
@@ -9,46 +9,30 @@ module DaVinciPDexTestKit
9
9
 
10
10
  title 'Server returns valid results for ExplanationOfBenefit search by patient + type'
11
11
  description %(
12
- A server SHALL support searching by
13
- patient + type on the ExplanationOfBenefit resource. This test
14
- will pass if resources are returned and match the search criteria. If
15
- none are returned, the test is skipped.
16
-
17
- This test verifies that the server supports searching by reference using
18
- the form `patient=[id]` as well as `patient=Patient/[id]`. The two
19
- different forms are expected to return the same number of results. US
20
- Core requires that both forms are supported by US Core responders, and
21
- PDex expands upon US Core.
22
-
23
- Because this is the first search of the sequence, resources in the
24
- response will be used for subsequent tests.
25
-
26
- Additionally, this test will check that GET and POST search methods
27
- return the same number of results. Search by POST is required by the
28
- FHIR R4 specification, and these tests interpret search by GET as a
29
- requirement of PDex v2.0.0.
30
-
31
- [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
12
+ A server SHALL support searching by
13
+ patient + type on the ExplanationOfBenefit resource. This test
14
+ will pass if resources are returned and match the search criteria. If
15
+ none are returned, the test is skipped.
32
16
 
17
+ [PDex Server CapabilityStatement](https://hl7.org/fhir/us/davinci-pdex/STU2/CapabilityStatement-pdex-server.html)
33
18
  )
34
19
 
35
- id :pdex_explanation_of_benefit_patient_type_search_test
36
-
20
+ id :pdex_eob_patient_type_search
37
21
  input :patient_ids,
38
- title: 'Patient IDs',
39
- description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
40
-
22
+ title: 'Patient IDs',
23
+ description: 'Comma separated list of patient IDs that in sum contain all MUST SUPPORT elements'
24
+
41
25
  def self.properties
42
26
  @properties ||= USCoreTestKit::SearchTestProperties.new(
43
27
  resource_type: 'ExplanationOfBenefit',
44
28
  search_param_names: ['patient', 'type'],
45
- test_post_search: true
46
- # TODO other properties?
29
+ token_search_params: ['type']
47
30
  )
48
31
  end
49
32
 
50
33
  def self.metadata
51
- @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
34
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
35
+ aliases: true))
52
36
  end
53
37
 
54
38
  def scratch_resources
@@ -8,7 +8,7 @@ module DaVinciPDexTestKit
8
8
  title 'Server returns correct ExplanationOfBenefit resource from ExplanationOfBenefit read interaction'
9
9
  description 'A server SHALL support the ExplanationOfBenefit read interaction.'
10
10
 
11
- id :pdex_explanation_of_benefit_read_test
11
+ id :pdex_eob_read
12
12
 
13
13
  def resource_type
14
14
  'ExplanationOfBenefit'