davinci_pas_test_kit 0.9.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 (168) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/davinci_pas_test_kit/client_suite.rb +289 -0
  4. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_status/pas_claim_status_test.rb +109 -0
  5. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_response_attest.rb +39 -0
  6. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +38 -0
  7. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_response_attest.rb +38 -0
  8. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +43 -0
  9. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +51 -0
  10. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_response_attest.rb +39 -0
  11. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_test.rb +35 -0
  12. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_response_attest.rb +39 -0
  13. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_test.rb +43 -0
  14. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +57 -0
  15. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_request_test.rb +31 -0
  16. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_validation_test.rb +18 -0
  17. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/nonconformant_pas_bundle.json +16 -0
  18. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_inquiry_error_test.rb +38 -0
  19. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_submission_error_test.rb +56 -0
  20. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/device_request_metadata.yml +112 -0
  21. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/medication_request_metadata.yml +183 -0
  22. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/nutrition_order_metadata.yml +109 -0
  23. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb +117 -0
  24. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb +116 -0
  25. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/service_request_metadata.yml +148 -0
  26. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_approval_group.rb +26 -0
  27. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_authentication_group.rb +49 -0
  28. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_denial_group.rb +41 -0
  29. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_pended_group.rb +56 -0
  30. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_error_group.rb +20 -0
  31. data/lib/davinci_pas_test_kit/ext/inferno_core/record_response_route.rb +98 -0
  32. data/lib/davinci_pas_test_kit/ext/inferno_core/request.rb +19 -0
  33. data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +18 -0
  34. data/lib/davinci_pas_test_kit/fhir_resource_navigation.rb +72 -0
  35. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_inquiry_request_beneficiary_must_support_test.rb +75 -0
  36. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb +75 -0
  37. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/metadata.yml +162 -0
  38. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_request_beneficiary_must_support_test.rb +75 -0
  39. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_response_beneficiary_must_support_test.rb +75 -0
  40. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb +75 -0
  41. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb +75 -0
  42. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +67 -0
  43. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/metadata.yml +577 -0
  44. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +57 -0
  45. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
  46. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/metadata.yml +516 -0
  47. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
  48. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +102 -0
  49. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/metadata.yml +591 -0
  50. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +102 -0
  51. data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/metadata.yml +311 -0
  52. data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquiry_response_claiminquiryresponse_must_support_test.rb +73 -0
  53. data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/metadata.yml +318 -0
  54. data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +75 -0
  55. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_denial_pas_response_bundle_validation_test.rb +53 -0
  56. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pas_request_bundle_validation_test.rb +55 -0
  57. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_inquiry_request_bundle_validation_test.rb +55 -0
  58. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_response_bundle_validation_test.rb +53 -0
  59. data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/metadata.yml +130 -0
  60. data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +58 -0
  61. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquiry_request_coverage_must_support_test.rb +55 -0
  62. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +55 -0
  63. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/metadata.yml +111 -0
  64. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquiry_request_coverage_must_support_test.rb +55 -0
  65. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +55 -0
  66. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +51 -0
  67. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/metadata.yml +112 -0
  68. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +51 -0
  69. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb +67 -0
  70. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/metadata.yml +213 -0
  71. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb +67 -0
  72. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquiry_request_insurer_must_support_test.rb +60 -0
  73. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +60 -0
  74. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/metadata.yml +104 -0
  75. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_request_insurer_must_support_test.rb +60 -0
  76. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_response_insurer_must_support_test.rb +60 -0
  77. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +60 -0
  78. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +60 -0
  79. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +61 -0
  80. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/metadata.yml +183 -0
  81. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +61 -0
  82. data/lib/davinci_pas_test_kit/generated/v2.0.1/metadata.yml +5253 -0
  83. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +53 -0
  84. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/metadata.yml +109 -0
  85. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +53 -0
  86. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_inquiry_must_support_use_case_group.rb +51 -0
  87. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_submit_must_support_use_case_group.rb +61 -0
  88. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/client_inquiry_request_pas_inquiry_request_bundle_must_support_test.rb +53 -0
  89. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +77 -0
  90. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_inquiry_request_pas_inquiry_request_bundle_must_support_test.rb +53 -0
  91. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +83 -0
  92. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +67 -0
  93. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_inquiry_response_pas_inquiry_response_bundle_must_support_test.rb +52 -0
  94. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +80 -0
  95. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/client_submit_request_pas_request_bundle_must_support_test.rb +53 -0
  96. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/metadata.yml +77 -0
  97. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +83 -0
  98. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_submit_request_pas_request_bundle_must_support_test.rb +53 -0
  99. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/metadata.yml +71 -0
  100. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +80 -0
  101. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_submit_response_pas_response_bundle_must_support_test.rb +52 -0
  102. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +59 -0
  103. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +59 -0
  104. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +265 -0
  105. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +84 -0
  106. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquiry_request_practitioner_must_support_test.rb +53 -0
  107. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +53 -0
  108. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/metadata.yml +74 -0
  109. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_request_practitioner_must_support_test.rb +53 -0
  110. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_response_practitioner_must_support_test.rb +53 -0
  111. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +53 -0
  112. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +53 -0
  113. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquiry_request_practitioner_role_must_support_test.rb +49 -0
  114. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +49 -0
  115. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/metadata.yml +81 -0
  116. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_request_practitioner_role_must_support_test.rb +49 -0
  117. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_response_practitioner_role_must_support_test.rb +49 -0
  118. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +49 -0
  119. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +49 -0
  120. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquiry_request_requestor_must_support_test.rb +63 -0
  121. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +63 -0
  122. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/metadata.yml +107 -0
  123. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_request_requestor_must_support_test.rb +63 -0
  124. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_response_requestor_must_support_test.rb +63 -0
  125. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb +63 -0
  126. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +63 -0
  127. data/lib/davinci_pas_test_kit/generated/v2.0.1/resource_list.rb +54 -0
  128. data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +236 -0
  129. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +53 -0
  130. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/metadata.yml +148 -0
  131. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +53 -0
  132. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_inquiry_request_subscriber_must_support_test.rb +74 -0
  133. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb +74 -0
  134. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/metadata.yml +159 -0
  135. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_inquiry_request_subscriber_must_support_test.rb +74 -0
  136. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb +74 -0
  137. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/metadata.yml +192 -0
  138. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquiry_response_task_must_support_test.rb +61 -0
  139. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +61 -0
  140. data/lib/davinci_pas_test_kit/generator/group_generator.rb +440 -0
  141. data/lib/davinci_pas_test_kit/generator/group_metadata.rb +73 -0
  142. data/lib/davinci_pas_test_kit/generator/group_metadata_extractor.rb +244 -0
  143. data/lib/davinci_pas_test_kit/generator/ig_loader.rb +78 -0
  144. data/lib/davinci_pas_test_kit/generator/ig_metadata.rb +66 -0
  145. data/lib/davinci_pas_test_kit/generator/ig_metadata_extractor.rb +54 -0
  146. data/lib/davinci_pas_test_kit/generator/ig_resources.rb +74 -0
  147. data/lib/davinci_pas_test_kit/generator/must_support_check_profiles.rb +86 -0
  148. data/lib/davinci_pas_test_kit/generator/must_support_metadata_extractor.rb +327 -0
  149. data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +155 -0
  150. data/lib/davinci_pas_test_kit/generator/naming.rb +50 -0
  151. data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +136 -0
  152. data/lib/davinci_pas_test_kit/generator/resource_list_generator.rb +59 -0
  153. data/lib/davinci_pas_test_kit/generator/suite_generator.rb +94 -0
  154. data/lib/davinci_pas_test_kit/generator/terminology_binding_metadata_extractor.rb +108 -0
  155. data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +181 -0
  156. data/lib/davinci_pas_test_kit/generator/value_extractor.rb +48 -0
  157. data/lib/davinci_pas_test_kit/generator.rb +80 -0
  158. data/lib/davinci_pas_test_kit/mock_server.rb +189 -0
  159. data/lib/davinci_pas_test_kit/must_support_test.rb +267 -0
  160. data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +568 -0
  161. data/lib/davinci_pas_test_kit/tags.rb +7 -0
  162. data/lib/davinci_pas_test_kit/urls.rb +39 -0
  163. data/lib/davinci_pas_test_kit/user_input_response.rb +32 -0
  164. data/lib/davinci_pas_test_kit/validation_test.rb +58 -0
  165. data/lib/davinci_pas_test_kit/validator_suppressions.rb +143 -0
  166. data/lib/davinci_pas_test_kit/version.rb +5 -0
  167. data/lib/davinci_pas_test_kit.rb +2 -0
  168. metadata +281 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8afec0fe44554f72cce5bfd53e2ec230aac6b9cf7a1c9619a2e7264f3e09a2ba
