health-data-standards 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.7.0
@@ -27,15 +27,16 @@ module HealthDataStandards
27
27
  end
28
28
  end
29
29
  to_ccr_purpose(xml)
30
- xml.body do
30
+ xml.Body do
31
31
  to_ccr_problems(xml, patient)
32
- to_ccr_vitals(xml, patient)
33
- to_ccr_results(xml, patient)
34
- to_ccr_encounters(xml, patient)
32
+ to_ccr_allergies(xml, patient)
35
33
  to_ccr_medications(xml, patient)
36
34
  to_ccr_immunizations(xml, patient)
35
+ to_ccr_vitals(xml, patient)
36
+ to_ccr_results(xml, patient)
37
37
  to_ccr_procedures(xml, patient)
38
- to_ccr_allergies(xml, patient)
38
+ to_ccr_encounters(xml, patient)
39
+
39
40
  end
40
41
  to_ccr_actors(xml, patient)
41
42
  end
@@ -46,10 +47,10 @@ module HealthDataStandards
46
47
  private
47
48
 
48
49
  def code_section(xml, codes)
49
- xml.Code do
50
- if codes.present?
51
- codes.each_pair do |code_set, coded_values|
52
- coded_values.each do |coded_value|
50
+ if codes.present?
51
+ codes.each_pair do |code_set, coded_values|
52
+ coded_values.each do |coded_value|
53
+ xml.Code do
53
54
  xml.Value(coded_value)
54
55
  xml.CodingSystem(code_set)
55
56
  #TODO: Need to fix this and not be a hard-coded value
@@ -71,6 +72,7 @@ module HealthDataStandards
71
72
  end
72
73
  end
73
74
 
75
+
74
76
  # Builds the XML snippet for the problems section inside the CCR standard
75
77
  #
76
78
  # @return [Builder::XmlMarkup] CCR XML representation of patient data
@@ -136,25 +138,57 @@ module HealthDataStandards
136
138
  if patient.vital_signs.present?
137
139
  xml.VitalSigns do
138
140
  patient.vital_signs.each_with_index do |vital_sign, index|
139
- xml.Result do
140
- xml.CCRDataObjectID("VT000#{index + 1}")
141
- xml.DateTime do
142
- xml.Type do
143
- xml.Text("Start date")
144
- end
145
- #time
146
- xml.ExactDateTime(convert_to_ccr_time_string(vital_sign.time))
147
- end
148
- xml.Description do
149
- xml.Text(vital_sign.description)
150
- code_section(xml, vital_sign.codes)
151
- end
152
- end
141
+ to_result(xml,vital_sign,"VT000#{index + 1}")
142
+ end
143
+ end
144
+ end
145
+ end
146
+
147
+
148
+ # Builds the XML snippet for the lab section inside the CCR standard
149
+ #
150
+ # @return [Builder::XmlMarkup] CCR XML representation of patient data
151
+ def to_ccr_results(xml, patient)
152
+ if patient.results.present?
153
+ xml.Results do
154
+ patient.results.each_with_index do |lab_result, index|
155
+ to_result(xml,lab_result,"LB000#{index + 1}")
153
156
  end
154
157
  end
155
158
  end
156
159
  end
160
+
157
161
 
162
+ def to_result(xml, res, ccr_id )
163
+ xml.Result do
164
+ xml.CCRDataObjectID(ccr_id)
165
+ xml.DateTime do
166
+ xml.Type do
167
+ xml.Text("Start date")
168
+ end
169
+ #time
170
+ xml.ExactDateTime(convert_to_ccr_time_string(res.time))
171
+ end
172
+ xml.Description do
173
+ xml.Text(res.description)
174
+ code_section(xml, res.codes)
175
+ end
176
+
177
+ xml.Source
178
+ xml.Test do
179
+ xml.CCRDataObjectID("#{ccr_id}TestResult")
180
+ xml.Source
181
+ xml.TestResult do
182
+ xml.Value(res.value["scalar"])
183
+ xml.Units do
184
+ xml.Unit(res.value["units"])
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ end
191
+
158
192
  # Builds the XML snippet for the medications section inside the CCR standard
159
193
  #
160
194
  # @return [Builder::XmlMarkup] CCR XML representation of patient data
