cql_qdm_patientapi 1.2.0 → 1.3.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.
Files changed (29) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile.lock +4 -4
  3. data/app/assets/javascripts/datatypes/adverseevent.js.coffee +9 -9
  4. data/app/assets/javascripts/datatypes/allergyintolerance.js.coffee +8 -8
  5. data/app/assets/javascripts/datatypes/assessment.js.coffee +67 -38
  6. data/app/assets/javascripts/datatypes/careexperience.js.coffee +7 -7
  7. data/app/assets/javascripts/datatypes/caregoal.js.coffee +8 -8
  8. data/app/assets/javascripts/datatypes/communication.js.coffee +51 -65
  9. data/app/assets/javascripts/datatypes/datatype.js.coffee +14 -9
  10. data/app/assets/javascripts/datatypes/device.js.coffee +21 -31
  11. data/app/assets/javascripts/datatypes/diagnosis.js.coffee +8 -8
  12. data/app/assets/javascripts/datatypes/diagnosticstudy.js.coffee +26 -46
  13. data/app/assets/javascripts/datatypes/encounter.js.coffee +26 -26
  14. data/app/assets/javascripts/datatypes/familyhistory.js.coffee +5 -5
  15. data/app/assets/javascripts/datatypes/immunization.js.coffee +19 -28
  16. data/app/assets/javascripts/datatypes/intervention.js.coffee +23 -23
  17. data/app/assets/javascripts/datatypes/laboratorytest.js.coffee +28 -48
  18. data/app/assets/javascripts/datatypes/medication.js.coffee +141 -81
  19. data/app/assets/javascripts/datatypes/participation.js.coffee +5 -5
  20. data/app/assets/javascripts/datatypes/patient_characteristic.js.coffee +4 -4
  21. data/app/assets/javascripts/datatypes/patient_characteristic_payer.js.coffee +6 -6
  22. data/app/assets/javascripts/datatypes/physicalexam.js.coffee +27 -47
  23. data/app/assets/javascripts/datatypes/procedure.js.coffee +32 -82
  24. data/app/assets/javascripts/datatypes/substance.js.coffee +31 -70
  25. data/app/assets/javascripts/datatypes/symptom.js.coffee +6 -6
  26. data/app/assets/javascripts/utils/helpers.js.coffee +8 -2
  27. data/lib/cql_qdm_patientapi/version.rb +1 -1
  28. data/vendor/assets/javascripts/cql4browsers.js +1520 -556
  29. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 82e220cc46b50e492e5aa42d30e0f39bcdcd97a5
4
- data.tar.gz: 9edcb09f9dae7e87f6c6b7318604d1de3eb06647
2
+ SHA256:
3
+ metadata.gz: a223682b6169cd2d77aee7a38ca3641dfe08b59454fbbf070e6253c0ebe8e252
4
+ data.tar.gz: 90844909701048290940079d8ef66189a2debbbf4e3db933e03a599bf4f2314c
5
5
  SHA512:
6
- metadata.gz: e011b102242c10d1f2d1c0248269b35ff1b9a76d1c1b26f61664f52e86594c6061f2d1fe9729674e2b2cf5767b1c5437baadceb5103577790d1a4469b8b78325
7
- data.tar.gz: e06636b05fe937be02a88a1d4f07e0818d0fcacc14e80cc16099d6cb2ecbacb7a1564d21a689b6c5a361d8b04e7262e74b40b0dfb8ae39cf16d913425899d737
6
+ metadata.gz: cde1743be206ee2d84dcfd6e5f60edb2751652656679cecaa0c79e609e9fb43d0816844bd709c8e246d0289d1134fd3f6ade97f0df763c6def298ec6b8c93b5c
7
+ data.tar.gz: 23d09bee95558466d483c11fb79bda2f2d1e2a5ea2a4d4025b0a316561850042f4ee969a075ba16e886315a1e59ec983160223cbb11647cf51946aa104d55294
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cql_qdm_patientapi (1.2.0)
4
+ cql_qdm_patientapi (1.3.0)
5
5
  coffee-rails (~> 4.1)
