davinci_pas_test_kit 0.15.1 → 0.16.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 (334) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/g33_br_provider.json +13 -0
  3. data/config/presets/pas_client_example.json +2 -2
  4. data/config/presets/pas_client_v201_run_against_pas_server.json +2 -2
  5. data/config/presets/pas_client_v221_run_against_pas_server.json +3 -3
  6. data/config/presets/pas_ri.json +6 -6
  7. data/config/presets/pas_server_v201_run_against_pas_client.json.erb +6 -6
  8. data/config/presets/pas_server_v221_run_against_pas_client.json.erb +10 -10
  9. data/lib/davinci_pas_test_kit/client/abstract_approval_submit_test.rb +28 -17
  10. data/lib/davinci_pas_test_kit/client/abstract_denial_submit_test.rb +26 -16
  11. data/lib/davinci_pas_test_kit/client/abstract_gather_must_support_test.rb +45 -74
  12. data/lib/davinci_pas_test_kit/client/abstract_modification_submit_test.rb +29 -19
  13. data/lib/davinci_pas_test_kit/client/abstract_response_attest.rb +75 -6
  14. data/lib/davinci_pas_test_kit/client/abstract_subscription_create_test.rb +26 -9
  15. data/lib/davinci_pas_test_kit/client/abstract_subscription_update_delete_test.rb +91 -0
  16. data/lib/davinci_pas_test_kit/client/client_bundle_validation_helper.rb +245 -0
  17. data/lib/davinci_pas_test_kit/client/client_input_descriptions.rb +96 -1
  18. data/lib/davinci_pas_test_kit/client/endpoints/claim_endpoint.rb +128 -72
  19. data/lib/davinci_pas_test_kit/client/endpoints/endpoint_session_identification.rb +24 -0
  20. data/lib/davinci_pas_test_kit/client/endpoints/expired_token.rb +40 -0
  21. data/lib/davinci_pas_test_kit/client/endpoints/subscription_create_endpoint.rb +7 -12
  22. data/lib/davinci_pas_test_kit/client/endpoints/subscription_delete_endpoint.rb +13 -0
  23. data/lib/davinci_pas_test_kit/client/endpoints/subscription_read_endpoint.rb +13 -0
  24. data/lib/davinci_pas_test_kit/client/endpoints/subscription_status_endpoint.rb +15 -20
  25. data/lib/davinci_pas_test_kit/client/endpoints/subscription_update_endpoint.rb +13 -0
  26. data/lib/davinci_pas_test_kit/client/endpoints/token_endpoint.rb +16 -0
  27. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_inquire_request_must_support_beneficiary_test.rb +3 -3
  28. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +3 -3
  29. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_submit_request_must_support_beneficiary_test.rb +3 -3
  30. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +3 -3
  31. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb +3 -3
  32. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claim_update/client_submit_request_must_support_claim_update_test.rb +3 -3
  33. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +3 -3
  34. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +3 -3
  35. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/communication_request/client_submit_response_must_support_communication_request_test.rb +3 -3
  36. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_inquire_request_must_support_coverage_test.rb +3 -3
  37. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_submit_request_must_support_coverage_test.rb +3 -3
  38. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/encounter/client_submit_request_must_support_encounter_test.rb +3 -3
  39. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_request_must_support_insurer_test.rb +3 -3
  40. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_response_must_support_insurer_test.rb +3 -3
  41. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_request_must_support_insurer_test.rb +3 -3
  42. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_response_must_support_insurer_test.rb +3 -3
  43. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_must_support_group.rb +1 -1
  44. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_response_must_support_group.rb +9 -31
  45. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_must_support_group.rb +1 -1
  46. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_response_must_support_group.rb +10 -32
  47. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_inquiry_request_bundle/client_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +3 -3
  48. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_inquiry_response_bundle/client_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +3 -3
  49. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_request_bundle/client_submit_request_must_support_pas_request_bundle_test.rb +3 -3
  50. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +3 -3
  51. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_request_must_support_practitioner_test.rb +3 -3
  52. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +3 -3
  53. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_request_must_support_practitioner_test.rb +3 -3
  54. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_response_must_support_practitioner_test.rb +3 -3
  55. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_request_must_support_practitioner_role_test.rb +3 -3
  56. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +3 -3
  57. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_request_must_support_practitioner_role_test.rb +3 -3
  58. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +3 -3
  59. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_request_must_support_requestor_test.rb +3 -3
  60. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_response_must_support_requestor_test.rb +3 -3
  61. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_request_must_support_requestor_test.rb +3 -3
  62. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_response_must_support_requestor_test.rb +3 -3
  63. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/subscriber/client_inquire_request_must_support_subscriber_test.rb +3 -3
  64. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/subscriber/client_submit_request_must_support_subscriber_test.rb +3 -3
  65. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +4 -3
  66. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +4 -3
  67. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb +3 -3
  68. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_update/client_submit_request_must_support_claim_update_test.rb +3 -3
  69. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +4 -3
  70. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +4 -3
  71. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/communication_request/client_submit_response_must_support_communication_request_test.rb +4 -3
  72. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_inquire_response_must_support_insurer_test.rb +4 -3
  73. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_submit_response_must_support_insurer_test.rb +4 -3
  74. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_must_support_group.rb +8 -6
  75. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_response_must_support_group.rb +9 -31
  76. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_must_support_group.rb +13 -9
  77. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_response_must_support_group.rb +10 -32
  78. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_inquiry_response_bundle/client_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +4 -3
  79. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +4 -3
  80. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +4 -3
  81. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_submit_response_must_support_practitioner_test.rb +4 -3
  82. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +4 -3
  83. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +4 -3
  84. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_inquire_response_must_support_requestor_test.rb +4 -3
  85. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_submit_response_must_support_requestor_test.rb +4 -3
  86. data/lib/davinci_pas_test_kit/client/jobs/send_pas_subscription_notification.rb +64 -3
  87. data/lib/davinci_pas_test_kit/client/pas_client_subscription_pas_conformance_test.rb +4 -3
  88. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_other_display_test.rb +6 -4
  89. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_smart_display_test.rb +8 -4
  90. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_udap_display_test.rb +9 -4
  91. data/lib/davinci_pas_test_kit/client/registration/abstract_other_auth_attest_test.rb +5 -4
  92. data/lib/davinci_pas_test_kit/client/request_count_gating.rb +14 -0
  93. data/lib/davinci_pas_test_kit/client/response_generator.rb +50 -9
  94. data/lib/davinci_pas_test_kit/client/session_identification.rb +26 -7
  95. data/lib/davinci_pas_test_kit/client/subscription_notification_trigger.rb +80 -0
  96. data/lib/davinci_pas_test_kit/client/subscription_setup_requirement.rb +59 -0
  97. data/lib/davinci_pas_test_kit/client/user_input_response.rb +50 -10
  98. data/lib/davinci_pas_test_kit/client/v2.0.1/client_suite.rb +30 -15
  99. data/lib/davinci_pas_test_kit/client/v2.0.1/must_support/pas_client_must_support_request_profiles_test.rb +2 -2
  100. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_approval_group.rb +8 -7
  101. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_auth_smart_group.rb +4 -4
  102. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_auth_udap_group.rb +4 -4
  103. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_denial_group.rb +8 -7
  104. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_must_support_group.rb +38 -52
  105. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_pended_group.rb +28 -22
  106. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_registration_group.rb +2 -2
  107. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_subscription_setup_group.rb +2 -2
  108. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_workflows_group.rb +2 -2
  109. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_inquire_request_bundle_validation_test.rb +15 -21
  110. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_inquire_response_bundle_validation_test.rb +29 -29
  111. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_pended_submit_test.rb +49 -40
  112. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_request_bundle_validation_test.rb +15 -21
  113. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_response_bundle_validation_test.rb +29 -29
  114. data/lib/davinci_pas_test_kit/client/v2.2.1/attestations/attestation_instructions.rb +10 -0
  115. data/lib/davinci_pas_test_kit/client/v2.2.1/attestations/client_data_element_expectations_attestation_test.rb +44 -0
  116. data/lib/davinci_pas_test_kit/client/v2.2.1/attestations/client_provider_review_attestation_test.rb +45 -0
  117. data/lib/davinci_pas_test_kit/client/v2.2.1/attestations/client_security_attestation_test.rb +42 -0
  118. data/lib/davinci_pas_test_kit/client/v2.2.1/attestations/client_subscription_error_recovery_attestation_test.rb +42 -0
  119. data/lib/davinci_pas_test_kit/client/v2.2.1/client_suite.rb +64 -12
  120. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_failure_submit_test.rb +20 -10
  121. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_outcome_validation_test.rb +11 -5
  122. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_response_validation_test.rb +21 -12
  123. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_submit_test.rb +19 -8
  124. data/lib/davinci_pas_test_kit/client/v2.2.1/must_support/must_support_with_attestation_option.rb +90 -40
  125. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_approval_group.rb +12 -11
  126. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_attestations_group.rb +32 -0
  127. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_smart_group.rb +4 -4
  128. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_udap_group.rb +4 -4
  129. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_claim_updates_group.rb +24 -6
  130. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_denial_group.rb +12 -10
  131. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_modification_group.rb +13 -14
  132. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_must_support_group.rb +55 -59
  133. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_operation_failure_group.rb +8 -5
  134. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_pended_group.rb +53 -41
  135. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_processing_error_group.rb +9 -7
  136. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_registration_group.rb +2 -2
  137. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_subscription_setup_group.rb +9 -4
  138. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_subscription_update_delete_group.rb +57 -0
  139. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_workflows_group.rb +22 -2
  140. data/lib/davinci_pas_test_kit/client/v2.2.1/subscription/pas_client_subscription_create_test.rb +2 -1
  141. data/lib/davinci_pas_test_kit/client/v2.2.1/subscription/pas_client_subscription_put_update_pas_conformance_test.rb +49 -0
  142. data/lib/davinci_pas_test_kit/client/v2.2.1/subscription/pas_client_subscription_update_delete_test.rb +12 -0
  143. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_referenced_resources_test.rb +5 -6
  144. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_submit_tests.rb +82 -56
  145. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_request_bundle_validation_test.rb +17 -20
  146. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_response_bundle_validation_test.rb +59 -27
  147. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_modification_verification_test.rb +0 -3
  148. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_pended_send_notification_test.rb +138 -0
  149. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_pended_submit_test.rb +32 -85
  150. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_request_bundle_validation_test.rb +16 -21
  151. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_response_bundle_validation_test.rb +27 -27
  152. data/lib/davinci_pas_test_kit/cross_suite/fhirpath_utils.rb +13 -3
  153. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/beneficiary/metadata.yml +4 -0
  154. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/claim_inquiry/metadata.yml +15 -0
  155. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/claim_update/metadata.yml +17 -0
  156. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/claiminquiryresponse/metadata.yml +15 -0
  157. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/claimresponse/metadata.yml +15 -0
  158. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/communication_request/metadata.yml +4 -0
  159. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/coverage/metadata.yml +1 -0
  160. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/device_request/metadata.yml +2 -0
  161. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/encounter/metadata.yml +3 -0
  162. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/insurer/metadata.yml +1 -0
  163. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/medication_request/metadata.yml +2 -0
  164. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/metadata.yml +143 -0
  165. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/nutrition_order/metadata.yml +2 -0
  166. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +2 -0
  167. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +2 -0
  168. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/pas_request_bundle/metadata.yml +2 -0
  169. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/pas_response_bundle/metadata.yml +2 -0
  170. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/practitioner/metadata.yml +1 -0
  171. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/practitioner_role/metadata.yml +1 -0
  172. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/requestor/metadata.yml +1 -0
  173. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/service_request/metadata.yml +3 -0
  174. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/subscriber/metadata.yml +4 -0
  175. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.0.1/task/metadata.yml +1 -4
  176. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/beneficiary/metadata.yml +1 -0
  177. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claim_inquiry/metadata.yml +23 -0
  178. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claim_update/metadata.yml +31 -0
  179. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claiminquiryresponse/metadata.yml +42 -0
  180. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claimresponse/metadata.yml +42 -0
  181. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/communication_request/metadata.yml +4 -0
  182. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/coverage/metadata.yml +1 -0
  183. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/device_request/metadata.yml +2 -0
  184. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/encounter/metadata.yml +3 -0
  185. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/insurer/metadata.yml +1 -0
  186. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/medication_request/metadata.yml +2 -0
  187. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/metadata.yml +265 -1
  188. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/nutrition_order/metadata.yml +2 -0
  189. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_request_bundle/metadata.yml +2 -0
  190. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_response_bundle/metadata.yml +2 -0
  191. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_request_bundle/metadata.yml +2 -0
  192. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_response_bundle/metadata.yml +2 -0
  193. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner/metadata.yml +1 -0
  194. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner_role/metadata.yml +1 -0
  195. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/requestor/metadata.yml +1 -0
  196. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/service_request/metadata.yml +3 -0
  197. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/subscriber/metadata.yml +1 -0
  198. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/task/metadata.yml +4 -4
  199. data/lib/davinci_pas_test_kit/cross_suite/pas_bundle_validation.rb +570 -312
  200. data/lib/davinci_pas_test_kit/cross_suite/pas_constants.rb +13 -0
  201. data/lib/davinci_pas_test_kit/cross_suite/pas_datatype_constraints.rb +166 -0
  202. data/lib/davinci_pas_test_kit/cross_suite/pas_subscription_verification.rb +8 -4
  203. data/lib/davinci_pas_test_kit/cross_suite/referenced_resource_presence_validation.rb +141 -0
  204. data/lib/davinci_pas_test_kit/cross_suite/response_selection_utils.rb +39 -21
  205. data/lib/davinci_pas_test_kit/cross_suite/tags.rb +11 -6
  206. data/lib/davinci_pas_test_kit/cross_suite/validator_configuration.rb +16 -0
  207. data/lib/davinci_pas_test_kit/cross_suite/validator_suppressions.rb +210 -146
  208. data/lib/davinci_pas_test_kit/docs/demo/PAS Client Suite Demonstration.postman_collection.json +7 -7
  209. data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +1 -0
  210. data/lib/davinci_pas_test_kit/generator/client_must_support_group_generator.rb +47 -16
  211. data/lib/davinci_pas_test_kit/generator/must_support_target_profiles.rb +17 -0
  212. data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +14 -2
  213. data/lib/davinci_pas_test_kit/generator/pas_must_support_metadata_extractor.rb +1 -2
  214. data/lib/davinci_pas_test_kit/generator/profile_metadata.rb +1 -1
  215. data/lib/davinci_pas_test_kit/generator/server_must_support_group_generator.rb +23 -0
  216. data/lib/davinci_pas_test_kit/generator/server_suite_generator.rb +8 -7
  217. data/lib/davinci_pas_test_kit/generator/templates/client_must_support_group.rb.erb +22 -3
  218. data/lib/davinci_pas_test_kit/generator/templates/client_must_support_response_group.rb.erb +7 -16
  219. data/lib/davinci_pas_test_kit/generator/templates/must_support.rb.erb +11 -10
  220. data/lib/davinci_pas_test_kit/generator/templates/server_must_support_group.rb.erb +22 -0
  221. data/lib/davinci_pas_test_kit/generator/templates/server_suite.rb.erb +9 -11
  222. data/lib/davinci_pas_test_kit/generator/templates/use_case_group.rb.erb +3 -0
  223. data/lib/davinci_pas_test_kit/generator/use_case_group_generator.rb +19 -13
  224. data/lib/davinci_pas_test_kit/parameters_helper.rb +13 -5
  225. data/lib/davinci_pas_test_kit/pas_notification_conformance_test.rb +2 -2
  226. data/lib/davinci_pas_test_kit/requirements/davinci_pas_test_kit_requirements.csv +14 -7
  227. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v201_requirements_coverage.csv +21 -21
  228. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v221_requirements_coverage.csv +30 -26
  229. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_server_suite_v221_requirements_coverage.csv +39 -33
  230. data/lib/davinci_pas_test_kit/requirements/hl7.fhir.us.davinci-pas_2.2.1_requirements.xlsx +0 -0
  231. data/lib/davinci_pas_test_kit/server/claim_operation_logic.rb +1 -1
  232. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb +1 -1
  233. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb +1 -1
  234. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb +1 -1
  235. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb +1 -1
  236. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb +1 -1
  237. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/claim_update/server_submit_request_must_support_claim_update_test.rb +1 -1
  238. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb +1 -1
  239. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb +1 -1
  240. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/communication_request/server_submit_response_must_support_communication_request_test.rb +1 -1
  241. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_inquire_request_must_support_coverage_test.rb +1 -1
  242. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_submit_request_must_support_coverage_test.rb +1 -1
  243. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/encounter/server_submit_request_must_support_encounter_test.rb +1 -1
  244. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_request_must_support_insurer_test.rb +1 -1
  245. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_response_must_support_insurer_test.rb +1 -1
  246. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_request_must_support_insurer_test.rb +1 -1
  247. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_response_must_support_insurer_test.rb +1 -1
  248. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_inquiry_request_bundle/server_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +1 -1
  249. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_inquiry_response_bundle/server_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +1 -1
  250. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +1 -1
  251. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +1 -1
  252. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_approval_use_case_group.rb +4 -3
  253. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_denial_use_case_group.rb +4 -3
  254. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_pended_use_case_group.rb +7 -6
  255. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +1 -1
  256. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +1 -1
  257. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_request_must_support_practitioner_test.rb +1 -1
  258. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_response_must_support_practitioner_test.rb +1 -1
  259. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +1 -1
  260. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +1 -1
  261. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +1 -1
  262. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +1 -1
  263. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_inquire_request_must_support_requestor_test.rb +1 -1
  264. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_inquire_response_must_support_requestor_test.rb +1 -1
  265. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_submit_request_must_support_requestor_test.rb +1 -1
  266. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_submit_response_must_support_requestor_test.rb +1 -1
  267. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/server_suite.rb +9 -11
  268. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/subscriber/server_inquire_request_must_support_subscriber_test.rb +1 -1
  269. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/subscriber/server_submit_request_must_support_subscriber_test.rb +1 -1
  270. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_inquire_response_must_support_task_test.rb +1 -1
  271. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_submit_response_must_support_task_test.rb +1 -1
  272. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb +1 -1
  273. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb +1 -1
  274. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb +1 -1
  275. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb +1 -1
  276. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb +1 -1
  277. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_update/server_submit_request_must_support_claim_update_test.rb +1 -1
  278. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb +3 -1
  279. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb +3 -1
  280. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/communication_request/server_submit_response_must_support_communication_request_test.rb +1 -1
  281. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_inquire_request_must_support_coverage_test.rb +1 -1
  282. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_submit_request_must_support_coverage_test.rb +1 -1
  283. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/encounter/server_submit_request_must_support_encounter_test.rb +1 -1
  284. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_request_must_support_insurer_test.rb +1 -1
  285. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_response_must_support_insurer_test.rb +1 -1
  286. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_request_must_support_insurer_test.rb +1 -1
  287. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_response_must_support_insurer_test.rb +1 -1
  288. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_inquiry_request_bundle/server_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +1 -1
  289. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_inquiry_response_bundle/server_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +1 -1
  290. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +1 -1
  291. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +1 -1
  292. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_approval_use_case_group.rb +5 -3
  293. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_denial_use_case_group.rb +5 -3
  294. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_must_support_group.rb +12 -0
  295. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_pended_use_case_group.rb +9 -4
  296. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +1 -1
  297. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +1 -1
  298. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_request_must_support_practitioner_test.rb +1 -1
  299. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_response_must_support_practitioner_test.rb +1 -1
  300. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +1 -1
  301. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +1 -1
  302. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +1 -1
  303. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +1 -1
  304. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_request_must_support_requestor_test.rb +1 -1
  305. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_response_must_support_requestor_test.rb +1 -1
  306. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_request_must_support_requestor_test.rb +1 -1
  307. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_response_must_support_requestor_test.rb +1 -1
  308. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/server_suite.rb +9 -11
  309. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_inquire_request_must_support_subscriber_test.rb +1 -1
  310. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_submit_request_must_support_subscriber_test.rb +1 -1
  311. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_inquire_response_must_support_task_test.rb +1 -1
  312. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_submit_response_must_support_task_test.rb +1 -1
  313. data/lib/davinci_pas_test_kit/server/pas_claim_response_decision_test.rb +2 -2
  314. data/lib/davinci_pas_test_kit/server/server_request_bundle_validation_test.rb +4 -6
  315. data/lib/davinci_pas_test_kit/server/server_response_bundle_validation_test.rb +17 -10
  316. data/lib/davinci_pas_test_kit/server/v2.0.1/must_support/pas_server_must_support_request_profiles_test.rb +1 -1
  317. data/lib/davinci_pas_test_kit/server/v2.0.1/pas_server_subscription_setup.rb +1 -1
  318. data/lib/davinci_pas_test_kit/server/v2.2.1/claim_inquiry/server_claim_inquiry_response_tests.rb +89 -0
  319. data/lib/davinci_pas_test_kit/server/v2.2.1/must_support/pas_server_must_support_request_profiles_test.rb +1 -1
  320. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_error_group.rb +2 -0
  321. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_claim_inquiry_responses_group.rb +17 -0
  322. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_claim_updates_group.rb +1 -1
  323. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_no_custom_extensions_test.rb +241 -0
  324. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_capability_statement_test.rb +40 -0
  325. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_setup.rb +15 -10
  326. data/lib/davinci_pas_test_kit/server/v2.2.1/server_replaced_pa_inquire_reference_input_test.rb +63 -0
  327. data/lib/davinci_pas_test_kit/server/v2.2.1/server_replaced_pa_inquire_reference_test.rb +109 -0
  328. data/lib/davinci_pas_test_kit/version.rb +2 -2
  329. metadata +38 -13
  330. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_inquire_response_must_support_task_test.rb +0 -45
  331. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_submit_response_must_support_task_test.rb +0 -45
  332. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_inquire_response_must_support_task_test.rb +0 -55
  333. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_submit_response_must_support_task_test.rb +0 -55
  334. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_error_handling_group.rb +0 -20