@@ -225,31 +259,7 @@ module HealthDataStandards
225
259
  end
226
260
  end
227
261
 
228
- # Builds the XML snippet for the lab section inside the CCR standard
229
- #
230
- # @return [Builder::XmlMarkup] CCR XML representation of patient data
231
- def to_ccr_results(xml, patient)
232
- if patient.results.present?
233
- xml.Results do
234
- patient.results.each_with_index do |lab_result, index|
235
- xml.Result do
236
- xml.CCRDataObjectID("LB000#{index + 1}")
237
- xml.DateTime do
238
- xml.Type do
239
- xml.Text("Start date")
240
- end
241
- #time
242
- xml.ExactDateTime(convert_to_ccr_time_string(lab_result.time))
243
- end
244
- xml.Description do
245
- xml.Text(lab_result.description)
246
- code_section(xml, lab_result.codes)
247
- end
248
- end
249
- end
250
- end
251
- end
252
- end
262
+
253
263
 
254
264
  # Builds the XML snippet for the procedures section inside the CCR standard
255
265
  #
@@ -274,6 +284,7 @@ module HealthDataStandards
274
284
  xml.Status do
275
285
  xml.Text("Active")
276
286
  end
287
+ xml.Source
277
288
  end
278
289
  end
279
290
  end
@@ -303,6 +314,7 @@ module HealthDataStandards
303
314
  xml.Status do
304
315
  xml.Text("Current")
305
316
  end
317
+ xml.Source
306
318
  end
307
319
  end
308
320
  end
@@ -315,7 +327,7 @@ module HealthDataStandards
315
327
  def to_ccr_actors(xml, patient)
316
328
  xml.Actors do
317
329
  xml.Actor do
318
- xml.ActorObjectID("AA0001")
330
+ xml.ActorObjectID(patient.id)
319
331
  xml.Person do
320
332
  xml.Name do
321
333
  xml.CurrentName do
@@ -323,10 +335,10 @@ module HealthDataStandards
323
335
  xml.Family(patient.last)
324
336
  end
325
337
  end
326
- end
327
- xml.DateOfBirth do
328
- xml.ExactDateTime(convert_to_ccr_time_string(patient.birthdate))
329
- if (patient.gender)
338
+ xml.DateOfBirth do
339
+ xml.ExactDateTime(convert_to_ccr_time_string(patient.birthdate))
340
+ end
341
+ if (patient.gender)
330
342
  xml.Gender do
331
343
  if (patient.gender.upcase == "M")
332
344
  xml.Text("Male")
@@ -338,6 +350,7 @@ module HealthDataStandards
338
350
  end
339
351
  end
340
352
  end
353
+ xml.Source
341
354
  end
342
355
  end
343
356
  end
@@ -117,11 +117,13 @@ module HealthDataStandards
117
117
  end
118
118
 
119
119
  # Inspects a C32 document and populates the patient Hash with first name, last name
120
- # birth date and gender.
120
+ # birth date, gender and the effectiveTime.
121
121
  #
122
122
  # @param [Hash] patient A hash that is used to represent the patient
123
123
  # @param [Nokogiri::XML::Node] doc The C32 document parsed by Nokogiri
124
124
  def get_demographics(patient, doc)
125
+ effective_date = doc.at_xpath('/cda:ClinicalDocument/cda:effectiveTime')['value']
126
+ patient.effective_time = HL7Helper.timestamp_to_integer(effective_date)
125
127
  patient_element = doc.at_xpath('/cda:ClinicalDocument/cda:recordTarget/cda:patientRole/cda:patient')
126
128
  patient.first = patient_element.at_xpath('cda:name/cda:given').text
127
129
  patient.last = patient_element.at_xpath('cda:name/cda:family').text
@@ -132,6 +134,16 @@ module HealthDataStandards
132
134
  patient.gender = gender_node['code']
133
135
  id_node = doc.at_xpath('/cda:ClinicalDocument/cda:recordTarget/cda:patientRole/cda:id')
134
136
  patient.medical_record_number = id_node['extension']
