davinci_pas_test_kit 0.14.0 → 0.15.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 (461) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/pas_client_v201_run_against_pas_server.json +39 -0
  3. data/config/presets/pas_client_v221_run_against_pas_server.json +85 -0
  4. data/config/presets/pas_ri.json +2 -2
  5. data/config/presets/pas_server_v201_run_against_pas_client.json.erb +76 -0
  6. data/config/presets/pas_server_v221_run_against_pas_client.json.erb +104 -0
  7. data/lib/davinci_pas_test_kit/client/abstract_approval_submit_test.rb +75 -0
  8. data/lib/davinci_pas_test_kit/client/abstract_denial_submit_test.rb +74 -0
  9. data/lib/davinci_pas_test_kit/client/abstract_gather_must_support_test.rb +160 -0
  10. data/lib/davinci_pas_test_kit/client/abstract_modification_submit_test.rb +78 -0
  11. data/lib/davinci_pas_test_kit/client/abstract_response_attest.rb +64 -0
  12. data/lib/davinci_pas_test_kit/client/abstract_subscription_create_test.rb +57 -0
  13. data/lib/davinci_pas_test_kit/{urls.rb → client/client_urls.rb} +7 -23
  14. data/lib/davinci_pas_test_kit/client/endpoints/claim_endpoint.rb +303 -0
  15. data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/subscription_create_endpoint.rb +1 -1
  16. data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/subscription_status_endpoint.rb +1 -1
  17. data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/token_endpoint.rb +1 -2
  18. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb → client/generated/v2.0.1/beneficiary/client_inquire_request_must_support_beneficiary_test.rb} +14 -35
  19. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +59 -0
  20. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/client_inquire_request_beneficiary_must_support_test.rb → client/generated/v2.0.1/beneficiary/client_submit_request_must_support_beneficiary_test.rb} +14 -35
  21. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +59 -0
  22. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_inquiry/client_inquire_request_claim_inquiry_must_support_test.rb → client/generated/v2.0.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb} +19 -35
  23. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb → client/generated/v2.0.1/claim_update/client_submit_request_must_support_claim_update_test.rb} +19 -35
  24. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +57 -0
  25. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +59 -0
  26. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/communication_request/client_submit_response_must_support_communication_request_test.rb +42 -0
  27. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_inquire_request_must_support_coverage_test.rb +39 -0
  28. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_submit_request_must_support_coverage_test.rb +39 -0
  29. data/lib/davinci_pas_test_kit/{generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb → client/generated/v2.0.1/encounter/client_submit_request_must_support_encounter_test.rb} +14 -35
  30. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_request_must_support_insurer_test.rb +44 -0
  31. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_response_must_support_insurer_test.rb +44 -0
  32. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_request_must_support_insurer_test.rb +44 -0
  33. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_response_must_support_insurer_test.rb +44 -0
  34. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_must_support_group.rb +48 -0
  35. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_response_must_support_group.rb +79 -0
  36. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_must_support_group.rb +58 -0
  37. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_response_must_support_group.rb +84 -0
  38. 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 +37 -0
  39. 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 +36 -0
  40. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_request_bundle/client_submit_request_must_support_pas_request_bundle_test.rb +37 -0
  41. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +36 -0
  42. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_request_must_support_practitioner_test.rb +37 -0
  43. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +37 -0
  44. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_request_must_support_practitioner_test.rb +37 -0
  45. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_response_must_support_practitioner_test.rb +37 -0
  46. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_request_must_support_practitioner_role_test.rb +33 -0
  47. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +33 -0
  48. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_request_must_support_practitioner_role_test.rb +33 -0
  49. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +33 -0
  50. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_request_must_support_requestor_test.rb +47 -0
  51. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_response_must_support_requestor_test.rb +47 -0
  52. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_request_must_support_requestor_test.rb +47 -0
  53. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_response_must_support_requestor_test.rb +47 -0
  54. data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/client_inquire_request_subscriber_must_support_test.rb → client/generated/v2.0.1/subscriber/client_inquire_request_must_support_subscriber_test.rb} +14 -35
  55. data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb → client/generated/v2.0.1/subscriber/client_submit_request_must_support_subscriber_test.rb} +14 -35
  56. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_inquire_response_must_support_task_test.rb +45 -0
  57. data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_submit_response_must_support_task_test.rb +45 -0
  58. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +53 -0
  59. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +53 -0
  60. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb +123 -0
  61. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_update/client_submit_request_must_support_claim_update_test.rb +143 -0
  62. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +102 -0
  63. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +103 -0
  64. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/communication_request/client_submit_response_must_support_communication_request_test.rb +42 -0
  65. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_inquire_response_must_support_insurer_test.rb +47 -0
  66. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_submit_response_must_support_insurer_test.rb +47 -0
  67. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_must_support_group.rb +60 -0
  68. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_response_must_support_group.rb +79 -0
  69. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_must_support_group.rb +89 -0
  70. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_response_must_support_group.rb +84 -0
  71. 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 +38 -0
  72. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +39 -0
  73. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +44 -0
  74. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_submit_response_must_support_practitioner_test.rb +44 -0
  75. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +40 -0
  76. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +40 -0
  77. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_inquire_response_must_support_requestor_test.rb +50 -0
  78. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_submit_response_must_support_requestor_test.rb +50 -0
  79. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_inquire_response_must_support_task_test.rb +55 -0
  80. data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_submit_response_must_support_task_test.rb +55 -0
  81. data/lib/davinci_pas_test_kit/{jobs → client/jobs}/send_pas_subscription_notification.rb +12 -7
  82. data/lib/davinci_pas_test_kit/{jobs → client/jobs}/send_subscription_handshake.rb +1 -1
  83. data/lib/davinci_pas_test_kit/client/metadata/mock_pas_server.rb +26 -0
  84. data/lib/davinci_pas_test_kit/client/metadata/pas_server_capability_statement.json +60 -0
  85. data/lib/davinci_pas_test_kit/client/pas_client_options.rb +23 -0
  86. data/lib/davinci_pas_test_kit/client/pas_client_subscription_pas_conformance_test.rb +33 -0
  87. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_other_display_test.rb +45 -0
  88. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_smart_display_test.rb +37 -0
  89. data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_udap_display_test.rb +37 -0
  90. data/lib/davinci_pas_test_kit/client/registration/abstract_other_auth_attest_test.rb +39 -0
  91. data/lib/davinci_pas_test_kit/{response_generator.rb → client/response_generator.rb} +198 -62
  92. data/lib/davinci_pas_test_kit/{session_identification.rb → client/session_identification.rb} +1 -2
  93. data/lib/davinci_pas_test_kit/client/user_input_response.rb +64 -0
  94. data/lib/davinci_pas_test_kit/{client_suite.rb → client/v2.0.1/client_suite.rb} +33 -16
  95. data/lib/davinci_pas_test_kit/client/v2.0.1/must_support/pas_client_gather_must_support_test.rb +12 -0
  96. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb → client/v2.0.1/must_support/pas_client_must_support_request_profiles_test.rb} +12 -46
  97. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_approval_group.rb +5 -5
  98. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_auth_smart_group.rb +1 -2
  99. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_auth_udap_group.rb +1 -2
  100. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_denial_group.rb +7 -6
  101. data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_must_support_group.rb +96 -0
  102. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_pended_group.rb +13 -10
  103. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_registration_group.rb +5 -6
  104. data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_subscription_setup_group.rb +6 -3
  105. data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_other_display_test.rb +12 -0
  106. data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_smart_display_test.rb +12 -0
  107. data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_udap_display_test.rb +12 -0
  108. data/lib/davinci_pas_test_kit/client/v2.0.1/registration/other_auth_attest_test.rb +12 -0
  109. data/lib/davinci_pas_test_kit/client/v2.0.1/subscription/pas_client_subscription_create_test.rb +15 -0
  110. data/lib/davinci_pas_test_kit/client/v2.0.1/urls.rb +15 -0
  111. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_approval_submit_test.rb +15 -0
  112. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_denial_submit_test.rb +15 -0
  113. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_inquire_request_bundle_validation_test.rb +1 -3
  114. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_inquire_response_bundle_validation_test.rb +18 -6
  115. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_pended_submit_test.rb +12 -8
  116. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_request_bundle_validation_test.rb +1 -3
  117. data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_response_attest.rb +12 -0
  118. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_response_bundle_validation_test.rb +10 -5
  119. data/lib/davinci_pas_test_kit/client/v2.2.1/client_suite.rb +240 -0
  120. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_failure_submit_test.rb +76 -0
  121. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_outcome_validation_test.rb +38 -0
  122. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_response_validation_test.rb +55 -0
  123. data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_submit_test.rb +67 -0
  124. data/lib/davinci_pas_test_kit/client/v2.2.1/must_support/must_support_with_attestation_option.rb +214 -0
  125. data/lib/davinci_pas_test_kit/client/v2.2.1/must_support/pas_client_gather_must_support_test.rb +12 -0
  126. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_approval_group.rb +40 -0
  127. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_smart_group.rb +31 -0
  128. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_udap_group.rb +30 -0
  129. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_claim_updates_group.rb +112 -0
  130. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_denial_group.rb +47 -0
  131. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_error_handling_group.rb +20 -0
  132. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_modification_group.rb +52 -0
  133. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_must_support_group.rb +96 -0
  134. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_operation_failure_group.rb +45 -0
  135. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_pended_group.rb +125 -0
  136. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_processing_error_group.rb +44 -0
  137. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_registration_group.rb +65 -0
  138. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_subscription_setup_group.rb +31 -0
  139. data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_workflows_group.rb +25 -0
  140. data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_other_display_test.rb +12 -0
  141. data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_smart_display_test.rb +12 -0
  142. data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_udap_display_test.rb +12 -0
  143. data/lib/davinci_pas_test_kit/client/v2.2.1/registration/other_auth_attest_test.rb +12 -0
  144. data/lib/davinci_pas_test_kit/client/v2.2.1/subscription/pas_client_subscription_create_test.rb +14 -0
  145. data/lib/davinci_pas_test_kit/client/v2.2.1/urls.rb +15 -0
  146. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_approval_submit_test.rb +12 -0
  147. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancel_request_test.rb +33 -0
  148. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancelled_entries_test.rb +50 -0
  149. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancelled_items_certtype_test.rb +47 -0
  150. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_changed_entries_test.rb +100 -0
  151. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_entries_preserved_test.rb +51 -0
  152. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_grandparent_excluded_test.rb +52 -0
  153. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_referenced_claim_test.rb +46 -0
  154. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_referenced_resources_test.rb +43 -0
  155. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_submit_tests.rb +238 -0
  156. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_validation_utils.rb +183 -0
  157. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_denial_submit_test.rb +12 -0
  158. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_request_bundle_validation_test.rb +55 -0
  159. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_response_bundle_validation_test.rb +78 -0
  160. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_modification_submit_test.rb +12 -0
  161. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_modification_verification_test.rb +101 -0
  162. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_pended_submit_test.rb +148 -0
  163. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_request_bundle_validation_test.rb +56 -0
  164. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_response_attest.rb +12 -0
  165. data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_response_bundle_validation_test.rb +84 -0
  166. data/lib/davinci_pas_test_kit/cross_suite/base_urls.rb +27 -0
  167. data/lib/davinci_pas_test_kit/cross_suite/fhirpath_utils.rb +55 -0
  168. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/beneficiary/metadata.yml +19 -13
  169. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_inquiry/metadata.yml +59 -22
  170. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_update/metadata.yml +60 -22
  171. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claiminquiryresponse/metadata.yml +17 -10
  172. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claimresponse/metadata.yml +17 -13
  173. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/communication_request/metadata.yml +7 -13
  174. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/coverage/metadata.yml +8 -12
  175. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/device_request/metadata.yml +1 -6
  176. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/encounter/metadata.yml +6 -5
  177. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/insurer/metadata.yml +16 -13
  178. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/medication_request/metadata.yml +1 -6
  179. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/metadata.yml +276 -135
  180. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/nutrition_order/metadata.yml +1 -6
  181. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_request_bundle/metadata.yml +5 -7
  182. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_response_bundle/metadata.yml +5 -5
  183. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_request_bundle/metadata.yml +5 -7
  184. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_response_bundle/metadata.yml +5 -5
  185. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/practitioner/metadata.yml +16 -13
  186. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/practitioner_role/metadata.yml +16 -19
  187. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/requestor/metadata.yml +16 -13
  188. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/service_request/metadata.yml +2 -6
  189. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/subscriber/metadata.yml +11 -9
  190. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/task/metadata.yml +8 -5
  191. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/beneficiary/metadata.yml +150 -0
  192. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim → cross_suite/generated/v2.2.1/claim_inquiry}/metadata.yml +199 -192
  193. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claim_update/metadata.yml +733 -0
  194. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claiminquiryresponse/metadata.yml +456 -0
  195. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claimresponse/metadata.yml +461 -0
  196. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/communication_request/metadata.yml +120 -0
  197. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/coverage/metadata.yml +163 -0
  198. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/device_request_metadata.yml → cross_suite/generated/v2.2.1/device_request/metadata.yml} +32 -33
  199. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/encounter/metadata.yml +237 -0
  200. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/insurer/metadata.yml +111 -0
  201. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/medication_request_metadata.yml → cross_suite/generated/v2.2.1/medication_request/metadata.yml} +59 -26
  202. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/metadata.yml +6544 -0
  203. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/nutrition_order_metadata.yml → cross_suite/generated/v2.2.1/nutrition_order/metadata.yml} +13 -14
  204. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_request_bundle/metadata.yml +74 -0
  205. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_response_bundle/metadata.yml +70 -0
  206. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_request_bundle/metadata.yml +74 -0
  207. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_response_bundle/metadata.yml +72 -0
  208. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner/metadata.yml +101 -0
  209. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner_role/metadata.yml +101 -0
  210. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/requestor/metadata.yml +114 -0
  211. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/service_request_metadata.yml → cross_suite/generated/v2.2.1/service_request/metadata.yml} +39 -45
  212. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/subscriber/metadata.yml +136 -0
  213. data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/task/metadata.yml +237 -0
  214. data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_data_gathering.rb +111 -0
  215. data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_request_type_test.rb +75 -0
  216. data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_test.rb +67 -0
  217. data/lib/davinci_pas_test_kit/{pas_bundle_validation.rb → cross_suite/pas_bundle_validation.rb} +383 -56
  218. data/lib/davinci_pas_test_kit/cross_suite/pas_constants.rb +31 -0
  219. data/lib/davinci_pas_test_kit/cross_suite/pas_notification_verification.rb +120 -0
  220. data/lib/davinci_pas_test_kit/cross_suite/pas_subscription_verification.rb +72 -0
  221. data/lib/davinci_pas_test_kit/cross_suite/response_selection_utils.rb +88 -0
  222. data/lib/davinci_pas_test_kit/cross_suite/tags.rb +35 -0
  223. data/lib/davinci_pas_test_kit/cross_suite/validation_test.rb +25 -0
  224. data/lib/davinci_pas_test_kit/{validator_suppressions.rb → cross_suite/validator_suppressions.rb} +23 -1
  225. data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +22 -0
  226. data/lib/davinci_pas_test_kit/generator/client_must_support_group_generator.rb +230 -0
  227. data/lib/davinci_pas_test_kit/generator/descriptions.rb +95 -0
  228. data/lib/davinci_pas_test_kit/generator/ig_metadata.rb +45 -38
  229. data/lib/davinci_pas_test_kit/generator/ig_metadata_extractor.rb +3 -5
  230. data/lib/davinci_pas_test_kit/generator/{must_support_check_profiles.rb → must_support_target_profiles.rb} +12 -12
  231. data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +63 -83
  232. data/lib/davinci_pas_test_kit/generator/pas_must_support_metadata_extractor.rb +129 -0
  233. data/lib/davinci_pas_test_kit/generator/profile_metadata.rb +86 -0
  234. data/lib/davinci_pas_test_kit/generator/{group_metadata_extractor.rb → profile_metadata_extractor.rb} +11 -78
  235. data/lib/davinci_pas_test_kit/generator/server_must_support_group_generator.rb +166 -0
  236. data/lib/davinci_pas_test_kit/generator/{suite_generator.rb → server_suite_generator.rb} +32 -5
  237. data/lib/davinci_pas_test_kit/generator/templates/client_must_support_group.rb.erb +80 -0
  238. data/lib/davinci_pas_test_kit/generator/templates/client_must_support_response_group.rb.erb +43 -0
  239. data/lib/davinci_pas_test_kit/generator/templates/must_support.rb.erb +14 -35
  240. data/lib/davinci_pas_test_kit/generator/templates/server_must_support_group.rb.erb +121 -0
  241. data/lib/davinci_pas_test_kit/generator/templates/{suite.rb.erb → server_suite.rb.erb} +19 -23
  242. data/lib/davinci_pas_test_kit/generator/templates/use_case_group.rb.erb +181 -0
  243. data/lib/davinci_pas_test_kit/generator/use_case_group_generator.rb +227 -0
  244. data/lib/davinci_pas_test_kit/generator.rb +46 -26
  245. data/lib/davinci_pas_test_kit/igs/davinci_pas_2.2.1.tgz +0 -0
  246. data/lib/davinci_pas_test_kit/metadata.rb +21 -55
  247. data/lib/davinci_pas_test_kit/parameters_helper.rb +18 -0
  248. data/lib/davinci_pas_test_kit/pas_notification_conformance_test.rb +40 -0
  249. data/lib/davinci_pas_test_kit/requirements/davinci_pas_test_kit_requirements.csv +121 -0
  250. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v201_requirements_coverage.csv +22 -22
  251. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v221_requirements_coverage.csv +66 -0
  252. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_server_suite_v201_requirements_coverage.csv +42 -42
  253. data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_server_suite_v221_requirements_coverage.csv +212 -0
  254. data/lib/davinci_pas_test_kit/requirements/hl7.fhir.us.davinci-pas_2.2.1_requirements.xlsx +0 -0
  255. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb → server/abstract_pas_subscription_notification_wait_test.rb} +13 -20
  256. data/lib/davinci_pas_test_kit/server/claim_inquire_operation_test.rb +31 -0
  257. data/lib/davinci_pas_test_kit/server/claim_operation_logic.rb +67 -0
  258. data/lib/davinci_pas_test_kit/server/claim_submit_operation_test.rb +32 -0
  259. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb} +14 -35
  260. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb} +16 -36
  261. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_inquire_request_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb} +14 -35
  262. data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_inquire_response_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb} +16 -36
  263. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_inquiry/server_inquire_request_claim_inquiry_must_support_test.rb → server/generated/v2.0.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb} +19 -35
  264. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb → server/generated/v2.0.1/claim_update/server_submit_request_must_support_claim_update_test.rb} +19 -35
  265. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claiminquiryresponse/server_inquire_response_claiminquiryresponse_must_support_test.rb → server/generated/v2.0.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb} +14 -35
  266. data/lib/davinci_pas_test_kit/{generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb → server/generated/v2.0.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb} +14 -35
  267. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/communication_request/server_submit_response_must_support_communication_request_test.rb +43 -0
  268. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_inquire_request_must_support_coverage_test.rb +41 -0
  269. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_submit_request_must_support_coverage_test.rb +41 -0
  270. data/lib/davinci_pas_test_kit/{generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb → server/generated/v2.0.1/encounter/server_submit_request_must_support_encounter_test.rb} +14 -35
  271. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_request_must_support_insurer_test.rb +46 -0
  272. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_response_must_support_insurer_test.rb +45 -0
  273. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_request_must_support_insurer_test.rb +46 -0
  274. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_response_must_support_insurer_test.rb +45 -0
  275. 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 +39 -0
  276. 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 +37 -0
  277. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +39 -0
  278. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +37 -0
  279. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_approval_use_case_group.rb +145 -0
  280. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_denial_use_case_group.rb +145 -0
  281. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_must_support_group.rb +442 -0
  282. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_pended_use_case_group.rb +280 -0
  283. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +39 -0
  284. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +38 -0
  285. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_request_must_support_practitioner_test.rb +39 -0
  286. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_response_must_support_practitioner_test.rb +38 -0
  287. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +35 -0
  288. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +34 -0
  289. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +35 -0
  290. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +34 -0
  291. data/lib/davinci_pas_test_kit/{generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb → server/generated/v2.0.1/requestor/server_inquire_request_must_support_requestor_test.rb} +14 -35
  292. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_inquire_response_must_support_requestor_test.rb +48 -0
  293. data/lib/davinci_pas_test_kit/{generated/v2.0.1/requestor/server_inquire_request_requestor_must_support_test.rb → server/generated/v2.0.1/requestor/server_submit_request_must_support_requestor_test.rb} +14 -35
  294. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_submit_response_must_support_requestor_test.rb +48 -0
  295. data/lib/davinci_pas_test_kit/{generated → server/generated}/v2.0.1/server_suite.rb +14 -20
  296. data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/server_inquire_request_subscriber_must_support_test.rb → server/generated/v2.0.1/subscriber/server_inquire_request_must_support_subscriber_test.rb} +14 -35
  297. data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb → server/generated/v2.0.1/subscriber/server_submit_request_must_support_subscriber_test.rb} +14 -35
  298. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_inquire_response_must_support_task_test.rb +46 -0
  299. data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_submit_response_must_support_task_test.rb +46 -0
  300. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb +55 -0
  301. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb +53 -0
  302. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb +55 -0
  303. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb +53 -0
  304. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb +125 -0
  305. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_update/server_submit_request_must_support_claim_update_test.rb +145 -0
  306. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb +102 -0
  307. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb +103 -0
  308. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/communication_request/server_submit_response_must_support_communication_request_test.rb +42 -0
  309. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_inquire_request_must_support_coverage_test.rb +52 -0
  310. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_submit_request_must_support_coverage_test.rb +52 -0
  311. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/encounter/server_submit_request_must_support_encounter_test.rb +58 -0
  312. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_request_must_support_insurer_test.rb +49 -0
  313. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_response_must_support_insurer_test.rb +47 -0
  314. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_request_must_support_insurer_test.rb +49 -0
  315. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_response_must_support_insurer_test.rb +47 -0
  316. 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 +41 -0
  317. 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 +38 -0
  318. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +41 -0
  319. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +39 -0
  320. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_approval_use_case_group.rb +125 -0
  321. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_denial_use_case_group.rb +125 -0
  322. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_must_support_group.rb +403 -0
  323. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_pended_use_case_group.rb +150 -0
  324. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +46 -0
  325. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +44 -0
  326. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_request_must_support_practitioner_test.rb +46 -0
  327. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_response_must_support_practitioner_test.rb +44 -0
  328. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +42 -0
  329. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +40 -0
  330. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +42 -0
  331. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +40 -0
  332. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_request_must_support_requestor_test.rb +52 -0
  333. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_response_must_support_requestor_test.rb +50 -0
  334. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_request_must_support_requestor_test.rb +52 -0
  335. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_response_must_support_requestor_test.rb +50 -0
  336. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/server_suite.rb +148 -0
  337. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_inquire_request_must_support_subscriber_test.rb +54 -0
  338. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_submit_request_must_support_subscriber_test.rb +54 -0
  339. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_inquire_response_must_support_task_test.rb +55 -0
  340. data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_submit_response_must_support_task_test.rb +55 -0
  341. data/lib/davinci_pas_test_kit/server/pas_claim_response_decision_test.rb +73 -0
  342. data/lib/davinci_pas_test_kit/server/server_request_bundle_validation_test.rb +64 -0
  343. data/lib/davinci_pas_test_kit/server/server_response_bundle_validation_test.rb +76 -0
  344. data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/pas_inquiry_error_test.rb +2 -2
  345. data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/pas_submission_error_test.rb +2 -2
  346. data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb → server/v2.0.1/must_support/pas_server_must_support_request_profiles_test.rb} +12 -45
  347. data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_error_group.rb +3 -3
  348. data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_server_subscription_input_conformance.rb +5 -3
  349. data/lib/davinci_pas_test_kit/server/v2.0.1/pas_server_subscription_notification_wait_test.rb +12 -0
  350. data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_server_subscription_setup.rb +5 -3
  351. data/lib/davinci_pas_test_kit/server/v2.0.1/server_urls.rb +13 -0
  352. data/lib/davinci_pas_test_kit/server/v2.2.1/claim_updates/server_claim_update_response_tests.rb +143 -0
  353. data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/nonconformant_pas_bundle.json +16 -0
  354. data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/pas_inquiry_error_test.rb +38 -0
  355. data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/pas_submission_error_test.rb +56 -0
  356. data/lib/davinci_pas_test_kit/server/v2.2.1/must_support/pas_server_must_support_request_profiles_test.rb +86 -0
  357. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_error_group.rb +20 -0
  358. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_claim_updates_group.rb +104 -0
  359. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_input_conformance.rb +48 -0
  360. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_notification_wait_test.rb +12 -0
  361. data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_setup.rb +42 -0
  362. data/lib/davinci_pas_test_kit/server/v2.2.1/server_urls.rb +13 -0
  363. data/lib/davinci_pas_test_kit/version.rb +2 -2
  364. data/lib/davinci_pas_test_kit.rb +5 -2
  365. metadata +386 -190
  366. data/config/presets/pas_server_subscription_creation_against_pas_client.json +0 -32
  367. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_response_decision/pas_claim_response_decision_test.rb +0 -43
  368. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_other_display_test.rb +0 -46
  369. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_smart_display_test.rb +0 -37
  370. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_udap_display_test.rb +0 -37
  371. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/other_auth_attest_test.rb +0 -36
  372. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +0 -80
  373. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +0 -79
  374. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +0 -63
  375. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_response_attest.rb +0 -52
  376. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +0 -72
  377. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_create_test.rb +0 -62
  378. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_pas_conformance_test.rb +0 -30
  379. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_must_support_group.rb +0 -29
  380. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_options.rb +0 -25
  381. data/lib/davinci_pas_test_kit/endpoints/claim_endpoint.rb +0 -157
  382. data/lib/davinci_pas_test_kit/fhir_resource_navigation.rb +0 -72
  383. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +0 -67
  384. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +0 -56
  385. data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +0 -63
  386. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquire_request_coverage_must_support_test.rb +0 -60
  387. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +0 -60
  388. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquire_request_coverage_must_support_test.rb +0 -62
  389. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +0 -62
  390. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +0 -56
  391. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +0 -58
  392. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquire_request_insurer_must_support_test.rb +0 -65
  393. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +0 -65
  394. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquire_request_insurer_must_support_test.rb +0 -67
  395. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquire_response_insurer_must_support_test.rb +0 -65
  396. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +0 -67
  397. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +0 -65
  398. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +0 -66
  399. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +0 -68
  400. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +0 -58
  401. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +0 -60
  402. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_inquiry_must_support_use_case_group.rb +0 -51
  403. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_submit_must_support_use_case_group.rb +0 -61
  404. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/client_inquire_request_pas_inquiry_request_bundle_must_support_test.rb +0 -58
  405. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_inquire_request_pas_inquiry_request_bundle_must_support_test.rb +0 -60
  406. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +0 -95
  407. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_inquire_response_pas_inquiry_response_bundle_must_support_test.rb +0 -57
  408. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +0 -89
  409. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/client_submit_request_pas_request_bundle_must_support_test.rb +0 -58
  410. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +0 -95
  411. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_submit_request_pas_request_bundle_must_support_test.rb +0 -60
  412. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +0 -89
  413. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_submit_response_pas_response_bundle_must_support_test.rb +0 -57
  414. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +0 -54
  415. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +0 -54
  416. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +0 -268
  417. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +0 -90
  418. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquire_request_practitioner_must_support_test.rb +0 -58
  419. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +0 -58
  420. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquire_request_practitioner_must_support_test.rb +0 -60
  421. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquire_response_practitioner_must_support_test.rb +0 -58
  422. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +0 -60
  423. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +0 -58
  424. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquire_request_practitioner_role_must_support_test.rb +0 -54
  425. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +0 -54
  426. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquire_request_practitioner_role_must_support_test.rb +0 -56
  427. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquire_response_practitioner_role_must_support_test.rb +0 -54
  428. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +0 -56
  429. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +0 -54
  430. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquire_request_requestor_must_support_test.rb +0 -68
  431. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +0 -68
  432. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquire_response_requestor_must_support_test.rb +0 -68
  433. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +0 -68
  434. data/lib/davinci_pas_test_kit/generated/v2.0.1/resource_list.rb +0 -54
  435. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +0 -58
  436. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +0 -60
  437. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquire_response_task_must_support_test.rb +0 -66
  438. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +0 -66
  439. data/lib/davinci_pas_test_kit/generator/group_generator.rb +0 -470
  440. data/lib/davinci_pas_test_kit/generator/group_metadata.rb +0 -73
  441. data/lib/davinci_pas_test_kit/generator/naming.rb +0 -50
  442. data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +0 -149
  443. data/lib/davinci_pas_test_kit/generator/resource_list_generator.rb +0 -59
  444. data/lib/davinci_pas_test_kit/generator/templates/group.rb.erb +0 -136
  445. data/lib/davinci_pas_test_kit/generator/templates/operation.rb.erb +0 -65
  446. data/lib/davinci_pas_test_kit/generator/templates/resource_list.rb.erb +0 -13
  447. data/lib/davinci_pas_test_kit/generator/templates/validation.rb.erb +0 -99
  448. data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +0 -172
  449. data/lib/davinci_pas_test_kit/generator/value_extractor.rb +0 -51
  450. data/lib/davinci_pas_test_kit/must_support_test.rb +0 -71
  451. data/lib/davinci_pas_test_kit/pas_subscription_verification.rb +0 -30
  452. data/lib/davinci_pas_test_kit/tags.rb +0 -17
  453. data/lib/davinci_pas_test_kit/user_input_response.rb +0 -35
  454. data/lib/davinci_pas_test_kit/validation_test.rb +0 -57
  455. /data/lib/davinci_pas_test_kit/{certs → client/certs}/InfernoCA.key +0 -0
  456. /data/lib/davinci_pas_test_kit/{certs → client/certs}/InfernoCA.pem +0 -0
  457. /data/lib/davinci_pas_test_kit/{certs → client/certs}/TestKit.pem +0 -0
  458. /data/lib/davinci_pas_test_kit/{certs → client/certs}/TestKitPrivateKey.key +0 -0
  459. /data/lib/davinci_pas_test_kit/{descriptions.rb → client/client_input_descriptions.rb} +0 -0
  460. /data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_workflows_group.rb +0 -0
  461. /data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/nonconformant_pas_bundle.json +0 -0
