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 CHANGED
@@ -1,7 +1,6 @@
1
1
  source :gemcutter
2
2
 
3
3
  gem 'mongo'
4
- gem 'mongomatic'
5
4
  gem 'bson_ext'
6
5
  gem 'rake'
7
6
  gem 'therubyracer', :require => 'v8'
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.0
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
- ctx = V8::Context.new
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'] = operands
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
@@ -5,7 +5,7 @@ require LIB + '/patches/v8'
5
5
  require LIB + '/qme/map/map_reduce_builder'
6
6
  require LIB + '/qme/map/map_reduce_executor'
7
7
  require LIB + '/qme/query/json_document_builder'
8
-
8
+ require LIB + '/qme/query/json_query_executor'
9
9
 
10
10
  require 'json'
11
11
  require 'mongo'
@@ -149,8 +149,8 @@
149
149
  {
150
150
  "or": [
151
151
  {
152
- "category": "Procedure performed",
153
- "title": "No hysterectomy",
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": "Medication Administered",
167
- "title": "Pneumococcal vaccination",
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.0"
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-28}
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/quality_measure_engine.rb",
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
@@ -12,4 +12,4 @@ Bundler.require(:default, :test)
12
12
 
13
13
  PROJECT_ROOT = File.dirname(__FILE__) + '/../'
14
14
 
15
- require PROJECT_ROOT + 'lib/quality_measure_engine'
15
+ require PROJECT_ROOT + 'lib/quality-measure-engine'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
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-28 00:00:00 -04:00
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: &id003 !ruby/object:Gem::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: *id003
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: &id005 !ruby/object:Gem::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: *id005
64
+ version_requirements: *id003
95
65
  - !ruby/object:Gem::Dependency
96
66
  name: rspec
97
67
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::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: *id006
79
+ version_requirements: *id004
110
80
  - !ruby/object:Gem::Dependency
111
81
  name: awesome_print
112
82
  prerelease: false
113
- requirement: &id007 !ruby/object:Gem::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: *id007
94
+ version_requirements: *id005
125
95
  - !ruby/object:Gem::Dependency
126
96
  name: jeweler
127
97
  prerelease: false
128
- requirement: &id008 !ruby/object:Gem::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: *id008
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/quality_measure_engine.rb
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