renalware-core 2.0.121 → 2.0.123
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/Rakefile +6 -0
- data/app/controllers/renalware/admin/users_controller.rb +15 -13
- data/app/controllers/renalware/clinical/profiles_controller.rb +11 -6
- data/app/controllers/renalware/hd/sessions_controller.rb +5 -0
- data/app/models/concerns/renalware/patient_pathology_scopes.rb +1 -1
- data/app/models/renalware/feeds/hl7_message.rb +6 -0
- data/app/models/renalware/hd/prescription_administration.rb +1 -0
- data/app/models/renalware/hd/session.rb +2 -0
- data/app/models/renalware/pathology/observation_for_patient_observation_description_query.rb +3 -6
- data/app/models/renalware/pathology/observation_for_patient_observation_description_using_set_query.rb +20 -0
- data/app/models/renalware/pathology/requests/global_rule/observation_result.rb +23 -17
- data/app/models/renalware/pathology/requests/global_rule/prescription_drug.rb +2 -2
- 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 +7 -2
- data/app/models/renalware/pathology/requests/global_rule_set/patient_rule_set_decision.rb +11 -16
- data/app/models/renalware/pathology/requests/request_factory.rb +10 -13
- data/app/models/renalware/pathology/requests/requests_factory.rb +3 -6
- data/app/models/renalware/pathology/{view_observation_results.rb → view_observation_results.rb.dead} +0 -0
- data/app/models/renalware/patient.rb +1 -0
- data/app/models/renalware/patients/ingestion/commands/add_or_update_patient.rb +3 -3
- data/app/models/renalware/patients/ingestion/message_mappers/patient.rb +24 -2
- data/app/models/renalware/patients/ingestion/update_master_patient_index.rb +3 -4
- data/app/models/renalware/problems/note.rb +4 -0
- data/app/models/renalware/system/update_user.rb +1 -0
- data/app/models/renalware/user.rb +1 -0
- data/app/policies/renalware/hd/closed_session_policy.rb +3 -1
- data/app/policies/renalware/hd/dna_session_policy.rb +3 -1
- data/app/views/renalware/admin/users/edit.html.slim +16 -11
- data/app/views/renalware/admin/users/index.html.slim +6 -0
- data/app/views/renalware/clinical/profiles/edit.html.slim +24 -14
- data/app/views/renalware/clinical/profiles/show.html.slim +4 -0
- data/app/views/renalware/hd/mdm_patients/_patient.html.slim +4 -2
- data/app/views/renalware/hd/mdm_patients/_table.html.slim +4 -2
- data/app/views/renalware/medications/home_delivery/prescriptions/index.pdf.slim +9 -6
- data/app/views/renalware/medications/prescriptions/_table.html.slim +1 -1
- data/app/views/renalware/problems/problems/_archived_table.html.slim +1 -1
- data/config/locales/renalware/hd/mdm_patients.yml +2 -2
- data/db/migrate/20190925161724_change_path_request_consultant_id.rb +2 -6
- data/db/migrate/20191026120029_add_deleted_at_to_hd_sessions.rb +11 -0
- data/db/migrate/20191029095202_add_deleted_at_to_problem_notes.rb +8 -0
- data/db/migrate/20191105095304_update_views_to_exclude_deleted_sessions.rb +12 -0
- data/db/migrate/20191108105923_add_named_consultant_to_patients.rb +11 -0
- data/db/views/reporting_hd_blood_pressures_audit_v02.sql +80 -0
- data/lib/renalware/version.rb +1 -1
- data/spec/factories/system/users.rb +4 -0
- data/spec/support/pages/clinical/profile_page.rb +28 -0
- metadata +10 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a8947eece7d110e83bf494a41fd4f0c72fc654ca830236c6207abdd151d5d556
|
|
4
|
+
data.tar.gz: f7717b64d5286fcc533e247fd278653851f79c263fb928fa136f11630ccaa9dd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 504ea58c9804a3f70209bac95fd4daa8f494fb0a3e78ef3b5bebdbda6a12d7efbd930590c2d69f0cdb31b36f0f4316834842866dc3c87f365a70335af389b9fa
|
|
7
|
+
data.tar.gz: 4fd87df55586b2a7043baef87043986d7791b5d3a9b3f16228fab25235b1837e3d686d3eefca9b4969c42140f69c6614efdc8f39e30a0d394dcb44fcaf953b86
|
data/Rakefile
CHANGED
|
@@ -17,26 +17,24 @@ module Renalware
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def edit
|
|
20
|
-
|
|
20
|
+
render locals: { user: find_and_authorize_user }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def update
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if update_user.call(update_params)
|
|
24
|
+
user = find_and_authorize_user
|
|
25
|
+
if System::UpdateUser.new(user).call(update_params)
|
|
27
26
|
redirect_to admin_users_path,
|
|
28
27
|
notice: t(".success", model_name: "user")
|
|
29
28
|
else
|
|
30
29
|
flash.now[:error] = t(".failed", model_name: "user")
|
|
31
|
-
render :edit
|
|
30
|
+
render :edit, locals: { user: user }
|
|
32
31
|
end
|
|
33
32
|
end
|
|
34
33
|
|
|
35
34
|
private
|
|
36
35
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
authorize @user
|
|
36
|
+
def find_and_authorize_user
|
|
37
|
+
User.find(params[:id]).tap { |user_| authorize user_ }
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def update_params
|
|
@@ -45,15 +43,19 @@ module Renalware
|
|
|
45
43
|
end
|
|
46
44
|
|
|
47
45
|
def user_params
|
|
48
|
-
params
|
|
46
|
+
params
|
|
47
|
+
.require(:user)
|
|
48
|
+
.permit(
|
|
49
|
+
:approved,
|
|
50
|
+
:unexpire,
|
|
51
|
+
:telephone,
|
|
52
|
+
:consultant,
|
|
53
|
+
role_ids: []
|
|
54
|
+
)
|
|
49
55
|
end
|
|
50
56
|
|
|
51
57
|
def role_ids
|
|
52
58
|
(user_params[:role_ids] || []).reject(&:blank?)
|
|
53
59
|
end
|
|
54
|
-
|
|
55
|
-
def update_user
|
|
56
|
-
@update_user ||= System::UpdateUser.new(@user)
|
|
57
|
-
end
|
|
58
60
|
end
|
|
59
61
|
end
|
|
@@ -4,6 +4,7 @@ require_dependency "renalware/clinical"
|
|
|
4
4
|
|
|
5
5
|
module Renalware
|
|
6
6
|
module Clinical
|
|
7
|
+
# Note that there is no concrete Clinical::Profile, most data here is persisted in the patient
|
|
7
8
|
class ProfilesController < Clinical::BaseController
|
|
8
9
|
def show
|
|
9
10
|
authorize patient
|
|
@@ -31,24 +32,28 @@ module Renalware
|
|
|
31
32
|
private
|
|
32
33
|
|
|
33
34
|
def update_patient
|
|
35
|
+
patient.named_consultant_id = profile_params[:named_consultant_id]
|
|
34
36
|
document = patient.document
|
|
37
|
+
|
|
35
38
|
%i(diabetes history).each do |document_attribute|
|
|
36
39
|
document.send(
|
|
37
40
|
:"#{document_attribute}=",
|
|
38
|
-
profile_params[document_attribute].symbolize_keys
|
|
41
|
+
profile_params[:document][document_attribute].symbolize_keys
|
|
39
42
|
)
|
|
40
43
|
end
|
|
41
|
-
patient.
|
|
42
|
-
patient.save!
|
|
44
|
+
patient.save_by! current_user
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
def profile_params
|
|
46
48
|
params
|
|
47
49
|
.require(:clinical_profile)
|
|
48
50
|
.permit(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
:named_consultant_id,
|
|
52
|
+
document: {
|
|
53
|
+
diabetes: %i(diagnosis diagnosed_on),
|
|
54
|
+
history: %i(alcohol smoking)
|
|
55
|
+
}
|
|
56
|
+
).to_h
|
|
52
57
|
end
|
|
53
58
|
end
|
|
54
59
|
end
|
|
@@ -69,6 +69,7 @@ module Renalware
|
|
|
69
69
|
session = Session.for_patient(patient).find(params[:id])
|
|
70
70
|
authorize session
|
|
71
71
|
session.destroy!
|
|
72
|
+
regenerate_rolling_hd_statistics
|
|
72
73
|
message = t(".success", model_name: "HD session")
|
|
73
74
|
redirect_to patient_hd_dashboard_path(patient), notice: message
|
|
74
75
|
end
|
|
@@ -145,6 +146,10 @@ module Renalware
|
|
|
145
146
|
.fetch(:document, nil)
|
|
146
147
|
.try(:permit!)
|
|
147
148
|
end
|
|
149
|
+
|
|
150
|
+
def regenerate_rolling_hd_statistics
|
|
151
|
+
Delayed::Job.enqueue UpdateRollingPatientStatisticsDjJob.new(patient.id)
|
|
152
|
+
end
|
|
148
153
|
end
|
|
149
154
|
# rubocop:enable Metrics/ClassLength
|
|
150
155
|
end
|
|
@@ -24,7 +24,7 @@ module Renalware
|
|
|
24
24
|
# = sort_link(<url>, :cre_date, "CRE date")
|
|
25
25
|
#
|
|
26
26
|
def self.extended(base)
|
|
27
|
-
%i(hgb ure cre urr phos
|
|
27
|
+
%i(hgb ure cre urr phos pthi pot).each do |code|
|
|
28
28
|
base.ransacker(code) { pathology_result_sort_predicate(code) }
|
|
29
29
|
base.ransacker(:"#{code}_date") { pathology_date_sort_predicate(code) }
|
|
30
30
|
end
|
data/app/models/renalware/pathology/observation_for_patient_observation_description_query.rb
CHANGED
|
@@ -5,15 +5,12 @@ require_dependency "renalware/pathology"
|
|
|
5
5
|
module Renalware
|
|
6
6
|
module Pathology
|
|
7
7
|
class ObservationForPatientObservationDescriptionQuery
|
|
8
|
-
|
|
9
|
-
@patient = patient
|
|
10
|
-
@observation_description = observation_description
|
|
11
|
-
end
|
|
8
|
+
pattr_initialize :patient, :observation_description
|
|
12
9
|
|
|
13
10
|
def call
|
|
14
|
-
|
|
11
|
+
patient
|
|
15
12
|
.observations
|
|
16
|
-
.where(description:
|
|
13
|
+
.where(description: observation_description)
|
|
17
14
|
.order(observed_at: :desc)
|
|
18
15
|
.first
|
|
19
16
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_dependency "renalware/pathology"
|
|
4
|
+
|
|
5
|
+
module Renalware
|
|
6
|
+
module Pathology
|
|
7
|
+
class ObservationForPatientObservationDescriptionUsingSetQuery
|
|
8
|
+
pattr_initialize :patient, :observation_description
|
|
9
|
+
|
|
10
|
+
# Fetches the patient's most recent observation for the supplied observation_description.code
|
|
11
|
+
# (eg 'HGB') using the patient's current_observation_set jsonb hash and returnd something
|
|
12
|
+
# like { "result" => "123", "observed_on" => "2019-01-01" }
|
|
13
|
+
def call
|
|
14
|
+
return {} unless patient.current_observation_set
|
|
15
|
+
|
|
16
|
+
patient.current_observation_set.values.fetch(observation_description.code, {})
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -36,23 +36,21 @@ module Renalware
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
class PatientGlobalRuleDecision
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
@rule = rule
|
|
42
|
-
end
|
|
39
|
+
pattr_initialize :patient, :rule
|
|
40
|
+
delegate :param_comparison_operator, :param_comparison_value, :param_id, to: :rule
|
|
43
41
|
|
|
44
42
|
def observation_required_for_patient?
|
|
45
|
-
return true if observation.
|
|
43
|
+
return true if observation.blank?
|
|
46
44
|
|
|
47
|
-
if [">", "<", ">=", "<="].include?(
|
|
48
|
-
observation.
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
if [">", "<", ">=", "<="].include?(rule.param_comparison_operator)
|
|
46
|
+
observation.to_i.send(
|
|
47
|
+
param_comparison_operator.to_sym,
|
|
48
|
+
param_comparison_value.to_i
|
|
51
49
|
)
|
|
52
50
|
else
|
|
53
|
-
observation.
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
observation.send(
|
|
52
|
+
param_comparison_operator.to_sym,
|
|
53
|
+
param_comparison_value
|
|
56
54
|
)
|
|
57
55
|
end
|
|
58
56
|
end
|
|
@@ -60,15 +58,23 @@ module Renalware
|
|
|
60
58
|
private
|
|
61
59
|
|
|
62
60
|
def observation
|
|
63
|
-
@observation ||=
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
@observation ||= begin
|
|
62
|
+
# This fetches the observation from the patient.current_observation_set jsonb hash.
|
|
63
|
+
# The call returns eg { "result" => "123", "observed_on" => "2019-01-01" }
|
|
64
|
+
ObservationForPatientObservationDescriptionUsingSetQuery.new(
|
|
65
|
+
patient,
|
|
66
66
|
observation_description
|
|
67
|
-
).call
|
|
67
|
+
).call["result"]
|
|
68
|
+
|
|
69
|
+
# ObservationForPatientObservationDescriptionQuery.new(
|
|
70
|
+
# @patient,
|
|
71
|
+
# observation_description
|
|
72
|
+
# ).call&.result
|
|
73
|
+
end
|
|
68
74
|
end
|
|
69
75
|
|
|
70
76
|
def observation_description
|
|
71
|
-
|
|
77
|
+
rule.observation_description ||= ObservationDescription.new(id: param_id)
|
|
72
78
|
end
|
|
73
79
|
end
|
|
74
80
|
end
|
|
@@ -10,7 +10,7 @@ module Renalware
|
|
|
10
10
|
validate :drug_present
|
|
11
11
|
|
|
12
12
|
def observation_required_for_patient?(patient, _date)
|
|
13
|
-
patient.drugs.
|
|
13
|
+
patient.drugs.exists?(id: param_id)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def to_s
|
|
@@ -24,7 +24,7 @@ module Renalware
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def drug_present
|
|
27
|
-
return if
|
|
27
|
+
return if Drugs::Drug.exists?(id: param_id)
|
|
28
28
|
|
|
29
29
|
errors.add(:param_id, "param_id must be the id of a Drug")
|
|
30
30
|
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.drugs.
|
|
13
|
+
(patient.drugs.pluck(&:id) & 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.
|
|
23
|
+
drug_category.drugs.pluck(&:id)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def drug_category
|
|
@@ -10,7 +10,12 @@ module Renalware
|
|
|
10
10
|
validate :drug_type_present
|
|
11
11
|
|
|
12
12
|
def observation_required_for_patient?(patient, _date)
|
|
13
|
-
patient
|
|
13
|
+
patient
|
|
14
|
+
.drugs
|
|
15
|
+
.select(:id)
|
|
16
|
+
.joins(:classifications)
|
|
17
|
+
.where("drug_types_drugs.drug_type_id = ?", param_id)
|
|
18
|
+
.count > 0
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
def to_s
|
|
@@ -24,7 +29,7 @@ module Renalware
|
|
|
24
29
|
end
|
|
25
30
|
|
|
26
31
|
def drug_type_present
|
|
27
|
-
return if
|
|
32
|
+
return if Drugs::Type.exists?(param_id)
|
|
28
33
|
|
|
29
34
|
errors.add(:param_id, "param_id must be the id of a DrugType")
|
|
30
35
|
end
|
|
@@ -7,12 +7,7 @@ module Renalware
|
|
|
7
7
|
class PatientRuleSetDecision
|
|
8
8
|
OBSERVATION_REQUIRED = true
|
|
9
9
|
OBSERVATION_NOT_REQUIRED = false
|
|
10
|
-
|
|
11
|
-
def initialize(patient, rule_set, date)
|
|
12
|
-
@rule_set = rule_set
|
|
13
|
-
@patient = patient
|
|
14
|
-
@date = date
|
|
15
|
-
end
|
|
10
|
+
pattr_initialize :patient, :rule_set, :date
|
|
16
11
|
|
|
17
12
|
# NOTE: Decide if a rule_set applies to a patient
|
|
18
13
|
def call
|
|
@@ -32,26 +27,26 @@ module Renalware
|
|
|
32
27
|
def last_observation_too_recent?
|
|
33
28
|
return false if last_observation.nil?
|
|
34
29
|
|
|
35
|
-
observed_days_ago =
|
|
36
|
-
|
|
30
|
+
observed_days_ago = date - last_observation.observed_on
|
|
31
|
+
!rule_set.frequency.observation_required?(observed_days_ago)
|
|
37
32
|
end
|
|
38
33
|
|
|
39
34
|
def last_request_still_being_processed?
|
|
40
35
|
return false if last_request.nil? || last_request_has_an_observation_result?
|
|
41
36
|
|
|
42
|
-
expiration_days =
|
|
37
|
+
expiration_days = rule_set.request_description.expiration_days
|
|
43
38
|
return false if expiration_days == 0
|
|
44
39
|
|
|
45
40
|
# This subtraction works because ActiveSupport::TimeWithZone works in days
|
|
46
41
|
# e.g. TimeWithZone1 - TimeWithZone2 = 3 days
|
|
47
|
-
requested_days_ago =
|
|
42
|
+
requested_days_ago = date - last_request.requested_on
|
|
48
43
|
requested_days_ago < expiration_days
|
|
49
44
|
end
|
|
50
45
|
|
|
51
46
|
def required_from_rules?
|
|
52
|
-
|
|
47
|
+
rule_set
|
|
53
48
|
.rules
|
|
54
|
-
.map { |rule| rule.observation_required_for_patient?(
|
|
49
|
+
.map { |rule| rule.observation_required_for_patient?(patient, date) }
|
|
55
50
|
.all?
|
|
56
51
|
end
|
|
57
52
|
|
|
@@ -64,16 +59,16 @@ module Renalware
|
|
|
64
59
|
def last_observation
|
|
65
60
|
@last_observation ||=
|
|
66
61
|
ObservationForPatientRequestDescriptionQuery.new(
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
patient,
|
|
63
|
+
rule_set.request_description
|
|
69
64
|
).call
|
|
70
65
|
end
|
|
71
66
|
|
|
72
67
|
def last_request
|
|
73
68
|
@last_request ||=
|
|
74
69
|
RequestForPatientRequestDescriptionQuery.new(
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
patient,
|
|
71
|
+
rule_set.request_description
|
|
77
72
|
).call
|
|
78
73
|
end
|
|
79
74
|
end
|
|
@@ -6,10 +6,7 @@ module Renalware
|
|
|
6
6
|
module Pathology
|
|
7
7
|
module Requests
|
|
8
8
|
class RequestFactory
|
|
9
|
-
|
|
10
|
-
@patient = patient
|
|
11
|
-
@params = params
|
|
12
|
-
end
|
|
9
|
+
pattr_initialize :patient, :params
|
|
13
10
|
|
|
14
11
|
def build
|
|
15
12
|
Request.new(request_params)
|
|
@@ -19,24 +16,24 @@ module Renalware
|
|
|
19
16
|
|
|
20
17
|
def request_params
|
|
21
18
|
{
|
|
22
|
-
patient:
|
|
23
|
-
clinic:
|
|
24
|
-
consultant:
|
|
25
|
-
telephone:
|
|
26
|
-
template:
|
|
19
|
+
patient: patient,
|
|
20
|
+
clinic: params[:clinic],
|
|
21
|
+
consultant: params[:consultant],
|
|
22
|
+
telephone: params[:telephone],
|
|
23
|
+
template: params[:template],
|
|
27
24
|
request_descriptions: request_descriptions,
|
|
28
25
|
patient_rules: patient_rules,
|
|
29
|
-
high_risk:
|
|
30
|
-
by:
|
|
26
|
+
high_risk: patient.high_risk?,
|
|
27
|
+
by: params[:by]
|
|
31
28
|
}
|
|
32
29
|
end
|
|
33
30
|
|
|
34
31
|
def request_descriptions
|
|
35
|
-
|
|
32
|
+
patient.required_observation_requests(params[:clinic])
|
|
36
33
|
end
|
|
37
34
|
|
|
38
35
|
def patient_rules
|
|
39
|
-
|
|
36
|
+
patient.required_patient_pathology
|
|
40
37
|
end
|
|
41
38
|
end
|
|
42
39
|
end
|
|
@@ -6,14 +6,11 @@ module Renalware
|
|
|
6
6
|
module Pathology
|
|
7
7
|
module Requests
|
|
8
8
|
class RequestsFactory
|
|
9
|
-
|
|
10
|
-
@patients = patients
|
|
11
|
-
@params = params
|
|
12
|
-
end
|
|
9
|
+
pattr_initialize :patients, :params
|
|
13
10
|
|
|
14
11
|
def build
|
|
15
|
-
|
|
16
|
-
RequestFactory.new(patient,
|
|
12
|
+
patients.map do |patient|
|
|
13
|
+
RequestFactory.new(patient, params).build
|
|
17
14
|
end
|
|
18
15
|
end
|
|
19
16
|
end
|
data/app/models/renalware/pathology/{view_observation_results.rb → view_observation_results.rb.dead}
RENAMED
|
File without changes
|
|
@@ -45,6 +45,7 @@ module Renalware
|
|
|
45
45
|
belongs_to :country_of_birth, class_name: "System::Country"
|
|
46
46
|
belongs_to :religion, class_name: "Patients::Religion"
|
|
47
47
|
belongs_to :language, class_name: "Patients::Language"
|
|
48
|
+
belongs_to :named_consultant, class_name: "User"
|
|
48
49
|
has_many :bookmarks, class_name: "Patients::Bookmark"
|
|
49
50
|
has_many :alerts, class_name: "Patients::Alert"
|
|
50
51
|
has_one :worry, class_name: "Patients::Worry"
|
|
@@ -35,15 +35,15 @@ module Renalware
|
|
|
35
35
|
attr_reader :mapper_factory
|
|
36
36
|
|
|
37
37
|
def call
|
|
38
|
-
|
|
39
|
-
# patient abridgement
|
|
40
|
-
# update_patient_if_exists
|
|
38
|
+
update_patient_if_exists
|
|
41
39
|
UpdateMasterPatientIndex.new(message).call
|
|
42
40
|
end
|
|
43
41
|
|
|
44
42
|
private
|
|
45
43
|
|
|
46
44
|
def update_patient_if_exists
|
|
45
|
+
return if ENV.key?("ADT_SKIP_UPDATE_PATIENT")
|
|
46
|
+
|
|
47
47
|
patient = find_patient
|
|
48
48
|
return if patient.blank?
|
|
49
49
|
|
|
@@ -30,9 +30,9 @@ module Renalware
|
|
|
30
30
|
|
|
31
31
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
32
32
|
def map_attributes
|
|
33
|
-
|
|
33
|
+
attrs = {
|
|
34
34
|
local_patient_id: patient_identification.internal_id,
|
|
35
|
-
nhs_number: patient_identification.
|
|
35
|
+
nhs_number: patient_identification.nhs_number,
|
|
36
36
|
given_name: patient_identification.given_name,
|
|
37
37
|
family_name: patient_identification.family_name,
|
|
38
38
|
suffix: patient_identification.suffix,
|
|
@@ -43,6 +43,28 @@ module Renalware
|
|
|
43
43
|
practice: find_practice(message.practice_code) || patient.practice,
|
|
44
44
|
primary_care_physician: find_primary_care_physician(message.gp_code)
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
# Don't overwrite existing patient data if the new data is blank?
|
|
48
|
+
attrs.reject! { |_key, value| value.blank? }
|
|
49
|
+
patient.attributes = attrs
|
|
50
|
+
|
|
51
|
+
# patient.given_name = patient_identification.given_name
|
|
52
|
+
# patient.family_name = patient_identification.family_name
|
|
53
|
+
# patient.suffix = patient_identification.suffix
|
|
54
|
+
# patient.title = patient_identification.title
|
|
55
|
+
# patient.attributes = {
|
|
56
|
+
# local_patient_id: patient_identification.internal_id,
|
|
57
|
+
# nhs_number: patient_identification.nhs_number,
|
|
58
|
+
# given_name: patient_identification.given_name,
|
|
59
|
+
# family_name: patient_identification.family_name,
|
|
60
|
+
# suffix: patient_identification.suffix,
|
|
61
|
+
# title: patient_identification.title,
|
|
62
|
+
# born_on: Time.zone.parse(patient_identification.dob)&.to_date,
|
|
63
|
+
# died_on: Time.zone.parse(patient_identification.death_date)&.to_date,
|
|
64
|
+
# sex: patient_identification.sex,
|
|
65
|
+
# practice: find_practice(message.practice_code) || patient.practice,
|
|
66
|
+
# primary_care_physician: find_primary_care_physician(message.gp_code)
|
|
67
|
+
# }
|
|
46
68
|
patient.build_current_address if patient.current_address.blank?
|
|
47
69
|
patient.current_address.attributes = {
|
|
48
70
|
street_1: address[0],
|
|
@@ -20,8 +20,6 @@ module Renalware
|
|
|
20
20
|
|
|
21
21
|
@rw_patient = find_patient_in_renalware
|
|
22
22
|
update_or_create_abridged_patient
|
|
23
|
-
# update_primary_care_physician
|
|
24
|
-
# update_practice
|
|
25
23
|
end
|
|
26
24
|
|
|
27
25
|
private
|
|
@@ -32,9 +30,10 @@ module Renalware
|
|
|
32
30
|
) || NullObject.instance
|
|
33
31
|
end
|
|
34
32
|
|
|
35
|
-
# rubocop:disable Metrics/AbcSize
|
|
33
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
36
34
|
def update_or_create_abridged_patient
|
|
37
35
|
find_or_initialize_abridged_patient.update!(
|
|
36
|
+
nhs_number: patient_identification.nhs_number,
|
|
38
37
|
given_name: patient_identification.given_name,
|
|
39
38
|
family_name: patient_identification.family_name,
|
|
40
39
|
sex: patient_identification.sex,
|
|
@@ -47,7 +46,7 @@ module Renalware
|
|
|
47
46
|
gp_code: hl7_message.gp_code
|
|
48
47
|
)
|
|
49
48
|
end
|
|
50
|
-
# rubocop:enable Metrics/AbcSize
|
|
49
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
51
50
|
|
|
52
51
|
def find_or_initialize_abridged_patient
|
|
53
52
|
Patients::Abridgement.find_or_initialize_by(
|
|
@@ -6,10 +6,14 @@ module Renalware
|
|
|
6
6
|
module Problems
|
|
7
7
|
class Note < ApplicationRecord
|
|
8
8
|
include Accountable
|
|
9
|
+
acts_as_paranoid
|
|
10
|
+
alias archived? deleted?
|
|
9
11
|
|
|
10
12
|
belongs_to :problem, touch: true
|
|
11
13
|
|
|
12
14
|
scope :ordered, -> { order(created_at: :asc) }
|
|
15
|
+
scope :archived, -> { only_deleted }
|
|
16
|
+
scope :with_archived, -> { with_deleted }
|
|
13
17
|
|
|
14
18
|
validates :description, presence: true
|
|
15
19
|
|
|
@@ -37,6 +37,7 @@ module Renalware
|
|
|
37
37
|
.distinct("roles_users.user_id")
|
|
38
38
|
.where("roles_users.user_id is null")
|
|
39
39
|
}
|
|
40
|
+
scope :consultants, -> { where(consultant: true).excluding_system_user.ordered }
|
|
40
41
|
|
|
41
42
|
# Non-persistent attribute to signify we want to use extended validation.
|
|
42
43
|
# We need to refactor this by ising a form object for updating a user.
|
|
@@ -1,47 +1,52 @@
|
|
|
1
1
|
= within_admin_layout(title: "Edit",
|
|
2
2
|
breadcrumbs: breadcrumb_for("Users", admin_users_path)) do
|
|
3
3
|
|
|
4
|
-
h2=
|
|
4
|
+
h2= user
|
|
5
5
|
|
|
6
|
-
= simple_form_for
|
|
6
|
+
= simple_form_for user,
|
|
7
7
|
html: { autocomplete: "off" },
|
|
8
|
-
url: admin_user_path(
|
|
8
|
+
url: admin_user_path(user) do |f|
|
|
9
9
|
= f.input :approved, as: :hidden, input_html: { value: true }
|
|
10
10
|
|
|
11
|
-
- if
|
|
11
|
+
- if user.errors.any?
|
|
12
12
|
ul.error-messages
|
|
13
|
-
-
|
|
13
|
+
- user.errors.full_messages.each do |msg|
|
|
14
14
|
li= msg
|
|
15
15
|
|
|
16
|
-
- if
|
|
16
|
+
- if user.expired?
|
|
17
17
|
.row
|
|
18
18
|
= check_box_tag "user[unexpire]", true, false, class: "inline"
|
|
19
19
|
= label_tag :user_unexpire, "Reactivate account"
|
|
20
20
|
|
|
21
21
|
span
|
|
22
22
|
| Requested write access:
|
|
23
|
-
= yes_no(
|
|
23
|
+
= yes_no(user.asked_for_write_access)
|
|
24
24
|
|
|
25
25
|
br
|
|
26
26
|
br
|
|
27
27
|
- Renalware::Role.all.order(id: :asc).each_with_index do |role, index|
|
|
28
28
|
- element_id = "user_role_ids_#{index}"
|
|
29
|
-
- policy = Pundit.policy(current_user,
|
|
29
|
+
- policy = Pundit.policy(current_user, user)
|
|
30
30
|
= check_box_tag "user[role_ids][]",
|
|
31
31
|
role.id,
|
|
32
|
-
|
|
32
|
+
user.has_role?(role.name),
|
|
33
33
|
disabled: !(policy.assign_role?(role)),
|
|
34
34
|
id: element_id,
|
|
35
35
|
class: "inline"
|
|
36
36
|
= label_tag element_id, role.name.humanize
|
|
37
37
|
br
|
|
38
|
-
br
|
|
39
38
|
|
|
40
39
|
= f.input :telephone,
|
|
41
40
|
input_html: { class: "input small" },
|
|
42
41
|
wrapper: :horizontal_small
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
= f.input :consultant,
|
|
44
|
+
as: :boolean,
|
|
45
|
+
checked_value: "true",
|
|
46
|
+
unchecked_value: "false",
|
|
47
|
+
wrapper: :horizontal_small
|
|
48
|
+
|
|
49
|
+
- msg = user.approved? ? "Update" : "Approve"
|
|
45
50
|
= f.submit msg, class: "button"
|
|
46
51
|
span= " or "
|
|
47
52
|
= link_to "cancel", admin_users_path
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
th.col-width-small Requested write access
|
|
20
20
|
th.col-width-medium Role
|
|
21
21
|
th.col-width-tiny= sort_link(user_search, :approved, "Approved")
|
|
22
|
+
th.col-width-tiny= sort_link(user_search, :consultant, "Consultant")
|
|
22
23
|
th.col-width-date= sort_link(user_search, :expired_at, "Expired On")
|
|
23
24
|
th.col-width-date-time.show-for-large-up= sort_link(user_search, :current_sign_in_at, "Current sign in")
|
|
24
25
|
th.col-width-date-time.show-for-large-up= sort_link(user_search, :last_sign_in_at, "Last sign in")
|
|
@@ -47,6 +48,11 @@
|
|
|
47
48
|
i.far.fa-check-square
|
|
48
49
|
- else
|
|
49
50
|
i.muted.unapproved.far.fa-square
|
|
51
|
+
td
|
|
52
|
+
- if user.consultant?
|
|
53
|
+
i.far.fa-check-square
|
|
54
|
+
- else
|
|
55
|
+
i.muted.unapproved.far.fa-square
|
|
50
56
|
td.expired= l(user.expired_at&.to_date)
|
|
51
57
|
td.show-for-large-up= l(user.current_sign_in_at)
|
|
52
58
|
td.show-for-large-up= l(user.last_sign_in_at)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
breadcrumbs: breadcrumb_for("Clinical Profile", patient_clinical_profile_path)) do
|
|
3
3
|
|
|
4
4
|
.row.document
|
|
5
|
-
= simple_form_for patient
|
|
5
|
+
= simple_form_for patient,
|
|
6
6
|
url: patient_clinical_profile_path(patient),
|
|
7
7
|
method: :patch,
|
|
8
8
|
as: :clinical_profile,
|
|
@@ -12,19 +12,29 @@
|
|
|
12
12
|
.columns.large-12
|
|
13
13
|
article
|
|
14
14
|
header
|
|
15
|
-
h2
|
|
16
|
-
.
|
|
17
|
-
|
|
15
|
+
h2 General
|
|
16
|
+
= f.association :named_consultant,
|
|
17
|
+
as: :user_picker,
|
|
18
|
+
collection: Renalware::User.consultants,
|
|
19
|
+
wrapper: :horizontal_medium
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
= f.simple_fields_for :document, patient.document do |fdoc|
|
|
22
|
+
.columns.large-12
|
|
23
|
+
article
|
|
24
|
+
header
|
|
25
|
+
h2 Diabetes
|
|
26
|
+
.hint If YES, enter year of diagnosis
|
|
27
|
+
= render_input fdoc, :diabetes
|
|
22
28
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
article
|
|
30
|
+
header
|
|
31
|
+
h2 History
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
= fdoc.simple_fields_for :history, patient.document.history do |fh|
|
|
34
|
+
= fh.input :alcohol, input_html: { class: "small-input" }
|
|
35
|
+
= fh.input :smoking, input_html: { class: "small-input" }
|
|
36
|
+
|
|
37
|
+
.columns.large-12.form-actions
|
|
38
|
+
= submit_tag "Update", class: "button"
|
|
39
|
+
span= " or "
|
|
40
|
+
= link_to "Cancel", patient_clinical_profile_path(patient)
|
|
@@ -20,8 +20,10 @@ tr
|
|
|
20
20
|
td= l(patient.current_observation_set.hgb_observed_at)
|
|
21
21
|
td.show-for-xlarge-up= patient.current_observation_set.phos_result
|
|
22
22
|
td.show-for-xlarge-up= l(patient.current_observation_set.phos_observed_at)
|
|
23
|
-
td.show-for-xlarge-up= patient.current_observation_set.
|
|
24
|
-
td.show-for-xlarge-up= l(patient.current_observation_set.
|
|
23
|
+
td.show-for-xlarge-up= patient.current_observation_set.pot_result
|
|
24
|
+
td.show-for-xlarge-up= l(patient.current_observation_set.pot_observed_at)
|
|
25
|
+
td.show-for-xlarge-up= patient.current_observation_set.pthi_result
|
|
26
|
+
td.show-for-xlarge-up= l(patient.current_observation_set.pthi_observed_at)
|
|
25
27
|
td.show-for-xlarge-up= patient.current_observation_set.urr_result
|
|
26
28
|
td.show-for-xlarge-up= l(patient.current_observation_set.urr_observed_at)
|
|
27
29
|
td.actions= link_to t(".view"), view_proc.call(patient)
|
|
@@ -19,8 +19,10 @@ table#patients.mdm-patients.columns
|
|
|
19
19
|
th.col-width-date= sort_link(path, :hgb_date, t(".hgb_date"))
|
|
20
20
|
th.show-for-xlarge-up.col-width-tiny= sort_link(path, :phos, t(".phos"))
|
|
21
21
|
th.show-for-xlarge-up.col-width-date= sort_link(path, :phos_date, t(".phos_date"))
|
|
22
|
-
th.show-for-xlarge-up.col-width-tiny= sort_link(path, :
|
|
23
|
-
th.show-for-xlarge-up.col-width-date= sort_link(path, :
|
|
22
|
+
th.show-for-xlarge-up.col-width-tiny= sort_link(path, :pot, t(".pot"))
|
|
23
|
+
th.show-for-xlarge-up.col-width-date= sort_link(path, :pot_date, t(".pot_date"))
|
|
24
|
+
th.show-for-xlarge-up.col-width-tiny= sort_link(path, :pthi, t(".pthi"))
|
|
25
|
+
th.show-for-xlarge-up.col-width-date= sort_link(path, :pthi_date, t(".pthi_date"))
|
|
24
26
|
th.show-for-xlarge-up.col-width-tiny= sort_link(path, :urr, t(".urr"))
|
|
25
27
|
th.show-for-xlarge-up.col-width-date= sort_link(path, :urr_date, t(".urr_date"))
|
|
26
28
|
th.col-width-tiny
|
|
@@ -77,15 +77,18 @@ html
|
|
|
77
77
|
section.consultant
|
|
78
78
|
p
|
|
79
79
|
b Consultant:
|
|
80
|
-
|
|
80
|
+
/ TODO: Move this logic to a presenter
|
|
81
|
+
- consultant = patient.named_consultant
|
|
82
|
+
- if consultant.present?
|
|
83
|
+
|
|
|
84
|
+
- name = consultant.signature.presence || consultant.to_s
|
|
85
|
+
= [name, consultant.professional_position].compact.join(", ")
|
|
86
|
+
- else
|
|
87
|
+
span
|
|
81
88
|
section.signoff
|
|
82
89
|
table
|
|
83
90
|
tr
|
|
84
|
-
td Prescriber:
|
|
85
|
-
td
|
|
86
|
-
td
|
|
87
|
-
tr
|
|
88
|
-
td.prescriber= [current_user.signature, current_user.professional_position].compact.join(", ")
|
|
91
|
+
td.prescriber Prescriber:
|
|
89
92
|
td.signature Signature:
|
|
90
93
|
td Date:
|
|
91
94
|
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
class ChangePathRequestConsultantId < ActiveRecord::Migration[5.2]
|
|
2
2
|
def change
|
|
3
3
|
within_renalware_schema do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
:consultant,
|
|
7
|
-
foreign_key: { to_table: :users },
|
|
8
|
-
index: true
|
|
9
|
-
)
|
|
4
|
+
remove_column(:pathology_requests_requests, :consultant_id, :integer)
|
|
5
|
+
|
|
10
6
|
add_reference(
|
|
11
7
|
:pathology_requests_requests,
|
|
12
8
|
:consultant,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class AddDeletedAtToHDSessions < ActiveRecord::Migration[5.2]
|
|
2
|
+
def change
|
|
3
|
+
within_renalware_schema do
|
|
4
|
+
add_column :hd_sessions, :deleted_at, :datetime
|
|
5
|
+
add_index :hd_sessions, :deleted_at
|
|
6
|
+
|
|
7
|
+
add_column :hd_prescription_administrations, :deleted_at, :datetime
|
|
8
|
+
add_index :hd_prescription_administrations, :deleted_at
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/*
|
|
2
|
+
This is just a starter for 10 equivalent for the HaemoBPaudit4 audit.
|
|
3
|
+
Lots missing for example
|
|
4
|
+
- only do this for the last 30 days?
|
|
5
|
+
- selecting patients with a current modality of HD
|
|
6
|
+
- filtering out null or 0 bps
|
|
7
|
+
- the 140 130 etc percentages
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
WITH
|
|
11
|
+
blood_pressures AS (
|
|
12
|
+
SELECT
|
|
13
|
+
hd_sessions.id as session_id,
|
|
14
|
+
patients.id as patient_id,
|
|
15
|
+
hd_sessions.hospital_unit_id,
|
|
16
|
+
hd_sessions.document->'observations_before'->'blood_pressure'->>'systolic' as systolic_pre,
|
|
17
|
+
hd_sessions.document->'observations_before'->'blood_pressure'->>'diastolic' as diastolic_pre,
|
|
18
|
+
hd_sessions.document->'observations_after'->'blood_pressure'->>'systolic' as systolic_post,
|
|
19
|
+
hd_sessions.document->'observations_after'->'blood_pressure'->>'diastolic' as diastolic_post
|
|
20
|
+
FROM hd_sessions
|
|
21
|
+
INNER JOIN patients on patients.id = hd_sessions.patient_id
|
|
22
|
+
WHERE hd_sessions.signed_off_at IS NOT NULL
|
|
23
|
+
AND hd_sessions.deleted_at IS NULL
|
|
24
|
+
),
|
|
25
|
+
some_other_derived_table_variable AS (
|
|
26
|
+
SELECT 1 FROM blood_pressures
|
|
27
|
+
)
|
|
28
|
+
SELECT
|
|
29
|
+
hu.name as hospital_unit_name,
|
|
30
|
+
ROUND(AVG(systolic_pre::int)) as systolic_pre_avg,
|
|
31
|
+
ROUND(AVG(diastolic_pre::int)) as diastolic_pre_avg,
|
|
32
|
+
ROUND(AVG(systolic_post::int)) as systolic_post_avg,
|
|
33
|
+
ROUND(AVG(diastolic_post::int)) as distolic_post_avg
|
|
34
|
+
FROM blood_pressures
|
|
35
|
+
INNER JOIN hospital_units as hu on hu.id = blood_pressures.hospital_unit_id
|
|
36
|
+
GROUP BY hu.name
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
Here is the original for reference
|
|
40
|
+
use audits;
|
|
41
|
+
DROP TABLE IF EXISTS hdbpdata;
|
|
42
|
+
DROP TABLE IF EXISTS hdpatbpavg;
|
|
43
|
+
DROP TABLE IF EXISTS hdpatbpsite;
|
|
44
|
+
DROP TABLE IF EXISTS HDpatBPsitemain;
|
|
45
|
+
SET @mintotal=6;
|
|
46
|
+
CREATE TEMPORARY TABLE hdbpdata SELECT hdsesszid, modalsite as currsite, sex,
|
|
47
|
+
year(CURDATE())-year(birthdate) as age, syst_pre, syst_post, diast_pre, diast_post FROM
|
|
48
|
+
renalware.hdsessiondata JOIN renalware.patientdata ON hdsesszid=patzid WHERE DATEDIFF(CURDATE(),
|
|
49
|
+
hdsessdate)<30 and patientdata.modalcode LIKE '%HD%';
|
|
50
|
+
CREATE TABLE hdpatbpavg as SELECT hdsesszid, currsite, ROUND(AVG(syst_pre),0) as avgpresyst,
|
|
51
|
+
ROUND(AVG(syst_post),0) as avgpostsyst, ROUND(AVG(diast_pre),0) as avgprediast,
|
|
52
|
+
ROUND(AVG(diast_post),0) as avgpostdiast, syst_pre, syst_post, diast_pre, diast_post FROM hdbpdata
|
|
53
|
+
GROUP BY hdsesszid;
|
|
54
|
+
CREATE TABLE hdpatbpsite as SELECT currsite as currentsite, count(hdsesszid) as patcount,
|
|
55
|
+
ROUND(AVG(avgpresyst),0) as presyst_avg,
|
|
56
|
+
round(100*(sum(IF(syst_pre<140, '1','0'))/count(hdsesszid)),1) as pctpresysless140,
|
|
57
|
+
ROUND(AVG(avgpostsyst),0) as postsys_avg,
|
|
58
|
+
round(100*(sum(IF(syst_post<130, '1','0'))/count(hdsesszid)),1) as pctpostsysless130,
|
|
59
|
+
ROUND(AVG(avgprediast),0) as prediast_avg,
|
|
60
|
+
round(100*(sum(IF(diast_pre<90, '1','0'))/count(hdsesszid)),1) as pctprediastless90,
|
|
61
|
+
ROUND(AVG(avgpostdiast),0) as postdiast_avg,
|
|
62
|
+
round(100*(sum(IF(diast_post<80, '1','0'))/count(hdsesszid)),1) as pctpostdiastless80
|
|
63
|
+
FROM hdpatbpavg GROUP BY currentsite
|
|
64
|
+
UNION
|
|
65
|
+
SELECT 'Total', count(hdsesszid) as patcount, ROUND(AVG(avgpresyst),0) as presyst_avg,
|
|
66
|
+
round(100*(sum(IF(syst_pre<140, '1','0'))/count(hdsesszid)),1) as pctpresysless140,
|
|
67
|
+
ROUND(AVG(avgpostsyst),0) as postsys_avg,
|
|
68
|
+
round(100*(sum(IF(syst_post<130, '1','0'))/count(hdsesszid)),1) as pctpostsysless130,
|
|
69
|
+
ROUND(AVG(avgprediast),0) as prediast_avg,
|
|
70
|
+
round(100*(sum(IF(diast_pre<90, '1','0'))/count(hdsesszid)),1) as pctprediastless90,
|
|
71
|
+
ROUND(AVG(avgpostdiast),0) as postdiast_avg,
|
|
72
|
+
round(100*(sum(IF(diast_post<80, '1','0'))/count(hdsesszid)),1) as pctpostdiastless80
|
|
73
|
+
FROM hdpatbpavg;
|
|
74
|
+
Create TABLE HDpatBPsitemain as select * from hdpatbpsite WHERE patcount>@mintotal
|
|
75
|
+
ORDER BY patcount DESC;
|
|
76
|
+
UPDATE auditslist SET lastrun=NOW() WHERE auditcode='hdbpaudit';
|
|
77
|
+
DROP TABLE IF EXISTS hdbpdata;
|
|
78
|
+
DROP TABLE IF EXISTS hdpatbpavg;
|
|
79
|
+
DROP TABLE IF EXISTS hdpatbpsite;
|
|
80
|
+
*/
|
data/lib/renalware/version.rb
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../page_object"
|
|
4
|
+
|
|
5
|
+
module Pages
|
|
6
|
+
module Clinical
|
|
7
|
+
class ProfilePage < Pages::PageObject
|
|
8
|
+
pattr_initialize :patient
|
|
9
|
+
|
|
10
|
+
def edit
|
|
11
|
+
visit patient_clinical_profile_path(patient)
|
|
12
|
+
within ".page-actions" do
|
|
13
|
+
click_on "Edit"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def save
|
|
18
|
+
within ".form-actions" do
|
|
19
|
+
find('input[name="commit"]').click
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def named_consultant=(user)
|
|
24
|
+
select user.to_s, from: "Named consultant"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: renalware-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.123
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Airslie
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-11-
|
|
11
|
+
date: 2019-11-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: actionview-component
|
|
@@ -1697,6 +1697,7 @@ files:
|
|
|
1697
1697
|
- app/models/renalware/pathology/observation_descriptions_by_code_query.rb
|
|
1698
1698
|
- app/models/renalware/pathology/observation_digest.rb
|
|
1699
1699
|
- app/models/renalware/pathology/observation_for_patient_observation_description_query.rb
|
|
1700
|
+
- app/models/renalware/pathology/observation_for_patient_observation_description_using_set_query.rb
|
|
1700
1701
|
- app/models/renalware/pathology/observation_for_patient_request_description_query.rb
|
|
1701
1702
|
- app/models/renalware/pathology/observation_request.rb
|
|
1702
1703
|
- app/models/renalware/pathology/observation_requests_attributes_builder.rb
|
|
@@ -1749,7 +1750,7 @@ files:
|
|
|
1749
1750
|
- app/models/renalware/pathology/requests/requests_factory.rb
|
|
1750
1751
|
- app/models/renalware/pathology/requests/sample_type.rb
|
|
1751
1752
|
- app/models/renalware/pathology/results.rb
|
|
1752
|
-
- app/models/renalware/pathology/view_observation_results.rb
|
|
1753
|
+
- app/models/renalware/pathology/view_observation_results.rb.dead
|
|
1753
1754
|
- app/models/renalware/patient.rb
|
|
1754
1755
|
- app/models/renalware/patients.rb
|
|
1755
1756
|
- app/models/renalware/patients/abridgement.rb
|
|
@@ -3691,6 +3692,10 @@ files:
|
|
|
3691
3692
|
- db/migrate/20191012121433_add_consultant_to_users.rb
|
|
3692
3693
|
- db/migrate/20191018143635_create_hd_diary_matrix_view.rb
|
|
3693
3694
|
- db/migrate/20191018144917_create_fn_to_archive_master_slots.rb
|
|
3695
|
+
- db/migrate/20191026120029_add_deleted_at_to_hd_sessions.rb
|
|
3696
|
+
- db/migrate/20191029095202_add_deleted_at_to_problem_notes.rb
|
|
3697
|
+
- db/migrate/20191105095304_update_views_to_exclude_deleted_sessions.rb
|
|
3698
|
+
- db/migrate/20191108105923_add_named_consultant_to_patients.rb
|
|
3694
3699
|
- db/seeds.rb
|
|
3695
3700
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.csv
|
|
3696
3701
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.rb
|
|
@@ -3808,6 +3813,7 @@ files:
|
|
|
3808
3813
|
- db/views/reporting_daily_pathology_v03.sql
|
|
3809
3814
|
- db/views/reporting_daily_ukrdc_v01.sql
|
|
3810
3815
|
- db/views/reporting_hd_blood_pressures_audit_v01.sql
|
|
3816
|
+
- db/views/reporting_hd_blood_pressures_audit_v02.sql
|
|
3811
3817
|
- db/views/reporting_hd_overall_audit_v01.sql
|
|
3812
3818
|
- db/views/reporting_hd_overall_audit_v02.sql
|
|
3813
3819
|
- db/views/reporting_hd_overall_audit_v04.sql
|
|
@@ -4049,6 +4055,7 @@ files:
|
|
|
4049
4055
|
- spec/support/matchers/have_pdf_page_text.rb
|
|
4050
4056
|
- spec/support/matchers/validate_timeliness_of.rb
|
|
4051
4057
|
- spec/support/pages/admissions/consults_page.rb
|
|
4058
|
+
- spec/support/pages/clinical/profile_page.rb
|
|
4052
4059
|
- spec/support/pages/letters/form.rb
|
|
4053
4060
|
- spec/support/pages/letters/patient_letters.rb
|
|
4054
4061
|
- spec/support/pages/medications/prescription_fom.rb
|