137
+
138
+ # parse race, ethnicity, and spoken language
139
+ race_node = patient_element.at_xpath('cda:raceCode')
140
+ patient.race = { code: race_node['code'], code_set: 'CDC-RE' } if race_node
141
+ ethnicity_node = patient_element.at_xpath('cda:ethnicGroupCode')
142
+ patient.ethnicity = {code: ethnicity_node['code'], code_set: 'CDC-RE'} if ethnicity_node
143
+
144
+ languages = patient_element.search('languageCommunication').map {|lc| lc.at_xpath('cda:languageCode')['code'] }
145
+ patient.languages = languages unless languages.empty?
146
+
135
147
  end
136
148
  end
137
149
  end
@@ -1,7 +1,12 @@
1
1
  class Encounter < Entry
2
2
  field :performer, type: Hash
3
3
  field :facility, type: Hash
4
- field :admitType, type: Hash, as: 'admit_type'
5
- field :dischargeDisp, type: Hash, as: 'discharge_disp'
4
+ field :admitType, type: Hash
5
+ field :dischargeDisp, type: Hash
6
6
  embeds_one :reason, class_name: "Entry"
7
+
8
+ alias :admit_type :admitType
9
+ alias :admit_type= :admitType=
10
+ alias :discharge_disp :dischargeDisp
11
+ alias :discharge_disp= :dischargeDisp=
7
12
  end
@@ -150,6 +150,23 @@ class Entry
150
150
  codes.present? && (start_time.present? || end_time.present? || time.present?)
151
151
  end
152
152
 
153
+ # Compares hash values to determine equality
154
+ def ==(other)
155
+ self.class==other.class && self.hash==other.hash
156
+ end
157
+
158
+ # Returns the hash value, calculating it if not already done
159
+ def hash
160
+ @hash || calculate_hash!
161
+ end
162
+
163
+ # Calculates a hash value for this entry
164
+ def calculate_hash!
165
+ entry_hash = to_hash
166
+ entry_hash['description']=nil
167
+ @hash = entry_hash.hash
168
+ end
169
+
153
170
  # Creates a Hash for this Entry
154
171
  # @return [Hash] a Hash representing the Entry
155
172
  def to_hash
@@ -1,11 +1,24 @@
1
1
  class FulfillmentHistory
2
2
  include Mongoid::Document
3
3
 
4
- field :prescriptionNumber, type: String, as: 'prescription_number'
4
+ field :prescriptionNumber, type: String
5
5
  field :provider, type: Hash
6
- field :dispensingPharmacyLocation, type: Hash, as: 'dispensing_pharmacy_location'
7
- field :dispenseDate, type: Integer, as: 'dispense_date'
8
- field :quantityDispensed, type: Hash, as: 'quantity_dispensed'
9
- field :fillNumber, type: Integer, as: 'fill_number'
10
- field :fillStatus, type: Hash, as: 'fill_status'
6
+ field :dispensingPharmacyLocation, type: Hash
7
+ field :dispenseDate, type: Integer
8
+ field :quantityDispensed, type: Hash
9
+ field :fillNumber, type: Integer
10
+ field :fillStatus, type: Hash
11
+
12
+ alias :dispensing_pharmacy_location :dispensingPharmacyLocation
13
+ alias :dispensing_pharmacy_location= :dispensingPharmacyLocation=
14
+ alias :dispense_date :dispenseDate
15
+ alias :dispense_date= :dispenseDate=
16
+ alias :quantity_dispensed :quantityDispensed
17
+ alias :quantity_dispensed= :quantityDispensed=
18
+ alias :fill_number :fillNumber
19
+ alias :fill_number= :fillNumber=
20
+ alias :fill_status :fillStatus
21
+ alias :fill_status= :fillStatus=
22
+ alias :prescription_number :prescriptionNumber
23
+ alias :prescription_number= :prescriptionNumber=
11
24
  end
@@ -1,5 +1,10 @@
1
1
  class Immunization < Entry
2
- field :refusalInd, type: Boolean, as: 'refusal_ind'
2
+ field :refusalInd, type: Boolean
3
3
  field :performer, type: Hash
4
- field :refusalReason, type: Hash, as: 'refusal_reason'
4
+ field :refusalReason, type: Hash
5
+
6
+ alias :refusal_ind :refusalInd
7
+ alias :refusal_ind= :refusalInd=
8
+ alias :refusal_reason :refusalReason
9
+ alias :refusal_reason= :refusalReason=
5
10
  end
