canql 3.0.0 → 4.3.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 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