hquery-patient-api 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/Gemfile +4 -17
- data/Gemfile.lock +36 -24
- data/Rakefile +8 -12
- data/app/assets/javascripts/allergy.js.coffee +12 -14
- data/app/assets/javascripts/assessment.js.coffee +21 -0
- data/app/assets/javascripts/careexperience.js.coffee +23 -0
- data/app/assets/javascripts/caregoal.js.coffee +18 -3
- data/app/assets/javascripts/communication.js.coffee +22 -0
- data/app/assets/javascripts/condition.js.coffee +28 -13
- data/app/assets/javascripts/core.js.coffee +30 -14
- data/app/assets/javascripts/encounter.js.coffee +37 -9
- data/app/assets/javascripts/familyhistory.js.coffee +26 -0
- data/app/assets/javascripts/functionalstatus.js.coffee +14 -5
- data/app/assets/javascripts/immunization.js.coffee +20 -15
- data/app/assets/javascripts/languages.js.coffee +3 -7
- data/app/assets/javascripts/medicalequipment.js.coffee +26 -3
- data/app/assets/javascripts/medication.js.coffee +58 -12
- data/app/assets/javascripts/patient.js.coffee +87 -38
- data/app/assets/javascripts/pregnancy.js.coffee +2 -3
- data/app/assets/javascripts/procedure.js.coffee +54 -6
- data/app/assets/javascripts/provider.js.coffee +9 -13
- data/app/assets/javascripts/result.js.coffee +21 -4
- data/app/assets/javascripts/socialhistory.js.coffee +6 -8
- data/hquery_patientapi.gemspec +10 -4
- data/test/fixtures/patient/barry_berry.json +31 -11
- data/test/test_helper.rb +5 -8
- data/test/unit/patient_api_test.rb +24 -22
- metadata +98 -14
@@ -3,6 +3,8 @@
|
|
3
3
|
# =require condition.js.coffee
|
4
4
|
# =require encounter.js.coffee
|
5
5
|
# =require procedure.js.coffee
|
6
|
+
# =require communication.js.coffee
|
7
|
+
# =require familyhistory.js.coffee
|
6
8
|
# =require result.js.coffee
|
7
9
|
# =require immunization.js.coffee
|
8
10
|
# =require allergy.js.coffee
|
@@ -13,6 +15,8 @@
|
|
13
15
|
# =require caregoal.js.coffee
|
14
16
|
# =require medicalequipment.js.coffee
|
15
17
|
# =require functionalstatus.js.coffee
|
18
|
+
# =require careexperience.js.coffee
|
19
|
+
# =require assessment.js.coffee
|
16
20
|
|
17
21
|
###*
|
18
22
|
@namespace scoping into the hquery namespace
|
@@ -29,28 +33,28 @@ class hQuery.Supports
|
|
29
33
|
@returns {DateRange}
|
30
34
|
###
|
31
35
|
supportDate: -> new hQuery.DateRange @json['supportDate']
|
32
|
-
|
36
|
+
|
33
37
|
###*
|
34
|
-
@returns {Person}
|
38
|
+
@returns {Person}
|
35
39
|
###
|
36
40
|
guardian: -> new hQuery.Person @json['guardian']
|
37
|
-
|
41
|
+
|
38
42
|
###*
|
39
43
|
@returns {String}
|
40
44
|
###
|
41
45
|
guardianSupportType: -> @json['guardianSupportType']
|
42
|
-
|
46
|
+
|
43
47
|
###*
|
44
48
|
@returns {Person}
|
45
49
|
###
|
46
50
|
contact: -> new hQuery.Person @json['contact']
|
47
|
-
|
51
|
+
|
48
52
|
###*
|
49
53
|
@returns {String}
|
50
54
|
###
|
51
55
|
contactSupportType: -> @json['guardianSupportType']
|
52
|
-
|
53
|
-
|
56
|
+
|
57
|
+
|
54
58
|
###*
|
55
59
|
@class Representation of a patient
|
56
60
|
@augments hQuery.Person
|
@@ -66,8 +70,8 @@ class hQuery.Patient extends hQuery.Person
|
|
66
70
|
@returns {Date} containing the patients birthdate
|
67
71
|
###
|
68
72
|
birthtime: ->
|
69
|
-
hQuery.dateFromUtcSeconds @json['birthdate']
|
70
|
-
|
73
|
+
hQuery.dateFromUtcSeconds @json['birthdate'] if @json['birthdate']
|
74
|
+
|
71
75
|
###*
|
72
76
|
@param (Date) date the date at which the patient age is calculated, defaults to now.
|
73
77
|
@returns {number} the patient age in years
|
@@ -76,7 +80,7 @@ class hQuery.Patient extends hQuery.Person
|
|
76
80
|
oneDay = 24*60*60*1000;
|
77
81
|
oneYear = 365*oneDay;
|
78
82
|
return (date.getTime()-this.birthtime().getTime())/oneYear;
|
79
|
-
|
83
|
+
|
80
84
|
###*
|
81
85
|
@returns {CodedValue} the domestic partnership status of the patient
|
82
86
|
The following HL7 codeset is used:
|
@@ -90,53 +94,63 @@ class hQuery.Patient extends hQuery.Person
|
|
90
94
|
T Domestic Partner
|
91
95
|
W Widowed
|
92
96
|
###
|
93
|
-
maritalStatus: ->
|
97
|
+
maritalStatus: ->
|
94
98
|
if @json['maritalStatus']
|
95
99
|
return hQuery.createCodedValue @json['maritalStatus']
|
96
|
-
|
100
|
+
|
97
101
|
###*
|
98
102
|
@returns {CodedValue} of the spiritual faith affiliation of the patient
|
99
103
|
It uses the HL7 codeset. http://www.hl7.org/memonly/downloads/v3edition.cfm#V32008
|
100
104
|
###
|
101
|
-
religiousAffiliation: ->
|
105
|
+
religiousAffiliation: ->
|
102
106
|
if @json['religiousAffiliation']
|
103
107
|
return hQuery.createCodedValue @json['religiousAffiliation']
|
104
|
-
|
108
|
+
|
105
109
|
###*
|
106
110
|
@returns {CodedValue} of the race of the patient
|
107
111
|
CDC codes: http://phinvads.cdc.gov/vads/ViewCodeSystemConcept.action?oid=2.16.840.1.113883.6.238&code=1000-9
|
108
112
|
###
|
109
|
-
race: ->
|
113
|
+
race: ->
|
110
114
|
if @json['race']
|
111
|
-
return hQuery.createCodedValue @json['race']
|
112
|
-
|
115
|
+
return hQuery.createCodedValue code: @json['race'], code_system: 'CDC Race'
|
116
|
+
|
117
|
+
###*
|
118
|
+
@returns {CodedValue} of the payer of the patient
|
119
|
+
SOP codes: https://www.health.ny.gov/statistics/sparcs/sysdoc/appp.htm
|
120
|
+
###
|
121
|
+
payer: ->
|
122
|
+
if @json['insurance_providers']?.length
|
123
|
+
ip = @json['insurance_providers'][0]
|
124
|
+
if ip.codes && ip.codes.SOP?.length
|
125
|
+
return hQuery.createCodedValue code: ip.codes.SOP[0], code_system: 'SOP'
|
126
|
+
|
113
127
|
###*
|
114
128
|
@returns {CodedValue} of the ethnicity of the patient
|
115
129
|
CDC codes: http://phinvads.cdc.gov/vads/ViewCodeSystemConcept.action?oid=2.16.840.1.113883.6.238&code=1000-9
|
116
130
|
###
|
117
|
-
ethnicity: ->
|
131
|
+
ethnicity: ->
|
118
132
|
if @json['ethnicity']
|
119
|
-
return hQuery.createCodedValue @json['ethnicity']
|
120
|
-
|
133
|
+
return hQuery.createCodedValue code: @json['ethnicity'], code_system: 'CDC Ethnicity'
|
134
|
+
|
121
135
|
###*
|
122
136
|
@returns {CodedValue} This is the code specifying the level of confidentiality of the document.
|
123
137
|
HL7 Confidentiality Code (2.16.840.1.113883.5.25)
|
124
138
|
###
|
125
|
-
confidentiality: ->
|
139
|
+
confidentiality: ->
|
126
140
|
if @json['confidentiality']
|
127
141
|
return hQuery.createCodedValue @json['confidentiality']
|
128
|
-
|
142
|
+
|
129
143
|
###*
|
130
144
|
@returns {Address} of the location where the patient was born
|
131
145
|
###
|
132
|
-
birthPlace: ->
|
146
|
+
birthPlace: ->
|
133
147
|
new hQuery.Address @json['birthPlace']
|
134
|
-
|
148
|
+
|
135
149
|
###*
|
136
150
|
@returns {Supports} information regarding key support contacts relative to healthcare decisions, including next of kin
|
137
151
|
###
|
138
152
|
supports: -> new hQuery.Supports @json['supports']
|
139
|
-
|
153
|
+
|
140
154
|
###*
|
141
155
|
@returns {Organization}
|
142
156
|
###
|
@@ -146,8 +160,8 @@ class hQuery.Patient extends hQuery.Person
|
|
146
160
|
@returns {Provider} the providers associated with the patient
|
147
161
|
###
|
148
162
|
provider: -> new hQuery.Provider @json['provider']
|
149
|
-
|
150
|
-
|
163
|
+
|
164
|
+
|
151
165
|
###*
|
152
166
|
@returns {hQuery.CodedEntryList} A list of {@link hQuery.LanguagesSpoken} objects
|
153
167
|
Code from http://www.ietf.org/rfc/rfc4646.txt representing the name of the human language
|
@@ -164,11 +178,6 @@ class hQuery.Patient extends hQuery.Person
|
|
164
178
|
###
|
165
179
|
expired: -> @json['expired']
|
166
180
|
|
167
|
-
###*
|
168
|
-
@returns {Boolean} returns true if the patient participated in a clinical trial
|
169
|
-
###
|
170
|
-
clinicalTrialParticipant: -> @json['clinicalTrialParticipant']
|
171
|
-
|
172
181
|
###*
|
173
182
|
@returns {hQuery.CodedEntryList} A list of {@link hQuery.Encounter} objects
|
174
183
|
###
|
@@ -178,7 +187,7 @@ class hQuery.Patient extends hQuery.Person
|
|
178
187
|
for encounter in @json['encounters']
|
179
188
|
list.pushIfUsable(new hQuery.Encounter(encounter))
|
180
189
|
list
|
181
|
-
|
190
|
+
|
182
191
|
###*
|
183
192
|
@returns {hQuery.CodedEntryList} A list of {@link Medication} objects
|
184
193
|
###
|
@@ -188,7 +197,7 @@ class hQuery.Patient extends hQuery.Person
|
|
188
197
|
for medication in @json['medications']
|
189
198
|
list.pushIfUsable(new hQuery.Medication(medication))
|
190
199
|
list
|
191
|
-
|
200
|
+
|
192
201
|
|
193
202
|
###*
|
194
203
|
@returns {hQuery.CodedEntryList} A list of {@link Condition} objects
|
@@ -209,7 +218,47 @@ class hQuery.Patient extends hQuery.Person
|
|
209
218
|
for procedure in @json['procedures']
|
210
219
|
list.pushIfUsable(new hQuery.Procedure(procedure))
|
211
220
|
list
|
212
|
-
|
221
|
+
|
222
|
+
###*
|
223
|
+
@returns {hQuery.CodedEntryList} A list of {@link Communication} objects
|
224
|
+
###
|
225
|
+
communications: ->
|
226
|
+
list = new hQuery.CodedEntryList
|
227
|
+
if @json['communications']
|
228
|
+
for communication in @json['communications']
|
229
|
+
list.pushIfUsable(new hQuery.Communication(communication))
|
230
|
+
list
|
231
|
+
|
232
|
+
###*
|
233
|
+
@returns {hQuery.CodedEntryList} A list of {@link FamilyHistory} objects
|
234
|
+
###
|
235
|
+
family_history: ->
|
236
|
+
list = new hQuery.CodedEntryList
|
237
|
+
if @json['family_history']
|
238
|
+
for familyhistory in @json['family_history']
|
239
|
+
list.pushIfUsable(new hQuery.FamilyHistory(familyhistory))
|
240
|
+
list
|
241
|
+
|
242
|
+
###*
|
243
|
+
@returns {hQuery.CodedEntryList} A list of {@link CareExperience} objects
|
244
|
+
###
|
245
|
+
careExperiences: ->
|
246
|
+
list = new hQuery.CodedEntryList
|
247
|
+
if @json['care_experiences']
|
248
|
+
for care_experience in @json['care_experiences']
|
249
|
+
list.pushIfUsable(new hQuery.CareExperience(care_experience))
|
250
|
+
list
|
251
|
+
|
252
|
+
###*
|
253
|
+
@returns {hQuery.CodedEntryList} A list of {@link Assessment} objects
|
254
|
+
###
|
255
|
+
assessments: ->
|
256
|
+
list = new hQuery.CodedEntryList
|
257
|
+
if @json['assessments']
|
258
|
+
for assessment in @json['assessments']
|
259
|
+
list.pushIfUsable(new hQuery.Assessment(assessment))
|
260
|
+
list
|
261
|
+
|
213
262
|
###*
|
214
263
|
@returns {hQuery.CodedEntryList} A list of {@link Result} objects
|
215
264
|
###
|
@@ -239,8 +288,8 @@ class hQuery.Patient extends hQuery.Person
|
|
239
288
|
for immunization in @json['immunizations']
|
240
289
|
list.pushIfUsable(new hQuery.Immunization(immunization))
|
241
290
|
list
|
242
|
-
|
243
|
-
|
291
|
+
|
292
|
+
|
244
293
|
###*
|
245
294
|
@returns {hQuery.CodedEntryList} A list of {@link Allergy} objects
|
246
295
|
###
|
@@ -260,7 +309,7 @@ class hQuery.Patient extends hQuery.Person
|
|
260
309
|
for pregnancy in @json['pregnancies']
|
261
310
|
list.pushIfUsable(new hQuery.Pregnancy(pregnancy))
|
262
311
|
list
|
263
|
-
|
312
|
+
|
264
313
|
###*
|
265
314
|
@returns {hQuery.CodedEntryList} A list of {@link Socialhistory} objects
|
266
315
|
###
|
@@ -10,15 +10,14 @@ This includes information about the patients current and past pregnancy status
|
|
10
10
|
The Coded Entry code system should be SNOMED-CT
|
11
11
|
@class
|
12
12
|
@augments hQuery.CodedEntry
|
13
|
-
@exports Pregnancy as hQuery.Pregnancy
|
13
|
+
@exports Pregnancy as hQuery.Pregnancy
|
14
14
|
###
|
15
15
|
class hQuery.Pregnancy extends hQuery.CodedEntry
|
16
16
|
constructor: (@json) ->
|
17
17
|
super(@json)
|
18
|
-
|
18
|
+
|
19
19
|
|
20
20
|
###*
|
21
21
|
@returns {String}
|
22
22
|
###
|
23
23
|
comment: -> @json['comment']
|
24
|
-
|
@@ -6,23 +6,28 @@ this.hQuery ||= {}
|
|
6
6
|
|
7
7
|
# =require core.coffee
|
8
8
|
###*
|
9
|
-
This represents all interventional, surgical, diagnostic, or therapeutic procedures or
|
9
|
+
This represents all interventional, surgical, diagnostic, or therapeutic procedures or
|
10
10
|
treatments pertinent to the patient.
|
11
11
|
@class
|
12
12
|
@augments hQuery.CodedEntry
|
13
|
-
@exports Procedure as hQuery.Procedure
|
13
|
+
@exports Procedure as hQuery.Procedure
|
14
14
|
###
|
15
15
|
class hQuery.Procedure extends hQuery.CodedEntry
|
16
16
|
constructor: (@json) ->
|
17
17
|
super(@json)
|
18
|
-
|
18
|
+
@_facility = new hQuery.Facility @json['facility'] if @json['facility']
|
19
|
+
|
20
|
+
|
21
|
+
facility: -> @_facility
|
22
|
+
facilityArrival: -> @_facility?.startDate()
|
23
|
+
facilityDeparture: -> @_facility?.endDate()
|
19
24
|
###*
|
20
25
|
@returns {hQuery.Actor} The provider that performed the procedure
|
21
26
|
###
|
22
27
|
performer: -> new hQuery.Actor @json['performer'] if @json['performer']
|
23
|
-
|
28
|
+
|
24
29
|
###*
|
25
|
-
@returns {hQuery.CodedValue} A SNOMED code indicating the body site on which the
|
30
|
+
@returns {hQuery.CodedValue} A SNOMED code indicating the body site on which the
|
26
31
|
procedure was performed
|
27
32
|
###
|
28
33
|
site: -> new hQuery.CodedValue @json['site']?['code'], @json['site']?['code_system']
|
@@ -30,7 +35,7 @@ class hQuery.Procedure extends hQuery.CodedEntry
|
|
30
35
|
###*
|
31
36
|
@returns {hQuery.CodedValue} A SNOMED code indicating where the procedure was performed.
|
32
37
|
###
|
33
|
-
source: ->
|
38
|
+
source: ->
|
34
39
|
hQuery.createCodedValue @json['source']
|
35
40
|
|
36
41
|
###*
|
@@ -43,3 +48,46 @@ class hQuery.Procedure extends hQuery.CodedEntry
|
|
43
48
|
@returns {CodedValue}
|
44
49
|
###
|
45
50
|
ordinality: -> hQuery.createCodedValue @json['ordinality']
|
51
|
+
|
52
|
+
###*
|
53
|
+
@returns {hQuery.CodedValue} A code indicating the approach body site on which the
|
54
|
+
procedure was performed
|
55
|
+
###
|
56
|
+
anatomicalApproach: -> new hQuery.CodedValue @json['anatomicalApproach']?['code'], @json['anatomicalApproach']?['code_system']
|
57
|
+
|
58
|
+
###*
|
59
|
+
@returns {hQuery.CodedValue} A code indicating the body site on which the
|
60
|
+
procedure was performed
|
61
|
+
###
|
62
|
+
anatomicalLocation: ->
|
63
|
+
#backwards compatibility with older patient records. site was used for anatomicalLocation
|
64
|
+
at = @json['anatomicalLocation']
|
65
|
+
if at? then new hQuery.CodedValue(at['code'], at['code_system']) else @site()
|
66
|
+
|
67
|
+
###*
|
68
|
+
@returns {CodedValue}
|
69
|
+
###
|
70
|
+
method: -> new hQuery.createCodedValue @json['method']
|
71
|
+
|
72
|
+
###*
|
73
|
+
@returns {CodedValue}
|
74
|
+
###
|
75
|
+
reaction: -> new hQuery.createCodedValue @json['reaction']
|
76
|
+
|
77
|
+
###*
|
78
|
+
@returns {CodedValue}
|
79
|
+
###
|
80
|
+
radiationDose: -> new hQuery.createCodedValue @json['radiationDose']
|
81
|
+
|
82
|
+
###*
|
83
|
+
@returns {CodedValue}
|
84
|
+
###
|
85
|
+
radiationDuration: -> new hQuery.createCodedValue @json['radiationDuration']
|
86
|
+
|
87
|
+
###*
|
88
|
+
The resulting status of a procedure as defined in the QDM documentation. This is different
|
89
|
+
than the status_code associated with the `CodedEntry` object, which relates to the data criteria
|
90
|
+
status as defined in health-data-standards/lib/hqmf-model/data_criteria.json.
|
91
|
+
@returns {CodedValue}
|
92
|
+
###
|
93
|
+
qdmStatus: -> new hQuery.createCodedValue @json['qdm_status']
|
@@ -6,7 +6,7 @@ this.hQuery ||= {}
|
|
6
6
|
|
7
7
|
# =require core.coffee
|
8
8
|
###*
|
9
|
-
@class
|
9
|
+
@class
|
10
10
|
|
11
11
|
@exports Provider as hQuery.Provider
|
12
12
|
###
|
@@ -17,39 +17,35 @@ class hQuery.Provider
|
|
17
17
|
@returns {hQuery.Person}
|
18
18
|
###
|
19
19
|
providerEntity: -> new hQuery.Person @json['providerEntity'] if @json['providerEntity']
|
20
|
-
|
20
|
+
|
21
21
|
###*
|
22
22
|
@returns {hQuery.DateRange}
|
23
23
|
###
|
24
24
|
careProvisionDateRange: -> new hQuery.DateRange @json['careProvisionDateRange'] if @json['careProvisionDateRange']
|
25
|
-
|
25
|
+
|
26
26
|
###*
|
27
27
|
@returns {hQuery.CodedValue}
|
28
28
|
###
|
29
29
|
role: -> hQuery.createCodedValue @json['role']
|
30
|
-
|
30
|
+
|
31
31
|
###*
|
32
32
|
@returns {String}
|
33
33
|
###
|
34
34
|
patientID: -> @json['patientID']
|
35
|
-
|
36
|
-
|
35
|
+
|
36
|
+
|
37
37
|
###*
|
38
38
|
@returns {hQuery.CodedValue}
|
39
39
|
###
|
40
40
|
providerType: -> hQuery.createCodedValue @json['providerType']
|
41
|
-
|
42
|
-
|
41
|
+
|
42
|
+
|
43
43
|
###*
|
44
44
|
@returns {String}
|
45
45
|
###
|
46
46
|
providerID: -> @json['providerID']
|
47
|
-
|
47
|
+
|
48
48
|
###*
|
49
49
|
@returns {hQuery.Organization}
|
50
50
|
###
|
51
51
|
organizationName: -> new hQuery.Organization @json
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
@@ -12,7 +12,7 @@ ultrasound, CT, MRI, angiography, cardiac echo, nuclear medicine, pathology, and
|
|
12
12
|
observations.
|
13
13
|
@class
|
14
14
|
@augments hQuery.CodedEntry
|
15
|
-
@exports Result as hQuery.Result
|
15
|
+
@exports Result as hQuery.Result
|
16
16
|
###
|
17
17
|
class hQuery.Result extends hQuery.CodedEntry
|
18
18
|
constructor: (@json) ->
|
@@ -30,14 +30,31 @@ class hQuery.Result extends hQuery.CodedEntry
|
|
30
30
|
@returns {CodedValue}
|
31
31
|
###
|
32
32
|
interpretation: -> hQuery.createCodedValue @json['interpretation']
|
33
|
-
|
33
|
+
|
34
34
|
###*
|
35
35
|
@returns {String}
|
36
36
|
###
|
37
37
|
referenceRange: -> @json['referenceRange']
|
38
|
-
|
38
|
+
|
39
|
+
###*
|
40
|
+
@returns {String}
|
41
|
+
###
|
42
|
+
referenceRangeHigh: -> @json['referenceRangeHigh']
|
43
|
+
|
44
|
+
###*
|
45
|
+
@returns {String}
|
46
|
+
###
|
47
|
+
referenceRangeLow: -> @json['referenceRangeLow']
|
48
|
+
|
39
49
|
###*
|
40
50
|
@returns {String}
|
41
51
|
###
|
42
52
|
comment: -> @json['comment']
|
43
|
-
|
53
|
+
|
54
|
+
###*
|
55
|
+
The resulting status of a procedure as defined in the QDM documentation. This is different
|
56
|
+
than the status_code associated with the `CodedEntry` object, which relates to the data criteria
|
57
|
+
status as defined in health-data-standards/lib/hqmf-model/data_criteria.json.
|
58
|
+
@returns {CodedValue}
|
59
|
+
###
|
60
|
+
qdmStatus: -> hQuery.createCodedValue @json['qdm_status']
|