bonnie_bundler 2.0.1 → 2.0.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.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +14 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +45 -0
- data/Gemfile.lock +1 -1
- data/bonnie-bundler.gemspec +1 -1
- data/lib/measures/loading/cql_loader.rb +30 -24
- data/test/unit/cql_loader_test.rb +27 -0
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '09fad5431a725716e82f1102598fa03d7e88b389'
|
|
4
|
+
data.tar.gz: 01d459f365bd058999fa42c231d33a223f5a56a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e6095973b1224e9b3c8b3419a01dc6b61e4bb44a9727a86ffb8d5c26183a7c7e1605a97ccf42448aad6aa584327d9db168e1d14f6ee8e0cb28c65d95580f4768
|
|
7
|
+
data.tar.gz: 4b77d0640c3279926db64a9b7873e004e8074636c21b0773fa26c6fc3672b21def3138c8984037b03414fecc2071130f8c56284fb5a0a8f9676168296735025c
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# :clipboard: Bonnie Bundler contribution rules
|
|
2
|
+
1. All tickets relating to a pull request must link to the pull request.
|
|
3
|
+
2. All pull requests must link to their parent tickets.
|
|
4
|
+
3. All pull requests must have accompanying tests. This means:
|
|
5
|
+
* Automated tests: Automated tests are expected unless they are not feasible. If they are not feasible, this should be explained in the pull request.
|
|
6
|
+
* A JIRA test should be included if the automated tests are not sufficient
|
|
7
|
+
- The JIRA test should link to the pull request
|
|
8
|
+
- The JIRA test should link to the tasks that were resolved by the pull request
|
|
9
|
+
* A pull request review also includes a review of the accompanying tests tests
|
|
10
|
+
4. All pull requests must pass a calculation regression test to confirm that calculations do not break with these changes
|
|
11
|
+
|
|
12
|
+
:clipboard: For more details see: https://gitlab.mitre.org/bonnie/internal-documentation/wikis/pull-requests
|
|
13
|
+
|
|
14
|
+
As a reviewer of a pull request, you are accountable to verifying that the PR contains all items. :punch:
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Pull requests into Bonnie Bundler require the following. Submitter and reviewer should :white_check_mark: when done. For items that are not-applicable, note it's not-applicable ("N/A") and :white_check_mark:.
|
|
2
|
+
|
|
3
|
+
**Submitter:**
|
|
4
|
+
- [ ] This pull request describes why these changes were made.
|
|
5
|
+
- [ ] This PR is into the correct branch.
|
|
6
|
+
- [ ] JIRA ticket for this PR:
|
|
7
|
+
- [ ] JIRA ticket links to this PR
|
|
8
|
+
- [ ] Code diff has been done and been reviewed (it **does not** contain: additional white space, not applicable code changes, debug statements, etc.)
|
|
9
|
+
- [ ] Tests are included and test edge cases
|
|
10
|
+
- [ ] Tests have been run locally and pass (remember to update Gemfile when applicable)
|
|
11
|
+
- [ ] Code coverage has not gone down and all code touched or added is covered.
|
|
12
|
+
* In rare situations, this may not be possible or applicable to a PR. In those situations:
|
|
13
|
+
1. Note why this could not be done or is not applicable here:
|
|
14
|
+
2. Add TODOs in the code noting that it requires a test
|
|
15
|
+
3. Add a JIRA task to add the test and link it here:
|
|
16
|
+
- [ ] Automated regression test(s) pass
|
|
17
|
+
|
|
18
|
+
If JIRA tests were used to supplement or replace automated tests:
|
|
19
|
+
- [ ] JIRA test links:
|
|
20
|
+
- [ ] Justification for using JIRA tests:
|
|
21
|
+
- [ ] JIRA tests have been added to sprint
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
**Reviewer 1:**
|
|
25
|
+
|
|
26
|
+
Name:
|
|
27
|
+
- [ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
|
|
28
|
+
- [ ] The tests appropriately test the new code, including edge cases
|
|
29
|
+
- [ ] You have tried to break the code
|
|
30
|
+
|
|
31
|
+
If JIRA tests were used to supplement or replace automated tests:
|
|
32
|
+
- [ ] JIRA tests have been run and pass
|
|
33
|
+
- [ ] You agree with the justification for use of JIRA tests or have provided input on why you disagree
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
**Reviewer 2:**
|
|
37
|
+
|
|
38
|
+
Name:
|
|
39
|
+
- [ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
|
|
40
|
+
- [ ] The tests appropriately test the new code, including edge cases
|
|
41
|
+
- [ ] You have tried to break the code
|
|
42
|
+
|
|
43
|
+
If JIRA tests were used to supplement or replace automated tests:
|
|
44
|
+
- [ ] JIRA tests have been run and pass
|
|
45
|
+
- [ ] You agree with the justification for use of JIRA tests or have provided input on why you disagree
|
data/Gemfile.lock
CHANGED
data/bonnie-bundler.gemspec
CHANGED
|
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
|
7
7
|
s.email = "pophealth-talk@googlegroups.com"
|
|
8
8
|
s.homepage = "http://github.com/projecttacoma/bonnie_bundler"
|
|
9
9
|
s.authors = ["The MITRE Corporation"]
|
|
10
|
-
s.version = '2.0.
|
|
10
|
+
s.version = '2.0.2'
|
|
11
11
|
s.license = 'Apache-2.0'
|
|
12
12
|
|
|
13
13
|
s.add_dependency 'health-data-standards', '~> 4.0'
|
|
@@ -42,10 +42,26 @@ module Measures
|
|
|
42
42
|
json = hqmf_model.to_json
|
|
43
43
|
json.convert_keys_to_strings
|
|
44
44
|
|
|
45
|
+
# Set the code list ids of data criteria and source data criteria that use direct reference codes to GUIDS.
|
|
46
|
+
json['source_data_criteria'], json['data_criteria'] = set_data_criteria_code_list_ids(json, cql_artifacts)
|
|
47
|
+
|
|
48
|
+
# Create CQL Measure
|
|
49
|
+
measure = Measures::Loader.load_hqmf_cql_model_json(json, user, cql_artifacts[:all_value_set_oids], main_cql_library, cql_artifacts[:cql_definition_dependency_structure],
|
|
50
|
+
cql_artifacts[:elms], cql_artifacts[:elm_annotations], files[:CQL], nil, cql_artifacts[:value_set_oid_version_objects])
|
|
51
|
+
measure['episode_of_care'] = measure_details['episode_of_care']
|
|
52
|
+
measure['type'] = measure_details['type']
|
|
53
|
+
|
|
54
|
+
# Create, associate and save the measure package.
|
|
55
|
+
measure.package = CqlMeasurePackage.new(file: BSON::Binary.new(zip_file.read()))
|
|
56
|
+
measure.package.save
|
|
57
|
+
|
|
58
|
+
measure
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.set_data_criteria_code_list_ids(json, cql_artifacts)
|
|
45
62
|
# Loop over data criteria to search for data criteria that is using a single reference code.
|
|
46
63
|
# Once found set the Data Criteria's 'code_list_id' to our fake oid. Do the same for source data criteria.
|
|
47
64
|
json['data_criteria'].each do |data_criteria_name, data_criteria|
|
|
48
|
-
# We do not want to replace an existing code_list_id. Skip.
|
|
49
65
|
unless data_criteria['code_list_id']
|
|
50
66
|
if data_criteria['inline_code_list']
|
|
51
67
|
# Check to see if inline_code_list contains the correct code_system and code for a direct reference code.
|
|
@@ -64,18 +80,7 @@ module Measures
|
|
|
64
80
|
end
|
|
65
81
|
end
|
|
66
82
|
end
|
|
67
|
-
|
|
68
|
-
# Create CQL Measure
|
|
69
|
-
measure = Measures::Loader.load_hqmf_cql_model_json(json, user, cql_artifacts[:all_value_set_oids], main_cql_library, cql_artifacts[:cql_definition_dependency_structure],
|
|
70
|
-
cql_artifacts[:elms], cql_artifacts[:elm_annotations], files[:CQL], nil, cql_artifacts[:value_set_oid_version_objects])
|
|
71
|
-
measure['episode_of_care'] = measure_details['episode_of_care']
|
|
72
|
-
measure['type'] = measure_details['type']
|
|
73
|
-
|
|
74
|
-
# Create, associate and save the measure package.
|
|
75
|
-
measure.package = CqlMeasurePackage.new(file: BSON::Binary.new(zip_file.read()))
|
|
76
|
-
measure.package.save
|
|
77
|
-
|
|
78
|
-
measure
|
|
83
|
+
return json['source_data_criteria'], json['data_criteria']
|
|
79
84
|
end
|
|
80
85
|
|
|
81
86
|
def self.load(file, user, measure_details, vsac_user=nil, vsac_password=nil, overwrite_valuesets=false, cache=false, includeDraft=false, ticket_granting_ticket=nil)
|
|
@@ -245,17 +250,18 @@ module Measures
|
|
|
245
250
|
|
|
246
251
|
code_sets[code_system_name] ||= []
|
|
247
252
|
code_sets[code_system_name] << code_reference['id']
|
|
248
|
-
# Generate a unique number as our fake "oid"
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
253
|
+
# Generate a unique number as our fake "oid" based on parameters that identify the DRC
|
|
254
|
+
code_hash = "drc-" + Digest::SHA2.hexdigest("#{code_system_name} #{code_reference['id']} #{code_reference['name']} #{code_system_version}") # Keep a list of generated_guids and a hash of guids with code system names and codes.
|
|
255
|
+
single_code_references << { guid: code_hash, code_system_name: code_system_name, code: code_reference['id'] }
|
|
256
|
+
all_codes_and_code_names[code_hash] = code_sets
|
|
257
|
+
# code_hashs are unique hashes, there's no sense in adding duplicates to the ValueSet collection
|
|
258
|
+
if !HealthDataStandards::SVS::ValueSet.all().where(oid: code_hash, user_id: user.id).first()
|
|
259
|
+
# Create a new "ValueSet" and "Concept" object and save.
|
|
260
|
+
valueSet = HealthDataStandards::SVS::ValueSet.new({oid: code_hash, display_name: code_reference['name'], version: '' ,concepts: [], user_id: user.id})
|
|
261
|
+
concept = HealthDataStandards::SVS::Concept.new({code: code_reference['id'], code_system_name: code_system_name, code_system_version: code_system_version, display_name: code_reference['name']})
|
|
262
|
+
valueSet.concepts << concept
|
|
263
|
+
valueSet.save!
|
|
264
|
+
end
|
|
259
265
|
end
|
|
260
266
|
end
|
|
261
267
|
end
|
|
@@ -24,4 +24,31 @@ class CQLLoaderTest < ActiveSupport::TestCase
|
|
|
24
24
|
assert_equal [], cql_statement_dependencies['Hospice']['Has Hospice']
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
test 'Loading a measure with a direct reference code handles the creation of code_list_id hash properly' do
|
|
30
|
+
direct_reference_mat_export = File.new File.join('test', 'fixtures', 'CMS158_v5_4_Artifacts_Update.zip')
|
|
31
|
+
VCR.use_cassette('valid_vsac_response_158_update') do
|
|
32
|
+
dump_db
|
|
33
|
+
user = User.new
|
|
34
|
+
user.save
|
|
35
|
+
|
|
36
|
+
measure_details = { 'episode_of_care'=> false }
|
|
37
|
+
Measures::CqlLoader.load(direct_reference_mat_export, user, measure_details, ENV['VSAC_USERNAME'], ENV['VSAC_PASSWORD']).save
|
|
38
|
+
assert_equal 1, CqlMeasure.all.count
|
|
39
|
+
measure = CqlMeasure.all.first
|
|
40
|
+
|
|
41
|
+
# Confirm that the source data criteria with the direct reference code is equal to the expected hash
|
|
42
|
+
assert_equal measure['source_data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D_source']['code_list_id'], "drc-986ea3d52eddc4927e63b3769b5efbaf38b76b35a9164e447fcde2e4dfd31a0c"
|
|
43
|
+
assert_equal measure['data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D']['code_list_id'], "drc-986ea3d52eddc4927e63b3769b5efbaf38b76b35a9164e447fcde2e4dfd31a0c"
|
|
44
|
+
|
|
45
|
+
# Re-load the Measure
|
|
46
|
+
Measures::CqlLoader.load(direct_reference_mat_export, user, measure_details, ENV['VSAC_USERNAME'], ENV['VSAC_PASSWORD']).save
|
|
47
|
+
assert_equal 2, CqlMeasure.all.count
|
|
48
|
+
measures = CqlMeasure.all
|
|
49
|
+
# Confirm that the Direct Reference Code, code_list_id hash has not changed between Uploads.
|
|
50
|
+
assert_equal measures[0]['source_data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D_source']['code_list_id'], measures[1]['source_data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D_source']['code_list_id']
|
|
51
|
+
assert_equal measures[0]['data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D']['code_list_id'], measures[1]['data_criteria']['prefix_5195_3_LaboratoryTestPerformed_70C9F083_14BD_4331_99D7_201F8589059D']['code_list_id']
|
|
52
|
+
end
|
|
53
|
+
end
|
|
27
54
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bonnie_bundler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- The MITRE Corporation
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-01-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: health-data-standards
|
|
@@ -176,6 +176,8 @@ executables: []
|
|
|
176
176
|
extensions: []
|
|
177
177
|
extra_rdoc_files: []
|
|
178
178
|
files:
|
|
179
|
+
- ".github/CONTRIBUTING.md"
|
|
180
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
|
179
181
|
- ".gitignore"
|
|
180
182
|
- ".travis.yml"
|
|
181
183
|
- Gemfile
|
|
@@ -254,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
254
256
|
version: '0'
|
|
255
257
|
requirements: []
|
|
256
258
|
rubyforge_project:
|
|
257
|
-
rubygems_version: 2.
|
|
259
|
+
rubygems_version: 2.5.2.1
|
|
258
260
|
signing_key:
|
|
259
261
|
specification_version: 4
|
|
260
262
|
summary: A Gem for creating and managing bonnie bundles
|