Class: QdmPatient

Inherits:
Mustache
  • Object
show all
Includes:
HQMF::Util::EntityHelper, Qrda::Export::Helper::PatientViewHelper
Defined in:
lib/html-export/qdm-patient/qdm_patient.rb

Instance Method Summary collapse

Methods included from HQMF::Util::EntityHelper

#care_partner_entity?, #location_entity?, #organization_entity?, #patient_entity?, #practitioner_entity?

Methods included from Qrda::Export::Helper::PatientViewHelper

#birthdate, #ethnic_group, #expiration, #gender, #given_name, #mrn, #patient, #payer, #provider, #provider_ccn, #provider_npi, #provider_street, #provider_tin, #provider_type_code, #race

Constructor Details

#initialize(patient, include_style) ⇒ QdmPatient

Returns a new instance of QdmPatient.



8
9
10
11
12
13
14
15
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 8

def initialize(patient, include_style)
  @include_style = include_style
  @patient = patient
  @qdmPatient = patient.qdmPatient
  @patient_addresses = patient['addresses']
  @patient_email = patient['email']
  @patient_telecoms = patient['telecoms']
end

Instance Method Details

#code_code_system_stringObject



97
98
99
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 97

def code_code_system_string
  code_for_element(self)
end

#code_description(element = self) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 109

def code_description(element = self)
  has_descriptions = @patient.respond_to?(:code_description_hash) && !@patient.code_description_hash.empty?
  # mongo keys cannot contain '.', so replace all '.', key example: '21112-8:2_16_840_1_113883_6_1'
  return " - #{@patient.code_description_hash["#{element['code']}:#{element['system']}".tr('.', '_')]}" if has_descriptions
  # no code description available
  ""
end

#code_for_element(element) ⇒ Object



101
102
103
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 101

def code_for_element(element)
  element ? "#{element['code']} (#{HQMF::Util::CodeSystemHelper.code_system_for(element['system'])})#{code_description(element)}" : ''
end

#code_system_nameObject



105
106
107
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 105

def code_system_name
  HQMF::Util::CodeSystemHelper.code_system_for(self['system'])
end

#data_elementsObject



47
48
49
50
51
52
53
54
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 47

def data_elements
  de_hash = {}
  @qdmPatient.dataElements.each do |data_element|
    data_element['methodCode'] = data_element['method'] if data_element['method']
    de_hash[data_element._type] ? de_hash[data_element._type][:element_list] << data_element : de_hash[data_element._type] = { title: data_element._type, element_list: [data_element] }
  end
  JSON.parse(de_hash.values.to_json)
end

#demographic_code_description(code) ⇒ Object



117
118
119
120
121
122
123
124
125
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 117

def demographic_code_description(code)
  # only have code, don't need code system
  has_descriptions = code && @patient.respond_to?(:code_description_hash) && !@patient.code_description_hash.empty?
  if has_descriptions
    key = @patient.code_description_hash.keys.detect { |k| k.starts_with?("#{send(code)}:") }
    return " - #{@patient.code_description_hash[key]}"
  end
  ""
end

#diagnosis_stringObject



144
145
146
147
148
149
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 144

def diagnosis_string
  dx_string = ''
  dx_string += "</br>&nbsp; rank: #{self['rank']}" if self['rank']
  dx_string += "</br>&nbsp; presentOnAdmissionIndicator: #{self['presentOnAdmissionIndicator']['code']}" if self['presentOnAdmissionIndicator']
  dx_string
end

#end_time?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 151

def end_time?
  self['high'] && DateTime.parse(self['high']).year < 3000
end

#entity_stringObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 67

def entity_string
  if care_partner_entity?
    "</br>&nbsp; Care Partner: #{identifier_for_element(self['identifier'])}
    </br>&nbsp; Care Partner Relationship: #{code_for_element(self['relationship'])}"
  elsif organization_entity?
    "</br>&nbsp; Organization: #{identifier_for_element(self['identifier'])}
    </br>&nbsp; Organization Type: #{code_for_element(self['organizationType'])}"
  elsif location_entity?
    "</br>&nbsp; Location: #{identifier_for_element(self['identifier'])}
    </br>&nbsp; Location Type: #{code_for_element(self['locationType'])}"
  elsif patient_entity?
    "</br>&nbsp; Patient: #{identifier_for_element(self['identifier'])}"
  elsif practitioner_entity?
    "</br>&nbsp; Practitioner: #{identifier_for_element(self['identifier'])}
    </br>&nbsp; Practitioner Role: #{code_for_element(self['role'])},
    </br>&nbsp; Practitioner Specialty: #{code_for_element(self['specialty'])},
    </br>&nbsp; Practitioner Qualification: #{code_for_element(self['qualification'])}"
  else
    "</br>&nbsp; Entity: #{identifier_for_element(self['identifier'])}"
  end
end

#identifier_for_element(identifier) ⇒ Object



93
94
95
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 93

def identifier_for_element(identifier)
  identifier ? "#{identifier['value']} (#{identifier['namingSystem']})" : ''
end

#identifier_stringObject



89
90
91
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 89

def identifier_string
  identifier_for_element(self)
end

#include_style?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 43

def include_style?
  @include_style
end

#nested_code_stringObject



140
141
142
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 140

def nested_code_string
  code_for_element(self['code'])
end

#patient_addressesObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 17

def patient_addresses
  @patient_addresses ||= [CQM::Address.new(
    use: 'HP',
    street: ['202 Burlington Rd.'],
    city: 'Bedford',
    state: 'MA',
    zip: '01730',
    country: 'US'
  )]
  address_str = ""
  @patient_addresses.each do |address|
    # create formatted address
    address_str += "<address>"
    address['street'].each { |street| address_str += "#{street}<br>" }
    address_str += "#{address['city']}, #{address['state']} #{address['zip']}<br> #{address['country']} </address>"
  end
  address_str
end

#patient_telecomsObject



36
37
38
39
40
41
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 36

def patient_telecoms
  @patient_telecoms ||= [CQM::Telecom.new(use: 'HP', value: '555-555-2003')]
  # create formatted telecoms
  @patient_telecoms << CQM::Telecom.new(use: 'HP', value: @patient_email) if @patient_email
  @patient_telecoms.map { |telecom| "(#{telecom['use']}) #{telecom['value']}" }.join("<br>")
end

#result_stringObject



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 127

def result_string
  return unit_string if self['value']
  return code_code_system_string if self['code']

  # Checks to see if the result is a DateTime value, String, or Numeric
  begin
    DateTime.parse(self['result'])
  rescue ArgumentError, TypeError
    # If the value is not numeric, just print out the result
    self['result'].is_a?(Numeric) ? trimed_value(self['result']) : self['result']
  end
end

#trimed_value(number) ⇒ Object



61
62
63
64
65
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 61

def trimed_value(number)
  i = number.to_i
  f = number.to_f
  i == f ? i : f
end

#unit_stringObject



56
57
58
59
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 56

def unit_string
  return trimed_value(self['value']).to_s if !self['unit'] || self['unit'] == '1'
  "#{trimed_value(self['value'])} #{self['unit']}"
end