@@ -1,4 +1,7 @@
1
1
  class LabResult < Entry
2
- field :referenceRange, type: String, as: 'reference_range'
2
+ field :referenceRange, type: String
3
3
  field :interpretation, type: Hash
4
+
5
+ alias :reference_range :referenceRange
6
+ alias :reference_range= :referenceRange=
4
7
  end
@@ -1,25 +1,45 @@
1
1
  class Medication < Entry
2
- field :administrationTiming, type: Hash, as: 'administration_timing'
3
- field :freeTextSig, type: String, as: 'free_text_sig'
2
+ field :administrationTiming, type: Hash
3
+ field :freeTextSig, type: String
4
4
  field :dose, type: Hash
5
- field :brandName, type: String, as: 'brand_name'
6
- field :typeOfMedication, type: Hash, as: 'type_of_medication'
7
- field :statusOfMedication, type: Hash, as: 'status_of_medication'
5
+ field :brandName, type: String
6
+ field :typeOfMedication, type: Hash
7
+ field :statusOfMedication, type: Hash
8
8
  embeds_many :fulfillmentHistory, class_name: 'FulfillmentHistory'
9
9
  embeds_many :orderInformation, class_name: 'OrderInformation'
10
10
  field :route, type: Hash
11
11
  field :site, type: Hash
12
- field :doseRestriction, type: Hash, as: 'dose_restriction'
13
- field :fulfillmentInstructions, type: String, as: 'fulfillment_instructions'
12
+ field :doseRestriction, type: Hash
13
+ field :fulfillmentInstructions, type: String
14
14
  field :indication, type: Hash
15
- field :productForm, type: Hash, as: 'product_form'
15
+ field :productForm, type: Hash
16
16
  field :vehicle, type: Hash
17
17
  field :reaction, type: Hash
18
- field :deliveryMethod, type: Hash, as: 'delivery_method'
19
- field :patientInstructions, type: String, as: 'patient_instructions'
18
+ field :deliveryMethod, type: Hash
19
+ field :patientInstructions, type: String
20
20
 
21
+ alias :administration_timing :administrationTiming
22
+ alias :administration_timing= :administrationTiming=
23
+ alias :free_text_sig :freeTextSig
24
+ alias :free_text_sig= :freeTextSig=
25
+ alias :brand_name :brandName
26
+ alias :brand_name= :brandName=
27
+ alias :type_of_medication :typeOfMedication
28
+ alias :type_of_medication= :typeOfMedication=
29
+ alias :status_of_medication :statusOfMedication
30
+ alias :status_of_medication= :statusOfMedication=
21
31
  alias :fulfillment_history :fulfillmentHistory
22
32
  alias :fulfillment_history= :fulfillmentHistory=
23
33
  alias :order_information :orderInformation
24
34
  alias :order_information= :orderInformation=
35
+ alias :dose_restriction :doseRestriction
36
+ alias :dose_restriction= :doseRestriction=
37
+ alias :fulfillment_instructions :fulfillmentInstructions
38
+ alias :fulfillment_instructions= :fulfillmentInstructions=
39
+ alias :product_form :productForm
40
+ alias :product_form= :productForm=
41
+ alias :delivery_method :deliveryMethod
42
+ alias :delivery_method= :deliveryMethod=
43
+ alias :patient_instructions :patientInstructions
44
+ alias :patient_instructions= :patientInstructions=
25
45
  end
@@ -1,9 +1,18 @@
1
1
  class OrderInformation
2
2
  include Mongoid::Document
3
3
 
4
- field :orderNumber, type: String, as: 'order_number'
4
+ field :orderNumber, type: String
5
5
  field :fills, type: Integer
6
- field :quantityOrdered, type: Hash, as: 'quantity_ordered'
7
- field :orderExpirationDateTime, type: Integer, as: 'order_expiration_date_time'
8
- field :orderDateTime, type: Integer, as: 'order_date_time'
6
+ field :quantityOrdered, type: Hash
7
+ field :orderExpirationDateTime, type: Integer
8
+ field :orderDateTime, type: Integer
9
+
10
+ alias :order_number :orderNumber
11
+ alias :order_number= :orderNumber=
12
+ alias :quantity_ordered :quantityOrdered
13
+ alias :quantity_ordered= :quantityOrdered=
14
+ alias :order_expiration_date_time :orderExpirationDateTime
15
+ alias :order_expiration_date_time= :orderExpirationDateTime=
16
+ alias :order_date_time :orderDateTime
17
+ alias :order_date_time= :orderDateTime=
9
18
  end
