Class: HQMF::Document
- Inherits:
-
Object
- Object
- HQMF::Document
- Includes:
- Conversion::Utilities
- Defined in:
- lib/hqmf-model/document.rb
Overview
Class representing an HQMF document
Constant Summary collapse
- MEASURE_PERIOD_ID =
"MeasurePeriod"
- STRATIFIED_POPULATION_TEMPLATE_ID =
'2.16.840.1.113883.3.100.1.2'
- STRATIFIED_POPULATION_TEMPLATE_TITLE =
'Stratified'
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#cms_id ⇒ Object
readonly
Returns the value of attribute cms_id.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#hqmf_id ⇒ Object
readonly
Returns the value of attribute hqmf_id.
-
#hqmf_set_id ⇒ Object
readonly
Returns the value of attribute hqmf_set_id.
-
#hqmf_version_number ⇒ Object
readonly
Returns the value of attribute hqmf_version_number.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#measure_period ⇒ Object
readonly
Returns the value of attribute measure_period.
-
#populations ⇒ Object
readonly
Returns the value of attribute populations.
-
#source_data_criteria ⇒ Object
readonly
Returns the value of attribute source_data_criteria.
-
#title ⇒ Object
readonly
Returns the value of attribute title.
Class Method Summary collapse
-
.from_json(json) ⇒ Object
Create a new HQMF::Document from a JSON hash keyed with symbols.
Instance Method Summary collapse
- #all_code_set_oids ⇒ Object
-
#all_data_criteria ⇒ Array
Get all the data criteria defined by the measure.
-
#all_population_criteria ⇒ Array
Get all the population criteria defined by the measure.
-
#attributes_for_code(code, code_system) ⇒ Array#Attribute
Get specific attributes by code.
-
#backfill_patient_characteristics_with_codes(codes) ⇒ Object
patient characteristics data criteria such as GENDER require looking at the codes to determine if the measure is interested in Males or Females.
-
#data_criteria(id) ⇒ HQMF::DataCriteria
Get a specific data criteria by id.
- #find_population_by_type(type) ⇒ Object
-
#initialize(id, hqmf_id, hqmf_set_id, hqmf_version_number, cms_id, title, description, population_criteria, data_criteria, source_data_criteria, attributes, measure_period, populations = nil) ⇒ Document
constructor
Create a new HQMF::Document which can be converted to JavaScript.
- #is_cv? ⇒ Boolean
-
#population_criteria(id) ⇒ HQMF::PopulationCriteria
Get a specific population criteria by id.
-
#referenced_data_criteria ⇒ Array
An array of HQMF::DataCriteria ids that are actually used in the measure.
-
#specific_occurrence_source_data_criteria(force_sources = nil) ⇒ Array
Get the source data criteria that are specific occurrences.
- #to_json ⇒ Object
Methods included from Conversion::Utilities
#build_hash, #check_equality, #json_array, #openstruct_to_json
Constructor Details
#initialize(id, hqmf_id, hqmf_set_id, hqmf_version_number, cms_id, title, description, population_criteria, data_criteria, source_data_criteria, attributes, measure_period, populations = nil) ⇒ Document
Create a new HQMF::Document which can be converted to JavaScript
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/hqmf-model/document.rb', line 27 def initialize(id, hqmf_id, hqmf_set_id, hqmf_version_number, cms_id, title, description, population_criteria, data_criteria, source_data_criteria, attributes, measure_period, populations=nil) @id = id @hqmf_id = hqmf_id @hqmf_set_id = hqmf_set_id @hqmf_version_number = hqmf_version_number @cms_id = cms_id @title = title @description = description @population_criteria = population_criteria @data_criteria = data_criteria @source_data_criteria = source_data_criteria @attributes = attributes @populations = populations || [ { HQMF::PopulationCriteria::IPP => HQMF::PopulationCriteria::IPP, HQMF::PopulationCriteria::DENOM => HQMF::PopulationCriteria::DENOM, HQMF::PopulationCriteria::NUMER => HQMF::PopulationCriteria::NUMER, HQMF::PopulationCriteria::DENEXCEP => HQMF::PopulationCriteria::DENEXCEP, HQMF::PopulationCriteria::DENEX => HQMF::PopulationCriteria::DENEX } ] @measure_period = measure_period end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def attributes @attributes end |
#cms_id ⇒ Object (readonly)
Returns the value of attribute cms_id.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def cms_id @cms_id end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def description @description end |
#hqmf_id ⇒ Object (readonly)
Returns the value of attribute hqmf_id.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def hqmf_id @hqmf_id end |
#hqmf_set_id ⇒ Object (readonly)
Returns the value of attribute hqmf_set_id.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def hqmf_set_id @hqmf_set_id end |
#hqmf_version_number ⇒ Object (readonly)
Returns the value of attribute hqmf_version_number.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def hqmf_version_number @hqmf_version_number end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def id @id end |
#measure_period ⇒ Object (readonly)
Returns the value of attribute measure_period.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def measure_period @measure_period end |
#populations ⇒ Object (readonly)
Returns the value of attribute populations.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def populations @populations end |
#source_data_criteria ⇒ Object (readonly)
Returns the value of attribute source_data_criteria.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def source_data_criteria @source_data_criteria end |
#title ⇒ Object (readonly)
Returns the value of attribute title.
12 13 14 |
# File 'lib/hqmf-model/document.rb', line 12 def title @title end |
Class Method Details
.from_json(json) ⇒ Object
Create a new HQMF::Document from a JSON hash keyed with symbols
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/hqmf-model/document.rb', line 52 def self.from_json(json) id = json["id"] hqmf_id = json["hqmf_id"] hqmf_set_id = json["hqmf_set_id"] hqmf_version_number = json["hqmf_version_number"] title = json["title"] description = json["description"] cms_id = json["cms_id"] population_criterias = [] json["population_criteria"].each do |key, population_criteria| population_criterias << HQMF::PopulationCriteria.from_json(key.to_s, population_criteria) end if json['population_criteria'] data_criterias = [] json["data_criteria"].each do |key, data_criteria| data_criterias << HQMF::DataCriteria.from_json(key.to_s, data_criteria) end source_data_criterias = [] json["source_data_criteria"].each do |key, data_criteria| source_data_criterias << HQMF::DataCriteria.from_json(key.to_s, data_criteria) end populations = json["populations"] if json["populations"] attributes = json["attributes"].map {|attribute| HQMF::Attribute.from_json(attribute)} if json["attributes"] measure_period = HQMF::Range.from_json(json["measure_period"]) if json["measure_period"] HQMF::Document.new(id, hqmf_id, hqmf_set_id, hqmf_version_number, cms_id, title, description, population_criterias, data_criterias, source_data_criterias, attributes, measure_period,populations) end |
Instance Method Details
#all_code_set_oids ⇒ Object
140 141 142 |
# File 'lib/hqmf-model/document.rb', line 140 def all_code_set_oids (@data_criteria.map {|d| d.all_code_set_oids }).flatten.compact.uniq end |
#all_data_criteria ⇒ Array
Get all the data criteria defined by the measure
136 137 138 |
# File 'lib/hqmf-model/document.rb', line 136 def all_data_criteria @data_criteria end |
#all_population_criteria ⇒ Array
Get all the population criteria defined by the measure
115 116 117 |
# File 'lib/hqmf-model/document.rb', line 115 def all_population_criteria @population_criteria end |
#attributes_for_code(code, code_system) ⇒ Array#Attribute
Get specific attributes by code.
183 184 185 |
# File 'lib/hqmf-model/document.rb', line 183 def attributes_for_code(code, code_system) @attributes.find_all { |e| e.send(:code) == code && e.send(:code_obj).send(:system) == code_system } end |
#backfill_patient_characteristics_with_codes(codes) ⇒ Object
patient characteristics data criteria such as GENDER require looking at the codes to determine if the measure is interested in Males or Females. This process is awkward, and thus is done as a separate step after the document has been converted.
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/hqmf-model/document.rb', line 197 def backfill_patient_characteristics_with_codes(codes) [].concat(self.all_data_criteria).concat(self.source_data_criteria).each do |data_criteria| if (data_criteria.type == :characteristic and !data_criteria.property.nil?) if (codes) value_set = codes[data_criteria.code_list_id] puts "\tno value set for unknown patient characteristic: #{data_criteria.id}" unless value_set else puts "\tno code set to back fill: #{data_criteria.title}" next end if (data_criteria.property == :gender) next if value_set.nil? key = value_set.keys[0] data_criteria.value = HQMF::Coded.new('CD','Administrative Sex',value_set[key].first) else data_criteria.inline_code_list = value_set end elsif (data_criteria.type == :characteristic) if (codes) value_set = codes[data_criteria.code_list_id] if (value_set) # this is looking for a birthdate characteristic that is set as a generic characteristic but points to a loinc code set if (value_set['LOINC'] and value_set['LOINC'].first == '21112-8') data_criteria.definition = 'patient_characteristic_birthdate' end # this is looking for a gender characteristic that is set as a generic characteristic gender_key = (value_set.keys.select {|set| set == 'Administrative Sex' || set == 'AdministrativeSex'}).first if (gender_key and ['M','F'].include? value_set[gender_key].first) data_criteria.definition = 'patient_characteristic_gender' data_criteria.value = HQMF::Coded.new('CD','Gender',value_set[gender_key].first) end end end end end end |
#data_criteria(id) ⇒ HQMF::DataCriteria
Get a specific data criteria by id.
190 191 192 |
# File 'lib/hqmf-model/document.rb', line 190 def data_criteria(id) find(@data_criteria, :id, id) end |
#find_population_by_type(type) ⇒ Object
130 131 132 |
# File 'lib/hqmf-model/document.rb', line 130 def find_population_by_type(type) find(@population_criteria, :type, type) end |
#is_cv? ⇒ Boolean
126 127 128 |
# File 'lib/hqmf-model/document.rb', line 126 def is_cv? find(@population_criteria, :type, HQMF::PopulationCriteria::MSRPOPL) end |
#population_criteria(id) ⇒ HQMF::PopulationCriteria
Get a specific population criteria by id.
122 123 124 |
# File 'lib/hqmf-model/document.rb', line 122 def population_criteria(id) find(@population_criteria, :id, id) end |
#referenced_data_criteria ⇒ Array
Returns an array of HQMF::DataCriteria ids that are actually used in the measure.
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/hqmf-model/document.rb', line 160 def referenced_data_criteria data_criteria_ids = [] @population_criteria.each do |population| data_criteria_ids.concat(population.referenced_data_criteria) end references = [] data_criteria_ids.each do |id| dc = data_criteria(id) references << id from_dc = dc.referenced_data_criteria(self) references.concat(from_dc) end used_dc = [] references.uniq.each do |id| used_dc << data_criteria(id) end used_dc end |
#specific_occurrence_source_data_criteria(force_sources = nil) ⇒ Array
Get the source data criteria that are specific occurrences
146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/hqmf-model/document.rb', line 146 def specific_occurrence_source_data_criteria(force_sources=nil) return [] if @source_data_criteria.nil? matching = @source_data_criteria.select {|dc| !dc.specific_occurrence.nil?} if force_sources existing = matching.map(&:id) matching.concat @source_data_criteria.select {|dc| !existing.include?(dc.id) && force_sources.include?(dc.id)} end matching end |
#to_json ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/hqmf-model/document.rb', line 84 def to_json json = build_hash(self, [:id, :hqmf_id, :hqmf_set_id, :hqmf_version_number, :title, :description, :cms_id]) json[:population_criteria] = {} @population_criteria.each do |population| json[:population_criteria].merge! population.to_json end json[:data_criteria] = {} @data_criteria.each do |data| json[:data_criteria].merge! data.to_json end json[:source_data_criteria] = {} @source_data_criteria.each do |data| json[:source_data_criteria].merge! data.to_json end x = nil json[:attributes] = x if x = json_array(@attributes) json[:populations] = @populations json[:measure_period] = @measure_period.to_json json end |