6
6
  rails (~> 4.2)
7
7
  sprockets-rails (~> 2.3)
@@ -66,12 +66,12 @@ GEM
66
66
  loofah (2.2.2)
67
67
  crass (~> 1.0.2)
68
68
  nokogiri (>= 1.5.9)
69
- mail (2.7.0)
69
+ mail (2.7.1)
70
70
  mini_mime (>= 0.1.1)
71
- mini_mime (1.0.0)
71
+ mini_mime (1.0.1)
72
72
  mini_portile2 (2.3.0)
73
73
  minitest (5.10.3)
74
- nokogiri (1.8.4)
74
+ nokogiri (1.8.5)
75
75
  mini_portile2 (~> 2.3.0)
76
76
  phantomjs (2.1.1.0)
77
77
  rack (1.6.8)
@@ -12,18 +12,18 @@ class CQL_QDM.AdverseEvent extends CQL_QDM.QDMDatatype
12
12
  ###
13
13
  @param {Object} entry - the HDS data criteria object to convert
14
14
  ###
15
- constructor: (@entry) ->
16
- super @entry
17
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
18
- @_facilityLocation = @entry.facility
19
- @_relevantPeriodLow = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
20
- if @entry.end_time
21
- @_relevantPeriodHigh = CQL_QDM.Helpers.convertDateTime(@entry.end_time)
15
+ constructor: (entry) ->
16
+ super entry
17
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
18
+ @_facilityLocation = entry.facility
19
+ @_relevantPeriodLow = CQL_QDM.Helpers.convertDateTime(entry.start_time)
20
+ if entry.end_time
21
+ @_relevantPeriodHigh = CQL_QDM.Helpers.convertDateTime(entry.end_time)
22
22
  else
23
23
  # No end time; high is set to infinity
24
24
  @_relevantPeriodHigh = CQL_QDM.Helpers.infinityDateTime()
25
- @_severity = @entry.severity
26
- @_type = @entry.type
25
+ @_severity = entry.severity
26
+ @_type = entry.type
27
27
 
28
28
  ###
29
29
  @returns {Date}
@@ -15,17 +15,17 @@ class CQL_QDM.AllergyIntolerance extends CQL_QDM.QDMDatatype
15
15
  ###
16
16
  @param {Object} entry - the HDS data criteria object to convert
17
17
  ###
18
- constructor: (@entry) ->
19
- super @entry
20
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
21
- @_prevalencePeriodLow = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
22
- if @entry.end_time
23
- @_prevalencePeriodHigh = CQL_QDM.Helpers.convertDateTime(@entry.end_time)
18
+ constructor: (entry) ->
19
+ super entry
20
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
21
+ @_prevalencePeriodLow = CQL_QDM.Helpers.convertDateTime(entry.start_time)
22
+ if entry.end_time
23
+ @_prevalencePeriodHigh = CQL_QDM.Helpers.convertDateTime(entry.end_time)
24
24
  else
25
25
  # No end time; high is set to infinity
26
26
  @_prevalencePeriodHigh = CQL_QDM.Helpers.infinityDateTime()
27
- @_severity = @entry.severity
28
- @_type = @entry.type
27
+ @_severity = entry.severity
28
+ @_type = entry.type
29
29
 
30
30
  ###
31
31
  @returns {Date}
@@ -4,6 +4,54 @@ their methods will be accessable through the CQL_QDM namespace)
4
4
  ###
5
5
  @CQL_QDM ||= {}
6
6
 
