canql 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 0bf9c1067bbfdecf14c5e4835bb5a2eadca68e718d3e14280e84838f75b4ffc8
4
- data.tar.gz: 8716857a8c0fe1928c7eda79e663866f962e8488957ffcf16db55c34526d919c
2
+ SHA1:
3
+ metadata.gz: ec5860921323a9b19adb7e31a3e3df34f9154572
4
+ data.tar.gz: 5af7802c15c0d787c87dfc48dcb4e2fc93361093
5
5
  SHA512:
6
- metadata.gz: 03b0e5ccde1478aa7a23c4bf3a6da94185c4e32ad575ca919a3d6cfb4b94a0c2928d3eba302df2641be1fb4c506e1bc467b8c4ff9756ec0aed2c54db7ff66506
7
- data.tar.gz: 72322bf3fc7fa52c02b2935a19d3240d3140b204916f4d6f4cccd199c47e2f95e3d1d42905bd27e61b1b871754e3ab9ac446def16b6a40f312712195066c07db
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 Suspected 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
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
 
@@ -31,7 +31,7 @@ file safety:
31
31
  README.md:
32
32
  comments:
33
33
  reviewed_by: timgentry
34
- safe_revision: d3ea041b101e40e6847608705ecc2c3f6e0ca03f
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: josh.pencheon
72
- safe_revision: 03d2f9e0a1d3c178241a28e20bcd222165027e01
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: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
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: josh.pencheon
157
- safe_revision: 518365b3f1ffc28debccb6bcef055b4329e90739
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: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
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: josh.pencheon
181
- safe_revision: 03d2f9e0a1d3c178241a28e20bcd222165027e01
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: 6932d590299ad4a9d2ba24b425b158c67142bf74
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::AdditionalIcdCodeNode>
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 <Nodes::Anomaly::SingleIcdCodeNode>
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
@@ -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.any?
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
- code_array = [code_data.first.to_code]
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
- code_array << code.try(:to_code)
69
+ code_arrays[code_type(code)] << code_value(code)
41
70
  end
42
- code_array.flatten!
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 AdditionalIcdCodeNode
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
@@ -2,5 +2,5 @@
2
2
 
3
3
  # This stores the current version of the Canql gem
4
4
  module Canql
5
- VERSION = '2.0.1'
5
+ VERSION = '2.1.0'
6
6
  end
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.1
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-05-23 00:00:00.000000000 Z
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.7.6
277
+ rubygems_version: 2.5.2.3
278
278
  signing_key:
279
279
  specification_version: 4
280
280
  summary: Congenital Anomaly Natural Query Language