davinci_pas_test_kit 0.14.1 → 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} +14 -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} +14 -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} +197 -61
  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} +29 -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 +6 -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 +12 -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 +16 -13
  169. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_inquiry/metadata.yml +4 -21
  170. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_update/metadata.yml +4 -22
  171. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claiminquiryresponse/metadata.yml +4 -10
  172. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claimresponse/metadata.yml +4 -13
  173. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/communication_request/metadata.yml +4 -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 +0 -6
  176. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/encounter/metadata.yml +4 -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 +0 -6
  179. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/metadata.yml +1 -133
  180. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/nutrition_order/metadata.yml +0 -6
  181. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_request_bundle/metadata.yml +4 -7
  182. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_response_bundle/metadata.yml +4 -5
  183. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_request_bundle/metadata.yml +4 -7
  184. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_response_bundle/metadata.yml +4 -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 +0 -6
  189. data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/subscriber/metadata.yml +8 -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 +154 -203
  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} +380 -53
  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} +15 -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 -21
  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} +14 -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} +14 -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 +10 -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 +4 -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 +364 -186
  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 -51
  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,32 +1,95 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../parameters_helper'
3
4
  require_relative 'validation_test'
5
+ require_relative 'pas_constants'
4
6
 
5
7
  module DaVinciPASTestKit
6
8
  module PasBundleValidation
7
9
  include DaVinciPASTestKit::ValidationTest
10
+ include ParametersHelper
11
+
12
+ US_CORE_VERSION = '6.1.0'
13
+ US_CORE_PROFILE_BASE = 'http://hl7.org/fhir/us/core/StructureDefinition'
14
+ BASE_R4_PROFILE = :base_r4
15
+ CLAIM_ENCOUNTER_EXTENSION_URL = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Claim.encounter'
16
+ LOINC_SYSTEM = 'http://loinc.org'
17
+ TERMINOLOGY_CONDITION_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/condition-category'
18
+ OBSERVATION_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/observation-category'
19
+ DIAGNOSTIC_REPORT_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/v2-0074'
20
+
21
+ US_CORE_SINGLE_PROFILE_IDS_BY_RESOURCE = {
22
+ 'AllergyIntolerance' => 'us-core-allergyintolerance',
23
+ 'CarePlan' => 'us-core-careplan',
24
+ 'CareTeam' => 'us-core-careteam',
25
+ 'Coverage' => 'us-core-coverage',
26
+ 'Device' => 'us-core-implantable-device',
27
+ 'DocumentReference' => 'us-core-documentreference',
28
+ 'Encounter' => 'us-core-encounter',
29
+ 'Goal' => 'us-core-goal',
30
+ 'Immunization' => 'us-core-immunization',
31
+ 'Location' => 'us-core-location',
32
+ 'Medication' => 'us-core-medication',
33
+ 'MedicationDispense' => 'us-core-medicationdispense',
34
+ 'MedicationRequest' => 'us-core-medicationrequest',
35
+ 'Organization' => 'us-core-organization',
36
+ 'Patient' => 'us-core-patient',
37
+ 'Practitioner' => 'us-core-practitioner',
38
+ 'PractitionerRole' => 'us-core-practitionerrole',
39
+ 'Procedure' => 'us-core-procedure',
40
+ 'Provenance' => 'us-core-provenance',
41
+ 'QuestionnaireResponse' => 'us-core-questionnaireresponse',
42
+ 'RelatedPerson' => 'us-core-relatedperson',
43
+ 'ServiceRequest' => 'us-core-servicerequest',
44
+ 'Specimen' => 'us-core-specimen'
45
+ }.freeze
46
+
47
+ US_CORE_CONDITION_ENCOUNTER_DIAGNOSIS_PROFILE_ID = 'us-core-condition-encounter-diagnosis'
48
+ US_CORE_CONDITION_PROBLEMS_HEALTH_CONCERNS_PROFILE_ID = 'us-core-condition-problems-health-concerns'
49
+ US_CORE_DIAGNOSTIC_REPORT_LAB_PROFILE_ID = 'us-core-diagnosticreport-lab'
50
+ US_CORE_DIAGNOSTIC_REPORT_NOTE_PROFILE_ID = 'us-core-diagnosticreport-note'
51
+ US_CORE_OBSERVATION_CLINICAL_RESULT_PROFILE_ID = 'us-core-observation-clinical-result'
52
+ US_CORE_OBSERVATION_LAB_PROFILE_ID = 'us-core-observation-lab'
53
+ US_CORE_OBSERVATION_SCREENING_ASSESSMENT_PROFILE_ID = 'us-core-observation-screening-assessment'
54
+ US_CORE_SIMPLE_OBSERVATION_PROFILE_ID = 'us-core-simple-observation'
55
+ US_CORE_SMOKING_STATUS_PROFILE_ID = 'us-core-smokingstatus'
56
+ US_CORE_VITAL_SIGNS_PROFILE_ID = 'us-core-vital-signs'
57
+
58
+ US_CORE_OBSERVATION_CODE_PROFILE_IDS = {
59
+ '11341-5' => 'us-core-observation-occupation',
60
+ '86645-9' => 'us-core-observation-pregnancyintent',
61
+ '82810-3' => 'us-core-observation-pregnancystatus',
62
+ '76690-7' => 'us-core-observation-sexual-orientation',
63
+ '8289-1' => 'head-occipital-frontal-circumference-percentile',
64
+ '59576-9' => 'pediatric-bmi-for-age',
65
+ '77606-2' => 'pediatric-weight-for-height',
66
+ '85354-9' => 'us-core-blood-pressure',
67
+ '39156-5' => 'us-core-bmi',
68
+ '8302-2' => 'us-core-body-height',
69
+ '8310-5' => 'us-core-body-temperature',
70
+ '29463-7' => 'us-core-body-weight',
71
+ '9843-4' => 'us-core-head-circumference',
72
+ '8867-4' => 'us-core-heart-rate',
73
+ '59408-5' => 'us-core-pulse-oximetry',
74
+ '2708-6' => 'us-core-pulse-oximetry',
75
+ '9279-1' => 'us-core-respiratory-rate',
76
+ '72166-2' => 'us-core-smokingstatus'
77
+ }.freeze
8
78
 