@@ -1,23 +1,37 @@
1
+ require_relative '../parameters_helper'
2
+
1
3
  module DaVinciPASTestKit
2
4
  module ResponseGenerator
3
- def mock_id_only_notification_bundle(submit_response, subscription_reference, subscription_topic)
5
+ include ParametersHelper
6
+
7
+ def mock_id_only_notification_bundle(submit_response, subscription_reference, subscription_topic,
8
+ ig_version = 'v2.0.1')
4
9
  notification_timestamp = Time.now.utc
5
10
  mock_notification_bundle = build_mock_notification_bundle(notification_timestamp, subscription_reference,
6
- subscription_topic, submit_response, 'id-only', nil)
11
+ subscription_topic, submit_response, 'id-only', nil,
12
+ ig_version)
7
13
  mock_notification_bundle.to_json
8
14
  end
9
15
 
10
- def mock_full_resource_notification_bundle(submit_response, subscription_reference, subscription_topic, decision)
16
+ def mock_full_resource_notification_bundle(submit_response, subscription_reference, subscription_topic, decision,
17
+ ig_version = 'v2.0.1')
11
18
  notification_timestamp = Time.now.utc
12
19
  mock_notification_bundle = build_mock_notification_bundle(notification_timestamp, subscription_reference,
13
20
  subscription_topic, submit_response, 'full-resource',
14
- decision)
21
+ decision, ig_version)
15
22
  mock_notification_bundle.to_json
