carin_for_blue_button_test_kit 0.15.1 → 0.15.2

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 (87) 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/visual_inspection_and_attestation/v200_client/authentication.rb +30 -0
  7. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/last_updated.rb +31 -0
  8. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_absent_reason.rb +26 -0
  9. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_display.rb +26 -0
  10. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_missing.rb +27 -0
  11. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client.rb +25 -0
  12. 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
  13. 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
  14. 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
  15. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group.rb +15 -0
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group.rb +19 -0
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group.rb +25 -0
  31. 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
  32. 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
  33. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/04_eob_inpatient_group.rb +13 -0
  34. 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
  35. 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
  36. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/05_eob_outpatient_group.rb +13 -0
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group.rb +23 -0
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group.rb +19 -0
  51. 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
  52. 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
  53. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/08_eob_nonclinician_group.rb +13 -0
  54. 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
  55. 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
  56. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/09_organization_group.rb +12 -0
  57. 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
  58. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/10_practitioner_group.rb +10 -0
  59. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/adjudication_amount.rb +38 -0
  60. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/amount_calculations.rb +69 -0
  61. 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
  62. 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
  63. 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
  64. 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
  65. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/licensing.rb +33 -0
  66. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/meta_lastupdated.rb +46 -0
  67. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group.rb +24 -0
  68. data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server.rb +37 -0
  69. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/c4bb_test_suite.rb +2 -0
  70. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/c4bb_test_suite.rb +20 -2
  71. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0-dev-nonfinancial/c4bb_test_suite.rb +8 -0
  72. data/lib/carin_for_blue_button_test_kit/generator/suite_generator.rb +1 -1
  73. data/lib/carin_for_blue_button_test_kit/generator/templates/suite.rb.erb +21 -1
  74. 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
  75. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v110_requirements_coverage.csv +1 -0
  76. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200_client_requirements_coverage.csv +47 -0
  77. 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
  78. data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200devnonfinancial_requirements_coverage.csv +244 -0
  79. data/lib/carin_for_blue_button_test_kit/requirements/hl7.fhir.us.carin-bb_2.0.0_reqs.xlsx +0 -0
  80. data/lib/carin_for_blue_button_test_kit/version.rb +2 -2
  81. data/lib/carin_for_blue_button_test_kit.rb +0 -1
  82. metadata +77 -15
  83. data/lib/carin_for_blue_button_test_kit/requirements/carin-for-blue-button-test-kit_out_of_scope_requirements.csv +0 -68
  84. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +0 -22
  85. data/lib/inferno_requirements_tools/rake/rakefile_template +0 -31
  86. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +0 -284
  87. data/lib/requirements_config.yaml +0 -17
@@ -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
@@ -0,0 +1,26 @@
1
+ module CarinForBlueButtonTestKit
2
+ class AttestationTestCarinV2Requirement99 < Inferno::Test
3
+ title 'Lists CARIN-BB profiles in the meta.profile of each resource'
4
+ description <<~DESCRIPTION
5
+ The Health IT Module includes the appropriate CARIN-BB profile URL(s) in the `meta.profile` field
6
+ of each FHIR resource instance it returns.
7
+ DESCRIPTION
8
+ id :carin_server_requirement_99_attestation
9
+
10
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@99'
11
+
12
+ run do
13
+ identifier = SecureRandom.hex(32)
14
+ wait(
15
+ identifier:,
16
+ message: <<~MESSAGE
17
+ I attest that each FHIR resource returned by the Health IT Module includes the appropriate
18
+ CARIN-BB profile URL(s) in the `meta.profile` element.
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
@@ -0,0 +1,31 @@
1
+ module CarinForBlueButtonTestKit
2
+ class CoverageReferenceResourceTest < Inferno::Test
3
+ title 'Returns Coverage Reference Resource with correct data'
4
+
5
+ description <<~DESCRIPTION
6
+ The Health IT Module returns the Coverage Reference Resource with data that was effective as of the date of service of the claim.#{' '}
7
+ For example, the data will reflect the employer name in effect at that time.
8
+ DESCRIPTION
9
+
10
+ id :coverage_reference_resource
11
+
12
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@87',
13
+ 'hl7.fhir.us.carin-bb_2.0.0@91',
14
+ 'hl7.fhir.us.carin-bb_2.0.0@175'
15
+
16
+ run do
17
+ identifier = SecureRandom.hex(32)
18
+
19
+ wait(
20
+ identifier:,
21
+ message: <<~MESSAGE
22
+ I attest that the Health IT Module returns the Coverage Reference Resource with data that was effective as of the date of service of the claim.
23
+
24
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
25
+
26
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
27
+ MESSAGE
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ module CarinForBlueButtonTestKit
2
+ class CarinLicensingTest < Inferno::Test
3
+ title 'Complies with licensing requirements'
4
+
5
+ description <<~DESCRIPTION
6
+ The Health IT Module abides by the license
7
+ requirements for each terminology content artifact utilized within a functioning implementation and obtained
8
+ terminology licenses from the Third-Party IP owner for each code system and/or other specified artifact used.
9
+ DESCRIPTION
10
+
11
+ id :carin_licensing_test
12
+
13
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@30',
14
+ 'hl7.fhir.us.carin-bb_2.0.0@31'
15
+
16
+ run do
17
+ identifier = SecureRandom.hex(32)
18
+
19
+ wait(
20
+ identifier:,
21
+ message: <<~MESSAGE
22
+ The developer of the Health IT Module attests that the Health IT Module abides by the license
23
+ requirements for each terminology content artifact utilized within a functioning implementation and obtained
24
+ terminology licenses from the Third-Party IP owner for each code system and/or other specified artifact used.
25
+
26
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
27
+
28
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
29
+ MESSAGE
30
+ )
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ module CarinForBlueButtonTestKit
2
+ class MetaLastUpdatedTest < Inferno::Test
3
+ title 'Properly populates ".lastUpdated"'
4
+
5
+ description <<~DESCRIPTION
6
+ For
7
+ - C4BB-Organization
8
+ - C4BB-Patient
9
+ - C4BB-Practitioner
10
+ - All reference resources within a C4BB-ExplanationOfBenefit
11
+
12
+ The Health IT Module uses `.meta.lastUpdated` to mean the last time the data was updated or the date of creation in the
13
+ payer's system of record, whichever comes last.
14
+ DESCRIPTION
15
+
16
+ id :meta_last_updated
17
+
18
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@89',
19
+ 'hl7.fhir.us.carin-bb_2.0.0@93',
20
+ 'hl7.fhir.us.carin-bb_2.0.0@179',
21
+ 'hl7.fhir.us.carin-bb_2.0.0@183',
22
+ 'hl7.fhir.us.carin-bb_2.0.0@187'
23
+
24
+ run do
25
+ identifier = SecureRandom.hex(32)
26
+
27
+ wait(
28
+ identifier:,
29
+ message: <<~MESSAGE
30
+ For
31
+ - C4BB-Organization
32
+ - C4BB-Patient
33
+ - C4BB-Practitioner
34
+
35
+ The developer of the Health IT Module attests that#{' '}
36
+ `.meta.lastUpdated` means the last time the data was updated or the date of creation in the payer's
37
+ system of record, whichever comes last.
38
+
39
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
40
+
41
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
42
+ MESSAGE
43
+ )
44
+ end
45
+ end
46
+ end