7
+ ###
8
+ Data elements that meet these criteria using this datatype should document an
9
+ order by a clinician or appropriately licensed care provider to a patient or
10
+ an appropriate provider or organization to perform an assessment indicated by
11
+ the QDM category and its corresponding value set.
12
+
13
+ Timing: The time the order is authored (i.e., provided to the patient).
14
+
15
+ NOTE: Orders address the time that the order is authored, a single point in time.
16
+ Some assessment orders will be addressed as components of a care plan which
17
+ incorporates the period (or timing) when the order is to be carried out. Measure
18
+ developers should address feasibility of clinical workflow to capture Assessment,
19
+ Order when evaluating measures.
20
+ ###
21
+ class CQL_QDM.AssessmentOrder extends CQL_QDM.QDMDatatype
22
+ ###
23
+ @param {Object} entry - the HDS data criteria object to convert
24
+ ###
25
+ constructor: (entry) ->
26
+ super entry
27
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
28
+ @_negationRationale = entry.negationReason
29
+ @_reason = entry.reason
30
+ delete entry.end_time
31
+
32
+ ###
33
+ @returns {Date}
34
+ ###
35
+ authorDatetime: ->
36
+ @_authorDatetime
37
+
38
+ ###
39
+ @returns {Code}
40
+ ###
41
+ negationRationale: ->
42
+ if @_negationRationale?
43
+ new cql.Code(@_negationRationale.code, @_negationRationale.code_system, null, @_negationRationale.title || null)
44
+ else
45
+ null
46
+
47
+ ###
48
+ @returns {Code}
49
+ ###
50
+ reason: ->
51
+ if @_reason?
52
+ new cql.Code(@_reason.code, @_reason.code_system, null, @_reason.title || null)
53
+ else
54
+ null
7
55
 
8
56
  ###
9
57
  Data elements that meet criteria using this datatype should document completion
@@ -15,17 +63,17 @@ class CQL_QDM.AssessmentPerformed extends CQL_QDM.QDMDatatype
15
63
  ###
16
64
  @param {Object} entry - the HDS data criteria object to convert
17
65
  ###
18
- constructor: (@entry) ->
19
- super @entry
20
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
21
- @_method = @entry.method
22
- @_negationRationale = @entry.negationReason
23
- @_reason = @entry.reason
24
- if @entry.values? && @entry.values.length > 0
25
- @_result = @entry.values?[0]
26
- @_relatedTo = @entry.references
27
- @_components = @entry.components
28
- delete @entry.end_time
66
+ constructor: (entry) ->
67
+ super entry
68
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
69
+ @_method = entry.method
70
+ @_negationRationale = entry.negationReason
71
+ @_reason = entry.reason
72
+ if entry.values? && entry.values.length > 0
73
+ @_result = entry.values?[0]
74
+ @_relatedTo = entry.references
75
+ @_components = entry.components
76
+ delete entry.end_time
29
77
 
30
78
  ###
31
79
  @returns {Date}
@@ -108,15 +156,14 @@ class CQL_QDM.AssessmentRecommended extends CQL_QDM.QDMDatatype
108
156
  ###
109
157
  @param {Object} entry - the HDS data criteria object to convert
110
158
  ###
111
- constructor: (@entry) ->
112
- super @entry
113
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
114
- @_method = @entry.method
115
- @_negationRationale = @entry.negationReason
116
- @_reason = @entry.reason
117
- if @entry.values? && @entry.values.length > 0
118
- @_result = @entry.values?[0]
119
- delete @entry.end_time
159
+ constructor: (entry) ->
160
+ super entry
161
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
162
+ @_negationRationale = entry.negationReason
163
+ @_reason = entry.reason
164
+ if entry.values? && entry.values.length > 0
165
+ @_result = entry.values?[0]
166
+ delete entry.end_time
120
167
 
121
168
  ###
122
169
  @returns {Date}
@@ -124,15 +171,6 @@ class CQL_QDM.AssessmentRecommended extends CQL_QDM.QDMDatatype
124
171
  authorDatetime: ->
125
172
  @_authorDatetime
126
173
 
