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?, #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
# 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_telecoms = patient['telecoms']
end

Instance Method Details

#code_code_system_stringObject



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

def code_code_system_string
  code_for_element(self)
end

#code_description(element = self) ⇒ Object



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

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



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

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

#code_system_nameObject



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

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

#data_elementsObject



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

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



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

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_rank_stringObject



130
131
132
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 130

def diagnosis_rank_string
  " (rank: #{self['rank']})" if self['rank']
end

#end_time?Boolean

Returns:

  • (Boolean)


134
135
136
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 134

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

#entity_stringObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 62

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['type'])}"
  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



85
86
87
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 85

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

#identifier_stringObject



81
82
83
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 81

def identifier_string
  identifier_for_element(self)
end

#include_style?Boolean

Returns:

  • (Boolean)


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

def include_style?
  @include_style
end

#nested_code_stringObject



126
127
128
# File 'lib/html-export/qdm-patient/qdm_patient.rb', line 126

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

#patient_addressesObject



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

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



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

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

#result_stringObject



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

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

  self['result']
end

#unit_stringObject



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

def unit_string
  return "#{self['value']} " if !self['unit'] || self['unit'] == '1'
  "#{self['value']} #{self['unit']}"
end