renalware-core 2.0.121 → 2.0.123
Sign up to get free protection for your applications and to get access to all the features.
- 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
|