conceptql 0.6.0 → 0.7.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +176 -0
  3. data/README.md +4 -2
  4. data/assets/diagram/diagram.css +331 -0
  5. data/assets/diagram/fonts/OFL.txt +93 -0
  6. data/assets/diagram/fonts/Roboto-400.ttf +0 -0
  7. data/assets/diagram/fonts/Roboto-700.ttf +0 -0
  8. data/assets/diagram/fonts/Roboto-Italic-400.ttf +0 -0
  9. data/assets/diagram/fonts/Roboto-Italic-Latin.woff2 +0 -0
  10. data/assets/diagram/fonts/Roboto-Normal-Latin.woff2 +0 -0
  11. data/assets/diagram/operators.svg +224 -0
  12. data/config/vocabularies.csv +85 -85
  13. data/docs/spec/README.md +2624 -0
  14. data/docs/spec/examples/after-operator.json +562 -0
  15. data/docs/spec/examples/any-overlap-operator.json +106 -0
  16. data/docs/spec/examples/before-operator.json +437 -0
  17. data/docs/spec/examples/co-reported-operator.json +168 -0
  18. data/docs/spec/examples/contains-operator.json +97 -0
  19. data/docs/spec/examples/date-range-operator.json +275 -0
  20. data/docs/spec/examples/death-operator.json +103 -0
  21. data/docs/spec/examples/during-operator.json +178 -0
  22. data/docs/spec/examples/episode-operator.json +80 -0
  23. data/docs/spec/examples/equal-operator.json +79 -0
  24. data/docs/spec/examples/ethnicity-operator.json +86 -0
  25. data/docs/spec/examples/except-operator.json +536 -0
  26. data/docs/spec/examples/filter-operator.json +218 -0
  27. data/docs/spec/examples/first-operator.json +148 -0
  28. data/docs/spec/examples/gender-operator.json +257 -0
  29. data/docs/spec/examples/hospice-operator.json +40 -0
  30. data/docs/spec/examples/hospitalization-operator.json +131 -0
  31. data/docs/spec/examples/information-periods-operator.json +131 -0
  32. data/docs/spec/examples/last-operator.json +148 -0
  33. data/docs/spec/examples/match-operator.json +186 -0
  34. data/docs/spec/examples/nth-occurrence-operator.json +300 -0
  35. data/docs/spec/examples/numeric-filter-operator.json +77 -0
  36. data/docs/spec/examples/one-in-two-out-operator.json +158 -0
  37. data/docs/spec/examples/person-filter-operator.json +919 -0
  38. data/docs/spec/examples/person-operator.json +274 -0
  39. data/docs/spec/examples/place-of-service-filter-operator.json +57 -0
  40. data/docs/spec/examples/provenance-operator.json +148 -0
  41. data/docs/spec/examples/provider-filter-operator.json +77 -0
  42. data/docs/spec/examples/race-operator.json +131 -0
  43. data/docs/spec/examples/recall-operator.json +289 -0
  44. data/docs/spec/examples/snf-operator.json +40 -0
  45. data/docs/spec/examples/time-window-operator.json +736 -0
  46. data/docs/spec/examples/trim-date-end-operator.json +201 -0
  47. data/docs/spec/examples/trim-date-start-operator.json +201 -0
  48. data/docs/spec/examples/union-operator.json +547 -0
  49. data/docs/spec/examples/vocabulary-operator.json +232 -0
  50. data/lib/conceptql/behaviors/metadatable.rb +68 -2
  51. data/lib/conceptql/behaviors/provenanceable.rb +4 -1
  52. data/lib/conceptql/behaviors/utilizable.rb +3 -0
  53. data/lib/conceptql/code_case_mismatch_error.rb +50 -0
  54. data/lib/conceptql/data_model/gdm.rb +23 -2
  55. data/lib/conceptql/diagram_renderer/app.rb +59 -0
  56. data/lib/conceptql/diagram_renderer/configuration.rb +87 -0
  57. data/lib/conceptql/diagram_renderer/diagram_data.rb +80 -0
  58. data/lib/conceptql/diagram_renderer/drawing.rb +255 -0
  59. data/lib/conceptql/diagram_renderer/geometry.rb +380 -0
  60. data/lib/conceptql/diagram_renderer/input_error.rb +11 -0
  61. data/lib/conceptql/diagram_renderer/js_format.rb +112 -0
  62. data/lib/conceptql/diagram_renderer/resvg.rb +120 -0
  63. data/lib/conceptql/diagram_renderer/sprite.rb +73 -0
  64. data/lib/conceptql/diagram_renderer/static.rb +70 -0
  65. data/lib/conceptql/diagram_renderer/svg.rb +73 -0
  66. data/lib/conceptql/diagram_renderer/tree_layout.rb +287 -0
  67. data/lib/conceptql/diagram_renderer.rb +82 -0
  68. data/lib/conceptql/lexicon/lexicon_strategy.rb +16 -0
  69. data/lib/conceptql/lexicon.rb +63 -11
  70. data/lib/conceptql/nodifier.rb +5 -3
  71. data/lib/conceptql/operators/after.rb +15 -1
  72. data/lib/conceptql/operators/any_overlap.rb +6 -1
  73. data/lib/conceptql/operators/before.rb +11 -1
  74. data/lib/conceptql/operators/binary_operator_operator.rb +12 -2
  75. data/lib/conceptql/operators/co_reported.rb +9 -4
  76. data/lib/conceptql/operators/contains.rb +6 -1
  77. data/lib/conceptql/operators/count.rb +2 -0
  78. data/lib/conceptql/operators/date_range.rb +15 -3
  79. data/lib/conceptql/operators/death.rb +5 -1
  80. data/lib/conceptql/operators/dedup.rb +2 -0
  81. data/lib/conceptql/operators/during.rb +6 -1
  82. data/lib/conceptql/operators/episode.rb +13 -2
  83. data/lib/conceptql/operators/equal.rb +11 -1
  84. data/lib/conceptql/operators/ethnicity.rb +19 -7
  85. data/lib/conceptql/operators/except.rb +10 -1
  86. data/lib/conceptql/operators/filter.rb +6 -1
  87. data/lib/conceptql/operators/first.rb +19 -9
  88. data/lib/conceptql/operators/from.rb +3 -0
  89. data/lib/conceptql/operators/gender.rb +10 -2
  90. data/lib/conceptql/operators/hospice.rb +7 -1
  91. data/lib/conceptql/operators/hospitalization.rb +6 -1
  92. data/lib/conceptql/operators/information_periods.rb +26 -7
  93. data/lib/conceptql/operators/invalid.rb +4 -0
  94. data/lib/conceptql/operators/last.rb +19 -9
  95. data/lib/conceptql/operators/match.rb +6 -1
  96. data/lib/conceptql/operators/multiple_vocabularies.rb +17 -3
  97. data/lib/conceptql/operators/numeric.rb +4 -0
  98. data/lib/conceptql/operators/numeric_filter.rb +13 -3
  99. data/lib/conceptql/operators/occurrence.rb +33 -12
  100. data/lib/conceptql/operators/one_in_two_out.rb +22 -5
  101. data/lib/conceptql/operators/operator.rb +8 -4
  102. data/lib/conceptql/operators/person.rb +5 -1
  103. data/lib/conceptql/operators/person_filter.rb +14 -1
  104. data/lib/conceptql/operators/place_of_service_filter.rb +14 -3
  105. data/lib/conceptql/operators/provenance.rb +17 -8
  106. data/lib/conceptql/operators/provider_filter.rb +18 -6
  107. data/lib/conceptql/operators/race.rb +14 -9
  108. data/lib/conceptql/operators/read.rb +11 -1
  109. data/lib/conceptql/operators/recall.rb +34 -2
  110. data/lib/conceptql/operators/snf.rb +7 -1
  111. data/lib/conceptql/operators/sum.rb +4 -0
  112. data/lib/conceptql/operators/temporal_operator.rb +4 -2
  113. data/lib/conceptql/operators/time_window.rb +27 -4
  114. data/lib/conceptql/operators/trim_date.rb +6 -14
  115. data/lib/conceptql/operators/trim_date_end.rb +9 -3
  116. data/lib/conceptql/operators/trim_date_start.rb +9 -3
  117. data/lib/conceptql/operators/union.rb +13 -1
  118. data/lib/conceptql/operators/vocabulary.rb +80 -6
  119. data/lib/conceptql/paths.rb +9 -1
  120. data/lib/conceptql/version.rb +1 -1
  121. data/lib/conceptql/vocabularies/drg_systems.rb +3 -2
  122. data/lib/conceptql/vocabularies/entry.rb +14 -11
  123. data/lib/conceptql/vocabularies/vocabulary_class_factory.rb +2 -1
  124. data/lib/conceptql.rb +3 -0
  125. metadata +75 -2
  126. data/doc/spec.md +0 -2091
