davinci_pas_test_kit 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/lib/davinci_pas_test_kit/client_suite.rb +289 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_status/pas_claim_status_test.rb +109 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_response_attest.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +43 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_test.rb +35 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_test.rb +43 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +57 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_request_test.rb +31 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_validation_test.rb +18 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/nonconformant_pas_bundle.json +16 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_inquiry_error_test.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_submission_error_test.rb +56 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/device_request_metadata.yml +112 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/medication_request_metadata.yml +183 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/nutrition_order_metadata.yml +109 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb +117 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb +116 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/service_request_metadata.yml +148 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_approval_group.rb +26 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_authentication_group.rb +49 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_denial_group.rb +41 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_pended_group.rb +56 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_error_group.rb +20 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/record_response_route.rb +98 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/request.rb +19 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +18 -0
- data/lib/davinci_pas_test_kit/fhir_resource_navigation.rb +72 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_inquiry_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/metadata.yml +162 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_response_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/metadata.yml +577 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +57 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/metadata.yml +516 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +102 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/metadata.yml +591 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +102 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/metadata.yml +311 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquiry_response_claiminquiryresponse_must_support_test.rb +73 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/metadata.yml +318 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_denial_pas_response_bundle_validation_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pas_request_bundle_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_inquiry_request_bundle_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_response_bundle_validation_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/metadata.yml +130 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +58 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquiry_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/metadata.yml +111 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquiry_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/metadata.yml +112 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/metadata.yml +213 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquiry_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/metadata.yml +104 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_response_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/metadata.yml +183 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/metadata.yml +5253 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/metadata.yml +109 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_inquiry_must_support_use_case_group.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_submit_must_support_use_case_group.rb +61 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +77 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +83 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +67 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +80 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/metadata.yml +77 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +83 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/metadata.yml +71 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +80 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +59 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +59 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +265 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +84 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquiry_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/metadata.yml +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_response_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquiry_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/metadata.yml +81 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_response_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquiry_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/metadata.yml +107 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_response_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/resource_list.rb +54 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +236 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/metadata.yml +148 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_inquiry_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/metadata.yml +159 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_inquiry_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/metadata.yml +192 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquiry_response_task_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generator/group_generator.rb +440 -0
- data/lib/davinci_pas_test_kit/generator/group_metadata.rb +73 -0
- data/lib/davinci_pas_test_kit/generator/group_metadata_extractor.rb +244 -0
- data/lib/davinci_pas_test_kit/generator/ig_loader.rb +78 -0
- data/lib/davinci_pas_test_kit/generator/ig_metadata.rb +66 -0
- data/lib/davinci_pas_test_kit/generator/ig_metadata_extractor.rb +54 -0
- data/lib/davinci_pas_test_kit/generator/ig_resources.rb +74 -0
- data/lib/davinci_pas_test_kit/generator/must_support_check_profiles.rb +86 -0
- data/lib/davinci_pas_test_kit/generator/must_support_metadata_extractor.rb +327 -0
- data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +155 -0
- data/lib/davinci_pas_test_kit/generator/naming.rb +50 -0
- data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +136 -0
- data/lib/davinci_pas_test_kit/generator/resource_list_generator.rb +59 -0
- data/lib/davinci_pas_test_kit/generator/suite_generator.rb +94 -0
- data/lib/davinci_pas_test_kit/generator/terminology_binding_metadata_extractor.rb +108 -0
- data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +181 -0
- data/lib/davinci_pas_test_kit/generator/value_extractor.rb +48 -0
- data/lib/davinci_pas_test_kit/generator.rb +80 -0
- data/lib/davinci_pas_test_kit/mock_server.rb +189 -0
- data/lib/davinci_pas_test_kit/must_support_test.rb +267 -0
- data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +568 -0
- data/lib/davinci_pas_test_kit/tags.rb +7 -0
- data/lib/davinci_pas_test_kit/urls.rb +39 -0
- data/lib/davinci_pas_test_kit/user_input_response.rb +32 -0
- data/lib/davinci_pas_test_kit/validation_test.rb +58 -0
- data/lib/davinci_pas_test_kit/validator_suppressions.rb +143 -0
- data/lib/davinci_pas_test_kit/version.rb +5 -0
- data/lib/davinci_pas_test_kit.rb +2 -0
- metadata +281 -0
@@ -0,0 +1,440 @@
|
|
1
|
+
require_relative 'naming'
|
2
|
+
|
3
|
+
module DaVinciPASTestKit
|
4
|
+
class Generator
|
5
|
+
class GroupGenerator
|
6
|
+
class << self
|
7
|
+
def generate(ig_metadata, base_output_dir)
|
8
|
+
groups = ig_metadata.groups.select { |group| group.tests.present? }.reject do |group|
|
9
|
+
group.profile_name.include?('Base')
|
10
|
+
end
|
11
|
+
# Server Test Groups
|
12
|
+
['approval', 'denial', 'pended', 'must_support'].each_with_index do |use_case, index|
|
13
|
+
new(ig_metadata, use_case, groups, base_output_dir, 'server', index.zero?).generate
|
14
|
+
end
|
15
|
+
|
16
|
+
# Client Test Groups
|
17
|
+
['submit_must_support', 'inquiry_must_support'].each do |use_case|
|
18
|
+
new(ig_metadata, use_case, groups, base_output_dir, 'client', false).generate
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_accessor :ig_metadata, :use_case, :groups, :base_output_dir, :first_generate, :system
|
24
|
+
|
25
|
+
def initialize(ig_metadata, use_case, groups, base_output_dir, system = 'server', first_generate = false)
|
26
|
+
self.ig_metadata = ig_metadata
|
27
|
+
self.use_case = use_case
|
28
|
+
self.groups = groups
|
29
|
+
self.base_output_dir = base_output_dir
|
30
|
+
self.system = system
|
31
|
+
self.first_generate = first_generate
|
32
|
+
end
|
33
|
+
|
34
|
+
def template
|
35
|
+
@template ||= File.read(File.join(__dir__, 'templates', 'group.rb.erb'))
|
36
|
+
end
|
37
|
+
|
38
|
+
def output
|
39
|
+
@output ||= ERB.new(template).result(binding)
|
40
|
+
end
|
41
|
+
|
42
|
+
def base_output_file_name
|
43
|
+
"#{class_name.underscore}.rb"
|
44
|
+
end
|
45
|
+
|
46
|
+
def base_metadata_file_name
|
47
|
+
'metadata.yml'
|
48
|
+
end
|
49
|
+
|
50
|
+
def class_name
|
51
|
+
"PAS#{system.capitalize}#{use_case.camelize}UseCaseGroup"
|
52
|
+
end
|
53
|
+
|
54
|
+
def module_name
|
55
|
+
"DaVinciPAS#{groups.first.reformatted_version.upcase}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def title
|
59
|
+
if use_case.include?('must_support')
|
60
|
+
return 'Submit Request Must Support' if system == 'client' && use_case.include?('submit')
|
61
|
+
return 'Inquiry Request Must Support' if system == 'client'
|
62
|
+
|
63
|
+
'Demonstrate Element Support'
|
64
|
+
else
|
65
|
+
"Successful #{use_case.capitalize} Workflow"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def run_as_group
|
70
|
+
return false if use_case.include?('must_support') && system == 'server'
|
71
|
+
|
72
|
+
true
|
73
|
+
end
|
74
|
+
|
75
|
+
def output_file_name
|
76
|
+
File.join(base_output_dir, base_output_file_name)
|
77
|
+
end
|
78
|
+
|
79
|
+
def metadata_file_name(group)
|
80
|
+
File.join(base_output_dir, profile_identifier(group), base_metadata_file_name)
|
81
|
+
end
|
82
|
+
|
83
|
+
def profile_identifier(group_metadata)
|
84
|
+
Naming.snake_case_for_profile(group_metadata)
|
85
|
+
end
|
86
|
+
|
87
|
+
def group_id
|
88
|
+
"pas_#{system}_#{groups.first.reformatted_version}_#{use_case}_use_case"
|
89
|
+
end
|
90
|
+
|
91
|
+
def generate
|
92
|
+
File.write(output_file_name, output)
|
93
|
+
ig_metadata.add_use_case_groups(group_id, base_output_file_name)
|
94
|
+
return unless first_generate
|
95
|
+
|
96
|
+
groups.each do |group_metadata|
|
97
|
+
File.write(metadata_file_name(group_metadata), YAML.dump(group_metadata.to_hash))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def all_tests
|
102
|
+
@all_tests ||= groups.flat_map(&:tests).compact
|
103
|
+
end
|
104
|
+
|
105
|
+
def all_test_ids
|
106
|
+
@all_test_ids = all_tests.map { |test| test[:id] }.reject do |id|
|
107
|
+
id.include?('medication_request_must_support') || id.include?('service_request_must_support') ||
|
108
|
+
id.include?('device_request_must_support') || id.include?('nutrition_order_must_support')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def select_test_ids(include_patterns, exclude_patterns = [])
|
113
|
+
all_test_ids.select do |id|
|
114
|
+
include_conditions = include_patterns.all? { |pattern| id.include?(pattern) }
|
115
|
+
exclude_conditions = exclude_patterns.none? { |pattern| id.include?(pattern) }
|
116
|
+
include_conditions && exclude_conditions
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def submit_request_validation_test_ids
|
121
|
+
@submit_request_validation_test_ids ||= select_test_ids(['request', 'validation_test'], ['inquiry', 'client'])
|
122
|
+
end
|
123
|
+
|
124
|
+
def inquiry_request_validation_test_ids
|
125
|
+
@inquiry_request_validation_test_ids ||= select_test_ids(['request', 'validation_test', 'inquiry'], ['client'])
|
126
|
+
end
|
127
|
+
|
128
|
+
def submit_response_validation_test_ids
|
129
|
+
@submit_response_validation_test_ids ||= select_test_ids(['response', 'validation_test'], ['inquiry', 'client'])
|
130
|
+
end
|
131
|
+
|
132
|
+
def inquiry_response_validation_test_ids
|
133
|
+
@inquiry_response_validation_test_ids ||= select_test_ids(['response', 'validation_test', 'inquiry'],
|
134
|
+
['client'])
|
135
|
+
end
|
136
|
+
|
137
|
+
def submit_request_must_support_test_ids
|
138
|
+
@submit_request_must_support_test_ids ||= select_test_ids(['submit_request', 'must_support_test'], ['client'])
|
139
|
+
.unshift(pas_submit_must_support_requirement_test_id)
|
140
|
+
end
|
141
|
+
|
142
|
+
def client_submit_request_must_support_test_ids
|
143
|
+
@client_submit_request_must_support_test_ids ||= select_test_ids(
|
144
|
+
['submit_request', 'must_support_test'],
|
145
|
+
['server']
|
146
|
+
).unshift(pas_client_must_support_test_id, pas_submit_must_support_requirement_test_id)
|
147
|
+
end
|
148
|
+
|
149
|
+
def inquiry_request_must_support_test_ids
|
150
|
+
@inquiry_request_must_support_test_ids ||= select_test_ids(['inquiry_request', 'must_support_test'], ['client'])
|
151
|
+
end
|
152
|
+
|
153
|
+
def client_inquiry_request_must_support_test_ids
|
154
|
+
@client_inquiry_request_must_support_test_ids ||= select_test_ids(
|
155
|
+
['inquiry_request', 'must_support_test'],
|
156
|
+
['server']
|
157
|
+
).unshift(pas_client_must_support_test_id)
|
158
|
+
end
|
159
|
+
|
160
|
+
def submit_response_must_support_test_ids
|
161
|
+
@submit_response_must_support_test_ids ||= select_test_ids(['submit_response', 'must_support_test'])
|
162
|
+
end
|
163
|
+
|
164
|
+
def inquiry_response_must_support_test_ids
|
165
|
+
@inquiry_response_must_support_test_ids ||= select_test_ids(['inquiry_response', 'must_support_test'])
|
166
|
+
end
|
167
|
+
|
168
|
+
def submit_operation_test_ids
|
169
|
+
@submit_operation_test_ids ||= select_test_ids(['operation_test'], ['inquiry'])
|
170
|
+
end
|
171
|
+
|
172
|
+
def inquiry_operation_test_ids
|
173
|
+
@inquiry_operation_test_ids ||= select_test_ids(['operation_test', 'inquiry'])
|
174
|
+
end
|
175
|
+
|
176
|
+
def approval_denial_test_ids
|
177
|
+
submit_request_validation_test_ids + submit_operation_test_ids + submit_response_validation_test_ids
|
178
|
+
end
|
179
|
+
|
180
|
+
def grouped_approval_denial_test_ids
|
181
|
+
{
|
182
|
+
'PAS Submit Operation' => approval_denial_test_ids,
|
183
|
+
'PAS Status Check' => [claim_status_test_id]
|
184
|
+
}
|
185
|
+
end
|
186
|
+
|
187
|
+
def pended_test_ids
|
188
|
+
approval_denial_test_ids + inquiry_request_validation_test_ids +
|
189
|
+
inquiry_operation_test_ids + inquiry_response_validation_test_ids
|
190
|
+
end
|
191
|
+
|
192
|
+
def grouped_pended_test_ids
|
193
|
+
inquiry_operation = inquiry_request_validation_test_ids +
|
194
|
+
inquiry_operation_test_ids +
|
195
|
+
inquiry_response_validation_test_ids
|
196
|
+
inquiry_tests = {
|
197
|
+
'PAS Inquiry Operation' => inquiry_operation
|
198
|
+
}
|
199
|
+
|
200
|
+
grouped_approval_denial_test_ids.merge(inquiry_tests)
|
201
|
+
end
|
202
|
+
|
203
|
+
def must_support_test_ids
|
204
|
+
pended_test_ids + submit_request_must_support_test_ids + submit_response_must_support_test_ids +
|
205
|
+
inquiry_request_must_support_test_ids + inquiry_response_must_support_test_ids
|
206
|
+
end
|
207
|
+
|
208
|
+
def grouped_must_support_test_ids
|
209
|
+
submit_tests = submit_request_validation_test_ids +
|
210
|
+
submit_operation_test_ids +
|
211
|
+
submit_response_validation_test_ids
|
212
|
+
inquiry_operation = inquiry_request_validation_test_ids +
|
213
|
+
inquiry_operation_test_ids +
|
214
|
+
inquiry_response_validation_test_ids
|
215
|
+
{
|
216
|
+
'$submit Element Support' => {
|
217
|
+
'PAS Submit Operation' => submit_tests,
|
218
|
+
'[USER INPUT VALIDATION] Submit Request Must Support' => submit_request_must_support_test_ids,
|
219
|
+
'Submit Response Must Support' => submit_response_must_support_test_ids
|
220
|
+
},
|
221
|
+
'$inquire Element Support' => {
|
222
|
+
'PAS Inquiry Operation' => inquiry_operation,
|
223
|
+
'[USER INPUT VALIDATION] Inquiry Request Must Support' => inquiry_request_must_support_test_ids,
|
224
|
+
'Inquiry Response Must Support' => inquiry_response_must_support_test_ids
|
225
|
+
}
|
226
|
+
}
|
227
|
+
end
|
228
|
+
|
229
|
+
def common_test_file_list(test_ids)
|
230
|
+
test_ids.map do |id|
|
231
|
+
test = all_tests.find { |t| t[:id] == id }
|
232
|
+
next unless test
|
233
|
+
|
234
|
+
group = groups.find { |grp| grp.tests.include?(test) }
|
235
|
+
name_without_suffix = test[:file_name].delete_suffix('.rb')
|
236
|
+
test_file = if name_without_suffix.start_with?('..')
|
237
|
+
name_without_suffix
|
238
|
+
else
|
239
|
+
"#{profile_identifier(group)}/#{name_without_suffix}"
|
240
|
+
end
|
241
|
+
test_file
|
242
|
+
end.compact
|
243
|
+
end
|
244
|
+
|
245
|
+
def approval_denial_test_file_list
|
246
|
+
common_test_file_list(approval_denial_test_ids) << claim_status_file_name
|
247
|
+
end
|
248
|
+
|
249
|
+
def pended_test_file_list
|
250
|
+
common_test_file_list(pended_test_ids) << claim_status_file_name
|
251
|
+
end
|
252
|
+
|
253
|
+
def must_support_test_file_list
|
254
|
+
common_test_file_list(must_support_test_ids).push(pas_submit_must_support_requirement_test_file)
|
255
|
+
end
|
256
|
+
|
257
|
+
def client_submit_request_must_support_test_file_list
|
258
|
+
common_test_file_list(client_submit_request_must_support_test_ids)
|
259
|
+
.push(pas_submit_must_support_requirement_test_file, pas_client_must_support_test_file)
|
260
|
+
end
|
261
|
+
|
262
|
+
def client_inquiry_request_must_support_test_file_list
|
263
|
+
common_test_file_list(client_inquiry_request_must_support_test_ids)
|
264
|
+
.push(pas_client_must_support_test_file)
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_id_list
|
268
|
+
@test_id_list ||= if system == 'client'
|
269
|
+
if use_case == 'submit_must_support'
|
270
|
+
client_submit_request_must_support_test_ids
|
271
|
+
else
|
272
|
+
client_inquiry_request_must_support_test_ids
|
273
|
+
end
|
274
|
+
elsif use_case == 'approval' || use_case == 'denial'
|
275
|
+
grouped_approval_denial_test_ids
|
276
|
+
elsif use_case == 'pended'
|
277
|
+
grouped_pended_test_ids
|
278
|
+
else
|
279
|
+
grouped_must_support_test_ids
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_file_list
|
284
|
+
@test_file_list ||= if system == 'client'
|
285
|
+
if use_case == 'submit_must_support'
|
286
|
+
client_submit_request_must_support_test_file_list
|
287
|
+
else
|
288
|
+
client_inquiry_request_must_support_test_file_list
|
289
|
+
end
|
290
|
+
elsif use_case == 'approval' || use_case == 'denial'
|
291
|
+
approval_denial_test_file_list
|
292
|
+
elsif use_case == 'pended'
|
293
|
+
pended_test_file_list
|
294
|
+
else
|
295
|
+
must_support_test_file_list
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
def claim_status_test_id
|
300
|
+
'prior_auth_claim_status'
|
301
|
+
end
|
302
|
+
|
303
|
+
def claim_status_file_name
|
304
|
+
"../../custom_groups/#{ig_metadata.ig_version}/claim_status/pas_claim_status_test"
|
305
|
+
end
|
306
|
+
|
307
|
+
def rename_input?(test_id)
|
308
|
+
(test_id.include?('request') && test_id.include?('validation') && !test_id.include?('inquiry')) ||
|
309
|
+
test_id.include?('operation_test')
|
310
|
+
end
|
311
|
+
|
312
|
+
def must_support_rename_input?(test_id)
|
313
|
+
(test_id.include?('request') && test_id.include?('validation')) ||
|
314
|
+
test_id.include?('operation_test')
|
315
|
+
end
|
316
|
+
|
317
|
+
def alt_test_id(id, use_case)
|
318
|
+
"#{id}_#{use_case}"
|
319
|
+
end
|
320
|
+
|
321
|
+
def alt_request_input_name(use_case, request_type)
|
322
|
+
"#{use_case}_pa_#{request_type}_request_payload"
|
323
|
+
end
|
324
|
+
|
325
|
+
def alt_request_input_title(use_case, request_type)
|
326
|
+
if use_case == 'must_support'
|
327
|
+
"Additional PAS #{request_type.capitalize} Request Payloads"
|
328
|
+
else
|
329
|
+
"PAS #{request_type.capitalize} Request Payload for #{use_case.capitalize} Response"
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def pas_submit_must_support_requirement_test_id
|
334
|
+
"pas_#{system}_submit_#{ig_metadata.reformatted_version}_must_support_requirement"
|
335
|
+
end
|
336
|
+
|
337
|
+
def pas_submit_must_support_requirement_test_file
|
338
|
+
"../../custom_groups/#{ig_metadata.ig_version}/must_support/pas_#{system}_must_support_requirement_test"
|
339
|
+
end
|
340
|
+
|
341
|
+
# Client tests initiation for must support: tests to allow the client to send $submit/$inquire requests in
|
342
|
+
# addition to any already sent in previous test groups for Inferno to evaluate coverage of must support elements.
|
343
|
+
def pas_client_must_support_test_id
|
344
|
+
request_type = use_case.include?('submit') ? 'submit' : 'inquire'
|
345
|
+
"pas_client_#{request_type}_#{ig_metadata.reformatted_version}_must_support_test"
|
346
|
+
end
|
347
|
+
|
348
|
+
def pas_client_must_support_test_file
|
349
|
+
request_type = use_case.include?('submit') ? 'submit' : 'inquire'
|
350
|
+
"../../custom_groups/#{ig_metadata.ig_version}/client_tests/pas_client_#{request_type}_must_support_test"
|
351
|
+
end
|
352
|
+
|
353
|
+
def description
|
354
|
+
case system
|
355
|
+
when 'server'
|
356
|
+
case use_case
|
357
|
+
when 'approval'
|
358
|
+
<<~DESCRIPTION
|
359
|
+
Demonstrate the ability of the server to respond to a prior
|
360
|
+
authorization request with an `approved` decision.
|
361
|
+
DESCRIPTION
|
362
|
+
when 'denial'
|
363
|
+
<<~DESCRIPTION
|
364
|
+
Demonstrate the ability of the server to respond to a prior
|
365
|
+
authorization request with an `denied` decision.
|
366
|
+
DESCRIPTION
|
367
|
+
when 'pended'
|
368
|
+
<<~DESCRIPTION
|
369
|
+
Demonstrate a complete prior authorization workflow including a period
|
370
|
+
during which the final decision is pending. This includes
|
371
|
+
|
372
|
+
- Demonstrating the ability of the server to respond to a prior
|
373
|
+
authorization request with an `pended` status.
|
374
|
+
- Demonstrating the ability of the server to respond to a subsequent
|
375
|
+
inquiry request with a final decision for the request
|
376
|
+
DESCRIPTION
|
377
|
+
else # must_support
|
378
|
+
<<~DESCRIPTION
|
379
|
+
Demonstrate the ability of the server to support all PAS-defined profiles
|
380
|
+
and the must support elements defined in them. This includes
|
381
|
+
|
382
|
+
- the ability to respond to prior authorization submission and inquiry
|
383
|
+
requests that contain all PAS-defined profiles and their must support
|
384
|
+
elements.
|
385
|
+
- the ability to include in those responses all PAS-defined profiles
|
386
|
+
and their must support elements.
|
387
|
+
|
388
|
+
In order to allow Inferno to observe and validate these criteria, testers
|
389
|
+
are required to provide a set of `$submit` and `$inquire` requests that
|
390
|
+
collectively both themselves contain and elicit server responses that contain
|
391
|
+
all PAS-defined profiles and their must support elements.
|
392
|
+
DESCRIPTION
|
393
|
+
end
|
394
|
+
when 'client'
|
395
|
+
if use_case.include?('submit')
|
396
|
+
<<~DESCRIPTION
|
397
|
+
Check that the client can demonstrate `$submit` requests that contain
|
398
|
+
all PAS-defined profiles and their must support elements.
|
399
|
+
|
400
|
+
For `$submit` requests, this includes the following profiles:
|
401
|
+
|
402
|
+
- [PAS Request Bundle](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-pas-request-bundle.html)
|
403
|
+
- [PAS Claim Update](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-claim-update.html)
|
404
|
+
- [PAS Coverage](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-coverage.html)
|
405
|
+
- [PAS Beneficiary Patient](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-beneficiary.html)
|
406
|
+
- [PAS Subscriber Patient](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-subscriber.html)
|
407
|
+
- [PAS Insurer Organization](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-insurer.html)
|
408
|
+
- [PAS Requestor Organization](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-requestor.html)
|
409
|
+
- [PAS Practitioner](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-practitioner.html)
|
410
|
+
- [PAS PractitionerRole](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-practitionerrole.html)
|
411
|
+
- [PAS Encounter](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-encounter.html)
|
412
|
+
- At least one of the following request profiles
|
413
|
+
- [PAS Device Request](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-devicerequest.html)
|
414
|
+
- [PAS Medication Request](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-medicationrequest.html)
|
415
|
+
- [PAS Nutrition Order](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-nutritionorder.html)
|
416
|
+
- [PAS Service Request](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-servicerequest.html)
|
417
|
+
DESCRIPTION
|
418
|
+
else # inquire
|
419
|
+
<<~DESCRIPTION
|
420
|
+
Check that the client can demonstrate `$inquire` requests that contain
|
421
|
+
all PAS-defined profiles and their must support elements.
|
422
|
+
|
423
|
+
For `$inquire` requests, this includes the following profiles:
|
424
|
+
|
425
|
+
- [PAS Inquiry Request Bundle](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-pas-inquiry-request-bundle.html)
|
426
|
+
- [PAS Claim Inquiry](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-claim-inquiry.html)
|
427
|
+
- [PAS Coverage](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-coverage.html)
|
428
|
+
- [PAS Beneficiary Patient](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-beneficiary.html)
|
429
|
+
- [PAS Subscriber Patient](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-subscriber.html)
|
430
|
+
- [PAS Insurer Organization](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-insurer.html)
|
431
|
+
- [PAS Requestor Organization](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-requestor.html)
|
432
|
+
- [PAS Practitioner](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-practitioner.html)
|
433
|
+
- [PAS PractitionerRole](https://hl7.org/fhir/us/davinci-pas/STU2/StructureDefinition-profile-practitionerrole.html)
|
434
|
+
DESCRIPTION
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
end
|
439
|
+
end
|
440
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module DaVinciPASTestKit
|
2
|
+
class Generator
|
3
|
+
class GroupMetadata
|
4
|
+
ATTRIBUTES = %i[
|
5
|
+
name
|
6
|
+
class_name
|
7
|
+
version
|
8
|
+
reformatted_version
|
9
|
+
resource
|
10
|
+
conformance_expectation
|
11
|
+
profile_url
|
12
|
+
profile_name
|
13
|
+
profile_version
|
14
|
+
title
|
15
|
+
short_description
|
16
|
+
interactions
|
17
|
+
operations
|
18
|
+
required_concepts
|
19
|
+
must_supports
|
20
|
+
mandatory_elements
|
21
|
+
bindings
|
22
|
+
references
|
23
|
+
tests
|
24
|
+
id
|
25
|
+
file_name
|
26
|
+
delayed_references
|
27
|
+
].freeze
|
28
|
+
|
29
|
+
ATTRIBUTES.each { |name| attr_accessor name }
|
30
|
+
|
31
|
+
def initialize(metadata)
|
32
|
+
metadata.each do |key, value|
|
33
|
+
raise "Unknown attribute #{key}" unless ATTRIBUTES.include? key
|
34
|
+
|
35
|
+
instance_variable_set(:"@#{key}", value)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def delayed?
|
40
|
+
!['Patient', 'Claim', 'ClaimResponse'].include?(resource)
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_test(id:, file_name:)
|
44
|
+
self.tests ||= []
|
45
|
+
|
46
|
+
test_metadata = {
|
47
|
+
id:,
|
48
|
+
file_name:
|
49
|
+
}
|
50
|
+
|
51
|
+
self.tests << test_metadata
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_hash
|
55
|
+
ATTRIBUTES.each_with_object({}) { |key, hash| hash[key] = send(key) unless send(key).nil? }
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_delayed_references(delayed_profiles, ig_resources)
|
59
|
+
self.delayed_references =
|
60
|
+
references
|
61
|
+
.select { |reference| (reference[:profiles] & delayed_profiles).present? }
|
62
|
+
.map do |reference|
|
63
|
+
profile_urls = (reference[:profiles] & delayed_profiles)
|
64
|
+
delayed_resources = profile_urls.map { |url| ig_resources.resource_type_for_profile(url) }
|
65
|
+
{
|
66
|
+
path: reference[:path].gsub("#{resource}.", ''),
|
67
|
+
resources: delayed_resources
|
68
|
+
}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|