16
23
  end
17
24
 
18
- def mock_response_bundle(request_bundle, operation, decision, claim_response_uuid = nil)
25
+ def mock_response_bundle(request_bundle, operation, decision, claim_response_uuid = nil, ig_version = 'v2.0.1')
19
26
  mocked_timestamp = Time.now.utc
20
- build_mock_response_bundle(request_bundle, operation, decision, mocked_timestamp, claim_response_uuid)&.to_json
27
+ response = build_mock_response_bundle(request_bundle, operation, decision, mocked_timestamp,
28
+ claim_response_uuid, ig_version)
29
+ return nil unless response.present?
30
+
31
+ # For v2.2.1 inquire operations, wrap the Bundle in a Parameters resource
32
+ response = wrap_bundle_in_parameters(response) if ig_version == 'v2.2.1' && operation == 'inquire'
33
+
34
+ response.to_json
21
35
  end
22
36
 
23
37
  # update things that tester cannot get right themselves
@@ -25,20 +39,33 @@ module DaVinciPASTestKit
25
39
  # - reference to the submitted Claim (may not have control of created id). NOTE: this is likely
26
40
  # incomplete - when the Claim is included, there are other things that
27
41
  # need to be in the Bundle that may also not be controlled
28
- def update_tester_provided_response(user_inputted_response, claim_full_url)
29
- response_bundle = FHIR.from_contents(user_inputted_response)
30
- return user_inputted_response unless response_bundle.present?
42
+ def update_tester_provided_response(user_inputted_response, claim_full_url, operation, ig_version = 'v2.0.1')
43
+ response_resource = FHIR.from_contents(user_inputted_response)
44
+ return user_inputted_response unless response_resource.present?
45
+
46
+ # For v2.2.1 inquire responses, wrap user's Bundle in Parameters if needed
47
+ if ig_version == 'v2.2.1' && operation == 'inquire' && response_resource.is_a?(FHIR::Bundle)
48
+ response_resource = wrap_bundle_in_parameters(response_resource)
49
+ end
50
+
51
+ # Extract Bundle(s) for updating
52
+ bundles_to_update = []
53
+ is_parameters = response_resource.resourceType == 'Parameters'
54
+
55
+ if is_parameters
56
+ bundles_to_update = extract_bundles_from_pas_inquiry_response_parameters(response_resource)
57
+ elsif response_resource.is_a?(FHIR::Bundle)
58
+ bundles_to_update = [response_resource]
59
+ else
60
+ return user_inputted_response
61
+ end
31
62
 
