davinci_crd_test_kit 0.14.1 → 0.14.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.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/{inferno_crd_server_suite.json.erb → client_against_inferno_crd_server_suite.json.erb} +0 -33
  3. data/config/presets/{ri_crd_request_generator.json.erb → client_against_ri_crd_request_generator.json.erb} +1 -14
  4. data/config/presets/client_v221_against_inferno_crd_server_suite.json.erb +84 -0
  5. data/config/presets/client_v221_against_ri_br_provider.json.erb +31 -0
  6. data/config/presets/{ri_crd_request_generator.json_v221.json.erb → client_v221_against_ri_crd_request_generator.json.erb} +1 -1
  7. data/config/presets/{inferno_crd_client_suite.json.erb → server_against_inferno_crd_client_suite.json.erb} +0 -43
  8. data/config/presets/{ri_crd_server.json.erb → server_against_ri_crd_server.json.erb} +1 -44
  9. data/config/presets/{inferno_crd_client_suite_v221.json.erb → server_v221_against_inferno_crd_client_suite.json.erb} +0 -61
  10. data/config/presets/{inferno_crd_client_suite_prefetch_subset_v221.json.erb → server_v221_against_inferno_crd_client_suite_prefetch_subset.json.erb} +0 -46
  11. data/config/presets/server_v221_against_inferno_g31_suite.json.erb +49 -0
  12. data/lib/davinci_crd_test_kit/client/cross_hook_helper.rb +26 -0
  13. data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +7 -7
  14. data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +4 -1
  15. data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +63 -38
  16. data/lib/davinci_crd_test_kit/client/endpoints/mock_service_response.rb +26 -7
  17. data/lib/davinci_crd_test_kit/client/endpoints/scenario_service_response.rb +54 -0
  18. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +8 -27
  19. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +35 -23
  20. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +34 -21
  21. data/lib/davinci_crd_test_kit/client/v2.0.1/cds-services-v201.json +20 -20
  22. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +12 -10
  23. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +12 -10
  24. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +12 -10
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +5 -5
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +12 -10
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +12 -10
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +12 -10
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +3 -36
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +3 -36
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +3 -36
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +4 -13
  33. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +3 -13
  34. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +3 -13
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +3 -13
  36. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +1 -1
  37. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/attestation_instructions.rb +10 -0
  38. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_authorized_scope_attestation_test.rb +45 -0
  39. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_coverage_based_invocation_attestation_test.rb +44 -0
  40. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_data_element_expectations_attestation_test.rb +44 -0
  41. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_hook_invocation_logging_attestation_test.rb +43 -0
  42. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_must_support_exposure_attestation_test.rb +43 -0
  43. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_must_support_use_attestation_test.rb +41 -0
  44. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_order_sign_support_attestation_test.rb +42 -0
  45. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_prefetch_key_omission_attestation_test.rb +42 -0
  46. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_resource_identifiers_attestation_test.rb +43 -0
  47. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_response_case_distinction_attestation_test.rb +43 -0
  48. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_security_and_privacy_attestation_test.rb +43 -0
  49. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_workflow_integration_attestation_test.rb +44 -0
  50. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +1 -1
  51. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +29 -18
  52. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +35 -22
  53. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +47 -47
  54. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +50 -50
  55. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +16 -14
  56. data/lib/davinci_crd_test_kit/client/v2.2.1/client_attestations_group.rb +49 -0
  57. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +22 -6
  58. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_interaction_group.rb +98 -0
  59. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +12 -10
  60. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +12 -10
  61. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +14 -12
  62. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +9 -9
  63. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +2 -1
  64. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +16 -14
  65. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +12 -10
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +16 -14
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/client_scenarios_group.rb +26 -0
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/client_self_pay_hook_group.rb +36 -0
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/client_unknown_content_hook_group.rb +34 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +19 -3
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +1 -1
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +4 -11
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +1 -9
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +6 -2
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +3 -12
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +8 -89
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/base_hook_invocation_receive_request_test.rb +163 -0
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/cross_hooks_receive_request_test.rb +97 -0
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +8 -90
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +8 -90
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +8 -98
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +8 -98
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +8 -98
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +10 -2
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +1 -1
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/self_pay/client_self_pay_no_request_test.rb +30 -0
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/self_pay/client_self_pay_workflow_test.rb +55 -0
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/unknown_content/client_unknown_content_attestation_test.rb +99 -0
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/unknown_content/client_unknown_content_receive_request_test.rb +62 -0
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +1 -1
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +10 -2
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +1 -1
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +1 -1
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +1 -1
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +1 -1
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +1 -1
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +1 -1
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +52 -20
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +1 -1
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +6 -3
  101. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +9 -0
  102. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +30 -13
  103. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +2 -0
  104. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +26 -27
  105. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +48 -41
  106. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +3 -0
  107. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  108. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +6 -2
  109. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +107 -107
  110. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +101 -97
  111. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +18 -18
  112. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +36 -32
  113. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  114. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +1 -1
  115. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +5 -5
  116. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_standard_prefetch_expressions_test.rb +1 -2
  117. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +2 -2
  118. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +5 -5
  119. data/lib/davinci_crd_test_kit/version.rb +2 -2
  120. metadata +40 -12
  121. data/config/presets/inferno_crd_server_suite_v221.json.erb +0 -94
