cqm-validators 0.1.1 → 1.0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/PULL_REQUEST_TEMPLATE.md +23 -0
- data/.gitignore +3 -1
- data/.overcommit.yml +18 -0
- data/.rubocop.yml +66 -0
- data/.simplecov +10 -0
- data/.travis.yml +21 -0
- data/Gemfile +11 -3
- data/README.md +20 -6
- data/Rakefile +8 -6
- data/config/mongoid.yml +6 -0
- data/cqm_validators.gemspec +21 -14
- data/lib/base_validator.rb +20 -20
- data/lib/cqm_validators.rb +4 -2
- data/lib/cqm_validators/version.rb +3 -1
- data/lib/data_validator.rb +74 -79
- data/lib/measure_validator.rb +104 -107
- data/lib/performance_rate_validator.rb +43 -63
- data/lib/qrda_qdm_template_validator.rb +164 -311
- data/lib/reported_result_extractor.rb +137 -139
- data/lib/schema_validator.rb +20 -19
- data/lib/schematron/c_processor.rb +19 -19
- data/lib/schematron/java_processor.rb +66 -68
- data/lib/schematron/qrda/{cat_1_r4/HL7 QRDA Category I STU 4.sch → cat_1_r5_1/HL7 QRDA Category I STU 5.1.sch } +1559 -1964
- data/lib/schematron/qrda/{cat_1_r4 → cat_1_r5_1}/voc.xml +7 -2
- data/lib/schematron_validator.rb +31 -32
- data/lib/validation_error.rb +11 -9
- data/lib/validators.rb +40 -106
- data/notice.md +9 -0
- metadata +86 -24
- data/lib/schematron/qrda/cat_1/HL7_CDAR2_QRDA_Category_I_2_12_16.sch +0 -4693
- data/lib/schematron/qrda/cat_1/voc.xml +0 -1177
- data/lib/schematron/qrda/cat_1_r2/QRDA Category I Release 2.sch +0 -4069
- data/lib/schematron/qrda/cat_1_r2/voc.xml +0 -1065
- data/lib/schematron/qrda/cat_1_r3_1/HL7 QRDA Category I STU 3.1.sch +0 -3573
- data/lib/schematron/qrda/cat_1_r3_1/HL7 QRDA Category III STU 1.1.sch +0 -464
- data/lib/schematron/qrda/cat_1_r3_1/QRDA Category I STU Release 3.1.sch +0 -5394
- data/lib/schematron/qrda/cat_1_r3_1/voc.xml +0 -1229
- data/lib/schematron/qrda/cat_3/QRDA Category III.sch +0 -675
- data/lib/schematron/qrda/cat_3/voc.xml +0 -21
- data/lib/schematron/qrda/cat_3_r1_1/HL7 QRDA Category III STU 1.1.sch +0 -528
- data/lib/schematron/qrda/cat_3_r1_1/voc.xml +0 -8
- data/lib/schematron/qrda/cat_3_r2/HL7 QRDA Category III STU 2.sch +0 -677
- data/lib/schematron/qrda/cat_3_r2/voc.xml +0 -1186
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1651d4a4f5c1b36a0b6f204c535e77983d889c27431318f3eadbba5d6611c22
|
4
|
+
data.tar.gz: 10d0469fd13e6063ac0b94be2df9e23cd2371abdf1cf76f496b230b104a9ba4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d394c9138bdfb34ccb88f40ec62b7a606546e72e94a6f3780c7b244c2c17dff89b3bdb2a797e211b7a34858784e72f5df65cb831414af8c8e7255a866dff1778
|
7
|
+
data.tar.gz: 27620abd1b120a8b7d149a34b0dd54a4bab8e9ac6eeec8c8c5401082b6608f96832bbab75f7eda88c285d4354c4ce83a48934f1c40f1090ec671be4330169915
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Pull requests into cqm-validators 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
|
+
- [ ] Internal ticket for this PR:
|
6
|
+
- [ ] Internal ticket links to this PR
|
7
|
+
- [ ] Code diff has been done and been reviewed
|
8
|
+
- [ ] Tests are included and test edge cases
|
9
|
+
- [ ] Tests have been run locally and pass
|
10
|
+
|
11
|
+
**Reviewer 1:**
|
12
|
+
|
13
|
+
Name:
|
14
|
+
- [ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
|
15
|
+
- [ ] The tests appropriately test the new code, including edge cases
|
16
|
+
- [ ] You have tried to break the code
|
17
|
+
|
18
|
+
**Reviewer 2:**
|
19
|
+
|
20
|
+
Name:
|
21
|
+
- [ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
|
22
|
+
- [ ] The tests appropriately test the new code, including edge cases
|
23
|
+
- [ ] You have tried to break the code
|
data/.gitignore
CHANGED
data/.overcommit.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
PreCommit:
|
2
|
+
RuboCop:
|
3
|
+
enabled: true
|
4
|
+
on_warn: 'fail'
|
5
|
+
HardTabs:
|
6
|
+
enabled: true
|
7
|
+
exclude: ['test/fixtures/**/*', 'lib/schema/**/*', 'lib/schematron/iso-schematron-xslt1/**/*', 'lib/schematron/iso-schematron-xslt2/**/*', 'lib/schematron/qrda/**/*']
|
8
|
+
AuthorName:
|
9
|
+
enabled: false
|
10
|
+
CommitMsg:
|
11
|
+
RussianNovel:
|
12
|
+
enabled: true
|
13
|
+
HardTabs:
|
14
|
+
enabled: true
|
15
|
+
TextWidth:
|
16
|
+
enabled: false
|
17
|
+
CapitalizedSubject:
|
18
|
+
enabled: false
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.6
|
3
|
+
Exclude:
|
4
|
+
- bin/*
|
5
|
+
Documentation:
|
6
|
+
Enabled: false
|
7
|
+
# TODO: remove this exception when java_processor.rb is fixed to rescue StandardError
|
8
|
+
Lint/RescueException:
|
9
|
+
Exclude:
|
10
|
+
- 'lib/schematron/java_processor.rb'
|
11
|
+
Metrics/AbcSize:
|
12
|
+
# The ABC size is a calculated magnitude, so this number can be a Fixnum or
|
13
|
+
# a Float.
|
14
|
+
Max: 32
|
15
|
+
Exclude:
|
16
|
+
- 'test/**/*.rb'
|
17
|
+
# TODO: remove exclusions below this line as ABC Size is fixed
|
18
|
+
- 'lib/performance_rate_validator.rb'
|
19
|
+
Metrics/BlockLength:
|
20
|
+
Exclude:
|
21
|
+
- 'test/factories/*'
|
22
|
+
Metrics/ClassLength:
|
23
|
+
Max: 120
|
24
|
+
Exclude:
|
25
|
+
- 'test/**/*'
|
26
|
+
# TODO: remove exclusions below this line as Class length is fixed
|
27
|
+
- 'lib/qrda_qdm_template_validator.rb'
|
28
|
+
Metrics/LineLength:
|
29
|
+
Max: 150
|
30
|
+
Exclude:
|
31
|
+
- 'test/**/*'
|
32
|
+
# TODO: remove exclusions below this line as line length is fixed
|
33
|
+
- 'lib/reported_result_extractor.rb'
|
34
|
+
- 'lib/data_validator.rb'
|
35
|
+
- 'lib/measure_validator.rb'
|
36
|
+
Metrics/MethodLength:
|
37
|
+
CountComments: false # count full line comments?
|
38
|
+
Max: 20
|
39
|
+
Exclude:
|
40
|
+
- 'test/**/*'
|
41
|
+
# TODO: remove exclusions below this line as method length is fixed
|
42
|
+
- 'lib/reported_result_extractor.rb'
|
43
|
+
Metrics/ModuleLength:
|
44
|
+
Max: 110
|
45
|
+
Exclude:
|
46
|
+
# TODO: remove exclusions below this line as module length is fixed
|
47
|
+
- 'lib/reported_result_extractor.rb'
|
48
|
+
# Avoid complex methods.
|
49
|
+
Metrics/CyclomaticComplexity:
|
50
|
+
Max: 10
|
51
|
+
Metrics/PerceivedComplexity:
|
52
|
+
Max: 10
|
53
|
+
Naming/UncommunicativeMethodParamName:
|
54
|
+
Enabled: false
|
55
|
+
Style/DateTime:
|
56
|
+
Enabled: false
|
57
|
+
Style/GuardClause:
|
58
|
+
MinBodyLength: 100
|
59
|
+
Exclude:
|
60
|
+
# TODO: remove exclusions below this line as ABC Size is fixed
|
61
|
+
- 'lib/performance_rate_validator.rb'
|
62
|
+
Style/MixinUsage:
|
63
|
+
Exclude:
|
64
|
+
- 'test/test_helper.rb'
|
65
|
+
Style/RescueStandardError:
|
66
|
+
Enabled: false
|
data/.simplecov
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.6
|
4
|
+
- 2.5
|
5
|
+
- 2.4
|
6
|
+
- 2.3
|
7
|
+
cache:
|
8
|
+
- bundler
|
9
|
+
sudo: required
|
10
|
+
services:
|
11
|
+
- mongodb
|
12
|
+
branches:
|
13
|
+
only:
|
14
|
+
- master
|
15
|
+
before_script:
|
16
|
+
- git config --global user.email "travis@travis.ci"
|
17
|
+
- git config --global user.name "Travis CI"
|
18
|
+
script:
|
19
|
+
- bundle exec overcommit --sign
|
20
|
+
- bundle exec overcommit --run
|
21
|
+
- travis_retry bundle exec rake test
|
data/Gemfile
CHANGED
@@ -1,6 +1,14 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in cqm_validators.gemspec
|
6
|
-
gemspec
|
8
|
+
gemspec development_group: :test
|
9
|
+
|
10
|
+
group :test do
|
11
|
+
gem 'codecov', require: false
|
12
|
+
gem 'cqm-models', git: 'https://github.com/projecttacoma/cqm-models.git', branch: 'master'
|
13
|
+
gem 'simplecov', require: false
|
14
|
+
end
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
This is a
|
1
|
+
This is a library that is used by Cypress for QRDA validation. It contains Schematron validators, schema validators, and validators for QRDA-specific features (measure IDs, performance rates, result extraction, etc).
|
2
2
|
|
3
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
3
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/projecttacoma/cqm_validators.
|
4
4
|
|
5
5
|
Environment
|
6
6
|
===========
|
7
7
|
|
8
|
-
This project currently uses Ruby 2.
|
8
|
+
This project currently uses Ruby 2.3, Ruby 2.4, Ruby 2.5 and Ruby 2.6 and is built using [Bundler](http://gembundler.com/). To get all of the dependencies for the project, first install bundler:
|
9
9
|
|
10
10
|
gem install bundler
|
11
11
|
|
@@ -13,9 +13,23 @@ Then run bundler to grab all of the necessary gems:
|
|
13
13
|
|
14
14
|
bundle install
|
15
15
|
|
16
|
-
The Quality Measure engine relies on a MongoDB [MongoDB](http://www.mongodb.org/) running a minimum of version 2.4.* or higher. To get and install Mongo refer to:
|
17
16
|
|
18
|
-
|
17
|
+
|
18
|
+
Versioning
|
19
|
+
==========
|
20
|
+
|
21
|
+
Starting with version **1.0.1.0** released on 5/22/2019, cqm-validators versioning has the format **W.X.Y.Z**, where:
|
22
|
+
|
23
|
+
* **W** maps to a version of QRDA Category 1 and QRDA Category 3. See the table below to see the existing mapping to QRDA versions.
|
24
|
+
|
25
|
+
| W | QRDA Cat 1 | QRDA Cat 3 |
|
26
|
+
| --- | --- | --- |
|
27
|
+
| 1 | R1 STU5.1 | R1 STU2.1 |
|
28
|
+
|
29
|
+
* **X.Y.Z** uses [SemVer](http://semver.org/) for versioning. **X.Y.Z** starts at 0.0.0 when **W** is incremented.
|
30
|
+
|
31
|
+
For the versions available, see [tags on this repository](https://github.com/projecttacoma/cqm-validators/tags).
|
32
|
+
|
19
33
|
|
20
34
|
Project Practices
|
21
35
|
=================
|
@@ -37,4 +51,4 @@ Unless required by applicable law or agreed to in writing, software
|
|
37
51
|
distributed under the License is distributed on an "AS IS" BASIS,
|
38
52
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
39
53
|
See the License for the specific language governing permissions and
|
40
|
-
limitations under the License.
|
54
|
+
limitations under the License.
|
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rake/testtask'
|
3
5
|
|
4
6
|
Rake::TestTask.new(:test) do |t|
|
5
|
-
t.libs <<
|
6
|
-
t.libs <<
|
7
|
-
t.test_files = FileList[
|
7
|
+
t.libs << 'test'
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
8
10
|
end
|
9
11
|
|
10
|
-
task :
|
12
|
+
task default: :test
|
data/config/mongoid.yml
ADDED
data/cqm_validators.gemspec
CHANGED
@@ -1,28 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require 'cqm_validators/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'cqm-validators'
|
8
9
|
spec.version = CqmValidators::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
10
|
+
spec.authors = ['Laura', "Michael O'Keefe"]
|
11
|
+
spec.email = ['laclark@mitre.org', 'mokeefe@mitre.org']
|
11
12
|
spec.license = 'Apache-2.0'
|
12
13
|
|
13
|
-
spec.summary =
|
14
|
-
spec.description =
|
15
|
-
spec.homepage =
|
14
|
+
spec.summary = 'new cqm validator library'
|
15
|
+
spec.description = 'new cqm validator library'
|
16
|
+
spec.homepage = 'https://github.com/projecttacoma/cqm-validators'
|
16
17
|
|
17
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
19
|
f.match(%r{^(test|spec|features)/})
|
19
20
|
end
|
20
|
-
spec.bindir =
|
21
|
+
spec.bindir = 'exe'
|
21
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
-
spec.require_paths = [
|
23
|
+
spec.require_paths = ['lib']
|
23
24
|
|
24
|
-
spec.add_dependency
|
25
|
-
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
25
|
+
spec.add_dependency 'nokogiri', '~>1.10.3'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler'
|
28
|
+
spec.add_development_dependency 'byebug'
|
29
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
30
|
+
spec.add_development_dependency 'minitest-reporters'
|
31
|
+
spec.add_development_dependency 'mongoid'
|
32
|
+
spec.add_development_dependency 'overcommit'
|
33
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
34
|
+
spec.add_development_dependency 'rubocop', '~> 0.60'
|
28
35
|
end
|
data/lib/base_validator.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module CqmValidators
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
4
|
+
module BaseValidator
|
5
|
+
def build_error(msg, loc, file_name)
|
6
|
+
ValidationError.new(message: msg, location: loc, file_name: file_name, validator: @name)
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_document(input)
|
10
|
+
doc = case input
|
11
|
+
when File
|
12
|
+
input.rewind
|
13
|
+
input.read
|
14
|
+
when Nokogiri::XML::Document
|
15
|
+
return input
|
16
|
+
else
|
17
|
+
input
|
18
|
+
end
|
19
|
+
Nokogiri::XML(doc.to_s) { |conf| conf.strict.nonet.noblanks } # grumble, grumble nokogiri java @SS
|
20
|
+
end
|
21
|
+
end
|
21
22
|
end
|
22
|
-
|
data/lib/cqm_validators.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cqm_validators/version'
|
2
4
|
require 'reported_result_extractor'
|
3
5
|
require 'base_validator'
|
4
6
|
require 'data_validator'
|
@@ -8,7 +10,7 @@ require 'qrda_qdm_template_validator'
|
|
8
10
|
require 'schema_validator'
|
9
11
|
require 'schematron_validator'
|
10
12
|
require 'validators'
|
11
|
-
require
|
13
|
+
require 'schematron/c_processor'
|
12
14
|
|
13
15
|
module CqmValidators
|
14
16
|
# Your code goes here...
|
data/lib/data_validator.rb
CHANGED
@@ -1,82 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module CqmValidators
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
4
|
+
class DataValidator
|
5
|
+
include BaseValidator
|
6
|
+
|
7
|
+
HL7_QRDA_OIDS = ['2.16.840.1.113883.3.221.5',
|
8
|
+
'2.16.840.1.113883.3.88.12.3221.8.7',
|
9
|
+
'2.16.840.1.113883.3.88.12.3221.8.9',
|
10
|
+
'2.16.840.1.113883.1.11.12839',
|
11
|
+
'2.16.840.1.113883.3.88.12.3221.8.11',
|
12
|
+
'2.16.840.1.113883.3.88.12.3221.6.2',
|
13
|
+
'2.16.840.1.113883.11.20.9.40',
|
14
|
+
'2.16.840.1.113883.11.20.9.23',
|
15
|
+
'2.16.840.1.113883.3.88.12.3221.7.4',
|
16
|
+
'2.16.840.1.113883.11.20.9.18',
|
17
|
+
'2.16.840.1.113883.11.20.9.22',
|
18
|
+
'2.16.840.1.113883.1.11.16866',
|
19
|
+
'2.16.840.1.113883.1.11.20275',
|
20
|
+
'2.16.840.1.113883.11.20.9.34',
|
21
|
+
'2.16.840.1.113883.3.88.12.3221.7.2',
|
22
|
+
'2.16.840.1.113883.3.88.12.80.17',
|
23
|
+
'2.16.840.1.113883.3.88.12.80.22',
|
24
|
+
'2.16.840.1.113883.3.88.12.80.64',
|
25
|
+
'2.16.840.1.113883.3.88.12.3221.6.8',
|
26
|
+
'2.16.840.1.113883.1.11.78',
|
27
|
+
'2.16.840.1.113883.11.20.9.25',
|
28
|
+
'2.16.840.1.113883.11.20.9.39',
|
29
|
+
'2.16.840.1.113883.3.88.12.80.32',
|
30
|
+
'2.16.840.1.113883.11.20.9.21',
|
31
|
+
'2.16.840.1.113883.3.88.12.80.68',
|
32
|
+
'2.16.840.1.113883.1.11.20.12',
|
33
|
+
'2.16.840.1.113883.11.20.9.24',
|
34
|
+
'2.16.840.1.113883.11.20.9.41',
|
35
|
+
'2.16.840.1.113883.1.11.16926',
|
36
|
+
'2.16.840.1.113883.1.11.12212',
|
37
|
+
'2.16.840.1.113883.1.11.19185',
|
38
|
+
'2.16.840.1.113883.1.11.14914',
|
39
|
+
'2.16.840.1.114222.4.11.837',
|
40
|
+
'2.16.840.1.113883.1.11.19563',
|
41
|
+
'2.16.840.1.113883.1.11.11526',
|
42
|
+
'2.16.840.1.113883.11.20.9.20',
|
43
|
+
'2.16.840.1.113883.3.88.12.80.2',
|
44
|
+
'2.16.840.1.113883.3.88.12.80.63',
|
45
|
+
'2.16.840.1.113883.1.11.12249',
|
46
|
+
'2.16.840.1.113883.1.11.1',
|
47
|
+
'2.16.840.1.113883.1.11.12199',
|
48
|
+
'2.16.840.1.113883.11.20.9.33',
|
49
|
+
'2.16.840.1.114222.4.11.1066',
|
50
|
+
'2.16.840.1.113883.1.11.19579'].freeze
|
51
|
+
|
52
|
+
def initialize(measure_ids)
|
53
|
+
measures = CQM::Measure.find(measure_ids)
|
54
|
+
@value_set_ids = measures.collect { |m| m.value_sets.map(&:_id) }.flatten.uniq
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate(file, options = {})
|
58
|
+
doc = get_document(file)
|
59
|
+
|
60
|
+
doc.xpath('//*[@sdtc:valueSet]').each_with_object([]) do |node, errors|
|
61
|
+
oid = node.at_xpath('@sdtc:valueSet')
|
62
|
+
vs = CQM::ValueSet.where('oid' => oid, '_id' => { '$in' => @value_set_ids }).first
|
63
|
+
next unless vs
|
64
|
+
|
65
|
+
code = node.at_xpath('@code')
|
66
|
+
code_system_oid = node.at_xpath('@codeSystem')
|
67
|
+
null_flavor = node.at_xpath('@nullFlavor')
|
68
|
+
next unless vs.concepts.where(code: code, code_system_oid: code_system_oid).count.zero?
|
69
|
+
|
70
|
+
unless null_flavor
|
71
|
+
errors << build_error("The code #{code} in codeSystem #{code_system_oid} cannot be found in the declared valueset #{oid}",
|
72
|
+
node.path, options[:file_name])
|
55
73
|
end
|
56
|
-
|
57
|
-
def validate(file, options={})
|
58
|
-
doc = get_document(file)
|
59
|
-
|
60
|
-
doc.xpath("//*[@sdtc:valueSet]").inject([]) do |errors, node|
|
61
|
-
oid = node.at_xpath("@sdtc:valueSet")
|
62
|
-
vs = @bundle.value_sets.where({"oid" => oid}).first
|
63
|
-
code = node.at_xpath("@code")
|
64
|
-
code_system = node.at_xpath("@codeSystem")
|
65
|
-
null_flavor = node.at_xpath("@nullFlavor")
|
66
|
-
if !vs
|
67
|
-
errors << build_error("The valueset #{oid} declared in the document cannot be found", node.path, options[:file_name])
|
68
|
-
elsif !@oids.include?(oid.value)
|
69
|
-
errors << build_error("File appears to contain data criteria outside that required by the measures. Valuesets in file not in measures tested #{oid}'",
|
70
|
-
node.path, options[:file_name])
|
71
|
-
elsif vs.concepts.where({"code" => code, "code_system"=>code_system}).count() == 0
|
72
|
-
if !null_flavor
|
73
|
-
errors << build_error("The code #{code} in codeSystem #{code_system} cannot be found in the declared valueset #{oid}",
|
74
|
-
node.path, options[:file_name])
|
75
|
-
end
|
76
|
-
end
|
77
|
-
errors
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
74
|
end
|
82
|
-
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|