32
63
  now = Time.now.utc
33
- response_bundle.timestamp = now.iso8601 if response_bundle&.timestamp.present?
34
- claim_response_entry = response_bundle&.entry&.find { |e| e&.resource&.resourceType == 'ClaimResponse' }
35
- if claim_response_entry.present?
36
- claim_response_entry.resource.created = now.iso8601 if claim_response_entry.resource.created
37
- if claim_response_entry.resource.request.present? && claim_full_url.present?
38
- claim_response_entry.resource.request.reference = claim_full_url
39
- end
64
+ bundles_to_update.each do |response_bundle|
65
+ update_response_bundle(response_bundle, claim_full_url, now, ig_version)
40
66
  end
41
- response_bundle.to_json
67
+
68
+ response_resource.to_json
42
69
  end
43
70
 
44
71
  # update things that tester cannot get right themselves
@@ -94,45 +121,76 @@ module DaVinciPASTestKit
94
121
  claim_response_entry.resource.id = claim_response_id
95
122
  end
96
123
 
124
+ def update_response_bundle(response_bundle, claim_full_url, now, ig_version)
125
+ response_bundle.timestamp = now.iso8601 if response_bundle&.timestamp.present?
126
+ if ig_version == 'v2.2.1' && response_bundle.identifier.blank?
127
+ response_bundle.identifier = FHIR::Identifier.new(system: 'urn:ietf:rfc:3986',
128
+ value: "urn:uuid:#{SecureRandom.uuid}")
129
+ end
130
+ claim_response_entry = response_bundle&.entry&.find { |e| e&.resource&.resourceType == 'ClaimResponse' }
131
+ return unless claim_response_entry.present?
132
+
133
+ claim_response_entry.resource.created = now.iso8601 if claim_response_entry.resource.created
134
+ return unless claim_full_url.present?
135
+
136
+ if claim_response_entry.resource.request.present?
137
+ claim_response_entry.resource.request.reference = claim_full_url
138
+ elsif ig_version == 'v2.2.1'
139
+ claim_response_entry.resource.request = FHIR::Reference.new(reference: claim_full_url)
140
+ end
141
+ end
142
+
97
143
  def build_mock_notification_bundle(notification_timestamp, subscription_reference, subscription_topic,
98
- submit_response, type, decision)
99
- submit_bundle = FHIR.from_contents(submit_response)
100
- claim_response_full_url = claim_response_full_url_from_submit_response_bundle(submit_bundle)
144
+ submit_response, type, decision, _ig_version = 'v2.0.1')
145
+ submit_response_bundle = FHIR.from_contents(submit_response)
146
+
147
+ focus_reference, inner_bundle_full_url = determine_notification_focus(type, submit_response_bundle)
148
+
101
149
  mock_notification_bundle = FHIR::Bundle.new(
102
150
  id: SecureRandom.uuid,
103
151
  timestamp: notification_timestamp.iso8601,
104
152
  type: 'history'
105
153
  )
