canql 2.0.1 → 2.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 -5
- data/README.md +1 -1
- data/code_safety.yml +10 -10
- data/lib/canql/grammars/anomaly.treetop +7 -3
- data/lib/canql/nodes/anomaly.rb +50 -9
- data/lib/canql/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ec5860921323a9b19adb7e31a3e3df34f9154572
|
4
|
+
data.tar.gz: 5af7802c15c0d787c87dfc48dcb4e2fc93361093
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d05ac765951510e9746f4f65e4fddd9778d634b7999bc1719fcd770b6695f5e9ef6b4c2eecc8cfee3411c7bda9462ad5e804f97b96ecec43f3e282fda533e37
|
7
|
+
data.tar.gz: d52b09c8edaaaa4e4f6c365a73d9481c64f6f3909aa8dce988dcd70a79204460257bb329a9752501bbe6a6962fb10ed328bc951cf900a5ffda1d210d0dba2710
|
data/README.md
CHANGED
@@ -50,7 +50,7 @@ would output:
|
|
50
50
|
|
51
51
|
The parser is case insensitive. An example of an almost fully involved CANQL query is:
|
52
52
|
|
53
|
-
> First 27 Male Liveborn Thames Cases Due between 20/06/2015 and 25/06/2015 and Born on 22/06/2015 and that Died on 07/07/2015 with Prenatal
|
53
|
+
> First 27 Male Liveborn Thames Cases Due between 20/06/2015 and 25/06/2015 and Born on 22/06/2015 and that Died on 07/07/2015 with Suspected Prenatal Q20 Anomalies and Postnatal Tests and Missing Postcode and Date of Birth and QA Action and Unprocessed paediatric records and Mother Born between 01/10/1990 and 10/01/1999 and who Died on 01/08/2015 with Populated Postcode and NHS Number
|
54
54
|
|
55
55
|
Please see the tests for many more examples.
|
56
56
|
|
data/code_safety.yml
CHANGED
@@ -31,7 +31,7 @@ file safety:
|
|
31
31
|
README.md:
|
32
32
|
comments:
|
33
33
|
reviewed_by: timgentry
|
34
|
-
safe_revision:
|
34
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
35
35
|
Rakefile:
|
36
36
|
comments:
|
37
37
|
reviewed_by: timgentry
|
@@ -68,8 +68,8 @@ file safety:
|
|
68
68
|
lib/canql/grammars/anomaly.treetop:
|
69
69
|
comments: It is a known issue that this is potentially susceptible to certain
|
70
70
|
kinds of DoS attack
|
71
|
-
reviewed_by:
|
72
|
-
safe_revision:
|
71
|
+
reviewed_by: timgentry
|
72
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
73
73
|
lib/canql/grammars/batch_types.treetop:
|
74
74
|
comments:
|
75
75
|
reviewed_by: timgentry
|
@@ -114,7 +114,7 @@ file safety:
|
|
114
114
|
lib/canql/nodes/anomaly.rb:
|
115
115
|
comments:
|
116
116
|
reviewed_by: timgentry
|
117
|
-
safe_revision:
|
117
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
118
118
|
lib/canql/nodes/batch_types.rb:
|
119
119
|
comments:
|
120
120
|
reviewed_by: timgentry
|
@@ -153,12 +153,12 @@ file safety:
|
|
153
153
|
safe_revision: 6932d590299ad4a9d2ba24b425b158c67142bf74
|
154
154
|
lib/canql/version.rb:
|
155
155
|
comments:
|
156
|
-
reviewed_by:
|
157
|
-
safe_revision:
|
156
|
+
reviewed_by: timgentry
|
157
|
+
safe_revision: 78fc6f6aaee47fc11b073a8d8d975b4f7c9101cc
|
158
158
|
test/anomaly_test_helper.rb:
|
159
159
|
comments:
|
160
160
|
reviewed_by: timgentry
|
161
|
-
safe_revision:
|
161
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
162
162
|
test/canql_test.rb:
|
163
163
|
comments:
|
164
164
|
reviewed_by: timgentry
|
@@ -177,8 +177,8 @@ file safety:
|
|
177
177
|
safe_revision: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
|
178
178
|
test/nodes/code_test.rb:
|
179
179
|
comments:
|
180
|
-
reviewed_by:
|
181
|
-
safe_revision:
|
180
|
+
reviewed_by: timgentry
|
181
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
182
182
|
test/nodes/e_base_records_test.rb:
|
183
183
|
comments:
|
184
184
|
reviewed_by: timgentry
|
@@ -190,7 +190,7 @@ file safety:
|
|
190
190
|
test/nodes/patient_test.rb:
|
191
191
|
comments:
|
192
192
|
reviewed_by: timgentry
|
193
|
-
safe_revision:
|
193
|
+
safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
|
194
194
|
test/nodes/registry_test.rb:
|
195
195
|
comments:
|
196
196
|
reviewed_by: timgentry
|
@@ -21,15 +21,19 @@ module Canql
|
|
21
21
|
end
|
22
22
|
|
23
23
|
rule more_anomalies_icd_codes
|
24
|
-
','? space? ('or' space)? anomalies_icd_code <Nodes::Anomaly::
|
24
|
+
','? space? ('or' space)? anomalies_icd_code <Nodes::Anomaly::AdditionalCodeNode>
|
25
25
|
end
|
26
26
|
|
27
27
|
rule anomalies_icd_code
|
28
|
-
icd_code_name
|
28
|
+
(icd_code_name / code_group)
|
29
29
|
end
|
30
30
|
|
31
31
|
rule icd_code_name
|
32
|
-
[a-z] [0-9] 1..3
|
32
|
+
[a-z] [0-9] 1..3 <Nodes::Anomaly::SingleIcdCodeNode>
|
33
|
+
end
|
34
|
+
|
35
|
+
rule code_group
|
36
|
+
('fasp' / 'structural' / 'trisomy') <Nodes::Anomaly::SingleCodeGroupNode>
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
data/lib/canql/nodes/anomaly.rb
CHANGED
@@ -16,7 +16,9 @@ module Canql #:nodoc: all
|
|
16
16
|
anomaly_hash = { 'exists' => existance_filter }
|
17
17
|
anomaly_hash['type'] = anomaly_type_filter if anomaly_type.present?
|
18
18
|
anomaly_hash['status'] = anomaly_status_type_filter if anomaly_status_type.present?
|
19
|
-
anomaly_hash['icd_codes'] = code_filter if code_filter.
|
19
|
+
anomaly_hash['icd_codes'] = code_filter[:icd_code] if code_filter[:icd_code].present?
|
20
|
+
return anomaly_hash if code_filter[:code_group].blank?
|
21
|
+
anomaly_hash['code_groups'] = code_filter[:code_group]
|
20
22
|
anomaly_hash
|
21
23
|
end
|
22
24
|
|
@@ -32,23 +34,56 @@ module Canql #:nodoc: all
|
|
32
34
|
{ Canql::EQUALS => anomaly_status_type }
|
33
35
|
end
|
34
36
|
|
37
|
+
def code_type(code)
|
38
|
+
return :icd_code if code.respond_to?(:to_code) && code.to_code.present?
|
39
|
+
return :code_group if code.respond_to?(:to_code_group) && code.to_code_group.present?
|
40
|
+
raise 'Unable to find code type'
|
41
|
+
end
|
42
|
+
|
43
|
+
def code_value(code)
|
44
|
+
return code.to_code if :icd_code == code_type(code)
|
45
|
+
code.to_code_group
|
46
|
+
end
|
47
|
+
|
48
|
+
def prepare_code_filters(code_array)
|
49
|
+
code_array[:icd_code].flatten!
|
50
|
+
code_array[:icd_code].delete_if(&:blank?)
|
51
|
+
code_array[:code_group].flatten!
|
52
|
+
code_array[:code_group].delete_if(&:blank?)
|
53
|
+
|
54
|
+
code_filters = {}
|
55
|
+
if code_array[:icd_code].any?
|
56
|
+
code_filters[:icd_code] = { Canql::BEGINS => code_array[:icd_code] }
|
57
|
+
end
|
58
|
+
return code_filters if code_array[:code_group].blank?
|
59
|
+
code_filters[:code_group] = { Canql::EQUALS => code_array[:code_group] }
|
60
|
+
code_filters
|
61
|
+
end
|
62
|
+
|
35
63
|
def code_filter
|
36
64
|
return {} if code_data.text_value.blank?
|
37
65
|
|
38
|
-
|
66
|
+
code_arrays = { icd_code: [], code_group: [] }
|
67
|
+
code_arrays[code_type(code_data.first)] << code_value(code_data.first)
|
39
68
|
code_data.rest.elements.each do |code|
|
40
|
-
|
69
|
+
code_arrays[code_type(code)] << code_value(code)
|
41
70
|
end
|
42
|
-
|
43
|
-
code_array.delete_if(&:blank?)
|
44
|
-
|
45
|
-
{ Canql::BEGINS => code_array }
|
71
|
+
prepare_code_filters(code_arrays)
|
46
72
|
end
|
47
73
|
end
|
48
74
|
|
49
|
-
module
|
75
|
+
module AdditionalCodeNode
|
76
|
+
def code_type
|
77
|
+
return :icd_code if anomalies_icd_code.respond_to?(:to_code)
|
78
|
+
:code_group
|
79
|
+
end
|
80
|
+
|
50
81
|
def to_code
|
51
|
-
anomalies_icd_code.to_code
|
82
|
+
anomalies_icd_code.to_code if :icd_code == code_type
|
83
|
+
end
|
84
|
+
|
85
|
+
def to_code_group
|
86
|
+
anomalies_icd_code.to_code_group if :code_group == code_type
|
52
87
|
end
|
53
88
|
end
|
54
89
|
|
@@ -57,6 +92,12 @@ module Canql #:nodoc: all
|
|
57
92
|
text_value.upcase
|
58
93
|
end
|
59
94
|
end
|
95
|
+
|
96
|
+
module SingleCodeGroupNode
|
97
|
+
def to_code_group
|
98
|
+
text_value.upcase
|
99
|
+
end
|
100
|
+
end
|
60
101
|
end
|
61
102
|
end
|
62
103
|
end
|
data/lib/canql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: canql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PHE NDR Development Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chronic
|
@@ -274,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
274
|
version: '0'
|
275
275
|
requirements: []
|
276
276
|
rubyforge_project:
|
277
|
-
rubygems_version: 2.
|
277
|
+
rubygems_version: 2.5.2.3
|
278
278
|
signing_key:
|
279
279
|
specification_version: 4
|
280
280
|
summary: Congenital Anomaly Natural Query Language
|