Class: HQMF::Document

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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

Parameters:



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

#attributesObject (readonly)

Returns the value of attribute attributes.



12
13
14
# File 'lib/hqmf-model/document.rb', line 12

def attributes
  @attributes
end

#cms_idObject (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

#descriptionObject (readonly)

Returns the value of attribute description.



12
13
14
# File 'lib/hqmf-model/document.rb', line 12

def description
  @description
end

#hqmf_idObject (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_idObject (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_numberObject (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

#idObject (readonly)

Returns the value of attribute id.



12
13
14
# File 'lib/hqmf-model/document.rb', line 12

def id
  @id
end

#measure_periodObject (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

#populationsObject (readonly)

Returns the value of attribute populations.



12
13
14
# File 'lib/hqmf-model/document.rb', line 12

def populations
  @populations
end

#source_data_criteriaObject (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

#titleObject (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_oidsObject



132
133
134
# File 'lib/hqmf-model/document.rb', line 132

def all_code_set_oids
  (@data_criteria.map {|d| d.all_code_set_oids }).flatten.compact.uniq
end

#all_data_criteriaArray

Get all the data criteria defined by the measure

Returns:

  • (Array)

    an array of HQMF::DataCriteria describing the data elements used by the measure



128
129
130
# File 'lib/hqmf-model/document.rb', line 128

def all_data_criteria
  @data_criteria
end

#all_population_criteriaArray

Get all the population criteria defined by the measure

Returns:

  • (Array)

    an array of HQMF::PopulationCriteria



115
116
117
# File 'lib/hqmf-model/document.rb', line 115

def all_population_criteria
  @population_criteria
end

#data_criteria(id) ⇒ HQMF::DataCriteria

Get a specific data criteria by id.

Parameters:

  • id (String)

    the data criteria identifier

Returns:



175
176
177
# File 'lib/hqmf-model/document.rb', line 175

def data_criteria(id)
  find(@data_criteria, :id, id)
end

#population_criteria(id) ⇒ HQMF::PopulationCriteria

Get a specific population criteria by id.

Parameters:

  • id (String)

    the population identifier

Returns:



122
123
124
# File 'lib/hqmf-model/document.rb', line 122

def population_criteria(id)
  find(@population_criteria, :id, id)
end

#referenced_data_criteriaArray

Returns an array of HQMF::DataCriteria ids that are actually used in the measure.

Returns:

  • (Array)

    an array of HQMF::DataCriteria ids that are actually used in the measure



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/hqmf-model/document.rb', line 152

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

Returns:

  • (Array)

    an array of HQMF::DataCriteria describing the data elements used by the measure that are specific occurrences



138
139
140
141
142
143
144
145
146
147
148
# File 'lib/hqmf-model/document.rb', line 138

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_jsonObject



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