9
- CLAIM_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-update'
10
- CLAIM_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse'
11
- CLAIM_INQUIRY_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry'
12
- CLAIM_INQUIRY_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse'
13
-
14
- def all_scratch_resources
15
- scratch_resources[:all] ||= []
79
+ def validation_error_messages
80
+ @validation_error_messages ||= []
16
81
  end
17
82
 
18
- def save_bundles_and_entries_to_scratch(bundles)
19
- bundles.each do |bundle|
20
- all_scratch_resources << bundle
21
- all_scratch_resources.concat(bundle.entry.map(&:resource))
22
- all_scratch_resources.uniq!
83
+ def perform_bundle_validation(bundle, operation, type, ig_version)
84
+ target_profile = PASConstants.bundle_profile_url_for_operation_and_type(operation, type)
85
+ request_type = "#{operation}_#{type}"
86
+ if type == 'request'
87
+ perform_request_validation(bundle, target_profile, ig_version.delete_prefix('v'), request_type)
88
+ else
89
+ perform_response_validation(bundle, target_profile, ig_version.delete_prefix('v'), request_type)
23
90
  end
24
91
  end
25
92
 
26
- def validation_error_messages
27
- @validation_error_messages ||= []
28
- end
29
-
30
93
  def perform_request_validation(bundle, profile_url, version, request_type)
31
94
  validate_pa_request_payload_structure(bundle, request_type)
32
95
  validate_resources_conformance_against_profile(bundle, profile_url, version, request_type)
@@ -39,20 +102,44 @@ module DaVinciPASTestKit
39
102
 
40
103
  def validate_pas_bundle_json(json, profile_url, version, request_type, bundle_type, skips: false, message: '')
41
104
  assert_valid_json(json)
42
- bundle = FHIR.from_contents(json)
43
- assert bundle.present?, 'Not a FHIR resource'
44
- assert_resource_type(:bundle, resource: bundle)
105
+ resource = FHIR.from_contents(json)
106
+ assert resource.present?, 'Not a FHIR resource'
45
107
 