@@ -1,18 +1,22 @@
1
1
  class Record
2
2
 
3
3
  include Mongoid::Document
4
-
4
+
5
5
  field :first, type: String
6
6
  field :last, type: String
7
7
  field :gender, type: String
8
8
  field :birthdate, type: Integer
9
- field :race, type: String
10
- field :ethnicity, type: String
9
+ field :effective_time, type: Integer
10
+ field :race, type: Hash
11
+ field :ethnicity, type: Hash
12
+ field :languages, type: Array
11
13
  field :test_id, type: BSON::ObjectId
12
14
  field :medical_record_number, type: String
13
15
 
14
- [:allergies, :care_goals, :conditions, :encounters, :immunizations, :medical_equipment,
15
- :medications, :procedures, :results, :social_history, :vital_signs].each do |section|
16
+ Sections = [:allergies, :care_goals, :conditions, :encounters, :immunizations, :medical_equipment,
17
+ :medications, :procedures, :results, :social_history, :vital_signs]
18
+
19
+ Sections.each do |section|
16
20
  embeds_many section, as: :entry_list, class_name: "Entry"
17
21
  end
18
22
 
@@ -0,0 +1,39 @@
1
+ <component>
2
  <!-- Allergies: patient has no allergies -->
1
3
  <section>
2
4
  <templateId root="2.16.840.1.113883.3.88.11.83.102" assigningAuthorityName="HITSP/C83"/>
5
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.3.13" assigningAuthorityName="IHE PCC"/>
6
+ <templateId root="2.16.840.1.113883.10.20.1.2" assigningAuthorityName="HL7 CCD"/>
7
+ <code code="11450-4" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Problem List"/>
3
8
  <title>Allergies and Adverse Reactions</title>
4
9
  <text>
5
10
  <table border="1" width="100%">
6
11
  <thead>
7
12
  <tr>
8
13
  <th>Description</th>
9
14
  <th>Code</th>
10
15
  <th>Time</th>
11
16
  </tr>
12
17
  </thead>
13
18
  <tbody>
14
19
  <tr ID="noallergies_summary">
15
20
  <td ID="noallergies">No Known allergies</td>
21
+ <td>160244002</td>
16
22
  <td><%= Time.now.utc.to_formatted_s(:number) %></td>
17
23
  </tr>
18
24
  </tbody>
19
25
  </table>
20
26
  </text>
21
27
  <entry typeCode="DRIV">
28
+ <act classCode="ACT" moodCode="EVN">
29
+ <templateId root="2.16.840.1.113883.10.20.1.27"/>
30
+ <templateId root="2.16.840.1.113883.3.88.11.83.6"/>
31
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5.1"/>
32
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5.3"/>
33
+ <id root="f6fd6f86-4265-4dcb-95cf-7799100b54ad"/>
34
+ <code nullFlavor="NA"/>
35
+ <statusCode code="active"/>
36
+ <effectiveTime>
37
+ <low nullFlavor="NA"/>
38
+ </effectiveTime>
39
+ <entryRelationship typeCode="SUBJ" inversionInd="false">
40
+ <observation classCode="OBS" moodCode="EVN">
41
+ <templateId root="2.16.840.1.113883.10.20.1.18"/>
42
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.6"/>
43
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5"/>
44
+ <templateId root="2.16.840.1.113883.10.20.1.28"/>
45
+ <id root="2b37be6b-9b1c-4069-bbca-1caf5fe1937d"/>
46
+ <code code="420134006" codeSystem="2.16.840.1.113883.6.96" displayName="Propensity to adverse reactions (disorder)" codeSystemName="SNOMED CT"/>
47
+ <statusCode code="completed"/>
48
+ <effectiveTime>
49
+ <low nullFlavor="UNK"/>
50
+ </effectiveTime>
51
+ <value xsi:type="CD" code="160244002" codeSystem="2.16.840.1.113883.6.96" displayName="No Known allergies" codeSystemName="SNOMED CT">
52
+ <originalText>
53
+ <reference value="#noallergies"/>
54
+ </originalText>
55
+ </value>
56
+ </observation>
57
+ </entryRelationship>
58
+ </act>
59
+ </entry>
60
+ </section>
61
+ </component>
@@ -7,6 +7,7 @@
7
7
  <templateId root="2.16.840.1.113883.10.20.1.10" assigningAuthorityName="HL7 CCD"/>