@@ -1,14 +1,16 @@
1
1
  require_relative '../../../cross_suite/pas_bundle_validation'
2
+ require_relative '../../client_bundle_validation_helper'
2
3
 
3
4
  module DaVinciPASTestKit
4
5
  module DaVinciPASV201
5
6
  class PasClientInquireRequestBundleValidationTest < Inferno::Test
6
7
  include DaVinciPASTestKit::PasBundleValidation
8
+ include DaVinciPASTestKit::ClientBundleValidationHelper
7
9
 
8
10
  id :pas_client_v201_inquire_request_bundle_validation_test
9
- title 'Inquire Request Bundle is valid'
11
+ title '$inquire request Bundles have the correct structure and content'
10
12
  description %(
11
- This test verifies the conformity of the client's request body to the
13
+ This test verifies the conformity of each of the PAS client's `$inquire` request bodies to the
12
14
  [PAS Inquiry Request Bundle](http://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-pas-inquiry-request-bundle.html)
13
15
  structure. It also checks that other conformance requirements defined in the [PAS Formal
14
16
  Specification](https://hl7.org/fhir/us/davinci-pas/STU2/specification.html),
@@ -37,30 +39,22 @@ module DaVinciPASTestKit
37
39
  'hl7.fhir.us.davinci-pas_2.0.1@125', 'hl7.fhir.us.davinci-pas_2.0.1@126',
38
40
  'hl7.fhir.us.davinci-pas_2.0.1@127', 'hl7.fhir.us.davinci-pas_2.0.1@128'
39
41
 
40
- def request_type_tag
41
- INQUIRE_TAG
42
+ def operation_name
43
+ 'inquire'
42
44
  end
43
45
 
44
- def workflow_tag
45
- config.options[:workflow_tag]
46
+ def message_direction_name
47
+ 'request'
46
48
  end
47
49
 
48
- run do
49
- if workflow_tag.present?
50
- load_tagged_requests(request_type_tag, workflow_tag)
51
- else
52
- load_tagged_requests(request_type_tag)
53
- end
54
- skip_if !request.present?, 'No inquire requests received.'
50
+ def ig_version
51
+ '2.0.1'
52
+ end
55
53
 
56
- validate_pas_bundle_json(
57
- request.request_body,
58
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-request-bundle',
59
- '2.0.1',
60
- 'inquire',
61
- 'request_bundle',
62
- message: 'The Bundle provided for the Claim/$inquire operation is invalid:'
63
- )
54
+ run do
55
+ failed = non_conformant_bundles
56
+ assert failed.empty?,
57
+ "Non-conformant request Bundles detected: #{failed.join(', ')}. Check messages for issues found."
64
58
  end
65
59
  end
66
60
  end
@@ -1,21 +1,21 @@
1
1
  require_relative '../../../cross_suite/pas_bundle_validation'
2
2
  require_relative '../../user_input_response'
3
- require_relative '../../response_generator'
3
+ require_relative '../../client_bundle_validation_helper'
4
4
 
5
5
  module DaVinciPASTestKit
6
6
  module DaVinciPASV201
7
7
  class PasClientInquireResponseBundleValidationTest < Inferno::Test
8
8
  include DaVinciPASTestKit::PasBundleValidation
9
9
  include UserInputResponse
10
- include ResponseGenerator
10
+ include DaVinciPASTestKit::ClientBundleValidationHelper
11
11
 
12
12
  id :pas_client_v201_inquire_response_bundle_validation_test
13
- title 'Inquire Response Bundle is valid'
13
+ title '$inquire response Bundles have the correct structure and content'
14
14
  description %(
15
- **USER INPUT VERIFICATION**: This test verifies input provided by the tester instead of the system under test.
15
+ This test verifies input provided by the tester instead of the PAS client.
16
16
  Errors encountered will be treated as a skip instead of a failure.
17
17
 
18
- This test verifies the conformity of the inquire response sent by Inferno, which will have been
18
+ This test verifies the conformity of each `$inquire` response sent by Inferno, which will have been
19
19
  either:
20
20
  - the response body provided by the tester in the corresponding input, or
21
21
  - created by Inferno from the $inquire Bundle.
@@ -33,8 +33,11 @@ module DaVinciPASTestKit
33
33
  to the bound ValueSet. Quantity, Coding, and code element bindings will
34
34
  fail if their code/system are not found in the valueset.
35
35
 
36
- Note that because X12 value sets are not public, elements bound to value
37
- sets containing X12 codes are not validated.
36
+ Note that:
37
+ - To ensure that the PAS client is driving its behavior only based on standard
38
+ PAS information, custom extensions are not allowed within the responses.
39
+ - Because X12 value sets are not public, elements bound to value
40
+ sets containing X12 codes are not validated.
38
41
 
39
42
  **Limitations**
40
43
 
@@ -46,12 +49,16 @@ module DaVinciPASTestKit
46
49
  )
47
50
  simulation_verification
48
51
 
49
- def request_type
52
+ def operation_name
50
53
  'inquire'
51
54
  end
52
55
 
53
- def workflow_tag
54
- config.options[:workflow_tag]
56
+ def message_direction_name
57
+ 'response'
58
+ end
59
+
60
+ def ig_version
61
+ '2.0.1'
55
62
  end
56
63
 
57
64
  def target_user_input
@@ -63,26 +70,19 @@ module DaVinciPASTestKit
63
70
  end
64
71
  end
65
72
 
66
- run do
67
- load_tagged_requests(workflow_tag, INQUIRE_TAG)
68
- skip_if requests.empty?, 'No responses to verify because no inquire requests were made.'
69
- message = if workflow_tag == MUST_SUPPORT_WORKFLOW_TAG
70
- 'Invalid must support response bundle provided:'
71
- elsif user_inputted_response? target_user_input
72
- "Invalid response generated from provided input '#{input_title(target_user_input)}':"
73
- else
74
- 'Invalid response generated from the submitted claim:'
75
- end
73
+ def failed_entities_description
74
+ if user_inputted_response? target_user_input
75
+ "built from tester-provided response in '#{input_title(target_user_input)}'"
76
+ else
77
+ 'generated from the submitted claim'
78
+ end
79
+ end
76
80
 
77
- validate_pas_bundle_json(
78
- request.response_body,
79
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle',
80
- '2.0.1',
81
- request_type,
82
- 'response_bundle',
83
- skips: true,
84
- message:
85
- )
81
+ run do
82
+ failed = non_conformant_bundles
83
+ skip_if failed.present?,
84
+ "Non-conformant response Bundles #{failed_entities_description}: #{failed.join(', ')}. " \
85
+ 'Check messages for issues found.'
86
86
  end
87
87
  end
88
88
  end
@@ -3,6 +3,7 @@ require_relative '../../client_input_descriptions'
3
3
  require_relative '../../user_input_response'
4
4
  require_relative '../../../cross_suite/pas_bundle_validation'
5
5
  require_relative '../../session_identification'
6
+ require_relative '../../subscription_setup_requirement'
6
7
 
7
8
  module DaVinciPASTestKit
8
9
  module DaVinciPASV201
@@ -11,15 +12,16 @@ module DaVinciPASTestKit
11
12
  include SessionIdentification
12
13
  include UserInputResponse
13
14
  include PasBundleValidation
15
+ include SubscriptionSetupRequirement
14
16
 
15
17
  id :pas_client_v201_pended_submit_test
16
- title 'Client submits a claim and reacts to a pended response'
18
+ title 'PAS client submits a claim and reacts to a pended response'
17
19
  description %(
18
- Inferno will wait for a prior authorization submission request
19
- from the client. Upon receipt, Inferno will respond with the
20
+ During this test, Inferno will wait for a prior authorization submission request
21
+ from the PAS client. Upon receipt, Inferno will respond with the
20
22
  provided pended response. Subsequently, Inferno will send a
21
23
  notification that the claim has been finalized and expect the
22
- client under test to send a follow-up inquiry.
24
+ PAS client to send a follow-up inquiry.
23
25
  )
24
26
  verifies_requirements 'hl7.fhir.us.davinci-pas_2.0.1@58', 'hl7.fhir.us.davinci-pas_2.0.1@62',
25
27
  'hl7.fhir.us.davinci-pas_2.0.1@67', 'hl7.fhir.us.davinci-pas_2.0.1@70',
@@ -27,14 +29,14 @@ module DaVinciPASTestKit
27
29
  'hl7.fhir.us.davinci-pas_2.0.1@153', 'hl7.fhir.us.davinci-pas_2.0.1@202',
28
30
  'hl7.fhir.us.davinci-pas_2.0.1@203'
29
31
 
30
- config options: { accepts_multiple_requests: true }
32
+ config options: { accepts_multiple_requests: true, submit_enabled: true, inquire_enabled: true }
31
33
  input :notification_bundle,
32
34
  title: 'Claim updated notification JSON',
33
35
  type: 'textarea',
34
36
  optional: true,
35
37
  description: %(
36
38
  If provided, this JSON will be sent as the notification for the
37
- PAS Subscription to tell the client that a decision has been made on the pended claim.
39
+ PAS Subscription to tell the PAS client that a decision has been made on the pended claim.
38
40
  Before sending, Inferno will update the provided notification with details that the tester cannot
39
41
  know ahead of time, including timestamps corresponding to the notification trigger time, and the id of
40
42
  the triggering ClaimResponse if Inferno mocks that ClaimResponse because it is not provided by the
@@ -69,8 +71,8 @@ module DaVinciPASTestKit
69
71
  optional: true,
70
72
  title: 'Client Notification Access Token',
71
73
  description: %(
72
- The bearer token that Inferno will send on requests to the client under test's rest-hook notification
73
- endpoint. Not needed if the client under test will create a Subscription with an appropriate header value
74
+ The bearer token that Inferno will send on requests to the PAS client's rest-hook notification
75
+ endpoint. Not needed if the PAS client will create a Subscription with an appropriate header value
74
76
  in the `channel.header` element. If a value for the `authorization` header is provided in
75
77
  `channel.header`, this value will override it.
76
78
  )
@@ -92,13 +94,7 @@ module DaVinciPASTestKit
92
94
  inquire_respond_with :inquire_json_response
93
95
 
94
96
  run do
95
- load_tagged_requests(SUBSCRIPTION_CREATE_TAG)
96
- skip_if requests.empty?, # NOTE: subscription needed ahead of time to support notification generation
97
- %(
98
- Pended workflow tests cannot proceed because no Subscription exists to receive notifications
99
- for pended claims. Run the _PAS Subscription Setup_ tests to provide a Subscription for use
100
- in delivering notifications before re-running the pended workflow tests.
101
- )
97
+ require_unmodified_subscription
102
98
 
103
99
  if user_inputted_response? :pended_json_response
104
100
  assert_valid_json pended_json_response,
@@ -141,42 +137,55 @@ module DaVinciPASTestKit
141
137
  wait(
142
138
  identifier: wait_identifier,
143
139
  timeout: 600,
144
- message: %(
145
- **Pended Workflow Test**:
140
+ message: <<~MESSAGE
141
+ **Pended Scenario Test**:
146
142
 
147
- 1. Submit a PAS request to
143
+ Inferno will wait while the tester uses the PAS client to complete the following steps:
148
144
 
149
- `#{submit_endpoint}`
145
+ 1. Submit a PAS request to Inferno's `$submit` endpoint. Inferno will return a pended response.
146
+ 2. Within 5-10 seconds, Inferno will send a notification indicating that the ClaimResponse has
147
+ been finalized to the endpoint provided on the Subscription during the _Subscription Setup_ tests.
148
+ 3. Once the notification has been received, submit a PAS inquiry request to Inferno's `$inquire`
149
+ endpoint. Inferno will return an approval response.
150
150
 
151
- If the optional '**#{input_title(:pended_json_response)}**' input is populated, it will
152
- be returned, updated with current timestamps. Otherwise, a pended response will
153
- be generated by Inferno using the received Claim.
151
+ Inferno will later ask testers to attest that the PAS client marked the request as pended after
152
+ step 1 (submit) and before step 2 (notification), so testers should check their PAS client's state
153
+ between these steps in order to faithfully answer the attestation.
154
154
 
155
- 2. Within 5-10 seconds, Inferno will send a notification indicating that the ClaimResponse has been
156
- finalized. If the optional '**#{input_title(:notification_bundle)}**' input is populated
157
- Inferno will send it as a notification. Otherwise, a notification will be generated
158
- from Inferno. In either case, the notification will be delivered to the endpoint provided on the
159
- Subscription during the _PAS Subscription Setup_ tests.
155
+ [Click here](#{confirmation_url}) once the PAS client has completed these steps.
160
156
 
161
- 3. Once the notification has been received, submit a PAS inquiry request to
157
+ ### Endpoints
162
158
 
163
- `#{inquire_endpoint}`
159
+ - $submit: `#{submit_endpoint}`
160
+ - $inquire: `#{inquire_endpoint}`
164
161
 
165
- If the optional '**#{input_title(:inquire_json_response)}**' input is populated, it will
166
- be returned, updated with current timestamps. Otherwise, an approval response will
167
- be generated by Inferno using the received Claim.
162
+ ### Authentication and Identification
168
163
 
169
- Note that Inferno will ask testers to attest to correct behavior of the system between these steps,
170
- i.e., that the system marked the pended prior auth request appropriately after step 1 (submit) but
171
- before step 2 (notification). Thus testers should check their system state as appropriate in order
172
- to be able to faithfully answer the attestations.
164
+ #{auth_description_for_wait(client_id)}
173
165
 
174
- Once the client has completed these steps,
175
- [click here to complete the test](#{confirmation_url})
176
- and continue Inferno's evaluation of the interaction.
177
- )
166
+ ### Responses
167
+
168
+ #{response_description_for_wait(user_inputted_response?(:pended_json_response),
169
+ input_title(:pended_json_response),
170
+ '$submit')}
171
+
172
+ #{response_description_for_wait(user_inputted_response?(:inquire_json_response),
173
+ input_title(:inquire_json_response),
174
+ '$inquire')}
175
+
176
+ #{notification_description_for_wait}
177
+ MESSAGE
178
178
  )
179
179
  end
180
+
181
+ def notification_description_for_wait
182
+ if notification_bundle.present?
183
+ "Inferno will send the content of the '**#{input_title(:notification_bundle)}**' input as the " \
184
+ 'notification, updated with current timestamps.'
185
+ else
186
+ 'Inferno will send a notification generated from the pended response.'
187
+ end
188
+ end
180
189
  end
181
190
  end
182
191
  end
@@ -1,14 +1,16 @@
1
1
  require_relative '../../../cross_suite/pas_bundle_validation'
2
+ require_relative '../../client_bundle_validation_helper'
2
3
 
3
4
  module DaVinciPASTestKit
4
5
  module DaVinciPASV201
5
6
  class PasClientRequestBundleValidationTest < Inferno::Test
6
7
  include DaVinciPASTestKit::PasBundleValidation
8
+ include DaVinciPASTestKit::ClientBundleValidationHelper
7
9
 
8
10
  id :pas_client_v201_request_bundle_validation_test
9
- title 'Submit Request Bundle is valid'
11
+ title '$submit request Bundles have the correct structure and content'
10
12
  description %(
11
- This test verifies the conformity of the client's submit request body to the
13
+ This test verifies the conformity of each of the PAS client's `$submit` request bodies to the
12
14
  [PAS Request Bundle](http://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-pas-request-bundle.html)
13
15
  structure. It also checks that other conformance requirements defined in the [PAS Formal
14
16
  Specification](https://hl7.org/fhir/us/davinci-pas/STU2/specification.html),
@@ -39,30 +41,22 @@ module DaVinciPASTestKit
39
41
  'hl7.fhir.us.davinci-pas_2.0.1@81', 'hl7.fhir.us.davinci-pas_2.0.1@85',
40
42
  'hl7.fhir.us.davinci-pas_2.0.1@86'
41
43
 
42
- def workflow_tag
43
- config.options[:workflow_tag]
44
+ def operation_name
45
+ 'submit'
44
46
  end
45
47
 
46
- def request_type_tag
47
- SUBMIT_TAG
48
+ def message_direction_name
49
+ 'request'
48
50
  end
49
51
 
50
- run do
51
- if workflow_tag.present?
52
- load_tagged_requests(request_type_tag, workflow_tag)
53
- else
54
- load_tagged_requests(request_type_tag)
55
- end
56
- skip_if !request.present?, 'No submit requests received.'
52
+ def ig_version
53
+ '2.0.1'
54
+ end
57
55
 
58
- validate_pas_bundle_json(
59
- request.request_body,
60
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-request-bundle',
61
- '2.0.1',
62
- 'submit',
63
- 'request_bundle',
64
- message: 'The Bundle provided for the Claim/$submit operation is invalid:'
65
- )
56
+ run do
57
+ failed = non_conformant_bundles
58
+ assert failed.empty?,
59
+ "Non-conformant request Bundles detected: #{failed.join(', ')}. Check messages for issues found."
66
60
  end
67
61
  end
68
62
  end
@@ -1,21 +1,21 @@
1
1
  require_relative '../../../cross_suite/pas_bundle_validation'
2
2
  require_relative '../../user_input_response'
3
- require_relative '../../response_generator'
3
+ require_relative '../../client_bundle_validation_helper'
4
4
 
5
5
  module DaVinciPASTestKit
6
6
  module DaVinciPASV201
7
7
  class PasClientResponseBundleValidationTest < Inferno::Test
8
8
  include DaVinciPASTestKit::PasBundleValidation
9
9
  include UserInputResponse
10
- include ResponseGenerator
10
+ include DaVinciPASTestKit::ClientBundleValidationHelper
11
11
 
12
12
  id :pas_client_v201_response_bundle_validation_test
13
- title 'Submit Response Bundle is valid'
13
+ title '$submit response Bundles have the correct structure and content'
14
14
  description %(
15
- **USER INPUT VERIFICATION**: This test verifies input provided by the tester instead of the system under test.
15
+ This test verifies input provided by the tester instead of the PAS client.
16
16
  Errors encountered will be treated as a skip instead of a failure.
17
17
 
18
- This test verifies the conformity of the submit response sent by Inferno, which will have been
18
+ This test verifies the conformity of each `$submit` response sent by Inferno, which will have been
19
19
  either:
20
20
  - the response body provided by the tester in the corresponding input, or
21
21
  - created by Inferno from the $submit Bundle.
@@ -33,8 +33,11 @@ module DaVinciPASTestKit
33
33
  to the bound ValueSet. Quantity, Coding, and code element bindings will
34
34
  fail if their code/system are not found in the valueset.
35
35
 
36
- Note that because X12 value sets are not public, elements bound to value
37
- sets containing X12 codes are not validated.
36
+ Note that:
37
+ - To ensure that the PAS client is driving its behavior only based on standard
38
+ PAS information, custom extensions are not allowed within the responses.
39
+ - Because X12 value sets are not public, elements bound to value
40
+ sets containing X12 codes are not validated.
38
41
 
39
42
  **Limitations**
40
43
 
@@ -46,12 +49,16 @@ module DaVinciPASTestKit
46
49
  )
47
50
  simulation_verification
48
51
 
49
- def request_type
52
+ def operation_name
50
53
  'submit'
51
54
  end
52
55
 
53
- def workflow_tag
54
- config.options[:workflow_tag]
56
+ def message_direction_name
57
+ 'response'
58
+ end
59
+
60
+ def ig_version
61
+ '2.0.1'
55
62
  end
56
63
 
57
64
  def target_user_input
@@ -67,26 +74,19 @@ module DaVinciPASTestKit
67
74
  end
68
75
  end
69
76
 
70
- run do
71
- load_tagged_requests(workflow_tag, SUBMIT_TAG)
72
- skip_if requests.empty?, 'No responses to verify because no submit requests were made.'
73
- message = if workflow_tag == MUST_SUPPORT_WORKFLOW_TAG
74
- 'Invalid must support response bundle provided:'
75
- elsif user_inputted_response? target_user_input
76
- "Invalid response generated from provided input '#{input_title(target_user_input)}':"
77
- else
78
- 'Invalid response generated from the submitted claim:'
79
- end
77
+ def failed_entities_description
78
+ if user_inputted_response? target_user_input
79
+ "built from tester-provided response in '#{input_title(target_user_input)}'"
80
+ else
81
+ 'generated from the submitted claim'
82
+ end
83
+ end
80
84
 
81
- validate_pas_bundle_json(
82
- request.response_body,
83
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle',
84
- '2.0.1',
85
- request_type,
86
- 'response_bundle',
87
- skips: true,
88
- message:
89
- )
85
+ run do
86
+ failed = non_conformant_bundles
87
+ skip_if failed.present?,
88
+ "Non-conformant response Bundles #{failed_entities_description}: #{failed.join(', ')}. " \
89
+ 'Check messages for issues found.'
90
90
  end
91
91
  end
92
92
  end
@@ -0,0 +1,10 @@
1
+ module DaVinciPASTestKit
2
+ module DaVinciPASV221
3
+ ATTESTATION_INPUT_INSTRUCTIONS = %(
4
+ Testers are responsible for confirming that the PAS client 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,44 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV221
5
+ class DataElementExpectationsAttestationTest < Inferno::Test
6
+ id :pas_client_v221_data_element_expectations_attestation
7
+ ATTESTATION_TITLE = 'PAS client 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 PAS client does not set additional expectations
11
+ for data elements beyond what is required by PAS.
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-pas_2.2.1@conf-14', 'hl7.fhir.us.davinci-pas_2.2.1@conf-15',
17
+ 'hl7.fhir.us.davinci-pas_2.2.1@conf-16-A'
18
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
19
+
20
+ input :data_element_expectations_attestation,
21
+ title: ATTESTATION_TITLE,
22
+ description: %(
23
+ I attest that the PAS client does not set additional expectations for
24
+ data elements beyond what is required by PAS.
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,45 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV221
5
+ class ProviderReviewAttestationTest < Inferno::Test
6
+ id :pas_client_v221_provider_review_attestation
7
+ ATTESTATION_TITLE = 'PAS client allows but does not require providers to review information before ' \
8
+ 'submitting'.freeze
9
+ title ATTESTATION_TITLE
10
+ description %(
11
+ During this test, the tester will confirm that the PAS client allows but does not require providers
12
+ to review submission details before sending PAS prior authorization requests.
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 'hl7.fhir.us.davinci-pas_2.2.1@priv-1-A', 'hl7.fhir.us.davinci-pas_2.2.1@priv-1-B',
18
+ 'hl7.fhir.us.davinci-pas_2.2.1@use-5'
19
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
20
+
21
+ input :provider_review_attestation,
22
+ title: ATTESTATION_TITLE,
23
+ description: %(
24
+ I attest that the PAS client allows but does not require providers to review
25
+ submission details before sending PAS prior authorization requests.
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 :provider_review_attestation_note,
36
+ title: 'Notes, if applicable:',
37
+ type: 'textarea',
38
+ optional: true
39
+
40
+ run do
41
+ assert provider_review_attestation == 'true'
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'attestation_instructions'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV221
5
+ class ClientSecurityAttestationTest < Inferno::Test
6
+ id :pas_client_v221_security_attestation
7
+ ATTESTATION_TITLE = 'PAS client adheres to security and privacy requirements'.freeze
8
+ title ATTESTATION_TITLE
9
+ description %(
10
+ During this test, the tester will confirm that the PAS client adheres to security and
11
+ privacy requirements including those defined in the HRex specification. To see the specifics
12
+ of the attested requirements, click the "View Specification Requirements" link for this test.
13
+ )
14
+ attestation
15
+ verifies_requirements 'hl7.fhir.us.davinci-pas_2.2.1@spec-4'
16
+ input_instructions ATTESTATION_INPUT_INSTRUCTIONS
17
+
18
+ input :security_attestation,
19
+ title: ATTESTATION_TITLE,
20
+ description: %(
21
+ I attest that the PAS client adheres to security and
22
+ privacy requirements including those defined in the HRex specification.
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 :security_attestation_note,
33
+ title: 'Notes, if applicable:',
34
+ type: 'textarea',
35
+ optional: true
36
+
37
+ run do
38
+ assert security_attestation == 'true'
39
+ end
40
+ end
41
+ end
42
+ end