hquery-patient-api 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +9 -2
- data/Rakefile +1 -0
- data/app/assets/javascripts/allergy.js.coffee +3 -3
- data/app/assets/javascripts/condition.js.coffee +4 -4
- data/app/assets/javascripts/core.js.coffee +18 -7
- data/app/assets/javascripts/encounter.js.coffee +39 -10
- data/app/assets/javascripts/functionalstatus.js.coffee +1 -2
- data/app/assets/javascripts/immunization.js.coffee +3 -3
- data/app/assets/javascripts/languages.js.coffee +1 -1
- data/app/assets/javascripts/medicalequipment.js.coffee +6 -1
- data/app/assets/javascripts/medication.js.coffee +19 -19
- data/app/assets/javascripts/patient.js.coffee +6 -6
- data/app/assets/javascripts/procedure.js.coffee +19 -2
- data/app/assets/javascripts/provider.js.coffee +4 -4
- data/app/assets/javascripts/result.js.coffee +1 -1
- data/hquery_patientapi.gemspec +1 -1
- data/test/fixtures/patient/barry_berry.json +18 -6
- data/test/unit/patient_api_test.rb +27 -4
- metadata +2 -2
data/Gemfile
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
gem 'execjs'
|
4
3
|
gem 'sprockets'
|
5
4
|
gem 'coffee-script'
|
6
5
|
gem 'uglifier'
|
7
6
|
gem 'rake'
|
8
7
|
gem 'tilt'
|
9
|
-
gem 'therubyrhino', :platforms => :jruby
|
10
8
|
|
11
9
|
group :test do
|
12
10
|
gem 'minitest'
|
13
11
|
gem 'turn', :require => false
|
12
|
+
|
13
|
+
platforms :ruby do
|
14
|
+
gem "libv8"
|
15
|
+
gem "therubyracer", :require => 'v8'
|
16
|
+
end
|
17
|
+
|
18
|
+
platforms :jruby do
|
19
|
+
gem "therubyrhino"
|
20
|
+
end
|
14
21
|
end
|
data/Rakefile
CHANGED
@@ -39,7 +39,7 @@ class hQuery.Allergy extends hQuery.CodedEntry
|
|
39
39
|
Adverse event types SHALL be coded as specified in HITSP/C80 Section 2.2.3.4.2 Allergy/Adverse Event Type
|
40
40
|
@returns {CodedValue}
|
41
41
|
###
|
42
|
-
adverseEventType: ->
|
42
|
+
adverseEventType: -> hQuery.createCodedValue @json['type']
|
43
43
|
|
44
44
|
###*
|
45
45
|
This indicates the reaction that may be caused by the product or agent.
|
@@ -55,7 +55,7 @@ class hQuery.Allergy extends hQuery.CodedEntry
|
|
55
55
|
235719002 Food intolerance (disorder)
|
56
56
|
@returns {CodedValue}
|
57
57
|
###
|
58
|
-
reaction: ->
|
58
|
+
reaction: -> hQuery.createCodedValue @json['reaction']
|
59
59
|
|
60
60
|
###*
|
61
61
|
This is a description of the level of the severity of the allergy or intolerance.
|
@@ -68,7 +68,7 @@ class hQuery.Allergy extends hQuery.CodedEntry
|
|
68
68
|
399166001 Fatal
|
69
69
|
@returns {CodedValue}
|
70
70
|
###
|
71
|
-
severity: ->
|
71
|
+
severity: -> hQuery.createCodedValue @json['severity']
|
72
72
|
|
73
73
|
###*
|
74
74
|
Additional comment or textual information
|
@@ -54,7 +54,7 @@ class hQuery.Condition extends hQuery.CodedEntry
|
|
54
54
|
Ordinality
|
55
55
|
@returns {CodedValue}
|
56
56
|
###
|
57
|
-
ordinality: ->
|
57
|
+
ordinality: -> hQuery.createCodedValue @json['ordinality']
|
58
58
|
|
59
59
|
###*
|
60
60
|
age at onset
|
@@ -67,13 +67,13 @@ class hQuery.Condition extends hQuery.CodedEntry
|
|
67
67
|
cause of death
|
68
68
|
@returns {hQuery.CauseOfDeath}
|
69
69
|
###
|
70
|
-
causeOfDeath: -> new hQuery.CauseOfDeath @json['causeOfDeath']
|
70
|
+
causeOfDeath: -> new hQuery.CauseOfDeath @json['causeOfDeath'] if @json['causeOfDeath']
|
71
71
|
|
72
72
|
###*
|
73
73
|
problem status
|
74
74
|
@returns {hQuery.CodedValue}
|
75
75
|
###
|
76
|
-
problemStatus: ->
|
76
|
+
problemStatus: -> hQuery.createCodedValue @json['problemStatus']
|
77
77
|
|
78
78
|
###*
|
79
79
|
comment
|
@@ -85,4 +85,4 @@ class hQuery.Condition extends hQuery.CodedEntry
|
|
85
85
|
This is a description of the level of the severity of the condition.
|
86
86
|
@returns {CodedValue}
|
87
87
|
###
|
88
|
-
severity: ->
|
88
|
+
severity: -> hQuery.createCodedValue @json['severity']
|
@@ -346,6 +346,12 @@ class hQuery.CodedEntry
|
|
346
346
|
# id of the entry from the source document if available
|
347
347
|
@source_id = @json['id']
|
348
348
|
@_freeTextType = @json['description']
|
349
|
+
|
350
|
+
###*
|
351
|
+
Adjust the start and end times of this event to the supplied timestamp
|
352
|
+
###
|
353
|
+
setTimestamp: (timestamp) ->
|
354
|
+
@_date = @_startDate = @_endDate = timestamp
|
349
355
|
|
350
356
|
###*
|
351
357
|
Date and time at which the coded entry took place
|
@@ -456,11 +462,14 @@ class hQuery.CodedEntry
|
|
456
462
|
Indicates the reason an entry was negated.
|
457
463
|
@returns {hQuery.CodedValue} Used to indicate reason an immunization was not administered.
|
458
464
|
###
|
459
|
-
negationReason: ->
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
465
|
+
negationReason: -> hQuery.createCodedValue @json['negationReason']
|
466
|
+
|
467
|
+
###*
|
468
|
+
Explains the reason for an entry.
|
469
|
+
@returns {hQuery.CodedValue} Used to explain the rationale for a given entry.
|
470
|
+
###
|
471
|
+
reason: -> hQuery.createCodedValue @json['reason']
|
472
|
+
|
464
473
|
|
465
474
|
###*
|
466
475
|
@class Represents a list of hQuery.CodedEntry instances. Offers utility methods for matching
|
@@ -493,7 +502,8 @@ class hQuery.CodedEntryList extends Array
|
|
493
502
|
for entry in this
|
494
503
|
afterStart = (!start || entry.timeStamp()>=start)
|
495
504
|
beforeEnd = (!end || entry.timeStamp()<=end)
|
496
|
-
|
505
|
+
matchesCode = codeSet == null || entry.includesCodeFrom(codeSet)
|
506
|
+
if (afterStart && beforeEnd && matchesCode && (includeNegated || !entry.negationInd()))
|
497
507
|
cloned.push(entry)
|
498
508
|
cloned
|
499
509
|
|
@@ -553,4 +563,5 @@ hQuery.createCodedValues = (jsonCodes) ->
|
|
553
563
|
codedValues.push new hQuery.CodedValue code, codeSystem
|
554
564
|
codedValues
|
555
565
|
|
556
|
-
|
566
|
+
hQuery.createCodedValue = (json) ->
|
567
|
+
new hQuery.CodedValue json['code'], json['codeSystem'] if json?
|
@@ -9,48 +9,77 @@ this.hQuery ||= {}
|
|
9
9
|
###*
|
10
10
|
An Encounter is an interaction, regardless of the setting, between a patient and a
|
11
11
|
practitioner who is vested with primary responsibility for diagnosing, evaluating,
|
12
|
-
or treating the
|
12
|
+
or treating the patients condition. It may include visits, appointments, as well
|
13
13
|
as non face-to-face interactions. It is also a contact between a patient and a
|
14
14
|
practitioner who has primary responsibility for assessing and treating the
|
15
15
|
patient at a given contact, exercising independent judgment.
|
16
16
|
@class An Encounter is an interaction, regardless of the setting, between a patient and a
|
17
|
-
practitioner
|
17
|
+
practitioner
|
18
18
|
@augments hQuery.CodedEntry
|
19
19
|
@exports Encounter as hQuery.Encounter
|
20
20
|
###
|
21
21
|
class hQuery.Encounter extends hQuery.CodedEntry
|
22
22
|
constructor: (@json) ->
|
23
23
|
super(@json)
|
24
|
+
@_admitTime = hQuery.dateFromUtcSeconds @json['admitTime'] if @json['admitTime']
|
25
|
+
@_dischargeTime = hQuery.dateFromUtcSeconds @json['dischargeTime'] if @json['dischargeTime']
|
26
|
+
@_facility = new hQuery.Facility @json['facility'] if @json['facility']
|
24
27
|
|
25
28
|
###*
|
26
29
|
@returns {String}
|
27
30
|
####
|
28
|
-
|
31
|
+
dischargeDisposition: -> @json['dischargeDisposition']
|
29
32
|
|
30
33
|
###*
|
31
34
|
A code indicating the priority of the admission (e.g., Emergency, Urgent, Elective, et cetera) from
|
32
35
|
National Uniform Billing Committee (NUBC)
|
33
36
|
@returns {CodedValue}
|
34
37
|
###
|
35
|
-
admitType: ->
|
38
|
+
admitType: -> hQuery.createCodedValue @json['admitType']
|
39
|
+
|
40
|
+
###*
|
41
|
+
Date and time at which the patient was admitted for the encounter
|
42
|
+
@returns {Date}
|
43
|
+
###
|
44
|
+
admitTime: -> @_admitTime
|
45
|
+
|
46
|
+
###*
|
47
|
+
Date and time at which the patient was discharged for the encounter
|
48
|
+
@returns {Date}
|
49
|
+
###
|
50
|
+
dischargeTime: -> @_dischargeTime
|
36
51
|
|
37
52
|
###*
|
38
53
|
@returns {hQuery.Actor}
|
39
54
|
###
|
40
|
-
performer: -> new hQuery.Actor @json['performer']
|
55
|
+
performer: -> new hQuery.Actor @json['performer'] if @json['performer']
|
41
56
|
|
42
57
|
###*
|
43
58
|
@returns {hQuery.Organization}
|
44
59
|
###
|
45
|
-
facility: ->
|
60
|
+
facility: -> @_facility
|
61
|
+
facilityArrival: -> @_facility?.startDate()
|
62
|
+
facilityDeparture: -> @_facility?.endDate()
|
46
63
|
|
47
64
|
###*
|
48
|
-
@returns {hQuery.
|
65
|
+
@returns {hQuery.CodedEntry}
|
49
66
|
###
|
50
|
-
|
67
|
+
reasonForVisit: -> new hQuery.CodedEntry @json['reason'] if @json['reason']
|
51
68
|
|
52
69
|
###*
|
53
|
-
@returns {
|
70
|
+
@returns {Integer}
|
54
71
|
###
|
55
|
-
|
72
|
+
lengthOfStay: ->
|
73
|
+
return 0 unless @startDate()? && @endDate()?
|
74
|
+
Math.floor((@endDate() - @startDate()) / (1000 * 60 * 60 * 24))
|
75
|
+
|
76
|
+
|
77
|
+
###*
|
78
|
+
@returns {CodedValue}
|
79
|
+
###
|
80
|
+
transferTo: -> hQuery.createCodedValue @json['transferTo']
|
56
81
|
|
82
|
+
###*
|
83
|
+
@returns {CodedValue}
|
84
|
+
###
|
85
|
+
transferFrom: -> hQuery.createCodedValue @json['transferFrom']
|
@@ -78,7 +78,7 @@ class hQuery.Immunization extends hQuery.CodedEntry
|
|
78
78
|
###*
|
79
79
|
@returns{hQuery.Scalar}
|
80
80
|
###
|
81
|
-
medicationSeriesNumber: -> new hQuery.Scalar @json['medicationSeriesNumber']
|
81
|
+
medicationSeriesNumber: -> new hQuery.Scalar @json['medicationSeriesNumber'] if @json['medicationSeriesNumber']
|
82
82
|
|
83
83
|
###*
|
84
84
|
@returns{hQuery.MedicationInformation}
|
@@ -93,7 +93,7 @@ class hQuery.Immunization extends hQuery.CodedEntry
|
|
93
93
|
###*
|
94
94
|
@returns{hQuery.Actor} Performer of immunization
|
95
95
|
###
|
96
|
-
performer:-> new hQuery.Actor @json['performer']
|
96
|
+
performer:-> new hQuery.Actor @json['performer'] if @json['performer']
|
97
97
|
|
98
98
|
###*
|
99
99
|
@returns {comment} human readable description of event
|
@@ -111,5 +111,5 @@ class hQuery.Immunization extends hQuery.CodedEntry
|
|
111
111
|
It indicates the reason an immunization was not administered.
|
112
112
|
@returns {hQuery.NoImmunization} Used to indicate reason an immunization was not administered.
|
113
113
|
###
|
114
|
-
refusalReason: -> new hQuery.NoImmunization @json['negationReason']['code'], @json['negationReason']['codeSystem']
|
114
|
+
refusalReason: -> new hQuery.NoImmunization @json['negationReason']?['code'], @json['negationReason']?['codeSystem']
|
115
115
|
|
@@ -17,7 +17,7 @@ class hQuery.Language extends hQuery.CodedEntry
|
|
17
17
|
###*
|
18
18
|
@returns {hQuery.CodedValue}
|
19
19
|
###
|
20
|
-
modeCode: ->
|
20
|
+
modeCode: -> hQuery.createCodedValue @json['modeCode']
|
21
21
|
|
22
22
|
###*
|
23
23
|
@returns {String}
|
@@ -25,4 +25,9 @@ class hQuery.MedicalEquipment extends hQuery.CodedEntry
|
|
25
25
|
###*
|
26
26
|
@returns {CodedValue}
|
27
27
|
###
|
28
|
-
anatomicalStructure: ->
|
28
|
+
anatomicalStructure: -> hQuery.createCodedValue @json['anatomicalStructure']
|
29
|
+
|
30
|
+
###*
|
31
|
+
@returns {Date} The actual or intended removal time of the device.
|
32
|
+
###
|
33
|
+
removalTime: -> hQuery.dateFromUtcSeconds @json['removalTime'] if @json['removalTime']
|
@@ -37,7 +37,7 @@ class hQuery.AdministrationTiming
|
|
37
37
|
mean that the medication should be taken every 8 hours.
|
38
38
|
@returns {hQuery.Scalar}
|
39
39
|
###
|
40
|
-
period: -> new hQuery.Scalar @json['period']
|
40
|
+
period: -> new hQuery.Scalar @json['period'] if @json['period']
|
41
41
|
|
42
42
|
###*
|
43
43
|
Indicates whether it is the interval (time between dosing), or frequency
|
@@ -54,8 +54,8 @@ class hQuery.AdministrationTiming
|
|
54
54
|
###
|
55
55
|
class hQuery.DoseRestriction
|
56
56
|
constructor: (@json) ->
|
57
|
-
numerator: -> new hQuery.Scalar @json['numerator']
|
58
|
-
denominator: -> new hQuery.Scalar @json['denominator']
|
57
|
+
numerator: -> new hQuery.Scalar @json['numerator'] if @json['numerator']
|
58
|
+
denominator: -> new hQuery.Scalar @json['denominator'] if @json['denominator']
|
59
59
|
|
60
60
|
|
61
61
|
###*
|
@@ -66,11 +66,11 @@ class hQuery.Fulfillment
|
|
66
66
|
constructor: (@json) ->
|
67
67
|
|
68
68
|
dispenseDate: -> hQuery.dateFromUtcSeconds @json['dispenseDate']
|
69
|
-
dispensingPharmacyLocation: -> new hQuery.Address @json['dispensingPharmacyLocation']
|
70
|
-
quantityDispensed: -> new hQuery.Scalar @json['quantityDispensed']
|
69
|
+
dispensingPharmacyLocation: -> new hQuery.Address @json['dispensingPharmacyLocation'] if @json['dispensingPharmacyLocation']
|
70
|
+
quantityDispensed: -> new hQuery.Scalar @json['quantityDispensed'] if @json['quantityDispensed']
|
71
71
|
prescriptionNumber: -> @json['prescriptionNumber']
|
72
72
|
fillNumber: -> @json['fillNumber']
|
73
|
-
fillStatus: -> new hQuery.Status @json['fillStatus']
|
73
|
+
fillStatus: -> new hQuery.Status @json['fillStatus'] if @json['fillStatus']
|
74
74
|
|
75
75
|
###*
|
76
76
|
@class OrderInformation - information abour an order for a medication
|
@@ -81,7 +81,7 @@ class hQuery.OrderInformation
|
|
81
81
|
|
82
82
|
orderNumber: -> @json['orderNumber']
|
83
83
|
fills: -> @json['fills']
|
84
|
-
quantityOrdered: -> new hQuery.Scalar @json['quantityOrdered']
|
84
|
+
quantityOrdered: -> new hQuery.Scalar @json['quantityOrdered'] if @json['quantityOrdered']
|
85
85
|
orderExpirationDateTime: -> hQuery.dateFromUtcSeconds @json['orderExpirationDateTime']
|
86
86
|
orderDateTime: -> hQuery.dateFromUtcSeconds @json['orderDateTime']
|
87
87
|
|
@@ -173,7 +173,7 @@ class hQuery.Medication extends hQuery.CodedEntry
|
|
173
173
|
###
|
174
174
|
indicateMedicationStop: -> hQuery.dateFromUtcSeconds @json['end_time']
|
175
175
|
|
176
|
-
administrationTiming: -> new hQuery.AdministrationTiming @json['administrationTiming']
|
176
|
+
administrationTiming: -> new hQuery.AdministrationTiming @json['administrationTiming'] if @json['administrationTiming']
|
177
177
|
|
178
178
|
###*
|
179
179
|
@returns {CodedValue} Contains routeCode or adminstrationUnitCode information.
|
@@ -185,22 +185,22 @@ class hQuery.Medication extends hQuery.CodedEntry
|
|
185
185
|
product as presented to the patient.
|
186
186
|
See http://www.fda.gov/Drugs/InformationOnDrugs/ucm142454.htm
|
187
187
|
###
|
188
|
-
route: ->
|
188
|
+
route: -> hQuery.createCodedValue @json['route']
|
189
189
|
|
190
190
|
###*
|
191
191
|
@returns {hQuery.Scalar} the dose
|
192
192
|
###
|
193
|
-
dose: -> new hQuery.Scalar @json['dose']
|
193
|
+
dose: -> new hQuery.Scalar @json['dose'] if @json['dose']
|
194
194
|
|
195
195
|
###*
|
196
196
|
@returns {CodedValue}
|
197
197
|
###
|
198
|
-
site: ->
|
198
|
+
site: -> hQuery.createCodedValue @json['site'] if @json['site']
|
199
199
|
|
200
200
|
###*
|
201
201
|
@returns {hQuery.DoseRestriction}
|
202
202
|
###
|
203
|
-
doseRestriction: -> new hQuery.DoseRestriction @json['doseRestriction']
|
203
|
+
doseRestriction: -> new hQuery.DoseRestriction @json['doseRestriction'] if @json['doseRestriction']
|
204
204
|
|
205
205
|
###*
|
206
206
|
@returns {String}
|
@@ -215,27 +215,27 @@ class hQuery.Medication extends hQuery.CodedEntry
|
|
215
215
|
###*
|
216
216
|
@returns {CodedValue}
|
217
217
|
###
|
218
|
-
indication: ->
|
218
|
+
indication: -> hQuery.createCodedValue @json['indication']
|
219
219
|
|
220
220
|
###*
|
221
221
|
@returns {CodedValue}
|
222
222
|
###
|
223
|
-
productForm: ->
|
223
|
+
productForm: -> hQuery.createCodedValue @json['productForm']
|
224
224
|
|
225
225
|
###*
|
226
226
|
@returns {CodedValue}
|
227
227
|
###
|
228
|
-
vehicle: ->
|
228
|
+
vehicle: -> hQuery.createCodedValue @json['vehicle']
|
229
229
|
|
230
230
|
###*
|
231
231
|
@returns {CodedValue}
|
232
232
|
###
|
233
|
-
reaction: ->
|
233
|
+
reaction: -> hQuery.createCodedValue @json['reaction']
|
234
234
|
|
235
235
|
###*
|
236
236
|
@returns {CodedValue}
|
237
237
|
###
|
238
|
-
deliveryMethod: ->
|
238
|
+
deliveryMethod: -> hQuery.createCodedValue @json['deliveryMethod']
|
239
239
|
|
240
240
|
###*
|
241
241
|
@returns {hQuery.MedicationInformation}
|
@@ -245,14 +245,14 @@ class hQuery.Medication extends hQuery.CodedEntry
|
|
245
245
|
###*
|
246
246
|
@returns {hQuery.TypeOfMedication} Indicates whether this is an over the counter or prescription medication
|
247
247
|
###
|
248
|
-
typeOfMedication: -> new hQuery.TypeOfMedication @json['typeOfMedication']['code'], @json['typeOfMedication']['codeSystem']
|
248
|
+
typeOfMedication: -> new hQuery.TypeOfMedication @json['typeOfMedication']?['code'], @json['typeOfMedication']?['codeSystem']
|
249
249
|
|
250
250
|
###*
|
251
251
|
Values conform to value set 2.16.840.1.113883.1.11.20.7 - Medication Status
|
252
252
|
Values may be: On Hold, No Longer Active, Active, Prior History
|
253
253
|
@returns {hQuery.StatusOfMedication} Used to indicate the status of the medication.
|
254
254
|
###
|
255
|
-
statusOfMedication: -> new hQuery.StatusOfMedication @json['statusOfMedication']['code'], @json['statusOfMedication']['codeSystem']
|
255
|
+
statusOfMedication: -> new hQuery.StatusOfMedication @json['statusOfMedication']?['code'], @json['statusOfMedication']?['codeSystem']
|
256
256
|
|
257
257
|
###*
|
258
258
|
@returns {String} free text instructions to the patient
|
@@ -63,7 +63,7 @@ class hQuery.Patient extends hQuery.Person
|
|
63
63
|
gender: -> @json['gender']
|
64
64
|
|
65
65
|
###*
|
66
|
-
@returns {Date} containing the
|
66
|
+
@returns {Date} containing the patients birthdate
|
67
67
|
###
|
68
68
|
birthtime: ->
|
69
69
|
hQuery.dateFromUtcSeconds @json['birthdate']
|
@@ -92,7 +92,7 @@ class hQuery.Patient extends hQuery.Person
|
|
92
92
|
###
|
93
93
|
maritalStatus: ->
|
94
94
|
if @json['maritalStatus']
|
95
|
-
return
|
95
|
+
return hQuery.createCodedValue @json['maritalStatus']
|
96
96
|
|
97
97
|
###*
|
98
98
|
@returns {CodedValue} of the spiritual faith affiliation of the patient
|
@@ -100,7 +100,7 @@ class hQuery.Patient extends hQuery.Person
|
|
100
100
|
###
|
101
101
|
religiousAffiliation: ->
|
102
102
|
if @json['religiousAffiliation']
|
103
|
-
return
|
103
|
+
return hQuery.createCodedValue @json['religiousAffiliation']
|
104
104
|
|
105
105
|
###*
|
106
106
|
@returns {CodedValue} of the race of the patient
|
@@ -108,7 +108,7 @@ class hQuery.Patient extends hQuery.Person
|
|
108
108
|
###
|
109
109
|
race: ->
|
110
110
|
if @json['race']
|
111
|
-
return
|
111
|
+
return hQuery.createCodedValue @json['race']
|
112
112
|
|
113
113
|
###*
|
114
114
|
@returns {CodedValue} of the ethnicity of the patient
|
@@ -116,7 +116,7 @@ class hQuery.Patient extends hQuery.Person
|
|
116
116
|
###
|
117
117
|
ethnicity: ->
|
118
118
|
if @json['ethnicity']
|
119
|
-
return
|
119
|
+
return hQuery.createCodedValue @json['ethnicity']
|
120
120
|
|
121
121
|
###*
|
122
122
|
@returns {CodedValue} This is the code specifying the level of confidentiality of the document.
|
@@ -124,7 +124,7 @@ class hQuery.Patient extends hQuery.Person
|
|
124
124
|
###
|
125
125
|
confidentiality: ->
|
126
126
|
if @json['confidentiality']
|
127
|
-
return
|
127
|
+
return hQuery.createCodedValue @json['confidentiality']
|
128
128
|
|
129
129
|
###*
|
130
130
|
@returns {Address} of the location where the patient was born
|
@@ -19,10 +19,27 @@ class hQuery.Procedure extends hQuery.CodedEntry
|
|
19
19
|
###*
|
20
20
|
@returns {hQuery.Actor} The provider that performed the procedure
|
21
21
|
###
|
22
|
-
performer: -> new hQuery.Actor @json['performer']
|
22
|
+
performer: -> new hQuery.Actor @json['performer'] if @json['performer']
|
23
23
|
|
24
24
|
###*
|
25
25
|
@returns {hQuery.CodedValue} A SNOMED code indicating the body site on which the
|
26
26
|
procedure was performed
|
27
27
|
###
|
28
|
-
site: -> new hQuery.CodedValue @json['site']['code'], @json['site']['codeSystem']
|
28
|
+
site: -> new hQuery.CodedValue @json['site']?['code'], @json['site']?['codeSystem']
|
29
|
+
|
30
|
+
###*
|
31
|
+
@returns {hQuery.CodedValue} A SNOMED code indicating where the procedure was performed.
|
32
|
+
###
|
33
|
+
source: ->
|
34
|
+
hQuery.createCodedValue @json['source']
|
35
|
+
|
36
|
+
###*
|
37
|
+
@returns {Date} The actual or intended start of an incision.
|
38
|
+
###
|
39
|
+
incisionTime: -> hQuery.dateFromUtcSeconds @json['incisionTime'] if @json['incisionTime']
|
40
|
+
|
41
|
+
###*
|
42
|
+
Ordinality
|
43
|
+
@returns {CodedValue}
|
44
|
+
###
|
45
|
+
ordinality: -> hQuery.createCodedValue @json['ordinality']
|
@@ -16,17 +16,17 @@ class hQuery.Provider
|
|
16
16
|
###*
|
17
17
|
@returns {hQuery.Person}
|
18
18
|
###
|
19
|
-
providerEntity: -> new hQuery.Person @json['providerEntity']
|
19
|
+
providerEntity: -> new hQuery.Person @json['providerEntity'] if @json['providerEntity']
|
20
20
|
|
21
21
|
###*
|
22
22
|
@returns {hQuery.DateRange}
|
23
23
|
###
|
24
|
-
careProvisionDateRange: -> new hQuery.DateRange @json['careProvisionDateRange']
|
24
|
+
careProvisionDateRange: -> new hQuery.DateRange @json['careProvisionDateRange'] if @json['careProvisionDateRange']
|
25
25
|
|
26
26
|
###*
|
27
27
|
@returns {hQuery.CodedValue}
|
28
28
|
###
|
29
|
-
role: ->
|
29
|
+
role: -> hQuery.createCodedValue @json['role']
|
30
30
|
|
31
31
|
###*
|
32
32
|
@returns {String}
|
@@ -37,7 +37,7 @@ class hQuery.Provider
|
|
37
37
|
###*
|
38
38
|
@returns {hQuery.CodedValue}
|
39
39
|
###
|
40
|
-
providerType: ->
|
40
|
+
providerType: -> hQuery.createCodedValue @json['providerType']
|
41
41
|
|
42
42
|
|
43
43
|
###*
|
@@ -29,7 +29,7 @@ class hQuery.Result extends hQuery.CodedEntry
|
|
29
29
|
###*
|
30
30
|
@returns {CodedValue}
|
31
31
|
###
|
32
|
-
interpretation: ->
|
32
|
+
interpretation: -> hQuery.createCodedValue @json['interpretation']
|
33
33
|
|
34
34
|
###*
|
35
35
|
@returns {String}
|
data/hquery_patientapi.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.email = "talk@hquery.org"
|
8
8
|
s.homepage = "http://github.com/hquery/patient_api"
|
9
9
|
s.authors = ["Marc Hadley", "Andy Gregorowicz", "Rob Dingwell"]
|
10
|
-
s.version = '0.
|
10
|
+
s.version = '1.0.0'
|
11
11
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
end
|
@@ -99,10 +99,14 @@
|
|
99
99
|
}
|
100
100
|
]
|
101
101
|
},
|
102
|
+
"transferTo": {
|
103
|
+
"code": "444933003",
|
104
|
+
"codeSystem": "SNOMED-CT"
|
105
|
+
},
|
102
106
|
"time": 1268042997,
|
103
107
|
"description": "Outpatient encounter",
|
104
108
|
"_id": "OP12345",
|
105
|
-
"
|
109
|
+
"dischargeDisposition": "Home",
|
106
110
|
"admitType": {
|
107
111
|
"code": "04",
|
108
112
|
"codeSystem": "regular"
|
@@ -112,8 +116,8 @@
|
|
112
116
|
"name": "General Hospital"
|
113
117
|
}
|
114
118
|
},
|
115
|
-
"
|
116
|
-
"
|
119
|
+
"start_time": 1124956803,
|
120
|
+
"end_time": 1314259203,
|
117
121
|
"reason": {
|
118
122
|
"codes": {
|
119
123
|
"CPT": [
|
@@ -153,8 +157,7 @@
|
|
153
157
|
"description": "Colorectal Cancer",
|
154
158
|
"ageAtOnset": 20,
|
155
159
|
"priority": 1,
|
156
|
-
"ordinality":
|
157
|
-
"ordinality_code": {
|
160
|
+
"ordinality": {
|
158
161
|
"code": "8319008",
|
159
162
|
"codeSystem": "SNOMED-CT"
|
160
163
|
},
|
@@ -217,7 +220,12 @@
|
|
217
220
|
"last": "Tables"
|
218
221
|
}
|
219
222
|
},
|
220
|
-
"description": "Colonscopy"
|
223
|
+
"description": "Colonscopy",
|
224
|
+
"source": {
|
225
|
+
"code": "158967008",
|
226
|
+
"codeSystem": "SNOMED-CT"
|
227
|
+
},
|
228
|
+
"incisionTime": 1073238725
|
221
229
|
}
|
222
230
|
],
|
223
231
|
"results": [
|
@@ -345,6 +353,10 @@
|
|
345
353
|
},
|
346
354
|
"time": 1286382415,
|
347
355
|
"description": "Multivitamin",
|
356
|
+
"reason": {
|
357
|
+
"code": "195911009",
|
358
|
+
"codeSystem": "SNOMED-CT"
|
359
|
+
},
|
348
360
|
"brandName": "Centrum Silver",
|
349
361
|
"route": {
|
350
362
|
"code": "C38288",
|
@@ -1,4 +1,9 @@
|
|
1
1
|
require File.expand_path("../../test_helper", __FILE__)
|
2
|
+
if RUBY_PLATFORM=='java'
|
3
|
+
require 'rhino'
|
4
|
+
else
|
5
|
+
require 'v8'
|
6
|
+
end
|
2
7
|
|
3
8
|
class PatientApiTest < Test::Unit::TestCase
|
4
9
|
def setup
|
@@ -7,8 +12,21 @@ class PatientApiTest < Test::Unit::TestCase
|
|
7
12
|
initialize_patient = 'var patient = new hQuery.Patient(barry);'
|
8
13
|
date = Time.new(2010,1,1)
|
9
14
|
initialize_date = "var sampleDate = new Date(#{date.to_i*1000});"
|
10
|
-
|
15
|
+
if RUBY_PLATFORM=='java'
|
16
|
+
@context = Rhino::Context.new
|
17
|
+
else
|
18
|
+
@context = V8::Context.new
|
19
|
+
end
|
20
|
+
|
21
|
+
@context.eval(patient_api + "\nvar barry = " + fixture_json + ";\n" + initialize_patient + "\n" + initialize_date)
|
11
22
|
end
|
23
|
+
|
24
|
+
def test_utils
|
25
|
+
@context.eval('var encounter = patient.encounters()[0]')
|
26
|
+
assert_equal 2005, @context.eval('encounter.startDate().getFullYear()')
|
27
|
+
@context.eval('encounter.setTimestamp(new Date(2010,1,1))')
|
28
|
+
assert_equal 2010, @context.eval('encounter.startDate().getFullYear()')
|
29
|
+
end
|
12
30
|
|
13
31
|
def test_demographics
|
14
32
|
assert_equal 'Barry', @context.eval('patient.given()')
|
@@ -42,16 +60,18 @@ class PatientApiTest < Test::Unit::TestCase
|
|
42
60
|
assert_equal 'CPT', @context.eval('patient.encounters()[0].type()[0].codeSystemName()')
|
43
61
|
assert_equal 'OP12345', @context.eval('patient.encounters()[0].id')
|
44
62
|
assert_equal 'Outpatient encounter', @context.eval('patient.encounters()[0].freeTextType()')
|
45
|
-
assert_equal 'Home', @context.eval('patient.encounters()[0].
|
63
|
+
assert_equal 'Home', @context.eval('patient.encounters()[0].dischargeDisposition()')
|
46
64
|
assert_equal '04', @context.eval('patient.encounters()[0].admitType().code()')
|
47
65
|
assert_equal 'General Hospital', @context.eval('patient.encounters()[0].performer().organization().organizationName()')
|
48
|
-
assert_equal 2005, @context.eval('patient.encounters()[0].
|
49
|
-
assert_equal 2011, @context.eval('patient.encounters()[0].
|
66
|
+
assert_equal 2005, @context.eval('patient.encounters()[0].startDate().getFullYear()')
|
67
|
+
assert_equal 2011, @context.eval('patient.encounters()[0].endDate().getFullYear()')
|
50
68
|
assert_equal 'PCP referred', @context.eval('patient.encounters()[0].reasonForVisit().freeTextType()')
|
51
69
|
assert_equal 'CPT', @context.eval('patient.encounters()[0].reasonForVisit().type()[0].codeSystemName()')
|
52
70
|
assert_equal 'HL7 Healthcare Service Location', @context.eval('patient.encounters()[0].facility().codeSystemName()')
|
53
71
|
assert_equal '1155-1', @context.eval('patient.encounters()[0].facility().code()')
|
54
72
|
assert_equal 'General Hospital', @context.eval('patient.encounters()[0].facility().name()')
|
73
|
+
assert_equal 2191, @context.eval('patient.encounters()[0].lengthOfStay()')
|
74
|
+
assert_equal "444933003", @context.eval('patient.encounters()[0].transferTo().code()')
|
55
75
|
end
|
56
76
|
|
57
77
|
def test_procedures
|
@@ -66,6 +86,8 @@ class PatientApiTest < Test::Unit::TestCase
|
|
66
86
|
assert_equal '71854001', @context.eval('patient.procedures()[0].site().code()')
|
67
87
|
assert_equal 'Bobby', @context.eval('patient.procedures()[0].performer().person().given()')
|
68
88
|
assert_equal 'Tables', @context.eval('patient.procedures()[0].performer().person().last()')
|
89
|
+
assert_equal '158967008', @context.eval('patient.procedures()[0].source().code()')
|
90
|
+
assert_equal 1073238725000, @context.eval('patient.procedures()[0].incisionTime().getTime()')
|
69
91
|
end
|
70
92
|
|
71
93
|
def test_vital_signs
|
@@ -113,6 +135,7 @@ class PatientApiTest < Test::Unit::TestCase
|
|
113
135
|
assert_equal 30, @context.eval('patient.medications()[0].orderInformation()[0].quantityOrdered().value()')
|
114
136
|
assert_equal 20, @context.eval('patient.medications()[0].orderInformation()[0].fills()')
|
115
137
|
assert_equal 3, @context.eval('patient.medications()[0].cumulativeMedicationDuration()["scalar"]')
|
138
|
+
assert_equal "195911009", @context.eval('patient.medications()[0].reason().code()')
|
116
139
|
end
|
117
140
|
|
118
141
|
def test_immunizations
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hquery-patient-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-12-19 00:00:00.000000000 Z
|
15
15
|
dependencies: []
|
16
16
|
description: A javascript library abstraction for dealing with patients in hQuery
|
17
17
|
map reduce functions
|