renalware-core 2.0.0.pre.rc6 → 2.0.0.pre.rc7
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/README.md +0 -1
- data/app/controllers/renalware/events/investigations_controller.rb +10 -0
- data/app/controllers/renalware/transplants/donor_dashboards_controller.rb +1 -7
- data/app/controllers/renalware/transplants/recipient_dashboards_controller.rb +1 -21
- data/app/models/renalware/events/investigation.rb +31 -0
- data/app/models/renalware/feeds/hl7_message.rb +29 -34
- data/app/models/renalware/feeds/message_parser.rb +2 -1
- data/app/models/renalware/pathology/create_observation_requests.rb +25 -0
- data/app/models/renalware/pathology/message_listener.rb +7 -5
- data/app/models/renalware/pathology/{message_param_parser.rb → observation_requests_attributes_builder.rb} +31 -27
- data/app/models/renalware/patients/practice_search_query.rb +1 -1
- data/app/policies/renalware/events/investigation_policy.rb +8 -0
- data/app/presenters/renalware/pathology/observation_presenter.rb +1 -1
- data/app/presenters/renalware/transplants/consent_presenter.rb +1 -1
- data/app/presenters/renalware/transplants/donor_dashboard_presenter.rb +35 -0
- data/app/presenters/renalware/transplants/mdm_presenter.rb +2 -0
- data/app/presenters/renalware/transplants/patient_presenter.rb +2 -0
- data/app/presenters/renalware/transplants/recipient_dashboard_presenter.rb +39 -0
- data/app/presenters/renalware/transplants/wait_list_registration_presenter.rb +2 -0
- data/app/views/renalware/api/ukrdc/patients/_documents.xml.builder +12 -9
- data/app/views/renalware/api/ukrdc/patients/_sending_facility.xml.builder +4 -4
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_result_item.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/show.xml.builder +1 -5
- data/app/views/renalware/events/events/_event.html.slim +7 -1
- data/app/views/renalware/events/events/_table.html.slim +2 -1
- data/app/views/renalware/events/events/cell/_investigation.html.slim +9 -0
- data/app/views/renalware/events/events/inputs/_investigation.html.slim +4 -0
- data/app/views/renalware/events/events/toggled_cell/_investigation.html.slim +11 -0
- data/app/views/renalware/events/investigations/_list.html.slim +12 -0
- data/app/views/renalware/events/investigations/edit.html.slim +13 -0
- data/app/views/renalware/transplants/donor_dashboards/show.html.slim +27 -20
- data/app/views/renalware/transplants/recipient_dashboards/_page_actions.html.slim +4 -0
- data/app/views/renalware/transplants/recipient_dashboards/show.html.slim +22 -17
- data/config/locales/renalware/events/investigation.en.yml +58 -0
- data/config/locales/renalware/transplants/donor_dashboard.en.yml +1 -0
- data/config/locales/renalware/transplants/recipient_dashboards.en.yml +1 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20180119121243_create_trigger_to_preprocess_hl7_msg.rb +5 -3
- data/db/migrate/20180125201356_make_obs_set_trigger_change_updated_at.rb +191 -0
- data/db/migrate/20180126142314_add_uuid_to_letters.rb +6 -0
- data/db/seeds/default/events/event_types.csv +1 -0
- data/lib/renalware/configuration.rb +1 -0
- data/lib/renalware/version.rb +1 -1
- data/lib/test_support/text_editor_helpers.rb +6 -0
- data/spec/factories/events/events.rb +24 -1
- data/spec/factories/events/events_types.rb +17 -2
- data/spec/support/database_functions_spec_helper.rb +6 -0
- metadata +18 -4
- data/app/models/renalware/pathology/create_observations.rb +0 -22
@@ -0,0 +1,39 @@
|
|
1
|
+
require_dependency "renalware/transplants"
|
2
|
+
require "attr_extras"
|
3
|
+
|
4
|
+
module Renalware
|
5
|
+
module Transplants
|
6
|
+
class RecipientDashboardPresenter
|
7
|
+
attr_reader_initialize :patient
|
8
|
+
|
9
|
+
def recipient_workup
|
10
|
+
@recipient_workup ||= RecipientWorkup.for_patient(patient).first_or_initialize
|
11
|
+
end
|
12
|
+
|
13
|
+
def registration
|
14
|
+
@registration ||= begin
|
15
|
+
WaitListRegistrationPresenter.new(
|
16
|
+
Registration.for_patient(patient).first_or_initialize
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def recipient_operations
|
22
|
+
@recipient_operations ||= RecipientOperation.for_patient(patient).reversed
|
23
|
+
end
|
24
|
+
|
25
|
+
def donations
|
26
|
+
@donations ||= Donation.for_recipient(patient).reversed
|
27
|
+
end
|
28
|
+
|
29
|
+
def investigations
|
30
|
+
@investigations ||= begin
|
31
|
+
Events::Investigation
|
32
|
+
.for_patient(patient)
|
33
|
+
.transplant_recipients
|
34
|
+
.ordered
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -3,27 +3,30 @@ xml = builder
|
|
3
3
|
xml.Documents do
|
4
4
|
patient.letters.each do |letter|
|
5
5
|
xml.Document do
|
6
|
-
xml.DocumentTime letter.
|
7
|
-
xml.DocumentName letter.title
|
6
|
+
xml.DocumentTime letter.issued_on.to_time.iso8601
|
8
7
|
xml.Clinician do
|
9
|
-
xml.
|
10
|
-
|
11
|
-
|
12
|
-
xml.Code letter.hospital_unit_code
|
8
|
+
xml.CodingStandard "LOCAL"
|
9
|
+
xml.Code letter.author.username
|
10
|
+
xml.Description letter.author.to_s
|
13
11
|
end
|
12
|
+
xml.DocumentName letter.title
|
14
13
|
xml.Status do
|
15
14
|
xml.Code "ACTIVE"
|
16
15
|
end
|
17
16
|
xml.EnteredBy do
|
17
|
+
xml.CodingStandard "LOCAL"
|
18
|
+
xml.Code letter.updated_by&.username
|
18
19
|
xml.Description letter.updated_by
|
19
20
|
end
|
20
21
|
xml.EnteredAt do
|
22
|
+
xml.CodingStandard "ODS"
|
21
23
|
xml.Code letter.hospital_unit_code
|
24
|
+
xml.Description ""
|
22
25
|
end
|
23
|
-
xml.FileType
|
24
|
-
|
25
|
-
end
|
26
|
+
xml.FileType "application/pdf"
|
27
|
+
xml.FileName "tbc"
|
26
28
|
xml.Stream Base64.encode64(Renalware::Letters::PdfRenderer.call(letter))
|
29
|
+
xml.DocumentURL
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
xml = builder
|
2
2
|
|
3
|
-
xml.SendingFacility
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
xml.SendingFacility Renalware.config.ukrdc_sending_facility_name,
|
4
|
+
channelName: "Renalware",
|
5
|
+
time: Time.zone.now.to_datetime
|
6
|
+
|
7
7
|
xml.SendingExtract "UKRDC"
|
@@ -20,7 +20,7 @@ xml.LabOrder do
|
|
20
20
|
xml.OrderCategory do
|
21
21
|
xml.Code request.description.code
|
22
22
|
end
|
23
|
-
|
23
|
+
xml.SpecimenCollectedTime request.requested_at.iso8601
|
24
24
|
# xml.SpecimenReceivedTime "TODO"
|
25
25
|
# xml.Priority do
|
26
26
|
# xml.Code "TODO: Probably n/a"
|
@@ -8,7 +8,7 @@ xml.ResultItem do
|
|
8
8
|
xml.PrePost observation.pre_post(patient_is_on_hd: patient.current_modality_hd?)
|
9
9
|
xml.ServiceId do
|
10
10
|
xml.CodingStandard "LOCAL"
|
11
|
-
xml.Code observation.description_code
|
11
|
+
xml.Code(observation.description_loinc_code || observation.description_code)
|
12
12
|
xml.Description observation.description_name
|
13
13
|
end
|
14
14
|
# xml.SubId
|
@@ -5,11 +5,7 @@ xml.instruct! :xml, version: "1.0", encoding: "UTF-8"
|
|
5
5
|
|
6
6
|
namespace_and_schema = {
|
7
7
|
"xmlns:ukrdc" => "http://www.rixg.org.uk/",
|
8
|
-
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance"
|
9
|
-
"xsi:schemaLocation" => [
|
10
|
-
"http://www.rixg.org.uk/",
|
11
|
-
"https://github.com/renalreg/ukrdc/blob/master/Schema/UKRDC.xsd"
|
12
|
-
].join(" ")
|
8
|
+
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance"
|
13
9
|
}
|
14
10
|
|
15
11
|
# Start of <ukrdc:Patient>
|
@@ -1,7 +1,13 @@
|
|
1
1
|
tr
|
2
|
-
td
|
2
|
+
td
|
3
|
+
= link_to("Toggle",
|
3
4
|
"##{toggle_prefix}-quick-preview-#{event.id}",
|
4
5
|
data: { behaviour: "toggler" })
|
6
|
+
|
7
|
+
- if local_assigns[:edit_proc]
|
8
|
+
= pipe_separator
|
9
|
+
= link_to("Edit", edit_proc.call(event))
|
10
|
+
|
5
11
|
td.nowrap= l event.created_at.to_date
|
6
12
|
- unless local_assigns.fetch(:exclude_type_column, false)
|
7
13
|
td= event.event_type
|
@@ -1,6 +1,6 @@
|
|
1
1
|
- toggle_prefix ||= "event"
|
2
2
|
|
3
|
-
table.has-togglable-rows
|
3
|
+
table.has-togglable-rows.events-table
|
4
4
|
thead
|
5
5
|
tr
|
6
6
|
th.col-width-tiny
|
@@ -14,4 +14,5 @@ table.has-togglable-rows
|
|
14
14
|
= render partial: "renalware/events/events/event",
|
15
15
|
collection: events,
|
16
16
|
locals: { exclude_type_column: local_assigns[:exclude_type_column],
|
17
|
+
edit_proc: local_assigns[:edit_proc],
|
17
18
|
toggle_prefix: toggle_prefix }
|
@@ -0,0 +1,11 @@
|
|
1
|
+
- document = event.document
|
2
|
+
|
3
|
+
dl.dl-horizontal
|
4
|
+
dt= attr_name(document, :modality, suffix: ":")
|
5
|
+
dd= document.modality&.text || t("unspecified")
|
6
|
+
dt= attr_name(document, :type, suffix: ":")
|
7
|
+
dd= document.type&.text || t("unspecified")
|
8
|
+
dt= attr_name(document, :result, suffix: ":")
|
9
|
+
dd= document.result || t("unspecified")
|
10
|
+
dt= attr_name(event, :notes, suffix: ":")
|
11
|
+
dd= event.notes&.html_safe || t("unspecified")
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- toggle_prefix ||= "investigation"
|
2
|
+
|
3
|
+
article.investigations
|
4
|
+
header
|
5
|
+
h2= t(".title")
|
6
|
+
= link_to t(".add"),
|
7
|
+
new_patient_investigation_path(patient),
|
8
|
+
class: "button right"
|
9
|
+
= render "renalware/events/events/table",
|
10
|
+
events: investigations,
|
11
|
+
edit_proc: ->(investigation) { edit_patient_investigation_path(patient, investigation) },
|
12
|
+
exclude_type_column: true
|
@@ -0,0 +1,13 @@
|
|
1
|
+
= within_patient_layout(title: "Investigations / Edit") do
|
2
|
+
|
3
|
+
= simple_form_for event,
|
4
|
+
url: patient_investigation_path(patient, event),
|
5
|
+
as: :events_event,
|
6
|
+
html: { autocomplete: "off" },
|
7
|
+
wrapper: "horizontal_form" do |f|
|
8
|
+
|
9
|
+
= render "renalware/events/events/form",
|
10
|
+
event: event,
|
11
|
+
patient: patient,
|
12
|
+
event_types: event_types,
|
13
|
+
f: f
|
@@ -8,38 +8,45 @@
|
|
8
8
|
|
9
9
|
ul.f-dropdown#donor-options(data-dropdown-content aria-hidden="true")
|
10
10
|
li
|
11
|
-
- if donations.empty?
|
11
|
+
- if dashboard.donations.empty?
|
12
12
|
= link_to t(".add_donation"),
|
13
|
-
new_patient_transplants_donation_path(patient)
|
13
|
+
new_patient_transplants_donation_path(dashboard.patient)
|
14
14
|
- else
|
15
15
|
= link_to "Donor (identify a new recipient)",
|
16
|
-
new_patient_transplants_donation_path(patient)
|
16
|
+
new_patient_transplants_donation_path(dashboard.patient)
|
17
17
|
|
18
|
-
li(class="#{'disabled' unless donor_workup.new_record?}")
|
19
|
-
= link_to_if donor_workup.new_record?,
|
18
|
+
li(class="#{'disabled' unless dashboard.donor_workup.new_record?}")
|
19
|
+
= link_to_if dashboard.donor_workup.new_record?,
|
20
20
|
t(".add_workup"),
|
21
|
-
edit_patient_transplants_donor_workup_path(patient)
|
21
|
+
edit_patient_transplants_donor_workup_path(dashboard.patient)
|
22
22
|
|
23
23
|
li= link_to t(".add_status_update"),
|
24
|
-
new_patient_transplants_donor_stage_path(patient)
|
24
|
+
new_patient_transplants_donor_stage_path(dashboard.patient)
|
25
25
|
|
26
26
|
li= link_to t(".add_operation"),
|
27
|
-
new_patient_transplants_donor_operation_path(patient)
|
27
|
+
new_patient_transplants_donor_operation_path(dashboard.patient)
|
28
|
+
|
29
|
+
li= link_to t(".add_investigation"),
|
30
|
+
new_patient_investigation_path(dashboard.patient)
|
28
31
|
|
29
32
|
= within_patient_layout(title: "Transplant Donor Summary") do
|
30
|
-
- unless donations.empty?
|
33
|
+
- unless dashboard.donations.empty?
|
31
34
|
= render "renalware/transplants/donations/list",
|
32
|
-
donations: donations,
|
33
|
-
patient: patient
|
34
|
-
- unless donor_workup.new_record?
|
35
|
+
donations: dashboard.donations,
|
36
|
+
patient: dashboard.patient
|
37
|
+
- unless dashboard.donor_workup.new_record?
|
35
38
|
= render "renalware/transplants/donor_workups/summary",
|
36
|
-
donor_workup: donor_workup,
|
37
|
-
patient: patient
|
38
|
-
- unless donor_stages.empty?
|
39
|
+
donor_workup: dashboard.donor_workup,
|
40
|
+
patient: dashboard.patient
|
41
|
+
- unless dashboard.donor_stages.empty?
|
39
42
|
= render "renalware/transplants/donor_stages/list",
|
40
|
-
donor_stages: donor_stages,
|
41
|
-
patient: patient
|
42
|
-
- unless donor_operations.empty?
|
43
|
+
donor_stages: dashboard.donor_stages,
|
44
|
+
patient: dashboard.patient
|
45
|
+
- unless dashboard.donor_operations.empty?
|
43
46
|
= render "renalware/transplants/donor_operations/list",
|
44
|
-
donor_operations: donor_operations,
|
45
|
-
patient: patient
|
47
|
+
donor_operations: dashboard.donor_operations,
|
48
|
+
patient: dashboard.patient
|
49
|
+
- if dashboard.investigations.any?
|
50
|
+
= render "renalware/events/investigations/list",
|
51
|
+
patient: dashboard.patient,
|
52
|
+
investigations: dashboard.investigations
|
@@ -23,5 +23,9 @@ ul.f-dropdown#tx-recip-options(data-dropdown-content aria-hidden="true")
|
|
23
23
|
title: t(".add_recipient_operation"),
|
24
24
|
url: new_patient_transplants_recipient_operation_path(patient)
|
25
25
|
|
26
|
+
= dropdown_btn_item enabled: true,
|
27
|
+
title: t(".add_investigation"),
|
28
|
+
url: new_patient_investigation_path(patient)
|
29
|
+
|
26
30
|
- unless patient.has_ever_been_a_recipient?
|
27
31
|
= render "modality_missing_warning", message: t(".missing_modality_warning")
|
@@ -1,31 +1,36 @@
|
|
1
1
|
= content_for(:actions) do
|
2
2
|
= render "page_actions",
|
3
|
-
patient: patient,
|
4
|
-
recipient_workup: recipient_workup,
|
5
|
-
registration: registration
|
3
|
+
patient: dashboard.patient,
|
4
|
+
recipient_workup: dashboard.recipient_workup,
|
5
|
+
registration: dashboard.registration
|
6
6
|
|
7
7
|
= within_patient_layout(title: "Transplant Recipient Summary") do
|
8
8
|
|
9
|
-
- unless recipient_workup.new_record?
|
9
|
+
- unless dashboard.recipient_workup.new_record?
|
10
10
|
= render "renalware/transplants/recipient_workups/summary",
|
11
|
-
patient: patient,
|
12
|
-
recipient_workup: recipient_workup
|
11
|
+
patient: dashboard.patient,
|
12
|
+
recipient_workup: dashboard.recipient_workup
|
13
13
|
|
14
|
-
- unless registration.new_record?
|
14
|
+
- unless dashboard.registration.new_record?
|
15
15
|
= render "renalware/transplants/registrations/summary",
|
16
|
-
patient: patient,
|
17
|
-
registration: registration
|
16
|
+
patient: dashboard.patient,
|
17
|
+
registration: dashboard.registration
|
18
18
|
|
19
|
-
- unless registration.new_record?
|
19
|
+
- unless dashboard.registration.new_record?
|
20
20
|
= render "renalware/transplants/registration_statuses/list",
|
21
|
-
patient: patient,
|
22
|
-
registration: registration
|
21
|
+
patient: dashboard.patient,
|
22
|
+
registration: dashboard.registration
|
23
23
|
|
24
|
-
- if donations.any?
|
24
|
+
- if dashboard.donations.any?
|
25
25
|
= render "renalware/transplants/donations/recipient_list",
|
26
|
-
donations: donations
|
26
|
+
donations: dashboard.donations
|
27
27
|
|
28
|
-
- if recipient_operations.any?
|
28
|
+
- if dashboard.recipient_operations.any?
|
29
29
|
= render "renalware/transplants/recipient_operations/list",
|
30
|
-
patient: patient,
|
31
|
-
recipient_operations: recipient_operations
|
30
|
+
patient: dashboard.patient,
|
31
|
+
recipient_operations: dashboard.recipient_operations
|
32
|
+
|
33
|
+
- if dashboard.investigations.any?
|
34
|
+
= render "renalware/events/investigations/list",
|
35
|
+
patient: dashboard.patient,
|
36
|
+
investigations: dashboard.investigations
|
@@ -0,0 +1,58 @@
|
|
1
|
+
en:
|
2
|
+
renalware:
|
3
|
+
events:
|
4
|
+
investigations:
|
5
|
+
list:
|
6
|
+
title: Investigations
|
7
|
+
add: Add
|
8
|
+
date_time: Date taken
|
9
|
+
type: Type
|
10
|
+
result: Result
|
11
|
+
notes: Notes
|
12
|
+
activemodel:
|
13
|
+
attributes:
|
14
|
+
renalware/events/investigation/document:
|
15
|
+
result1: "Rejection"
|
16
|
+
result2: "IFTA"
|
17
|
+
enumerize:
|
18
|
+
renalware/events/investigation/document:
|
19
|
+
type:
|
20
|
+
blood_group: "Blood Group"
|
21
|
+
cardiac_24_hour_abpm: "Cardiac - 24 hour ABPM"
|
22
|
+
cardiac_24_hour_ecg: "Cardiac - 24 hr ECG"
|
23
|
+
cardiac_coronary_angio: "Cardiac - Coronary Angio"
|
24
|
+
cardiac_cpet: "Cardiac - CPET"
|
25
|
+
cardiac_ecg: "Cardiac - ECG"
|
26
|
+
cardiac_echo: "Cardiac - Echo"
|
27
|
+
cardiac_exercise_ecg: "Cardiac - Exercise ECG"
|
28
|
+
cardiac_myoview_scan: "Cardiac - Myoview Scan"
|
29
|
+
cardiac_stress_echo: "Cardiac - Stress Echo"
|
30
|
+
cervical_smear: "Cervical Smear"
|
31
|
+
colonoscopy: "Colonoscopy"
|
32
|
+
gastroscopy: "Gastroscopy"
|
33
|
+
bowel_screening: "Bowel Screening"
|
34
|
+
cystoscopy: "Cystoscopy"
|
35
|
+
urodynamics: "Urodynamics"
|
36
|
+
24_hr_urinary_stone_screen: "24 hr Urinary Stone Screen"
|
37
|
+
dental_check: "Dental Check"
|
38
|
+
psa: "PSA"
|
39
|
+
isotopic_gfr: "Isotopic GFR"
|
40
|
+
lung_function_tests: "Lung Function Tests"
|
41
|
+
imaging_bone Scan: "Imaging - Bone Scan"
|
42
|
+
imaging_ct_abdomen: "Imaging - CT Abdomen"
|
43
|
+
imaging_ct_chest: "Imaging - CT Chest"
|
44
|
+
imaging_ct_pulm_angio: "Imaging - CT Pulm Angio"
|
45
|
+
imaging_ct_renal_angio: "Imaging - CT Renal Angio"
|
46
|
+
imaging_cxr: "Imaging - CXR"
|
47
|
+
imaging_doppler_carotids: "Imaging - Doppler Carotids"
|
48
|
+
imaging_doppler_legs: "Imaging - Doppler Legs"
|
49
|
+
imaging_liver_us: "Imaging - Liver US"
|
50
|
+
imaging_mammography: "Imaging - Mammography"
|
51
|
+
imaging_post_mict_bladder_us: "Imaging - Post mict bladder US"
|
52
|
+
imaging_renal_us: "Imaging - Renal US"
|
53
|
+
imaging_static_dmsa: "Imaging - Static DMSA"
|
54
|
+
imaging_mag3_scan: "Imaging - MAG3 Scan"
|
55
|
+
opinion_cardiology: "Opinion - Cardiology"
|
56
|
+
opinion_haematology: "Opinion - Haematology"
|
57
|
+
opinion_specialist: "Opinion - Specialist"
|
58
|
+
other: "Other"
|
@@ -7,5 +7,6 @@ en:
|
|
7
7
|
add_recipient_workup: Recipient Workup
|
8
8
|
add_waitlist_registration: Wait List Registration
|
9
9
|
add_recipient_operation: Recipient Operation
|
10
|
+
add_investigation: Add Investigation
|
10
11
|
missing_modality_warning: >
|
11
12
|
Some actions will be unavailable until you add the Transplant modality
|