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,289 @@
1
+ {
2
+ "spec_id": "recall-operator",
3
+ "examples": [
4
+ {
5
+ "title": "Label neurological diagnoses as \"neuro dxs\". Recall them to remove those that were co-reported with a nervous-system MS-DRG. Then apply the one inpatient, two outpatient rule. (The code lists are shortened.)",
6
+ "statement": [
7
+ "one_in_two_out",
8
+ [
9
+ "except",
10
+ {
11
+ "left": [
12
+ "union",
13
+ ["icd9", "331.0", "332.0", "340", "345.90"],
14
+ ["icd10cm", "G20", "G30.9", "G35", "G40.909"],
15
+ {
16
+ "label": "neuro dxs"
17
+ }
18
+ ],
19
+ "right": [
20
+ "co_reported",
21
+ ["recall", "neuro dxs"],
22
+ ["ms_drg", "056", "057", "058", "059", "060", "100", "101"]
23
+ ]
24
+ }
25
+ ],
26
+ {
27
+ "outpatient_minimum_gap": "30d",
28
+ "outpatient_maximum_gap": "365d",
29
+ "outpatient_event_to_return": "Confirming Event"
30
+ }
31
+ ],
32
+ "help": true,
33
+ "columns": [
34
+ "person_id",
35
+ "criterion_id",
36
+ "criterion_table",
37
+ "criterion_domain",
38
+ "start_date",
39
+ "end_date",
40
+ "source_value"
41
+ ],
42
+ "rows": [
43
+ [
44
+ 2,
45
+ 122,
46
+ "observations",
47
+ "condition_occurrence",
48
+ "2009-09-17",
49
+ "2009-09-20",
50
+ "34590"
51
+ ],
52
+ [
53
+ 7,
54
+ 27644,
55
+ "observations",
56
+ "condition_occurrence",
57
+ "2008-09-21",
58
+ "2008-09-30",
59
+ "3320"
60
+ ],
61
+ [
62
+ 28,
63
+ 131,
64
+ "observations",
65
+ "condition_occurrence",
66
+ "2008-04-26",
67
+ "2008-04-30",
68
+ "3310"
69
+ ],
70
+ [
71
+ 35,
72
+ 34819,
73
+ "observations",
74
+ "condition_occurrence",
75
+ "2009-05-02",
76
+ "2009-05-02",
77
+ "340"
78
+ ],
79
+ [
80
+ 42,
81
+ 72000,
82
+ "observations",
83
+ "condition_occurrence",
84
+ "2008-08-28",
85
+ "2008-08-28",
86
+ "3310"
87
+ ],
88
+ [
89
+ 44,
90
+ 39145,
91
+ "observations",
92
+ "condition_occurrence",
93
+ "2008-08-31",
94
+ "2008-08-31",
95
+ "3310"
96
+ ],
97
+ [
98
+ 68,
99
+ 28936,
100
+ "observations",
101
+ "condition_occurrence",
102
+ "2009-12-01",
103
+ "2009-12-01",
104
+ "340"
105
+ ],
106
+ [
107
+ 72,
108
+ 91104,
109
+ "observations",
110
+ "condition_occurrence",
111
+ "2009-09-07",
112
+ "2009-09-07",
113
+ "3320"
114
+ ],
115
+ [
116
+ 83,
117
+ 58845,
118
+ "observations",
119
+ "condition_occurrence",
120
+ "2010-09-05",
121
+ "2010-09-05",
122
+ "3320"
123
+ ],
124
+ [
125
+ 88,
126
+ 89097,
127
+ "observations",
128
+ "condition_occurrence",
129
+ "2009-02-03",
130
+ "2009-02-03",
131
+ "3320"
132
+ ]
133
+ ],
134
+ "tree": {
135
+ "format": "conceptql-diagram/v1",
136
+ "statements": [
137
+ {
138
+ "name": "one_in_two_out",
139
+ "base": "temporal",
140
+ "humanName": "One In Two Out",
141
+ "outputTypes": ["condition_occurrence"],
142
+ "parameters": {
143
+ "outpatient_minimum_gap": "30d",
144
+ "outpatient_maximum_gap": "365d",
145
+ "outpatient_event_to_return": "Confirming Event"
146
+ },
147
+ "values": [],
148
+ "children": [
149
+ {
150
+ "name": "except",
151
+ "base": "filter",
152
+ "humanName": "Except",
153
+ "outputTypes": ["condition_occurrence"],
154
+ "parameters": {},
155
+ "values": [],
156
+ "children": [
157
+ {
158
+ "name": "union",
159
+ "base": "set",
160
+ "humanName": "Union",
161
+ "outputTypes": ["condition_occurrence"],
162
+ "parameters": {
163
+ "label": "neuro dxs"
164
+ },
165
+ "values": [],
166
+ "children": [
167
+ {
168
+ "name": "icd9",
169
+ "base": "selection",
170
+ "humanName": "ICD-9 CM",
171
+ "vocabularyId": "ICD9CM",
172
+ "outputTypes": ["condition_occurrence"],
173
+ "parameters": {},
174
+ "values": ["331.0", "332.0", "340", "345.90"],
175
+ "children": [],
176
+ "counts": {
177
+ "condition_occurrence": {
178
+ "rows": 136,
179
+ "n": 72
180
+ }
181
+ }
182
+ },
183
+ {
184
+ "name": "icd10cm",
185
+ "base": "selection",
186
+ "humanName": "ICD-10 CM",
187
+ "vocabularyId": "ICD10CM",
188
+ "outputTypes": ["condition_occurrence"],
189
+ "parameters": {},
190
+ "values": ["G20", "G30.9", "G35", "G40.909"],
191
+ "children": [],
192
+ "counts": {
193
+ "condition_occurrence": {
194
+ "rows": 0,
195
+ "n": 0
196
+ }
197
+ }
198
+ }
199
+ ],
200
+ "counts": {
201
+ "condition_occurrence": {
202
+ "rows": 136,
203
+ "n": 72
204
+ }
205
+ }
206
+ },
207
+ {
208
+ "name": "co_reported",
209
+ "base": "set",
210
+ "humanName": "Co Reported",
211
+ "outputTypes": [
212
+ "condition_occurrence",
213
+ "procedure_occurrence"
214
+ ],
215
+ "parameters": {},
216
+ "values": [],
217
+ "children": [
218
+ {
219
+ "name": "recall",
220
+ "base": "selection",
221
+ "humanName": "Recall",
222
+ "outputTypes": ["condition_occurrence"],
223
+ "parameters": {},
224
+ "values": ["neuro dxs"],
225
+ "children": [],
226
+ "counts": {
227
+ "condition_occurrence": {
228
+ "rows": 136,
229
+ "n": 72
230
+ }
231
+ }
232
+ },
233
+ {
234
+ "name": "ms_drg",
235
+ "base": "selection",
236
+ "humanName": "MS-DRG",
237
+ "vocabularyId": "MS-DRG",
238
+ "outputTypes": ["procedure_occurrence"],
239
+ "parameters": {},
240
+ "values": [
241
+ "056",
242
+ "057",
243
+ "058",
244
+ "059",
245
+ "060",
246
+ "100",
247
+ "101"
248
+ ],
249
+ "children": [],
250
+ "counts": {
251
+ "procedure_occurrence": {
252
+ "rows": 3,
253
+ "n": 3
254
+ }
255
+ }
256
+ }
257
+ ],
258
+ "counts": {
259
+ "condition_occurrence": {
260
+ "rows": 0,
261
+ "n": 0
262
+ },
263
+ "procedure_occurrence": {
264
+ "rows": 0,
265
+ "n": 0
266
+ }
267
+ }
268
+ }
269
+ ],
270
+ "counts": {
271
+ "condition_occurrence": {
272
+ "rows": 136,
273
+ "n": 72
274
+ }
275
+ }
276
+ }
277
+ ],
278
+ "counts": {
279
+ "condition_occurrence": {
280
+ "rows": 24,
281
+ "n": 24
282
+ }
283
+ }
284
+ }
285
+ ]
286
+ }
287
+ }
288
+ ]
289
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "spec_id": "snf-operator",
3
+ "examples": [
4
+ {
5
+ "title": "All SNF admissions",
6
+ "statement": ["snf"],
7
+ "help": false,
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
+ "tree": {
19
+ "format": "conceptql-diagram/v1",
20
+ "statements": [
21
+ {
22
+ "name": "snf",
23
+ "base": "selection",
24
+ "humanName": "Snf",
25
+ "outputTypes": ["condition_occurrence"],
26
+ "parameters": {},
27
+ "values": [],
28
+ "children": [],
29
+ "counts": {
30
+ "condition_occurrence": {
31
+ "rows": 0,
32
+ "n": 0
33
+ }
34
+ }
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ ]
40
+ }