106
154
 
107
- additional_context_references =
108
- if type == 'full-resource' && submit_bundle.present? && submit_bundle.is_a?(FHIR::Bundle)
109
- submit_bundle.entry.reject { |entry| entry.resource&.resourceType == 'ClaimResponse' }.map(&:fullUrl).compact
110
- else
111
- []
112
- end
113
155
  mock_notification_status = build_mock_notification_status(notification_timestamp, subscription_reference,
114
- subscription_topic, claim_response_full_url,
115
- additional_context_references)
156
+ subscription_topic, focus_reference, [])
116
157
  mock_notification_bundle.entry << build_mock_notification_status_entry(mock_notification_status,
117
158
  subscription_reference)
118
- if type == 'full-resource' && submit_bundle.present? && submit_bundle.is_a?(FHIR::Bundle)
119
- fhir_base_url = extract_fhir_base_url(subscription_reference)
120
- submit_bundle.entry.each do |entry|
121
- update_claim_response_decisions(entry.resource, decision) if entry.resource.resourceType == 'ClaimResponse'
122
- entry.request = FHIR::Bundle::Entry::Request.new(
123
- method: 'POST',
124
- url: "#{fhir_base_url}/#{entry.resource.resourceType}"
125
- )
126
- entry.response = FHIR::Bundle::Entry::Response.new(
127
- status: '201'
128
- )
129
- mock_notification_bundle.entry << entry
130
- end
131
- end
159
+
160
+ add_notification_entries(mock_notification_bundle, submit_response_bundle, type, decision,
161
+ subscription_reference, inner_bundle_full_url)
132
162
 
133
163
  mock_notification_bundle
134
164
  end
135
165
 