8
8
  <!--Plan of Care section template-->
9
9
  <code code="18776-5" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Treatment plan"/>
10
+ <title>Plan of Care</title>
10
11
  <%== render :partial => 'narrative_block', :locals => {:entries => entries, :section => 'plan_of_care'} %>
11
12
  <% entries.each do |entry| -%>
12
13
  <entry typeCode="DRIV">
@@ -0,0 +1,2 @@
1
+ <component>
2
  <!-- Problems: patient has no problems -->
1
3
  <section>
2
4
  <templateId root="2.16.840.1.113883.3.88.11.83.103" assigningAuthorityName="HITSP/C83"/>
3
5
  <templateId root="1.3.6.1.4.1.19376.1.5.3.1.3.6" assigningAuthorityName="IHE PCC"/>
4
6
  <templateId root="2.16.840.1.113883.10.20.1.11" assigningAuthorityName="HL7 CCD"/>
5
7
  <code code="11450-4" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Problem List"/>
6
8
  <title>Problems</title>
7
9
  <text>
8
10
  <table border="1" width="100%">
9
11
  <thead>
10
12
  <tr>
11
13
  <th>Description</th>
12
14
  <th>Code</th>
13
15
  <th>Time</th>
14
16
  </tr>
15
17
  </thead>
16
18
  <tbody>
17
19
  <tr ID="PROBSUMMARY_1">
18
20
  <td ID="PROBKIND_1">No current problems or disability</td>
21
+ <td>160245001</td>
19
22
  <td><%= Time.now.utc.to_formatted_s(:number) %></td>
20
23
  </tr>
21
24
  </tbody>
22
25
  </table>
23
26
  </text>
24
27
  <entry typeCode="DRIV">
25
28
  <act classCode="ACT" moodCode="EVN">
26
29
  <templateId root="2.16.840.1.113883.3.88.11.83.7" assigningAuthorityName="HITSP C83"/>
27
30
  <templateId root="2.16.840.1.113883.10.20.1.27" assigningAuthorityName="CCD"/>
28
31
  <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5.1" assigningAuthorityName="IHE PCC"/>
29
32
  <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5.2" assigningAuthorityName="IHE PCC"/>
30
33
  <id root="<%= UUID.generate %>"/>
31
34
  <code nullFlavor="NA"/>
32
35
  <statusCode code="completed"/>
33
36
  <effectiveTime>
34
37
  <low value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
35
38
  <high nullFlavor="UNK"/>
36
39
  </effectiveTime>
37
40
  <entryRelationship typeCode="SUBJ" inversionInd="false">
38
41
  <observation classCode="OBS" moodCode="EVN" negationInd="false">
39
42
  <templateId root="2.16.840.1.113883.10.20.1.28" assigningAuthorityName="CCD"/>
40
43
  <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.5" assigningAuthorityName="IHE PCC"/>
41
44
  <id root="<%= UUID.generate %>"/>
42
45
  <code code="404684003" displayName="Finding" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED-CT"/>
43
46
  <text>
44
47
  <reference value="#PROBKIND_1"/>
45
48
  </text>
46
49
  <statusCode code="completed"/>
47
50
  <effectiveTime>
48
51
  <low value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
49
52
  <high nullFlavor="UNK"/>
50
53
  </effectiveTime>
51
54
  <value xsi:type="CD" displayName="No current problems or disability" code="160245001" codeSystemName="SNOMED-CT" codeSystem="2.16.840.1.113883.6.96"/>
52
55
  </observation>
53
56
  </entryRelationship>
54
57
  </act>
55
58
  </entry>
56
59
  </section>
57
60
  </component>
