renalware-core 2.0.124 → 2.0.125
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/app/assets/images/renalware/icons/more-horizontal.svg +1 -0
- data/app/assets/images/renalware/icons/more-vertical.svg +1 -0
- data/app/assets/stylesheets/renalware/modules/_surveys.scss +58 -0
- data/app/controllers/renalware/medications/prescriptions_controller.rb +1 -0
- data/app/controllers/renalware/pathology/requests/requests_controller.rb +1 -0
- data/app/controllers/renalware/pd/peritonitis_episodes_controller.rb +1 -1
- data/app/helpers/renalware/layout_helper.rb +1 -1
- data/app/helpers/renalware/primary_care_physicians_helper.rb +2 -1
- data/app/helpers/renalware/toggle_helper.rb +12 -0
- data/app/models/renalware/feeds/files/practice_memberships/import_job.rb +2 -2
- data/app/models/renalware/letters/letter_query.rb +1 -1
- data/app/models/renalware/pathology/observation_for_patient_observation_description_using_set_query.rb +2 -2
- data/app/models/renalware/pathology/observation_for_patient_request_description_query.rb +19 -5
- data/app/models/renalware/pathology/patient.rb +4 -0
- data/app/models/renalware/pathology/request_for_patient_request_description_query.rb +4 -2
- data/app/models/renalware/pathology/requests/global_algorithm.rb +4 -1
- data/app/models/renalware/pathology/requests/global_rule/observation_result.rb +21 -9
- data/app/models/renalware/pathology/requests/global_rule/prescription_drug.rb +1 -1
- data/app/models/renalware/pathology/requests/global_rule/prescription_drug_category.rb +2 -2
- data/app/models/renalware/pathology/requests/global_rule/prescription_drug_type.rb +1 -3
- data/app/models/renalware/pathology/requests/global_rule/request_result.rb +1 -1
- data/app/models/renalware/pathology/requests/global_rule_set/patient_rule_set_decision.rb +14 -5
- data/app/models/renalware/pd/create_regime.rb +2 -2
- data/app/models/renalware/ukrdc/incoming/import_surveys.rb +2 -2
- data/app/models/renalware/ukrdc/transmission_log.rb +1 -1
- data/app/models/renalware/ukrdc/treatment_timeline/hd/generator.rb +0 -3
- data/app/models/renalware/ukrdc/treatment_timeline/prepare_tables.rb +1 -1
- data/app/presenters/renalware/hd/protocol_presenter.rb +1 -1
- data/app/views/renalware/accesses/assessments/_list.html.slim +1 -2
- data/app/views/renalware/accesses/procedures/_list.html.slim +3 -4
- data/app/views/renalware/accesses/profiles/_list.html.slim +1 -2
- data/app/views/renalware/admissions/consults/_table.html.slim +3 -5
- data/app/views/renalware/drugs/drugs/index.html.slim +1 -2
- data/app/views/renalware/events/types/_table.html.slim +1 -2
- data/app/views/renalware/hd/cannulation_types/index.html.slim +1 -2
- data/app/views/renalware/hd/mdm/_top.html.slim +6 -4
- data/app/views/renalware/hd/scheduling/diary_slots/edit.html.slim +6 -1
- data/app/views/renalware/layouts/_patient.html.slim +1 -6
- data/app/views/renalware/letters/formatted_letters/_enclosures.html.slim +2 -0
- data/app/views/renalware/letters/formatted_letters/_letter.html.slim +2 -0
- data/app/views/renalware/letters/letters/_letter.html.slim +2 -2
- data/app/views/renalware/letters/letters/_table.html.slim +2 -2
- data/app/views/renalware/letters/lists/_letter.html.slim +1 -1
- data/app/views/renalware/low_clearance/mdm/_top.html.slim +1 -0
- data/app/views/renalware/mdm/_worryboard.html.slim +10 -0
- data/app/views/renalware/mdm/show.html.slim +3 -1
- data/app/views/renalware/modalities/descriptions/index.html.slim +1 -2
- data/app/views/renalware/pathology/required_observations/index.html.slim +1 -1
- data/app/views/renalware/patients/primary_care_physicians/_primary_care_physician.html.slim +1 -2
- data/app/views/renalware/pd/_pet_adequacies.html.slim +1 -2
- data/app/views/renalware/pd/_regimes.html.slim +1 -2
- data/app/views/renalware/pd/assessments/_list.html.slim +1 -2
- data/app/views/renalware/pd/bag_types/index.html.slim +1 -2
- data/app/views/renalware/pd/mdm/_top.html.slim +2 -1
- data/app/views/renalware/pd/training_sessions/_list.html.slim +1 -2
- data/app/views/renalware/renal/aki_alerts/_aki_alert.html.slim +3 -6
- data/app/views/renalware/renal/aki_alerts/_table.html.slim +2 -1
- data/app/views/renalware/reporting/audits/index.html.slim +1 -2
- data/app/views/renalware/surveys/_pos_s_summary_part.html.slim +14 -1
- data/app/views/renalware/surveys/dashboards/show.html.slim +1 -0
- data/app/views/renalware/system/messages/index.html.slim +1 -2
- data/app/views/renalware/transplants/mdm/_top.html.slim +1 -0
- data/config/initializers/simple_form_foundation.rb +10 -10
- data/db/functions/update_current_observation_set_from_trigger_v04.sql +1 -1
- data/lib/collection_presenter.rb +1 -1
- data/lib/renalware/version.rb +1 -1
- metadata +17 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f02d9c6095c5d84a50a76fb8b2b1a5c0167a5fbad53fbfdf886ac610e162dca3
|
|
4
|
+
data.tar.gz: fd8ac6bdca0f0b55ebb66c490ef77db34efca9f644ea88594d38fd74bb30d593
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8ec5256950daad498967c57453f259a84fcace23c47006316c1e1a838d93db7edf0ea70353a875bece3dbd3c60c9fcafeab3c13c68a91f3ae3bb9897eab70da0
|
|
7
|
+
data.tar.gz: ac3ceff3c0f484bab79c5b00ca2bb78d64b6132455bb39e0eedad01163717be0b488c4107596ab0d93e8a0280fd835b3ad4940d80f37b147621b0780df294b67
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-vertical"><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
$survey-0: #fff;
|
|
2
|
+
$survey-1: #FFF8E8;
|
|
3
|
+
$survey-2: #FFE8B4;
|
|
4
|
+
$survey-3: #FFB81C;
|
|
5
|
+
$survey-4: #ED8B00;
|
|
6
|
+
|
|
7
|
+
dl.pos-s-key {
|
|
8
|
+
font-size: .9rem;
|
|
9
|
+
margin-top: 2rem;
|
|
10
|
+
|
|
11
|
+
dt, dd {
|
|
12
|
+
display: inline-block;
|
|
13
|
+
padding-right: .2rem;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
dd {
|
|
17
|
+
padding: 0 .2rem;
|
|
18
|
+
margin-right: 1rem;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
dt {
|
|
22
|
+
padding: 0 .5rem;
|
|
23
|
+
text-align: center;
|
|
24
|
+
border-radius: 3px;
|
|
25
|
+
border: solid 1px #DDD;
|
|
26
|
+
margin-right: .2rem;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.pos-s--0 {
|
|
31
|
+
background-color: $survey-0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.pos-s--1 {
|
|
35
|
+
background-color: $survey-1;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.pos-s--2 {
|
|
39
|
+
background-color: $survey-2;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.pos-s--3 {
|
|
43
|
+
background-color: $survey-3;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.pos-s--4 {
|
|
47
|
+
background-color: $survey-4;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.summary-part--pos_s table {
|
|
51
|
+
td {
|
|
52
|
+
text-align: center;
|
|
53
|
+
|
|
54
|
+
&:first-child {
|
|
55
|
+
text-align: left;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -65,6 +65,7 @@ module Renalware
|
|
|
65
65
|
gp_provider_code = Provider.codes.find { |code| code == :gp }
|
|
66
66
|
prescription = Prescription.new(treatable: treatable, provider: gp_provider_code)
|
|
67
67
|
prescription.build_termination
|
|
68
|
+
prescription.prescribed_on = Date.current
|
|
68
69
|
prescription
|
|
69
70
|
end
|
|
70
71
|
|
|
@@ -124,7 +124,7 @@ module Renalware
|
|
|
124
124
|
:catheter_removed, :line_break, :exit_site_infection,
|
|
125
125
|
:diarrhoea, :abdominal_pain, :fluid_description_id, :white_cell_total,
|
|
126
126
|
:white_cell_neutro, :white_cell_lympho, :white_cell_degen,
|
|
127
|
-
:white_cell_other, :notes,
|
|
127
|
+
:white_cell_other, :notes, episode_types: []
|
|
128
128
|
)
|
|
129
129
|
end
|
|
130
130
|
end
|
|
@@ -13,8 +13,9 @@ module Renalware
|
|
|
13
13
|
if primary_care_physician.practices.any?
|
|
14
14
|
return practices_list(primary_care_physician.practices)
|
|
15
15
|
end
|
|
16
|
+
|
|
16
17
|
if primary_care_physician.address.present?
|
|
17
|
-
|
|
18
|
+
format_address(primary_care_physician.address)
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
|
|
@@ -30,5 +30,17 @@ module Renalware
|
|
|
30
30
|
content_tag(:i)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
|
+
|
|
34
|
+
def th_toggle_all_rows
|
|
35
|
+
content_tag(:th, class: "noprint togglers") do
|
|
36
|
+
table_toggler(link_title: "Toggle all rows")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def td_toggle_row(row_selector)
|
|
41
|
+
content_tag(:td, class: "noprint") do
|
|
42
|
+
toggler(row_selector)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
33
45
|
end
|
|
34
46
|
end
|
|
@@ -11,7 +11,7 @@ module Renalware
|
|
|
11
11
|
include Feeds::Job
|
|
12
12
|
FILE_TO_EXTRACT_FROM_ARCHIVE = /epracmem.csv/.freeze
|
|
13
13
|
|
|
14
|
-
# rubocop:disable Metrics/
|
|
14
|
+
# rubocop:disable Metrics/AbcSize
|
|
15
15
|
# TODO: refactor
|
|
16
16
|
def perform(file)
|
|
17
17
|
logging_to_stringio(strio = StringIO.new)
|
|
@@ -27,7 +27,7 @@ module Renalware
|
|
|
27
27
|
ensure
|
|
28
28
|
file.update!(status: status, result: strio.string, time_taken: elapsed_ms)
|
|
29
29
|
end
|
|
30
|
-
# rubocop:enable Metrics/
|
|
30
|
+
# rubocop:enable Metrics/AbcSize
|
|
31
31
|
|
|
32
32
|
private
|
|
33
33
|
|
|
@@ -5,7 +5,7 @@ require_dependency "renalware/pathology"
|
|
|
5
5
|
module Renalware
|
|
6
6
|
module Pathology
|
|
7
7
|
class ObservationForPatientObservationDescriptionUsingSetQuery
|
|
8
|
-
pattr_initialize :patient, :
|
|
8
|
+
pattr_initialize :patient, :observation_description_code
|
|
9
9
|
|
|
10
10
|
# Fetches the patient's most recent observation for the supplied observation_description.code
|
|
11
11
|
# (eg 'HGB') using the patient's current_observation_set jsonb hash and returnd something
|
|
@@ -13,7 +13,7 @@ module Renalware
|
|
|
13
13
|
def call
|
|
14
14
|
return {} unless patient.current_observation_set
|
|
15
15
|
|
|
16
|
-
patient.current_observation_set.values.fetch(
|
|
16
|
+
patient.current_observation_set.values.fetch(observation_description_code, {})
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -10,12 +10,26 @@ module Renalware
|
|
|
10
10
|
@observation_description = request_description.required_observation_description
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
# I tried to switch over here to pulling the results from current_observation_set but]
|
|
14
|
+
# the dates seemed to be one year ahead in the test suite
|
|
13
15
|
def call
|
|
14
|
-
@
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
return if @observation_description.nil?
|
|
17
|
+
|
|
18
|
+
return if @patient.current_observation_set.nil?
|
|
19
|
+
|
|
20
|
+
result = @patient.current_observation_set.values[@observation_description.code]
|
|
21
|
+
if result
|
|
22
|
+
OpenStruct.new(
|
|
23
|
+
observed_on: Time.zone.parse(result["observed_at"]).to_date,
|
|
24
|
+
result: result["result"].to_f
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @patient
|
|
29
|
+
# .observations
|
|
30
|
+
# .where(description: @observation_description)
|
|
31
|
+
# .order(observed_at: :desc)
|
|
32
|
+
# .first
|
|
19
33
|
end
|
|
20
34
|
end
|
|
21
35
|
end
|
|
@@ -7,19 +7,21 @@ module Renalware
|
|
|
7
7
|
class RequestForPatientRequestDescriptionQuery
|
|
8
8
|
def initialize(patient, request_description)
|
|
9
9
|
@patient = patient
|
|
10
|
-
@request_description =
|
|
10
|
+
@request_description = request_description
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def call
|
|
14
14
|
@patient
|
|
15
15
|
.requests
|
|
16
|
-
.
|
|
16
|
+
.includes(request_descriptions: :required_observation_description)
|
|
17
17
|
.where(
|
|
18
18
|
pathology_request_descriptions_requests_requests: {
|
|
19
19
|
request_description_id: @request_description.id
|
|
20
20
|
}
|
|
21
21
|
)
|
|
22
22
|
.order(created_at: :desc)
|
|
23
|
+
.limit(1)
|
|
24
|
+
.pluck(:created_at)
|
|
23
25
|
.first
|
|
24
26
|
end
|
|
25
27
|
end
|
|
@@ -17,19 +17,25 @@ module Renalware
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def to_s
|
|
20
|
-
"#{
|
|
20
|
+
"#{observation_description_code} " \
|
|
21
21
|
" #{param_comparison_operator} " \
|
|
22
22
|
"#{param_comparison_value}"
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
def observation_description
|
|
26
|
-
|
|
25
|
+
# def observation_description
|
|
26
|
+
# @observation_description ||= ObservationDescription.where(id: param_id).first
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
def observation_description_code
|
|
30
|
+
@observation_description_code ||= begin
|
|
31
|
+
ObservationDescription.where(id: param_id).pluck(:code).first
|
|
32
|
+
end
|
|
27
33
|
end
|
|
28
34
|
|
|
29
35
|
private
|
|
30
36
|
|
|
31
37
|
def observation_description_present
|
|
32
|
-
return if
|
|
38
|
+
return if observation_description_code.present?
|
|
33
39
|
|
|
34
40
|
errors.add(:param_id, "param_id must be the id of an ObservationDescription")
|
|
35
41
|
end
|
|
@@ -37,7 +43,13 @@ module Renalware
|
|
|
37
43
|
|
|
38
44
|
class PatientGlobalRuleDecision
|
|
39
45
|
pattr_initialize :patient, :rule
|
|
40
|
-
delegate
|
|
46
|
+
delegate(
|
|
47
|
+
:param_comparison_operator,
|
|
48
|
+
:param_comparison_value,
|
|
49
|
+
:param_id,
|
|
50
|
+
:observation_description_code,
|
|
51
|
+
to: :rule
|
|
52
|
+
)
|
|
41
53
|
|
|
42
54
|
def observation_required_for_patient?
|
|
43
55
|
return true if observation.blank?
|
|
@@ -63,7 +75,7 @@ module Renalware
|
|
|
63
75
|
# The call returns eg { "result" => "123", "observed_on" => "2019-01-01" }
|
|
64
76
|
ObservationForPatientObservationDescriptionUsingSetQuery.new(
|
|
65
77
|
patient,
|
|
66
|
-
|
|
78
|
+
observation_description_code
|
|
67
79
|
).call["result"]
|
|
68
80
|
|
|
69
81
|
# ObservationForPatientObservationDescriptionQuery.new(
|
|
@@ -73,9 +85,9 @@ module Renalware
|
|
|
73
85
|
end
|
|
74
86
|
end
|
|
75
87
|
|
|
76
|
-
def
|
|
77
|
-
|
|
78
|
-
end
|
|
88
|
+
# def observation_description_code
|
|
89
|
+
# rule.observation_description_code # ||= ObservationDescription.new(id: param_id)
|
|
90
|
+
# end
|
|
79
91
|
end
|
|
80
92
|
end
|
|
81
93
|
end
|
|
@@ -10,7 +10,7 @@ module Renalware
|
|
|
10
10
|
validate :drug_category_present
|
|
11
11
|
|
|
12
12
|
def observation_required_for_patient?(patient, _date)
|
|
13
|
-
(patient.
|
|
13
|
+
(patient.current_drug_ids & drug_ids).any?
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def to_s
|
|
@@ -20,7 +20,7 @@ module Renalware
|
|
|
20
20
|
private
|
|
21
21
|
|
|
22
22
|
def drug_ids
|
|
23
|
-
drug_category.drugs.pluck(
|
|
23
|
+
drug_category.drugs.pluck(:id)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def drug_category
|
|
@@ -11,9 +11,7 @@ module Renalware
|
|
|
11
11
|
|
|
12
12
|
def observation_required_for_patient?(patient, _date)
|
|
13
13
|
patient
|
|
14
|
-
.
|
|
15
|
-
.select(:id)
|
|
16
|
-
.joins(:classifications)
|
|
14
|
+
.prescriptions.current.joins(drug: :classifications)
|
|
17
15
|
.where("drug_types_drugs.drug_type_id = ?", param_id)
|
|
18
16
|
.count > 0
|
|
19
17
|
end
|
|
@@ -32,14 +32,14 @@ module Renalware
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def last_request_still_being_processed?
|
|
35
|
-
return false if
|
|
35
|
+
return false if last_request_date.nil? || last_request_has_an_observation_result?
|
|
36
36
|
|
|
37
37
|
expiration_days = rule_set.request_description.expiration_days
|
|
38
38
|
return false if expiration_days == 0
|
|
39
39
|
|
|
40
40
|
# This subtraction works because ActiveSupport::TimeWithZone works in days
|
|
41
41
|
# e.g. TimeWithZone1 - TimeWithZone2 = 3 days
|
|
42
|
-
requested_days_ago = date -
|
|
42
|
+
requested_days_ago = date - last_request_date.to_date
|
|
43
43
|
requested_days_ago < expiration_days
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -53,7 +53,7 @@ module Renalware
|
|
|
53
53
|
# NB request.requested_on == request.created_at
|
|
54
54
|
def last_request_has_an_observation_result?
|
|
55
55
|
last_observation.present? &&
|
|
56
|
-
last_observation.observed_on >
|
|
56
|
+
last_observation.observed_on > last_request_date
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def last_observation
|
|
@@ -64,8 +64,17 @@ module Renalware
|
|
|
64
64
|
).call
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
def last_request
|
|
68
|
-
|
|
67
|
+
# def last_request
|
|
68
|
+
# raise 'u'
|
|
69
|
+
# @last_request ||=
|
|
70
|
+
# RequestForPatientRequestDescriptionQuery.new(
|
|
71
|
+
# patient,
|
|
72
|
+
# rule_set.request_description
|
|
73
|
+
# ).call
|
|
74
|
+
# end
|
|
75
|
+
|
|
76
|
+
def last_request_date
|
|
77
|
+
@last_request_date ||=
|
|
69
78
|
RequestForPatientRequestDescriptionQuery.new(
|
|
70
79
|
patient,
|
|
71
80
|
rule_set.request_description
|
|
@@ -14,9 +14,9 @@ module Renalware
|
|
|
14
14
|
def call(by:, params:)
|
|
15
15
|
regime = patient.pd_regimes.new(params)
|
|
16
16
|
if regime.valid? && save_regime(regime, by)
|
|
17
|
-
|
|
17
|
+
::Renalware::Success.new(regime)
|
|
18
18
|
else
|
|
19
|
-
|
|
19
|
+
::Renalware::Failure.new(regime)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|