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.
- checksums.yaml +4 -4
- data/lib/carin_for_blue_button_test_kit/capability_statement/tests/instantiates_test.rb +14 -15
- data/lib/carin_for_blue_button_test_kit/capability_statement/tests/json_support_test.rb +0 -1
- data/lib/carin_for_blue_button_test_kit/client/v2.0.0/c4bb_client_test_suite.rb +14 -0
- data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/client_claims_data_attestation_test.rb +2 -2
- data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/insurer_same_test.rb +74 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/outcome_complete_test.rb +32 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/v2.0.0/eob/type_data_absent_test.rb +41 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/authentication.rb +30 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/last_updated.rb +31 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_absent_reason.rb +26 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_display.rb +26 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client/must_support_missing.rb +27 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_client.rb +25 -0
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/00_authorization_group.rb +15 -0
- 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
- 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
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/01_must_support_group.rb +19 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/03_eob_group.rb +25 -0
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/04_eob_inpatient_group.rb +13 -0
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/05_eob_outpatient_group.rb +13 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/06_eob_oral_group.rb +23 -0
- 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
- 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
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/07_eob_pharmacy_group.rb +19 -0
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/08_eob_nonclinician_group.rb +13 -0
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/09_organization_group.rb +12 -0
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/10_practitioner_group.rb +10 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/adjudication_amount.rb +38 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/amount_calculations.rb +69 -0
- 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
- 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
- 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
- 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
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/licensing.rb +33 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group/meta_lastupdated.rb +46 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server/11_crosscutting_group.rb +24 -0
- data/lib/carin_for_blue_button_test_kit/custom_groups/visual_inspection_and_attestation/v200_server.rb +37 -0
- data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/c4bb_test_suite.rb +2 -0
- data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/c4bb_test_suite.rb +20 -2
- data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/eob_group.rb +6 -0
- data/lib/carin_for_blue_button_test_kit/generated/v2.0.0-dev-nonfinancial/c4bb_test_suite.rb +8 -0
- data/lib/carin_for_blue_button_test_kit/generator/suite_generator.rb +1 -1
- data/lib/carin_for_blue_button_test_kit/generator/templates/group.rb.erb +7 -1
- data/lib/carin_for_blue_button_test_kit/generator/templates/suite.rb.erb +21 -1
- 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
- data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v110_requirements_coverage.csv +1 -0
- data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200_client_requirements_coverage.csv +47 -0
- 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
- data/lib/carin_for_blue_button_test_kit/requirements/generated/c4bb_v200devnonfinancial_requirements_coverage.csv +244 -0
- data/lib/carin_for_blue_button_test_kit/requirements/hl7.fhir.us.carin-bb_2.0.0_reqs.xlsx +0 -0
- data/lib/carin_for_blue_button_test_kit/version.rb +2 -2
- data/lib/carin_for_blue_button_test_kit.rb +0 -1
- metadata +80 -15
- data/lib/carin_for_blue_button_test_kit/requirements/carin-for-blue-button-test-kit_out_of_scope_requirements.csv +0 -68
- data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +0 -22
- data/lib/inferno_requirements_tools/rake/rakefile_template +0 -31
- data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +0 -284
- data/lib/requirements_config.yaml +0 -17
@@ -1,68 +0,0 @@
|
|
1
|
-
Req Set,ID,Reason,Details
|
2
|
-
hl7.fhir.us.carin-bb_2.0.0,7,Not Verifiable,Can't know if the Health Plan API actor knows the precise reason for the absence of data
|
3
|
-
hl7.fhir.us.carin-bb_2.0.0,15,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
4
|
-
hl7.fhir.us.carin-bb_2.0.0,16,Not Verifiable,Nothing to verify
|
5
|
-
hl7.fhir.us.carin-bb_2.0.0,18,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
6
|
-
hl7.fhir.us.carin-bb_2.0.0,20,Not Verifiable,Cannot know if the a business value is an exact match or not
|
7
|
-
hl7.fhir.us.carin-bb_2.0.0,21,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
8
|
-
hl7.fhir.us.carin-bb_2.0.0,22,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
9
|
-
hl7.fhir.us.carin-bb_2.0.0,23,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
10
|
-
hl7.fhir.us.carin-bb_2.0.0,24,Not Verifiable,Doesn't specify where the descriptions would be provided.
|
11
|
-
hl7.fhir.us.carin-bb_2.0.0,25,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
12
|
-
hl7.fhir.us.carin-bb_2.0.0,26,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
13
|
-
hl7.fhir.us.carin-bb_2.0.0,27,Not Verifiable,This is a description of the CPCDS dataset rather than a requirement specification for an implementer.
|
14
|
-
hl7.fhir.us.carin-bb_2.0.0,29,Not Verifiable,This defines a mapping not a requirement on the Health Plan.
|
15
|
-
hl7.fhir.us.carin-bb_2.0.0,49,Not Verifiable,"""Proper"" undefined"
|
16
|
-
hl7.fhir.us.carin-bb_2.0.0,50,Not Verifiable,"""Appropriately secured"" undefined"
|
17
|
-
hl7.fhir.us.carin-bb_2.0.0,52,Not Verifiable,We can't know agreements between trading partners
|
18
|
-
hl7.fhir.us.carin-bb_2.0.0,59,Not Tested,"""should consider"" not strong enough to warrant testing."
|
19
|
-
hl7.fhir.us.carin-bb_2.0.0,82,Not Tested,"Maybe - It's a ""MAY"" requirement but I think the criteria will turn it into a ""SHALL"" requirement."
|
20
|
-
hl7.fhir.us.carin-bb_2.0.0,84,Not Verifiable,Doesn't specify where and how these will be recorded so they are not verifiable.
|
21
|
-
hl7.fhir.us.carin-bb_2.0.0,85,Not Verifiable,"Unclear wth ""IG related data"" is"
|
22
|
-
hl7.fhir.us.carin-bb_2.0.0,88,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
23
|
-
hl7.fhir.us.carin-bb_2.0.0,91,Not Verifiable,Cannot know what data was effective at what time
|
24
|
-
hl7.fhir.us.carin-bb_2.0.0,92,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
25
|
-
hl7.fhir.us.carin-bb_2.0.0,93,Not Verifiable,Cannot know when data was last changed
|
26
|
-
hl7.fhir.us.carin-bb_2.0.0,94,Not Verifiable,Cannot verify the internal of an app
|
27
|
-
hl7.fhir.us.carin-bb_2.0.0,96,Not Verifiable,Overly broad
|
28
|
-
hl7.fhir.us.carin-bb_2.0.0,104,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
29
|
-
hl7.fhir.us.carin-bb_2.0.0,106,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
30
|
-
hl7.fhir.us.carin-bb_2.0.0,107,Not Verifiable,MAY requirement
|
31
|
-
hl7.fhir.us.carin-bb_2.0.0,118,Not Verifiable,Can't know externally if the explanationofbenefit adjusts a prior explanationofbenefit
|
32
|
-
hl7.fhir.us.carin-bb_2.0.0,119,Not Verifiable,Can't know externally if this explanationofbenefit has been adjusted by another
|
33
|
-
hl7.fhir.us.carin-bb_2.0.0,120,Not Verifiable,Can't externally know the order of explanationofbenefit adjustments
|
34
|
-
hl7.fhir.us.carin-bb_2.0.0,121,Not Verifiable,Cannot test how client apps do look ups
|
35
|
-
hl7.fhir.us.carin-bb_2.0.0,122,Not Verifiable,Cannot confirm if client apps assign value to something
|
36
|
-
hl7.fhir.us.carin-bb_2.0.0,123,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
37
|
-
hl7.fhir.us.carin-bb_2.0.0,126,Not Verifiable,There's no point in checking that maybe something exists that could exist.
|
38
|
-
hl7.fhir.us.carin-bb_2.0.0,130,Not Verifiable,Cannot know if a payer has line item amoutns
|
39
|
-
hl7.fhir.us.carin-bb_2.0.0,131,Not Verifiable,Cannot know if a payer has line item amoutns
|
40
|
-
hl7.fhir.us.carin-bb_2.0.0,132,Not Verifiable,Cannot know if a payer has line item amoutns
|
41
|
-
hl7.fhir.us.carin-bb_2.0.0,137,Not Verifiable,Cannot confirm if client apps assign value to something
|
42
|
-
hl7.fhir.us.carin-bb_2.0.0,138,Not Verifiable,Cannot confirm how a client uses values
|
43
|
-
hl7.fhir.us.carin-bb_2.0.0,139,Not Verifiable,Cannot confirm if client apps assign value to something
|
44
|
-
hl7.fhir.us.carin-bb_2.0.0,140,Not Verifiable,Cannot confirm how a client uses values
|
45
|
-
hl7.fhir.us.carin-bb_2.0.0,143,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
46
|
-
hl7.fhir.us.carin-bb_2.0.0,147,Not Verifiable,Cannot confirm how a client uses values
|
47
|
-
hl7.fhir.us.carin-bb_2.0.0,148,Not Verifiable,Service facility is an organization. Provider and care team are practitioners. They definitely won't be referencing the same objects. Can't compare `id`s as these are internal identifiers. More global identifiers like NPI are not required. So we don't have a way to compare these fields.
|
48
|
-
hl7.fhir.us.carin-bb_2.0.0,149,Not Verifiable,There's no `.diagnosisSequence` on `.item`. This is likely a typo.
|
49
|
-
hl7.fhir.us.carin-bb_2.0.0,154,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
50
|
-
hl7.fhir.us.carin-bb_2.0.0,155,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
51
|
-
hl7.fhir.us.carin-bb_2.0.0,166,Not Verifiable,Cannot know how clients interpret data.
|
52
|
-
hl7.fhir.us.carin-bb_2.0.0,167,Not Verifiable,Cannot know how clients interpret data.
|
53
|
-
hl7.fhir.us.carin-bb_2.0.0,169,Not Verifiable,Unclear if this should *only* be populated if it's different
|
54
|
-
hl7.fhir.us.carin-bb_2.0.0,174,Not Verifiable,"This is a definition, not a requirement."
|
55
|
-
hl7.fhir.us.carin-bb_2.0.0,176,Not Verifiable,Cannot know when data was in effect
|
56
|
-
hl7.fhir.us.carin-bb_2.0.0,180,Not Verifiable,Cannot confirm how a client uses values
|
57
|
-
hl7.fhir.us.carin-bb_2.0.0,181,Not Verifiable,Business rule that we cannot verify
|
58
|
-
hl7.fhir.us.carin-bb_2.0.0,182,Not Verifiable,Cannot know
|
59
|
-
hl7.fhir.us.carin-bb_2.0.0,184,Not Verifiable,Cannot confirm how a client uses values
|
60
|
-
hl7.fhir.us.carin-bb_2.0.0,185,Not Verifiable,Cannot know
|
61
|
-
hl7.fhir.us.carin-bb_2.0.0,188,Not Verifiable,Cannot confirm how a client uses values
|
62
|
-
hl7.fhir.us.carin-bb_2.0.0,190,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
63
|
-
hl7.fhir.us.carin-bb_2.0.0,191,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
64
|
-
hl7.fhir.us.carin-bb_2.0.0,192,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
65
|
-
hl7.fhir.us.carin-bb_2.0.0,193,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
66
|
-
hl7.fhir.us.carin-bb_2.0.0,194,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
67
|
-
hl7.fhir.us.carin-bb_2.0.0,195,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
68
|
-
hl7.fhir.us.carin-bb_2.0.0,196,Not Verifiable,Appears to be business logic not a calculation that we can confirm
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Inferno
|
2
|
-
module DSL
|
3
|
-
# This module contains the DSL for defining child entities in the test
|
4
|
-
# definition framework.
|
5
|
-
module Runnable
|
6
|
-
# Set/Get the IDs of requirements verifed by this runnable
|
7
|
-
# Set with [] to clear the list
|
8
|
-
#
|
9
|
-
# @param requirements [Array<String>]
|
10
|
-
# @return [Array<String>] the requirement IDs
|
11
|
-
def verifies_requirements(*requirement_ids)
|
12
|
-
if requirement_ids.empty?
|
13
|
-
@requirement_ids || []
|
14
|
-
elsif requirement_ids == [[]]
|
15
|
-
@requirement_ids = []
|
16
|
-
else
|
17
|
-
@requirement_ids = requirement_ids
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
namespace :requirements do
|
2
|
-
desc 'Generate requirements coverage CSV'
|
3
|
-
task :generate_coverage do
|
4
|
-
require 'inferno'
|
5
|
-
Inferno::Application.start(:suites)
|
6
|
-
|
7
|
-
require_relative 'lib/inferno_requirements_tools/tasks/requirements_coverage'
|
8
|
-
InfernoRequirementsTools::Tasks::RequirementsCoverage.new.run
|
9
|
-
end
|
10
|
-
|
11
|
-
desc 'Check if requirements coverage CSV is up-to-date'
|
12
|
-
task :check_coverage do
|
13
|
-
require 'inferno'
|
14
|
-
Inferno::Application.start(:suites)
|
15
|
-
|
16
|
-
require_relative 'lib/inferno_requirements_tools/tasks/requirements_coverage'
|
17
|
-
InfernoRequirementsTools::Tasks::RequirementsCoverage.new.run_check
|
18
|
-
end
|
19
|
-
|
20
|
-
desc 'Collect requirements and planned not tested requirements into CSVs'
|
21
|
-
task :collect, [:requirements_dir, :test_kit_dir] => [] do |_t, args|
|
22
|
-
require_relative 'lib/inferno_requirements_tools/tasks/collect_requirements'
|
23
|
-
InfernoRequirementsTools::Tasks::CollectRequirements.run(args.requirements_dir, args.test_kit_dir)
|
24
|
-
end
|
25
|
-
|
26
|
-
desc 'Check if requirements and planned not tested CSVs are up-to-date'
|
27
|
-
task :check_collection, [:requirements_dir, :test_kit_dir] => [] do |_t, args|
|
28
|
-
require_relative 'lib/inferno_requirements_tools/tasks/collect_requirements'
|
29
|
-
InfernoRequirementsTools::Tasks::CollectRequirements.check(args.requirements_dir, args.test_kit_dir)
|
30
|
-
end
|
31
|
-
end
|
@@ -1,284 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'csv'
|
4
|
-
require 'yaml'
|
5
|
-
require_relative '../ext/inferno_core/runnable'
|
6
|
-
|
7
|
-
module InfernoRequirementsTools
|
8
|
-
module Tasks
|
9
|
-
# This class manages the mapping of test kit tests to requirements that they verify
|
10
|
-
# and creates a CSV file with the tests that cover each requirement.
|
11
|
-
# It expects a CSV file in the repo at `lib/[test kit id]/requirements/[test kit id]_requirements.csv`
|
12
|
-
# that serves as the source of the requirement set for the test kit. The requirements in
|
13
|
-
# this files are identified by a requirement set and an id and tests, groups, and suites
|
14
|
-
# within in the test kit can claim that they verify a requirement by including a reference
|
15
|
-
# to that requirementin the form <requirement set>@<id> in their `verifies_requirements` field.
|
16
|
-
# Requirements that are out of scope can be listed in a companion file
|
17
|
-
# `lib/[test kit id]/requirements/[test kit id]_out_of_scope_requirements.csv`.
|
18
|
-
#
|
19
|
-
# The `run` method generates a CSV file at
|
20
|
-
# `lib/[test kit id]/requirements/generated/[test kit id]_requirements_coverage.csv``.
|
21
|
-
# This file will be identical to the input spreadsheet, plus an additional column which holds a comma separated
|
22
|
-
# list of inferno test IDs that test each requirement. These test IDs are Inferno short form IDs that represent the
|
23
|
-
# position of the test within its group and suite. For example, the fifth test in the second group will have an ID
|
24
|
-
# of 2.05. This ID is also shown in the Inferno web UI.
|
25
|
-
#
|
26
|
-
# The `run_check` method will check whether the previously generated file is up-to-date.
|
27
|
-
class RequirementsCoverage
|
28
|
-
VERSION = '0.2.0' # update when making meaningful changes to this method for tracking used versions
|
29
|
-
CONFIG = YAML.load_file(File.join('lib', 'requirements_config.yaml'))
|
30
|
-
|
31
|
-
TEST_KIT_ID = CONFIG['test_kit_id']
|
32
|
-
TEST_SUITES = CONFIG['suites'].map do |test_suite|
|
33
|
-
Object.const_get(test_suite['class_name'])
|
34
|
-
end
|
35
|
-
|
36
|
-
SUITE_ID_TO_ACTOR_MAP = CONFIG['suites'].each_with_object({}) do |test_suite, hash|
|
37
|
-
hash[test_suite['id']] = test_suite['suite_actor']
|
38
|
-
end
|
39
|
-
|
40
|
-
# Derivative constants
|
41
|
-
TEST_KIT_CODE_FOLDER = TEST_KIT_ID
|
42
|
-
DASHERIZED_TEST_KIT_ID = TEST_KIT_ID.gsub('_', '-')
|
43
|
-
INPUT_HEADERS = [
|
44
|
-
'Req Set',
|
45
|
-
'ID',
|
46
|
-
'URL',
|
47
|
-
'Requirement',
|
48
|
-
'Conformance',
|
49
|
-
'Actor',
|
50
|
-
'Sub-Requirement(s)',
|
51
|
-
'Conditionality'
|
52
|
-
].freeze
|
53
|
-
SHORT_ID_HEADER = 'Short ID(s)'
|
54
|
-
FULL_ID_HEADER = 'Full ID(s)'
|
55
|
-
INPUT_FILE_NAME = "#{DASHERIZED_TEST_KIT_ID}_requirements.csv".freeze
|
56
|
-
INPUT_FILE = File.join('lib', TEST_KIT_CODE_FOLDER, 'requirements', INPUT_FILE_NAME).freeze
|
57
|
-
NOT_TESTED_FILE_NAME = "#{DASHERIZED_TEST_KIT_ID}_out_of_scope_requirements.csv".freeze
|
58
|
-
NOT_TESTED_FILE = File.join('lib', TEST_KIT_CODE_FOLDER, 'requirements', NOT_TESTED_FILE_NAME).freeze
|
59
|
-
OUTPUT_HEADERS = INPUT_HEADERS + TEST_SUITES.flat_map do |suite|
|
60
|
-
["#{suite.title} #{SHORT_ID_HEADER}", "#{suite.title} #{FULL_ID_HEADER}"]
|
61
|
-
end
|
62
|
-
OUTPUT_FILE_NAME = "#{DASHERIZED_TEST_KIT_ID}_requirements_coverage.csv".freeze
|
63
|
-
OUTPUT_FILE_DIRECTORY = File.join('lib', TEST_KIT_CODE_FOLDER, 'requirements', 'generated')
|
64
|
-
OUTPUT_FILE = File.join(OUTPUT_FILE_DIRECTORY, OUTPUT_FILE_NAME).freeze
|
65
|
-
|
66
|
-
def input_rows
|
67
|
-
@input_rows ||=
|
68
|
-
CSV.parse(File.open(INPUT_FILE, 'r:bom|utf-8'), headers: true).map do |row|
|
69
|
-
row.to_h.slice(*INPUT_HEADERS)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def not_tested_requirements_map
|
74
|
-
@not_tested_requirements_map ||= load_not_tested_requirements
|
75
|
-
end
|
76
|
-
|
77
|
-
def load_not_tested_requirements
|
78
|
-
return {} unless File.exist?(NOT_TESTED_FILE)
|
79
|
-
|
80
|
-
not_tested_requirements = {}
|
81
|
-
CSV.parse(File.open(NOT_TESTED_FILE, 'r:bom|utf-8'), headers: true).each do |row|
|
82
|
-
row_hash = row.to_h
|
83
|
-
not_tested_requirements["#{row_hash['Req Set']}@#{row_hash['ID']}"] = row_hash
|
84
|
-
end
|
85
|
-
|
86
|
-
not_tested_requirements
|
87
|
-
end
|
88
|
-
|
89
|
-
# Of the form:
|
90
|
-
# {
|
91
|
-
# 'req-id-1': [
|
92
|
-
# { short_id: 'short-id-1', full_id: 'long-id-1', suite_id: 'suite-id-1' },
|
93
|
-
# { short_id: 'short-id-2', full_id: 'long-id-2', suite_id: 'suite-id-2' }
|
94
|
-
# ],
|
95
|
-
# 'req-id-2': [{ short_id: 'short-id-3', full_id: 'long-id-3', suite_id: 'suite-id-3' }],
|
96
|
-
# ...
|
97
|
-
# }
|
98
|
-
def inferno_requirements_map
|
99
|
-
@inferno_requirements_map ||= TEST_SUITES.each_with_object({}) do |suite, requirements_map|
|
100
|
-
serialize_requirements(suite, 'suite', suite.id, requirements_map)
|
101
|
-
suite.groups.each do |group|
|
102
|
-
map_group_requirements(group, suite.id, requirements_map)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def new_csv
|
108
|
-
@new_csv ||=
|
109
|
-
CSV.generate(+"\xEF\xBB\xBF") do |csv|
|
110
|
-
csv << OUTPUT_HEADERS
|
111
|
-
input_rows.each do |row| # NOTE: use row order from source file
|
112
|
-
next if row['Conformance'] == 'DEPRECATED' # filter out deprecated rows
|
113
|
-
|
114
|
-
TEST_SUITES.each do |suite|
|
115
|
-
suite_actor = SUITE_ID_TO_ACTOR_MAP[suite.id]
|
116
|
-
if row['Actor']&.include?(suite_actor)
|
117
|
-
add_suite_tests_for_row(row, suite)
|
118
|
-
else
|
119
|
-
row["#{suite.title} #{SHORT_ID_HEADER}"] = 'NA'
|
120
|
-
row["#{suite.title} #{FULL_ID_HEADER}"] = 'NA'
|
121
|
-
end
|
122
|
-
end
|
123
|
-
csv << row.values
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def add_suite_tests_for_row(row, suite)
|
129
|
-
set_and_req_id = "#{row['Req Set']}@#{row['ID']}"
|
130
|
-
items = get_items_for_requirement(set_and_req_id, suite)
|
131
|
-
short_ids = items[0]
|
132
|
-
full_ids = items[1]
|
133
|
-
if short_ids.blank? && not_tested_requirements_map.key?(set_and_req_id)
|
134
|
-
row["#{suite.title} #{SHORT_ID_HEADER}"] = 'Not Tested'
|
135
|
-
row["#{suite.title} #{FULL_ID_HEADER}"] = 'Not Tested'
|
136
|
-
else
|
137
|
-
row["#{suite.title} #{SHORT_ID_HEADER}"] = short_ids&.join(', ')
|
138
|
-
row["#{suite.title} #{FULL_ID_HEADER}"] = full_ids&.join(', ')
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def get_items_for_requirement(set_and_req_id, suite)
|
143
|
-
suite_requirement_items = inferno_requirements_map[set_and_req_id]&.filter do |item|
|
144
|
-
item[:suite_id] == suite.id
|
145
|
-
end
|
146
|
-
[
|
147
|
-
suite_requirement_items&.map { |item| item[:short_id] },
|
148
|
-
suite_requirement_items&.map { |item| item[:full_id] }
|
149
|
-
]
|
150
|
-
end
|
151
|
-
|
152
|
-
def input_requirement_ids
|
153
|
-
@input_requirement_ids ||= input_rows.map { |row| "#{row['Req Set']}@#{row['ID']}" }
|
154
|
-
end
|
155
|
-
|
156
|
-
# The requirements present in Inferno that aren't in the input spreadsheet
|
157
|
-
def unmatched_requirements_map
|
158
|
-
@unmatched_requirements_map ||= inferno_requirements_map.except(*input_requirement_ids)
|
159
|
-
end
|
160
|
-
|
161
|
-
def old_csv
|
162
|
-
@old_csv ||= File.read(OUTPUT_FILE)
|
163
|
-
end
|
164
|
-
|
165
|
-
def run
|
166
|
-
unless File.exist?(INPUT_FILE)
|
167
|
-
puts "Could not find input file: #{INPUT_FILE}. Aborting requirements coverage generation..."
|
168
|
-
exit(1)
|
169
|
-
end
|
170
|
-
|
171
|
-
if unmatched_requirements_map.any?
|
172
|
-
puts "WARNING: The following requirements indicated in the test kit are not present in #{INPUT_FILE_NAME}"
|
173
|
-
output_requirements_map_table(unmatched_requirements_map)
|
174
|
-
end
|
175
|
-
|
176
|
-
if File.exist?(OUTPUT_FILE)
|
177
|
-
if old_csv == new_csv
|
178
|
-
puts "'#{OUTPUT_FILE_NAME}' file is up to date."
|
179
|
-
return
|
180
|
-
else
|
181
|
-
puts 'Requirements coverage has changed.'
|
182
|
-
end
|
183
|
-
else
|
184
|
-
puts "No existing #{OUTPUT_FILE_NAME}."
|
185
|
-
end
|
186
|
-
|
187
|
-
puts "Writing to file #{OUTPUT_FILE}..."
|
188
|
-
FileUtils.mkdir_p(OUTPUT_FILE_DIRECTORY)
|
189
|
-
File.write(OUTPUT_FILE, new_csv)
|
190
|
-
puts 'Done.'
|
191
|
-
end
|
192
|
-
|
193
|
-
def run_check
|
194
|
-
unless File.exist?(INPUT_FILE)
|
195
|
-
puts "Could not find input file: #{INPUT_FILE}. Aborting requirements coverage check..."
|
196
|
-
exit(1)
|
197
|
-
end
|
198
|
-
|
199
|
-
if unmatched_requirements_map.any?
|
200
|
-
puts "The following requirements indicated in the test kit are not present in #{INPUT_FILE_NAME}"
|
201
|
-
output_requirements_map_table(unmatched_requirements_map)
|
202
|
-
end
|
203
|
-
|
204
|
-
if File.exist?(OUTPUT_FILE)
|
205
|
-
if old_csv == new_csv
|
206
|
-
puts "'#{OUTPUT_FILE_NAME}' file is up to date."
|
207
|
-
return unless unmatched_requirements_map.any?
|
208
|
-
else
|
209
|
-
puts <<~MESSAGE
|
210
|
-
#{OUTPUT_FILE_NAME} file is out of date.
|
211
|
-
To regenerate the file, run:
|
212
|
-
|
213
|
-
bundle exec rake requirements:generate_coverage
|
214
|
-
|
215
|
-
MESSAGE
|
216
|
-
end
|
217
|
-
else
|
218
|
-
puts <<~MESSAGE
|
219
|
-
No existing #{OUTPUT_FILE_NAME} file.
|
220
|
-
To generate the file, run:
|
221
|
-
|
222
|
-
bundle exec rake requirements:generate_coverage
|
223
|
-
|
224
|
-
MESSAGE
|
225
|
-
end
|
226
|
-
|
227
|
-
puts 'Check failed.'
|
228
|
-
exit(1)
|
229
|
-
end
|
230
|
-
|
231
|
-
def map_group_requirements(group, suite_id, requirements_map)
|
232
|
-
serialize_requirements(group, group.short_id, suite_id, requirements_map)
|
233
|
-
group.tests&.each { |test| serialize_requirements(test, test.short_id, suite_id, requirements_map) }
|
234
|
-
group.groups&.each { |subgroup| map_group_requirements(subgroup, suite_id, requirements_map) }
|
235
|
-
end
|
236
|
-
|
237
|
-
def serialize_requirements(runnable, short_id, suite_id, requirements_map)
|
238
|
-
runnable.verifies_requirements&.each do |requirement_id|
|
239
|
-
requirement_id_string = requirement_id.to_s
|
240
|
-
|
241
|
-
requirements_map[requirement_id_string] ||= []
|
242
|
-
requirements_map[requirement_id_string] << { short_id:, full_id: runnable.id, suite_id: }
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
# Output the requirements in the map like so:
|
247
|
-
#
|
248
|
-
# requirement_id | short_id | full_id
|
249
|
-
# ---------------+------------+----------
|
250
|
-
# req-id-1 | short-id-1 | full-id-1
|
251
|
-
# req-id-2 | short-id-2 | full-id-2
|
252
|
-
#
|
253
|
-
def output_requirements_map_table(requirements_map)
|
254
|
-
headers = %w[requirement_id short_id full_id]
|
255
|
-
col_widths = headers.map(&:length)
|
256
|
-
col_widths[0] = [col_widths[0], requirements_map.keys.map(&:length).max].max
|
257
|
-
col_widths[1] = ([col_widths[1]] + requirements_map.values.flatten.map { |item| item[:short_id].length }).max
|
258
|
-
col_widths[2] = ([col_widths[2]] + requirements_map.values.flatten.map { |item| item[:full_id].length }).max
|
259
|
-
col_widths.map { |width| width + 3 }
|
260
|
-
|
261
|
-
puts [
|
262
|
-
headers[0].ljust(col_widths[0]),
|
263
|
-
headers[1].ljust(col_widths[1]),
|
264
|
-
headers[2].ljust(col_widths[2])
|
265
|
-
].join(' | ')
|
266
|
-
puts col_widths.map { |width| '-' * width }.join('-+-')
|
267
|
-
output_requirements_map_table_contents(requirements_map, col_widths)
|
268
|
-
puts
|
269
|
-
end
|
270
|
-
|
271
|
-
def output_requirements_map_table_contents(requirements_map, col_widths)
|
272
|
-
requirements_map.each do |requirement_id, runnables|
|
273
|
-
runnables.each do |runnable|
|
274
|
-
puts [
|
275
|
-
requirement_id.ljust(col_widths[0]),
|
276
|
-
runnable[:short_id].ljust(col_widths[1]),
|
277
|
-
runnable[:full_id].ljust(col_widths[2])
|
278
|
-
].join(' | ')
|
279
|
-
end
|
280
|
-
end
|
281
|
-
end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
test_kit_id: carin_for_blue_button_test_kit
|
2
|
-
|
3
|
-
suites:
|
4
|
-
- id: c4bb_v200_client
|
5
|
-
class_name: CarinForBlueButtonTestKit::C4BBV200ClientSuite
|
6
|
-
suite_actor: Consumer
|
7
|
-
- id: c4bb_v200
|
8
|
-
class_name: CarinForBlueButtonTestKit::CARIN4BBV200::C4BBTestSuite
|
9
|
-
suite_actor: Health Plan
|
10
|
-
|
11
|
-
requirement_sets:
|
12
|
-
- id: hl7.fhir.us.carin-bb_2.0.0
|
13
|
-
folder: Carin 4 BB
|
14
|
-
requirements: All
|
15
|
-
actor_map:
|
16
|
-
- {spec: Consumer, test_kit: Consumer}
|
17
|
-
- {spec: Health Plan, test_kit: Health Plan}
|