renalware-core 2.0.0.pre.beta9 → 2.0.0.pre.beta10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/app/assets/javascripts/renalware/application.js.erb +2 -0
- data/app/assets/javascripts/renalware/dialogs.js.erb +17 -1
- data/app/assets/javascripts/renalware/patient_ajax_search.js +48 -0
- data/app/assets/javascripts/renalware/research.js +18 -0
- data/app/assets/stylesheets/renalware/application.scss +1 -0
- data/app/assets/stylesheets/renalware/base/_variables.scss +13 -0
- data/app/assets/stylesheets/renalware/hd_diary_pdf.scss +57 -0
- data/app/assets/stylesheets/renalware/lib/_foundation_and_overrides.scss +18 -0
- data/app/assets/stylesheets/renalware/modules/_admissions.scss +26 -0
- data/app/assets/stylesheets/renalware/modules/_hd.scss +203 -0
- data/app/assets/stylesheets/renalware/modules/_renal.scss +30 -0
- data/app/assets/stylesheets/renalware/partials/_animation.scss +8 -0
- data/app/assets/stylesheets/renalware/partials/_layout.scss +11 -0
- data/app/assets/stylesheets/renalware/partials/_tables.scss +12 -2
- data/app/assets/stylesheets/renalware/partials/_tabs.scss +45 -0
- data/app/controllers/renalware/admin/users_controller.rb +5 -4
- data/app/controllers/renalware/admissions/consults_controller.rb +88 -0
- data/app/controllers/renalware/clinical/body_compositions_controller.rb +1 -1
- data/app/controllers/renalware/concerns/pageable.rb +1 -1
- data/app/controllers/renalware/hd/current_profile_controller.rb +1 -1
- data/app/controllers/renalware/hd/diaries_controller.rb +87 -0
- data/app/controllers/renalware/hd/diary_slots_controller.rb +172 -0
- data/app/controllers/renalware/hd/patients_controller.rb +43 -0
- data/app/controllers/renalware/hd/preference_sets_controller.rb +4 -1
- data/app/controllers/renalware/hd/sessions_controller.rb +1 -1
- data/app/controllers/renalware/hd/stations_controller.rb +1 -1
- data/app/controllers/renalware/hospitals/units_controller.rb +1 -2
- data/app/controllers/renalware/hospitals/wards_controller.rb +18 -0
- data/app/controllers/renalware/renal/registry_preflight_checks_controller.rb +44 -0
- data/app/controllers/renalware/reporting/audits_controller.rb +4 -8
- data/app/controllers/renalware/research/studies_controller.rb +70 -0
- data/app/controllers/renalware/research/study_participants_controller.rb +85 -0
- data/app/documents/renalware/hd/profile_document.rb +0 -1
- data/app/documents/renalware/hd/session_document.rb +0 -1
- data/app/helpers/renalware/application_helper.rb +5 -1
- data/app/helpers/renalware/dropdown_button_helper.rb +4 -4
- data/app/helpers/renalware/form_helper.rb +8 -0
- data/app/inputs/select_container_input.rb +15 -0
- data/app/models/concerns/renalware/accountable.rb +5 -0
- data/app/models/concerns/renalware/patients_ransack_helper.rb +6 -6
- data/app/models/renalware/admissions/consult.rb +25 -0
- data/app/models/renalware/admissions/consult_query.rb +21 -0
- data/app/models/renalware/clinical/modality_description.rb +1 -0
- data/app/models/renalware/hd/archive_yesterdays_slots_job.rb +68 -0
- data/app/models/renalware/hd/dialysate.rb +16 -0
- data/app/models/renalware/hd/diary.rb +39 -0
- data/app/models/renalware/hd/diary_slot.rb +80 -0
- data/app/models/renalware/hd/diurnal_period_code.rb +5 -0
- data/app/models/renalware/hd/find_or_create_diary_by_week_query.rb +48 -0
- data/app/models/renalware/hd/find_or_create_master_diary.rb +24 -0
- data/app/models/renalware/hd/master_diary.rb +31 -0
- data/app/models/renalware/hd/patient_listener.rb +1 -1
- data/app/models/renalware/hd/patients_dialysing_by_day_and_period_query.rb +39 -0
- data/app/models/renalware/hd/patients_dialysing_by_day_query.rb +32 -0
- data/app/models/renalware/hd/patients_dialysing_by_schedule_query.rb +26 -0
- data/app/models/renalware/hd/patients_with_unmet_preferences_query.rb +2 -2
- data/app/models/renalware/hd/preference_set.rb +2 -2
- data/app/models/renalware/hd/profile.rb +3 -1
- data/app/models/renalware/hd/schedule_definition.rb +44 -0
- data/app/models/renalware/hd/session.rb +1 -0
- data/app/models/renalware/hd/session/closed.rb +3 -2
- data/app/models/renalware/hd/session_factory.rb +2 -2
- data/app/models/renalware/hd/station.rb +1 -10
- data/app/models/renalware/hd/station_location.rb +10 -0
- data/app/models/renalware/hd/weekly_diary.rb +43 -0
- data/app/models/renalware/hospitals/unit.rb +0 -1
- data/app/models/renalware/medications/prescriptions_by_drug_type_query.rb +1 -0
- data/app/models/renalware/messaging.rb +2 -0
- data/app/models/renalware/messaging/patient.rb +2 -2
- data/app/models/renalware/patient.rb +25 -23
- data/app/models/renalware/patients/search_query.rb +7 -3
- data/app/models/renalware/patients/summary.rb +1 -0
- data/app/models/renalware/pd/revise_regime.rb +3 -1
- data/app/models/renalware/renal/patient.rb +3 -0
- data/app/models/renalware/renal/registry/preflight_checks/deaths_query.rb +41 -0
- data/app/models/renalware/renal/registry/preflight_checks/patients_query.rb +65 -0
- data/app/models/renalware/reporting/{generate_audit_json.rb → fetch_audit_json.rb} +10 -9
- data/app/models/renalware/research.rb +7 -0
- data/app/models/renalware/research/study.rb +19 -0
- data/app/models/renalware/research/study_participant.rb +30 -0
- data/app/policies/renalware/admissions/consult_policy.rb +8 -0
- data/app/policies/renalware/hd/diary_policy.rb +6 -0
- data/app/policies/renalware/renal/registry_preflight_check_policy.rb +15 -0
- data/app/policies/renalware/research/study_participant_policy.rb +8 -0
- data/app/policies/renalware/research/study_policy.rb +8 -0
- data/app/presenters/false_class_presenter.rb +2 -0
- data/app/presenters/renalware/admissions/consult_presenter.rb +28 -0
- data/app/presenters/renalware/hd/diary_presenter.rb +77 -0
- data/app/presenters/renalware/hd/diary_slot_presenter.rb +69 -0
- data/app/presenters/renalware/hd/null_slot.rb +38 -0
- data/app/presenters/renalware/hd/patient_presenter.rb +2 -3
- data/app/presenters/renalware/hd/profile_presenter.rb +12 -10
- data/app/presenters/renalware/hd/station_presenter.rb +5 -0
- data/app/presenters/renalware/hd/unmet_preferences_presenter.rb +1 -1
- data/app/presenters/renalware/pathology/observation_presenter.rb +1 -1
- data/app/presenters/renalware/patient_presenter.rb +2 -2
- data/app/presenters/renalware/ukrdc/pathology_observation_presenter.rb +16 -0
- data/app/presenters/renalware/ukrdc/patient_presenter.rb +6 -1
- data/app/presenters/true_class_presenter.rb +2 -0
- data/app/views/renalware/accesses/plans/new.html.slim +0 -1
- data/app/views/renalware/accesses/procedures/_form.html.slim +1 -1
- data/app/views/renalware/accesses/profiles/_form.html.slim +0 -1
- data/app/views/renalware/addresses/_form.html.slim +0 -2
- data/app/views/renalware/admin/users/edit.html.slim +0 -1
- data/app/views/renalware/admin/users/index.html.slim +3 -1
- data/app/views/renalware/admissions/consults/_filters.html.slim +23 -0
- data/app/views/renalware/admissions/consults/_form.html.slim +93 -0
- data/app/views/renalware/admissions/consults/_table.html.slim +61 -0
- data/app/views/renalware/admissions/consults/edit.html.slim +6 -0
- data/app/views/renalware/admissions/consults/index.html.slim +12 -0
- data/app/views/renalware/admissions/consults/new.html.slim +6 -0
- data/app/views/renalware/admissions/requests/_create_request_link.html.slim +2 -1
- data/app/views/renalware/admissions/requests/_request.html.slim +4 -4
- data/app/views/renalware/api/ukrdc/patients/_lab_orders.xml.builder +6 -4
- data/app/views/renalware/api/ukrdc/patients/_name.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/_sending_facility.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/encounters/_hd_session.xml.builder +3 -3
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +4 -4
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_result_item.xml.builder +7 -5
- data/app/views/renalware/clinical/allergies/_new.html.slim +0 -1
- data/app/views/renalware/clinical/body_compositions/_form.html.slim +0 -1
- data/app/views/renalware/clinical/dry_weights/new.html.slim +0 -1
- data/app/views/renalware/clinical/profiles/show.html.slim +0 -1
- data/app/views/renalware/clinics/appointments/index.html.slim +4 -2
- data/app/views/renalware/clinics/visits/_filters.html.slim +0 -1
- data/app/views/renalware/clinics/visits/_table.html.slim +0 -1
- data/app/views/renalware/dashboard/bookmarks/_bookmark.html.slim +9 -6
- data/app/views/renalware/dashboard/bookmarks/_table.html.slim +2 -1
- data/app/views/renalware/deaths/index.html.slim +6 -8
- data/app/views/renalware/devise/registrations/new.html.slim +0 -1
- data/app/views/renalware/directory/people/_form.html.slim +0 -1
- data/app/views/renalware/events/events/_event.html.slim +3 -1
- data/app/views/renalware/events/events/_filters.html.slim +0 -1
- data/app/views/renalware/events/events/_form.html.slim +4 -4
- data/app/views/renalware/events/events/simple/_event.html.slim +3 -1
- data/app/views/renalware/hd/cannulation_types/edit.html.slim +1 -1
- data/app/views/renalware/hd/cannulation_types/new.html.slim +1 -1
- data/app/views/renalware/hd/current_profile/_form.html.slim +4 -3
- data/app/views/renalware/hd/dashboards/_page_actions.html.slim +6 -6
- data/app/views/renalware/hd/dialysers/_form.html.slim +0 -1
- data/app/views/renalware/hd/diaries/_page_actions.html.slim +23 -0
- data/app/views/renalware/hd/diaries/_table.html.slim +12 -0
- data/app/views/renalware/hd/diaries/_weekly_diary.html.slim +10 -0
- data/app/views/renalware/hd/diaries/edit.html.slim +58 -0
- data/app/views/renalware/hd/diaries/index.html.slim +9 -0
- data/app/views/renalware/hd/diaries/show.pdf.slim +32 -0
- data/app/views/renalware/hd/diary_slots/_form.html.slim +111 -0
- data/app/views/renalware/hd/diary_slots/_slot.html.slim +21 -0
- data/app/views/renalware/hd/diary_slots/_tab.html.slim +27 -0
- data/app/views/renalware/hd/diary_slots/create.js.erb +11 -0
- data/app/views/renalware/hd/diary_slots/destroy.js.erb +11 -0
- data/app/views/renalware/hd/diary_slots/edit.html.slim +26 -0
- data/app/views/renalware/hd/diary_slots/new.html.slim +12 -0
- data/app/views/renalware/hd/diary_slots/new.js.erb +6 -0
- data/app/views/renalware/hd/diary_slots/show.js.erb +5 -0
- data/app/views/renalware/hd/diary_slots/update.js.erb +11 -0
- data/app/views/renalware/hd/historical_profiles/_summary.html.slim +0 -1
- data/app/views/renalware/hd/mdm_patients/_filters.html.slim +2 -2
- data/app/views/renalware/hd/mdm_patients/_patient.html.slim +3 -4
- data/app/views/renalware/hd/mdm_patients/_table.html.slim +4 -6
- data/app/views/renalware/hd/preference_sets/_form.html.slim +5 -4
- data/app/views/renalware/hd/preference_sets/_summary.html.slim +1 -1
- data/app/views/renalware/hd/sessions/_form.html.slim +1 -2
- data/app/views/renalware/hd/sessions/_show.html.slim +2 -1
- data/app/views/renalware/hd/sessions/dna/_row.html.slim +0 -1
- data/app/views/renalware/hd/stations/_form.html.slim +3 -1
- data/app/views/renalware/hd/stations/_station.html.slim +1 -1
- data/app/views/renalware/hd/stations/index.html.slim +0 -1
- data/app/views/renalware/hd/unmet_preferences/_filters.html.slim +2 -2
- data/app/views/renalware/hd/unmet_preferences/_table.html.slim +2 -2
- data/app/views/renalware/hospitals/units/_form.html.slim +0 -1
- data/app/views/renalware/hospitals/units/index.html.slim +16 -13
- data/app/views/renalware/letters/contacts/index.js.erb +0 -1
- data/app/views/renalware/letters/electronic_receipts/_table.html.slim +10 -6
- data/app/views/renalware/letters/electronic_receipts/sent.html.slim +9 -4
- data/app/views/renalware/letters/formatted_letters/_letter.html.slim +0 -3
- data/app/views/renalware/letters/letters/_actions.html.slim +0 -1
- data/app/views/renalware/letters/letters/_form.html.slim +1 -1
- data/app/views/renalware/letters/letters/_main_recipient.html.slim +0 -1
- data/app/views/renalware/letters/letters/_preview.html.slim +0 -1
- data/app/views/renalware/mdm/_top_navigation.html.slim +0 -1
- data/app/views/renalware/mdm_patients/_patient.html.slim +2 -2
- data/app/views/renalware/mdm_patients/_table.html.slim +1 -1
- data/app/views/renalware/medications/prescriptions/index.pdf.slim +0 -2
- data/app/views/renalware/messaging/internal/messages/_form.html.slim +1 -1
- data/app/views/renalware/messaging/internal/receipts/_receipt.html.slim +7 -9
- data/app/views/renalware/messaging/internal/receipts/_sent_receipt.html.slim +5 -2
- data/app/views/renalware/messaging/internal/receipts/_sent_table.html.slim +1 -0
- data/app/views/renalware/messaging/internal/receipts/_table.html.slim +3 -3
- data/app/views/renalware/messaging/internal/receipts/sent.html.slim +0 -1
- data/app/views/renalware/modalities/reasons/index.html.slim +0 -1
- data/app/views/renalware/navigation/_mdms.html.slim +0 -1
- data/app/views/renalware/navigation/_patients_admin.html.slim +6 -10
- data/app/views/renalware/navigation/_renal.html.slim +3 -0
- data/app/views/renalware/navigation/_sign_out.html.slim +0 -1
- data/app/views/renalware/pathology/requests/requests/create.pdf.slim +0 -1
- data/app/views/renalware/pathology/requests/requests/request_form/_manual_form_patient.html.slim +0 -1
- data/app/views/renalware/patients/_mini_profile.html.slim +0 -1
- data/app/views/renalware/patients/_search_form.html.slim +1 -1
- data/app/views/renalware/patients/alerts/_form.html.slim +1 -1
- data/app/views/renalware/patients/bookmarks/_delete.html.slim +3 -4
- data/app/views/renalware/patients/clinical_summaries/_problems.html.slim +0 -1
- data/app/views/renalware/patients/clinical_summaries/show.html.slim +0 -1
- data/app/views/renalware/patients/patients/_form.html.slim +3 -2
- data/app/views/renalware/patients/patients/_patient.html.slim +1 -5
- data/app/views/renalware/patients/patients/_table.html.slim +1 -2
- data/app/views/renalware/patients/patients/show/_hospital_numbers.html.slim +0 -1
- data/app/views/renalware/patients/patients/show/_patient_demographics.html.slim +0 -2
- data/app/views/renalware/patients/primary_care_physician/_form.html.slim +2 -1
- data/app/views/renalware/patients/primary_care_physician/edit.html.slim +3 -5
- data/app/views/renalware/patients/primary_care_physicians/edit.html.slim +1 -1
- data/app/views/renalware/patients/primary_care_physicians/new.html.slim +1 -1
- data/app/views/renalware/patients/worryboard/_table.html.slim +2 -2
- data/app/views/renalware/patients/worryboard/_worry.html.slim +2 -5
- data/app/views/renalware/pd/_apd_regimes.html.slim +0 -1
- data/app/views/renalware/pd/_capd_regimes.html.slim +0 -1
- data/app/views/renalware/pd/_exit_site_infections.html.slim +0 -1
- data/app/views/renalware/pd/_peritonitis_episodes.html.slim +0 -1
- data/app/views/renalware/pd/_pet_adequacies.html.slim +0 -1
- data/app/views/renalware/pd/assessments/show.html.slim +13 -13
- data/app/views/renalware/pd/dashboards/show/_page_actions.html.slim +7 -7
- data/app/views/renalware/pd/regimes/show.html.slim +0 -1
- data/app/views/renalware/problems/notes/form.js.erb +0 -1
- data/app/views/renalware/problems/problems/_current_list.html.slim +0 -1
- data/app/views/renalware/renal/aki_alerts/edit.html.slim +2 -3
- data/app/views/renalware/renal/profiles/_form.html.slim +2 -6
- data/app/views/renalware/renal/profiles/edit.html.slim +9 -0
- data/app/views/renalware/renal/registry_preflight_checks/_navigation.html.slim +3 -0
- data/app/views/renalware/renal/registry_preflight_checks/_table.html.slim +20 -0
- data/app/views/renalware/renal/registry_preflight_checks/deaths.html.slim +4 -0
- data/app/views/renalware/renal/registry_preflight_checks/patients.html.slim +4 -0
- data/app/views/renalware/reporting/audits/show.html.slim +3 -5
- data/app/views/renalware/research/studies/_form.html.slim +9 -0
- data/app/views/renalware/research/studies/edit.html.slim +5 -0
- data/app/views/renalware/research/studies/index.html.slim +32 -0
- data/app/views/renalware/research/studies/new.html.slim +5 -0
- data/app/views/renalware/research/studies/show.html.slim +19 -0
- data/app/views/renalware/research/study_participants/_form.html.slim +45 -0
- data/app/views/renalware/research/study_participants/_table.html.slim +32 -0
- data/app/views/renalware/research/study_participants/create.js.erb +3 -0
- data/app/views/renalware/research/study_participants/edit.html.slim +1 -0
- data/app/views/renalware/research/study_participants/index.html.slim +25 -0
- data/app/views/renalware/research/study_participants/new.html.slim +1 -0
- data/app/views/renalware/research/study_participants/new.js.erb +4 -0
- data/app/views/renalware/research/study_participants/update.js.erb +3 -0
- data/app/views/renalware/shared/documents/_age.html.slim +1 -1
- data/app/views/renalware/shared/documents/_blood_group.html.slim +1 -1
- data/app/views/renalware/shared/documents/_blood_pressure.html.slim +1 -1
- data/app/views/renalware/shared/documents/_dated_test.html.slim +1 -1
- data/app/views/renalware/transplants/donor_dashboards/show.html.slim +0 -1
- data/app/views/renalware/transplants/donor_followups/show.html.slim +0 -1
- data/app/views/renalware/transplants/donor_operations/_form.html.slim +0 -1
- data/app/views/renalware/transplants/donor_operations/_list.html.slim +0 -2
- data/app/views/renalware/transplants/donor_stages/_list.html.slim +0 -1
- data/app/views/renalware/transplants/donor_workups/_form.html.slim +0 -1
- data/app/views/renalware/transplants/recipient_dashboards/_page_actions.html.slim +3 -3
- data/app/views/renalware/transplants/recipient_followups/_form.html.slim +0 -1
- data/app/views/renalware/transplants/recipient_operations/_form.html.slim +0 -1
- data/app/views/renalware/transplants/recipient_operations/_list.html.slim +0 -2
- data/app/views/renalware/transplants/recipient_operations/_operation.html.slim +0 -1
- data/config/initializers/application_controller_renderer.rb +1 -1
- data/config/initializers/backtrace_silencers.rb +1 -1
- data/config/initializers/null_object.rb +2 -0
- data/config/locales/renalware/admissions/consults.en.yml +29 -0
- data/config/locales/renalware/dashboard/dashboard.yml +1 -0
- data/config/locales/renalware/hd/diary_slots.en.yml +13 -0
- data/config/locales/renalware/hd/mdm_patients.yml +1 -2
- data/config/locales/renalware/hd/preference_set.yml +0 -10
- data/config/locales/renalware/hd/profile.yml +2 -14
- data/config/locales/renalware/hd/session.en.yml +1 -7
- data/config/locales/renalware/hospitals/unit.yml +0 -1
- data/config/locales/renalware/mdm.yml +1 -1
- data/config/locales/renalware/messaging/internal/messages.en.yml +1 -0
- data/config/locales/renalware/navigation/renal.en.yml +2 -0
- data/config/locales/renalware/renal/registry.en.yml +12 -0
- data/config/locales/renalware/research/study_participant.en.yml +11 -0
- data/config/routes.rb +31 -1
- data/db/migrate/20170831082043_create_hd_diaries.rb +57 -0
- data/db/migrate/20170831084331_create_hd_diary_slots.rb +36 -0
- data/db/migrate/20170831142819_enable_crosstab_extension.rb +9 -0
- data/db/migrate/20170915090544_create_hd_station_locations.rb +12 -0
- data/db/migrate/20170915115228_add_schedule_diurnal_period_id_to_hd_profiles.rb +52 -0
- data/db/migrate/20170916121019_remove_number_of_hd_stations_from_hospital_units.rb +5 -0
- data/db/migrate/20170917185426_add_indexes_to_diary_slots.rb +19 -0
- data/db/migrate/20171004092235_create_hd_dialysates.rb +13 -0
- data/db/migrate/20171004110909_add_dialysate_id_to_profile_and_session.rb +9 -0
- data/db/migrate/20171012110133_create_research_studies.rb +22 -0
- data/db/migrate/20171012143050_create_research_study_participants.rb +30 -0
- data/db/migrate/20171013145849_set_patients_secure_id.rb +17 -0
- data/db/migrate/20171016152223_add_index_to_diary_slots.rb +17 -0
- data/db/migrate/20171017132738_add_unique_indexes_to_local_patient_ids.rb +13 -0
- data/db/migrate/20171017171625_update_hd_overall_audit_view.rb +8 -0
- data/db/migrate/20171101121130_create_function_to_render_audit_view_as_json.rb +38 -0
- data/db/migrate/20171101162244_create_consults.rb +24 -0
- data/db/migrate/20171106100216_create_pd_audit_view.rb +5 -0
- data/db/seeds/default/hd/{hd_cannulation_types.csv → cannulation_types.csv} +0 -0
- data/db/seeds/default/hd/cannulation_types.rb +1 -1
- data/db/seeds/default/hd/{hd_dialysers.csv → dialysers.csv} +0 -0
- data/db/seeds/default/hd/dialysers.rb +1 -1
- data/db/seeds/default/hd/seeds.rb +0 -1
- data/db/seeds/default/modalities/descriptions.rb +0 -13
- data/db/seeds/default/pathology/seeds.rb +0 -3
- data/db/seeds/default/reporting/audits.yml +265 -49
- data/db/views/reporting_anaemia_audit_v01.sql +1 -1
- data/db/views/reporting_hd_overall_audit_v05.sql +13 -0
- data/db/views/reporting_pd_audit_v01.sql +26 -0
- data/lib/dropdown_button_item.rb +51 -0
- data/lib/renalware/configuration.rb +1 -0
- data/lib/renalware/engine.rb +1 -0
- data/lib/renalware/version.rb +1 -1
- data/lib/renalware/week_period.rb +58 -0
- data/spec/factories/accesses/patients.rb +1 -1
- data/spec/factories/accesses/plans.rb +1 -1
- data/spec/factories/accesses/plans_types.rb +1 -1
- data/spec/factories/accesses/procedures.rb +1 -1
- data/spec/factories/accesses/profiles.rb +1 -1
- data/spec/factories/accesses/sites.rb +1 -1
- data/spec/factories/accesses/types.rb +1 -1
- data/spec/factories/admissions/consults.rb +7 -0
- data/spec/factories/admissions/request_reasons.rb +1 -1
- data/spec/factories/admissions/requests.rb +1 -1
- data/spec/factories/clinical/allergies.rb +1 -1
- data/spec/factories/clinical/body_compositions.rb +1 -1
- data/spec/factories/clinical/dry_weights.rb +1 -1
- data/spec/factories/clinical/patients.rb +1 -1
- data/spec/factories/clinics/appointments.rb +1 -1
- data/spec/factories/clinics/clinic_visits.rb +1 -1
- data/spec/factories/clinics/clinics.rb +1 -1
- data/spec/factories/deaths/cause.rb +1 -1
- data/spec/factories/deaths/modality_descriptions.rb +2 -2
- data/spec/factories/directory/people.rb +1 -1
- data/spec/factories/drugs/drug.rb +1 -1
- data/spec/factories/drugs/drug_types.rb +1 -1
- data/spec/factories/events/events.rb +1 -1
- data/spec/factories/events/events_types.rb +1 -1
- data/spec/factories/hd/cannulation_types.rb +1 -1
- data/spec/factories/hd/dialysates.rb +10 -0
- data/spec/factories/hd/dialysers.rb +1 -1
- data/spec/factories/hd/diaries.rb +12 -0
- data/spec/factories/hd/diurnal_period_codes.rb +18 -0
- data/spec/factories/hd/hd_session_document.rb +3 -4
- data/spec/factories/hd/modality_descriptions.rb +1 -1
- data/spec/factories/hd/patient_statistics.rb +1 -1
- data/spec/factories/hd/patients.rb +1 -1
- data/spec/factories/hd/preference_sets.rb +2 -2
- data/spec/factories/hd/profiles.rb +2 -1
- data/spec/factories/hd/schedule_definitions.rb +20 -0
- data/spec/factories/hd/sessions.rb +2 -1
- data/spec/factories/hd/slots.rb +7 -0
- data/spec/factories/hd/station_locations.rb +6 -0
- data/spec/factories/hd/stations.rb +1 -1
- data/spec/factories/hospitals/centres.rb +1 -1
- data/spec/factories/hospitals/units.rb +1 -3
- data/spec/factories/hospitals/wards.rb +1 -1
- data/spec/factories/letters/archives.rb +1 -1
- data/spec/factories/letters/contact_descriptions.rb +1 -1
- data/spec/factories/letters/contacts.rb +1 -1
- data/spec/factories/letters/descriptions.rb +1 -1
- data/spec/factories/letters/electronic_receipts.rb +1 -1
- data/spec/factories/letters/letterheads.rb +1 -1
- data/spec/factories/letters/letters.rb +1 -1
- data/spec/factories/letters/patients.rb +1 -1
- data/spec/factories/letters/primary_care_physicians.rb +1 -1
- data/spec/factories/letters/recipients.rb +1 -1
- data/spec/factories/medications/medication_route.rb +1 -1
- data/spec/factories/medications/prescription.rb +1 -1
- data/spec/factories/medications/prescription_terminations.rb +1 -1
- data/spec/factories/medications/prescription_version.rb +1 -1
- data/spec/factories/messaging/internal/authors.rb +1 -1
- data/spec/factories/messaging/internal/messages.rb +1 -1
- data/spec/factories/messaging/internal/receipts.rb +1 -1
- data/spec/factories/messaging/internal/recipients.rb +1 -1
- data/spec/factories/messaging/patients.rb +1 -1
- data/spec/factories/modalities/modalities.rb +1 -1
- data/spec/factories/modalities/modality_descriptions.rb +1 -1
- data/spec/factories/modalities/modality_reasons.rb +1 -1
- data/spec/factories/pathology/consultant.rb +1 -1
- data/spec/factories/pathology/lab.rb +1 -1
- data/spec/factories/pathology/measurement_units.rb +1 -1
- data/spec/factories/pathology/observation_descriptions.rb +1 -1
- data/spec/factories/pathology/observation_requests.rb +1 -1
- data/spec/factories/pathology/observations.rb +1 -1
- data/spec/factories/pathology/patients.rb +1 -1
- data/spec/factories/pathology/request_descriptions.rb +1 -1
- data/spec/factories/pathology/requests/drug_category.rb +1 -1
- data/spec/factories/pathology/requests/global_rule.rb +1 -1
- data/spec/factories/pathology/requests/global_rule_set.rb +1 -1
- data/spec/factories/pathology/requests/patient_rule.rb +1 -1
- data/spec/factories/pathology/requests/request.rb +1 -1
- data/spec/factories/patients/alerts.rb +1 -1
- data/spec/factories/patients/bookmarks.rb +1 -1
- data/spec/factories/patients/ethnicities.rb +1 -1
- data/spec/factories/patients/languages.rb +1 -1
- data/spec/factories/patients/patients.rb +2 -2
- data/spec/factories/patients/practices.rb +2 -2
- data/spec/factories/patients/primary_care_physicians.rb +2 -2
- data/spec/factories/patients/religions.rb +1 -1
- data/spec/factories/patients/users.rb +1 -1
- data/spec/factories/pd/assessments.rb +1 -1
- data/spec/factories/pd/bag_types.rb +1 -1
- data/spec/factories/pd/episode_types.rb +1 -1
- data/spec/factories/pd/exit_site_infections.rb +1 -1
- data/spec/factories/pd/fluid_descriptions.rb +1 -1
- data/spec/factories/pd/infection_organisms.rb +1 -1
- data/spec/factories/pd/modality_descriptions.rb +1 -1
- data/spec/factories/pd/organism_codes.rb +1 -1
- data/spec/factories/pd/patients.rb +1 -1
- data/spec/factories/pd/pd_regimes.rb +1 -1
- data/spec/factories/pd/peritonitis_episode_type_descriptions.rb +1 -1
- data/spec/factories/pd/peritonitis_episodes.rb +1 -1
- data/spec/factories/pd/pet_adequacies.rb +1 -1
- data/spec/factories/pd/regime_bags.rb +1 -1
- data/spec/factories/pd/systems.rb +1 -1
- data/spec/factories/pd/training_sessions.rb +1 -1
- data/spec/factories/pd/training_sites.rb +1 -1
- data/spec/factories/pd/training_types.rb +1 -1
- data/spec/factories/problems/problems.rb +1 -1
- data/spec/factories/renal/aki_alert_actions.rb +1 -1
- data/spec/factories/renal/aki_alerts.rb +1 -1
- data/spec/factories/renal/patients.rb +1 -1
- data/spec/factories/renal/prd_description.rb +1 -1
- data/spec/factories/renal/profiles.rb +17 -1
- data/spec/factories/reporting/audits.rb +1 -1
- data/spec/factories/research/studies.rb +11 -0
- data/spec/factories/research/study_participants.rb +7 -0
- data/spec/factories/shared/accountable.rb +2 -2
- data/spec/factories/snippets/snippets.rb +1 -1
- data/spec/factories/snippets/users.rb +1 -1
- data/spec/factories/system/addresses.rb +1 -1
- data/spec/factories/system/countries.rb +1 -1
- data/spec/factories/system/roles.rb +1 -1
- data/spec/factories/system/templates.rb +1 -1
- data/spec/factories/system/users.rb +1 -1
- data/spec/factories/transplants/donations.rb +1 -1
- data/spec/factories/transplants/donor_stage.rb +1 -1
- data/spec/factories/transplants/donor_stage_position.rb +1 -1
- data/spec/factories/transplants/donor_stage_status.rb +1 -1
- data/spec/factories/transplants/live_donor_modality_description.rb +1 -1
- data/spec/factories/transplants/modality_descriptions.rb +1 -1
- data/spec/factories/transplants/patients.rb +1 -1
- data/spec/factories/transplants/recipient_followups.rb +1 -1
- data/spec/factories/transplants/recipient_operations.rb +1 -1
- data/spec/factories/transplants/registration_status_descriptions.rb +1 -1
- data/spec/factories/transplants/registration_statuses.rb +1 -1
- data/spec/factories/transplants/registrations.rb +1 -1
- data/spec/support/{factory_girl.rb → factory_bot.rb} +3 -3
- metadata +130 -51
- data/app/models/concerns/renalware/hd/has_schedule.rb +0 -24
- data/app/views/renalware/clinical/body_compositions/_navigation.html.slim +0 -0
- data/app/views/renalware/clinical/dry_weights/_navigation.html.slim +0 -0
- data/app/views/renalware/clinical/profiles/_navigation.html.slim +0 -0
- data/app/views/renalware/dashboard/dashboards/_navigation.html.slim +0 -0
- data/app/views/renalware/devise/registrations/_navigation.html.slim +0 -0
- data/app/views/renalware/hd/sessions/_sections_nav.html.slim +0 -0
- data/app/views/renalware/letters/letters/_navigation.html.slim +0 -4
- data/app/views/renalware/patients/primary_care_physician/_navigation.html.slim +0 -0
- data/app/views/renalware/pd/peritonitis_episodes/_navigation.html.slim +0 -7
- data/db/seeds/default/hd/diurnal_period_codes.csv +0 -4
- data/db/seeds/default/hd/diurnal_period_codes.rb +0 -13
- data/db/seeds/default/pathology/pathology_labs.csv +0 -9
- data/db/seeds/default/pathology/pathology_labs.rb +0 -12
- data/db/seeds/default/pathology/pathology_observation_descriptions.csv +0 -1741
- data/db/seeds/default/pathology/pathology_observation_descriptions.rb +0 -16
- data/db/seeds/default/pathology/pathology_request_descriptions.csv +0 -196
- data/db/seeds/default/pathology/pathology_request_descriptions.rb +0 -27
- data/db/structure.sql +0 -9775
- data/vendor/assets/fonts/foundation-icons.eot +0 -0
- data/vendor/assets/fonts/foundation-icons.scss +0 -594
- data/vendor/assets/fonts/foundation-icons.svg +0 -970
- data/vendor/assets/fonts/foundation-icons.ttf +0 -0
- data/vendor/assets/fonts/foundation-icons.woff +0 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
require_dependency "renalware/admissions"
|
2
|
+
|
3
|
+
module Renalware
|
4
|
+
module Admissions
|
5
|
+
class Consult < ApplicationRecord
|
6
|
+
include Accountable
|
7
|
+
extend Enumerize
|
8
|
+
acts_as_paranoid
|
9
|
+
validates :patient_id, presence: true
|
10
|
+
validates :hospital_unit_id, presence: true
|
11
|
+
validates :hospital_ward_id, presence: true
|
12
|
+
validates :started_on, presence: true
|
13
|
+
validates :description, presence: true
|
14
|
+
validates :consult_type, presence: true
|
15
|
+
|
16
|
+
belongs_to :patient
|
17
|
+
belongs_to :hospital_unit, class_name: "Hospitals::Unit"
|
18
|
+
belongs_to :hospital_ward, class_name: "Hospitals::Ward"
|
19
|
+
belongs_to :seen_by, class_name: "User"
|
20
|
+
|
21
|
+
enumerize :transfer_priority, in: %i(unknown necessary desirable potential unnecessary)
|
22
|
+
enumerize :aki_risk, in: %i(yes no unknown)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_dependency "renalware/admissions"
|
2
|
+
|
3
|
+
module Renalware
|
4
|
+
module Admissions
|
5
|
+
class ConsultQuery
|
6
|
+
attr_reader :query
|
7
|
+
|
8
|
+
def initialize(query = {})
|
9
|
+
@query = query
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
search.result
|
14
|
+
end
|
15
|
+
|
16
|
+
def search
|
17
|
+
@search ||= Consult.order(created_at: :desc).ransack(query)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "renalware/hd"
|
2
|
+
|
3
|
+
# A cron job creates this delayed job, which does the following:
|
4
|
+
# For all Weekly Diaries in the past, plus this week
|
5
|
+
# for each day that is in the past
|
6
|
+
# mark any slots in the weekly diary as archived
|
7
|
+
# and where the weekly diary is inheriting slots from the master diary
|
8
|
+
# create corresponding slots in the weekly diary (ie migrate thos slots from master to weekly)
|
9
|
+
# and archive them.
|
10
|
+
# Not slots before the current day (or the up_until: arg) should be touched
|
11
|
+
#
|
12
|
+
#
|
13
|
+
# OK we have a problem,
|
14
|
+
# If last week there was no weekly diary created... then there is nothing to archive if eg today is
|
15
|
+
# Monday.
|
16
|
+
# So really whats the query for finding slots to archive?
|
17
|
+
# We need to really always inner join onto weekly diaryies, and within tose for their slots
|
18
|
+
# select unarchved onces in the past.
|
19
|
+
# So we MUST always have weekly diaries for every possible week and not rely om a user working te UI
|
20
|
+
# to create these JIT - because if they don't, unless we have a fn to creatae missing diaries,
|
21
|
+
# (from which date?) then we can't query
|
22
|
+
# So either
|
23
|
+
# - seed next 10 years (520 per unit)
|
24
|
+
# - have a fn to generate missing diaries - might be better and safer in the long run?
|
25
|
+
# - Otherwise after 5 or 10 years or whatever its bound to have cased a problem.
|
26
|
+
|
27
|
+
module Renalware
|
28
|
+
module HD
|
29
|
+
class ArchiveYesterdaysSlotsJob < ApplicationJob
|
30
|
+
attr_reader :up_until
|
31
|
+
|
32
|
+
# :reek:UtilityFunction
|
33
|
+
def perform(up_until: nil)
|
34
|
+
@up_until = up_until&.to_date
|
35
|
+
@up_until ||= (Time.zone.today - 1.day)
|
36
|
+
|
37
|
+
diary = Diary.find_by(year: @up_until.year, week_number: @up_until.cweek)
|
38
|
+
return unless diary
|
39
|
+
|
40
|
+
diary
|
41
|
+
.slots
|
42
|
+
.unarchived
|
43
|
+
.where(day_of_week: @up_until.cwday)
|
44
|
+
.update_all(archived: true, archived_at: Time.zone.now)
|
45
|
+
# DiarySlot
|
46
|
+
# .unarchived
|
47
|
+
# .joins(:diary)
|
48
|
+
# .where(hd_diaries: { year: up_until.year, week_number: up_until.cweek)
|
49
|
+
|
50
|
+
# .update_all(archived: true, archived_at: Time.zone.now)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def create_missing_weekly_diaries
|
56
|
+
# intering query
|
57
|
+
# basic implemenraiton
|
58
|
+
# select all weeklydiaries pluch year week from installation start date??? to now
|
59
|
+
# loop through
|
60
|
+
# diary year 2017 week 1
|
61
|
+
# MISSING diary year 2017 week 1 - so create
|
62
|
+
# diary year 2017 week 3
|
63
|
+
# select
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
module Renalware
|
4
|
+
module HD
|
5
|
+
class Dialysate < ApplicationRecord
|
6
|
+
acts_as_paranoid
|
7
|
+
validates :name, presence: true, uniqueness: true
|
8
|
+
validates :sodium_content, presence: true
|
9
|
+
validates :sodium_content_uom, presence: true
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
# A Diary is the schedule of HD Station/Patients assignments for one week for a particular unit.
|
4
|
+
# A Diary is split into Periods (eg. am pm eve), and each Period has a matrix of slots
|
5
|
+
# Imagine Days eg 1 to 6 on the X axis and Stations on the Y axis, and into each 'slot' we
|
6
|
+
# put a patient.
|
7
|
+
# A patient can only be in one slot in any period.
|
8
|
+
#
|
9
|
+
# Do not create instances of this class explicity, always use the STI sub classes eg MasterDiary.
|
10
|
+
module Renalware
|
11
|
+
module HD
|
12
|
+
class Diary < ApplicationRecord
|
13
|
+
include Accountable
|
14
|
+
|
15
|
+
has_many :slots, class_name: "Renalware::HD::DiarySlot"
|
16
|
+
has_many :patients, through: :slots, class_name: "Renalware::HD::Patient"
|
17
|
+
validates :hospital_unit_id, presence: true
|
18
|
+
validates :master, inclusion: { in: [true, false], allow_nil: true }
|
19
|
+
composed_of :week,
|
20
|
+
mapping: [%w(week_number week_number), %w(year year)],
|
21
|
+
constructor: lambda{ |week_number, year|
|
22
|
+
WeekPeriod.new(week_number: week_number, year: year)
|
23
|
+
}
|
24
|
+
|
25
|
+
def self.policy_class
|
26
|
+
DiaryPolicy
|
27
|
+
end
|
28
|
+
|
29
|
+
# Searchs the object graph rather than a SQL search
|
30
|
+
def slot_for(diurnal_period_code_id, station_id, day_of_week)
|
31
|
+
slots.find do |slot|
|
32
|
+
slot.diurnal_period_code_id == diurnal_period_code_id &&
|
33
|
+
slot.station_id == station_id &&
|
34
|
+
slot.day_of_week == day_of_week
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
module Renalware
|
4
|
+
module HD
|
5
|
+
class DiarySlot < ApplicationRecord
|
6
|
+
# Changing to_ary from private to public here is a hack required to remove a SimpleDelgator
|
7
|
+
# warning in eg Renalware::HD::WeeklyDiary::WeeklySlotDecorator:
|
8
|
+
#
|
9
|
+
# `respond_to?': delegator does not forward private method #to_ary
|
10
|
+
#
|
11
|
+
# Yielding a slot from DiaryPresenter to the view seems to want to call #to_ary on it, (have
|
12
|
+
# not looked into why) and as the slot is wrapped in a decorator using SimpleDelegator,
|
13
|
+
# SimpleDelegatr complains it can't delegate to a private method.
|
14
|
+
# An alternative is to define the following in each Slot decorator
|
15
|
+
#
|
16
|
+
# def respond_to?(method, include_private = false)
|
17
|
+
# return false if method == :to_ary
|
18
|
+
# super
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# or to use method_missnig instead of SimpleDelegator in Slot Decorators.
|
22
|
+
#
|
23
|
+
public :to_ary
|
24
|
+
|
25
|
+
# Virtual attribute used on a form to determine what action as preformed on the slot
|
26
|
+
attr_accessor :change_type
|
27
|
+
|
28
|
+
include Accountable
|
29
|
+
belongs_to :diary, class_name: "Renalware::HD::Diary"
|
30
|
+
belongs_to :patient
|
31
|
+
belongs_to :station, class_name: "Renalware::HD::Station"
|
32
|
+
belongs_to :diurnal_period_code
|
33
|
+
|
34
|
+
validates :diary, presence: true
|
35
|
+
validates :patient, presence: true
|
36
|
+
validates :station, presence: true
|
37
|
+
validates :diurnal_period_code, presence: true
|
38
|
+
validates :day_of_week, presence: true, inclusion: { in: 1..7 }
|
39
|
+
|
40
|
+
scope :weekly, -> { joins(:diary).where(hd_diaries: { master: false }) }
|
41
|
+
scope :archived, ->{ weekly.where(archived: true) }
|
42
|
+
scope :unarchived, ->{ weekly.where(archived: false) }
|
43
|
+
|
44
|
+
# A patient can only be assigned to one station in any period (e.g. am)/day combination
|
45
|
+
# for a diary. I.e. they can't be on two stations on Monday morning.
|
46
|
+
validates :patient_id,
|
47
|
+
uniqueness: { scope: [:diary, :diurnal_period_code, :day_of_week] }
|
48
|
+
|
49
|
+
# Scoped to a diary, the combination of day + station + diurnal_period is unique
|
50
|
+
validates :diurnal_period_code_id, uniqueness: { scope: [:diary, :station_id, :day_of_week] }
|
51
|
+
|
52
|
+
delegate :id, to: :diary, prefix: true
|
53
|
+
|
54
|
+
def self.policy_class
|
55
|
+
DiaryPolicy
|
56
|
+
end
|
57
|
+
|
58
|
+
def on_master_diary?
|
59
|
+
diary&.master?
|
60
|
+
end
|
61
|
+
|
62
|
+
def description
|
63
|
+
period = diurnal_period_code.code.upcase # e.g. AM
|
64
|
+
if diary.master
|
65
|
+
"Recurring every #{day_of_week_name} #{period}"
|
66
|
+
else
|
67
|
+
"This week only on #{day_of_week_name} #{period}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def day_of_week_name
|
72
|
+
Time::DAYS_INTO_WEEK.keys[day_of_week - 1].capitalize
|
73
|
+
end
|
74
|
+
|
75
|
+
def cell_id
|
76
|
+
"#{diurnal_period_code&.id}-#{station&.id}-#{day_of_week}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
require "renalware/week_period"
|
3
|
+
##
|
4
|
+
# Returns a hospital unit's diary for the requested week (passed to #new as a WeekPeriod
|
5
|
+
# value object).
|
6
|
+
#
|
7
|
+
module Renalware
|
8
|
+
module HD
|
9
|
+
class FindOrCreateDiaryByWeekQuery
|
10
|
+
attr_reader :unit_id, :period, :by, :relation
|
11
|
+
|
12
|
+
def initialize(unit_id:, week_period:, by:, relation: WeeklyDiary.all)
|
13
|
+
@relation = relation
|
14
|
+
@period = week_period
|
15
|
+
@unit_id = unit_id
|
16
|
+
@by = by
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
find_or_create_diary
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Find the diary for the current unit/week/year, or, if for example if a user wants to fill
|
26
|
+
# next week's diary and it does not yet exist, create it
|
27
|
+
# NB we _always_ return a diary from this method - whether it is found or built just-in-time,
|
28
|
+
def find_or_create_diary
|
29
|
+
attrs = {
|
30
|
+
hospital_unit_id: unit_id,
|
31
|
+
week_number: period.week_number,
|
32
|
+
year: period.year,
|
33
|
+
master: false
|
34
|
+
}
|
35
|
+
relation.find_by(**attrs) || build_diary(**attrs)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Create a new Weekly diary for the current week/year/unit
|
39
|
+
# Add in DiaryPeriods for each currently defined diurnal period eg am pm eve
|
40
|
+
def build_diary(attrs)
|
41
|
+
master_diary = FindOrCreateMasterDiary.for_unit(unit_id, by)
|
42
|
+
diary = WeeklyDiary.create!(**attrs, by: by, master_diary: master_diary)
|
43
|
+
# Reload the diary using the supplied relation (might be egager_loads etc)
|
44
|
+
relation.find(diary.id)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Renalware
|
2
|
+
module HD
|
3
|
+
class FindOrCreateMasterDiary
|
4
|
+
attr_reader :unit_id, :user
|
5
|
+
|
6
|
+
def self.for_unit(unit_id, user)
|
7
|
+
new(unit_id, user).call
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(unit_id, user)
|
11
|
+
@unit_id = unit_id
|
12
|
+
@user = user
|
13
|
+
end
|
14
|
+
|
15
|
+
# TODO: !alwasy suing first :0)
|
16
|
+
def call
|
17
|
+
MasterDiary.find_or_initialize_by(hospital_unit_id: unit_id).tap do |master|
|
18
|
+
master.by = user
|
19
|
+
master.save!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
module Renalware
|
4
|
+
module HD
|
5
|
+
class MasterDiary < Diary
|
6
|
+
|
7
|
+
# Overwrite the existing master attribute to ensure it defaults to true
|
8
|
+
attribute :master, :boolean, default: true
|
9
|
+
validates :hospital_unit_id, uniqueness: true
|
10
|
+
has_many :weekly_diaries, class_name: "Renalware::HD::WeeklyDiary"
|
11
|
+
# While out DB constraints could check for the string "Renalware::HD::MasterDiary" in the type
|
12
|
+
# column, this feels a bit fragile, so instead a MasterDiary must have a corresponding
|
13
|
+
# master = TRUE column
|
14
|
+
validates :master, inclusion: { in: [true], allow_nil: false }
|
15
|
+
|
16
|
+
class MasterSlotDecorator < SimpleDelegator
|
17
|
+
def master?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def decorate_slot(slot)
|
23
|
+
MasterSlotDecorator.new(slot)
|
24
|
+
end
|
25
|
+
|
26
|
+
def slot_for(*args)
|
27
|
+
(slot = super) && decorate_slot(slot)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
# Find for example HD Patients who according to their HD Profile dialyse on Monday PM
|
4
|
+
# Example usage in that instance:
|
5
|
+
# PatientsDialysingByDayAndPeriodQuery.new(1, "am").call
|
6
|
+
module Renalware
|
7
|
+
module HD
|
8
|
+
class PatientsDialysingByDayAndPeriodQuery
|
9
|
+
attr_reader :hospital_unit_id, :day_of_week, :period_code
|
10
|
+
|
11
|
+
def initialize(hospital_unit_id, day_of_week, period_code)
|
12
|
+
@hospital_unit_id = hospital_unit_id
|
13
|
+
@day_of_week = day_of_week
|
14
|
+
@period_code = period_code
|
15
|
+
end
|
16
|
+
|
17
|
+
def call
|
18
|
+
PatientsDialysingByScheduleQuery.new(
|
19
|
+
hospital_unit_id,
|
20
|
+
schedule_definition_ids
|
21
|
+
).call
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Find the first schedule having day_of_week in the pg days[] array (e.g. [2,4,6] if
|
27
|
+
# day_of_week is 2 (Tuesday) AND matching the period_code ie having the correct diurnal
|
28
|
+
# period code e.g. AM.
|
29
|
+
# Note
|
30
|
+
def schedule_definition_ids
|
31
|
+
HD::ScheduleDefinition
|
32
|
+
.eager_load(:diurnal_period)
|
33
|
+
.merge(Renalware::HD::DiurnalPeriodCode.for(period_code))
|
34
|
+
.merge(Renalware::HD::ScheduleDefinition.for_day_of_week(day_of_week))
|
35
|
+
.pluck(:id)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_dependency "renalware/hd"
|
2
|
+
|
3
|
+
# Find for example HD Patients who according to their HD Profile dialyse on Monday
|
4
|
+
# at a particular unit
|
5
|
+
# Example usage in that instance (1 == Monday):
|
6
|
+
# PatientsDialysingByDayQuery.new(unit_id, 1).call
|
7
|
+
#
|
8
|
+
module Renalware
|
9
|
+
module HD
|
10
|
+
class PatientsDialysingByDayQuery
|
11
|
+
attr_reader :hospital_unit_id, :day_of_week
|
12
|
+
|
13
|
+
def initialize(hospital_unit_id, day_of_week)
|
14
|
+
@hospital_unit_id = hospital_unit_id
|
15
|
+
@day_of_week = day_of_week
|
16
|
+
end
|
17
|
+
|
18
|
+
def call
|
19
|
+
PatientsDialysingByScheduleQuery.new(
|
20
|
+
hospital_unit_id,
|
21
|
+
schedule_definition_ids
|
22
|
+
).call
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def schedule_definition_ids
|
28
|
+
Renalware::HD::ScheduleDefinition.for_day_of_week(day_of_week).pluck(:id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|