davinci_us_drug_formulary_test_kit 0.13.0 → 0.13.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 215d9603580e8b0a77e5cd1ef9095456d6d30c8876d2858a9c223128e08da49a
4
- data.tar.gz: 55c52f1fc5b4e7a52624787311e22dfecf33390d85ccd5fc75cfa52a277b8831
3
+ metadata.gz: d7a195142f074cb80ae12bf5d9db8eae59ceb023e3f224f60ae4cc84396cf27f
4
+ data.tar.gz: d7f834d476128c5f62536d66413494c1178f04ee085564b99a726c36cc9976fd
5
5
  SHA512:
6
- metadata.gz: d0a824408e61856f04c674c65286c595693f718892fe26c7a7922f160552d56e2b43d7345a543f14687e35a11940ba139c9362d8b54db303f28fb1fb94ba1bbc
7
- data.tar.gz: de7a06f843eb3f09a2ad0ed8679f956b03bccff450d89e9957353fcf2dc1105b41daaacc7cd28ce4908f64015399766e1365cb5cac54f7a358f8e120defb537d
6
+ metadata.gz: b35ee3cc954961b0e44cf44b05ba91b105b6084a9df5d17ddd6798f2af75dc9d61a72ea48063288aaba551263c3dcec110487fec13b54b1157f6a4c027f18a44
7
+ data.tar.gz: f244273234bbef34e663f844e7235757f67d0e293f0305d289a6667a50bd3b5c82b026e9f5c28b59aa0a1818b8cd65f11fc1bc551c13b5f2fe65aeae8f2dd0b2
@@ -19,22 +19,48 @@ module DaVinciUSDrugFormularyTestKit
19
19
  verifies_requirements 'hl7.fhir.us.davinci-drug-formulary_2.0.1@1',
20
20
  'hl7.fhir.us.davinci-drug-formulary_2.0.1@3'
21
21
 
22
- run do
23
- identifier = SecureRandom.hex(32)
22
+ input :usdf_v201_authenticated_api_security_options,
23
+ title: 'Protects PHI/PII in authenticated access and prevents tracking in unauthenticated access',
24
+ description: %(
25
+ The developer of the Health IT Module attests that:
26
+
27
+ - Authenticated access to formulary services containing PHI/PII is protected using authorized,
28
+ authenticated transactions in accordance with the HRex Security and Privacy framework.
29
+ - The system does **not** retain any information through unauthenticated API access that could
30
+ associate medication queries with the consumer.
31
+ ),
32
+ type: 'radio',
33
+ default: 'false',
34
+ options: {
35
+ list_options: [
36
+ {
37
+ label: 'Yes',
38
+ value: 'true'
39
+ },
40
+ {
41
+ label: 'No',
42
+ value: 'false'
43
+ }
44
+ ]
45
+ }
46
+ input :usdf_v201_authenticated_api_security_note,
47
+ title: 'Notes, if applicable:',
48
+ type: 'textarea',
49
+ optional: true
24
50
 
