renalware-core 2.0.0.pre.rc3 → 2.0.0.pre.rc4
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 +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +1 -0
- data/app/assets/images/renalware/chosen-sprite.png +0 -0
- data/app/assets/images/renalware/chosen-sprite@2x.png +0 -0
- data/app/assets/images/renalware/nhs_a4_letter_logo_black.png +0 -0
- data/app/assets/images/renalware/nhs_a4_letter_logo_blue.png +0 -0
- data/app/assets/javascripts/renalware/session_timeout_redirect.js.erb +3 -1
- data/app/assets/stylesheets/renalware/base/_variables.scss +2 -0
- data/app/assets/stylesheets/renalware/modules/_admissions.scss +21 -25
- data/app/assets/stylesheets/renalware/modules/_feeds.scss +27 -0
- data/app/assets/stylesheets/renalware/modules/_letters.scss +4 -0
- data/app/assets/stylesheets/renalware/modules/_patients.scss +18 -17
- data/app/assets/stylesheets/renalware/modules/_pd.scss +8 -0
- data/app/assets/stylesheets/renalware/partials/_lists.scss +3 -0
- data/app/assets/stylesheets/renalware/partials/_modal_window.scss +7 -1
- data/app/assets/stylesheets/renalware/partials/_navigation.scss +2 -2
- data/app/assets/stylesheets/renalware/partials/_tables.scss +20 -0
- data/app/assets/stylesheets/renalware/partials/_typography.scss +4 -0
- data/app/controllers/renalware/admin/feeds/files_controller.rb +49 -0
- data/app/controllers/renalware/admissions/admissions_controller.rb +101 -0
- data/app/controllers/renalware/admissions/patient_admissions_controller.rb +20 -0
- data/app/controllers/renalware/devise/sessions_controller.rb +29 -0
- data/app/controllers/renalware/letters/approved_letters_controller.rb +9 -1
- data/app/controllers/renalware/letters/contacts_controller.rb +29 -0
- data/app/controllers/renalware/low_clearance/base_controller.rb +13 -0
- data/app/controllers/renalware/low_clearance/dashboards_controller.rb +21 -0
- data/app/controllers/renalware/low_clearance/mdm_controller.rb +13 -0
- data/app/controllers/renalware/low_clearance/mdm_patients_controller.rb +27 -0
- data/app/controllers/renalware/low_clearance/profiles_controller.rb +45 -0
- data/app/controllers/renalware/patients/primary_care_physicians_controller.rb +4 -3
- data/app/controllers/renalware/pd/exit_site_infections_controller.rb +2 -1
- data/app/controllers/renalware/transplants/donor_workups_controller.rb +5 -2
- data/app/documents/renalware/low_clearance/profile_document.rb +26 -0
- data/app/documents/renalware/renal/profile_document.rb +0 -21
- data/app/helpers/renalware/application_helper.rb +5 -0
- data/app/helpers/renalware/attribute_name_helper.rb +0 -24
- data/app/helpers/renalware/infection_organisms_helper.rb +0 -20
- data/app/helpers/renalware/mdm_helper.rb +1 -1
- data/app/helpers/renalware/pd_regimes_helper.rb +1 -5
- data/app/mailers/renalware/admin/user_mailer.rb +1 -3
- data/app/mailers/renalware/letters/delivery/errors.rb +9 -0
- data/app/mailers/renalware/letters/delivery/practice_mailer.rb +55 -0
- data/app/mailers/{previews → renalware/previews}/user_mailer_preview.rb +0 -0
- data/app/models/concerns/renalware/feeds/job.rb +30 -0
- data/app/models/concerns/renalware/letters/letter_pathology.rb +31 -8
- data/app/models/concerns/renalware/patients_ransack_helper.rb +9 -9
- data/app/models/concerns/renalware/personable.rb +8 -3
- data/app/models/concerns/renalware/string_logging.rb +11 -0
- data/app/models/renalware/admissions/admission.rb +42 -0
- data/app/models/renalware/admissions/admission_query.rb +38 -0
- data/app/models/renalware/admissions/admission_search_form.rb +51 -0
- data/app/models/renalware/clinics/clinic_visit.rb +1 -0
- data/app/models/renalware/feeds/file.rb +31 -0
- data/app/models/renalware/feeds/file_type.rb +13 -0
- data/app/models/renalware/feeds/files/create_feed_file.rb +51 -0
- data/app/models/renalware/feeds/files/enqueue_file_for_background_processing.rb +18 -0
- data/app/models/renalware/feeds/files/exceptions.rb +12 -0
- data/app/models/renalware/feeds/files/file_upload_form.rb +24 -0
- data/app/models/renalware/feeds/files/import_job_factory.rb +15 -0
- data/app/models/renalware/feeds/files/practice_memberships/import_csv.rb +30 -0
- data/app/models/renalware/feeds/files/practice_memberships/import_job.rb +49 -0
- data/app/models/renalware/feeds/files/practices/convert_xml_to_csv.rb +145 -0
- data/app/models/renalware/feeds/files/practices/country_map.rb +33 -0
- data/app/models/renalware/feeds/files/practices/csv_file.rb +23 -0
- data/app/models/renalware/feeds/files/practices/csv_organisation.rb +35 -0
- data/app/models/renalware/feeds/files/practices/import_csv.rb +30 -0
- data/app/models/renalware/feeds/files/practices/import_job.rb +58 -0
- data/app/models/renalware/feeds/files/primary_care_physicians/import_csv.rb +28 -0
- data/app/models/renalware/feeds/files/primary_care_physicians/import_job.rb +44 -0
- data/app/models/renalware/feeds/files/tissue_typing/import.rb +12 -0
- data/app/models/renalware/feeds/hl7_message.rb +15 -0
- data/app/models/renalware/hd/sessions/auditable_session.rb +1 -1
- data/app/models/renalware/hospitals/unit.rb +2 -1
- data/app/models/renalware/hospitals/ward.rb +1 -1
- data/app/models/renalware/letters/approve_letter.rb +15 -9
- data/app/models/renalware/letters/delivery/deliver_letter.rb.dead +41 -0
- data/app/models/renalware/letters/delivery/delivery_policy.rb +28 -0
- data/app/models/renalware/letters/delivery/email_letter_to_practice.rb +46 -0
- data/app/models/renalware/letters/delivery/practice_email.rb +28 -0
- data/app/models/renalware/letters/draft_letter.rb +1 -1
- data/app/models/renalware/letters/part/recent_pathology_results.rb +43 -4
- data/app/models/renalware/letters/pdf_letter_cache.rb +2 -3
- data/app/models/renalware/letters/recipient_params_processor.rb +1 -1
- data/app/models/renalware/letters/relevant_observation_description.rb +2 -3
- data/app/models/renalware/letters/revise_letter.rb +3 -1
- data/app/models/renalware/letters.rb +3 -0
- data/app/models/renalware/low_clearance/mdm_patients_query.rb +62 -0
- data/app/models/renalware/low_clearance/modality_description.rb +11 -0
- data/app/models/renalware/low_clearance/patient.rb +14 -0
- data/app/models/renalware/low_clearance/profile.rb +15 -0
- data/app/models/renalware/low_clearance/version.rb +9 -0
- data/app/models/renalware/low_clearance.rb +15 -0
- data/app/models/renalware/patient.rb +3 -0
- data/app/models/renalware/patients/patient_hospital_identifiers.rb +8 -0
- data/app/models/renalware/patients/practice.rb +4 -1
- data/app/models/renalware/patients/practice_membership.rb +12 -0
- data/app/models/renalware/patients/primary_care_physician.rb +24 -5
- data/app/models/renalware/pd/exit_site_infection.rb +6 -0
- data/app/models/renalware/pd/regime_bag.rb +1 -1
- data/app/models/renalware/problems/note.rb +1 -1
- data/app/models/renalware/renal/registry/preflight_checks/deaths_query.rb +1 -1
- data/app/models/renalware/renal.rb +0 -4
- data/app/models/renalware/system/update_user.rb +1 -1
- data/app/models/renalware/transplants/recipient_operation.rb +3 -8
- data/app/models/renalware/user.rb +3 -3
- data/app/models/renalware/zip_archive.rb +48 -0
- data/app/policies/renalware/admissions/admission_policy.rb +8 -0
- data/app/policies/renalware/feeds/file_policy.rb +25 -0
- data/app/policies/renalware/letters/letter_policy.rb +2 -0
- data/app/policies/renalware/low_clearance/profile_policy.rb +13 -0
- data/app/presenters/renalware/admissions/admission_presenter.rb +49 -0
- data/app/presenters/renalware/dashboard/dashboard_presenter.rb +1 -1
- data/app/presenters/renalware/hd/session_access_presenter.rb +1 -1
- data/app/presenters/renalware/letters/letter_form_presenter.rb +1 -1
- data/app/presenters/renalware/letters/letter_presenter.rb +6 -1
- data/app/presenters/renalware/letters/practice_email_meta_data.rb +85 -0
- data/app/presenters/renalware/low_clearance/dashboard_presenter.rb +19 -0
- data/app/presenters/renalware/low_clearance/mdm_presenter.rb +12 -0
- data/app/presenters/renalware/pathology/observation_set_presenter.rb +1 -1
- data/app/presenters/renalware/pathology/observations_diff.rb +1 -1
- data/app/presenters/renalware/renal/clinical_summary_presenter.rb +17 -1
- data/app/validators/renalware/patients/height_validator.rb +17 -0
- data/app/views/renalware/admin/feeds/files/index.html.slim +61 -0
- data/app/views/renalware/admissions/admissions/_filters.html.slim +24 -0
- data/app/views/renalware/admissions/admissions/_form.html.slim +56 -0
- data/app/views/renalware/admissions/admissions/_table.html.slim +65 -0
- data/app/views/renalware/admissions/admissions/edit.html.slim +6 -0
- data/app/views/renalware/admissions/admissions/index.html.slim +12 -0
- data/app/views/renalware/admissions/admissions/new.html.slim +6 -0
- data/app/views/renalware/admissions/consults/_form.html.slim +2 -3
- data/app/views/renalware/admissions/consults/_table.html.slim +1 -3
- data/app/views/renalware/admissions/patient_admissions/index.html.slim +10 -0
- data/app/views/renalware/clinics/clinic_visits/_table.html.slim +2 -1
- data/app/views/renalware/clinics/clinic_visits/_table_row.html.slim +1 -0
- data/app/views/renalware/drugs/drugs/index.html.slim +3 -2
- data/app/views/renalware/hd/current_profile/_summary.html.slim +8 -8
- data/app/views/renalware/hd/diary_slots/_form.html.slim +4 -4
- data/app/views/renalware/hd/mdm_patients/_patient.html.slim +0 -1
- data/app/views/renalware/hd/protocols/_profile.html.slim +4 -4
- data/app/views/renalware/letters/contacts/_contact.html.slim +5 -1
- data/app/views/renalware/letters/contacts/_edit.html.slim +30 -0
- data/app/views/renalware/letters/contacts/_form.html.slim +1 -1
- data/app/views/renalware/letters/contacts/_table.html.slim +6 -5
- data/app/views/renalware/letters/contacts/edit.html.slim +8 -0
- data/app/views/renalware/letters/contacts/edit.js.erb +9 -0
- data/app/views/renalware/letters/contacts/index.html.slim +9 -3
- data/app/views/renalware/letters/contacts/index.js.erb +1 -1
- data/app/views/renalware/letters/contacts/update.js.erb +10 -0
- data/app/views/renalware/letters/delivery/practice_mailer/patient_letter.text.erb +3 -0
- data/app/views/renalware/letters/electronic_receipts/_table.html.slim +3 -1
- data/app/views/renalware/letters/electronic_receipts/sent.html.slim +6 -9
- data/app/views/renalware/letters/formatted_letters/_letter.html.slim +26 -13
- data/app/views/renalware/letters/letters/_cc_recipient_form.html.slim +1 -1
- data/app/views/renalware/letters/letters/_form.html.slim +0 -1
- data/app/views/renalware/letters/letters/_pathology.html.slim +1 -2
- data/app/views/renalware/letters/letters/_preview.html.slim +14 -5
- data/app/views/renalware/letters/parts/_clinical_observations.html.slim +2 -2
- data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +1 -7
- data/app/views/renalware/low_clearance/dashboards/_page_actions.html.slim +19 -0
- data/app/views/renalware/low_clearance/dashboards/show.html.slim +7 -0
- data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_bottom.html.slim +0 -0
- data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_low_clearance_profile.html.slim +0 -0
- data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_top.html.slim +0 -0
- data/app/views/renalware/low_clearance/mdm_patients/_filters.html.slim +9 -0
- data/app/views/renalware/low_clearance/profiles/_summary.html.slim +125 -0
- data/app/views/renalware/low_clearance/profiles/edit.html.slim +39 -0
- data/app/views/renalware/medications/prescriptions/_table.html.slim +1 -1
- data/app/views/renalware/messaging/internal/receipts/_receipt.html.slim +2 -1
- data/app/views/renalware/messaging/internal/receipts/_sent_receipt.html.slim +3 -2
- data/app/views/renalware/messaging/internal/receipts/_sent_table.html.slim +2 -1
- data/app/views/renalware/messaging/internal/receipts/_table.html.slim +1 -0
- data/app/views/renalware/navigation/_mdms.html.slim +1 -1
- data/app/views/renalware/navigation/_patients_admin.html.slim +1 -0
- data/app/views/renalware/navigation/_renalware_admin.html.slim +12 -22
- data/app/views/renalware/patients/_side_menu.html.slim +0 -1
- data/app/views/renalware/patients/clinical_summaries/_admissions.html.slim +11 -0
- data/app/views/renalware/patients/clinical_summaries/show.html.slim +7 -0
- data/app/views/renalware/patients/primary_care_physicians/_form.html.slim +1 -3
- data/app/views/renalware/patients/primary_care_physicians/_primary_care_physician.html.slim +1 -3
- data/app/views/renalware/patients/primary_care_physicians/index.html.slim +0 -1
- data/app/views/renalware/patients/side_menu/_actions.html.slim +1 -1
- data/app/views/renalware/patients/side_menu/_general.html.slim +3 -0
- data/app/views/renalware/patients/side_menu/_modalities.html.slim +4 -0
- data/app/views/renalware/pd/_pet_adequacies.html.slim +1 -1
- data/app/views/renalware/pd/dashboards/show/_page_actions.html.slim +3 -1
- data/app/views/renalware/pd/exit_site_infections/_details.html.slim +6 -1
- data/app/views/renalware/pd/exit_site_infections/_fields.html.slim +7 -0
- data/app/views/renalware/pd/exit_site_infections/_form.html.slim +6 -7
- data/app/views/renalware/pd/regime_bags/_regime_bag.html.slim +1 -1
- data/app/views/renalware/pd/regime_bags/_regime_bags.html.slim +1 -1
- data/app/views/renalware/pd/regimes/_current_regime.html.slim +6 -1
- data/app/views/renalware/pd/regimes/_glucose.html.slim +1 -3
- data/app/views/renalware/renal/profiles/_form.html.slim +0 -21
- data/app/views/renalware/renal/profiles/show.html.slim +0 -5
- data/app/views/renalware/research/study_participants/_form.html.slim +2 -2
- data/app/views/renalware/shared/_attributes_list.html.slim +4 -4
- data/app/views/renalware/snippets/snippets/_table.html.slim +10 -5
- data/app/views/renalware/transplants/donations/_form.html.slim +6 -6
- data/app/views/renalware/transplants/live_donors/_filters.html.slim +5 -5
- data/app/views/renalware/transplants/recipient_dashboards/_page_actions.html.slim +5 -1
- data/config/cucumber.yml +2 -2
- data/config/initializers/client_side_validations.rb +8 -10
- data/config/initializers/devise_security_extension.rb +1 -1
- data/config/initializers/inflections.rb +6 -1
- data/config/initializers/renalware.rb +6 -6
- data/config/locales/renalware/admissions/admissions.yml +37 -0
- data/config/locales/renalware/clinics/visit.yml +3 -0
- data/config/locales/renalware/feeds/file.en.yml +17 -0
- data/config/locales/renalware/low_clearance/dashboard.en.yml +11 -0
- data/config/locales/renalware/low_clearance/low_clearance.en.yml +14 -0
- data/config/locales/renalware/low_clearance/profile.en.yml +71 -0
- data/config/locales/renalware/messaging/internal/messages.en.yml +3 -2
- data/config/locales/renalware/patients/side_menu.en.yml +2 -0
- data/config/locales/renalware/pd/dashboard.en.yml +1 -0
- data/config/locales/renalware/pd/exit_site_infection.en.yml +10 -0
- data/config/locales/renalware/renal/profile.en.yml +0 -46
- data/config/locales/renalware/transplants/recipient_dashboards.en.yml +1 -0
- data/config/routes.rb +19 -9
- data/db/migrate/20170523125610_add_esi_fields.rb +9 -0
- data/db/migrate/20170615130714_add_deleted_at_to_practices.rb +7 -0
- data/db/migrate/20170615144802_add_name_to_patient_primary_care_physicians.rb +9 -0
- data/db/migrate/20170620121255_create_patient_practice_memberships.rb +24 -0
- data/db/migrate/20170621102157_add_unique_index_on_practice_code.rb +6 -0
- data/db/migrate/20170627110058_create_feed_file_types.rb +15 -0
- data/db/migrate/20170627110619_create_feed_files.rb +20 -0
- data/db/migrate/20171009181615_add_columns_to_drug_drugs.rb +8 -0
- data/db/migrate/20171127082158_add_region_to_addresses.rb +5 -0
- data/db/migrate/20171127092158_create_function_to_import_practices.rb +123 -0
- data/db/migrate/20171127092359_create_fn_to_insert_gps.rb +145 -0
- data/db/migrate/20171206140738_create_fn_to_load_practice_memberships_csv.rb +62 -0
- data/db/migrate/20171211131918_remove_email_from_primary_care_physicians.rb +7 -0
- data/db/migrate/20171219154529_create_admission_admissions.rb +28 -0
- data/db/migrate/20171222153815_add_unique_constraint_to_patient_practice_memberships.rb +8 -0
- data/db/migrate/20180102155055_update_patient_summaries_to_version_5.rb +5 -0
- data/db/migrate/20180105132358_add_emailed_at_to_letter_recipients.rb +6 -0
- data/db/migrate/20180108185400_remove_null_constraint_from_letters_pathology_snapshot.rb +5 -0
- data/db/migrate/20180112151706_create_low_clearance_profiles.rb +49 -0
- data/db/migrate/20180112151813_create_low_clearance_versions.rb +14 -0
- data/db/seeds/default/feeds/import_file_types.rb +35 -0
- data/db/seeds/default/feeds/seeds.rb +1 -0
- data/db/seeds/default/modalities/descriptions.rb +1 -2
- data/db/seeds/default/practices/nhs_practices_sample.csv +26 -26
- data/db/seeds/default/practices/practices.rb +1 -2
- data/db/seeds/default/practices/primary_care_physicians.rb +3 -4
- data/db/seeds/default/practices/primary_care_physicians_sample.csv +193 -193
- data/db/seeds/default/seeds.rb +1 -0
- data/db/views/patient_summaries_v05.sql +17 -0
- data/lib/dropdown_button_item.rb +1 -1
- data/lib/renalware/configuration.rb +19 -1
- data/lib/renalware/engine.rb +6 -2
- data/lib/renalware/version.rb +1 -1
- data/lib/tasks/feeds/files.rake +34 -0
- data/lib/xml_parser.rb +84 -0
- data/spec/factories/admissions/admissions.rb +11 -0
- data/spec/factories/clinics/clinic_visits.rb +2 -2
- data/spec/factories/feeds/file.rb +14 -0
- data/spec/factories/feeds/file_types.rb +17 -0
- data/spec/factories/low_clearance/modality_descriptions.rb +8 -0
- data/spec/factories/low_clearance/patients.rb +3 -0
- data/spec/factories/low_clearance/profiles.rb +3 -0
- data/spec/factories/modalities/modality_descriptions.rb +1 -1
- data/spec/factories/patients/practice_memberships.rb +7 -0
- data/spec/factories/patients/primary_care_physicians.rb +2 -4
- data/spec/factories/system/users.rb +1 -1
- data/spec/support/factory_bot.rb +1 -1
- data/spec/support/shared_examples/paranoia_examples.rb +14 -0
- metadata +172 -40
- data/app/controllers/renalware/renal/low_clearance/mdm_controller.rb +0 -15
- data/app/controllers/renalware/renal/low_clearance/mdm_patients_controller.rb +0 -29
- data/app/helpers/renalware/section_helper.rb +0 -10
- data/app/models/renalware/renal/low_clearance/mdm_patients_query.rb +0 -64
- data/app/models/renalware/renal/low_clearance/modality_description.rb +0 -13
- data/app/presenters/renalware/renal/low_clearance/mdm_presenter.rb +0 -14
- data/app/views/renalware/renal/low_clearance/mdm_patients/_filters.html.slim +0 -9
- data/app/views/renalware/transplants/registrations/_sections_nav.html.slim +0 -15
- data/config/initializers/application_controller_renderer.rb +0 -13
- data/config/initializers/assets.rb +0 -10
- data/config/initializers/renalware_core.rb +0 -15
- data/config/locales/renalware/renal/low_clearance.en.yml +0 -15
- data/spec/factories/renal/lcc_modality_description.rb +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2adae7283349900967b688b6e5540a25f5f92bedfd851bc4c1ee4867d714cb9c
|
|
4
|
+
data.tar.gz: 1f294a120860167a97636ff519da463df2503391821c9ca8129dc60177796dcc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: df23ef342eff7ef9344655965caae92a6bb1350936ffef3dacbf4f5889db2a2cfeb7453349383d6f58c3d0f9df8c0a4397cbf9cd0d1d9e8413c3581a051dcdc7
|
|
7
|
+
data.tar.gz: 7b618ddc3af4f1b0359001feaad0c3ae535b49dd1f5072a967e920f267038e6fdc6e7bd879cdf234c05d3a41183c6fd1d1ee3f4bc41aef163c5d95f9e2ae18e1
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -18,7 +18,9 @@ $(document).ready(function() {
|
|
|
18
18
|
if(window.location.pathname != login_path) {
|
|
19
19
|
$.getScript("<%= Renalware::Engine.routes.url_helpers.session_timed_out_path %>")
|
|
20
20
|
.fail(function(jqxhr, settings, exception) {
|
|
21
|
-
|
|
21
|
+
<% unless Rails.env.test? %>
|
|
22
|
+
console.log("Failed to query for session timeout");
|
|
23
|
+
<% end %>
|
|
22
24
|
});
|
|
23
25
|
}
|
|
24
26
|
};
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
.admissions-table table {
|
|
2
|
+
td, th {
|
|
3
|
+
vertical-align: top;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
th.subhead {
|
|
7
|
+
color: $black;
|
|
8
|
+
text-align: center;
|
|
9
|
+
|
|
10
|
+
&.admission {
|
|
11
|
+
background-color: $light-yellow;
|
|
12
|
+
text-shadow: lighten($light-yellow, 20) .05rem .05rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&.discharge {
|
|
16
|
+
background-color: $light-green;
|
|
17
|
+
text-shadow: lighten($light-green, 20) .05rem .05rem
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
1
22
|
#admissions-request-modal {
|
|
2
23
|
.admissions-request-patient {
|
|
3
24
|
margin-bottom: 1rem;
|
|
@@ -38,28 +59,3 @@
|
|
|
38
59
|
}
|
|
39
60
|
}
|
|
40
61
|
|
|
41
|
-
.admissions-consults-table {
|
|
42
|
-
tbody tr td:last-child {
|
|
43
|
-
padding-top: 0.3rem;
|
|
44
|
-
padding-bottom: 0.3rem;
|
|
45
|
-
padding-right: 0;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
td {
|
|
49
|
-
.button.dropdown {
|
|
50
|
-
padding: .2rem 2.3rem .2rem .4rem;
|
|
51
|
-
margin: 0;
|
|
52
|
-
}
|
|
53
|
-
.f-dropdown {
|
|
54
|
-
margin-left: -110px;
|
|
55
|
-
|
|
56
|
-
&.open::before,
|
|
57
|
-
&.open::after {
|
|
58
|
-
left: 160px;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
.button-group {
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.feeds-files {
|
|
2
|
+
td {
|
|
3
|
+
vertical-align: top;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.status span {
|
|
7
|
+
color: $white;
|
|
8
|
+
border-radius: 0.3rem;
|
|
9
|
+
padding: .2rem .5rem;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.waiting .status span {
|
|
13
|
+
background-color: $muted-dark-grey;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.processing .status span {
|
|
17
|
+
background-color: $nhs-warm-yellow;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.failure .status span {
|
|
21
|
+
background-color: $nhs-red;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.success .status span {
|
|
25
|
+
background-color: $nhs-green;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -118,7 +118,7 @@ ul.provider {
|
|
|
118
118
|
|
|
119
119
|
.page-heading {
|
|
120
120
|
float: left;
|
|
121
|
-
margin:
|
|
121
|
+
margin: 0.5rem 0 1rem;
|
|
122
122
|
width: 100%;
|
|
123
123
|
|
|
124
124
|
& > li {
|
|
@@ -299,16 +299,19 @@ ul.provider {
|
|
|
299
299
|
clear: both;
|
|
300
300
|
height: 2rem;
|
|
301
301
|
padding: 0.4em 0.2em 0.5em 0.6em;
|
|
302
|
-
background-color: $
|
|
303
|
-
|
|
302
|
+
background-color: $nhs-orange;
|
|
303
|
+
color: $white;
|
|
304
304
|
|
|
305
305
|
&:hover {
|
|
306
|
-
background-color: lighten($
|
|
306
|
+
background-color: lighten($nhs-orange, 5);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
td, td.actions a {
|
|
310
|
+
color: inherit;
|
|
307
311
|
}
|
|
308
312
|
|
|
309
313
|
td {
|
|
310
314
|
border: 0;
|
|
311
|
-
border-top: dotted 1px $light-grey;
|
|
312
315
|
}
|
|
313
316
|
|
|
314
317
|
.icon {
|
|
@@ -320,6 +323,10 @@ ul.provider {
|
|
|
320
323
|
overflow: hidden;
|
|
321
324
|
text-overflow: ellipsis;
|
|
322
325
|
white-space: nowrap;
|
|
326
|
+
|
|
327
|
+
&:before {
|
|
328
|
+
content: "Alert: ";
|
|
329
|
+
}
|
|
323
330
|
}
|
|
324
331
|
|
|
325
332
|
.author {
|
|
@@ -330,26 +337,20 @@ ul.provider {
|
|
|
330
337
|
.actions {
|
|
331
338
|
width: 3rem;
|
|
332
339
|
padding-right: 1rem;
|
|
333
|
-
|
|
334
|
-
a {
|
|
335
|
-
color: $dark-grey;
|
|
336
|
-
}
|
|
337
340
|
}
|
|
338
341
|
|
|
339
342
|
&.urgent {
|
|
340
|
-
background-color: $nhs-
|
|
343
|
+
background-color: $nhs-red;
|
|
341
344
|
|
|
342
345
|
&:hover {
|
|
343
|
-
background-color: lighten($nhs-
|
|
346
|
+
background-color: lighten($nhs-red, 5);
|
|
344
347
|
}
|
|
345
348
|
}
|
|
346
349
|
|
|
347
|
-
|
|
348
|
-
.
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
display: table-cell;
|
|
352
|
-
}
|
|
350
|
+
.icon {
|
|
351
|
+
@extend .fa;
|
|
352
|
+
@extend .fa-warning;
|
|
353
|
+
display: table-cell;
|
|
353
354
|
}
|
|
354
355
|
}
|
|
355
356
|
|
|
@@ -3,10 +3,16 @@
|
|
|
3
3
|
border-bottom: solid 1px $winter-sky;
|
|
4
4
|
margin-bottom: 10px;
|
|
5
5
|
|
|
6
|
-
h1, h2 {
|
|
6
|
+
h1, h2, h3 {
|
|
7
7
|
margin: 0 0 0.5rem 0;
|
|
8
8
|
font-size: 1.3rem;
|
|
9
9
|
color: $dark-grey;
|
|
10
|
+
display: inline-block;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
h3 {
|
|
14
|
+
font-weight: normal;
|
|
15
|
+
color: $dashboard-muted-color;
|
|
10
16
|
}
|
|
11
17
|
|
|
12
18
|
.reveal-modal-close {
|
|
@@ -65,7 +65,7 @@ dd.patient-name {
|
|
|
65
65
|
.patient-side-nav {
|
|
66
66
|
background-color: $patient-menu-background-colour;
|
|
67
67
|
padding: 0.6rem 0;
|
|
68
|
-
padding-bottom:
|
|
68
|
+
padding-bottom: 11rem;
|
|
69
69
|
position: absolute;
|
|
70
70
|
width: $patient-side-nav-width;
|
|
71
71
|
overflow-y: auto;
|
|
@@ -87,7 +87,7 @@ dd.patient-name {
|
|
|
87
87
|
|
|
88
88
|
a {
|
|
89
89
|
border-radius: 3px;
|
|
90
|
-
padding: 0.
|
|
90
|
+
padding: 0.1rem 0.5rem;
|
|
91
91
|
text-decoration: underline;
|
|
92
92
|
color: $nhs-blue;
|
|
93
93
|
}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
|
|
2
|
+
table td.actions-dropdown {
|
|
3
|
+
padding-top: 0.3rem;
|
|
4
|
+
padding-bottom: 0.3rem;
|
|
5
|
+
padding-right: 0;
|
|
6
|
+
|
|
7
|
+
.button.dropdown {
|
|
8
|
+
padding: .2rem 2.3rem .2rem .4rem;
|
|
9
|
+
margin: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.f-dropdown {
|
|
13
|
+
margin-left: -110px;
|
|
14
|
+
|
|
15
|
+
&.open::before,
|
|
16
|
+
&.open::after {
|
|
17
|
+
left: 160px;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
2
22
|
table {
|
|
3
23
|
// This will have to be removed at some point to comply with NHS table guidelines
|
|
4
24
|
width: 100%;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Admin
|
|
5
|
+
module Feeds
|
|
6
|
+
class FilesController < BaseController
|
|
7
|
+
include Renalware::Concerns::Pageable
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
authorize files
|
|
11
|
+
render locals: {
|
|
12
|
+
files: files,
|
|
13
|
+
uploaded_file: Renalware::Feeds::Files::FileUploadForm.new
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def create
|
|
18
|
+
authorize Renalware::Feeds::File, :create?
|
|
19
|
+
form = Renalware::Feeds::Files::FileUploadForm.new(file_upload_params)
|
|
20
|
+
|
|
21
|
+
if form.valid?
|
|
22
|
+
file = Renalware::Feeds::Files::CreateFeedFile.call(
|
|
23
|
+
uploaded_file: Pathname.new(form.file.path),
|
|
24
|
+
file_type: Renalware::Feeds::FileType.find(form.file_type_id),
|
|
25
|
+
user: current_user
|
|
26
|
+
)
|
|
27
|
+
Renalware::Feeds::Files::EnqueueFileForBackgroundProcessing.call(file)
|
|
28
|
+
redirect_to(
|
|
29
|
+
admin_feeds_files_path,
|
|
30
|
+
notice: "File #{form.file.original_filename} queued for processing"
|
|
31
|
+
)
|
|
32
|
+
else
|
|
33
|
+
render :index, locals: { files: files, uploaded_file: form }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def files
|
|
40
|
+
@files ||= Renalware::Feeds::File.ordered.page(page).per(per_page)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def file_upload_params
|
|
44
|
+
params.require(:file_upload).permit(:file, :file_type_id)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require "renalware/admissions"
|
|
2
|
+
require "collection_presenter"
|
|
3
|
+
|
|
4
|
+
module Renalware
|
|
5
|
+
module Admissions
|
|
6
|
+
class AdmissionsController < BaseController
|
|
7
|
+
include Renalware::Concerns::Pageable
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
admissions = search_form.submit.page(page).per(per_page)
|
|
11
|
+
authorize admissions
|
|
12
|
+
|
|
13
|
+
render locals: {
|
|
14
|
+
admissions: CollectionPresenter.new(admissions, AdmissionPresenter),
|
|
15
|
+
form: search_form
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def new
|
|
20
|
+
admission = Admission.new(admitted_on: Time.zone.today)
|
|
21
|
+
authorize admission
|
|
22
|
+
render_new(admission)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create
|
|
26
|
+
admission = build_admission
|
|
27
|
+
authorize admission
|
|
28
|
+
if admission.save_by(current_user)
|
|
29
|
+
redirect_to admissions_admissions_path, notice: success_msg_for("admission")
|
|
30
|
+
else
|
|
31
|
+
render_new(admission)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def edit
|
|
36
|
+
render_edit(find_and_authorize_admission)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def update
|
|
40
|
+
admission = find_and_authorize_admission
|
|
41
|
+
if admission.update_by(current_user, admission_params)
|
|
42
|
+
redirect_to admissions_admissions_path, notice: success_msg_for("admission")
|
|
43
|
+
else
|
|
44
|
+
render_edit(admission)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def destroy
|
|
49
|
+
find_and_authorize_admission.destroy!
|
|
50
|
+
redirect_to admissions_admissions_path, notice: success_msg_for("admission")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def build_admission
|
|
56
|
+
patient = Patient.find_by(id: admission_params[:patient_id])
|
|
57
|
+
args = admission_params.merge(modality_at_admission: patient&.current_modality)
|
|
58
|
+
Admission.new(args)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def search_form
|
|
62
|
+
@search_form ||= begin
|
|
63
|
+
options = params.key?(:query) ? search_params : {}
|
|
64
|
+
AdmissionSearchForm.new(options)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def find_and_authorize_admission
|
|
69
|
+
Admission.find(params[:id]).tap do |admission|
|
|
70
|
+
authorize admission
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def render_new(admission)
|
|
75
|
+
render :new, locals: { admission: admission }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def render_edit(admission)
|
|
79
|
+
render :edit, locals: { admission: admission }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def search_params
|
|
83
|
+
params
|
|
84
|
+
.require(:query) {}
|
|
85
|
+
.permit(:hospital_unit_id, :hospital_ward_id, :status, :term)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def admission_params
|
|
89
|
+
params
|
|
90
|
+
.require(:admissions_admission)
|
|
91
|
+
.permit(
|
|
92
|
+
:hospital_ward_id, :patient_id, :q,
|
|
93
|
+
:admitted_on, :admission_type, :consultant, :modality,
|
|
94
|
+
:reason_for_admission, :notes, :transferred_on, :transferred_to,
|
|
95
|
+
:discharged_on, :discharge_destination, :destination_notes,
|
|
96
|
+
:discharge_summary, :summarised_on, :summarised_by_id, :modality_at_admission
|
|
97
|
+
)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "renalware/admissions"
|
|
2
|
+
require "collection_presenter"
|
|
3
|
+
|
|
4
|
+
module Renalware
|
|
5
|
+
module Admissions
|
|
6
|
+
class PatientAdmissionsController < BaseController
|
|
7
|
+
include Renalware::Concerns::Pageable
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
admissions = Admission
|
|
11
|
+
.where(patient_id: patient.id).page(page).per(per_page)
|
|
12
|
+
.order(admitted_on: :desc)
|
|
13
|
+
authorize admissions
|
|
14
|
+
render locals: {
|
|
15
|
+
admissions: CollectionPresenter.new(admissions, AdmissionPresenter)
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -19,6 +19,35 @@ module Renalware
|
|
|
19
19
|
max_duration_has_passed ? dashboard_path : super
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Important note: Since Devise 4.4.0 the gem's SessionsController#create will do an implicit
|
|
23
|
+
# check to see if the resource (User signing-in) is valid (or rather, I think it checks for the
|
|
24
|
+
# presence of anything in resource.errors). If the user is not valid it now
|
|
25
|
+
# skips the redirect to the path specified in .after_sign_in_path_for.
|
|
26
|
+
# The result for us was that the user _could_ log on, but they stayed on the login screen
|
|
27
|
+
# (the appearance of the menu indicated they were in fact logged in). The redirect was not
|
|
28
|
+
# happening because the user was invalid (ie there were validation errors and
|
|
29
|
+
# user.valid? == false).
|
|
30
|
+
# The reason for the validation errors is that we have some conditional validation in User;
|
|
31
|
+
# for instance only validate #signature during an update, not on
|
|
32
|
+
# a create - after all #signature is something they set up later in their 'profile'.
|
|
33
|
+
# So what we have to do here is stop Devise from thinking the user in invalid by skipping
|
|
34
|
+
# validations.
|
|
35
|
+
# See https://github.com/plataformatec/devise/issues/4742#issuecomment-355154023
|
|
36
|
+
# Note that ideally we should move signature, professional position etc to a Profile model
|
|
37
|
+
# and then we could remove the conditional validation.
|
|
38
|
+
def create
|
|
39
|
+
super do |resource|
|
|
40
|
+
# This first line clears any existing errors that prevent Devise redirecting on successful
|
|
41
|
+
# login. It does not negate any password validations however. Its just a workaround to get
|
|
42
|
+
# the redirect to work.
|
|
43
|
+
resource.errors.clear
|
|
44
|
+
# This second line means resource.valid? returns true ie conditional on: :update validations
|
|
45
|
+
# are skipped. This line is not necessary (clearing the error above actually solves the
|
|
46
|
+
# problem) but does no harm and is belt and braces.
|
|
47
|
+
resource.skip_validation = true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
22
51
|
private
|
|
23
52
|
|
|
24
53
|
def last_sign_in_at
|
|
@@ -8,7 +8,15 @@ module Renalware
|
|
|
8
8
|
def create
|
|
9
9
|
letter = @patient.letters.pending_review.find(params[:letter_id])
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
# See config.broadcast_subscription_map for ApproveLetter event subscribers
|
|
12
|
+
# We use an event subscription pattern to drive the delivery of letters at this point
|
|
13
|
+
# rather than hard-wiring in a call to DeliverLetter.call etc. This is because letter
|
|
14
|
+
# delivery is hospital-specific, and each might want to plumb in different or many classes
|
|
15
|
+
# to handle different aspects of letter processing - not just delivery but also EPR etc.
|
|
16
|
+
ApproveLetter
|
|
17
|
+
.build(letter)
|
|
18
|
+
.broadcasting_to_configured_subscribers
|
|
19
|
+
.call(by: current_user)
|
|
12
20
|
|
|
13
21
|
redirect_to patient_clinical_summary_path(@patient), notice: t(".success")
|
|
14
22
|
end
|
|
@@ -23,8 +23,31 @@ module Renalware
|
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
def edit
|
|
27
|
+
contact = patient.contacts.find(params[:id])
|
|
28
|
+
render_edit(contact)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update
|
|
32
|
+
contact = patient.contacts.find(params[:id])
|
|
33
|
+
if contact.update(update_contact_params)
|
|
34
|
+
flash.now[:notice] = success_msg_for("contact")
|
|
35
|
+
render locals: { patient: patient, contact: ContactPresenter.new(contact) }
|
|
36
|
+
else
|
|
37
|
+
render_edit(contact)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
26
41
|
private
|
|
27
42
|
|
|
43
|
+
def render_edit(contact)
|
|
44
|
+
render :edit, locals: {
|
|
45
|
+
patient: patient,
|
|
46
|
+
contact: contact,
|
|
47
|
+
contact_descriptions: find_contact_descriptions
|
|
48
|
+
}, layout: false
|
|
49
|
+
end
|
|
50
|
+
|
|
28
51
|
def build_contact
|
|
29
52
|
Contact.new.tap(&:build_person)
|
|
30
53
|
end
|
|
@@ -55,6 +78,12 @@ module Renalware
|
|
|
55
78
|
.tap { |p| try_merge_person_creator(p) }
|
|
56
79
|
end
|
|
57
80
|
|
|
81
|
+
def update_contact_params
|
|
82
|
+
params
|
|
83
|
+
.require(:letters_contact)
|
|
84
|
+
.permit(:default_cc, :description_id, :other_description, :notes)
|
|
85
|
+
end
|
|
86
|
+
|
|
58
87
|
def contact_attributes
|
|
59
88
|
[
|
|
60
89
|
:person_id, :default_cc, :description_id, :other_description,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_dependency "renalware/low_clearance"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module LowClearance
|
|
5
|
+
class DashboardsController < LowClearance::BaseController
|
|
6
|
+
def show
|
|
7
|
+
authorize patient
|
|
8
|
+
render :show, locals: {
|
|
9
|
+
patient: patient,
|
|
10
|
+
dashboard: dashboard_presenter
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def dashboard_presenter
|
|
17
|
+
DashboardPresenter.new(user: current_user, patient: patient)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_dependency "renalware/renal"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module LowClearance
|
|
5
|
+
class MDMController < Renalware::MDMController
|
|
6
|
+
def show
|
|
7
|
+
authorize patient
|
|
8
|
+
presenter = LowClearance::MDMPresenter.new(patient: patient, view_context: view_context)
|
|
9
|
+
render_show(mdm_presenter: presenter)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require_dependency "renalware/renal"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module LowClearance
|
|
5
|
+
class MDMPatientsController < Renalware::MDMPatientsController
|
|
6
|
+
def index
|
|
7
|
+
render_index(query: query,
|
|
8
|
+
page_title: t(".page_title"),
|
|
9
|
+
view_proc: ->(patient) { patient_low_clearance_mdm_path(patient) })
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def query
|
|
15
|
+
LowClearance::MDMPatientsQuery.new(query: q, named_filter: named_filter)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def named_filter
|
|
19
|
+
params[:named_filter]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def q
|
|
23
|
+
params[:q]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|