127
- ###
128
- @returns {Code}
129
- ###
130
- method: ->
131
- if @_method?
132
- new cql.Code(@_method.code, @_method.code_system, null, @_method.title || null)
133
- else
134
- null
135
-
136
174
  ###
137
175
  @returns {Code}
138
176
  ###
@@ -150,12 +188,3 @@ class CQL_QDM.AssessmentRecommended extends CQL_QDM.QDMDatatype
150
188
  new cql.Code(@_reason.code, @_reason.code_system, null, @_reason.title || null)
151
189
  else
152
190
  null
153
-
154
- ###
155
- @returns {Code}
156
- ###
157
- method: ->
158
- if @_method?
159
- new cql.Code(@_method.code, @_method.code_system, null, @_method.title || null)
160
- else
161
- null
@@ -14,10 +14,10 @@ class CQL_QDM.PatientCareExperience extends CQL_QDM.QDMDatatype
14
14
  ###
15
15
  @param {Object} entry - the HDS data criteria object to convert
16
16
  ###
17
- constructor: (@entry) ->
18
- super @entry
19
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
20
- delete @entry.end_time
17
+ constructor: (entry) ->
18
+ super entry
19
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
20
+ delete entry.end_time
21
21
 
22
22
  ###
23
23
  @returns {Date}
@@ -37,9 +37,9 @@ class CQL_QDM.ProviderCareExperience extends CQL_QDM.QDMDatatype
37
37
  ###
38
38
  @param {Object} entry - the HDS data criteria object to convert
39
39
  ###
40
- constructor: (@entry) ->
41
- super @entry
42
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
40
+ constructor: (entry) ->
41
+ super entry
42
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
43
43
 
44
44
  ###
45
45
  @returns {Date}
@@ -15,17 +15,17 @@ class CQL_QDM.CareGoal extends CQL_QDM.QDMDatatype
15
15
  ###
16
16
  @param {Object} entry - the HDS data criteria object to convert
17
17
  ###
18
- constructor: (@entry) ->
19
- super @entry
20
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
21
- @_relevantPeriodLow = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
22
- if @entry.end_time
23
- @_relevantPeriodHigh = CQL_QDM.Helpers.convertDateTime(@entry.end_time)
18
+ constructor: (entry) ->
19
+ super entry
20
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
21
+ @_relevantPeriodLow = CQL_QDM.Helpers.convertDateTime(entry.start_time)
22
+ if entry.end_time
23
+ @_relevantPeriodHigh = CQL_QDM.Helpers.convertDateTime(entry.end_time)
24
24
  else
25
25
  # No end time; high is set to infinity
26
26
  @_relevantPeriodHigh = CQL_QDM.Helpers.infinityDateTime()
27
- @_relatedTo = @entry.references
28
- @_targetOutcome = @entry.targetOutcome
27
+ @_relatedTo = entry.references
28
+ @_targetOutcome = entry.targetOutcome
29
29
 
30
30
  ###
31
31
  @returns {Interval<Date>}
@@ -6,20 +6,35 @@ their methods will be accessable through the CQL_QDM namespace)
6
6
 
7
7
 
8
8
  ###
9
- To meet criteria using this datatype, the communication indicated by the
10
- Communication QDM category and its corresponding value set must be
11
- communicated from a patient to a provider.
9
+ To meet criteria using this datatype, the communication indicated by the Communication
10
+ QDM category is a conveyance of information from one entity (e.g., person, organization,
11
+ or device) to another.
12
+
13
+ Timing:
14
+ Relevant Period: The time the communication is sent (start time) to the time the
15
+ communication is received (end time)
16
+ Author dateTime the time the communication is documented (specifically significant for
17
+ negation rationale, i.e., Communication Not Performed)
12
18
  ###
13
- class CQL_QDM.CommunicationFromPatientToProvider extends CQL_QDM.QDMDatatype
19
+ class CQL_QDM.CommunicationPerformed extends CQL_QDM.QDMDatatype
14
20
  ###