@@ -0,0 +1,32 @@
1
+ <component>
2
  <!-- Medications: patient has no medications -->
1
3
  <section>
4
+ <templateId root="2.16.840.1.113883.10.20.1.8" assigningAuthorityName="HL7 SDTC CCD"/>
5
+ <templateId root="2.16.840.1.113883.3.88.11.83.112" assigningAuthorityName="HITSP"/>
6
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.3.19" assigningAuthorityName="IHE"/>
7
+ <code code="10160-0" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="History of medication use"/>
8
+ <title>Medications - Prescription and Non-Prescription</title>
2
9
  <text>
3
10
  <table border="1" width="100%">
4
11
  <thead>
5
12
  <tr>
6
13
  <th>Description</th>
7
14
  <th>Code</th>
8
15
  <th>Time</th>
9
16
  </tr>
10
17
  </thead>
11
18
  <tbody>
12
19
  <tr ID="nomeds_summary">
13
20
  <td ID="nomeds_kind">Patient not on any medication</td>
21
+ <td>182849000</td>
14
22
  <td><%= Time.now.utc.to_formatted_s(:number) %></td>
15
23
  </tr>
16
24
  </tbody>
17
25
  </table>
18
26
  </text>
19
27
  <entry typeCode="DRIV">
28
+ <substanceAdministration classCode="SBADM" moodCode="EVN">
29
+ <templateId root="2.16.840.1.113883.3.88.11.83.8" assigningAuthorityName="HITSP C83"/>
30
+ <templateId root="2.16.840.1.113883.10.20.1.24" assigningAuthorityName="CCD"/>
31
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7" assigningAuthorityName="IHE PCC"/>
32
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7.1" assigningAuthorityName="IHE PCC"/>
33
+ <id root="4edd8de0-66e3-4ca6-b287-f0736022f2b3"/>
34
+ <code code="182849000" codeSystem="2.16.840.1.113883.6.96" displayName="No Drug Therapy Prescribed" codeSystemName="SNOMED CT" />
35
+ <statusCode code="completed"/> <consumable>
36
+ <manufacturedProduct>
37
+ <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7.2" assigningAuthorityName="IHE PCC"/>
38
+ <templateId root="2.16.840.1.113883.3.88.11.83.8.2" assigningAuthorityName="HITSP C83"/>
39
+ <templateId root="2.16.840.1.113883.10.20.1.53"assigningAuthorityName="CCD"/>
40
+ <manufacturedMaterial>
41
+ <code>
42
+ <originalText>
43
+ <reference value="#nomeds_kind">
44
+ </originalText>
45
+ </code>
46
+ </manufacturedMaterial>
47
+ </manufacturedProduct>
48
+ </consumable>
49
+ </substanceAdministration>
50
+ </entry>
51
+ </section>
52
+ </component>
@@ -7,6 +7,7 @@
7
7
  <templateId root="1.3.6.1.4.1.19376.1.5.3.1.3.11" assigningAuthorityName="IHE PCC"/>
8
8
  <!--Surgeries section template-->
9
9
  <code code="47519-4" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="List of surgeries"/>
10
+ <title>Surgeries</title>
10
11
  <%== render :partial => 'narrative_block', :locals => {:entries => entries, :section => 'procedures'} %>
11
12
  <% entries.each_with_index do |entry, i| -%>
12
13
  <entry typeCode="DRIV">
@@ -67,15 +67,21 @@
67
67
  <structuredBody>
68
68
  <% if patient.allergies.present? -%>
69
69
  <%== render :partial => 'allergies', :locals => {:entries => patient.allergies} %>
70
+ <% else %>
71
+ <%== render :partial => 'allergies_no_current', :locals => {:entries => patient.allergies} %>
70
72
  <% end -%>
71
73
  <% if patient.medications.present? -%>
72
74
  <%== render :partial => 'medications', :locals => {:entries => patient.medications} %>
75
+ <% else %>
76
+ <%== render :partial => 'medications_no_current', :locals => {:entries => patient.medications} %>
73
77
  <% end -%>
74
78
  <% if patient.encounters.present? -%>
75
79
  <%== render :partial => 'encounters', :locals => {:entries => patient.encounters} %>
76
80
  <% end -%>
