carin_for_blue_button_test_kit 0.15.1 → 0.15.3

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/instantiates_test.rb +14 -15
  3. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/json_support_test.rb +0 -1
  4. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/c4bb_client_test_suite.rb +14 -0
  5. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/client_claims_data_attestation_test.rb +2 -2
  6. data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/insurer_same_test.rb +74 -0
  7. data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/outcome_complete_test.rb +32 -0
  8. data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/type_data_absent_test.rb +41 -0
  9. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/authentication.rb +30 -0
  10. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/last_updated.rb +31 -0
  11. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_absent_reason.rb +26 -0
  12. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_display.rb +26 -0
  13. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_missing.rb +27 -0
  14. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client.rb +25 -0
  15. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group/attestation_test_requirement_48.rb +50 -0
  16. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group/attestation_test_requirement_60.rb +48 -0
  17. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group/attestation_test_requirement_97.rb +41 -0
  18. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group.rb +15 -0
  19. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group/attestation_test_requirement_10.rb +26 -0
  20. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group/attestation_test_requirement_2.rb +29 -0
  21. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group/attestation_test_requirement_5.rb +29 -0
  22. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group/attestation_test_requirement_7.rb +30 -0
  23. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group/attestation_test_requirement_9.rb +26 -0
  24. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group.rb +19 -0
  25. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_105.rb +29 -0
  26. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_108.rb +29 -0
  27. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_115.rb +24 -0
  28. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_116.rb +30 -0
  29. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_118.rb +31 -0
  30. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_119.rb +31 -0
  31. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_120.rb +29 -0
  32. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group/attestation_test_requirement_124.rb +38 -0
  33. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group.rb +25 -0
  34. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/04_eob_inpatient_group/attestation_test_requirement_130.rb +29 -0
  35. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/04_eob_inpatient_group/attestation_test_requirement_132.rb +27 -0
  36. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/04_eob_inpatient_group.rb +13 -0
  37. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/05_eob_outpatient_group/attestation_test_requirement_156.rb +28 -0
  38. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/05_eob_outpatient_group/attestation_test_requirement_157.rb +33 -0
  39. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/05_eob_outpatient_group.rb +13 -0
  40. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_144.rb +33 -0
  41. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_148.rb +29 -0
  42. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_149.rb +27 -0
  43. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_150.rb +29 -0
  44. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_151.rb +27 -0
  45. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_152.rb +29 -0
  46. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group/attestation_test_requirement_153.rb +31 -0
  47. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group.rb +23 -0
  48. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group/attestation_test_requirement_161.rb +27 -0
  49. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group/attestation_test_requirement_162.rb +27 -0
  50. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group/attestation_test_requirement_163.rb +27 -0
  51. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group/attestation_test_requirement_164.rb +25 -0
  52. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group/attestation_test_requirement_165.rb +27 -0
  53. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group.rb +19 -0
  54. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/08_eob_nonclinician_group/attestation_test_requirement_168_170.rb +29 -0
  55. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/08_eob_nonclinician_group/attestation_test_requirement_173.rb +29 -0
  56. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/08_eob_nonclinician_group.rb +13 -0
  57. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/09_organization_group/attestation_test_requirement_177.rb +29 -0
  58. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/09_organization_group/attestation_test_requirement_178.rb +27 -0
  59. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/09_organization_group.rb +12 -0
  60. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/10_practitioner_group/attestation_test_requirement_186.rb +27 -0
  61. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/10_practitioner_group.rb +10 -0
  62. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/adjudication_amount.rb +38 -0
  63. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/amount_calculations.rb +69 -0
  64. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/attestation_test_requirement_19.rb +27 -0
  65. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/attestation_test_requirement_28.rb +26 -0
  66. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/attestation_test_requirement_99.rb +26 -0
  67. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/coverage_reference_resource.rb +31 -0
  68. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/licensing.rb +33 -0
  69. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/meta_lastupdated.rb +46 -0
  70. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group.rb +24 -0
  71. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server.rb +37 -0
  72. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/c4bb_test_suite.rb +2 -0
  73. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/c4bb_test_suite.rb +20 -2
  74. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/eob_group.rb +6 -0
  75. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0-dev-nonfinancial/c4bb_test_suite.rb +8 -0
  76. data/lib/carin_for_blue_button_test_kit/generator/suite_generator.rb +1 -1
  77. data/lib/carin_for_blue_button_test_kit/generator/templates/group.rb.erb +7 -1
  78. data/lib/carin_for_blue_button_test_kit/generator/templates/suite.rb.erb +21 -1
  79. data/lib/carin_for_blue_button_test_kit/requirements/{carin-for-blue-button-test-kit_requirements.csv → carin_for_blue_button_test_kit_requirements.csv} +198 -198
  80. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v110_requirements_coverage.csv +1 -0
  81. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200_client_requirements_coverage.csv +47 -0
  82. data/lib/carin_for_blue_button_test_kit/requirements/generated/{carin-for-blue-button-test-kit_requirements_coverage.csv → c4bb_v200_requirements_coverage.csv} +156 -190
  83. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200devnonfinancial_requirements_coverage.csv +244 -0
  84. data/lib/carin_for_blue_button_test_kit/requirements/hl7.fhir.us.carin-bb_2.0.0_reqs.xlsx +0 -0
  85. data/lib/carin_for_blue_button_test_kit/version.rb +2 -2
  86. data/lib/carin_for_blue_button_test_kit.rb +0 -1
  87. metadata +80 -15
  88. data/lib/carin_for_blue_button_test_kit/requirements/carin-for-blue-button-test-kit_out_of_scope_requirements.csv +0 -68
  89. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +0 -22
  90. data/lib/inferno_requirements_tools/rake/rakefile_template +0 -31
  91. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +0 -284
  92. data/lib/requirements_config.yaml +0 -17
