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,131 @@
1
+ {
2
+ "spec_id": "hospitalization-operator",
3
+ "examples": [
4
+ {
5
+ "title": "All inpatient hospital admissions",
6
+ "statement": ["hospitalization"],
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
+ 1,
20
+ 95,
21
+ "collections",
22
+ "condition_occurrence",
23
+ "2010-03-12",
24
+ "2010-03-13",
25
+ "V4501"
26
+ ],
27
+ [
28
+ 2,
29
+ 37,
30
+ "collections",
31
+ "condition_occurrence",
32
+ "2009-04-12",
33
+ "2009-04-18",
34
+ "2724"
35
+ ],
36
+ [
37
+ 2,
38
+ 96,
39
+ "collections",
40
+ "condition_occurrence",
41
+ "2009-08-31",
42
+ "2009-09-02",
43
+ "7092"
44
+ ],
45
+ [
46
+ 2,
47
+ 12,
48
+ "collections",
49
+ "condition_occurrence",
50
+ "2009-09-17",
51
+ "2009-09-20",
52
+ "32723"
53
+ ],
54
+ [
55
+ 2,
56
+ 43,
57
+ "collections",
58
+ "condition_occurrence",
59
+ "2010-06-26",
60
+ "2010-07-01",
61
+ "7856"
62
+ ],
63
+ [
64
+ 14,
65
+ 151,
66
+ "collections",
67
+ "condition_occurrence",
68
+ "2008-09-12",
69
+ "2008-09-12",
70
+ "2724"
71
+ ],
72
+ [
73
+ 17,
74
+ 93,
75
+ "collections",
76
+ "condition_occurrence",
77
+ "2008-09-19",
78
+ "2008-09-22",
79
+ "33811"
80
+ ],
81
+ [
82
+ 17,
83
+ 83,
84
+ "collections",
85
+ "condition_occurrence",
86
+ "2010-05-22",
87
+ "2010-06-12",
88
+ "5845"
89
+ ],
90
+ [
91
+ 17,
92
+ 122,
93
+ "collections",
94
+ "condition_occurrence",
95
+ "2010-06-02",
96
+ "2010-06-06",
97
+ "4280"
98
+ ],
99
+ [
100
+ 17,
101
+ 124,
102
+ "collections",
103
+ "condition_occurrence",
104
+ "2010-06-16",
105
+ "2010-06-19",
106
+ "V4365"
107
+ ]
108
+ ],
109
+ "tree": {
110
+ "format": "conceptql-diagram/v1",
111
+ "statements": [
112
+ {
113
+ "name": "hospitalization",
114
+ "base": "selection",
115
+ "humanName": "Hospitalization",
116
+ "outputTypes": ["condition_occurrence"],
117
+ "parameters": {},
118
+ "values": [],
119
+ "children": [],
120
+ "counts": {
121
+ "condition_occurrence": {
122
+ "rows": 153,
123
+ "n": 84
124
+ }
125
+ }
126
+ }
127
+ ]
128
+ }
129
+ }
130
+ ]
131
+ }
@@ -0,0 +1,131 @@
1
+ {
2
+ "spec_id": "information-periods-operator",
3
+ "examples": [
4
+ {
5
+ "title": "All information periods",
6
+ "statement": ["information_periods"],
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
+ 1,
20
+ 1,
21
+ "information_periods",
22
+ "observation_period",
23
+ "2008-01-01",
24
+ "2010-12-31",
25
+ null
26
+ ],
27
+ [
28
+ 1,
29
+ 2,
30
+ "information_periods",
31
+ "observation_period",
32
+ "2008-01-01",
33
+ "2010-12-31",
34
+ null
35
+ ],
36
+ [
37
+ 1,
38
+ 3,
39
+ "information_periods",
40
+ "observation_period",
41
+ "2008-01-01",
42
+ "2010-12-31",
43
+ null
44
+ ],
45
+ [
46
+ 1,
47
+ 4,
48
+ "information_periods",
49
+ "observation_period",
50
+ "2008-01-01",
51
+ "2010-12-31",
52
+ null
53
+ ],
54
+ [
55
+ 2,
56
+ 5,
57
+ "information_periods",
58
+ "observation_period",
59
+ "2008-01-01",
60
+ "2010-12-31",
61
+ null
62
+ ],
63
+ [
64
+ 2,
65
+ 6,
66
+ "information_periods",
67
+ "observation_period",
68
+ "2008-01-01",
69
+ "2010-12-31",
70
+ null
71
+ ],
72
+ [
73
+ 2,
74
+ 793,
75
+ "information_periods",
76
+ "observation_period",
77
+ "2008-01-01",
78
+ "2010-12-31",
79
+ null
80
+ ],
81
+ [
82
+ 2,
83
+ 7,
84
+ "information_periods",
85
+ "observation_period",
86
+ "2009-01-01",
87
+ "2010-12-31",
88
+ null
89
+ ],
90
+ [
91
+ 3,
92
+ 8,
93
+ "information_periods",
94
+ "observation_period",
95
+ "2008-01-01",
96
+ "2010-12-31",
97
+ null
98
+ ],
99
+ [
100
+ 3,
101
+ 9,
102
+ "information_periods",
103
+ "observation_period",
104
+ "2008-01-01",
105
+ "2010-12-31",
106
+ null
107
+ ]
108
+ ],
109
+ "tree": {
110
+ "format": "conceptql-diagram/v1",
111
+ "statements": [
112
+ {
113
+ "name": "information_periods",
114
+ "base": "selection",
115
+ "humanName": "Information Periods",
116
+ "outputTypes": ["observation_period"],
117
+ "parameters": {},
118
+ "values": [],
119
+ "children": [],
120
+ "counts": {
121
+ "observation_period": {
122
+ "rows": 946,
123
+ "n": 249
124
+ }
125
+ }
126
+ }
127
+ ]
128
+ }
129
+ }
130
+ ]
131
+ }
@@ -0,0 +1,148 @@
1
+ {
2
+ "spec_id": "last-operator",
3
+ "examples": [
4
+ {
5
+ "title": "For each patient, select the Condition that represents the last occurrence of an MI",
6
+ "statement": ["last", ["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
+ 11,
20
+ 82614,
21
+ "observations",
22
+ "condition_occurrence",
23
+ "2008-10-29",
24
+ "2008-10-29",
25
+ "412"
26
+ ],
27
+ [
28
+ 17,
29
+ 46165,
30
+ "observations",
31
+ "condition_occurrence",
32
+ "2009-04-30",
33
+ "2009-04-30",
34
+ "412"
35
+ ],
36
+ [
37
+ 38,
38
+ 40556,
39
+ "observations",
40
+ "condition_occurrence",
41
+ "2010-02-12",
42
+ "2010-02-12",
43
+ "412"
44
+ ],
45
+ [
46
+ 54,
47
+ 74606,
48
+ "observations",
49
+ "condition_occurrence",
50
+ "2008-06-05",
51
+ "2008-06-05",
52
+ "412"
53
+ ],
54
+ [
55
+ 60,
56
+ 986,
57
+ "observations",
58
+ "condition_occurrence",
59
+ "2009-07-19",
60
+ "2009-07-22",
61
+ "412"
62
+ ],
63
+ [
64
+ 66,
65
+ 16171,
66
+ "observations",
67
+ "condition_occurrence",
68
+ "2009-07-25",
69
+ "2009-07-25",
70
+ "412"
71
+ ],
72
+ [
73
+ 73,
74
+ 52843,
75
+ "observations",
76
+ "condition_occurrence",
77
+ "2008-11-16",
78
+ "2008-11-16",
79
+ "412"
80
+ ],
81
+ [
82
+ 77,
83
+ 58165,
84
+ "observations",
85
+ "condition_occurrence",
86
+ "2010-10-06",
87
+ "2010-10-06",
88
+ "412"
89
+ ],
90
+ [
91
+ 81,
92
+ 1405,
93
+ "observations",
94
+ "condition_occurrence",
95
+ "2009-01-28",
96
+ "2009-01-30",
97
+ "412"
98
+ ],
99
+ [
100
+ 88,
101
+ 73803,
102
+ "observations",
103
+ "condition_occurrence",
104
+ "2009-05-30",
105
+ "2009-05-30",
106
+ "412"
107
+ ]
108
+ ],
109
+ "tree": {
110
+ "format": "conceptql-diagram/v1",
111
+ "statements": [
112
+ {
113
+ "name": "last",
114
+ "base": "temporal",
115
+ "humanName": "Last",
116
+ "outputTypes": ["condition_occurrence"],
117
+ "parameters": {},
118
+ "values": [],
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": 37,
140
+ "n": 37
141
+ }
142
+ }
143
+ }
144
+ ]
145
+ }
146
+ }
147
+ ]
148
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "spec_id": "match-operator",
3
+ "examples": [
4
+ {
5
+ "title": "MIs that are a patient's first MI",
6
+ "statement": [
7
+ "match",
8
+ {
9
+ "left": ["icd9", "412"],
10
+ "right": ["first", ["icd9", "412"]]
11
+ }
12
+ ],
13
+ "help": true,
14
+ "columns": [
15
+ "person_id",
16
+ "criterion_id",
17
+ "criterion_table",
18
+ "criterion_domain",
19
+ "start_date",
20
+ "end_date",
21
+ "source_value"
22
+ ],
23
+ "rows": [
24
+ [
25
+ 11,
26
+ 82614,
27
+ "observations",
28
+ "condition_occurrence",
29
+ "2008-10-29",
30
+ "2008-10-29",
31
+ "412"
32
+ ],
33
+ [
34
+ 17,
35
+ 27269,
36
+ "observations",
37
+ "condition_occurrence",
38
+ "2008-08-25",
39
+ "2008-08-25",
40
+ "412"
41
+ ],
42
+ [
43
+ 38,
44
+ 40556,
45
+ "observations",
46
+ "condition_occurrence",
47
+ "2010-02-12",
48
+ "2010-02-12",
49
+ "412"
50
+ ],
51
+ [
52
+ 54,
53
+ 74606,
54
+ "observations",
55
+ "condition_occurrence",
56
+ "2008-06-05",
57
+ "2008-06-05",
58
+ "412"
59
+ ],
60
+ [
61
+ 60,
62
+ 986,
63
+ "observations",
64
+ "condition_occurrence",
65
+ "2009-07-19",
66
+ "2009-07-22",
67
+ "412"
68
+ ],
69
+ [
70
+ 66,
71
+ 16171,
72
+ "observations",
73
+ "condition_occurrence",
74
+ "2009-07-25",
75
+ "2009-07-25",
76
+ "412"
77
+ ],
78
+ [
79
+ 73,
80
+ 52843,
81
+ "observations",
82
+ "condition_occurrence",
83
+ "2008-11-16",
84
+ "2008-11-16",
85
+ "412"
86
+ ],
87
+ [
88
+ 77,
89
+ 58165,
90
+ "observations",
91
+ "condition_occurrence",
92
+ "2010-10-06",
93
+ "2010-10-06",
94
+ "412"
95
+ ],
96
+ [
97
+ 81,
98
+ 1405,
99
+ "observations",
100
+ "condition_occurrence",
101
+ "2009-01-28",
102
+ "2009-01-30",
103
+ "412"
104
+ ],
105
+ [
106
+ 88,
107
+ 1572,
108
+ "observations",
109
+ "condition_occurrence",
110
+ "2009-01-03",
111
+ "2009-01-09",
112
+ "412"
113
+ ]
114
+ ],
115
+ "tree": {
116
+ "format": "conceptql-diagram/v1",
117
+ "statements": [
118
+ {
119
+ "name": "match",
120
+ "base": "filter",
121
+ "humanName": "Match",
122
+ "outputTypes": ["condition_occurrence"],
123
+ "parameters": {},
124
+ "values": [],
125
+ "children": [
126
+ {
127
+ "name": "icd9",
128
+ "base": "selection",
129
+ "humanName": "ICD-9 CM",
130
+ "vocabularyId": "ICD9CM",
131
+ "outputTypes": ["condition_occurrence"],
132
+ "parameters": {},
133
+ "values": ["412"],
134
+ "children": [],
135
+ "counts": {
136
+ "condition_occurrence": {
137
+ "rows": 48,
138
+ "n": 37
139
+ }
140
+ }
141
+ },
142
+ {
143
+ "name": "first",
144
+ "base": "temporal",
145
+ "humanName": "First",
146
+ "outputTypes": ["condition_occurrence"],
147
+ "parameters": {},
148
+ "values": [],
149
+ "children": [
150
+ {
151
+ "name": "icd9",
152
+ "base": "selection",
153
+ "humanName": "ICD-9 CM",
154
+ "vocabularyId": "ICD9CM",
155
+ "outputTypes": ["condition_occurrence"],
156
+ "parameters": {},
157
+ "values": ["412"],
158
+ "children": [],
159
+ "counts": {
160
+ "condition_occurrence": {
161
+ "rows": 48,
162
+ "n": 37
163
+ }
164
+ }
165
+ }
166
+ ],
167
+ "counts": {
168
+ "condition_occurrence": {
169
+ "rows": 37,
170
+ "n": 37
171
+ }
172
+ }
173
+ }
174
+ ],
175
+ "counts": {
176
+ "condition_occurrence": {
177
+ "rows": 37,
178
+ "n": 37
179
+ }
180
+ }
181
+ }
182
+ ]
183
+ }
184
+ }
185
+ ]
186
+ }