46
- if bundle_type == 'request_bundle'
47
- perform_request_validation(bundle, profile_url, version, request_type)
108
+ # For v2.2.1 inquire responses, expect Parameters resource
109
+ if version == '2.2.1' && request_type == 'inquire' && bundle_type == 'response_bundle'
110
+ if resource.resourceType == 'Parameters'
111
+ # Extract and validate each Bundle in the Parameters
112
+ bundles = extract_bundles_from_pas_inquiry_response_parameters(resource)
113
+
114
+ bundles.each do |bundle|
115
+ perform_response_validation(bundle, profile_url, version, request_type)
116
+ end
117
+ elsif resource.is_a?(FHIR::Bundle)
118
+ # Bundle received instead of Parameters - validate it but log an error
119
+ validation_error_messages << 'Expected Parameters resource for v2.2.1 inquire response, but received ' \
120
+ 'Bundle. The response Bundle should be wrapped in a ' \
121
+ 'Parameters resource with a return parameter.'
122
+ perform_response_validation(resource, profile_url, version, request_type)
123
+ else
124
+ assert false,
125
+ "Expected Parameters resource for v2.2.1 inquire response, but received #{resource.resourceType}"
126
+ end
48
127
  else
49
- perform_response_validation(bundle, profile_url, version, request_type)
128
+ # For v2.0.1 or non-inquire operations, expect Bundle resource
129
+ assert_resource_type(:bundle, resource: resource)
130
+ bundle = resource
131
+
132
+ if bundle_type == 'request_bundle'
133
+ perform_request_validation(bundle, profile_url, version, request_type)
134
+ else
135
+ perform_response_validation(bundle, profile_url, version, request_type)
136
+ end
50
137
  end
51
138
 
52
139
  validation_error_messages.each do |msg|
53
140
  messages << { type: 'error', message: msg }
54
141
  end
55
- msg = 'Bundle response returned and/or entry resources are not conformant. Check messages for issues found.'
142
+ msg = 'Bundle and/or entry resources are not conformant. Check messages for issues found.'
56
143
  assert validation_error_messages.blank?, msg
57
144
  rescue Inferno::Exceptions::AssertionException => e
58
145
  msg = "#{message} #{e.message}".strip
@@ -127,7 +214,7 @@ module DaVinciPASTestKit
127
214
  # a given combination of content. Resources echoed back from the request are validated
128
215
  # to ensure the same fullUrl and resource identifiers as in the
129
216
  # request are used.
130
- def validate_pa_response_body_structure(pa_response_bundle, pa_request_bundle)
217
+ def validate_pa_response_body_structure(pa_response_bundle, _pa_request_bundle)
131
218
  first_entry = pa_response_bundle.entry.first.resource
132
219
  unless first_entry.is_a?(FHIR::ClaimResponse)
133
220
  validation_error_messages <<
@@ -166,6 +253,7 @@ module DaVinciPASTestKit
166
253
  # The request/response bundle and includes resources are validated against their
167
254
  # respective profile.
168
255
  def validate_resources_conformance_against_profile(bundle, profile_url, version, request_type)
256
+ reset_bundle_profile_inference_state
169
257
  add_resource_target_profile_to_map('bundle', bundle, profile_url)
170
258
 
171
259
  bundle_entry = bundle.entry
@@ -175,12 +263,18 @@ module DaVinciPASTestKit
175
263
  end
176
264
 
177
265
  if root_entry.present?
178
- root_resource_profile_url = find_profile_url(request_type)[root_entry.resource.resourceType]
266
+ root_resource_profile_url = if %w[submit submit_request].include?(request_type) &&
267
+ root_entry.resource.resourceType == 'Claim'
268
+ determine_claim_submit_profile_url(version, root_entry.resource)
269
+ else
270
+ find_profile_url(request_type)[root_entry.resource.resourceType]
271
+ end
179
272
 
180
273
  add_resource_target_profile_to_map(root_entry.fullUrl, root_entry.resource, root_resource_profile_url)
181
274
  extract_profiles_to_validate_each_entry(bundle_entry, root_entry, root_resource_profile_url, version)
182
275
  end
183
276
 
277
+ add_us_core_profiles_to_unprofiled_entries(bundle_entry, version)
184
278
  validate_bundle_entries_against_profiles(version)
185
279
  end
186
280
 
@@ -209,18 +303,176 @@ module DaVinciPASTestKit
209
303
  # and collects error messages for non-conformant entries. Asserts that there are no validation errors.
210
304
  # @param version [String] The version of the IG.
211
305
  def validate_bundle_entries_against_profiles(version)
212
- bundle_resources_target_profile_map.each_value do |item|
306
+ bundle_resources_target_profile_map.each do |key, item|
213
307
  resource = item[:resource]
214
308
  base_profile = FHIR::Definitions.resource_definition(resource.resourceType).url
309
+
215
310
  success_profile = item[:profile_urls].find do |url|
