quality-measure-engine 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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