renalware-core 2.0.108 → 2.0.109
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/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
|