166
+ def determine_notification_focus(type, submit_response_bundle)
167
+ if type == 'full-resource' && submit_response_bundle.is_a?(FHIR::Bundle)
168
+ bundle_full_url = "urn:uuid:#{submit_response_bundle.id}"
169
+ [bundle_full_url, bundle_full_url]
170
+ else
171
+ [claim_response_full_url_from_submit_response_bundle(submit_response_bundle), nil]
172
+ end
173
+ end
174
+
175
+ def add_notification_entries(mock_notification_bundle, submit_response_bundle, type, decision,
176
+ subscription_reference, inner_bundle_full_url)
177
+ return unless type == 'full-resource' && submit_response_bundle.is_a?(FHIR::Bundle)
178
+
179
+ claim_response_entry = submit_response_bundle.entry.find { |e| e.resource&.resourceType == 'ClaimResponse' }
180
+ if claim_response_entry.present?
181
+ update_claim_response_decisions(claim_response_entry.resource, decision)
182
+ claim_response_entry.resource.outcome = 'complete'
183
+ end
184
+
185
+ fhir_base_url = extract_fhir_base_url(subscription_reference)
186
+ mock_notification_bundle.entry << FHIR::Bundle::Entry.new(
187
+ fullUrl: inner_bundle_full_url,
188
+ resource: submit_response_bundle,
189
+ request: FHIR::Bundle::Entry::Request.new(method: 'POST', url: "#{fhir_base_url}/Bundle"),
190
+ response: FHIR::Bundle::Entry::Response.new(status: '201')
191
+ )
192
+ end
193
+
136
194
  def update_claim_response_decisions(claim_response, decision)
137
195
  claim_response&.item&.each do |item|
138
196
  item.adjudication.each do |adjudication|
@@ -153,15 +211,17 @@ module DaVinciPASTestKit
153
211
  end
154
212
  end
155
213
 
156
- def build_mock_response_bundle(request_bundle, operation, decision, timestamp, claim_response_uuid = nil)
214
+ def build_mock_response_bundle(request_bundle, operation, decision, timestamp, claim_response_uuid = nil,
215
+ ig_version = 'v2.0.1')
157
216
  claim_entry = request_bundle&.entry&.find { |e| e&.resource&.resourceType == 'Claim' }
158
217
  claim_full_url = claim_entry&.fullUrl
159
218
  return nil if claim_entry.blank? || claim_full_url.blank?
160
219
 
161
220
  root_url = extract_fhir_base_url(claim_full_url)
162
221
  mocked_claim_response = build_mock_claim_response(claim_entry.resource, request_bundle, root_url, operation,
163
- decision, timestamp, claim_response_uuid)
164
- build_mock_bundle(mocked_claim_response, request_bundle, root_url, operation, timestamp)
222
+ decision, timestamp, ig_version, claim_response_uuid,
223
+ claim_full_url)
224
+ build_mock_bundle(mocked_claim_response, request_bundle, root_url, operation, timestamp, ig_version)
165
225
  end
166
226
 
167
227
  # Note that references from the claim to other resources in the bundle need to be changed to absolute URLs
@@ -169,16 +229,16 @@ module DaVinciPASTestKit
169
229
  #
170
230
  # @private
171
231
  def build_mock_claim_response(claim, request_bundle, root_url, operation, decision, timestamp,
172
- claim_response_uuid = nil)
232
+ ig_version = 'v2.0.1', claim_response_uuid = nil, claim_full_url = nil)
173
233
  claim_response_uuid = SecureRandom.uuid if claim_response_uuid.blank?
174
234
  return FHIR::ClaimResponse.new(id: claim_response_uuid) if claim.blank?
175
235
 