25
- wait(
26
- identifier:,
27
- message: <<~MESSAGE
28
- The developer of the Health IT Module attests that:
51
+ run do
52
+ assert usdf_v201_authenticated_api_security_options == 'true', %(
53
+ The following was not satisfied:
29
54
 
30
- - Authenticated access to formulary services containing PHI/PII is protected using authorized, authenticated transactions in accordance with the HRex Security and Privacy framework.
31
- - The system does **not** retain any information through unauthenticated API access that could associate medication queries with the consumer.
55
+ The Health IT Module enforces proper security and privacy handling of formulary data:
32
56
 
33
- [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
57
+ - Authenticated access to formulary services containing PHI/PII is protected using authorized, authenticated
58
+ transactions in accordance with the HRex Security and Privacy framework.
59
+ - The system does **not** retain any information through unauthenticated API access that could associate
60
+ medication queries with the consumer.
34
61
 
35
- [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
36
- MESSAGE
37
62
  )
63
+ pass usdf_v201_authenticated_api_security_note if usdf_v201_authenticated_api_security_note.present?
38
64
  end
39
65
  end
40
66
  end
@@ -16,20 +16,41 @@ module DaVinciUSDrugFormularyTestKit
16
16
 
17
17
  verifies_requirements 'hl7.fhir.us.davinci-drug-formulary_2.0.1@19'
18
18
 
19
- run do
20
- identifier = SecureRandom.hex(32)
19
+ input :usdf_v201_drug_display_name_options,
20
+ title: 'Supports drug name search using general drug form group codes and names',
21
+ description: %(
22
+ I attest that the Health IT Module supports searching for drugs using general drug form
23
+ group codes (SCDG or SBDG) and ensures that the display name associated with those codes is included
24
+ in search results.
25
+ ),
26
+ type: 'radio',
27
+ default: 'false',
28
+ options: {
29
+ list_options: [
30
+ {
31
+ label: 'Yes',
32
+ value: 'true'
33
+ },
34
+ {
35
+ label: 'No',
36
+ value: 'false'
37
+ }
38
+ ]
39
+ }
40
+ input :usdf_v201_drug_display_name_note,
41
+ title: 'Notes, if applicable:',
42
+ type: 'textarea',
43
+ optional: true
21
44
 
22
- wait(
23
- identifier:,
24
- message: <<~MESSAGE
25
- I attest that the Health IT Module supports searching for drugs using general drug form
26
- group codes (SCDG or SBDG) and ensures that the display name associated with those codes is included in search results.
45
+ run do
46
+ assert usdf_v201_drug_display_name_options == 'true', %(
47
+ The following was not satisfied:
27
48
 
28
- [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
49
+ The Health IT Module supports searching for drugs using general drug form group codes (SCDG or SBDG)
50
+ and ensures that the display name associated with those codes is included in search results.
29
51
 
30
- [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
31
- MESSAGE
32
52
  )
53
+ pass usdf_v201_drug_display_name_note if usdf_v201_drug_display_name_note.present?
33
54
  end
34
55
  end
35
56
  end
@@ -18,22 +18,44 @@ module DaVinciUSDrugFormularyTestKit
18
18
 
19
19
  verifies_requirements 'hl7.fhir.us.davinci-drug-formulary_2.0.1@52'
20
20
 
21
- run do
22
- identifier = SecureRandom.hex(32)
21
+ input :usdf_v201_hrex_conformance_options,
22
+ title: 'Conforms to HRex conformance expectations',
23
+ description: %(
24
+ The developer of the Health IT Module attests that the system conforms
25
+ to the expectations described in the HRex Conformance Expectations section:
26
+
27
+ https://hl7.org/fhir/us/davinci-hrex/STU1/conformance.html
28
+ ),
29
+ type: 'radio',
30
+ default: 'false',
31
+ options: {
32
+ list_options: [
33
+ {
34
+ label: 'Yes',
35
+ value: 'true'
36
+ },
37
+ {
38
+ label: 'No',
39
+ value: 'false'
40
+ }
41
+ ]
42
+ }
43
+ input :usdf_v201_hrex_conformance_note,
44
+ title: 'Notes, if applicable:',
45
+ type: 'textarea',
46
+ optional: true
23
47
 
24
- wait(
25
- identifier:,
26
- message: <<~MESSAGE
27
- The developer of the Health IT Module attests that the system conforms
28
- to the expectations described in the HRex Conformance Expectations section:
48
+ run do
49
+ assert usdf_v201_hrex_conformance_options == 'true', %(
50
+ The following was not satisfied:
29
51
 
30
- https://hl7.org/fhir/us/davinci-hrex/STU1/conformance.html
52
+ The Health IT Module conforms
53
+ to the expectations described in the HRex Conformance Expectations section:
31
54
 
32
- [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
55
+ https://hl7.org/fhir/us/davinci-hrex/STU1/conformance.html
33
56
 
34
- [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
35
- MESSAGE
36
57
  )
58
+ pass usdf_v201_hrex_conformance_note if usdf_v201_hrex_conformance_note.present?
37
59
  end
38
60
  end
39
61
  end
@@ -21,24 +21,49 @@ module DaVinciUSDrugFormularyTestKit
21
21
  'hl7.fhir.us.davinci-drug-formulary_2.0.1@5',
22
22
  'hl7.fhir.us.davinci-drug-formulary_2.0.1@11'
23
23
 
24
- run do
25
- identifier = SecureRandom.hex(32)
24
+ input :usdf_v201_member_scoped_access_options,
25
+ title: 'Returns plan-appropriate formulary data through authenticated access',
26
+ description: %(
27
+ The developer of the Health IT Module attests that:
28
+
29
+ - When queried through authenticated access, the Health IT Module returns:
30
+ - All Formularies associated with the member’s group(s), if applicable,
31
+ - Only generally available (non-group-restricted) Formularies if the member is not in a group.
32
+ - The Health IT Module also provides access to profiled resources (FormularyItem, FormularyDrug) tied to
33
+ the member’s available plans.
34
+ ),
35
+ type: 'radio',
36
+ default: 'false',
37
+ options: {
38
+ list_options: [
39
+ {
40
+ label: 'Yes',
41
+ value: 'true'
42
+ },
43
+ {
44
+ label: 'No',
45
+ value: 'false'
46
+ }
47
+ ]
48
+ }
49
+ input :usdf_v201_member_scoped_access_note,
50
+ title: 'Notes, if applicable:',
51
+ type: 'textarea',
52
+ optional: true
26
53
 
27
- wait(
28
- identifier:,
29
- message: <<~MESSAGE
30
- The developer of the Health IT Module attests that:
54
+ run do
55
+ assert usdf_v201_member_scoped_access_options == 'true', %(
56
+ The following was not satisfied:
31
57
 
32
- - When queried through authenticated access, the Health IT Module returns:
33
- - All Formularies associated with the member’s group(s), if applicable,
34
- - Only generally available (non-group-restricted) Formularies if the member is not in a group.
35
- - The Health IT Module also provides access to profiled resources (FormularyItem, FormularyDrug) tied to the member’s available plans.
58
+ When queried through authenticated access, the Health IT Module returns:
59
+ - All Formularies associated with the member’s group(s), if applicable,
60
+ - Only generally available (non-group-restricted) Formularies if the member is not in a group.
36
61
 
37
- [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** these requirements.
62
+ The Health IT Module also provides access to profiled resources (FormularyItem, FormularyDrug) tied to the
63
+ member’s available plans.
38
64
 
39
- [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** these requirements.
40
- MESSAGE
41
65
  )
66
+ pass usdf_v201_member_scoped_access_note if usdf_v201_member_scoped_access_note.present?
42
67
  end
43
68
  end
44
69
  end
@@ -16,20 +16,40 @@ module DaVinciUSDrugFormularyTestKit
16
16
 
17
17
  verifies_requirements 'hl7.fhir.us.davinci-drug-formulary_2.0.1@14'
18
18
 
19
- run do
20
- identifier = SecureRandom.hex(32)
19
+ input :usdf_v201_rxnorm_coding_options,
20
+ title: 'Includes RxNorm SCDG/SBDG codes for SCD/SBD drug types',
21
+ description: %(
22
+ The developer of the Health IT Module attests that the system includes an additional coding repetition
23
+ for each drug with RxNorm Term Type of SCD or SBD, using the corresponding SCDG or SBDG code.
24
+ ),
25
+ type: 'radio',
26
+ default: 'false',
27
+ options: {
28
+ list_options: [
29
+ {
30
+ label: 'Yes',
31
+ value: 'true'
32
+ },
33
+ {
34
+ label: 'No',
35
+ value: 'false'
36
+ }
37
+ ]
38
+ }
39
+ input :usdf_v201_rxnorm_coding_note,
40
+ title: 'Notes, if applicable:',
41
+ type: 'textarea',
42
+ optional: true
21
43
 
22
- wait(
23
- identifier:,
24
- message: <<~MESSAGE
25
- The developer of the Health IT Module attests that the system includes an additional coding repetition
26
- for each drug with RxNorm Term Type of SCD or SBD, using the corresponding SCDG or SBDG code.
44
+ run do
45
+ assert usdf_v201_rxnorm_coding_options == 'true', %(
46
+ The following was not satisfied:
27
47
 
28
- [Click here](#{resume_pass_url}?token=#{identifier}) if the system **meets** this requirement.
48
+ The Health IT Module includes an additional coding repetition for each drug with
49
+ RxNorm Term Type of SCD or SBD, using the corresponding SCDG or SBDG code.
29
50
 
30
- [Click here](#{resume_fail_url}?token=#{identifier}) if the system **does not meet** this requirement.
31
- MESSAGE
32
51
  )
52
+ pass usdf_v201_rxnorm_coding_note if usdf_v201_rxnorm_coding_note.present?
33
53
  end
34
54
  end
35
55
  end
@@ -1,4 +1,5 @@
1
1
  require_relative '../../version'
2
+ require_relative '../../remove_input'
2
3
  require_relative 'urls'
3
4
  require_relative '../../custom_groups/v2.0.1/capability_statement_group'
4
5
  require_relative 'payer_insurance_plan_group'
@@ -205,9 +206,10 @@ module DaVinciUSDrugFormularyTestKit
205
206
  'hl7.fhir.us.davinci-drug-formulary_2.0.1@34', 'hl7.fhir.us.davinci-drug-formulary_2.0.1@35'
206
207
  end
207
208
 
208
- group from: :usdf_v201_visual_inspection_and_attestation do
209
- optional
210
- end
209
+ group from: :usdf_v201_visual_inspection_and_attestation,
210
+ optional: true
211
+ RemoveInput::recursive_remove_input(groups.last, :url)
212
+ RemoveInput::recursive_remove_input(groups.last, :smart_auth_info)
211
213
  end
212
214
  end
213
215
  end
@@ -1,4 +1,5 @@
1
1
  require_relative '../../version'
2
+ require_relative '../../remove_input'
2
3
  require_relative 'urls'
3
4
  require_relative '<%= capability_statement_file_name %>'
4
5
  <% group_file_list.each do |file_name| %>require_relative '<%= file_name %>'
@@ -171,9 +172,10 @@ module DaVinciUSDrugFormularyTestKit
171
172
  end
172
173
  <% end %>
173
174
  <%- if module_name.include?('USDFV201') -%>
174
- group from: :usdf_v201_visual_inspection_and_attestation do
175
- optional
176
- end
175
+ group from: :usdf_v201_visual_inspection_and_attestation,
176
+ optional: true
177
+ RemoveInput::recursive_remove_input(groups.last, :url)
178
+ RemoveInput::recursive_remove_input(groups.last, :smart_auth_info)
177
179
  <%- end -%>
178
180
  end
179
181
  end
@@ -153,23 +153,16 @@ module DaVinciUSDrugFormularyTestKit
153
153
  def resource_is_valid_with_target_profile?(resource, target_profile)
154
154
  return true if target_profile.blank?
155
155
 
156
- # Only need to know if the resource is valid.
157
- # Calling resource_is_valid? causes validation errors to be logged.
158
- validator = find_validator(:default)
159
-
160
156
  target_profile_with_version =
161
157
  target_profile.include?('|') ? target_profile : "#{target_profile}|#{metadata.profile_version}"
162
158
 
163
- validator_response = validator.validate(resource, target_profile_with_version)
164
- outcome = validator.operation_outcome_from_hl7_wrapped_response(validator_response)
165
-
166
- message_hashes = outcome.issue&.map { |issue| validator.message_hash_from_issue(issue, resource) } || []
167
-
168
- message_hashes.concat(validator.additional_validation_messages(resource, target_profile_with_version))
169
-
170
- validator.filter_messages(message_hashes)
171
-
172
- message_hashes.none? { |message_hash| message_hash[:type] == 'error' }
159
+ # Use the Inferno DSL resource_is_valid? method with add_messages_to_runnable: false
160
+ # to validate silently without adding messages to the test output
161
+ resource_is_valid?(
162
+ resource:,
163
+ profile_url: target_profile_with_version,
164
+ add_messages_to_runnable: false
165
+ )
173
166
  end
174
167
  end
175
168
  end
@@ -0,0 +1,11 @@
1
+ module DaVinciUSDrugFormularyTestKit
2
+ module RemoveInput
3
+ module_function
4
+
5
+ def recursive_remove_input(runnable, input)
6
+ runnable.inputs.delete(input)
7
+ runnable.input_order.delete(input)
8
+ runnable.children.each { |child_runnable| recursive_remove_input(child_runnable, input) }
9
+ end
10
+ end
11
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DaVinciUSDrugFormularyTestKit
4
- VERSION = '0.13.0'
5
- LAST_UPDATED = '2025-07-21'
4
+ VERSION = '0.13.1'
5
+ LAST_UPDATED = '2026-03-05'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: davinci_us_drug_formulary_test_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen MacVicar
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-07-22 00:00:00.000000000 Z
13
+ date: 2026-03-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: inferno_core
@@ -18,20 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 1.0.2
21
+ version: '1.1'
25
22
  type: :runtime
26
23
  prerelease: false
27
24
  version_requirements: !ruby/object:Gem::Requirement
28
25
  requirements:
29
26
  - - "~>"
30
27
  - !ruby/object:Gem::Version
31
- version: '1.0'
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 1.0.2
28
+ version: '1.1'
35
29
  - !ruby/object:Gem::Dependency
36
30
  name: tls_test_kit
37
31
  requirement: !ruby/object:Gem::Requirement
@@ -255,6 +249,7 @@ files:
255
249
  - lib/davinci_us_drug_formulary_test_kit/must_support_test.rb
256
250
  - lib/davinci_us_drug_formulary_test_kit/read_test.rb
257
251
  - lib/davinci_us_drug_formulary_test_kit/reference_resolution_test.rb
252
+ - lib/davinci_us_drug_formulary_test_kit/remove_input.rb
258
253
  - lib/davinci_us_drug_formulary_test_kit/request_logger.rb
259
254
  - lib/davinci_us_drug_formulary_test_kit/requirements/davinci_us_drug_formulary_test_kit_requirements.csv
260
255
  - lib/davinci_us_drug_formulary_test_kit/requirements/generated/davinci_us_drug_formulary_v201_requirements_coverage.csv