@@ -1,9 +1,11 @@
1
1
  require_relative '../../../cross_suite/prefetch_contents_validation'
2
+ require_relative '../../tagged_request_load_helper'
2
3
 
3
4
  module DaVinciCRDTestKit
4
5
  module V201
5
6
  class HookRequestPrefetchEqualsQueriedTest < Inferno::Test
6
7
  include PrefetchContentsValidation
8
+ include TaggedRequestLoadHelper
7
9
 
8
10
  id :crd_v201_hook_request_prefetch_equals_queried
9
11
  title 'Prefetched data is equivalent to queried data'
@@ -39,18 +41,6 @@ module DaVinciCRDTestKit
39
41
  override_access_token.present? ? override_access_token : client_access_token
40
42
  end
41
43
 
42
- def hook_name
43
- config.options[:hook_name]
44
- end
45
-
46
- def crd_test_group
47
- config.options[:crd_test_group]
48
- end
49
-
50
- def tags_to_load
51
- crd_test_group.present? ? [hook_name, crd_test_group] : [hook_name]
52
- end
53
-
54
44
  def cds_services_json
55
45
  JSON.parse(File.read(File.join(
56
46
  __dir__, '..', 'cds-services-v201.json'
@@ -67,7 +57,7 @@ module DaVinciCRDTestKit
67
57
  end
68
58
 
69
59
  run do
70
- hook_requests = load_tagged_requests(*tags_to_load)
60
+ hook_requests = load_interaction_group_requests
71
61
 
72
62
  skip_if hook_requests.blank?, 'No Hook Requests to verify.'
73
63
 
@@ -1,11 +1,13 @@
1
1
  require_relative '../client_urls'
2
2
  require_relative '../../../cross_suite/cards_identification'
3
+ require_relative '../../tagged_request_load_helper'
3
4
 
4
5
  module DaVinciCRDTestKit
5
6
  module V201
6
7
  class ClientCardDisplayAttest < Inferno::Test
7
8
  include ClientURLs
8
9
  include CardsIdentification
10
+ include TaggedRequestLoadHelper
9
11
 
10
12
  id :crd_v201_card_display_attest_test
11
13
  title 'Check that returned decision support details are displayed to the user'
@@ -16,18 +18,6 @@ module DaVinciCRDTestKit
16
18
  if warranted.
17
19
  )
18
20
 
19
- def hook_name
20
- config.options[:hook_name]
21
- end
22
-
23
- def crd_test_group
24
- config.options[:crd_test_group]
25
- end
26
-
27
- def tags_to_load
28
- crd_test_group.present? ? [hook_name, crd_test_group] : [hook_name]
29
- end
30
-
31
21
  def responded_card_types
32
22
  list_card_types_in_requests(requests)
33
23
  end
@@ -54,7 +44,7 @@ module DaVinciCRDTestKit
54
44
  output :attest_false_url
55
45
 
56
46
  run do
57
- load_tagged_requests(*tags_to_load)
47
+ load_interaction_group_requests
58
48
  skip_if responded_card_types.blank?, 'No responses sent to the client.'
59
49
 
60
50
  identifier = SecureRandom.hex(32)
@@ -1,9 +1,11 @@
1
1
  require_relative '../../../cross_suite/cards_validation'
2
+ require_relative '../../tagged_request_load_helper'
2
3
 
3
4
  module DaVinciCRDTestKit
4
5
  module V201
5
6
  class InfernoResponseValidationTest < Inferno::Test
6
7
  include CardsValidation
8
+ include TaggedRequestLoadHelper
7
9
 
8
10
  title 'Inferno CDS Service Response is Conformant'
9
11
  description %(
@@ -22,18 +24,6 @@ module DaVinciCRDTestKit
22
24
 
23
25
  input :custom_response_template, optional: true
24
26
 
25
- def hook_name
26
- config.options[:hook_name]
27
- end
28
-
29
- def crd_test_group
30
- config.options[:crd_test_group]
31
- end
32
-
33
- def tags_to_load
34
- crd_test_group.present? ? [hook_name, crd_test_group] : [hook_name]
35
- end
36
-
37
27
  def response_label(index = nil)
38
28
  response_type = (custom_response_template.present? ? 'Custom built' : 'Mocked')
39
29
  "#{response_type} response#{" #{index}" if index.present?}"
@@ -52,7 +42,7 @@ module DaVinciCRDTestKit
52
42
  end
53
43
 
54
44
  run do
55
- load_tagged_requests(*tags_to_load)
45
+ load_interaction_group_requests
56
46
 
57
47
  skip_if request.blank?, "No #{response_label.downcase}s to verify."
58
48
 
@@ -43,7 +43,7 @@ module DaVinciCRDTestKit
43
43
  run do
44
44
  supported_resource_types = extract_supported_resource_types(resource) # extract before loading other requests
45
45
 
46
- loaded_requests = requests_to_analyze # all requests for one hook or all requests for all hooks
46
+ loaded_requests = load_requests_for_cross_hook_analysis
47
47
  skip_if loaded_requests.blank?, 'No hook requests found, run hook tests first.'
48
48
 
49
49
  resources_to_check, unsupported = find_coverage_info_responses(loaded_requests)
@@ -0,0 +1,10 @@
1
+ module DaVinciCRDTestKit
2
+ module V221
3
+ ATTESTATION_INPUT_INSTRUCTIONS = %(
4
+ Testers are responsible for confirming that their system meets all requirements associated with a test
5
+ before selecting "Yes" on the attestation input with the same name as the test. The text of the
6
+ attested requirement(s) for each input can be reviewed by clicking the "View Specification Requirements" link
7
+ in the "About" tab of the test with the same name.
8
+ ).freeze
9
+ end
10
+ end
@@ -0,0 +1,45 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class AuthorizedScopeAttestationTest < Inferno::Test
6
+ id :crd_v221_authorized_scope_attestation
7
+ ATTESTATION_TITLE = "Health IT module takes the user's authorized scope into account when providing data " \
8
+ 'during CDS Hook invocations'.freeze
9
+ title ATTESTATION_TITLE
10
+ description %(
11
+ During this test, the tester will confirm that the Health IT module limits the data it makes available to CDS
12
+ Services to what the current user is authorized to access.
13
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
14
+ test.
15
+ )
16
+ attestation
17
+ verifies_requirements 'cds-hooks_3.0.0-ballot@42', 'cds-hooks_3.0.0-ballot@63', 'cds-hooks_3.0.0-ballot@64',
18
+ 'cds-hooks_3.0.0-ballot@173'
19
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
20
+
21
+ input :authorized_scope_attestation,
22
+ title: ATTESTATION_TITLE,
23
+ description: %(
24
+ I attest that the Health IT module limits the data it makes available to CDS Services to what the
25
+ current user is authorized to access.
26
+ ),
27
+ type: 'radio',
28
+ default: 'false',
29
+ options: {
30
+ list_options: [
31
+ { label: 'Yes', value: 'true' },
32
+ { label: 'No', value: 'false' }
33
+ ]
34
+ }
35
+ input :authorized_scope_attestation_note,
36
+ title: 'Notes, if applicable:',
37
+ type: 'textarea',
38
+ optional: true
39
+
40
+ run do
41
+ assert authorized_scope_attestation == 'true'
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class CoverageBasedInvocationAttestationTest < Inferno::Test
6
+ id :crd_v221_coverage_based_invocation_attestation
7
+ ATTESTATION_TITLE = 'Health IT module invokes hooks appropriately based on active coverage(s)'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module invokes hooks on payer services
11
+ appropriately based on the patient's active coverages.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@dev-28', 'hl7.fhir.us.davinci-crd_2.2.1@dev-30',
17
+ 'hl7.fhir.us.davinci-crd_2.2.1@dev-32'
18
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
19
+
20
+ input :coverage_based_invocation_attestation,
21
+ title: ATTESTATION_TITLE,
22
+ description: %(
23
+ I attest that the Health IT module invokes hooks on payer services appropriately based on the
24
+ patient's active coverages.
25
+ ),
26
+ type: 'radio',
27
+ default: 'false',
28
+ options: {
29
+ list_options: [
30
+ { label: 'Yes', value: 'true' },
31
+ { label: 'No', value: 'false' }
32
+ ]
33
+ }
34
+ input :coverage_based_invocation_attestation_note,
35
+ title: 'Notes, if applicable:',
36
+ type: 'textarea',
37
+ optional: true
38
+
39
+ run do
40
+ assert coverage_based_invocation_attestation == 'true'
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class DataElementExpectationsAttestationTest < Inferno::Test
6
+ id :crd_v221_data_element_expectations_attestation
7
+ ATTESTATION_TITLE = 'Health IT module does not set additional expectations for data elements'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module does not set expectations for data
11
+ elements beyond those the CRD specification requires.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@conf-12',
17
+ 'hl7.fhir.us.davinci-crd_2.2.1@conf-13', 'hl7.fhir.us.davinci-crd_2.2.1@found-33'
18
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
19
+
20
+ input :data_element_expectations_attestation,
21
+ title: ATTESTATION_TITLE,
22
+ description: %(
23
+ I attest that the Health IT module does not set expectations for data elements beyond those the CRD
24
+ specification requires.
25
+ ),
26
+ type: 'radio',
27
+ default: 'false',
28
+ options: {
29
+ list_options: [
30
+ { label: 'Yes', value: 'true' },
31
+ { label: 'No', value: 'false' }
32
+ ]
33
+ }
34
+ input :data_element_expectations_attestation_note,
35
+ title: 'Notes, if applicable:',
36
+ type: 'textarea',
37
+ optional: true
38
+
39
+ run do
40
+ assert data_element_expectations_attestation == 'true'
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class HookInvocationLoggingAttestationTest < Inferno::Test
6
+ id :crd_v221_hook_invocation_logging_attestation
7
+ ATTESTATION_TITLE = 'Health IT module retains logs of all CRD-related hook invocations'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module retains logs of all CRD-related hook
11
+ invocations and their responses.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@found-37'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :hook_invocation_logging_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module retains logs of all CRD-related hook invocations and their
23
+ responses.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ { label: 'Yes', value: 'true' },
30
+ { label: 'No', value: 'false' }
31
+ ]
32
+ }
33
+ input :hook_invocation_logging_attestation_note,
34
+ title: 'Notes, if applicable:',
35
+ type: 'textarea',
36
+ optional: true
37
+
38
+ run do
39
+ assert hook_invocation_logging_attestation == 'true'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class MustSupportExposureAttestationTest < Inferno::Test
6
+ id :crd_v221_must_support_exposure_attestation
7
+ ATTESTATION_TITLE = 'Health IT module exposes maintained must support elements'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module exposes the mustSupport elements it
11
+ maintains and surfaces to users in its FHIR interface.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@conf-3'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :must_support_exposure_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module exposes the mustSupport elements it maintains and surfaces to
23
+ users in its FHIR interface.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ { label: 'Yes', value: 'true' },
30
+ { label: 'No', value: 'false' }
31
+ ]
32
+ }
33
+ input :must_support_exposure_attestation_note,
34
+ title: 'Notes, if applicable:',
35
+ type: 'textarea',
36
+ optional: true
37
+
38
+ run do
39
+ assert must_support_exposure_attestation == 'true'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class MustSupportUseAttestationTest < Inferno::Test
6
+ id :crd_v221_must_support_use_attestation
7
+ ATTESTATION_TITLE = 'Health IT module uses received must support data'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module uses the mustSupport data it receives.
11
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
12
+ test.
13
+ )
14
+ attestation
15
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@conf-6'
16
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
17
+
18
+ input :must_support_use_attestation,
19
+ title: ATTESTATION_TITLE,
20
+ description: %(
21
+ I attest that the Health IT module uses the mustSupport data it receives.
22
+ ),
23
+ type: 'radio',
24
+ default: 'false',
25
+ options: {
26
+ list_options: [
27
+ { label: 'Yes', value: 'true' },
28
+ { label: 'No', value: 'false' }
29
+ ]
30
+ }
31
+ input :must_support_use_attestation_note,
32
+ title: 'Notes, if applicable:',
33
+ type: 'textarea',
34
+ optional: true
35
+
36
+ run do
37
+ assert must_support_use_attestation == 'true'
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class OrderSignSupportAttestationTest < Inferno::Test
6
+ id :crd_v221_order_sign_support_attestation
7
+ ATTESTATION_TITLE = 'Health IT module supports order-sign for all types of orders that can be placed'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module supports the `order-sign` hook for all
11
+ order types it can place.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-3'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :order_sign_support_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module supports the `order-sign` hook for all order types it can place.
23
+ ),
24
+ type: 'radio',
25
+ default: 'false',
26
+ options: {
27
+ list_options: [
28
+ { label: 'Yes', value: 'true' },
29
+ { label: 'No', value: 'false' }
30
+ ]
31
+ }
32
+ input :order_sign_support_attestation_note,
33
+ title: 'Notes, if applicable:',
34
+ type: 'textarea',
35
+ optional: true
36
+
37
+ run do
38
+ assert order_sign_support_attestation == 'true'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class PrefetchKeyOmissionAttestationTest < Inferno::Test
6
+ id :crd_v221_prefetch_key_omission_attestation
7
+ ATTESTATION_TITLE = 'Health IT module omits prefetch keys when data not available'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module omits prefetch keys when the relevant
11
+ data cannot be provided.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'cds-hooks_3.0.0-ballot@51'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :prefetch_key_omission_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module omits prefetch keys when the relevant data cannot be provided.
23
+ ),
24
+ type: 'radio',
25
+ default: 'false',
26
+ options: {
27
+ list_options: [
28
+ { label: 'Yes', value: 'true' },
29
+ { label: 'No', value: 'false' }
30
+ ]
31
+ }
32
+ input :prefetch_key_omission_attestation_note,
33
+ title: 'Notes, if applicable:',
34
+ type: 'textarea',
35
+ optional: true
36
+
37
+ run do
38
+ assert prefetch_key_omission_attestation == 'true'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class ResourceIdentifiersAttestationTest < Inferno::Test
6
+ id :crd_v221_resource_identifiers_attestation
7
+ ATTESTATION_TITLE = 'Health IT module does not use business identifiers in resource identifiers'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module does not expose resource identifiers
11
+ that have a determinable relationship with business identifiers.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@sec-7'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :resource_identifiers_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module does not expose resource identifiers that have a determinable
23
+ relationship with business identifiers.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ { label: 'Yes', value: 'true' },
30
+ { label: 'No', value: 'false' }
31
+ ]
32
+ }
33
+ input :resource_identifiers_attestation_note,
34
+ title: 'Notes, if applicable:',
35
+ type: 'textarea',
36
+ optional: true
37
+
38
+ run do
39
+ assert resource_identifiers_attestation == 'true'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class ResponseCaseDistinctionAttestationTest < Inferno::Test
6
+ id :crd_v221_response_case_distinction_attestation
7
+ ATTESTATION_TITLE = 'Health IT module distinguishes different response cases to users'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module distinguishes the different CRD
11
+ response cases when presenting results to users.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@impl-1'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :response_case_distinction_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module distinguishes the different CRD response cases when presenting
23
+ results to users.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ { label: 'Yes', value: 'true' },
30
+ { label: 'No', value: 'false' }
31
+ ]
32
+ }
33
+ input :response_case_distinction_attestation_note,
34
+ title: 'Notes, if applicable:',
35
+ type: 'textarea',
36
+ optional: true
37
+
38
+ run do
39
+ assert response_case_distinction_attestation == 'true'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class SecurityAndPrivacyAttestationTest < Inferno::Test
6
+ id :crd_v221_security_and_privacy_attestation
7
+ ATTESTATION_TITLE = 'Health IT module adheres to security and privacy requirements'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module adheres to the security and privacy
11
+ rules that CRD inherits from the specifications it builds on.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@sec-1'
17
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
18
+
19
+ input :security_and_privacy_attestation,
20
+ title: ATTESTATION_TITLE,
21
+ description: %(
22
+ I attest that the Health IT module adheres to the security and privacy rules that CRD inherits from
23
+ the specifications it builds on.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ { label: 'Yes', value: 'true' },
30
+ { label: 'No', value: 'false' }
31
+ ]
32
+ }
33
+ input :security_and_privacy_attestation_note,
34
+ title: 'Notes, if applicable:',
35
+ type: 'textarea',
36
+ optional: true
37
+
38
+ run do
39
+ assert security_and_privacy_attestation == 'true'
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class WorkflowIntegrationAttestationTest < Inferno::Test
6
+ id :crd_v221_workflow_integration_attestation
7
+ ATTESTATION_TITLE = 'Health IT module integrates hook invocations transparently into user workflows'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the Health IT module integrates CRD hook invocations
11
+ transparently into the regular user workflow.
12
+ To see the specifics of the attested requirements, click the "View Specification Requirements" link for this
13
+ test.
14
+ )
15
+ attestation
16
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-7', 'hl7.fhir.us.davinci-crd_2.2.1@hook-8',
17
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-48'
18
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
19
+
20
+ input :workflow_integration_attestation,
21
+ title: ATTESTATION_TITLE,
22
+ description: %(
23
+ I attest that the Health IT module integrates CRD hook invocations transparently into the regular
24
+ user workflow.
25
+ ),
26
+ type: 'radio',
27
+ default: 'false',
28
+ options: {
29
+ list_options: [
30
+ { label: 'Yes', value: 'true' },
31
+ { label: 'No', value: 'false' }
32
+ ]
33
+ }
34
+ input :workflow_integration_attestation_note,
35
+ title: 'Notes, if applicable:',
36
+ type: 'textarea',
37
+ optional: true
38
+
39
+ run do
40
+ assert workflow_integration_attestation == 'true'
41
+ end
42
+ end
43
+ end
44
+ end