lib/health-data-standards/models/cqm/measure.rb in health-data-standards-3.0.6 vs lib/health-data-standards/models/cqm/measure.rb in health-data-standards-3.1.0
- old
+ new
@@ -1,36 +1,57 @@
module HealthDataStandards
module CQM
+ class Measure
+ include Mongoid::Document
+ store_in collection: 'measures'
+ field :id, type: String
+ field :sub_id, type: String
+ field :name, type: String
+ field :subtitle, type: String
+ field :short_subtitle, type: String
+ field :hqmf_id, type: String
+ field :hqmf_set_id, type: String
+ field :hqmf_version_number, type: String
+ field :nqf_id, type: String
+ field :type, type: String
+ field :category, type: String
+ field :population_ids , type: Hash
+ field :oids, type: Array
+ field :data_criteria, type: Array
- class Measure
- include Mongoid::Document
- store_in collection: 'measures'
- field :id, type: String
- field :sub_id, type: String
- field :name, type: String
- field :subtitle, type: String
- field :short_subtitle, type: String
- field :hqmf_id, type: String
- field :hqmf_set_id, type: String
- field :hqmf_version_number, type: String
- field :nqf_id, type: String
- field :type, type: String
- field :category, type: String
- field :population_ids , type: Hash
- field :oids, type: Array
- field :data_criteria, type: Array
- scope :top_level_by_type , ->(type){where({"type"=> type}).any_of({"sub_id" => nil}, {"sub_id" => "a"})}
- scope :top_level , any_of({"sub_id" => nil}, {"sub_id" => "a"})
- scope :order_by_id_sub_id, order_by([["id", :asc],["sub_id", :asc]])
- index({oids: 1})
- index({hqmf_id: 1})
- index({category: 1})
- index "bundle_id" => 1
-
- validates_presence_of :id
- validates_presence_of :name
-
+ scope :top_level_by_type , ->(type){where({"type"=> type}).any_of({"sub_id" => nil}, {"sub_id" => "a"})}
+ scope :top_level , any_of({"sub_id" => nil}, {"sub_id" => "a"})
+ scope :order_by_id_sub_id, order_by([["id", :asc],["sub_id", :asc]])
+ index({oids: 1})
+ index({hqmf_id: 1})
+ index({category: 1})
+ index "bundle_id" => 1
+
+ validates_presence_of :id
+ validates_presence_of :name
- end
- end
+ def self.categories
+ pipeline = []
+ pipeline << {'$group' => {_id: "$id",
+ name: {"$first" => "$name"},
+ description: {"$first" => "$description"},
+ sub_ids: {'$push' => "$sub_id"},
+ subs: {'$push' => {"sub_id" => "$sub_id", "short_subtitle" => "$short_subtitle"}},
+ category: {'$first' => "$category"}}}
+
+ pipeline << {'$group' => {_id: "$category",
+ measures: {'$push' => {"id" => "$_id",
+ 'name' => "$name",
+ 'description' => "$description",
+ 'subs' => "$subs",
+ 'sub_ids' => "$sub_ids"
+ }}}}
+
+ pipeline << {'$project' => {'category' => '$_id', 'measures' => 1, '_id' => 0}}
+
+ pipeline << {'$sort' => {"category" => 1}}
+ Mongoid.default_session.command(aggregate: 'measures', pipeline: pipeline)['result']
+ end
+ end
+ end
end
\ No newline at end of file