quality-measure-engine 0.1.0 → 0.1.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.
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -6
- data/Rakefile +32 -2
- data/VERSION +1 -1
- data/lib/qme/query/json_document_builder.rb +9 -3
- data/lib/qme/query/json_query_executor.rb +44 -0
- data/lib/{quality_measure_engine.rb → quality-measure-engine.rb} +1 -1
- data/measures/0032/0032_NQF_Cervical_Cancer_Screening.json +4 -4
- data/quality-measure-engine.gemspec +4 -9
- data/spec/spec_helper.rb +1 -1
- metadata +15 -44
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (3.0.1)
|
5
4
|
awesome_print (0.2.1)
|
6
5
|
bson (1.1)
|
7
6
|
bson_ext (1.1.1)
|
@@ -16,10 +15,6 @@ GEM
|
|
16
15
|
jsonschema (2.0.0)
|
17
16
|
mongo (1.1)
|
18
17
|
bson (>= 1.0.5)
|
19
|
-
mongomatic (0.5.8)
|
20
|
-
activesupport (>= 2.3.5)
|
21
|
-
bson (= 1.1)
|
22
|
-
mongo (= 1.1)
|
23
18
|
rake (0.8.7)
|
24
19
|
rspec (2.0.0)
|
25
20
|
rspec-core (= 2.0.0)
|
@@ -44,7 +39,6 @@ DEPENDENCIES
|
|
44
39
|
jeweler
|
45
40
|
jsonschema
|
46
41
|
mongo
|
47
|
-
mongomatic
|
48
42
|
rake
|
49
43
|
rspec
|
50
44
|
therubyracer
|
data/Rakefile
CHANGED
@@ -15,12 +15,42 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.authors = ["Marc Hadley", "Andy Gregorowicz"]
|
16
16
|
|
17
17
|
gem.add_dependency 'mongo', '~> 1.1'
|
18
|
-
gem.add_dependency 'mongomatic', '~> 0.5.8'
|
19
18
|
gem.add_dependency 'therubyracer', '~> 0.7.5'
|
20
|
-
gem.add_dependency 'bson_ext', '~> 1.1.1'
|
21
19
|
|
22
20
|
gem.add_development_dependency "jsonschema", "~> 2.0.0"
|
23
21
|
gem.add_development_dependency "rspec", "~> 2.0.0"
|
24
22
|
gem.add_development_dependency "awesome_print", "~> 0.2.1"
|
25
23
|
gem.add_development_dependency "jeweler", "~> 1.4.0"
|
26
24
|
end
|
25
|
+
|
26
|
+
desc 'Load all the measures and sample patient files into the database'
|
27
|
+
task :loaddb do
|
28
|
+
require './spec/spec_helper'
|
29
|
+
db_host = nil
|
30
|
+
if ENV['TEST_DB_HOST']
|
31
|
+
db_host = ENV['TEST_DB_HOST']
|
32
|
+
else
|
33
|
+
db_host = 'localhost'
|
34
|
+
end
|
35
|
+
db = Mongo::Connection.new(db_host, 27017).db('test')
|
36
|
+
|
37
|
+
db.drop_collection('measures')
|
38
|
+
db.drop_collection('records')
|
39
|
+
|
40
|
+
measures = Dir.glob('measures/*')
|
41
|
+
measures.each do |dir|
|
42
|
+
# load db with measure and sample patient records
|
43
|
+
files = Dir.glob(File.join(dir,'*.json'))
|
44
|
+
measure_file = files[0]
|
45
|
+
patient_files = Dir.glob(File.join(dir, 'patients', '*.json'))
|
46
|
+
measure = JSON.parse(File.read(measure_file))
|
47
|
+
measure_id = measure['id']
|
48
|
+
measure_collection = db.create_collection('measures')
|
49
|
+
record_collection = db.create_collection('records')
|
50
|
+
measure_collection.save(measure)
|
51
|
+
patient_files.each do |patient_file|
|
52
|
+
patient = JSON.parse(File.read(patient_file))
|
53
|
+
record_collection.save(patient)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -18,14 +18,16 @@ module QME
|
|
18
18
|
# Calculates all dates necessary to create a query for this measure
|
19
19
|
# This will be run by the constructor if params were passed in
|
20
20
|
def calculate_dates
|
21
|
-
|
21
|
+
@calculated_dates = {}
|
22
|
+
|
23
|
+
ctx = V8::Context.new
|
22
24
|
@parameters.each_pair do |key, value|
|
23
25
|
ctx[key] = value
|
26
|
+
@calculated_dates[key] = value
|
24
27
|
end
|
25
28
|
|
26
29
|
ctx['year'] = 365 * 24 * 60 * 60 # TODO: Replace this with a js file that has all constants
|
27
30
|
|
28
|
-
@calculated_dates = {}
|
29
31
|
@measure_json["calculated_dates"].each_pair do |key, value|
|
30
32
|
@calculated_dates[key] = ctx.eval(value)
|
31
33
|
end
|
@@ -61,7 +63,11 @@ module QME
|
|
61
63
|
definition_json['or'].each do |operand|
|
62
64
|
operands << create_query(operand)
|
63
65
|
end
|
64
|
-
args['$or']
|
66
|
+
if args['$or']
|
67
|
+
args['$ne'] = {'$or' => operands}
|
68
|
+
else
|
69
|
+
args['$or'] = operands
|
70
|
+
end
|
65
71
|
elsif definition_json.has_key?('query')
|
66
72
|
process_query(definition_json['query'], args)
|
67
73
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module QME
|
2
|
+
module Query
|
3
|
+
class JsonQueryExecutor
|
4
|
+
def initialize(db)
|
5
|
+
@db = db
|
6
|
+
end
|
7
|
+
|
8
|
+
def measure_def(measure_id)
|
9
|
+
measures = @db.collection('measures')
|
10
|
+
measures.find({'id'=> "#{measure_id}"}).to_a[0]
|
11
|
+
end
|
12
|
+
|
13
|
+
def measure_result(measure_id, parameter_values)
|
14
|
+
jdb = JSONDocumentBuilder.new(measure_def(measure_id),
|
15
|
+
parameter_values)
|
16
|
+
|
17
|
+
collection = @db.collection('records')
|
18
|
+
result = {}
|
19
|
+
|
20
|
+
collection.find(jdb.numerator_query) do |cursor|
|
21
|
+
result[:numerator] = cursor.count
|
22
|
+
end
|
23
|
+
|
24
|
+
collection.find(jdb.denominator_query) do |cursor|
|
25
|
+
result[:denominator] = cursor.count
|
26
|
+
end
|
27
|
+
collection.find(jdb.initial_population_query) do |cursor|
|
28
|
+
result[:population] = cursor.count
|
29
|
+
end
|
30
|
+
|
31
|
+
exclusions_query = jdb.exclusions_query
|
32
|
+
if exclusions_query.empty?
|
33
|
+
result[:exceptions] = 0
|
34
|
+
else
|
35
|
+
collection.find(exclusions_query) do |cursor|
|
36
|
+
result[:exceptions] = cursor.count
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
result
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -149,8 +149,8 @@
|
|
149
149
|
{
|
150
150
|
"or": [
|
151
151
|
{
|
152
|
-
"category": "Procedure performed",
|
153
|
-
"title": "
|
152
|
+
"category": "Procedure not performed",
|
153
|
+
"title": "Hysterectomy",
|
154
154
|
"query": {"hysterectomy": null}
|
155
155
|
},
|
156
156
|
{
|
@@ -163,8 +163,8 @@
|
|
163
163
|
]
|
164
164
|
},
|
165
165
|
"numerator": {
|
166
|
-
"category": "
|
167
|
-
"title": "
|
166
|
+
"category": "Laboratory test result",
|
167
|
+
"title": "Pap test",
|
168
168
|
"query": {"pap_test": {"_gte": "@earliest_pap"}}
|
169
169
|
},
|
170
170
|
"exception": {}
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{quality-measure-engine}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marc Hadley", "Andy Gregorowicz"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-29}
|
13
13
|
s.description = %q{A library for extracting quality measure information from HITSP C32's and ASTM CCR's}
|
14
14
|
s.email = %q{talk@projectpophealth.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,7 +28,8 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/qme/map/map_reduce_builder.rb",
|
29
29
|
"lib/qme/map/map_reduce_executor.rb",
|
30
30
|
"lib/qme/query/json_document_builder.rb",
|
31
|
-
"lib/
|
31
|
+
"lib/qme/query/json_query_executor.rb",
|
32
|
+
"lib/quality-measure-engine.rb",
|
32
33
|
"measures/0032/0032_NQF_Cervical_Cancer_Screening.json",
|
33
34
|
"measures/0032/patients/denominator1.json",
|
34
35
|
"measures/0032/patients/denominator2.json",
|
@@ -71,18 +72,14 @@ Gem::Specification.new do |s|
|
|
71
72
|
|
72
73
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
73
74
|
s.add_runtime_dependency(%q<mongo>, ["~> 1.1"])
|
74
|
-
s.add_runtime_dependency(%q<mongomatic>, ["~> 0.5.8"])
|
75
75
|
s.add_runtime_dependency(%q<therubyracer>, ["~> 0.7.5"])
|
76
|
-
s.add_runtime_dependency(%q<bson_ext>, ["~> 1.1.1"])
|
77
76
|
s.add_development_dependency(%q<jsonschema>, ["~> 2.0.0"])
|
78
77
|
s.add_development_dependency(%q<rspec>, ["~> 2.0.0"])
|
79
78
|
s.add_development_dependency(%q<awesome_print>, ["~> 0.2.1"])
|
80
79
|
s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
|
81
80
|
else
|
82
81
|
s.add_dependency(%q<mongo>, ["~> 1.1"])
|
83
|
-
s.add_dependency(%q<mongomatic>, ["~> 0.5.8"])
|
84
82
|
s.add_dependency(%q<therubyracer>, ["~> 0.7.5"])
|
85
|
-
s.add_dependency(%q<bson_ext>, ["~> 1.1.1"])
|
86
83
|
s.add_dependency(%q<jsonschema>, ["~> 2.0.0"])
|
87
84
|
s.add_dependency(%q<rspec>, ["~> 2.0.0"])
|
88
85
|
s.add_dependency(%q<awesome_print>, ["~> 0.2.1"])
|
@@ -90,9 +87,7 @@ Gem::Specification.new do |s|
|
|
90
87
|
end
|
91
88
|
else
|
92
89
|
s.add_dependency(%q<mongo>, ["~> 1.1"])
|
93
|
-
s.add_dependency(%q<mongomatic>, ["~> 0.5.8"])
|
94
90
|
s.add_dependency(%q<therubyracer>, ["~> 0.7.5"])
|
95
|
-
s.add_dependency(%q<bson_ext>, ["~> 1.1.1"])
|
96
91
|
s.add_dependency(%q<jsonschema>, ["~> 2.0.0"])
|
97
92
|
s.add_dependency(%q<rspec>, ["~> 2.0.0"])
|
98
93
|
s.add_dependency(%q<awesome_print>, ["~> 0.2.1"])
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Marc Hadley
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-29 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -32,25 +32,10 @@ dependencies:
|
|
32
32
|
version: "1.1"
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: mongomatic
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 5
|
46
|
-
- 8
|
47
|
-
version: 0.5.8
|
48
|
-
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
35
|
- !ruby/object:Gem::Dependency
|
51
36
|
name: therubyracer
|
52
37
|
prerelease: false
|
53
|
-
requirement: &
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
40
|
requirements:
|
56
41
|
- - ~>
|
@@ -61,26 +46,11 @@ dependencies:
|
|
61
46
|
- 5
|
62
47
|
version: 0.7.5
|
63
48
|
type: :runtime
|
64
|
-
version_requirements: *
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
|
-
name: bson_ext
|
67
|
-
prerelease: false
|
68
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
|
-
requirements:
|
71
|
-
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
segments:
|
74
|
-
- 1
|
75
|
-
- 1
|
76
|
-
- 1
|
77
|
-
version: 1.1.1
|
78
|
-
type: :runtime
|
79
|
-
version_requirements: *id004
|
49
|
+
version_requirements: *id002
|
80
50
|
- !ruby/object:Gem::Dependency
|
81
51
|
name: jsonschema
|
82
52
|
prerelease: false
|
83
|
-
requirement: &
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
84
54
|
none: false
|
85
55
|
requirements:
|
86
56
|
- - ~>
|
@@ -91,11 +61,11 @@ dependencies:
|
|
91
61
|
- 0
|
92
62
|
version: 2.0.0
|
93
63
|
type: :development
|
94
|
-
version_requirements: *
|
64
|
+
version_requirements: *id003
|
95
65
|
- !ruby/object:Gem::Dependency
|
96
66
|
name: rspec
|
97
67
|
prerelease: false
|
98
|
-
requirement: &
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
99
69
|
none: false
|
100
70
|
requirements:
|
101
71
|
- - ~>
|
@@ -106,11 +76,11 @@ dependencies:
|
|
106
76
|
- 0
|
107
77
|
version: 2.0.0
|
108
78
|
type: :development
|
109
|
-
version_requirements: *
|
79
|
+
version_requirements: *id004
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: awesome_print
|
112
82
|
prerelease: false
|
113
|
-
requirement: &
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
114
84
|
none: false
|
115
85
|
requirements:
|
116
86
|
- - ~>
|
@@ -121,11 +91,11 @@ dependencies:
|
|
121
91
|
- 1
|
122
92
|
version: 0.2.1
|
123
93
|
type: :development
|
124
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
125
95
|
- !ruby/object:Gem::Dependency
|
126
96
|
name: jeweler
|
127
97
|
prerelease: false
|
128
|
-
requirement: &
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
129
99
|
none: false
|
130
100
|
requirements:
|
131
101
|
- - ~>
|
@@ -136,7 +106,7 @@ dependencies:
|
|
136
106
|
- 0
|
137
107
|
version: 1.4.0
|
138
108
|
type: :development
|
139
|
-
version_requirements: *
|
109
|
+
version_requirements: *id006
|
140
110
|
description: A library for extracting quality measure information from HITSP C32's and ASTM CCR's
|
141
111
|
email: talk@projectpophealth.org
|
142
112
|
executables: []
|
@@ -158,7 +128,8 @@ files:
|
|
158
128
|
- lib/qme/map/map_reduce_builder.rb
|
159
129
|
- lib/qme/map/map_reduce_executor.rb
|
160
130
|
- lib/qme/query/json_document_builder.rb
|
161
|
-
- lib/
|
131
|
+
- lib/qme/query/json_query_executor.rb
|
132
|
+
- lib/quality-measure-engine.rb
|
162
133
|
- measures/0032/0032_NQF_Cervical_Cancer_Screening.json
|
163
134
|
- measures/0032/patients/denominator1.json
|
164
135
|
- measures/0032/patients/denominator2.json
|