renalware-core 2.0.108 → 2.0.109
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/renalware/admissions/consults_controller.rb +1 -1
- data/app/controllers/renalware/clinics/appointments_controller.rb +1 -1
- data/app/controllers/renalware/letters/formatted_letters_controller.rb +5 -1
- data/app/jobs/renalware/letters/save_rtf_letter_to_file_job.rb +29 -0
- data/app/models/renalware/admissions/consult.rb +12 -0
- data/app/models/renalware/admissions/consult_query.rb +2 -2
- data/app/models/renalware/hd/profiles_in_date_range_query.rb +21 -16
- data/app/models/renalware/letters/rtf_renderer.rb +12 -19
- data/app/models/renalware/low_clearance/mdm_patients_query.rb +3 -3
- data/app/models/renalware/medications/medication_route.rb +3 -1
- data/app/models/renalware/pathology/requests/sample_type.rb +18 -0
- data/app/models/renalware/ukrdc/treatment_timeline/hd/generator.rb +23 -9
- data/app/values/renalware/address.rb +4 -3
- data/app/views/renalware/admissions/consults/_form.html.slim +4 -0
- data/app/views/renalware/admissions/consults/_table.html.slim +12 -4
- data/app/views/renalware/api/ukrdc/patients/treatments/_generic.xml.builder +5 -0
- data/app/views/renalware/clinics/appointments/index.html.slim +18 -6
- data/app/views/renalware/clinics/appointments/new.html.slim +2 -0
- data/app/views/renalware/medications/prescriptions/_patient_details.html.slim +10 -4
- data/app/views/renalware/pathology/patient_rules/_form.html.slim +3 -1
- data/db/migrate/20190915071451_add_unique_index_to_medication_routes.rb +8 -0
- data/db/migrate/20190915083424_create_pathology_request_sample_types.rb +11 -0
- data/db/migrate/20190916160231_add_hd_type_to_ukrdc_treatments.rb +7 -0
- data/db/migrate/20190917124204_add_priority_to_admission_consults.rb +8 -0
- data/db/views/hd_profile_for_modalities_v01.sql +1 -1
- data/lib/renalware/version.rb +1 -1
- data/spec/factories/medications/medication_route.rb +7 -4
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c997818b4731d4dacc650d1ee21da4bc8d0731612f4b6afb6992375ad8ab5ebe
|
4
|
+
data.tar.gz: ca7fb8bb184625a629f68e685a8af2ed8a931e597496d3ad4f47f4cd7dd20f83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f78547330d9e31903a14a2c794f782589ce3624888912a84bc3204d8e939091e503b29def2e06c7d835db8c70d9cb840986480ae77fbbd57bdf8d6bc7837ff2
|
7
|
+
data.tar.gz: 341dd6ad0f4f7c298de70c14b47cae472524fcd502d084c89c24a9020cdc37dde51970b517cd20eb7d2e3c31e4ec77bd31b59c354b72b88e376dd6e50c5884f7
|
@@ -100,7 +100,7 @@ module Renalware
|
|
100
100
|
.permit(
|
101
101
|
:consult_site_id, :hospital_ward_id, :patient_id, :q, :other_site_or_ward,
|
102
102
|
:decided_on, :transferred_on, :started_on, :ended_on, :decided_on,
|
103
|
-
:aki_risk, :transfer_priority, :seen_by_id, :consult_type,
|
103
|
+
:aki_risk, :transfer_priority, :priority, :seen_by_id, :consult_type,
|
104
104
|
:requires_aki_nurse, :description, :contact_number, :rrt
|
105
105
|
)
|
106
106
|
end
|
@@ -47,7 +47,11 @@ module Renalware
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def render_rtf(letter)
|
50
|
-
RTFRenderer.new(letter
|
50
|
+
renderer = RTFRenderer.new(letter)
|
51
|
+
send_data renderer.render,
|
52
|
+
type: "text/richtext",
|
53
|
+
filename: renderer.filename,
|
54
|
+
disposition: disposition
|
51
55
|
end
|
52
56
|
|
53
57
|
def disposition
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/letters"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
module Renalware
|
7
|
+
module Letters
|
8
|
+
# Used for example in a host app like renalware-blt to generate an RTF letter for saving to
|
9
|
+
# the electronic public register, aka EPR/CRS.
|
10
|
+
class SaveRtfLetterToFileJob < ApplicationJob
|
11
|
+
queue_as :rtf_generation
|
12
|
+
queue_with_priority 1
|
13
|
+
|
14
|
+
def perform(letter:, file_path:)
|
15
|
+
file_path = Pathname(file_path)
|
16
|
+
create_folder_if_not_exists(file_path)
|
17
|
+
File.open(file_path, "wb") { |file| file << rtf_data_for(letter) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def rtf_data_for(letter)
|
21
|
+
RTFRenderer.new(LetterPresenterFactory.new(letter)).render
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_folder_if_not_exists(path)
|
25
|
+
FileUtils.mkdir_p(path.dirname)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -8,12 +8,20 @@ module Renalware
|
|
8
8
|
include Accountable
|
9
9
|
extend Enumerize
|
10
10
|
include PatientsRansackHelper
|
11
|
+
PRIORITY_VALUES = (1..20).freeze
|
11
12
|
validates :patient_id, presence: true
|
12
13
|
validates :started_on, presence: true
|
13
14
|
validates :description, presence: true
|
14
15
|
# Currently #consult_type is a string and we are not sure what should be in there
|
15
16
|
# Migrated consults may not have a type so only enforce it creation of new ones.
|
16
17
|
validates :consult_type, presence: true, on: :create
|
18
|
+
validates :priority,
|
19
|
+
numericality: {
|
20
|
+
only_integer: true,
|
21
|
+
less_than_or_equal_to: PRIORITY_VALUES.last,
|
22
|
+
allow_blank: true
|
23
|
+
}
|
24
|
+
|
17
25
|
validates :other_site_or_ward, presence: {
|
18
26
|
if: ->(consult) { consult.consult_site_id.blank? && consult.hospital_ward_id.blank? }
|
19
27
|
}
|
@@ -27,6 +35,10 @@ module Renalware
|
|
27
35
|
enumerize :aki_risk, in: %i(yes no unknown)
|
28
36
|
|
29
37
|
scope :active, -> { where(ended_on: nil) }
|
38
|
+
|
39
|
+
ransacker :priority do
|
40
|
+
Arel.sql("coalesce(priority, -1)")
|
41
|
+
end
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
@@ -32,9 +32,9 @@ module Renalware
|
|
32
32
|
.eager_load(patient: [current_modality: :description])
|
33
33
|
.includes(
|
34
34
|
:consult_site,
|
35
|
-
:hospital_ward,
|
36
35
|
:created_by,
|
37
|
-
patient: { current_modality: :description }
|
36
|
+
patient: { current_modality: :description },
|
37
|
+
hospital_ward: :hospital_unit
|
38
38
|
)
|
39
39
|
.order(created_at: :desc)
|
40
40
|
.ransack(query)
|
@@ -7,25 +7,30 @@ module Renalware
|
|
7
7
|
class ProfilesInDateRangeQuery
|
8
8
|
pattr_initialize [:patient!, :from!, :to!]
|
9
9
|
|
10
|
+
# We are looking for HD Profiles within a certain period.
|
11
|
+
# Some HD profiles have no prescribed_on populated (and it is not always acurate - if the
|
12
|
+
# profile is edited and a copy made, they sometimes to do not change the prescribed_on date)
|
13
|
+
# so for the start date of the profile we always use created_at and ignore prescribed_on,
|
14
|
+
# even if it is present.
|
10
15
|
def call
|
11
|
-
|
12
|
-
|
13
|
-
.order(created_at: :asc, deactivated_at: :desc)
|
14
|
-
|
15
|
-
scope
|
16
|
-
.where(conditions.merge(deactivated_at: from..to))
|
17
|
-
.or(
|
18
|
-
scope.where(conditions.merge(deactivated_at: nil))
|
19
|
-
)
|
20
|
-
end
|
16
|
+
# p " from #{from}"
|
17
|
+
# p " to #{to}"
|
21
18
|
|
22
|
-
|
19
|
+
# If to is nil it is because modality we are targetting is a current one.
|
20
|
+
# We need a date for the from..to range to work so use a far future one.
|
21
|
+
@to ||= Date.parse("3000-01-01")
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
# Be sure not to reselect profiles we have already used in a previous treatment otherwise
|
24
|
+
# we will have duplicate Treatments with odd state/end date ordering
|
25
|
+
used_profiles_ids = UKRDC::Treatment
|
26
|
+
.where(patient: patient)
|
27
|
+
.where("hd_profile_id is not null")
|
28
|
+
.pluck(:hd_profile_id)
|
29
|
+
HD::Profile
|
30
|
+
.with_deactivated
|
31
|
+
.order(created_at: :asc, deactivated_at: :desc)
|
32
|
+
.where(patient_id: patient.id, created_at: from..to)
|
33
|
+
.where.not(id: used_profiles_ids)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
@@ -1,29 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_dependency "renalware/letters"
|
4
|
+
require "attr_extras"
|
4
5
|
|
5
6
|
module Renalware
|
6
7
|
module Letters
|
8
|
+
# Use pandoc to convert the html letter to RTF
|
7
9
|
class RTFRenderer
|
8
|
-
|
10
|
+
pattr_initialize :letter
|
9
11
|
REGEX_TO_STRIP_IMAGES = %r{(?m)<img\s*.*?"\s*\/>}.freeze
|
10
12
|
|
11
|
-
def initialize(letter, controller)
|
12
|
-
@letter = letter
|
13
|
-
@controller = controller
|
14
|
-
end
|
15
|
-
|
16
13
|
def render
|
17
14
|
using_temp_html_file do |temp_file|
|
18
|
-
|
19
|
-
type: "text/richtext",
|
20
|
-
filename: filename
|
15
|
+
rtf_content_converted_from(temp_file)
|
21
16
|
end
|
22
17
|
end
|
23
18
|
|
24
|
-
|
19
|
+
def filename
|
20
|
+
"#{letter.pdf_filename}.rtf"
|
21
|
+
end
|
25
22
|
|
26
|
-
|
23
|
+
def disposition
|
24
|
+
"attachment; filename=\"#{filename}\""
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
27
28
|
|
28
29
|
def using_temp_html_file
|
29
30
|
temp_html_file = Tempfile.new("html_to_be_converted_to_rtf")
|
@@ -35,14 +36,6 @@ module Renalware
|
|
35
36
|
temp_html_file.unlink # allows garbage collection and temp file removal
|
36
37
|
end
|
37
38
|
|
38
|
-
def filename
|
39
|
-
"#{letter.pdf_filename}.rtf"
|
40
|
-
end
|
41
|
-
|
42
|
-
def disposition
|
43
|
-
"attachment; filename=\"#{filename}\""
|
44
|
-
end
|
45
|
-
|
46
39
|
def rtf_content_converted_from(html_temp_file)
|
47
40
|
rtf_template = File.join(Engine.root, "lib", "pandoc", "templates", "default.rtf")
|
48
41
|
options = { template: rtf_template }
|
@@ -57,15 +57,15 @@ module Renalware
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def urea
|
60
|
-
where("
|
60
|
+
where("convert_to_float(values->'URE'->>'result') >= 30.0")
|
61
61
|
end
|
62
62
|
|
63
63
|
def hgb_low
|
64
|
-
where("
|
64
|
+
where("convert_to_float(values->'HGB'->>'result') < 100.0")
|
65
65
|
end
|
66
66
|
|
67
67
|
def hgb_high
|
68
|
-
where("
|
68
|
+
where("convert_to_float(values->'HGB'->>'result') > 130.0")
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -19,9 +19,11 @@ module Renalware
|
|
19
19
|
through: :prescriptions,
|
20
20
|
source: :treatable,
|
21
21
|
source_type: "PeritonitisEpisode"
|
22
|
+
validates :code, presence: true
|
23
|
+
validates :name, presence: true
|
22
24
|
|
23
25
|
def other?
|
24
|
-
code
|
26
|
+
code.casecmp("other").zero?
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/pathology/requests"
|
4
|
+
|
5
|
+
module Renalware
|
6
|
+
module Pathology
|
7
|
+
module Requests
|
8
|
+
# This is a sample lookup table of sample type values to use in a dropdown
|
9
|
+
# when creating a new new rule.
|
10
|
+
class SampleType < ApplicationRecord
|
11
|
+
validates :name, presence: true
|
12
|
+
validates :code, presence: true
|
13
|
+
|
14
|
+
scope :ordered, -> { order(code: :asc) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require_dependency "renalware/ukrdc"
|
4
4
|
require "attr_extras"
|
5
5
|
|
6
|
+
# rubocop:disable Lint/UnneededCopDisableDirective, Rails/Output
|
7
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
6
8
|
module Renalware
|
7
9
|
module UKRDC
|
8
10
|
module TreatmentTimeline
|
@@ -14,6 +16,11 @@ module Renalware
|
|
14
16
|
# a treatment for each significant change in the HD::Profile during the period of the
|
15
17
|
# modality (ie until it ends).
|
16
18
|
#
|
19
|
+
# Note that the first HD Profile associated with any HD Modality is determined in the SQL
|
20
|
+
# view hd_profile_for_modalities. Test with
|
21
|
+
# select * from hd_profile_for_modalities;
|
22
|
+
# It looks ahead to find the very first HD profile.
|
23
|
+
#
|
17
24
|
class Generator
|
18
25
|
pattr_initialize :modality
|
19
26
|
delegate :patient, to: :modality
|
@@ -33,7 +40,6 @@ module Renalware
|
|
33
40
|
)
|
34
41
|
end
|
35
42
|
|
36
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
37
43
|
def create_treatment(profile, start_date, end_date)
|
38
44
|
treatments << Treatment.create!(
|
39
45
|
patient: patient,
|
@@ -44,17 +50,18 @@ module Renalware
|
|
44
50
|
hospital_unit: profile&.hospital_unit,
|
45
51
|
ended_on: end_date,
|
46
52
|
modality_code: ukrdc_modality_code_from_profile(profile),
|
47
|
-
hd_profile: profile
|
53
|
+
hd_profile: profile,
|
54
|
+
hd_type: profile&.document&.dialysis&.hd_type
|
48
55
|
)
|
49
56
|
|
50
57
|
# Update the end date on the previous treatment - ie the one we just added is
|
51
58
|
# taking over as the currently active treatment
|
52
|
-
|
59
|
+
if treatments.length > 1
|
53
60
|
previous_treatment = treatments[treatments.length - 2]
|
61
|
+
# p "updating end date from #{previous_treatment.ended_on} to #{start_date}"
|
54
62
|
previous_treatment.update!(ended_on: start_date)
|
55
63
|
end
|
56
64
|
end
|
57
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
58
65
|
|
59
66
|
# Find the modality that was active on the day of the modality change
|
60
67
|
# The profile might have been added up to say 14 days later however so if there is none
|
@@ -86,10 +93,9 @@ module Renalware
|
|
86
93
|
# and that becomes the 'last_profile' here
|
87
94
|
def create_treatments_within_modality
|
88
95
|
last_profile = hd_profile_at_start_of_modality
|
89
|
-
|
90
96
|
hd_profiles.each do |profile_|
|
91
97
|
profile = HD::ProfileDecorator.new(profile_, last_profile: last_profile)
|
92
|
-
create_treatment_from(profile) if last_profile.nil? || profile.changed?
|
98
|
+
create_treatment_from(profile) # if last_profile.nil? || profile.changed?
|
93
99
|
last_profile = profile
|
94
100
|
end
|
95
101
|
end
|
@@ -100,12 +106,18 @@ module Renalware
|
|
100
106
|
from: modality.started_on,
|
101
107
|
to: modality.ended_on
|
102
108
|
).call
|
103
|
-
|
109
|
+
|
110
|
+
# p profiles.to_sql
|
111
|
+
|
112
|
+
profiles -= Array(hd_profile_at_start_of_modality)
|
113
|
+
# p "found #{profiles.size} profiles #{profiles.map(&:id)} between "\
|
114
|
+
# "#{modality.started_on} and #{modality.ended_on}"
|
115
|
+
profiles
|
104
116
|
end
|
105
117
|
|
106
118
|
def create_treatment_from(profile)
|
107
|
-
start_date = profile.
|
108
|
-
end_date = profile.
|
119
|
+
start_date = profile.created_at.presence || modality.started_on
|
120
|
+
end_date = profile.deactivated_at.presence || modality.ended_on
|
109
121
|
|
110
122
|
create_treatment(profile, start_date, end_date)
|
111
123
|
end
|
@@ -126,3 +138,5 @@ module Renalware
|
|
126
138
|
end
|
127
139
|
end
|
128
140
|
end
|
141
|
+
# rubocop:enable Lint/UnneededCopDisableDirective, Rails/Output
|
142
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
@@ -35,9 +35,10 @@ module Renalware
|
|
35
35
|
self
|
36
36
|
end
|
37
37
|
|
38
|
-
def to_s
|
39
|
-
[name, organisation_name, street_1, street_2, street_3, town, county
|
40
|
-
|
38
|
+
def to_s(format = nil)
|
39
|
+
parts = [name, organisation_name, street_1, street_2, street_3, town, county]
|
40
|
+
parts += [postcode, country] unless format == :without_postcode
|
41
|
+
parts.reject(&:blank?).join(", ")
|
41
42
|
end
|
42
43
|
|
43
44
|
def street
|
@@ -32,6 +32,10 @@
|
|
32
32
|
= f.input :consult_type, wrapper: :horizontal_medium
|
33
33
|
= f.input :decided_on, as: :date_picker, wrapper: :horizontal_datepicker
|
34
34
|
= f.input :transfer_priority, include_blank: false, wrapper: :horizontal_small
|
35
|
+
= f.input :priority,
|
36
|
+
include_blank: true,
|
37
|
+
collection: Renalware::Admissions::Consult::PRIORITY_VALUES,
|
38
|
+
wrapper: :horizontal_tiny
|
35
39
|
= f.input :transferred_on, as: :date_picker, wrapper: :horizontal_datepicker
|
36
40
|
= f.association :seen_by,
|
37
41
|
as: :user_picker,
|
@@ -20,6 +20,16 @@
|
|
20
20
|
- else
|
21
21
|
| Ward
|
22
22
|
th.col-width-tiny RRT
|
23
|
+
th.col-width-small.nowrap
|
24
|
+
- if allow_sorting
|
25
|
+
= sort_link(query, :transfer_priority, "Transfer Priority")
|
26
|
+
- else
|
27
|
+
| Transfer Priority
|
28
|
+
th.col-width-tiny
|
29
|
+
- if allow_sorting
|
30
|
+
= sort_link(query, :priority, "Priority")
|
31
|
+
- else
|
32
|
+
| Priority
|
23
33
|
th.col-width-date.noprint
|
24
34
|
- if allow_sorting
|
25
35
|
= sort_link(query, :started_on, "Started")
|
@@ -44,8 +54,6 @@
|
|
44
54
|
= sort_link(query, :patient_born_on, "DOB")
|
45
55
|
- else
|
46
56
|
| DOB
|
47
|
-
- unless compact
|
48
|
-
th.col-width-tiny.show-for-large-up Age
|
49
57
|
th.col-width-tiny.noprint
|
50
58
|
- if allow_sorting
|
51
59
|
= sort_link(query, :aki_risk, "AKI Risk")
|
@@ -93,6 +101,8 @@
|
|
93
101
|
td= consult.patient_hospital_identifiers&.to_s_multiline
|
94
102
|
td= consult.hospital_ward
|
95
103
|
td= yes_no(consult.rrt?)
|
104
|
+
td.nowrap= consult.transfer_priority&.text
|
105
|
+
td= consult.priority
|
96
106
|
td.noprint= l(consult.started_on)
|
97
107
|
td.noprint= l(consult.ended_on)
|
98
108
|
- unless compact
|
@@ -101,8 +111,6 @@
|
|
101
111
|
td.show-for-large-up= consult.patient_sex
|
102
112
|
- unless compact
|
103
113
|
td.show-for-large-up= l(consult.patient.born_on)
|
104
|
-
- unless compact
|
105
|
-
td.show-for-large-up= consult.patient_age
|
106
114
|
td.noprint= consult.aki_risk&.text
|
107
115
|
/td.show-for-xlarge-up.consult-author.col-width-medium-with-ellipsis(title=consult.created_by)= consult.created_by
|
108
116
|
/td.col-width-medium-with-ellipsis(title=consult.description)= consult.description
|
@@ -8,6 +8,11 @@ xml.Treatment do
|
|
8
8
|
xml.FromTime treatment.started_on&.iso8601
|
9
9
|
xml.ToTime(treatment.ended_on&.iso8601) if treatment.ended_on.present?
|
10
10
|
|
11
|
+
xml.HealthCareFacility do
|
12
|
+
xml.CodingStandard "ODS"
|
13
|
+
xml.Code Renalware.config.ukrdc_site_code
|
14
|
+
end
|
15
|
+
|
11
16
|
xml.AdmitReason do
|
12
17
|
xml.CodingStandard "CF_RR7_TREATMENT"
|
13
18
|
xml.Code treatment.modality_code.txt_code
|
@@ -38,7 +38,7 @@
|
|
38
38
|
br
|
39
39
|
|
|
40
40
|
= link_to "(Uncheck all)", "#", id: "uncheck_all_appointments_link"
|
41
|
-
th.col-width-medium
|
41
|
+
th.col-width-medium-ish
|
42
42
|
th.col-width-date
|
43
43
|
= sort_link([:renalware, query], :starts_at, "Date", default_order: :asc)
|
44
44
|
th.col-width-time
|
@@ -54,24 +54,27 @@
|
|
54
54
|
default_order: :asc)
|
55
55
|
th= sort_link([:renalware, query], :clinic_name, "Clinic", default_order: :asc)
|
56
56
|
th= sort_link([:renalware, query], :user_family_name, "Consultant", default_order: :asc)
|
57
|
+
th.show-for-large-up Outcome notes
|
58
|
+
th.show-for-large-up DNA notes
|
57
59
|
|
58
60
|
tbody
|
59
61
|
- appointments.each do |appointment|
|
60
62
|
tr
|
61
63
|
td= check_box_tag nil, appointment.patient.id, true, class: "patient_checkbox"
|
62
|
-
td
|
64
|
+
td.nowrap
|
65
|
+
= link_to("Toggle",
|
66
|
+
"#appointment-quick-preview-#{appointment.id}",
|
67
|
+
data: { behaviour: "toggler" })
|
68
|
+
= " | "
|
63
69
|
- if appointment.becomes_visit_id.present?
|
64
70
|
= link_to edit_patient_clinic_visit_path(appointment.patient,
|
65
71
|
id: appointment.becomes_visit_id) do
|
66
|
-
i.fas.fa-file
|
67
|
-
|
|
68
72
|
| View Clinic Visit
|
69
73
|
- else
|
70
74
|
= link_to new_patient_clinic_visit_path(appointment.patient,
|
71
75
|
appointment_id: appointment.id) do
|
72
76
|
i.fas.fa-pencil-alt
|
73
|
-
|
74
|
-
| Create Clinic Visit
|
77
|
+
= " Create Clinic Visit"
|
75
78
|
|
76
79
|
td= I18n.l appointment.starts_on
|
77
80
|
td= appointment.start_time
|
@@ -81,5 +84,14 @@
|
|
81
84
|
td= appointment.patient.current_modality
|
82
85
|
td= appointment.clinic.name
|
83
86
|
td= appointment.user.full_name
|
87
|
+
td.show-for-large-up.col-width-medium-with-ellipsis= appointment.outcome_notes
|
88
|
+
td.show-for-large-up.col-width-medium-with-ellipsis= appointment.dna_notes
|
89
|
+
= content_tag(:tr, id: "appointment-quick-preview-#{appointment.id}", style: "display: none")
|
90
|
+
td
|
91
|
+
td(colspan=13)
|
92
|
+
.quick-preview
|
93
|
+
= definition_list_for(appointment, size: :large) do |list|
|
94
|
+
= list.definition(:outcome_notes){ |value| simple_format(value) }
|
95
|
+
= list.definition(:dna_notes){ |value| simple_format(value) }
|
84
96
|
|
85
97
|
= paginate appointments
|
@@ -27,4 +27,6 @@
|
|
27
27
|
collection: Renalware::Clinics::Clinic.all,
|
28
28
|
wrapper: :horizontal_medium
|
29
29
|
= f.input :starts_at, as: :datetime_picker, wrapper: :horizontal_datepicker
|
30
|
+
= f.input :outcome_notes, as: :text, wrapper: :horizontal_large
|
31
|
+
= f.input :dna_notes, as: :text, wrapper: :horizontal_large
|
30
32
|
= f.submit class: :button
|
@@ -1,10 +1,16 @@
|
|
1
1
|
section
|
2
2
|
dl
|
3
|
+
dt Hospital Numbers
|
4
|
+
dd= patient.hospital_identifiers
|
5
|
+
dt NHS Number
|
6
|
+
dd= formatted_nhs_number(patient)
|
3
7
|
dt Name
|
4
8
|
dd= patient.to_s
|
5
9
|
dt Date of Birth
|
6
10
|
dd= l(patient.born_on)
|
7
|
-
dt
|
8
|
-
dd= patient.
|
9
|
-
dt
|
10
|
-
dd= patient.
|
11
|
+
dt Address
|
12
|
+
dd= patient.current_address&.to_s(:without_postcode)
|
13
|
+
dt Postcode
|
14
|
+
dd= patient.current_address&.postcode
|
15
|
+
dt Telephone
|
16
|
+
dd= patient.telephone1.presence || patient.telephone2
|
@@ -1,7 +1,9 @@
|
|
1
1
|
= f.input :lab_id, collection: labs, input_html: { class: "small-input" }
|
2
2
|
= f.input :test_description, as: :text, input_html: { class: "small-input" }
|
3
3
|
= f.input :sample_number_bottles, collection: 0..10, input_html: { class: "small-input" }
|
4
|
-
= f.input :sample_type,
|
4
|
+
= f.input :sample_type,
|
5
|
+
collection: Renalware::Pathology::Requests::SampleType.ordered.pluck(:name, :code),
|
6
|
+
input_html: { class: "small-input" }
|
5
7
|
= f.input :frequency_type, collection: frequencies, input_html: { class: "small-input" }
|
6
8
|
= f.input :start_date, as: :date_picker, input_html: { class: "small-input" }
|
7
9
|
= f.input :end_date, as: :date_picker, input_html: { class: "small-input" }
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreatePathologyRequestSampleTypes < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
within_renalware_schema do
|
4
|
+
create_table :pathology_requests_sample_types do |t|
|
5
|
+
t.string :name, index: { unique: true }, null: false
|
6
|
+
t.string :code, index: { unique: true }, null: false
|
7
|
+
t.timestamps null: false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
-- This view is HD-specific, but really
|
1
|
+
-- This view is HD-specific, but really serves to make UKRDC export easier.
|
2
2
|
-- It attempts to solve the gnarly problem of finding the hd profile associated with the start
|
3
3
|
-- of an HD modality. For example if a patient goes on to HD, an HD modality row is created.
|
4
4
|
-- However it could be a couple of weeks before they have an HD profile setup. This view
|
data/lib/renalware/version.rb
CHANGED
@@ -2,12 +2,15 @@
|
|
2
2
|
|
3
3
|
FactoryBot.define do
|
4
4
|
factory :medication_route, class: "Renalware::Medications::MedicationRoute" do
|
5
|
+
initialize_with do
|
6
|
+
Renalware::Medications::MedicationRoute.find_or_create_by!(code: code, name: name)
|
7
|
+
end
|
5
8
|
code { "PO" }
|
6
9
|
name { "Per Oral" }
|
7
|
-
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
trait :other do
|
12
|
+
code { "Other" }
|
13
|
+
name { "Other" }
|
14
|
+
end
|
12
15
|
end
|
13
16
|
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.109
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airslie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_type
|
@@ -1359,6 +1359,7 @@ files:
|
|
1359
1359
|
- app/jobs/renalware/hd/update_rolling_patient_statistics_job.rb
|
1360
1360
|
- app/jobs/renalware/letters/calculate_page_count_job.rb
|
1361
1361
|
- app/jobs/renalware/letters/save_pdf_letter_to_file_job.rb
|
1362
|
+
- app/jobs/renalware/letters/save_rtf_letter_to_file_job.rb
|
1362
1363
|
- app/jobs/renalware/reporting/refresh_audit_data_job.rb
|
1363
1364
|
- app/mailers/renalware/admin/user_mailer.rb
|
1364
1365
|
- app/mailers/renalware/letters/delivery/errors.rb
|
@@ -1698,6 +1699,7 @@ files:
|
|
1698
1699
|
- app/models/renalware/pathology/requests/request_params_factory.rb
|
1699
1700
|
- app/models/renalware/pathology/requests/request_query.rb
|
1700
1701
|
- app/models/renalware/pathology/requests/requests_factory.rb
|
1702
|
+
- app/models/renalware/pathology/requests/sample_type.rb
|
1701
1703
|
- app/models/renalware/pathology/results.rb
|
1702
1704
|
- app/models/renalware/pathology/view_observation_results.rb
|
1703
1705
|
- app/models/renalware/patient.rb
|
@@ -3555,6 +3557,10 @@ files:
|
|
3555
3557
|
- db/migrate/20190823105642_add_asked_for_write_access_to_users.rb
|
3556
3558
|
- db/migrate/20190830082736_add_pd_regime_columns_for_blt.rb
|
3557
3559
|
- db/migrate/20190909084425_add_columns_to_support_data_migration.rb
|
3560
|
+
- db/migrate/20190915071451_add_unique_index_to_medication_routes.rb
|
3561
|
+
- db/migrate/20190915083424_create_pathology_request_sample_types.rb
|
3562
|
+
- db/migrate/20190916160231_add_hd_type_to_ukrdc_treatments.rb
|
3563
|
+
- db/migrate/20190917124204_add_priority_to_admission_consults.rb
|
3558
3564
|
- db/seeds.rb
|
3559
3565
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.csv
|
3560
3566
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.rb
|