176
- FHIR::ClaimResponse.new(
236
+ claim_response = FHIR::ClaimResponse.new(
177
237
  id: claim_response_uuid,
178
238
  meta: FHIR::Meta.new(profile: if operation == 'submit'
179
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse'
239
+ "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse|#{ig_version.delete('v')}"
180
240
  else
181
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse'
241
+ "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse|#{ig_version.delete('v')}"
182
242
  end),
183
243
  identifier: claim.identifier,
184
244
  type: claim.type,
@@ -188,7 +248,14 @@ module DaVinciPASTestKit
188
248
  created: timestamp.iso8601,
189
249
  insurer: absolute_reference(claim.insurer, request_bundle.entry, root_url),
190
250
  requestor: absolute_reference(claim.provider, request_bundle.entry, root_url),
191
- outcome: 'complete',
251
+ request: claim_full_url.present? ? FHIR::Reference.new(reference: claim_full_url) : nil,
252
+ # v2.2.1 removed 'queued' from ClaimResponseOutcome ValueSet; pended status is
253
+ # conveyed via item.extension:reviewActionCode instead.
254
+ outcome: decision == :pended && ig_version != 'v2.2.1' ? 'queued' : 'complete',
255
+ preAuthPeriod: FHIR::Period.new(
256
+ start: timestamp.strftime('%Y-%m-%d'),
257
+ end: (timestamp + 1.month).strftime('%Y-%m-%d')
258
+ ),
192
259
  item: claim.item.map do |item|
193
260
  FHIR::ClaimResponse::Item.new(
194
261
  extension: [
@@ -230,16 +297,61 @@ module DaVinciPASTestKit
230
297
  )
231
298
  end
232
299
  )
300
+
301
+ add_modified_items(claim_response, claim) if decision == :modification
302
+
303
+ claim_response
304
+ end
305
+
306
+ # Pairs each modified item (already marked A6 above) with a ClaimResponse.addItem, referenced by
307
+ # the same itemSequence, conveying what the payer authorized (marked A1, 'Certified in total').
308
+ def add_modified_items(claim_response, claim)
309
+ claim_response.addItem = claim.item.map do |item|
310
+ FHIR::ClaimResponse::AddItem.new(
311
+ itemSequence: [item.sequence],
312
+ productOrService: item.productOrService,
313
+ adjudication: [
314
+ FHIR::ClaimResponse::Item::Adjudication.new(
315
+ extension: [
316
+ FHIR::Extension.new(
317
+ url: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewAction',
318
+ extension: [
319
+ FHIR::Extension.new(
320
+ url: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewActionCode',
321
+ valueCodeableConcept: FHIR::CodeableConcept.new(
322
+ coding: [
323
+ get_review_action_code(:approval)
324
+ ]
325
+ )
326
+ )
327
+ ]
328
+ )
329
+ ],
330
+ category: FHIR::CodeableConcept.new(
331
+ coding: [
332
+ FHIR::Coding.new(system: 'http://terminology.hl7.org/CodeSystem/adjudication', code: 'submitted')
333
+ ]
334
+ )
335
+ )
336
+ ]
337
+ )
338
+ end
233
339
  end
234
340
 
235
- def build_mock_bundle(claim_response, request_bundle, root_url, operation, timestamp)
341
+ def build_mock_bundle(claim_response, request_bundle, root_url, operation, timestamp, ig_version = 'v2.0.1')
236
342
  response_bundle = FHIR::Bundle.new(
237
343
  id: SecureRandom.uuid,
238
344
  meta: FHIR::Meta.new(profile: if operation == 'submit'
239
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle'
345
+ "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle|#{ig_version.delete('v')}"
240
346
  else
241
- 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle'
347
+ "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle|#{ig_version.delete('v')}"
242
348
  end),
349
+ identifier: if ig_version == 'v2.2.1'
350
+ FHIR::Identifier.new(
351
+ system: 'urn:ietf:rfc:3986',
352
+ value: "urn:uuid:#{SecureRandom.uuid}"
353
+ )
354
+ end,
243
355
  timestamp: timestamp.iso8601,
244
356
  type: 'collection',
245
357
  entry: [
@@ -248,6 +360,7 @@ module DaVinciPASTestKit
248
360
  ]
249
361
  )
250
362
  response_bundle.entry.concat(referenced_entities(claim_response, request_bundle.entry, root_url))
363
+
251
364
  response_bundle
252
365
  end
253
366
 
@@ -327,6 +440,9 @@ module DaVinciPASTestKit
327
440
  when :pended
328
441
  code = 'A4'
329
442
  display = 'Pending'
443
+ when :modification
444
+ code = 'A6'
445
+ display = 'Modified'
330
446
  else # approval or no workflow
331
447
  code = 'A1'
332
448
  display = 'Certified in total'
@@ -344,19 +460,23 @@ module DaVinciPASTestKit
344
460
  ref
345
461
  end
346
462
 
347
- def referenced_entities(resource, entries, root_url)
348
- matches = []
463
+ def referenced_entities(resource, entries, root_url, matches = [])
349
464
  attributes = resource&.source_hash&.keys
350
- attributes.each do |attr|
465
+ attributes&.each do |attr|
466
+ if attr.to_s == 'request' && resource.respond_to?(:resourceType) && resource.resourceType == 'ClaimResponse'
467
+ next
468
+ end
469
+
351
470
  value = resource.send(attr.to_sym)
352
471
  if value.is_a?(FHIR::Reference) && value.reference.present?
353
472
  match = find_matching_entry(value.reference, entries, root_url)
354
- if match.present? && matches.none?(match)
473
+ if match.present? && matches.none? { |m| m.fullUrl == match.fullUrl }
355
474
  value.reference = match.fullUrl
356
- matches.concat([match], referenced_entities(match.resource, entries, root_url))
475
+ matches << match
476
+ referenced_entities(match.resource, entries, root_url, matches)
357
477
  end
358
- elsif value.is_a?(Array) && value.all? { |elmt| elmt.is_a?(FHIR::Model) }
359
- value.each { |val| matches.concat(referenced_entities(val, entries, root_url)) }
478
+ elsif value.is_a?(Array) && value.all?(FHIR::Model)
479
+ value.each { |val| referenced_entities(val, entries, root_url, matches) }
360
480
  end
361
481
  end
362
482
 
@@ -382,8 +502,10 @@ module DaVinciPASTestKit
382
502
  url.sub(%r{/[^/]*/[^/]*(/)?\z}, '')
383
503
  end
384
504
 
385
- def claim_response_full_url_from_submit_response_bundle(submit_bundle)
386
- claim_response_entry = submit_bundle&.entry&.find { |e| e&.resource&.resourceType == 'ClaimResponse' }
505
+ def claim_response_full_url_from_submit_response_bundle(submit_response_bundle)
506
+ submit_response_bundle = submit_response_bundle.parameter[0] if submit_response_bundle.is_a?(FHIR::Parameters)
507
+
508
+ claim_response_entry = submit_response_bundle&.entry&.find { |e| e&.resource&.resourceType == 'ClaimResponse' }
387
509
 
388
510
  if claim_response_entry.present?
389
511
  return claim_response_entry.fullUrl unless claim_response_entry.fullUrl.blank?
@@ -393,5 +515,19 @@ module DaVinciPASTestKit
393
515
  end
394
516
  "urn:uuid:#{SecureRandom.uuid}"
395
517
  end
518
+
519
+ # Wraps a Bundle in a Parameters resource for v2.2.1 inquire responses
520
+ # @param bundle [FHIR::Bundle] The Bundle to wrap
521
+ # @return [FHIR::Parameters] Parameters resource with the bundle as a return parameter
522
+ def wrap_bundle_in_parameters(bundle)
523
+ return nil unless bundle.is_a?(FHIR::Bundle)
524
+
525
+ parameters = FHIR::Parameters.new
526
+ parameters.parameter << FHIR::Parameters::Parameter.new(
527
+ name: 'return',
528
+ resource: bundle
529
+ )
530
+ parameters
531
+ end
396
532
  end
397
533
  end
@@ -1,5 +1,4 @@
1
1
  require 'udap_security_test_kit'
2
- require_relative 'urls'
3
2
 
4
3
  module DaVinciPASTestKit
5
4
  module SessionIdentification
@@ -12,7 +11,7 @@ module DaVinciPASTestKit
12
11
  test_session_id
13
12
  end
14
13
 
15
- def session_endpont_url(endpoint, client_id, session_url_path)
14
+ def session_endpoint_url(endpoint, client_id, session_url_path)
16
15
  path =
17
16
  if client_id.present?
18
17
  ''
@@ -0,0 +1,64 @@
1
+ module DaVinciPASTestKit
2
+ module UserInputResponse
3
+ def self.included(klass)
4
+ klass.extend ClassMethods
5
+ end
6
+
7
+ # Reads an arbitrary input value by name from result.input_json.
8
+ def self.read_input(result, input_name)
9
+ JSON.parse(result.input_json)&.find { |i| i['name'] == input_name.to_s }&.dig('value')
10
+ rescue JSON::ParserError
11
+ nil
12
+ end
13
+
14
+ def self.user_inputted_response(configurable, operation, result)
15
+ config_key = operation == 'submit' ? :submit_respond_with : :inquire_respond_with
16
+ input_key = configurable.config.options[config_key]
17
+ return unless input_key.present?
18
+
19
+ read_input(result, input_key)
20
+ end
21
+
22
+ # Returns the tester-provided response candidates for the must support workflow
23
+ # as a list of parsed JSON hashes. The input value may be a single entry or a
24
+ # JSON array of entries, where each entry is either a bare FHIR Bundle or a
25
+ # wrapper object holding the response Bundle under "bundle" alongside optional
26
+ # selection "criteria".
27
+ # Returns nil if the input is not present, not parseable, or malformed.
28
+ def self.response_candidates(result, operation)
29
+ input_name = operation == 'submit' ? 'ms_submit_responses' : 'ms_inquire_responses'
30
+ input_value = JSON.parse(result.input_json)&.find { |i| i['name'] == input_name }&.dig('value')
31
+ return unless input_value.present?
32
+
33
+ candidates = JSON.parse(input_value)
34
+ candidates = [candidates] unless candidates.is_a?(Array)
35
+ candidates if candidates.all? { |candidate| valid_candidate?(candidate) }
36
+ rescue JSON::ParserError
37
+ nil
38
+ end
39
+
40
+ def self.valid_candidate?(candidate)
41
+ return false unless candidate.is_a?(Hash)
42
+
43
+ candidate['resourceType'] == 'Bundle' || candidate['bundle'].is_a?(Hash)
44
+ end
45
+
46
+ def user_inputted_response?(input_key)
47
+ input_key.present? && send(input_key).present?
48
+ end
49
+
50
+ def input_title(input_key)
51
+ config.inputs[input_key]&.title || config.inputs[input_key]&.name
52
+ end
53
+
54
+ module ClassMethods
55
+ def submit_respond_with(key)
56
+ config options: { submit_respond_with: key }
57
+ end
58
+
59
+ def inquire_respond_with(key)
60
+ config options: { inquire_respond_with: key }
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,21 +1,20 @@
1
1
  require 'subscriptions_test_kit'
2
2
  require 'udap_security_test_kit'
3
3
  require 'smart_app_launch_test_kit'
4
- require_relative 'validator_suppressions'
5
- require_relative 'tags'
6
- require_relative 'urls'
7
- require_relative 'endpoints/claim_endpoint'
8
- require_relative 'endpoints/token_endpoint'
9
- require_relative 'endpoints/subscription_create_endpoint'
10
- require_relative 'endpoints/subscription_status_endpoint'
11
- require_relative 'custom_groups/v2.0.1/pas_client_options'
12
- require_relative 'custom_groups/v2.0.1/pas_client_workflows_group'
13
- require_relative 'custom_groups/v2.0.1/pas_client_must_support_group'
14
- require_relative 'custom_groups/v2.0.1/pas_client_subscription_setup_group'
15
- require_relative 'custom_groups/v2.0.1/pas_client_registration_group'
16
- require_relative 'custom_groups/v2.0.1/pas_client_auth_smart_group'
17
- require_relative 'custom_groups/v2.0.1/pas_client_auth_udap_group'
18
- require_relative 'descriptions'
4
+ require_relative '../../cross_suite/validator_suppressions'
5
+ require_relative '../../cross_suite/tags'
6
+ require_relative '../endpoints/claim_endpoint'
7
+ require_relative '../endpoints/token_endpoint'
8
+ require_relative '../endpoints/subscription_create_endpoint'
9
+ require_relative '../endpoints/subscription_status_endpoint'
10
+ require_relative '../pas_client_options'
11
+ require_relative 'pas_client_workflows_group'
12
+ require_relative 'pas_client_must_support_group'
13
+ require_relative 'pas_client_subscription_setup_group'
14
+ require_relative 'pas_client_registration_group'
15
+ require_relative 'pas_client_auth_smart_group'
16
+ require_relative 'pas_client_auth_udap_group'
17
+ require_relative '../client_input_descriptions'
19
18
 
20
19
  module DaVinciPASTestKit
21
20
  module DaVinciPASV201
@@ -34,7 +33,7 @@ module DaVinciPASTestKit
34
33
  requirements and may change the test validation logic.
35
34
 
36
35
  The best place to get started is the [Client Testing
37
- Walkthrough](https://github.com/inferno-framework/davinci-pas-test-kit/wiki/Client-Walkthrough),
36
+ Walkthrough](https://github.com/inferno-framework/davinci-pas-test-kit/wiki/Client-Instructions-v2.0.1),
38
37
  which provides a step-by-step guide for running the tests against a client and provides
39
38
  an example client implemented in Postman. Visit the [Client Testing
40
39
  Details](https://github.com/inferno-framework/davinci-pas-test-kit/wiki/Client-Details)
@@ -101,6 +100,10 @@ module DaVinciPASTestKit
101
100
  # We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
102
101
  SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, ''))
103
102
  end
103
+
104
+ validation_context do
105
+ snomedCT '731000124108'
106
+ end
104
107
  end
105
108
 
106
109
  suite_option :client_type,
@@ -145,6 +148,14 @@ module DaVinciPASTestKit
145
148
  suite_endpoint :get, SESSION_FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
146
149
  suite_endpoint :post, FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SubscriptionStatusEndpoint
147
150
  suite_endpoint :post, SESSION_FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SubscriptionStatusEndpoint
151
+ allow_cors UDAPSecurityTestKit::UDAP_DISCOVERY_PATH, SMARTAppLaunch::SMART_DISCOVERY_PATH,
152
+ FHIR_METADATA_PATH, SESSION_FHIR_METADATA_PATH,
153
+ UDAPSecurityTestKit::REGISTRATION_PATH, UDAPSecurityTestKit::TOKEN_PATH,
154
+ SUBMIT_PATH, SESSION_SUBMIT_PATH, INQUIRE_PATH, SESSION_INQUIRE_PATH,
155
+ FHIR_SUBSCRIPTION_PATH, SESSION_FHIR_SUBSCRIPTION_PATH,
156
+ FHIR_SUBSCRIPTION_INSTANCE_PATH, SESSION_FHIR_SUBSCRIPTION_INSTANCE_PATH,
157
+ FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SESSION_FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH,
158
+ FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SESSION_FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH
148
159
 
149
160
  resume_test_route :get, RESUME_PASS_PATH do |request|
150
161
  request.query_parameters['token']
@@ -154,6 +165,12 @@ module DaVinciPASTestKit
154
165
  request.query_parameters['token']
155
166
  end
156
167
 
168
+ config(
169
+ options: {
170
+ ig_version: 'v2.0.1'
171
+ }
172
+ )
173
+
157
174
  group from: :pas_client_v201_registration
158
175
 
159
176
  # SMART test groups (with :session_url_path input removed)
@@ -0,0 +1,12 @@
1
+ require_relative '../../abstract_gather_must_support_test'
2
+ require_relative '../urls'
3
+
4
+ module DaVinciPASTestKit
5
+ module DaVinciPASV201
6
+ class PASClientGatherMustSupportTest < AbstractGatherMustSupportTest
7
+ include URLs
8
+
9
+ id :pas_client_v201_gather_must_support
10
+ end
11
+ end
12
+ end
@@ -1,14 +1,9 @@
1
- require_relative '../../../must_support_test'
2
- require_relative '../../../generator/group_metadata'
1
+ require_relative '../../../cross_suite/must_support/must_support_request_type_test'
3
2
 
4
3
  module DaVinciPASTestKit
5
4
  module DaVinciPASV201
6
- class PasClientMustSupportRequirementTest < Inferno::Test
7
- include DaVinciPASTestKit::MustSupportTest
8
-
9
- attr_accessor :resource_type
10
-
11
- id :pas_client_submit_v201_must_support_requirement
5
+ class PasClientMustSupportRequestProfilesTest < DaVinciPASTestKit::MustSupportRequestTypeTest
6
+ id :pas_client_v201_must_support_request_profiles
12
7
  title %(
13
8
  At least one instance of a request profile (PAS Medication Request, PAS Service Request,
14
9
  PAS Device Request, or PAS Nutrition Order) is observed with all of its must support elements
@@ -74,44 +69,15 @@ module DaVinciPASTestKit
74
69
  * NutritionOrder.patient
75
70
  )
76
71
 
77
- def resource_types
78
- ['DeviceRequest', 'MedicationRequest', 'NutritionOrder', 'ServiceRequest']
79
- end
80
-
81
- def self.metadata
82
- metadata_file_name = "#{@@resource_type.underscore}_metadata.yml"
83
- Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, metadata_file_name),
84
- aliases: true))
85
- end
86
-
87
- def scratch_resources
88
- scratch[:submit_request_resources] ||= {}
89
- end
90
-
91
- def all_scratch_resources
92
- scratch_resources[:all] ||= []
93
- end
94
-
95
- def resources_of_interest
96
- collection = tagged_resources(SUBMIT_TAG).presence || all_scratch_resources
97
- collection.select { |resource| resource_types.include?(resource.resourceType) }
98
- end
99
-
100
- def grouped_resources
101
- resources_of_interest.group_by(&:resourceType)
102
- end
103
-
104
- run do
105
- msg = 'Request Bundle must include at least one instance of either DeviceRequest, MedicationRequest,
106
- NutritionOrder, or ServiceRequest resource'
107
- assert resources_of_interest.present?, msg
108
-
109
- grouped_resources.each do |type, resources|
110
- @@resource_type = @resource_type = type # rubocop:disable Style/ClassVars
111
- perform_must_support_test(resources)
112
- end
113
- validate_must_support(false)
114
- end
72
+ config(
73
+ options: {
74
+ profile_keys: ['device_request', 'medication_request', 'nutrition_order', 'service_request'],
75
+ user_input_validation: false,
76
+ ig_version: 'v2.0.1',
77
+ type: 'request',
78
+ operation: 'submit'
79
+ }
80
+ )
115
81
  end
116
82
  end
117
83
  end
@@ -1,8 +1,8 @@
1
- require_relative 'client_tests/pas_client_approval_submit_test'
2
- require_relative 'client_tests/pas_client_response_attest'
3
- require_relative 'client_tests/pas_client_request_bundle_validation_test'
4
- require_relative 'client_tests/pas_client_response_bundle_validation_test'
5
- require_relative '../../tags'
1
+ require_relative 'workflows/pas_client_approval_submit_test'
2
+ require_relative 'workflows/pas_client_response_attest'
3
+ require_relative 'workflows/pas_client_request_bundle_validation_test'
4
+ require_relative 'workflows/pas_client_response_bundle_validation_test'
5
+ require_relative '../../cross_suite/tags'
6
6
 
7
7
  module DaVinciPASTestKit
8
8
  module DaVinciPASV201
@@ -1,6 +1,5 @@
1
1
  require 'smart_app_launch_test_kit'
2
- require_relative 'pas_client_options'
3
- require_relative '../../tags'
2
+ require_relative '../../cross_suite/tags'
4
3
 
5
4
  module DaVinciPASTestKit
6
5
  module DaVinciPASV201