15
21
  @param {Object} entry - the HDS data criteria object to convert
16
22
  ###
17
- constructor: (@entry) ->
18
- super @entry
19
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
20
- @_negationRationale = @entry.negationReason
21
- @_relatedTo = @entry.references
22
- delete @entry.end_time
23
+ constructor: (entry) ->
24
+ super entry
25
+ @_authorDatetime = CQL_QDM.Helpers.convertDateTime(entry.start_time)
26
+ @_negationRationale = entry.negationReason
27
+ @_relatedTo = entry.references
28
+ @_relevantPeriodLow = CQL_QDM.Helpers.convertDateTime(entry.start_time)
29
+ if entry.end_time
30
+ @_relevantPeriodHigh = CQL_QDM.Helpers.convertDateTime(entry.end_time)
31
+ else
32
+ # No end time; high is set to infinity
33
+ @_relevantPeriodHigh = CQL_QDM.Helpers.infinityDateTime()
34
+ @_category = entry.category
35
+ @_sender = entry.sender
36
+ @_recipient = entry.recipient
37
+ @_medium = entry.medium
23
38
 
24
39
  ###
25
40
  @returns {Date}
@@ -42,78 +57,49 @@ class CQL_QDM.CommunicationFromPatientToProvider extends CQL_QDM.QDMDatatype
42
57
  relatedTo: ->
43
58
  CQL_QDM.Helpers.relatedTo(@_relatedTo)
44
59
 
45
-
46
- ###
47
- To meet criteria using this datatype, the communication indicated by the
48
- Communication QDM category and its corresponding value set must be
49
- communicated from a provider to a patient.
50
- ###
51
- class CQL_QDM.CommunicationFromProviderToPatient extends CQL_QDM.QDMDatatype
52
60
  ###
53
- @param {Object} entry - the HDS data criteria object to convert
61
+ @returns {Interval<Date>}
54
62
  ###
55
- constructor: (@entry) ->
56
- super @entry
57
- @_negationRationale = @entry.negationReason
58
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
59
- @_relatedTo = @entry.references
60
- delete @entry.end_time
63
+ relevantPeriod: ->
64
+ low = @_relevantPeriodLow
65
+ high = @_relevantPeriodHigh
66
+ if low?
67
+ new cql.Interval(low, high)
68
+ else
69
+ null
61
70
 
62
71
  ###
63
72
  @returns {Code}
64
73
  ###
65
- negationRationale: ->
66
- if @_negationRationale?
67
- new cql.Code(@_negationRationale.code, @_negationRationale.code_system, null, @_negationRationale.title || null)
74
+ category: ->
75
+ if @_category?
76
+ new cql.Code(@_category.code, @_category.code_system, null, @_category.title || null)
68
77
  else
69
78
  null
70
79
 
71
- ###
72
- @returns {Date}
73
- ###
74
- authorDatetime: ->
75
- @_authorDatetime
76
-
77
- ###
78
- @returns {Array}
79
- ###
80
- relatedTo: ->
81
- CQL_QDM.Helpers.relatedTo(@_relatedTo)
82
-
83
-
84
- ###
85
- To meet criteria using this datatype, the communication indicated by the
86
- Communication QDM category and its corresponding value set must be
87
- communicated from one provider to another.
88
- ###
89
- class CQL_QDM.CommunicationFromProviderToProvider extends CQL_QDM.QDMDatatype
90
- ###
91
- @param {Object} entry - the HDS data criteria object to convert
92
- ###
93
- constructor: (@entry) ->
94
- super @entry
95
- @_negationRationale = @entry.negationReason
96
- @_authorDatetime = CQL_QDM.Helpers.convertDateTime(@entry.start_time)
97
- @_relatedTo = @entry.references
98
- delete @entry.end_time
99
-
100
80
  ###
101
81
  @returns {Code}
102
82
  ###