@@ -0,0 +1,29 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement150 < Inferno::Test
3
+ title 'Uses procedure codes not revenue codes'
4
+ description <<~DESCRIPTION
5
+ The `item.productOrService` element in an oral ExplanationOfBenefit resource
6
+ is populated with CPT or HCPCS procedure codes as CodeableConcept values, and that revenue
7
+ codes are not used for oral claims.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_150_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@150'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that the `item.productOrService` element in an oral ExplanationOfBenefit resource
19
+ is populated with CPT or HCPCS procedure codes as CodeableConcept values, and that revenue
20
+ codes are not used for oral claims.
21
+
22
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
23
+
24
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
25
+ MESSAGE
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement151 < Inferno::Test
3
+ title 'Specifies primary body site'
4
+ description <<~DESCRIPTION
5
+ The primary body site for each line item (tooth or oral cavity) is specified in the
6
+ `item.bodySite` element of the ExplanationOfBenefit resource.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_151_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@151'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that the primary body site for each line item (tooth or oral cavity) is specified in the
18
+ `item.bodySite` element of the ExplanationOfBenefit resource.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement152 < Inferno::Test
3
+ title 'Specifies additional body sites'
4
+ description <<~DESCRIPTION
5
+ Additional body sites (tooth or oral cavity) are specified in `supportingInfo[additionalbodysite]`
6
+ elements, and that each `supportingInfo[additionalbodysite].sequence` matches the associated line item's
7
+ `item.informationSequence`.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_152_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@152'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that additional body sites (tooth or oral cavity) are specified in `supportingInfo[additionalbodysite]`
19
+ elements, and that each `supportingInfo[additionalbodysite].sequence` matches the associated line item's
20
+ `item.informationSequence`.
21
+
22
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
23
+
24
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
25
+ MESSAGE
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement153 < Inferno::Test
3
+ title 'Applies oral line item subsites to associated tooth surfaces'
4
+ description <<~DESCRIPTION
5
+ All oral line item subsites (`item.subSite` repetitions) apply to all the line item's
6
+ associated tooth surfaces, including those specified in `item.bodySite` and `supportingInfo[additionalbodysite]`,
7
+ with the association established through matching `supportingInfo[additionalbodysite].sequence` values in
8
+ `item.informationSequence`.
9
+ DESCRIPTION
10
+ id :carin_server_requirement_153_attestation
11
+
12
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@153'
13
+
14
+ run do
15
+ identifier = SecureRandom.hex(32)
16
+ wait(
17
+ identifier:,
18
+ message: <<~MESSAGE
19
+ I attest that all oral line item subsites (`item.subSite` repetitions) apply to all the line item's
20
+ associated tooth surfaces, including those specified in `item.bodySite` and `supportingInfo[additionalbodysite]`,
21
+ with the association established through matching `supportingInfo[additionalbodysite].sequence` values in
22
+ `item.informationSequence`.
23
+
24
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
25
+
26
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
27
+ MESSAGE
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '06_eob_oral_group/attestation_test_requirement_144'
2
+ require_relative '06_eob_oral_group/attestation_test_requirement_148'
3
+ require_relative '06_eob_oral_group/attestation_test_requirement_149'
4
+ require_relative '06_eob_oral_group/attestation_test_requirement_150'
5
+ require_relative '06_eob_oral_group/attestation_test_requirement_151'
6
+ require_relative '06_eob_oral_group/attestation_test_requirement_152'
7
+ require_relative '06_eob_oral_group/attestation_test_requirement_153'
8
+
9
+ module CarinForBlueButtonTestKit
10
+ class CarinEOBOralAttestationGroup < Inferno::TestGroup
11
+ id :c4bb_eob_oral
12
+ title 'Explanation of Benefit - Oral'
13
+ short_title 'EOB Oral'
14
+
15
+ test from: :carin_server_requirement_144_145_146_attestation
16
+ test from: :carin_server_requirement_148_attestation
17
+ test from: :carin_server_requirement_149_attestation
18
+ test from: :carin_server_requirement_150_attestation
19
+ test from: :carin_server_requirement_151_attestation
20
+ test from: :carin_server_requirement_152_attestation
21
+ test from: :carin_server_requirement_153_attestation
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement161 < Inferno::Test
3
+ title 'Populates with an NDC code'
4
+ description <<~DESCRIPTION
5
+ When the Compound Code (MapID 78) is 0 or 1, the `item.productOrService` element is
6
+ populated with an NDC code.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_161_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@161'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that when the Compound Code (MapID 78) is 0 or 1, the `item.productOrService` element is
18
+ populated with an NDC code.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement162 < Inferno::Test
3
+ title 'Populates with "compound" and maps correctly'
4
+ description <<~DESCRIPTION
5
+ When the Compound Code is 2, the `item.productOrService` element is populated with the value
6
+ "compound" and that the ingredient information is mapped to `item.detail.productOrService.`
7
+ DESCRIPTION
8
+ id :carin_server_requirement_162_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@162'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that when the Compound Code is 2, the `item.productOrService` element is populated with the value
18
+ "compound" and that the ingredient information is mapped to `item.detail.productOrService.`
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement163 < Inferno::Test
3
+ title 'Populates with NDC code'
4
+ description <<~DESCRIPTION
5
+ Both `item.productOrService` and `item.detail.productOrService` elements are populated with
6
+ an 11-digit NDC code.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_163_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@163'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that both `item.productOrService` and `item.detail.productOrService` elements are populated with
18
+ an 11-digit NDC code.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement164 < Inferno::Test
3
+ title 'Populates "quantity" for all compound code values'
4
+ description <<~DESCRIPTION
5
+ The `item.quantity` element is populated for all Compound Code values.
6
+ DESCRIPTION
7
+ id :carin_server_requirement_164_attestation
8
+
9
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@164'
10
+
11
+ run do
12
+ identifier = SecureRandom.hex(32)
13
+ wait(
14
+ identifier:,
15
+ message: <<~MESSAGE
16
+ I attest that the `item.quantity` element is populated for all Compound Code values.
17
+
18
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
19
+
20
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
21
+ MESSAGE
22
+ )
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement165 < Inferno::Test
3
+ title 'Adds ingredient quantity information'
4
+ description <<~DESCRIPTION
5
+ When the Compound Code is 2, and ingredient quantity information is available,
6
+ it is mapped to `item.detail.quantity`.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_165_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@165'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that when the Compound Code is 2, and ingredient quantity information is available,
18
+ it is mapped to `item.detail.quantity`.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '07_eob_pharmacy_group/attestation_test_requirement_161'
2
+ require_relative '07_eob_pharmacy_group/attestation_test_requirement_162'
3
+ require_relative '07_eob_pharmacy_group/attestation_test_requirement_163'
4
+ require_relative '07_eob_pharmacy_group/attestation_test_requirement_164'
5
+ require_relative '07_eob_pharmacy_group/attestation_test_requirement_165'
6
+
7
+ module CarinForBlueButtonTestKit
8
+ class CarinEOBPharmacyAttestationGroup < Inferno::TestGroup
9
+ id :c4bb_eob_pharmacy
10
+ title 'Explanation of Benefit - Pharmacy'
11
+ short_title 'EOB Pharmacy'
12
+
13
+ test from: :carin_server_requirement_161_attestation
14
+ test from: :carin_server_requirement_162_attestation
15
+ test from: :carin_server_requirement_163_attestation
16
+ test from: :carin_server_requirement_164_attestation
17
+ test from: :carin_server_requirement_165_attestation
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement168 < Inferno::Test
3
+ title 'Sequentially numbers and properly references diagnosis.sequence'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module sequentially numbers all diagnoses at the ExplanationOfBenefit header
6
+ level using the `diagnosis.sequence` element. I further attest that each `item.diagnosisSequence` element
7
+ references the appropriate `diagnosis.sequence` number from the header-level diagnoses.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_168_170_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@168', 'hl7.fhir.us.carin-bb_2.0.0@170'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that the Health IT Module sequentially numbers all diagnoses at the ExplanationOfBenefit header
19
+ level using the `diagnosis.sequence` element. I further attest that each `item.diagnosisSequence` element
20
+ references the appropriate `diagnosis.sequence` number from the header-level diagnoses.
21
+
22
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
23
+
24
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
25
+ MESSAGE
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement173 < Inferno::Test
3
+ title 'Associates supportingInfo with line items'
4
+ description <<~DESCRIPTION
5
+ Every `supportingInfo` repetition with a Transportation Services Category code is associated
6
+ with at least one ExplanationOfBenefit line item by referencing `supportingInfo.sequence` through the
7
+ `item.informationSequence` element.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_173_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@173'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that every `supportingInfo` repetition with a Transportation Services Category code is associated
19
+ with at least one ExplanationOfBenefit line item by referencing `supportingInfo.sequence` through the
20
+ `item.informationSequence` element.
21
+
22
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
23
+
24
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
25
+ MESSAGE
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '08_eob_nonclinician_group/attestation_test_requirement_168_170'
2
+ require_relative '08_eob_nonclinician_group/attestation_test_requirement_173'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class CarinEOBNonClinicianAttestationGroup < Inferno::TestGroup
6
+ id :c4bb_eob_nonclinician
7
+ title 'Explanation of Benefit - Professional NonClinician'
8
+ short_title 'EOB Professional NonClinician'
9
+
10
+ test from: :carin_server_requirement_168_170_attestation
11
+ test from: :carin_server_requirement_173_attestation
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement177 < Inferno::Test
3
+ title 'Properly populates the NPI identifier'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module populates the Service Facility `identifier[NPI]` in the
6
+ Organization resource when assigned, and uses the value 'NPI has not been assigned' when no
7
+ NPI has been assigned to the Service Location Organization.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_177_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@177'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that the Health IT Module populates the Service Facility `identifier[NPI]` in the
19
+ Organization resource when assigned, and uses the value 'NPI has not been assigned' when no
20
+ NPI has been assigned to the Service Location Organization.
21
+
22
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
23
+
24
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
25
+ MESSAGE
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement178 < Inferno::Test
3
+ title 'Does not populate "address" when part of Billing Provider'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module does not populate the Organization resource `address` element
6
+ when the location where services were rendered is a component of the Billing Provider.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_178_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@178'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that the Health IT Module does not populate the Organization resource `address` element
18
+ when the location where services were rendered is a component of the Billing Provider.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '09_organization_group/attestation_test_requirement_177'
2
+ require_relative '09_organization_group/attestation_test_requirement_178'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class CarinOrganizationAttestationGroup < Inferno::TestGroup
6
+ id :c4bb_organization
7
+ title 'Organization'
8
+
9
+ test from: :carin_server_requirement_177_attestation
10
+ test from: :carin_server_requirement_178_attestation
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement186 < Inferno::Test
3
+ title 'Populates an identifier'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module populates the Practitioner resource with at least one identifier,
6
+ either an NPI or a Tax ID.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_186_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@186'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that the Health IT Module populates the Practitioner resource with at least one identifier,
18
+ either an NPI or a Tax ID.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ require_relative '10_practitioner_group/attestation_test_requirement_186'
2
+
3
+ module CarinForBlueButtonTestKit
4
+ class CarinPractitionerAttestationGroup < Inferno::TestGroup
5
+ id :c4bb_practitioner
6
+ title 'Practitioner'
7
+
8
+ test from: :carin_server_requirement_186_attestation
9
+ end
10
+ end
@@ -0,0 +1,38 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AdjudicationAmountTest < Inferno::Test
3
+ title 'Properly uses ".adjudication.amount"'
4
+
5
+ description <<~DESCRIPTION
6
+ For:
7
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.adjudication.amount`
8
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.adjudication.amount`
9
+
10
+ The Health IT Module must only populate `.adjudication.amount` if `.item.adjudication` is not available.
11
+ DESCRIPTION
12
+
13
+ id :adjudication_amount
14
+
15
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@142',
16
+ 'hl7.fhir.us.carin-bb_2.0.0@197'
17
+
18
+ run do
19
+ identifier = SecureRandom.hex(32)
20
+
21
+ wait(
22
+ identifier:,
23
+ message: <<~MESSAGE
24
+ For:
25
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.adjudication.amount`
26
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.adjudication.amount`
27
+
28
+ The developer of the Health IT Module attests that the Health IT Module only populates
29
+ `.adjudication.amount` if `.item.adjudication` is not available.
30
+
31
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
32
+
33
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
34
+ MESSAGE
35
+ )
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,69 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AmountCalculationTest < Inferno::Test
3
+ title 'Properly calculates "amount" fields'
4
+
5
+ description <<~DESCRIPTION
6
+ For:
7
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.total.amount`
8
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.item.adjudication.amount`
9
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.adjudication.amount`
10
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.total.amount`
11
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.item.adjudication.amount`
12
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.adjudication.amount`
13
+ - C4BB ExplanationOfBenefit Oral `.total.amount`
14
+ - C4BB ExplanationOfBenefit Oral `.item.adjudication.amount`
15
+ - C4BB ExplanationOfBenefit Professional NonClinician `.total.amount`
16
+ - C4BB ExplanationOfBenefit Professional NonClinician `.item.adjudication.amount`
17
+
18
+ The Health IT Module calculates the total amount as follows:
19
+ - Eligible amount = submitted amount - the noncovered amount - discount.
20
+
21
+ The subscriber pays the member liability = deductible + coinsurance + copay + noncovered.
22
+
23
+ (Part of the member liability may have already been paid to the provider as paidbypatient).
24
+
25
+ The eligible amount - the member liability is the payment amount to the provider (paidtoprovider) or the subscriber (paidtopatient).
26
+ DESCRIPTION
27
+
28
+ id :amount_calculations
29
+
30
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@143',
31
+ 'hl7.fhir.us.carin-bb_2.0.0@154',
32
+ 'hl7.fhir.us.carin-bb_2.0.0@155',
33
+ 'hl7.fhir.us.carin-bb_2.0.0@190',
34
+ 'hl7.fhir.us.carin-bb_2.0.0@191',
35
+ 'hl7.fhir.us.carin-bb_2.0.0@192',
36
+ 'hl7.fhir.us.carin-bb_2.0.0@193',
37
+ 'hl7.fhir.us.carin-bb_2.0.0@194',
38
+ 'hl7.fhir.us.carin-bb_2.0.0@195',
39
+ 'hl7.fhir.us.carin-bb_2.0.0@196'
40
+
41
+ run do
42
+ identifier = SecureRandom.hex(32)
43
+
44
+ wait(
45
+ identifier:,
46
+ message: <<~MESSAGE
47
+ For:
48
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.total.amount`
49
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.item.adjudication.amount`
50
+ - C4BB ExplanationOfBenefit Inpatient Institutional `.adjudication.amount`
51
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.total.amount`
52
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.item.adjudication.amount`
53
+ - C4BB ExplanationOfBenefit Outpatient Institutional `.adjudication.amount`
54
+ - C4BB ExplanationOfBenefit Oral `.total.amount`
55
+ - C4BB ExplanationOfBenefit Oral `.item.adjudication.amount`
56
+ - C4BB ExplanationOfBenefit Professional NonClinician `.total.amount`
57
+ - C4BB ExplanationOfBenefit Professional NonClinician `.item.adjudication.amount`
58
+
59
+ The developer of the Health IT Module attests that the Health IT Module calculates the total amount as follows:
60
+ - Eligible amount = submitted amount - the noncovered amount - discount.
61
+
62
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
63
+
64
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
65
+ MESSAGE
66
+ )
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,27 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement19 < Inferno::Test
3
+ title 'Uses code display string'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module ensures that when the `display` element is populated,
6
+ it contains one of the display strings defined for the associated code
7
+ in the code system.
8
+ DESCRIPTION
9
+ id :carin_server_requirement_19_attestation
10
+
11
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@19'
12
+
13
+ run do
14
+ identifier = SecureRandom.hex(32)
15
+ wait(
16
+ identifier:,
17
+ message: <<~MESSAGE
18
+ I attest that when the `display` element is populated, the Health IT Module uses a valid display string defined
19
+ for that code by the code system (which may allow multiple valid display strings).
20
+
21
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
22
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
23
+ MESSAGE
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement28 < Inferno::Test
3
+ title 'Ensures conformant CPCDS data'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module ensures that data representing the Common Payer Consumer Data Set (CPCDS)
6
+ conforms to the specified profiles, vocabulary standards, and code sets required by the specification.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_28_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@28'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that the Health IT Module ensures CPCDS data conforms to the specified profiles,
18
+ vocabulary standards, and code sets outlined in the specification.
19
+
20
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
21
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
22
+ MESSAGE
23
+ )
24
+ end
25
+ end
26
+ end