@@ -0,0 +1,300 @@
1
+ {
2
+ "spec_id": "nth-occurrence-operator",
3
+ "examples": [
4
+ {
5
+ "title": "For each patient, select the Condition that represents the second occurrence of an MI",
6
+ "statement": ["occurrence", 2, ["icd9", "412"]],
7
+ "help": true,
8
+ "columns": [
9
+ "person_id",
10
+ "criterion_id",
11
+ "criterion_table",
12
+ "criterion_domain",
13
+ "start_date",
14
+ "end_date",
15
+ "source_value"
16
+ ],
17
+ "rows": [
18
+ [
19
+ 17,
20
+ 46165,
21
+ "observations",
22
+ "condition_occurrence",
23
+ "2009-04-30",
24
+ "2009-04-30",
25
+ "412"
26
+ ],
27
+ [
28
+ 88,
29
+ 73803,
30
+ "observations",
31
+ "condition_occurrence",
32
+ "2009-05-30",
33
+ "2009-05-30",
34
+ "412"
35
+ ],
36
+ [
37
+ 152,
38
+ 84298,
39
+ "observations",
40
+ "condition_occurrence",
41
+ "2010-11-22",
42
+ "2010-11-22",
43
+ "412"
44
+ ],
45
+ [
46
+ 177,
47
+ 507,
48
+ "observations",
49
+ "condition_occurrence",
50
+ "2009-06-13",
51
+ "2009-06-16",
52
+ "412"
53
+ ],
54
+ [
55
+ 187,
56
+ 87583,
57
+ "observations",
58
+ "condition_occurrence",
59
+ "2010-12-26",
60
+ "2010-12-26",
61
+ "412"
62
+ ],
63
+ [
64
+ 212,
65
+ 34052,
66
+ "observations",
67
+ "condition_occurrence",
68
+ "2009-10-07",
69
+ "2009-10-07",
70
+ "412"
71
+ ],
72
+ [
73
+ 213,
74
+ 15005,
75
+ "observations",
76
+ "condition_occurrence",
77
+ "2010-02-07",
78
+ "2010-02-07",
79
+ "412"
80
+ ],
81
+ [
82
+ 214,
83
+ 83257,
84
+ "observations",
85
+ "condition_occurrence",
86
+ "2009-11-12",
87
+ "2009-11-12",
88
+ "412"
89
+ ],
90
+ [
91
+ 220,
92
+ 20660,
93
+ "observations",
94
+ "condition_occurrence",
95
+ "2009-10-31",
96
+ "2009-10-31",
97
+ "412"
98
+ ],
99
+ [
100
+ 223,
101
+ 39893,
102
+ "observations",
103
+ "condition_occurrence",
104
+ "2008-10-31",
105
+ "2008-10-31",
106
+ "412"
107
+ ]
108
+ ],
109
+ "tree": {
110
+ "format": "conceptql-diagram/v1",
111
+ "statements": [
112
+ {
113
+ "name": "occurrence",
114
+ "base": "temporal",
115
+ "humanName": "Nth Occurrence",
116
+ "outputTypes": ["condition_occurrence"],
117
+ "parameters": {},
118
+ "values": [2],
119
+ "children": [
120
+ {
121
+ "name": "icd9",
122
+ "base": "selection",
123
+ "humanName": "ICD-9 CM",
124
+ "vocabularyId": "ICD9CM",
125
+ "outputTypes": ["condition_occurrence"],
126
+ "parameters": {},
127
+ "values": ["412"],
128
+ "children": [],
129
+ "counts": {
130
+ "condition_occurrence": {
131
+ "rows": 48,
132
+ "n": 37
133
+ }
134
+ }
135
+ }
136
+ ],
137
+ "counts": {
138
+ "condition_occurrence": {
139
+ "rows": 11,
140
+ "n": 11
141
+ }
142
+ }
143
+ }
144
+ ]
145
+ }
146
+ },
147
+ {
148
+ "title": "For each patient, the first record on the second day with any of these diagnoses",
149
+ "statement": [
150
+ "occurrence",
151
+ 2,
152
+ ["icd9", "410.00", "410.01", "250.00", "250.01"],
153
+ {
154
+ "group_by_date": true
155
+ }
156
+ ],
157
+ "help": true,
158
+ "columns": [
159
+ "person_id",
160
+ "criterion_id",
161
+ "criterion_table",
162
+ "criterion_domain",
163
+ "start_date",
164
+ "end_date",
165
+ "source_value"
166
+ ],
167
+ "rows": [
168
+ [
169
+ 2,
170
+ 57897,
171
+ "observations",
172
+ "condition_occurrence",
173
+ "2009-05-16",
174
+ "2009-05-16",
175
+ "25000"
176
+ ],
177
+ [
178
+ 7,
179
+ 69706,
180
+ "observations",
181
+ "condition_occurrence",
182
+ "2008-05-12",
183
+ "2008-05-12",
184
+ "25000"
185
+ ],
186
+ [
187
+ 8,
188
+ 90541,
189
+ "observations",
190
+ "condition_occurrence",
191
+ "2009-03-01",
192
+ "2009-03-03",
193
+ "25000"
194
+ ],
195
+ [
196
+ 9,
197
+ 84726,
198
+ "observations",
199
+ "condition_occurrence",
200
+ "2010-09-12",
201
+ "2010-09-12",
202
+ "25000"
203
+ ],
204
+ [
205
+ 11,
206
+ 35227,
207
+ "observations",
208
+ "condition_occurrence",
209
+ "2008-12-08",
210
+ "2008-12-08",
211
+ "25000"
212
+ ],
213
+ [
214
+ 12,
215
+ 43800,
216
+ "observations",
217
+ "condition_occurrence",
218
+ "2009-05-21",
219
+ "2009-05-21",
220
+ "25000"
221
+ ],
222
+ [
223
+ 13,
224
+ 57738,
225
+ "observations",
226
+ "condition_occurrence",
227
+ "2008-11-22",
228
+ "2008-11-22",
229
+ "25000"
230
+ ],
231
+ [
232
+ 14,
233
+ 28741,
234
+ "observations",
235
+ "condition_occurrence",
236
+ "2009-06-27",
237
+ "2009-06-27",
238
+ "25001"
239
+ ],
240
+ [
241
+ 15,
242
+ 68873,
243
+ "observations",
244
+ "condition_occurrence",
245
+ "2010-11-18",
246
+ "2010-11-18",
247
+ "25000"
248
+ ],
249
+ [
250
+ 17,
251
+ 73012,
252
+ "observations",
253
+ "condition_occurrence",
254
+ "2008-04-26",
255
+ "2008-04-26",
256
+ "25000"
257
+ ]
258
+ ],
259
+ "tree": {
260
+ "format": "conceptql-diagram/v1",
261
+ "statements": [
262
+ {
263
+ "name": "occurrence",
264
+ "base": "temporal",
265
+ "humanName": "Nth Occurrence",
266
+ "outputTypes": ["condition_occurrence"],
267
+ "parameters": {
268
+ "group_by_date": true
269
+ },
270
+ "values": [2],
271
+ "children": [
272
+ {
273
+ "name": "icd9",
274
+ "base": "selection",
275
+ "humanName": "ICD-9 CM",
276
+ "vocabularyId": "ICD9CM",
277
+ "outputTypes": ["condition_occurrence"],
278
+ "parameters": {},
279
+ "values": ["410.00", "410.01", "250.00", "250.01"],
280
+ "children": [],
281
+ "counts": {
282
+ "condition_occurrence": {
283
+ "rows": 1120,
284
+ "n": 163
285
+ }
286
+ }
287
+ }
288
+ ],
289
+ "counts": {
290
+ "condition_occurrence": {
291
+ "rows": 134,
292
+ "n": 134
293
+ }
294
+ }
295
+ }
296
+ ]
297
+ }
298
+ }
299
+ ]
300
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "spec_id": "numeric-filter-operator",
3
+ "examples": [
4
+ {
5
+ "title": "Hemoglobin A1c results (LOINC 4548-4) with a value from 5 to 7",
6
+ "statement": [
7
+ "numeric_filter",
8
+ ["loinc", "4548-4"],
9
+ {
10
+ "greater_than_or_equal_to": 5,
11
+ "less_than_or_equal_to": 7
12
+ }
13
+ ],
14
+ "help": true,
15
+ "columns": [
16
+ "person_id",
17
+ "criterion_id",
18
+ "criterion_table",
19
+ "criterion_domain",
20
+ "start_date",
21
+ "end_date",
22
+ "source_value"
23
+ ],
24
+ "rows": [
25
+ [
26
+ 200,
27
+ 100001,
28
+ "observations",
29
+ "observation",
30
+ "2009-03-03",
31
+ "2009-03-03",
32
+ "4548-4"
33
+ ]
34
+ ],
35
+ "tree": {
36
+ "format": "conceptql-diagram/v1",
37
+ "statements": [
38
+ {
39
+ "name": "numeric_filter",
40
+ "base": "temporal",
41
+ "humanName": "Numeric Filter",
42
+ "outputTypes": ["observation"],
43
+ "parameters": {
44
+ "greater_than_or_equal_to": 5,
45
+ "less_than_or_equal_to": 7
46
+ },
47
+ "values": [],
48
+ "children": [
49
+ {
50
+ "name": "loinc",
51
+ "base": "selection",
52
+ "humanName": "Logical Observation Identifiers Names and Codes (Regenstrief Institute)",
53
+ "vocabularyId": "LOINC",
54
+ "outputTypes": ["observation"],
55
+ "parameters": {},
56
+ "values": ["4548-4"],
57
+ "children": [],
58
+ "counts": {
59
+ "observation": {
60
+ "rows": 1,
61
+ "n": 1
62
+ }
63
+ }
64
+ }
65
+ ],
66
+ "counts": {
67
+ "observation": {
68
+ "rows": 1,
69
+ "n": 1
70
+ }
71
+ }
72
+ }
73
+ ]
74
+ }
75
+ }
76
+ ]
77
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "spec_id": "one-in-two-out-operator",
3
+ "examples": [
4
+ {
5
+ "title": "First diabetes diagnosis, either found once in an inpatient record, or twice in outpatient records at least 30 days apart",
6
+ "statement": [
7
+ "one_in_two_out",
8
+ ["icd9", "250.00"],
9
+ {
10
+ "outpatient_minimum_gap": "30d",
11
+ "outpatient_event_to_return": "Initial Event"
12
+ }
13
+ ],
14
+ "help": true,
15
+ "columns": [
16
+ "person_id",
17
+ "criterion_id",
18
+ "criterion_table",
19
+ "criterion_domain",
20
+ "start_date",
21
+ "end_date",
22
+ "source_value"
23
+ ],
24
+ "rows": [
25
+ [
26
+ 2,
27
+ 89752,
28
+ "observations",
29
+ "condition_occurrence",
30
+ "2009-05-11",
31
+ "2009-05-11",
32
+ "25000"
33
+ ],
34
+ [
35
+ 7,
36
+ 15942,
37
+ "observations",
38
+ "condition_occurrence",
39
+ "2008-04-23",
40
+ "2008-04-23",
41
+ "25000"
42
+ ],
43
+ [
44
+ 8,
45
+ 95135,
46
+ "observations",
47
+ "condition_occurrence",
48
+ "2008-10-17",
49
+ "2008-10-17",
50
+ "25000"
51
+ ],
52
+ [
53
+ 9,
54
+ 24929,
55
+ "observations",
56
+ "condition_occurrence",
57
+ "2010-08-01",
58
+ "2010-08-01",
59
+ "25000"
60
+ ],
61
+ [
62
+ 11,
63
+ 73103,
64
+ "observations",
65
+ "condition_occurrence",
66
+ "2008-06-17",
67
+ "2008-06-17",
68
+ "25000"
69
+ ],
70
+ [
71
+ 12,
72
+ 15443,
73
+ "observations",
74
+ "condition_occurrence",
75
+ "2009-04-20",
76
+ "2009-04-20",
77
+ "25000"
78
+ ],
79
+ [
80
+ 13,
81
+ 19968,
82
+ "observations",
83
+ "condition_occurrence",
84
+ "2008-03-05",
85
+ "2008-03-05",
86
+ "25000"
87
+ ],
88
+ [
89
+ 14,
90
+ 77991,
91
+ "observations",
92
+ "condition_occurrence",
93
+ "2009-06-05",
94
+ "2009-06-05",
95
+ "25000"
96
+ ],
97
+ [
98
+ 15,
99
+ 47045,
100
+ "observations",
101
+ "condition_occurrence",
102
+ "2008-09-24",
103
+ "2008-09-24",
104
+ "25000"
105
+ ],
106
+ [
107
+ 17,
108
+ 83187,
109
+ "observations",
110
+ "condition_occurrence",
111
+ "2008-04-14",
112
+ "2008-04-14",
113
+ "25000"
114
+ ]
115
+ ],
116
+ "tree": {
117
+ "format": "conceptql-diagram/v1",
118
+ "statements": [
119
+ {
120
+ "name": "one_in_two_out",
121
+ "base": "temporal",
122
+ "humanName": "One In Two Out",
123
+ "outputTypes": ["condition_occurrence"],
124
+ "parameters": {
125
+ "outpatient_minimum_gap": "30d",
126
+ "outpatient_event_to_return": "Initial Event"
127
+ },
128
+ "values": [],
129
+ "children": [
130
+ {
131
+ "name": "icd9",
132
+ "base": "selection",
133
+ "humanName": "ICD-9 CM",
134
+ "vocabularyId": "ICD9CM",
135
+ "outputTypes": ["condition_occurrence"],
136
+ "parameters": {},
137
+ "values": ["250.00"],
138
+ "children": [],
139
+ "counts": {
140
+ "condition_occurrence": {
141
+ "rows": 1036,
142
+ "n": 162
143
+ }
144
+ }
145
+ }
146
+ ],
147
+ "counts": {
148
+ "condition_occurrence": {
149
+ "rows": 132,
150
+ "n": 132
151
+ }
152
+ }
153
+ }
154
+ ]
155
+ }
156
+ }
157
+ ]
158
+ }