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, 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:

  • id (String)
  • hqmf_id (String)
  • hqmf_set_id (String)
  • hqmf_version_number (String)
  • title (String)
  • description (String)
  • population_criteria (Array#PopulationCritera)
  • data_criteria (Array#DataCriteria)
  • source_data_criteria (Array#DataCriteria)
  • attributes (Array#Attribute)
  • populations (Array#Hash) (defaults to: nil)
  • measure_period (Range)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/hqmf-model/document.rb', line 27

def initialize(id, hqmf_id, hqmf_set_id, hqmf_version_number, 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
  @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

#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



51
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
# File 'lib/hqmf-model/document.rb', line 51

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"]
  
  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, title, description, population_criterias, data_criterias, source_data_criterias, attributes, measure_period,populations)
end

Instance Method Details

#all_code_set_oidsObject



130
131
132
# File 'lib/hqmf-model/document.rb', line 130

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



126
127
128
# File 'lib/hqmf-model/document.rb', line 126

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



113
114
115
# File 'lib/hqmf-model/document.rb', line 113

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:



166
167
168
# File 'lib/hqmf-model/document.rb', line 166

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:



120
121
122
# File 'lib/hqmf-model/document.rb', line 120

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



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/hqmf-model/document.rb', line 143

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_criteriaArray

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



136
137
138
139
# File 'lib/hqmf-model/document.rb', line 136

def specific_occurrence_source_data_criteria
  return [] if @source_data_criteria.nil?
  @source_data_criteria.select {|dc| !dc.specific_occurrence.nil?}
end

#to_jsonObject



82
83
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
# File 'lib/hqmf-model/document.rb', line 82

def to_json
  json = build_hash(self, [:id, :hqmf_id, :hqmf_set_id, :hqmf_version_number, :title, :description])

  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