103
- negationRationale: ->
104
- if @_negationRationale?
105
- new cql.Code(@_negationRationale.code, @_negationRationale.code_system, null, @_negationRationale.title || null)
83
+ sender: ->
84
+ if @_sender?
85
+ new cql.Code(@_sender.code, @_sender.code_system, null, @_sender.title || null)
106
86
  else
107
87
  null
108
88
 
109
89
  ###
110
- @returns {Date}
90
+ @returns {Code}
111
91
  ###
112
- authorDatetime: ->
113
- @_authorDatetime
92
+ recipient: ->
93
+ if @_recipient?
94
+ new cql.Code(@_recipient.code, @_recipient.code_system, null, @_recipient.title || null)
95
+ else
96
+ null
114
97
 
115
98
  ###
116
- @returns {Array}
99
+ @returns {Code}
117
100
  ###
118
- relatedTo: ->
119
- CQL_QDM.Helpers.relatedTo(@_relatedTo)
101
+ medium: ->
102
+ if @_medium?
103
+ new cql.Code(@_medium.code, @_medium.code_system, null, @_medium.title || null)
104
+ else
105
+ null
@@ -10,8 +10,13 @@ Base QDM datatype class; implements various functions that all implemented
10
10
  QDM datatypes must support.
11
11
  ###
12
12
  class CQL_QDM.QDMDatatype
13
- constructor: (@entry) ->
14
- @_codes = @entry?.codes
13
+ constructor: (entry) ->
14
+ @_id = entry?._id
15
+ @_oid = entry?.oid
16
+ @_codes = entry?.codes
17
+ @_description = entry?.description
18
+ @_end_time = entry?.end_time
19
+ @_start_time = entry?.start_time
15
20
 
16
21
  ###
17
22
  Returns any instances of this attribute currently within this namespace.
@@ -39,8 +44,8 @@ class CQL_QDM.QDMDatatype
39
44
  @returns {Id}
40
45
  ###
41
46
  id: ->
42
- if @entry?._id?
43
- return new CQL_QDM.Id(@entry._id)
47
+ if @_id?
48
+ return new CQL_QDM.Id(@_id)
44
49
  else
45
50
  null
46
51
 
@@ -69,13 +74,13 @@ class CQL_QDM.QDMDatatype
69
74
  ###
70
75
  toString: ->
71
76
  # Grab description from entry; if blank use classname
72
- description = if @entry?.description then "#{@entry.description}\n" else "#{@constructor.name}\n"
77
+ description = if @_description? then "#{@_description}\n" else "#{@constructor.name}\n"
73
78
  # Grab start and end time, format for proper display
74
- startTime = if @entry?.start_time then "START: #{moment.utc(@entry.start_time, 'X').format('MM/DD/YYYY h:mm A')}\n" else ""
75
- endTime = if @entry?.end_time then "STOP: #{moment.utc(@entry.end_time, 'X').format('MM/DD/YYYY h:mm A')}\n" else ""
79
+ startTime = if @_start_time? then "START: #{moment.utc(@_start_time, 'X').format('MM/DD/YYYY h:mm A')}\n" else ""
80
+ endTime = if @_end_time? then "STOP: #{moment.utc(@_end_time, 'X').format('MM/DD/YYYY h:mm A')}\n" else ""
76
81
  # TODO: Refactor getCode()/code() so that this special logic is not necessary.
77
- # If it is a patient characteristic (other than payer), use getCode() instead of code()
78
- if /PatientCharacteristic/.test(this.constructor.name) and this.constructor.name != 'PatientCharacteristicPayer'
82
+ # These PatientCharacteristics use getCode instead of code. Others still use code.
83
+ if /PatientCharacteristic(?:Ethnicity|Expired|Race|Sex|Birthdate)/.test(this.constructor.name)
79
84
  code = @getCode()
80
85
  else if @_codes
81
86
  # Get code if this datatype has any