216
- profile_to_validate = url == base_profile ? url : "#{url}|#{version}"
217
- resource_is_valid?(resource:, profile_url: profile_to_validate)
311
+ if key == 'bundle'
312
+ profile_to_validate = profile_url_for_validation(url, base_profile, version)
313
+ bundle_profile_valid?(resource, profile_to_validate)
314
+ elsif url == BASE_R4_PROFILE
315
+ resource_is_valid?(resource:)
316
+ else
317
+ profile_to_validate = profile_url_for_validation(url, base_profile, version)
318
+ resource_is_valid?(resource:, profile_url: profile_to_validate)
319
+ end
218
320
  end
219
321
 
220
322
  validation_error_messages << generate_non_conformance_message(item) unless success_profile
221
323
  end
222
324
  end
223
325
 
326
+ def profile_url_for_validation(url, base_profile, version)
327
+ url = url.to_s
328
+ return url if url.include?('|') || profile_url_without_version(url) == base_profile
329
+ return "#{url}|#{US_CORE_VERSION}" if us_core_profile_url?(url)
330
+
331
+ "#{url}|#{version}"
332
+ end
333
+
334
+ def reset_bundle_profile_inference_state
335
+ bundle_resources_target_profile_map.clear
336
+ @bundle_entry_map = nil
337
+ end
338
+
339
+ def add_us_core_profiles_to_unprofiled_entries(bundle_entry, version)
340
+ return unless us_core_profile_fallback_enabled?(version)
341
+
342
+ bundle_entry.each do |entry|
343
+ resource = entry.resource
344
+ next if resource.blank?
345
+
346
+ resource_full_url = resource_full_url_for_entry(entry)
347
+ next if bundle_resources_target_profile_map[resource_full_url]&.dig(:profile_urls).present?
348
+
349
+ profile_urls = us_core_profile_urls_for_resource(resource)
350
+ profile_urls = [BASE_R4_PROFILE] if profile_urls.blank?
351
+
352
+ profile_urls.each do |profile_url|
353
+ add_resource_target_profile_to_map(resource_full_url, resource, profile_url)
354
+ end
355
+ end
356
+ end
357
+
358
+ def resource_full_url_for_entry(entry)
359
+ resource = entry.resource
360
+
361
+ entry.fullUrl.presence || "#{resource.resourceType}/#{resource.id}"
362
+ end
363
+
364
+ def us_core_profile_fallback_enabled?(version)
365
+ version.to_s.delete_prefix('v').match?(/\A2\.2(\.|\z)/)
366
+ end
367
+
368
+ def us_core_profile_urls_for_resource(resource)
369
+ profile_ids =
370
+ case resource.resourceType
371
+ when 'Condition'
372
+ us_core_condition_profile_ids(resource)
373
+ when 'DiagnosticReport'
374
+ us_core_diagnostic_report_profile_ids(resource)
375
+ when 'Observation'
376
+ us_core_observation_profile_ids(resource)
377
+ else
378
+ Array(US_CORE_SINGLE_PROFILE_IDS_BY_RESOURCE[resource.resourceType])
379
+ end
380
+
381
+ us_core_profile_urls(profile_ids)
382
+ end
383
+
384
+ def us_core_condition_profile_ids(resource)
385
+ if category_code_present?(resource, 'encounter-diagnosis', system: TERMINOLOGY_CONDITION_CATEGORY_SYSTEM)
386
+ [US_CORE_CONDITION_ENCOUNTER_DIAGNOSIS_PROFILE_ID]
387
+ else
388
+ [US_CORE_CONDITION_PROBLEMS_HEALTH_CONCERNS_PROFILE_ID]
389
+ end
390
+ end
391
+
392
+ def us_core_diagnostic_report_profile_ids(resource)
393
+ if category_code_present?(resource, 'LAB', system: DIAGNOSTIC_REPORT_CATEGORY_SYSTEM)
394
+ [US_CORE_DIAGNOSTIC_REPORT_LAB_PROFILE_ID]
395
+ else
396
+ [US_CORE_DIAGNOSTIC_REPORT_NOTE_PROFILE_ID]
397
+ end
398
+ end
399
+
400
+ def us_core_observation_profile_ids(resource)
401
+ code_profile_id = US_CORE_OBSERVATION_CODE_PROFILE_IDS.find do |code, _profile_id|
402
+ codeable_concept_has_code?(resource.code, code, system: LOINC_SYSTEM)
403
+ end&.last
404
+ return [code_profile_id] if code_profile_id.present?
405
+
406
+ profile_ids = []
407
+ profile_ids << US_CORE_SMOKING_STATUS_PROFILE_ID if category_code_present?(resource, 'social-history',
408
+ system: OBSERVATION_CATEGORY_SYSTEM)
409
+ profile_ids << US_CORE_VITAL_SIGNS_PROFILE_ID if category_code_present?(resource, 'vital-signs',
410
+ system: OBSERVATION_CATEGORY_SYSTEM)
411
+ if category_code_present?(resource, 'survey', system: OBSERVATION_CATEGORY_SYSTEM)
412
+ profile_ids << US_CORE_OBSERVATION_SCREENING_ASSESSMENT_PROFILE_ID
413
+ end
414
+ # Keep candidate profiles most-specific first because validation stops at the first conformant profile.
415
+ profile_ids << if category_code_present?(resource, 'laboratory', system: OBSERVATION_CATEGORY_SYSTEM)
416
+ US_CORE_OBSERVATION_LAB_PROFILE_ID
417
+ else
418
+ US_CORE_OBSERVATION_CLINICAL_RESULT_PROFILE_ID
419
+ end
420
+ profile_ids << US_CORE_SIMPLE_OBSERVATION_PROFILE_ID
421
+ profile_ids.uniq
422
+ end
423
+
424
+ def us_core_profile_urls(profile_ids)
425
+ Array(profile_ids).map { |profile_id| "#{US_CORE_PROFILE_BASE}/#{profile_id}|#{US_CORE_VERSION}" }
426
+ end
427
+
428
+ def profile_url_without_version(url)
429
+ url.to_s.split('|', 2).first
430
+ end
431
+
432
+ def us_core_profile_url?(url)
433
+ profile_url_without_version(url).start_with?("#{US_CORE_PROFILE_BASE}/")
434
+ end
435
+
436
+ def category_code_present?(resource, code, system:)
437
+ codeable_concept_has_code?(resource.category, code, system:)
438
+ end
439
+
440
+ def codeable_concept_has_code?(codeable_concepts, code, system:)
441
+ systems = Array(system).compact
442
+ Array(codeable_concepts).compact.any? do |codeable_concept|
443
+ Array(codeable_concept&.coding).compact.any? do |coding|
444
+ coding.code == code && systems.include?(coding.system)
445
+ end
446
+ end
447
+ end
448
+
449
+ # Validates a Bundle resource against a profile, filtering out entry-resource-level issues
450
+ # that are covered by individual resource validation to avoid duplicate messages.
451
+ # @param bundle [FHIR::Bundle] The Bundle resource to validate.
452
+ # @param profile_url [String] The profile URL (with version) to validate against.
453
+ # @return [Boolean] true if no unfiltered errors remain after removing entry-resource issues.
454
+ def bundle_profile_valid?(bundle, profile_url)
455
+ response_details = []
456
+ resource_is_valid?(resource: bundle, profile_url:,
457
+ add_messages_to_runnable: false,
458
+ validator_response_details: response_details)
459
+ bundle_level_issues = reject_entry_resource_issues(response_details)
460
+ bundle_level_issues.each { |issue| messages << { type: issue.severity, message: issue.message } }
461
+ bundle_level_issues.none? { |issue| issue.severity == 'error' }
462
+ end
463
+
464
+ # Rejects validator issues that are already filtered or are located at/below
465
+ # Bundle.entry[N].resource, since those are validated individually per resource.
466
+ # @param issues [Array<ValidatorIssue>] Raw issues from the validator.
467
+ # @return [Array<ValidatorIssue>] Issues relevant only to the Bundle structure itself.
468
+ #
469
+ # Entry resources that receive direct PAS or US Core target profiles are validated individually after this filter.
470
+ def reject_entry_resource_issues(issues)
471
+ issues.reject do |issue|
472
+ issue.filtered || issue.location&.match?(/\ABundle\.entry\[\d+\]\.resource/)
473
+ end
474
+ end
475
+
224
476
  def generate_non_conformance_message(item)