77
81
  <% if patient.conditions.present? -%>
78
82
  <%== render :partial => 'conditions', :locals => {:entries => patient.conditions} %>
83
+ <% else %>
84
+ <%== render :partial => 'conditions_no_current', :locals => {:entries => patient.conditions} %>
79
85
  <% end -%>
80
86
  <% if patient.vital_signs.present? -%>
81
87
  <%== render :partial => 'vital_signs', :locals => {:entries => patient.vital_signs} %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: health-data-standards
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-19 00:00:00.000000000Z
12
+ date: 2012-01-31 00:00:00.000000000 -05:00
13
+ default_executable:
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: erubis
16
- requirement: &2161045020 !ruby/object:Gem::Requirement
17
+ requirement: &2152718120 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ~>
@@ -21,21 +22,21 @@ dependencies:
21
22
  version: '2.6'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *2161045020
25
+ version_requirements: *2152718120
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: mongoid
27
- requirement: &2161039400 !ruby/object:Gem::Requirement
28
+ requirement: &2152717640 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ~>
31
32
  - !ruby/object:Gem::Version
32
- version: 2.3.3
33
+ version: 2.4.2
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *2161039400
36
+ version_requirements: *2152717640
36
37
  - !ruby/object:Gem::Dependency
37
38
  name: uuid
38
- requirement: &2161037460 !ruby/object:Gem::Requirement
39
+ requirement: &2152717180 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ~>
@@ -43,10 +44,10 @@ dependencies:
43
44
  version: 2.3.4
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *2161037460
47
+ version_requirements: *2152717180
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: builder
49
- requirement: &2161035700 !ruby/object:Gem::Requirement
50
+ requirement: &2152716720 !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - ~>
@@ -54,10 +55,10 @@ dependencies:
54
55
  version: 3.0.0
55
56
  type: :runtime
56
57
  prerelease: false
57
- version_requirements: *2161035700
58
+ version_requirements: *2152716720
58
59
  - !ruby/object:Gem::Dependency
59
60
  name: nokogiri
60
- requirement: &2161033620 !ruby/object:Gem::Requirement
61
+ requirement: &2152716260 !ruby/object:Gem::Requirement
61
62
  none: false
62
63
  requirements:
63
64
  - - ~>
@@ -65,7 +66,7 @@ dependencies:
65
66
  version: 1.4.7
66
67
  type: :runtime
67
68
  prerelease: false
68
- version_requirements: *2161033620
69
+ version_requirements: *2152716260
69
70
  description: A library for generating and consuming various healthcare related formats.
70
71
  This includes HITSP C32, ASTM CCR and PQRI.
71
72
  email: talk@projectpophealth.org
@@ -104,13 +105,16 @@ files:
104
105
  - lib/health-data-standards/util/hl7_helper.rb
105
106
  - lib/health-data-standards.rb
106
107
  - templates/_allergies.c32.erb
108
+ - templates/_allergies_no_current.c32.erb
107
109
  - templates/_care_goals.c32.erb
108
110
  - templates/_code_with_reference.c32.erb
109
111
  - templates/_conditions.c32.erb
112
+ - templates/_conditions_no_current.c32.erb
110
113
  - templates/_encounters.c32.erb
111
114
  - templates/_immunizations.c32.erb
112
115
  - templates/_medical_equipment.c32.erb
113
116
  - templates/_medications.c32.erb
117
+ - templates/_medications_no_current.c32.erb
114
118
  - templates/_narrative_block.c32.erb
115
119
  - templates/_procedures.c32.erb
116
120
  - templates/_results.c32.erb
@@ -121,6 +125,7 @@ files:
121
125
  - README.md
122
126
  - Rakefile
123
127
  - VERSION
128
+ has_rdoc: true
124
129
  homepage: http://barrel.mitre.org/health-data-standards
125
130
  licenses: []
126
131
  post_install_message:
@@ -141,9 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
146
  version: '0'
142
147
  requirements: []
143
148
  rubyforge_project:
144
- rubygems_version: 1.8.10
149
+ rubygems_version: 1.6.2
145
150
  signing_key:
146
151
  specification_version: 3
147
152
  summary: A library for generating and consuming various healthcare related formats.
148
153
  test_files: []
149
- has_rdoc: