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 +4 -4
- data/CHANGELOG.md +23 -0
- data/README.md +1 -1
- data/canql.gemspec +2 -2
- data/code_safety.yml +18 -18
- data/lib/canql/grammars/anomaly.treetop +1 -1
- data/lib/canql/grammars/main.treetop +2 -2
- data/lib/canql/grammars/patient.treetop +9 -3
- data/lib/canql/nodes/anomaly.rb +6 -1
- data/lib/canql/nodes/patient.rb +31 -11
- data/lib/canql/version.rb +1 -1
- metadata +6 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2b054c9d0f56e07afcd4521b2e56b23fc21647f419f9bef7f04104bd2544e3b5
|
|
4
|
+
data.tar.gz: 48bf63bc902135454291778e23905535570bc5fd3019c13acb55709c9795e827
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ad41792d7cfb4d5c79077ac53ca462e03cac72042095c51f41a03c53b92a01e3b16777e4f55d7c3167ab589be134cdf35547724a35b61b496bf9beb58f37ae1a
|
|
7
|
+
data.tar.gz: ca725da517e80d207eaaed88a7128461bfdadc3a23e5754682e342367762d2dbc7d69ae9d1b462fc8529f7135a1486c90d57516882b972964642cacf8b265618
|
data/CHANGELOG.md
CHANGED
|
@@ -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 [](https://travis-ci.org/PublicHealthEngland/canql)
|
|
1
|
+
# CANQL [](https://travis-ci.org/PublicHealthEngland/canql) [](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
|
|
data/canql.gemspec
CHANGED
|
@@ -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
|
|
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', '~>
|
|
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/
|
data/code_safety.yml
CHANGED
|
@@ -15,11 +15,11 @@ file safety:
|
|
|
15
15
|
".travis.yml":
|
|
16
16
|
comments:
|
|
17
17
|
reviewed_by: josh.pencheon
|
|
18
|
-
safe_revision:
|
|
18
|
+
safe_revision: 8adb767031a19aa6b3cea3f1cb05b4a9bcc964f3
|
|
19
19
|
CHANGELOG.md:
|
|
20
20
|
comments:
|
|
21
21
|
reviewed_by: josh.pencheon
|
|
22
|
-
safe_revision:
|
|
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:
|
|
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:
|
|
54
|
-
safe_revision:
|
|
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:
|
|
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:
|
|
98
|
-
safe_revision:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
205
|
+
safe_revision: 43425805d9ad4a99e63eeb5d50495fa14eaa053b
|
|
206
206
|
test/nodes/code_test.rb:
|
|
207
207
|
comments:
|
|
208
|
-
reviewed_by:
|
|
209
|
-
safe_revision:
|
|
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:
|
|
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:
|
|
253
|
-
safe_revision:
|
|
252
|
+
reviewed_by: timgentry
|
|
253
|
+
safe_revision: 05ccd47fcbba92bf5525c4d36118274696169d61
|
|
254
254
|
test/test_helper.rb:
|
|
255
255
|
comments:
|
|
256
256
|
reviewed_by: josh.pencheon
|
|
@@ -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' / '
|
|
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' / '
|
|
59
|
+
'date of birth' / 'dob' / 'date of vital status' / 'nhs number' / 'sex'
|
|
54
60
|
)
|
|
55
61
|
end
|
|
56
62
|
|
data/lib/canql/nodes/anomaly.rb
CHANGED
|
@@ -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
|
data/lib/canql/nodes/patient.rb
CHANGED
|
@@ -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':
|
|
27
|
-
'dob':
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
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':
|
|
37
|
-
'screening status':
|
|
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
|
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: 3.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:
|
|
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
|
|
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
|
|
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: '
|
|
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: '
|
|
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
|