225
477
  "#{item[:resource].resourceType}/#{item[:resource].id} is not conformant to any of the " \
226
478
  "target profiles: #{item[:profile_urls]}."
@@ -236,14 +488,18 @@ module DaVinciPASTestKit
236
488
  return if current_entry.blank?
237
489
 
238
490
  # NOTE: the IG does not have the metadata for us-core profiles.
239
- metadata = metadata_map("v#{version}")[current_entry_profile_url]
491
+ metadata = metadata_map("v#{version}")[profile_url_without_version(current_entry_profile_url)]
240
492
  return if metadata.blank?
241
493
 
242
494
  bundle_map = bundle_entry_map(bundle_entry)
243
- reference_elements = metadata.references
495
+ reference_elements = metadata.references.dup
244
496
 
245
497
  # Special handling for Claim submit profile
246
- if current_entry_profile_url == CLAIM_PROFILE
498
+ claim_submit_profile_urls = [
499
+ PASConstants::CLAIM_PROFILE,
500
+ PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
501
+ ]
502
+ if claim_submit_profile_urls.include?(current_entry_profile_url)
247
503
  handle_claim_profile(reference_elements,
248
504
  current_entry_profile_url)
249
505
  end
@@ -259,7 +515,11 @@ module DaVinciPASTestKit
259
515
  # @param reference_elements [Array] The array of reference elements to be updated.
260
516
  # @param current_entry_profile_url [String] The profile URL of the current entry being processed.
261
517
  def handle_claim_profile(reference_elements, current_entry_profile_url)
262
- return unless current_entry_profile_url == CLAIM_PROFILE
518
+ claim_submit_profile_urls = [
519
+ PASConstants::CLAIM_PROFILE,
520
+ PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
521
+ ]
522
+ return unless claim_submit_profile_urls.include?(current_entry_profile_url)
263
523
 
264
524
  claim_ref_element = {
265
525
  path: 'Claim.item.extension.value',
@@ -271,7 +531,16 @@ module DaVinciPASTestKit
271
531
  ]
272
532
  }
273
533
 
534
+ # This temporary traversal handling may be replaced later by shared metadata-driven navigation logic.
535
+ claim_encounter_ref_element = {
536
+ path: "Claim.extension.where(url = '#{CLAIM_ENCOUNTER_EXTENSION_URL}').value",
537
+ profiles: [
538
+ 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-encounter'
539
+ ]
540
+ }
541
+
274
542
  reference_elements << claim_ref_element
543
+ reference_elements << claim_encounter_ref_element
275
544
  end
276
545
 
277
546
  # Processes a given reference element definition from a FHIR bundle entry.
@@ -311,7 +580,7 @@ module DaVinciPASTestKit
311
580
 
312
581
  reference_element[:profiles].each do |profile_url|
313
582
  # NOTE: the IG does not have the metadata for us-core profiles.
314
- target_metadata = metadata_map("v#{version}")[profile_url]
583
+ target_metadata = metadata_map("v#{version}")[profile_url_without_version(profile_url)]
315
584
  resource_type = instance.resource.resourceType
316
585
  next unless target_metadata&.resource == resource_type || profile_url.include?(resource_type)
317
586
 
@@ -356,10 +625,12 @@ module DaVinciPASTestKit
356
625
 
357
626
  # Mapping profile url to metadata
358
627
  def metadata_map(version)
359
- @metadata ||= YAML.load_file(File.join(__dir__, "generated/#{version}/metadata.yml"),
360
- aliases: true)
361
- @metadata_map ||= @metadata[:groups].to_h do |group|
362
- [group[:profile_url], Generator::GroupMetadata.new(group)]
628
+ @metadata ||= {}
629
+ @metadata[version] ||= YAML.load_file(File.join(__dir__, "generated/#{version}/metadata.yml"),
630
+ aliases: true)
631
+ @metadata_map ||= {}
632
+ @metadata_map[version] ||= @metadata[version][:profiles].to_h do |profile_metadata|
633
+ [profile_metadata[:profile_url], Generator::ProfileMetadata.new(profile_metadata)]
363
634
  end
364
635
  end
365
636
 
@@ -407,11 +678,39 @@ module DaVinciPASTestKit
407
678
  # Resource Types to validate in request/ response bundle
408
679
  def find_profile_url(request_type)
409
680
  {
410
- 'Claim' => request_type == 'submit' ? CLAIM_PROFILE : CLAIM_INQUIRY_PROFILE,
411
- 'ClaimResponse' => request_type == 'submit' ? CLAIM_RESPONSE_PROFILE : CLAIM_INQUIRY_RESPONSE_PROFILE
681
+ 'Claim' => if request_type.start_with?('submit')
682
+ PASConstants::CLAIM_PROFILE
683
+ else
684
+ PASConstants::CLAIM_INQUIRY_PROFILE
685
+ end,
686
+ 'ClaimResponse' => if %w[submit submit_response].include?(request_type)
687
+ PASConstants::CLAIM_RESPONSE_PROFILE
688
+ else
689
+ PASConstants::CLAIM_INQUIRY_RESPONSE_PROFILE
690
+ end
412
691
  }
413
692
  end
414
693
 
694
+ # Determines the target profile URL for a Claim resource in a submit request bundle.
695
+ #
696
+ # In v2.2.1, profile-pas-request-bundle permits either profile-claim or profile-claim-update.
697
+ # The structural discriminator is Claim.related: profile-claim-update requires it (must-support)
698
+ # while profile-claim disallows it (max: 0). For all other versions, profile-claim-update is
699
+ # used unconditionally.
700
+ #
701
+ # @param version [String] The IG version (e.g. '2.2.1').
702
+ # @param claim [FHIR::Claim] The Claim resource to inspect.
703
+ # @return [String] The profile URL to validate against.
704
+ def determine_claim_submit_profile_url(version, claim)
705
+ return PASConstants::CLAIM_PROFILE unless version == '2.2.1'
706
+
707
+ if claim.related.blank?
708
+ PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
709
+ else
710
+ PASConstants::CLAIM_PROFILE
711
+ end
712
+ end
713
+
415
714
  # Checks the following requirement:
416
715
  # The Claim.supportingInfo.sequence for each entry SHALL be unique within the Claim.
417
716
  #
@@ -456,13 +755,17 @@ module DaVinciPASTestKit
456
755
  # @param target_resource [FHIR::Model] The FHIR resource to traverse and validate.
457
756
  # @param base_url [String] The server base url.
458
757
  # @param resources_to_match [Array<FHIR:Bundle:Entry] The list of FHIR bundle entries to match references against.
459
- def check_presence_of_referenced_resources(target_resource, base_url, resources_to_match)
758
+ # @param skip_claim_related [Boolean] When true, a Claim's `related` element is not traversed. This is set
759
+ # for any Claim reached by following a reference (i.e. a non-primary Claim in a Claim Update chain), whose
760
+ # own Claim.related.claim (the grandparent) is deliberately omitted from the Bundle per spec-65/66. The
761
+ # primary Claim passed in by the caller keeps `skip_claim_related: false`, so its parent reference - and the
762
+ # parent's own referenced resources - are still checked.
763
+ def check_presence_of_referenced_resources(target_resource, base_url, resources_to_match,
764
+ skip_claim_related: false)
460
765
  return if target_resource.blank?
461
766
 
462
767
  if target_resource.is_a?(FHIR::Reference) && target_resource.reference.present?
463
768
  ref = target_resource.reference
464
- return if ref.blank?
465
-
466
769
  absolute_ref = absolute_url(ref, base_url)
467
770
  matching_resources = resources_to_match.find_all { |res| res.fullUrl == absolute_ref }
468
771
 
@@ -472,20 +775,49 @@ module DaVinciPASTestKit
472
775
  end
473
776
 
474
777
  if matching_resources.length.positive?
475
- check_presence_of_referenced_resources(matching_resources.first, base_url, resources_to_match)
778
+ # A resource reached by following a reference is an included resource, not the primary Claim
779
+ # being validated; if it is itself a Claim Update, its referenced grandparent Claim is omitted.
780
+ check_presence_of_referenced_resources(matching_resources.first.resource, base_url, resources_to_match,
781
+ skip_claim_related: true)
476
782
  end
477
783
  else
478
784
  target_resource.source_hash.each_key do |attr|
785
+ next if claim_response_request_attr?(target_resource, attr)
786
+ next if skip_claim_related && claim_related_attr?(target_resource, attr)
787
+
479
788
  value = target_resource.send(attr.to_sym)
480
789
  if value.is_a?(FHIR::Model)
481
- check_presence_of_referenced_resources(value, base_url, resources_to_match)
790
+ check_presence_of_referenced_resources(value, base_url, resources_to_match, skip_claim_related:)
482
791
  elsif value.is_a?(Array) && value.all?(FHIR::Model)
483
- value.each { |elmt| check_presence_of_referenced_resources(elmt, base_url, resources_to_match) }
792
+ value.each do |elmt|
793
+ check_presence_of_referenced_resources(elmt, base_url, resources_to_match, skip_claim_related:)
794
+ end
484
795
  end
485
796
  end
486
797
  end
487
798
  end
488
799
 
800
+ # ClaimResponse.request is a back-reference to the submitted Claim. The PAS IG response bundle
801
+ # profile (profile-pas-response-bundle) has no required Claim entry slice, so the Claim need
802
+ # not be present in the response bundle. Skipping here matches the identical guard in
803
+ # ResponseGenerator#referenced_entities, which also skips ClaimResponse.request when
804
+ # building mock response bundles.
805
+ def claim_response_request_attr?(resource, attr)
806
+ attr.to_s == 'request' &&
807
+ resource.respond_to?(:resourceType) &&
808
+ resource.resourceType == 'ClaimResponse'
809
+ end
810
+
811
+ # Claim.related.claim points to the Claim being updated. For a non-primary Claim in a Claim Update
812
+ # chain (one reached by following a reference), that prior Claim is the grandparent, which spec-65/66
813
+ # require to be omitted from the Bundle. Used with the `skip_claim_related` flag so the generic
814
+ # reference-presence check does not flag the deliberately-omitted grandparent as missing.
815
+ def claim_related_attr?(resource, attr)
816
+ attr.to_s == 'related' &&
817
+ resource.respond_to?(:resourceType) &&
818
+ resource.resourceType == 'Claim'
819
+ end
820
+
489
821
  # Extracts resources from a bundle while following "next" links.
490
822
  #
491
823
  # @param bundle [FHIR::Bundle] The initial FHIR bundle to extract resources from.
@@ -527,10 +859,7 @@ module DaVinciPASTestKit
527
859
  # This method generates an error message when a referenced resource appears more than once
528
860
  # in a FHIR bundle, which is not allowed.
529
861
  def resource_shall_appear_once_message(absolute_ref, total_matches)
530
- "
531
- The referenced #{absolute_ref} resource
532
- SHALL appear exactly once in the Bundle, but found #{total_matches}.
533
- "
862
+ " The referenced #{absolute_ref} resource SHALL appear exactly once in the Bundle, but found #{total_matches}."
534
863
  end
535
864
 
536
865
  # Generates a message for a resource present in both the PA request and response bundles.
@@ -540,10 +869,8 @@ module DaVinciPASTestKit
540
869
  # This method generates an error message when a resource appears in both the PA request
541
870
  # and response bundles but does not have the same fullUrl or identifiers.
542
871
  def resource_present_in_pa_request_and_response_msg(resource)
543
- "
544
- Resource #{resource.resourceType}/#{resource.id} is an entry in both the PA Request Bundle
545
- and the Response Bundle, but they do not have the same fullUrl or identifiers
546
- "
872
+ "Resource #{resource.resourceType}/#{resource.id} is an entry in both the PA Request Bundle and the Response " \
873
+ 'Bundle, but they do not have the same fullUrl or identifiers'
547
874
  end
548
875
  end
549
876
  end
@@ -0,0 +1,31 @@
1
+ module DaVinciPASTestKit
2
+ module PASConstants
3
+ CLAIM_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-update'.freeze
4
+ CLAIM_PROFILE_FIRST_SUBMIT = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim'.freeze
5
+ CLAIM_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse'.freeze
6
+ CLAIM_INQUIRY_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry'.freeze
7
+ CLAIM_INQUIRY_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse'.freeze
8
+
9
+ BUNDLE_PROFILES_FOR_OPERATION_TYPE = {
10
+ submit_request: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-request-bundle',
11
+ submit_response: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle',
12
+ inquire_request: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-request-bundle',
13
+ inquire_response: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle'
14
+ }.freeze
15
+
16
+ def self.bundle_profile_url_for_operation_and_type(operation, type)
17
+ BUNDLE_PROFILES_FOR_OPERATION_TYPE[:"#{operation}_#{type}"]
18
+ end
19
+
20
+ def self.bundle_profile_name_for_operation_and_type(operation, type)
21
+ url = bundle_profile_url_for_operation_and_type(operation, type)
22
+ url.split('/profile-').last.titleize.gsub('Pas', 'PAS')
23
+ end
24
+
25
+ X12_ADJUDICATION_CODES = {
26
+ approval: 'A1',
27
+ denial: 'A3',
28
+ pended: 'A4'
29
+ }.freeze
30
+ end
31
+ end