4
+ data.tar.gz: 02c6532a6c3e541a704df48a875e20bf73282e4d8fbf7cd590c6541d7d1183f9
5
+ SHA512:
6
+ metadata.gz: 2a198d440407b88f2c9fef9002f36ece049baec615418d8a538a14d3314551366546331d44cea15b12e433cfbb25c5e8f087b71d45fa2a66c404618a2f1a4f58
7
+ data.tar.gz: c21b95655561c420a0a28efaf222d0ad0a480b17aa1dc53c4d2faeee0322bc6de5395c82162197dfd9e748dbf21c58438b1a9a978190f75af10a277accc0af3a
data/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright {yyyy} {name of copyright owner}
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,289 @@
1
+ require_relative 'ext/inferno_core/record_response_route'
2
+ require_relative 'ext/inferno_core/runnable'
3
+ require_relative 'ext/inferno_core/request'
4
+ require_relative 'validator_suppressions'
5
+ require_relative 'tags'
6
+ require_relative 'urls'
7
+ require_relative 'mock_server'
8
+ require_relative 'custom_groups/v2.0.1/pas_client_authentication_group'
9
+ require_relative 'custom_groups/v2.0.1/pas_client_approval_group'
10
+ require_relative 'custom_groups/v2.0.1/pas_client_denial_group'
11
+ require_relative 'custom_groups/v2.0.1/pas_client_pended_group'
12
+ require_relative 'generated/v2.0.1/pas_client_submit_must_support_use_case_group'
13
+ require_relative 'generated/v2.0.1/pas_client_inquiry_must_support_use_case_group'
14
+ require_relative 'version'
15
+
16
+ module DaVinciPASTestKit
17
+ class ClientSuite < Inferno::TestSuite
18
+ extend MockServer
19
+
20
+ id :davinci_pas_client_suite_v201
21
+ title 'Da Vinci PAS Client Suite v2.0.1'
22
+ version VERSION
23
+ description %(
24
+ The Da Vinci PAS Test Kit Client Suite validates the conformance of client
25
+ systems to the STU 2 version of the HL7® FHIR®
26
+ [Da Vinci Prior Authorization Support Implementation Guide](https://hl7.org/fhir/us/davinci-pas/STU2/).
27
+
28
+ ## Scope
29
+
30
+ These tests are a **DRAFT** intended to allow PAS client implementers to perform
31
+ preliminary checks of their clients against PAS IG requirements and [provide
32
+ feedback](https://github.com/inferno-framework/davinci-pas-test-kit/issues)
33
+ on the tests. Future versions of these tests may validate other
34
+ requirements and may change the test validation logic.
35
+
36
+ ## Test Methodology
37
+
38
+ Inferno will simulate a PAS server for the client under test to interact with. The client
39
+ will be expected to initiate requests to the server and demonstrate its ability to react
40
+ to the returned responses. Over the course of these interactions,
41
+ Inferno will seek to observe conformant handling of PAS requirements, including
42
+ - The ability of the client to initiate and react to
43
+ - The approval of a prior authorization request
44
+ - The denial of a prior authorization request
45
+ - The pending of a prior authorization request and a subsequent final decision
46
+ - The ability of the client to provide data covering the full scope of required by PAS, including
47
+ - The ability to send prior auth requests and inquiries with all PAS profiles and all must support elements on
48
+ those profiles
49
+ - The ability to handle responses that contain all PAS profiles and all must support elements on those
50
+ profiles (not included in the current version of these tests)
51
+
52
+ Because X12 details, including coded values indicating details like “denied” and “pended”,
53
+ are not public, Inferno is not currently able to generate a full set of responses to requests
54
+ or otherwise provide details on specific codes used to represent those concepts
55
+ and is limited to responses that look similar to the examples in the IG (e.g., [here](https://hl7.org/fhir/us/davinci-pas/STU2/Bundle-ReferralAuthorizationResponseBundleExample.html)).
56
+ Thus,
57
+
58
+ - In order to demonstrate specific workflows, namely pend and denial, users will need to provide the expected
59
+ response for Inferno to send back
60
+ - The current tests do not return to the client all PAS profiles and must support elements to confirm support.
61
+
62
+ For further details on limitations of these tests, see the *Testing Limitations* section below.
63
+
64
+ All requests and responses will be checked for conformance to the PAS
65
+ IG requirements individually and used in aggregate to determine whether
66
+ required features and functionality are present. HL7® FHIR® resources are
67
+ validated with the Java validator using `tx.fhir.org` as the terminology server.
68
+
69
+ ## Running the Tests
70
+
71
+ ### Quick Start
72
+
73
+ For Inferno to simulate a server that always returns approved responses, it needs
74
+ only to know the bearer token that the client will send on requests, for which there are two options.
75
+
76
+ 1. If you want to choose your own bearer token, then
77
+ 1. Select the "2. PAS Client Validation" test from the list on the left.
78
+ 2. Click the '*Run All Tests*' button on the right.
79
+ 3. In the "access_token" field, enter the bearer token that will be sent by the client under test (as part
80
+ of the Authorization header - Bearer: <provided value>).
81
+ 4. Click the '*Submit*' button at the bottom of the dialog.
82
+ 2. If you want to use a client_id to obtain an access token, then
83
+ 1. Click the '*Run All Tests*' button on the right.
84
+ 2. Provide the client's registered id "client_id" field of the input (NOTE, Inferno doesn't support the
85
+ registration API, so this must be obtained from another system or configured manually).
86
+ 3. Click the '*Submit*' button at the bottom of the dialog.
87
+ 4. Make a token request that includes the specified client id to the
88
+ `<inferno host>/custom/davinci_pas_client_suite_v201/mock_auth/token` endpoint to get
89
+ an access token to use on the request of the requests.
90
+
91
+ In either case, the tests will continue from that point, requesting the user to
92
+ direct the client to make certain requests to demonstrate PAS client capabilities.
93
+
94
+ Note: authentication options for these tests have not been finalized and are subject to change.
95
+
96
+ ### Complete Setup
97
+
98
+ The *Quick Start* approach does not test pended or deny workflows. To test these, provide a
99
+ json-encoded FHIR bundle in the "Claim pended response JSON" and "Claim deny response JSON" input field after
100
+ clicking the '*Run All Tests*' button. These responses will be echoed back when a request
101
+ is made during the corresponding test.
102
+
103
+ ### Postman-based Demo
104
+
105
+ If you do not have a PAS client but would like to try the tests out, you can use
106
+ [this postman collection](https://raw.githubusercontent.com/inferno-framework/davinci-pas-test-kit/blob/main/config/PAS%20Test%20Kit%20Client%20Test%20Demo.postman_collection.json)
107
+ to make requests against Inferno. The following requests and example responses from that collection can be used.
108
+
109
+ - Configuration
110
+ - *Deny Response* example under the *Homecare Prior Authorization Request*: use as the value of the
111
+ "Claim denied response JSON" input field. NOTE: this contains a placeholder code `DENIEDCODE` for the
112
+ X12 code representing the denied status. Replace with the X12-specified code before providing to Inferno
113
+ to accurately replicate a denial workflow for the client under test.
114
+ - *Pend Response* example under the *Medical Services Prior Authorization Request*: use as the value of the
115
+ "Claim pended response JSON" input field. NOTE: this contains a placeholder code `PENDEDCODE` for the
116
+ X12 code representing the pended status. Replace with the X12-specified code before providing to Inferno
117
+ to accurately replicate a pend workflow for the client under test.
118
+ - Submissions
119
+ - *mock token*: for submitting a client id to get back an access token to use on the rest of the tests. Set the
120
+ collection's access_token variable to the result.
121
+ - *Referral Prior Authorization Request*: use for the "Approval" workflow test submission.
122
+ - *Medical Services Prior Authorization Request*: use for the "Pended" workflow test submission.
123
+ - *Medical Services Inquiry Request*: use for the "Pended" workflow test inquiry.
124
+
125
+ No additional requests are present to submit as a part of the must support tests, so
126
+ testers can simply click the link to indicate they are done submitting requests. Note
127
+ that the requests within the Postman client are not expected to fully pass the tests as they
128
+ do not contain all must support items.
129
+
130
+ ## Testing Limitations
131
+
132
+ ### Private X12 details
133
+
134
+ HIPAA [requires](https://hl7.org/fhir/us/davinci-pas/STU2/regulations.html) electronic prior authorization
135
+ processing to use the X12 278 standard. While recent CMS rule-making suggests that [this requirement
136
+ will not be enforced in the future](https://www.cms.gov/newsroom/fact-sheets/cms-interoperability-and-prior-authorization-final-rule-cms-0057-f),
137
+ the current PAS IG relies heavily on X12. As the IG authors note at the
138
+ top of the [IG home page](https://hl7.org/fhir/us/davinci-pas/STU2/index.html):
139
+
140
+ > Note that this implementation guide is intended to support mapping between FHIR and X12 transactions. To respect
141
+ > X12 intellectual property, all mapping and X12-specific terminology information will be solely published by X12
142
+ > and made available in accordance with X12 rules - which may require membership and/or payment. Please see this
143
+ > [Da Vinci External Reference page](https://confluence.hl7.org/display/DVP/Da+Vinci+Reference+to+External+Standards+and+Terminologies)
144
+ > for details on how to get this mapping.
145
+ >
146
+ > There are many situationally required fields that are specified in the X12 TRN03 guide that do not have guidance
147
+ > in this Implementation Guide. Implementers need to consult the X12 PAS guides to know the requirements for these
148
+ > fields.
149
+ >
150
+ > Several of the profiles will require use of terminologies that are part of X12 which we anticipate being made
151
+ > publicly available. At such time as this occurs, the implementation guide will be updated to bind to these as
152
+ > external terminologies.
153
+
154
+ The implications of this reliance on proprietary information that is not publicly available means that this test
155
+ kit:
156
+
157
+ - Cannot verify the correct usage of X12-based terminology: terminology requirements for all elements bound to X12
158
+ value sets will not be validated.
159
+ - Cannot verify the meaning of codes: validation that a given response conveys something specific, e.g., approval
160
+ or pending, is not performed.
161
+ - Cannot verify matching semantics on inquiries: no checking of the identity of the ClaimResponse returned for an
162
+ inquiry, e.g., that it matches the input or the original request.
163
+
164
+ These limitations may be removed in future versions of these tests. In the meantime, testers should consider these
165
+ requirements to be verified through attestation and should not represent their systems to have passed these tests
166
+ if these requirements are not met.
167
+
168
+ ### Underspecified Subscription Details
169
+
170
+ The current PAS specification around subscriptions and notifications
171
+ is not detailed enough to support testing. Notably,
172
+ - There are no examples of what a notification payload looks like
173
+ - There is no instruction on how to turn the notification payload into an inquiry
174
+
175
+ Once these details have been clarified, validation of the notification workflows
176
+ will be added to these tests.
177
+
178
+ ### Future Details
179
+
180
+ The PAS IG places additional requirements on clients that are not currently tested by this test kit, including
181
+
182
+ - Prior Authorization update workflows
183
+ - Requests for additional information handled through the CDex framework
184
+ - PDF, CDA, and JPG attachments
185
+ - US Core profile support for supporting information
186
+ - The ability to handle responses containing all PAS-defined profiles and must support elements
187
+ - Most details requiring manual review of the client system, e.g., the requirement that clinicians can update
188
+ details of the prior authorization request before submitting them
189
+
190
+ These and any other requirements found in the PAS IG may be tested in future versions of these tests.
191
+ )
192
+
193
+ links [
194
+ {
195
+ label: 'Report Issue',
196
+ url: 'https://github.com/inferno-framework/davinci-pas-test-kit/issues/'
197
+ },
198
+ {
199
+ label: 'Open Source',
200
+ url: 'https://github.com/inferno-framework/davinci-pas-test-kit/'
201
+ },
202
+ {
203
+ label: 'Implementation Guide',
204
+ url: 'https://hl7.org/fhir/us/davinci-pas/STU2/'
205
+ }
206
+ ]
207
+
208
+ def self.test_resumes?(test)
209
+ !test.config.options[:accepts_multiple_requests]
210
+ end
211
+
212
+ validator do
213
+ url ENV.fetch('VALIDATOR_URL')
214
+
215
+ exclude_message do |message|
216
+ # Messages expected of the form `<ResourceType>: <FHIRPath>: <message>`
217
+ # We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
218
+ SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, ''))
219
+ end
220
+ end
221
+
222
+ record_response_route :post, TOKEN_PATH, AUTH_TAG, method(:token_response) do |request|
223
+ ClientSuite.extract_client_id(request)
224
+ end
225
+
226
+ record_response_route :post, SUBMIT_PATH, SUBMIT_TAG, method(:claim_response),
227
+ resumes: method(:test_resumes?) do |request|
228
+ ClientSuite.extract_bearer_token(request)
229
+ end
230
+
231
+ record_response_route :post, INQUIRE_PATH, INQUIRE_TAG, method(:claim_response),
232
+ resumes: method(:test_resumes?) do |request|
233
+ ClientSuite.extract_bearer_token(request)
234
+ end
235
+
236
+ resume_test_route :get, RESUME_PASS_PATH do |request|
237
+ ClientSuite.extract_token_from_query_params(request)
238
+ end
239
+
240
+ resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
241
+ ClientSuite.extract_token_from_query_params(request)
242
+ end
243
+
244
+ group from: :pas_client_v201_authentication_group
245
+ group do
246
+ title 'PAS Client Validation'
247
+ description %(
248
+ These tests perform the functional validation of the client under test.
249
+ For requests to be recognized by Inferno to be part of this test session
250
+ they must include the configured bearer token
251
+ (user provided or generated during the authorization tests)
252
+ in the Authorization HTTP header with prefix "Bearer: ".
253
+ )
254
+
255
+ group do
256
+ title 'Demonstrate Workflow Support'
257
+ description %(
258
+ The workflow tests validate that the client can participate in complete end-to-end prior
259
+ authorization interactions, initiating requests and reacting appropriately to the
260
+ responses returned.
261
+ )
262
+ group from: :pas_client_v201_approval_group
263
+ group from: :pas_client_v201_denial_group
264
+ group from: :pas_client_v201_pended_group
265
+ end
266
+
267
+ group do
268
+ title 'Demonstrate Element Support'
269
+ description %(
270
+ Demonstrate the ability of the client to support all PAS-defined profiles and the must support elements
271
+ defined in them. This includes
272
+
273
+ - the ability to make prior authorization submission and inquiry requests that contain all
274
+ PAS-defined profiles and their must support elements.
275
+ - the ability to receive in responses to those requests all PAS-defined profiles and their
276
+ must support elements and continue the prior authorization workflow as appropriate (not currently
277
+ implemented in these tests).
278
+
279
+ Clients under test will be asked to make additional requests to Inferno demonstrating coverage
280
+ of all must support items in the requests. Note that Inferno will consider requests made during
281
+ the workflow group of tests, so only profiles and must support elements not demonstrated during
282
+ those tests need to be submitted as a part of these.
283
+ )
284
+ group from: :pas_client_v201_submit_must_support_use_case
285
+ group from: :pas_client_v201_inquiry_must_support_use_case
286
+ end
287
+ end
288
+ end
289
+ end
@@ -0,0 +1,109 @@
1
+ # require 'securerandom' //used for attestation experiment - see below
2
+ # require_relative '../../../urls' // used for attestation experiment - see below
3
+
4
+ module DaVinciPASTestKit
5
+ module DaVinciPASV201
6
+ class PasClaimStatusTest < Inferno::Test
7
+ # include URLs // used for attestation experiment - see below
8
+
9
+ id :prior_auth_claim_status
10
+ title 'Server returns the expected authorization response'
11
+ description %(
12
+ This test aims to confirm that the status of the prior authorization matches
13
+ the anticipated status for the workflow under examination.
14
+ (NOT YET IMPLEMENTED)
15
+ )
16
+ uses_request :pa_submit
17
+
18
+ def status
19
+ if use_case == 'approval'
20
+ 'approved'
21
+ else
22
+ use_case == 'denial' ? 'denied' : 'pended'
23
+ end
24
+ end
25
+
26
+ run do
27
+ # Experiment with extraction of statuses and use in an attestation
28
+ # Not used due to the following problems:
29
+ # - no real clients to test with
30
+ # - how to express the location we're looking for? The spec never mentions it explicitly.
31
+ #
32
+ # # Extract the response status
33
+ # status_values = []
34
+ # if resource.resourceType == 'Bundle'
35
+ # resource.entry.each do |one_entry|
36
+ # next unless one_entry.resource.resourceType == 'ClaimResponse'
37
+ #
38
+ # one_entry.resource.item.each do |one_item|
39
+ # one_item.adjudication.each do |one_adjudication|
40
+ # one_adjudication.extension
41
+ # .select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewAction' }
42
+ # .each do |review_action_ext|
43
+ # review_action_ext.extension.select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewActionCode' }
44
+ # .each do |review_action_code_ext|
45
+ # review_action_code_ext.valueCodeableConcept.coding.select { |coding| coding.system == 'https://codesystem.x12.org/005010/306' }
46
+ # .each do |one_code|
47
+ # if one_code.code
48
+ # status_values << "#{one_code.code}#{one_code.display ? " (#{one_code.display})" : ''}"
49
+ # end
50
+ # end
51
+ # end
52
+ # end
53
+ # end
54
+ # end
55
+ # end
56
+ # end
57
+ #
58
+ # assert !status_values.empty?, 'No status values found **where??**'
59
+ #
60
+ # # Attestation
61
+ # attestation_key = SecureRandom.uuid
62
+ # status_display = status_values.reduce('') { |result, status| result + "- #{status}\n" }
63
+ # wait(
64
+ # identifier: attestation_key,
65
+ # message: %(
66
+ # **Status Validation for `#{status}`**:
67
+ #
68
+ # The following adjudication status
69
+ # #{status_values.length > 1 ? 'values were' : 'value was'}
70
+ # found in the response **where??**:
71
+ #
72
+ # #{status_display}
73
+ #
74
+ # I attest that
75
+ # #{status_values.length > 1 ? 'one of the status values' : 'the status value'}
76
+ # returned by the server indicates that the request was #{status}
77
+ #
78
+ # [Click here](#{resume_pass_url}?token=#{attestation_key}) if the above statement is **true**.
79
+ #
80
+ # [Click here](#{resume_fail_url}?token=#{attestation_key}) if the above statement is **false**.
81
+ # )
82
+ # )
83
+ #
84
+ # end of experiment with attestation code
85
+
86
+ # TODO: Implement subscription for pended: Inferno will subscribe to the server to receive notification
87
+ # when the submitted claim status will be updated.
88
+ if use_case == 'pended'
89
+ # rubocop:disable Layout/LineLength
90
+ wait(
91
+ identifier: use_case,
92
+ message: %(
93
+ Inferno has received a 'Pended' claim response as expected.
94
+
95
+ Please
96
+ **[click
97
+ here](#{Inferno::Application['base_url']}/custom/davinci_pas_server_suite_v201/resume_after_notification?use_case=#{use_case})**
98
+ when the status of this claim has been finalized to inform Inferno to resume testing.
99
+
100
+ Future versions of this test may implement automated monitoring
101
+ capabilities described in the implementation guide.
102
+ )
103
+ )
104
+ # rubocop:enable Layout/LineLength
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../../../urls'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV201
5
+ class PASClientApprovalSubmitResponseAttest < Inferno::Test
6
+ include URLs
7
+
8
+ id :pas_client_v201_approval_submit_response_attest
9
+ title 'Check that the client registers the request as approved (Attestation)'
10
+ description %(
11
+ This test provides the tester an opportunity to observe their client following
12
+ the receipt of the approved response and attest that users are able to determine
13
+ that the response has been approved.
14
+ )
15
+ input :access_token,
16
+ title: 'Access Token',
17
+ description: %(
18
+ Access token that the client will provide in the Authorization header of each request
19
+ made during this test.
20
+ )
21
+
22
+ run do
23
+ wait(
24
+ identifier: access_token,
25
+ message: %(
26
+ **Approval Workflow Test**:
27
+
28
+ I attest that the client system displays the submitted claim as 'approved' meaning that
29
+ the user can proceed with ordering or providing the requested service.
30
+
31
+ [Click here](#{resume_pass_url}?token=#{access_token}) if the above statement is **true**.
32
+
33
+ [Click here](#{resume_fail_url}?token=#{access_token}) if the above statement is **false**.
34
+ )
35
+ )
36
+ end
37
+ end
38
+ end
39
+ end