canql 3.0.0 → 4.3.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
2
  SHA256:
3
- metadata.gz: 935d92e9e0fa6135540db6a7acfdf127d9fdf395ddbd8f1c93f328b8e708983e
4
- data.tar.gz: 0b55234d83f824b71c66beb3e761ce0687393bb9e2695aaa21bda055883cdec0
3
+ metadata.gz: 2b054c9d0f56e07afcd4521b2e56b23fc21647f419f9bef7f04104bd2544e3b5
4
+ data.tar.gz: 48bf63bc902135454291778e23905535570bc5fd3019c13acb55709c9795e827
5
5
  SHA512:
6
- metadata.gz: c97e4d469ee36061bfd75b6c27c28ec47ed63c626bfd1412a84e9d0139cc2510f2d8c429b5793eded4e174cb9ec4a7401664492ae8dc52e2bddc6ca9382bf147
7
- data.tar.gz: 6f0998e8c64dd33322c70ca72c610a5b69c96956758e94a646489bf4eb14f7ee892bd268f01e6809e0cf42356591e8cedb7a6b15ffec4529001c56b000c9c191
6
+ metadata.gz: ad41792d7cfb4d5c79077ac53ca462e03cac72042095c51f41a03c53b92a01e3b16777e4f55d7c3167ab589be134cdf35547724a35b61b496bf9beb58f37ae1a
7
+ data.tar.gz: ca725da517e80d207eaaed88a7128461bfdadc3a23e5754682e342367762d2dbc7d69ae9d1b462fc8529f7135a1486c90d57516882b972964642cacf8b265618
@@ -1,6 +1,29 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 4.3.0 / 2020-06-10
5
+ ### Added
6
+ * Added additional field existance options (#45)
7
+
8
+ ## 4.2.0 / 2020-03-25
9
+ ### Added
10
+ * Added additional EUROCAT category filters for RAG combination
11
+
12
+ ## 4.1.0 / 2020-03-19
13
+ ### Added
14
+ * Added filters for EUROCAT RAG rating (#39)
15
+
16
+ ## 4.0.1 / 2019-10-29
17
+ ### Fixed
18
+ * Relax `chronic` dependency
19
+
20
+ ## 4.0.0 / 2019-09-06
21
+ ### Changed
22
+ * Added case filters for delivery and booking postcode fields and removed all simple postcode field filters (#36)
23
+
24
+ ### Added
25
+ * Added fasp and fasp plus code groups (#37)
26
+
4
27
  ## 3.0.0 / 2019-06-04
5
28
  ### Changed
6
29
  * Added new branch of CANQL for querying all patient not just child patients - modifies DIR (#29)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # CANQL [![Build Status](https://travis-ci.org/PublicHealthEngland/canql.svg?branch=master)](https://travis-ci.org/PublicHealthEngland/canql)
1
+ # CANQL [![Build Status](https://travis-ci.org/PublicHealthEngland/canql.svg?branch=master)](https://travis-ci.org/PublicHealthEngland/canql) [![Gem Version](https://badge.fury.io/rb/canql.svg)](https://rubygems.org/gems/canql)
2
2
 
3
3
  Congenital Anomaly Natural Query Language (CANQL) is a [Treetop](http://treetop.rubyforge.org/) driven Domain Specific Language (DSL) used by the Public Health England (PHE) National Congenital Anomaly and Rare Disease Registration Service (NCARDRS) to identify cohorts of cases.
4
4
 
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.add_dependency 'chronic', '~> 0.3.0'
29
+ spec.add_dependency 'chronic', '~> 0.3'
30
30
  spec.add_dependency 'ndr_support', '>= 3.0', '< 6'
31
31
  spec.add_dependency 'rails', '>= 4.1', '< 6'
32
32
  spec.add_dependency 'treetop', '>= 1.4.10'
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency 'guard-minitest'
37
37
  spec.add_development_dependency 'guard-rubocop'
38
38
  spec.add_development_dependency 'minitest'
39
- spec.add_development_dependency 'ndr_dev_support', '~> 3.1', '>= 3.1.3'
39
+ spec.add_development_dependency 'ndr_dev_support', '~> 5.6'
40
40
  spec.add_development_dependency 'pry'
41
41
  spec.add_development_dependency 'rake'
42
42
  spec.add_development_dependency 'terminal-notifier-guard' if RUBY_PLATFORM =~ /darwin/
@@ -15,11 +15,11 @@ file safety:
15
15
  ".travis.yml":
16
16
  comments:
17
17
  reviewed_by: josh.pencheon
18
- safe_revision: 16abb8206a3d36c7532427cd7137df79d2733d1d
18
+ safe_revision: 8adb767031a19aa6b3cea3f1cb05b4a9bcc964f3
19
19
  CHANGELOG.md:
20
20
  comments:
21
21
  reviewed_by: josh.pencheon
22
- safe_revision: ff70470e8fa9613a6968a7579b206b6107ef5312
22
+ safe_revision: 23852bc731fdf82a87fd06070a89ec81affe8155
23
23
  CODE_OF_CONDUCT.md:
24
24
  comments:
25
25
  reviewed_by: drewthorp
@@ -35,7 +35,7 @@ file safety:
35
35
  README.md:
36
36
  comments:
37
37
  reviewed_by: josh.pencheon
38
- safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
38
+ safe_revision: 33feeeaa4b2089e33f563e4c766e91c38b108e36
39
39
  Rakefile:
40
40
  comments:
41
41
  reviewed_by: timgentry
@@ -50,8 +50,8 @@ file safety:
50
50
  safe_revision: 6a666fcabe027056b1c774b2eabb3fdf686911d2
51
51
  canql.gemspec:
52
52
  comments:
53
- reviewed_by: josh.pencheon
54
- safe_revision: 16abb8206a3d36c7532427cd7137df79d2733d1d
53
+ reviewed_by: timgentry
54
+ safe_revision: 6cb13f43b4353ab7c90ff0406ec13ac169b8e64c
55
55
  lib/canql.rb:
56
56
  comments:
57
57
  reviewed_by: timgentry
@@ -73,7 +73,7 @@ file safety:
73
73
  comments: It is a known issue that this is potentially susceptible to certain
74
74
  kinds of DoS attack
75
75
  reviewed_by: josh.pencheon
76
- safe_revision: 73a7dac17b20fcc77bcbd9d38777c8aa4d524816
76
+ safe_revision: b7778ca1d536022a807420cc9fe0f1c2df7f73ef
77
77
  lib/canql/grammars/batch_types.treetop:
78
78
  comments:
79
79
  reviewed_by: josh.pencheon
@@ -94,13 +94,13 @@ file safety:
94
94
  lib/canql/grammars/main.treetop:
95
95
  comments: It is a known issue that this is potentially susceptible to certain
96
96
  kinds of DoS attack
97
- reviewed_by: josh.pencheon
98
- safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
97
+ reviewed_by: timgentry
98
+ safe_revision: 05ccd47fcbba92bf5525c4d36118274696169d61
99
99
  lib/canql/grammars/patient.treetop:
100
100
  comments: It is a known issue that this is potentially susceptible to certain
101
101
  kinds of DoS attack
102
102
  reviewed_by: josh.pencheon
103
- safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
103
+ safe_revision: 43425805d9ad4a99e63eeb5d50495fa14eaa053b
104
104
  lib/canql/grammars/perinatal_hospital.treetop:
105
105
  comments:
106
106
  reviewed_by: josh.pencheon
@@ -130,7 +130,7 @@ file safety:
130
130
  lib/canql/nodes/anomaly.rb:
131
131
  comments:
132
132
  reviewed_by: josh.pencheon
133
- safe_revision: 73a7dac17b20fcc77bcbd9d38777c8aa4d524816
133
+ safe_revision: b7778ca1d536022a807420cc9fe0f1c2df7f73ef
134
134
  lib/canql/nodes/batch_types.rb:
135
135
  comments:
136
136
  reviewed_by: josh.pencheon
@@ -154,7 +154,7 @@ file safety:
154
154
  lib/canql/nodes/patient.rb:
155
155
  comments:
156
156
  reviewed_by: josh.pencheon
157
- safe_revision: 38369f1f26167f396d1705ec88611103d5262726
157
+ safe_revision: 43425805d9ad4a99e63eeb5d50495fa14eaa053b
158
158
  lib/canql/nodes/perinatal_hospital.rb:
159
159
  comments:
160
160
  reviewed_by: josh.pencheon
@@ -178,7 +178,7 @@ file safety:
178
178
  lib/canql/version.rb:
179
179
  comments:
180
180
  reviewed_by: josh.pencheon
181
- safe_revision: ff70470e8fa9613a6968a7579b206b6107ef5312
181
+ safe_revision: 23852bc731fdf82a87fd06070a89ec81affe8155
182
182
  test/anomaly_test_helper.rb:
183
183
  comments:
184
184
  reviewed_by: josh.pencheon
@@ -202,11 +202,11 @@ file safety:
202
202
  test/nodes/case_test.rb:
203
203
  comments:
204
204
  reviewed_by: josh.pencheon
205
- safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
205
+ safe_revision: 43425805d9ad4a99e63eeb5d50495fa14eaa053b
206
206
  test/nodes/code_test.rb:
207
207
  comments:
208
- reviewed_by: timgentry
209
- safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
208
+ reviewed_by: josh.pencheon
209
+ safe_revision: b7778ca1d536022a807420cc9fe0f1c2df7f73ef
210
210
  test/nodes/e_base_records_test.rb:
211
211
  comments:
212
212
  reviewed_by: josh.pencheon
@@ -234,7 +234,7 @@ file safety:
234
234
  test/nodes/patient_test.rb:
235
235
  comments:
236
236
  reviewed_by: josh.pencheon
237
- safe_revision: 33597126dbd2f720bd867fc357003634b73e6d0a
237
+ safe_revision: 43425805d9ad4a99e63eeb5d50495fa14eaa053b
238
238
  test/nodes/perinatal_hospital_test.rb:
239
239
  comments:
240
240
  reviewed_by: josh.pencheon
@@ -249,8 +249,8 @@ file safety:
249
249
  safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
250
250
  test/parser_test.rb:
251
251
  comments:
252
- reviewed_by: josh.pencheon
253
- safe_revision: 511e4238f83eb5b32839c25d94ec2a59145539bb
252
+ reviewed_by: timgentry
253
+ safe_revision: 05ccd47fcbba92bf5525c4d36118274696169d61
254
254
  test/test_helper.rb:
255
255
  comments:
256
256
  reviewed_by: josh.pencheon
@@ -43,7 +43,7 @@ module Canql
43
43
  end
44
44
 
45
45
  rule code_group
46
- ('fasp' / 'structural' / 'trisomy') <Nodes::Anomaly::SingleCodeGroupNode>
46
+ ('fasp plus' / 'plus' / 'fasp' / 'structural' / 'trisomy') <Nodes::Anomaly::SingleCodeGroupNode>
47
47
  end
48
48
  end
49
49
  end
@@ -59,11 +59,11 @@ grammar Canql
59
59
  end
60
60
 
61
61
  rule case_preconditions
62
- registry / gender / outcome / primacy
62
+ registry / gender / outcome / primacy / category
63
63
  end
64
64
 
65
65
  rule patient_preconditions
66
- gender / primacy
66
+ gender / primacy / category
67
67
  end
68
68
 
69
69
  rule case_additional_conditions
@@ -12,6 +12,10 @@ module Canql
12
12
  space primacy:('primary' / 'alias' ) word_break <Nodes::Patient::PrimacyNode>
13
13
  end
14
14
 
15
+ rule category
16
+ space category:('eurocat amber and green' / 'eurocat red and amber' / 'eurocat red' / 'eurocat amber' / 'eurocat green' / 'eurocat') word_break <Nodes::Patient::CategoryNode>
17
+ end
18
+
15
19
  rule expected_keyword
16
20
  space ('expected' / 'due') word_break
17
21
  end
@@ -42,15 +46,17 @@ module Canql
42
46
 
43
47
  rule case_field_names
44
48
  patient_field_name:(
45
- 'date of birth' / 'dob' / 'nhs number' / 'postcode' / 'birth weight' /
49
+ 'date of birth' / 'dob' / 'date of vital status' / 'nhs number' /
50
+ 'delivery postcode' / 'booking postcode' / 'birth weight' /
46
51
  'place of delivery' / 'sex' / 'outcome' / 'edd' /
47
- 'expected delivery date' / 'booking hospital' / 'screening status'
52
+ 'expected delivery date' / 'booking hospital' / 'screening status' /
53
+ 'number of fetuses at delivery' / 'malformed in set'
48
54
  )
49
55
  end
50
56
 
51
57
  rule patient_field_names
52
58
  patient_field_name:(
53
- 'date of birth' / 'dob' / 'nhs number' / 'postcode' / 'sex'
59
+ 'date of birth' / 'dob' / 'date of vital status' / 'nhs number' / 'sex'
54
60
  )
55
61
  end
56
62
 
@@ -25,6 +25,7 @@ module Canql #:nodoc: all
25
25
  end
26
26
  anomaly_hash['icd_codes'] = code_filter[:icd_code] if code_filter[:icd_code].present?
27
27
  return anomaly_hash if code_filter[:code_group].blank?
28
+
28
29
  anomaly_hash['code_groups'] = code_filter[:code_group]
29
30
  anomaly_hash
30
31
  end
@@ -48,11 +49,13 @@ module Canql #:nodoc: all
48
49
  def code_type(code)
49
50
  return :icd_code if code.respond_to?(:to_code) && code.to_code.present?
50
51
  return :code_group if code.respond_to?(:to_code_group) && code.to_code_group.present?
52
+
51
53
  raise 'Unable to find code type'
52
54
  end
53
55
 
54
56
  def code_value(code)
55
57
  return code.to_code if :icd_code == code_type(code)
58
+
56
59
  code.to_code_group
57
60
  end
58
61
 
@@ -67,6 +70,7 @@ module Canql #:nodoc: all
67
70
  code_filters[:icd_code] = { Canql::BEGINS => code_array[:icd_code] }
68
71
  end
69
72
  return code_filters if code_array[:code_group].blank?
73
+
70
74
  code_filters[:code_group] = { Canql::EQUALS => code_array[:code_group] }
71
75
  code_filters
72
76
  end
@@ -86,6 +90,7 @@ module Canql #:nodoc: all
86
90
  module AdditionalCodeNode
87
91
  def code_type
88
92
  return :icd_code if anomalies_icd_code.respond_to?(:to_code)
93
+
89
94
  :code_group
90
95
  end
91
96
 
@@ -106,7 +111,7 @@ module Canql #:nodoc: all
106
111
 
107
112
  module SingleCodeGroupNode
108
113
  def to_code_group
109
- text_value.upcase
114
+ text_value.gsub(/( )/, '_').upcase
110
115
  end
111
116
  end
112
117
  end
@@ -21,20 +21,40 @@ module Canql #:nodoc: all
21
21
  end
22
22
  end
23
23
 
24
+ module CategoryNode
25
+ def meta_data_item
26
+ { 'patient.category' => { Canql::EQUALS => clean_category } }
27
+ end
28
+
29
+ def clean_category
30
+ return 'eurocat_red' if 'eurocat red' == category.text_value
31
+ return 'eurocat_amber' if 'eurocat amber' == category.text_value
32
+ return 'eurocat_green' if 'eurocat green' == category.text_value
33
+ return 'eurocat_amber_green' if 'eurocat amber and green' == category.text_value
34
+ return 'eurocat_red_amber' if 'eurocat red and amber' == category.text_value
35
+
36
+ category.text_value
37
+ end
38
+ end
39
+
24
40
  module FieldExists
25
41
  FIELDS = {
26
- 'date of birth': { patient: 'birthdate', mother: 'birthdate' },
27
- 'dob': { patient: 'birthdate', mother: 'birthdate' },
28
- 'postcode': { patient: 'postcode', mother: 'postcode' },
29
- 'nhs number': { patient: 'nhsnumber', mother: 'nhsnumber' },
30
- 'birth weight': { patient: 'weight' },
31
- 'place of delivery': { patient: 'placeofdelivery' },
32
- 'sex': { patient: 'sex' },
33
- 'outcome': { patient: 'outcome' },
34
- 'edd': { patient: 'expecteddeliverydate' },
42
+ 'date of birth': { patient: 'birthdate', mother: 'birthdate' },
43
+ 'dob': { patient: 'birthdate', mother: 'birthdate' },
44
+ 'date of vital status': { patient: 'dateofvitalstatus', mother: 'dateofvitalstatus' },
45
+ 'delivery postcode': { patient: 'delivery_postcode' },
46
+ 'booking postcode': { patient: 'booking_postcode' },
47
+ 'nhs number': { patient: 'nhsnumber', mother: 'nhsnumber' },
48
+ 'birth weight': { patient: 'weight' },
49
+ 'place of delivery': { patient: 'placeofdelivery' },
50
+ 'sex': { patient: 'sex' },
51
+ 'outcome': { patient: 'outcome' },
52
+ 'edd': { patient: 'expecteddeliverydate' },
35
53
  'expected delivery date': { patient: 'expecteddeliverydate' },
36
- 'booking hospital': { patient: 'booking_hospital' },
37
- 'screening status': { patient: 'screeningstatus' }
54
+ 'booking hospital': { patient: 'booking_hospital' },
55
+ 'screening status': { patient: 'screeningstatus' },
56
+ 'number of fetuses at delivery': { patient: 'numoffetusesatdelivery' },
57
+ 'malformed in set': { patient: 'malformedinset' }
38
58
  }.freeze
39
59
 
40
60
  def meta_data_item
@@ -2,5 +2,5 @@
2
2
 
3
3
  # This stores the current version of the Canql gem
4
4
  module Canql
5
- VERSION = '3.0.0'
5
+ VERSION = '4.3.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: 3.0.0
4
+ version: 4.3.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: 2019-06-04 00:00:00.000000000 Z
11
+ date: 2020-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: '0.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.0
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ndr_support
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -154,20 +154,14 @@ dependencies:
154
154
  requirements:
155
155
  - - "~>"
156
156
  - !ruby/object:Gem::Version
157
- version: '3.1'
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: 3.1.3
157
+ version: '5.6'
161
158
  type: :development
162
159
  prerelease: false
163
160
  version_requirements: !ruby/object:Gem::Requirement
164
161
  requirements:
165
162
  - - "~>"
166
163
  - !ruby/object:Gem::Version
167
- version: '3.1'
168
- - - ">="
169
- - !ruby/object:Gem::Version
170
- version: 3.1.3
164
+ version: '5.6'
171
165
  - !ruby/object:Gem::Dependency
172
166
  name: pry
173
167
  requirement: !ruby/object:Gem::Requirement