renalware-core 2.0.113 → 2.0.115

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.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -2
  3. data/app/assets/javascripts/renalware/application.js.erb +0 -1
  4. data/app/assets/javascripts/renalware/feed_only_inputs.js.erb +26 -0
  5. data/app/assets/javascripts/renalware/feeds.js +50 -0
  6. data/app/assets/javascripts/renalware/person_ajax_search.js +43 -0
  7. data/app/assets/stylesheets/renalware/application.scss +0 -1
  8. data/app/assets/stylesheets/renalware/modules/_admin.scss +7 -0
  9. data/app/assets/stylesheets/renalware/modules/_pathology.scss +1 -1
  10. data/app/assets/stylesheets/renalware/modules/_patients.scss +6 -0
  11. data/app/assets/stylesheets/renalware/modules/_snippets.scss +2 -2
  12. data/app/assets/stylesheets/renalware/partials/_forms.scss +5 -1
  13. data/app/assets/stylesheets/renalware/partials/_layout.scss +4 -0
  14. data/app/{views/renalware/patients/_side_menu.html.slim → components/renalware/patients/side_menu_component.html.slim} +0 -0
  15. data/app/components/renalware/patients/side_menu_component.rb +18 -0
  16. data/app/controllers/renalware/clinical/body_compositions_controller.rb +6 -0
  17. data/app/controllers/renalware/feeds/hl7_test_messages_controller.rb +60 -0
  18. data/app/controllers/renalware/hd/mdm_patients_controller.rb +16 -6
  19. data/app/controllers/renalware/hd/scheduling/diaries_controller.rb +91 -0
  20. data/app/controllers/renalware/hd/scheduling/diary_slots_controller.rb +169 -0
  21. data/app/controllers/renalware/hd/session_forms/batches_controller.rb +1 -1
  22. data/app/controllers/renalware/pathology/observation_requests_controller.rb +23 -4
  23. data/app/controllers/renalware/pathology/requests/requests_controller.rb +0 -4
  24. data/app/controllers/renalware/patients/abridgements_controller.rb +39 -0
  25. data/app/controllers/renalware/pd/regimes_controller.rb +26 -0
  26. data/app/controllers/renalware/problems/problems_controller.rb +2 -2
  27. data/app/helpers/renalware/application_helper.rb +9 -0
  28. data/app/helpers/renalware/article_helper.rb +18 -0
  29. data/app/helpers/renalware/form_helper.rb +3 -2
  30. data/app/helpers/renalware/users_helper.rb +5 -1
  31. data/app/javascript/controllers/clipboard_controller.js +16 -0
  32. data/app/javascript/packs/renalware_core.js +20 -0
  33. data/app/jobs/feed_job.rb +1 -3
  34. data/app/jobs/hl7_message_example.yml +2 -2
  35. data/app/models/renalware/feeds/files/practice_memberships/import_job.rb +3 -0
  36. data/app/models/renalware/feeds/files/primary_care_physicians/import_job.rb +2 -0
  37. data/app/models/renalware/feeds/hl7_message.rb +57 -6
  38. data/app/models/renalware/feeds/hl7_test_form.rb +10 -0
  39. data/app/models/renalware/feeds/hl7_test_message.rb +11 -0
  40. data/app/models/renalware/feeds/message_parser.rb +6 -2
  41. data/app/models/renalware/feeds/message_processor.rb +44 -32
  42. data/app/models/renalware/feeds/persist_message.rb +9 -3
  43. data/app/models/renalware/feeds.rb +2 -0
  44. data/app/models/renalware/hd/scheduling/archive_arguments.rb +19 -0
  45. data/app/models/renalware/hd/scheduling/diary.rb +54 -0
  46. data/app/models/renalware/hd/scheduling/diary_housekeeping_job.rb +84 -0
  47. data/app/models/renalware/hd/scheduling/diary_range.rb +69 -0
  48. data/app/models/renalware/hd/scheduling/diary_slot.rb +88 -0
  49. data/app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb +52 -0
  50. data/app/models/renalware/hd/scheduling/find_or_create_master_diary.rb +27 -0
  51. data/app/models/renalware/hd/scheduling/master_diary.rb +35 -0
  52. data/app/models/renalware/hd/scheduling/weekly_diary.rb +47 -0
  53. data/app/models/renalware/pathology/message_listener.rb +2 -2
  54. data/app/models/renalware/pathology/requests/global_rule/latest_crf_older_than_weeks.rb +38 -0
  55. data/app/models/renalware/pathology/requests/global_rule/patient_is_diabetic.rb +1 -1
  56. data/app/models/renalware/patient.rb +1 -1
  57. data/app/models/renalware/patients/abridgement.rb +18 -0
  58. data/app/models/renalware/patients/abridgement_search_form.rb +12 -0
  59. data/app/models/renalware/patients/ingestion/command.rb +25 -0
  60. data/app/models/renalware/patients/ingestion/command_factory.rb +135 -0
  61. data/app/models/renalware/patients/ingestion/commands/add_or_update_patient.rb +65 -0
  62. data/app/models/renalware/patients/ingestion/message_listener.rb +21 -0
  63. data/app/models/renalware/patients/ingestion/message_mapper.rb +26 -0
  64. data/app/models/renalware/patients/ingestion/message_mappers/patient.rb +73 -0
  65. data/app/models/renalware/patients/ingestion/update_master_patient_index.rb +60 -0
  66. data/app/models/renalware/patients/ingestion/update_master_patient_index_job.rb.dead +20 -0
  67. data/app/models/renalware/patients.rb +4 -3
  68. data/app/models/renalware/problems/problem.rb +6 -2
  69. data/app/models/renalware/ukrdc/incoming/paths.rb +6 -7
  70. data/app/policies/renalware/admin/devops_policy.rb +18 -0
  71. data/app/policies/renalware/hd/{diary_policy.rb → scheduling/diary_policy.rb} +3 -1
  72. data/app/presenters/renalware/clinical/profile_presenter.rb +2 -1
  73. data/app/presenters/renalware/directory/person_auto_complete_presenter.rb +1 -1
  74. data/app/presenters/renalware/hd/scheduling/diary_presenter.rb +84 -0
  75. data/app/presenters/renalware/hd/scheduling/diary_slot_presenter.rb +74 -0
  76. data/app/presenters/renalware/hd/scheduling/null_slot.rb +42 -0
  77. data/app/presenters/renalware/pd/dashboard_presenter.rb +3 -2
  78. data/app/views/renalware/accesses/procedures/_form.html.slim +5 -1
  79. data/app/views/renalware/accesses/procedures/_list.html.slim +11 -4
  80. data/app/views/renalware/accesses/procedures/show.html.slim +17 -19
  81. data/app/views/renalware/addresses/_form.html.slim +17 -12
  82. data/app/views/renalware/admin/cache/show.html.slim +24 -0
  83. data/app/views/renalware/clinical/body_compositions/_list.html.slim +7 -43
  84. data/app/views/renalware/clinical/body_compositions/_table.html.slim +42 -0
  85. data/app/views/renalware/clinical/body_compositions/index.html.slim +9 -0
  86. data/app/views/renalware/clinical/dry_weights/_list.html.slim +2 -8
  87. data/app/views/renalware/clinical/dry_weights/_table.html.slim +7 -0
  88. data/app/views/renalware/clinical/profiles/show.html.slim +4 -2
  89. data/app/views/renalware/feeds/hl7_test_messages/create.js.erb +10 -0
  90. data/app/views/renalware/feeds/hl7_test_messages/new.slim +18 -0
  91. data/app/views/renalware/hd/mdm_patients/_filters.html.slim +0 -11
  92. data/app/views/renalware/hd/mdm_patients/_page_actions.html.slim +29 -0
  93. data/app/views/renalware/hd/mdm_patients/index.html.slim +7 -4
  94. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_page_actions.html.slim +4 -4
  95. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_table.html.slim +0 -0
  96. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_weekly_diary.html.slim +1 -1
  97. data/app/views/renalware/hd/{diaries → scheduling/diaries}/edit.html.slim +6 -6
  98. data/app/views/renalware/hd/{diaries → scheduling/diaries}/index.html.slim +0 -0
  99. data/app/views/renalware/hd/{diaries → scheduling/diaries}/show.pdf.slim +0 -0
  100. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_form.html.slim +15 -6
  101. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_slot.html.slim +2 -2
  102. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_tab.html.slim +1 -1
  103. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/create.js.erb +1 -1
  104. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/destroy.js.erb +1 -1
  105. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/edit.html.slim +2 -2
  106. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/new.html.slim +0 -0
  107. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/new.js.erb +0 -0
  108. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/show.js.erb +0 -0
  109. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/update.js.erb +1 -1
  110. data/app/views/renalware/hospitals/units/index.html.slim +2 -2
  111. data/app/views/renalware/layouts/_patient.html.slim +2 -1
  112. data/app/views/renalware/letters/contacts/_form.html.slim +10 -13
  113. data/app/views/renalware/letters/letters/_form.html.slim +2 -9
  114. data/app/views/renalware/navigation/_developer.html.slim +4 -0
  115. data/app/views/renalware/navigation/_menu.html.slim +2 -0
  116. data/app/views/renalware/pathology/observation_requests/_filters.html.slim +17 -0
  117. data/app/views/renalware/pathology/observation_requests/index.html.slim +2 -1
  118. data/app/views/renalware/patients/_layout.html.slim +1 -1
  119. data/app/views/renalware/patients/_side_menu.html.slim.dead +7 -0
  120. data/app/views/renalware/patients/abridgements/_abridgement.html.slim +8 -0
  121. data/app/views/renalware/patients/abridgements/_table.html.slim +12 -0
  122. data/app/views/renalware/patients/abridgements/index.html.slim +22 -0
  123. data/app/views/renalware/patients/alerts/create.json +3 -0
  124. data/app/views/renalware/patients/patients/_form.html.slim +36 -17
  125. data/app/views/renalware/patients/patients/edit.html.slim +1 -1
  126. data/app/views/renalware/patients/patients/new.html.slim +1 -1
  127. data/app/views/renalware/patients/side_menu/_actions.html.slim +2 -0
  128. data/app/views/renalware/pd/_apd_regimes.html.slim +1 -1
  129. data/app/views/renalware/pd/_capd_regimes.html.slim +1 -1
  130. data/app/views/renalware/pd/dashboards/show/_apd_regimes.html.slim +11 -2
  131. data/app/views/renalware/pd/dashboards/show/_capd_regimes.html.slim +11 -2
  132. data/app/views/renalware/pd/regimes/index.html.slim +7 -0
  133. data/app/views/renalware/renal/profiles/_form.html.slim +7 -24
  134. data/app/views/renalware/shared/documents/_binary_marker_input.html.slim +2 -2
  135. data/app/views/renalware/shared/documents/_blood_group_input.html.slim +4 -2
  136. data/app/views/renalware/transplants/registrations/_form.html.slim +22 -17
  137. data/config/locales/renalware/clinical/body_composition.yml +6 -3
  138. data/config/locales/renalware/clinical/dry_weight.en.yml +4 -3
  139. data/config/locales/renalware/hd/diary_slots.en.yml +3 -2
  140. data/config/locales/renalware/letters/contact.en.yml +0 -2
  141. data/config/routes/feeds.rb +5 -0
  142. data/config/routes/hd.rb +11 -7
  143. data/config/routes/letters.rb +0 -5
  144. data/config/routes/patients.rb +1 -0
  145. data/config/routes/pd.rb +2 -2
  146. data/config/routes/renal.rb +0 -5
  147. data/config/routes.rb +1 -0
  148. data/config/webpack/development.js +5 -0
  149. data/config/webpack/environment.js +3 -0
  150. data/config/webpack/production.js +5 -0
  151. data/config/webpack/test.js +5 -0
  152. data/config/webpacker.yml +103 -0
  153. data/db/functions/hd_diary_archive_elapsed_master_slots_v01.sql +40 -0
  154. data/db/migrate/20190322120025_create_feed_hl7_test_messages.rb +12 -0
  155. data/db/migrate/20190325134823_create_patients_master_index.rb +24 -0
  156. data/db/migrate/20190327100851_add_handled_to_feed_messages.rb +5 -0
  157. data/db/migrate/20191012121433_add_consultant_to_users.rb +7 -0
  158. data/db/migrate/20191018143635_create_hd_diary_matrix_view.rb +7 -0
  159. data/db/migrate/20191018144917_create_fn_to_archive_master_slots.rb +9 -0
  160. data/db/views/hd_diary_matrix_v01.sql +38 -0
  161. data/lib/core_extensions/active_record/sort.rb +27 -9
  162. data/lib/renalware/configuration.rb +3 -0
  163. data/lib/renalware/engine.rb +31 -0
  164. data/lib/renalware/version.rb +1 -1
  165. data/lib/renalware/week_period.rb +8 -7
  166. data/lib/renalware.rb +13 -1
  167. data/lib/tasks/hd.rake +7 -0
  168. data/lib/tasks/pathology.rake +1 -1
  169. data/lib/tasks/renalware.rake +89 -4
  170. data/spec/factories/hd/scheduling/diaries.rb +18 -0
  171. data/spec/factories/hd/{slots.rb → scheduling/slots.rb} +1 -1
  172. data/spec/factories/patients/abridgements.rb +9 -0
  173. data/spec/support/hl7_helpers.rb +13 -0
  174. data/spec/support/pages/letters/form.rb +4 -1
  175. metadata +126 -50
  176. data/app/assets/javascripts/renalware/auto_complete.js +0 -63
  177. data/app/controllers/renalware/hd/diaries_controller.rb +0 -89
  178. data/app/controllers/renalware/hd/diary_slots_controller.rb +0 -175
  179. data/app/controllers/renalware/letters/descriptions_controller.rb +0 -22
  180. data/app/controllers/renalware/renal/prd_descriptions_controller.rb +0 -15
  181. data/app/models/renalware/hd/archive_yesterdays_slots_job.rb +0 -69
  182. data/app/models/renalware/hd/diary.rb +0 -41
  183. data/app/models/renalware/hd/diary_slot.rb +0 -83
  184. data/app/models/renalware/hd/find_or_create_diary_by_week_query.rb +0 -50
  185. data/app/models/renalware/hd/find_or_create_master_diary.rb +0 -26
  186. data/app/models/renalware/hd/master_diary.rb +0 -32
  187. data/app/models/renalware/hd/weekly_diary.rb +0 -45
  188. data/app/models/renalware/renal/prd_descriptions/search_query.rb +0 -35
  189. data/app/presenters/renalware/hd/diary_presenter.rb +0 -79
  190. data/app/presenters/renalware/hd/diary_slot_presenter.rb +0 -72
  191. data/app/presenters/renalware/hd/null_slot.rb +0 -40
  192. data/app/views/renalware/renal/prd_descriptions/search.json.jbuilder +0 -6
  193. data/lib/test_support/autocomplete_helpers.rb +0 -14
  194. data/spec/factories/hd/diaries.rb +0 -14
@@ -1,4 +1,4 @@
1
- <% slot_path = hd_diary_refresh_slot_path(
1
+ <% slot_path = hd_scheduling_diary_refresh_slot_path(
2
2
  diary_id: "weekly_diary_id",
3
3
  day_of_week: slot.day_of_week,
4
4
  diurnal_period_code_id: slot.diurnal_period_code_id,
@@ -1,4 +1,4 @@
1
- <% slot_path = hd_diary_refresh_slot_path(
1
+ <% slot_path = hd_scheduling_diary_refresh_slot_path(
2
2
  diary_id: "weekly_diary_id",
3
3
  day_of_week: slot.day_of_week,
4
4
  diurnal_period_code_id: slot.diurnal_period_code_id,
@@ -10,14 +10,14 @@
10
10
 
11
11
  /- unless slot.diary.master?
12
12
  = link_to "Remove them",
13
- hd_diary_slot_path(slot.diary, slot),
13
+ hd_scheduling_diary_slot_path(slot.diary, slot),
14
14
  method: :delete,
15
15
  remote: true,
16
16
  class: "button alert"
17
17
 
18
18
  / - destroy_btn_title = slot.diary.master ? "Remove" : "Remove and revert to master diary"
19
19
  / = link_to destroy_btn_title,
20
- / hd_diary_slot_path(slot.diary, slot),
20
+ / hd_scheduling_diary_slot_path(slot.diary, slot),
21
21
  / method: :delete,
22
22
  / remote: true,
23
23
  / class: "button alert"
@@ -1,4 +1,4 @@
1
- <% slot_path = hd_diary_refresh_slot_path(
1
+ <% slot_path = hd_scheduling_diary_refresh_slot_path(
2
2
  diary_id: "weekly_diary_id",
3
3
  day_of_week: slot.day_of_week,
4
4
  diurnal_period_code_id: slot.diurnal_period_code_id,
@@ -39,8 +39,8 @@
39
39
  - if pundit_policy_for(Renalware::HD::Station).index?
40
40
  = link_to("HD Stations", hd_unit_stations_path(unit))
41
41
  = pipe_separator
42
- - if pundit_policy_for(Renalware::HD::Diary).index?
43
- = link_to("HD Diaries", hd_unit_diaries_path(unit))
42
+ - if pundit_policy_for(Renalware::HD::Scheduling::Diary).index?
43
+ = link_to("HD Diaries", hd_scheduling_unit_diaries_path(unit))
44
44
  - if pundit_policy_for(Renalware::Hospitals::Ward).index?
45
45
  = pipe_separator
46
46
  = link_to("Wards", hospitals_unit_wards_path(unit))
@@ -6,7 +6,8 @@
6
6
 
7
7
  nav.patient-side-nav.full-screenable
8
8
  .layout-wrapper
9
- = render "renalware/patients/side_menu", patient: current_patient
9
+ /= render "renalware/patients/side_menu", patient: current_patient
10
+ = render Renalware::Patients::SideMenuComponent, patient: current_patient
10
11
 
11
12
  .main-content.patient-content.full-screenable
12
13
  .layout-wrapper
@@ -1,16 +1,13 @@
1
- = label_tag "person_auto_complete",
2
- "Pick person from directory",
3
- class: "right inline"
4
- = text_field_tag "person_auto_complete", \
5
- f.object.person&.to_s,
6
- data: { \
7
- autocomplete_source: search_directory_people_path, \
8
- autocomplete_rel: "[name='letters_contact[person_id]']" \
9
- },
10
- autofocus: true,
11
- spellcheck: false,
12
- placeholder: t(".person_auto_complete.prompt")
13
- = f.input :person_id, as: :hidden
1
+ #person-id-select2
2
+ = f.input :person_id,
3
+ wrapper: :horizontal_large,
4
+ collection: [[f.object.person&.to_s, f.object.person&.id]],
5
+ selected: 1,
6
+ input_html: { \
7
+ class: "person-ajax-search",
8
+ data: { "ajax--url" => search_directory_people_path(format: :json),
9
+ placeholder: "Start entering the person's name (min. 2 characters)" } \
10
+ }
14
11
  = f.input :description_id, collection: contact_descriptions
15
12
  = f.input :other_description
16
13
  = f.input :notes, as: :text, input_html: { rows: 2 }
@@ -17,15 +17,8 @@ ruby:
17
17
 
18
18
  = f.association :letterhead, autofocus: true
19
19
  = f.input :description,
20
- input_html: { \
21
- data: { \
22
- autocomplete_source: search_letters_descriptions_path,
23
- autocomplete_rel: "[name='letters[description]']" \
24
- },
25
- placeholder: "Start entering the description (min. 2 characters)",
26
- spellcheck: false,
27
- class: "clear-autocomplete" \
28
- }
20
+ collection: Renalware::Letters::Description.pluck(:text).uniq,
21
+ input_html: { class: "searchable_select" }
29
22
  = hidden_field_tag "description_id"
30
23
  = f.input :clinical, as: :hidden
31
24
  = f.input :issued_on, as: :date_picker
@@ -0,0 +1,4 @@
1
+ li.has-dropdown
2
+ = link_to "Developer", "#"
3
+ ul.dropdown
4
+ li= link_to "HL7 Test", renalware.new_feeds_hl7_test_message_path
@@ -12,6 +12,8 @@ section.top-bar-section
12
12
  = render "renalware/navigation/admin"
13
13
  - if current_user_is_super_admin?
14
14
  = render "renalware/navigation/super_admin"
15
+ - if current_user_is_developer?
16
+ = render "renalware/navigation/developer"
15
17
  li.divider
16
18
  = render "renalware/navigation/sign_out"
17
19
  li.divider
@@ -0,0 +1,17 @@
1
+
2
+ .columns.small-12.search-form.filters
3
+ = simple_form_for(search,
4
+ url: renalware.patient_pathology_observation_requests_path(patient),
5
+ method: :get) do |f|
6
+ .row
7
+ .columns.medium-5.large-4
8
+ = f.input :description_id_eq,
9
+ collection: obr_filter_options,
10
+ label: "Filter by Code",
11
+ label_method: ->(arr){ "#{arr[0]} - #{arr[2]}" },
12
+ input_html: { class: "searchable_select" }
13
+
14
+ .columns.medium-2.large-2.actions.end
15
+ = f.submit t("helpers.submit.filter"), class: "button"
16
+ span= " or "
17
+ = link_to t("helpers.reset"), renalware.patient_pathology_observation_requests_path(patient)
@@ -4,8 +4,9 @@
4
4
  p No investigations available for this patient.
5
5
 
6
6
  - else
7
- p.hint Hover over table then scroll vertically to view more results.
7
+ / p.hint Hover over table then scroll vertically to view more results.
8
8
  .row
9
+ = render "filters", search: search, patient: patient, obr_filter_options: obr_filter_options
9
10
  #observation-requests.large-6.columns.embedded-scroll
10
11
  = render "table", observation_requests: observation_requests, patient: patient
11
12
 
@@ -10,7 +10,7 @@
10
10
  - patient_page_title(title: title, patient: current_patient)
11
11
 
12
12
  nav.patient-side-nav
13
- = render "renalware/patients/side_menu", patient: current_patient
13
+ = render Renalware::Patients::SideMenuComponent, patient: current_patient
14
14
 
15
15
  .patient-content
16
16
  = render "renalware/patients/mini_profile", patient: current_patient
@@ -0,0 +1,7 @@
1
+ ul.side-nav
2
+ = render "renalware/patients/side_menu/general", patient: patient
3
+ = render "renalware/patients/side_menu/site_specific_links", patient: patient
4
+ = render "renalware/patients/side_menu/modalities", patient: patient
5
+ = render "renalware/patients/side_menu/transplants", patient: patient
6
+ = render "renalware/patients/side_menu/actions", patient: patient
7
+ = render "renalware/patients/side_menu/site_specific_actions", patient: patient
@@ -0,0 +1,8 @@
1
+ tr
2
+ td= "#{abridgement.family_name&.upcase}, #{abridgement.given_name}"
3
+ td= abridgement.hospital_number
4
+ td= l(abridgement.born_on)
5
+ td= abridgement.sex
6
+ td TODO
7
+ td Address
8
+ td.right= link_to "Select", "#", class: :button
@@ -0,0 +1,12 @@
1
+ table
2
+ thead
3
+ th Name
4
+ th Hospital no.
5
+ th.col-width-date Born on
6
+ th.col-width-tiny Sex
7
+ th.col-width-date Died
8
+ th Address
9
+ th.right
10
+
11
+ tbody
12
+ = render abridgements
@@ -0,0 +1,22 @@
1
+ = within_admin_layout(title: "Add a patient") do
2
+ .add-patient-from-master-index
3
+ = simple_form_for(form,
4
+ method: :get,
5
+ url: renalware.patients_abridgements_path,
6
+ as: :search) do |f|
7
+ .row.filters
8
+ .filters__form
9
+ .columns.small-12.medium-6
10
+ = f.input :criteria, label: "Search by hospital number or name"
11
+ .columns.small-12.medium-6.actions.end
12
+ = button_tag type: :submit, class: "button" do
13
+ i.fas.fa-search
14
+ | Search
15
+
16
+ .search-results
17
+ h2 Matches
18
+ = render "table", abridgements: results
19
+ br
20
+ .search-results--by-dob
21
+ h2 Other patients with the same date of birth
22
+ = render "table", abridgements: results_matching_dob
@@ -1,54 +1,73 @@
1
+ - editing = (defined?(:editing) && editing).presence || false
2
+ - controlled_by_demographics_feed = editing ? { "data-controlled-by-demographics-feed" => true } : {}
3
+
1
4
  .columns.large-12
2
5
  = field_set_tag do
3
6
  legend Patient Demographics
4
7
 
5
- = f.input :nhs_number, wrapper: :horizontal_small, autofocus: true
8
+ = f.input :nhs_number,
9
+ wrapper: :horizontal_small,
10
+ autofocus: true,
11
+ input_html: controlled_by_demographics_feed
6
12
 
7
- - Renalware.config.patient_hospital_identifiers.each do |key, field|
13
+ / If configured to do so we disable the first patient_identifier aka local_patient_id eg the
14
+ / BLT or KCH number. The others are unlikely to come in via feed so are editable.
15
+ - Renalware.config.patient_hospital_identifiers.each_with_index do |(key, field), index|
8
16
  = f.input field,
9
17
  as: :string,
10
18
  label: "#{key} No",
11
- wrapper: :horizontal_small
19
+ wrapper: :horizontal_small,
20
+ input_html: index.zero? ? controlled_by_demographics_feed : {}
12
21
 
13
22
  = f.input :external_patient_id, wrapper: :horizontal_small
14
23
  = f.input :title, wrapper: :horizontal_tiny
15
- = f.input :family_name, wrapper: :horizontal_small
16
- = f.input :given_name, wrapper: :horizontal_small
24
+ = f.input :family_name, wrapper: :horizontal_small, input_html: controlled_by_demographics_feed
25
+ = f.input :given_name, wrapper: :horizontal_small, input_html: controlled_by_demographics_feed
17
26
  /= f.input :suffix, wrapper: :horizontal_small
18
- = f.input :born_on, as: :date_picker, label: "DoB", wrapper: :horizontal_datepicker
27
+ = f.input :born_on,
28
+ as: :date_picker,
29
+ label: "DoB",
30
+ wrapper: :horizontal_datepicker,
31
+ input_html: controlled_by_demographics_feed
19
32
  = f.input :sex,
20
33
  selected: patient.sex.code,
21
34
  collection: Renalware::Gender.all,
22
35
  label_method: :name, value_method: :code,
23
36
  include_blank: "Please select",
24
37
  required: true,
25
- wrapper: :horizontal_small
38
+ wrapper: :horizontal_small,
39
+ input_html: controlled_by_demographics_feed
26
40
  = f.association :ethnicity,
27
41
  label_method: :name, value_method: :id,
28
42
  include_blank: "Please select",
29
- wrapper: :horizontal_small
43
+ wrapper: :horizontal_small,
44
+ input_html: controlled_by_demographics_feed
30
45
  = f.association :country_of_birth,
31
46
  include_blank: "Please select",
32
- wrapper: :horizontal_small
47
+ wrapper: :horizontal_small,
48
+ input_html: controlled_by_demographics_feed
33
49
  = f.association :religion,
34
50
  label_method: :name, value_method: :id,
35
51
  include_blank: "Please select",
36
- wrapper: :horizontal_small
52
+ wrapper: :horizontal_small,
53
+ input_html: controlled_by_demographics_feed
37
54
  = f.association :language,
38
55
  label_method: :name, value_method: :id,
39
56
  include_blank: "Please select main language",
40
- wrapper: :horizontal_small
57
+ wrapper: :horizontal_small,
58
+ input_html: controlled_by_demographics_feed
41
59
  = f.input :marital_status,
42
- include_blank: "Please select marital status",
43
- wrapper: :horizontal_small
60
+ include_blank: "Please select marital status",
61
+ wrapper: :horizontal_small,
62
+ input_html: controlled_by_demographics_feed
44
63
  = f.input :paediatric_patient_indicator,
45
64
  as: :inline_radio_buttons,
46
65
  label: "If under 18 years, is the recipient being treated in a paediatric unit?",
47
66
  wrapper: :horizontal_small
48
67
 
49
- = f.input :telephone1, wrapper: :horizontal_small
50
- = f.input :telephone2, wrapper: :horizontal_small
51
- = f.input :email, wrapper: :horizontal_small
68
+ = f.input :telephone1, wrapper: :horizontal_small, input_html: controlled_by_demographics_feed
69
+ = f.input :telephone2, wrapper: :horizontal_small, input_html: controlled_by_demographics_feed
70
+ = f.input :email, wrapper: :horizontal_small, input_html: controlled_by_demographics_feed
52
71
 
53
72
  - if patient.persisted?
54
73
  .row
@@ -103,7 +122,7 @@
103
122
  fieldset id="current_address"
104
123
  legend Current Address
105
124
  = a.input :id, as: :hidden
106
- = render "renalware/addresses/form", a: a
125
+ = render "renalware/addresses/form", a: a, controlled_by_feed_options: controlled_by_demographics_feed
107
126
 
108
127
  .columns.large-12
109
128
  = field_set_tag do
@@ -7,5 +7,5 @@
7
7
  html: { autocomplete: "off" } do |f|
8
8
 
9
9
  .columns= save_or_cancel(form: f, back_path: patient_path(patient))
10
- = render "form", f: f, patient: patient
10
+ = render "form", f: f, patient: patient, editing: true
11
11
  .columns= save_or_cancel(form: f, back_path: patient_path(patient))
@@ -21,5 +21,5 @@
21
21
  wrapper: "horizontal_form" do |f|
22
22
 
23
23
  .columns= save_or_cancel(form: f, back_path: patients_path)
24
- = render "form", f: f, patient: patient
24
+ = render "form", f: f, patient: patient, editing: false
25
25
  .columns= save_or_cancel(form: f, back_path: patients_path)
@@ -34,6 +34,8 @@ li.link.action
34
34
  - if policy(patient).debug?
35
35
  li.link.action
36
36
  = link_to "Debug: UKRDC XML", api_ukrdc_patient_path(patient, changes_since: "2018-01-01")
37
+ li.link.action
38
+ = link_to "Debug: MPI", patients_abridgements_path("search[criteria]" => patient.local_patient_id)
37
39
 
38
40
  - cache do
39
41
  = render "renalware/admissions/requests/modal_dialog_placeholder"
@@ -1,4 +1,4 @@
1
1
  = render "renalware/pd/regimes",
2
- regimes: apd_regimes,
2
+ regimes: regimes,
3
3
  patient: patient,
4
4
  table_class: "apd-regimes"
@@ -1,4 +1,4 @@
1
1
  = render "renalware/pd/regimes",
2
- regimes: capd_regimes,
2
+ regimes: regimes,
3
3
  patient: patient,
4
4
  table_class: "capd-regimes"
@@ -1,2 +1,11 @@
1
- = article_tag "APD Regimes (#{apd_regimes.length})", class: "apd-regimes-group" do
2
- = render "renalware/pd/apd_regimes", local_assigns
1
+ article.apd-regimes
2
+ header
3
+ h2 APD Regimes
4
+ .supplemental
5
+ = collection_count(apd_regimes)
6
+ span.noprint
7
+ = link_to "View All",
8
+ patient_pd_apd_regimes_path(patient),
9
+ class: "button secondary"
10
+
11
+ = render "renalware/pd/apd_regimes", regimes: apd_regimes, patient: patient
@@ -1,2 +1,11 @@
1
- = article_tag "CAPD Regimes (#{capd_regimes.length})", class: "capd-regimes-group" do
2
- = render "renalware/pd/capd_regimes", local_assigns
1
+ article.capd-regimes
2
+ header
3
+ h2 CAPD Regimes
4
+ .supplemental
5
+ = collection_count(capd_regimes)
6
+ span.noprint
7
+ = link_to "View All",
8
+ patient_pd_capd_regimes_path(patient),
9
+ class: "button secondary"
10
+
11
+ = render "renalware/pd/capd_regimes", regimes: capd_regimes, patient: patient
@@ -0,0 +1,7 @@
1
+
2
+ = within_patient_layout( \
3
+ title: "#{pd_type_string} Regimes",
4
+ breadcrumbs: breadcrumb_for("PD Summary", patient_pd_dashboard_path(patient))) do
5
+
6
+ = render "renalware/pd/#{pd_type_string.downcase}_regimes", local_assigns
7
+ = paginate regimes
@@ -13,30 +13,13 @@
13
13
  include_blank: "Select modality",
14
14
  wrapper: :horizontal_small
15
15
  = f.input :first_seen_on, as: :date_picker, wrapper: :horizontal_datepicker
16
- = f.input :prd_description_id,
17
- input_html: { class: "clear-autocomplete" },
18
- as: :hidden
19
-
20
- .row
21
- .columns.small-12.medium-4.large-3
22
- = label_tag "prd_description_auto_complete",
23
- f.object.class.human_attribute_name(:prd_description),
24
- class: "right inline"
25
- .columns.small-12.medium-8.large-9
26
- .row.collapse
27
- .small-11.columns
28
- = text_field_tag "prd_description_auto_complete", \
29
- f.object.prd_description.to_s,
30
- data: { \
31
- autocomplete_source: search_renal_prd_descriptions_path, \
32
- autocomplete_rel: "[name='renal_profile[prd_description_id]']" \
33
- },
34
- placeholder: "Start entering the diagnosis or PRD code (min. 2 characters)",
35
- spellcheck: false,
36
- class: "clear-autocomplete"
37
- .small-1.columns
38
- span.postfix
39
- = link_to "Clear", "#", data: { clear_value_on_click: ".clear-autocomplete" }
16
+ = f.association :prd_description,
17
+ collection: Renalware::Renal::PRDDescription.all.order(:term),
18
+ input_html: { \
19
+ class: "searchable_select", \
20
+ data: { \
21
+ placeholder: "",
22
+ "allow-clear" => "true" }}
40
23
 
41
24
  = f.input :comorbidities_updated_on, as: :date_picker, wrapper: :horizontal_datepicker
42
25
 
@@ -1,7 +1,7 @@
1
1
  = f.simple_fields_for attribute, f.object.public_send(attribute), wrapper: "vertical_form" do |fc|
2
2
  tr
3
3
  td= f.object.class.human_attribute_name(attribute)
4
- td= fc.input :value_1, label: false
5
- td= fc.input :value_2, label: false
4
+ td= fc.input :value_1, label: false, input_html: html_options
5
+ td= fc.input :value_2, label: false, input_html: html_options
6
6
  td
7
7
  td
@@ -1,7 +1,9 @@
1
1
  = f.simple_fields_for attribute, f.object.public_send(attribute) do |fd|
2
2
  = fd.input :group,
3
3
  label: attr_name(fd.object, :group),
4
- wrapper: :horizontal_small
4
+ wrapper: :horizontal_small,
5
+ input_html: html_options
5
6
  = fd.input :rhesus,
6
7
  label: fd.object.class.human_attribute_name(:rhesus),
7
- wrapper: :horizontal_small
8
+ wrapper: :horizontal_small,
9
+ input_html: html_options
@@ -26,39 +26,44 @@ ruby:
26
26
  = render layout: "renalware/shared/fieldset",
27
27
  locals: { legend: "HLA", name: "hla" } do
28
28
  = fd.simple_fields_for :hla, fd.object.hla do |fcm|
29
- = fcm.input :type, wrapper: :horizontal_large
30
- = fcm.input :recorded_on, as: :date_picker, wrapper: :horizontal_datepicker
29
+ = fcm.input :type, wrapper: :horizontal_large, input_html: { "data-controlled-by-tissue-typing-feed": true }
30
+ = fcm.input :recorded_on, as: :date_picker, wrapper: :horizontal_datepicker, input_html: { "data-controlled-by-tissue-typing-feed": true }
31
31
  table
32
32
  tbody
33
- = render_input fcm, :a
34
- = render_input fcm, :b
35
- = render_input fcm, :cw
36
- = render_input fcm, :dr
37
- = render_input fcm, :dq
38
- = render_input fcm, :drw
39
- = render_input fcm, :drq
33
+ = render_input fcm, :a, html_options: { "data-controlled-by-tissue-typing-feed": true }
34
+ = render_input fcm, :b, html_options: { "data-controlled-by-tissue-typing-feed": true }
35
+ = render_input fcm, :cw, html_options: { "data-controlled-by-tissue-typing-feed": true }
36
+ = render_input fcm, :dr, html_options: { "data-controlled-by-tissue-typing-feed": true }
37
+ = render_input fcm, :dq, html_options: { "data-controlled-by-tissue-typing-feed": true }
38
+ = render_input fcm, :drw, html_options: { "data-controlled-by-tissue-typing-feed": true }
39
+ = render_input fcm, :drq, html_options: { "data-controlled-by-tissue-typing-feed": true }
40
40
 
41
41
  = render layout: "renalware/shared/fieldset",
42
42
  locals: { legend: "Transplant", name: "transplant" } do
43
43
  = fd.simple_fields_for :transplant, fd.object.transplant do |fcm|
44
44
  table.no-stripes
45
- = render_input fcm, :blood_group
45
+ = render_input fcm, :blood_group, html_options: { "data-controlled-by-tissue-typing-feed": true }
46
46
  = fcm.input :nb_of_previous_grafts,
47
47
  collection: 0..5,
48
48
  include_blank: false,
49
- wrapper: :horizontal_small
50
- = fcm.input :sens_status, wrapper: :horizontal_medium
49
+ wrapper: :horizontal_small,
50
+ input_html: { "data-controlled-by-tissue-typing-feed": true }
51
+ = fcm.input :sens_status,
52
+ wrapper: :horizontal_medium,
53
+ input_html: { "data-controlled-by-tissue-typing-feed": true }
51
54
 
52
55
  = render layout: "renalware/shared/fieldset",
53
56
  locals: { legend: "Tissue Typing (UKT Status)", name: "tissue_typing" } do
54
57
  = fd.simple_fields_for :uk_transplant_centre, fd.object.uk_transplant_centre do |fcm|
55
58
  = fcm.input :status,
56
59
  wrapper: :horizontal_small,
57
- hint: "To be updated by feed"
60
+ hint: "To be updated by feed",
61
+ input_html: { "data-controlled-by-tissue-typing-feed": true }
58
62
  = fcm.input :status_updated_on,
59
63
  as: :date_picker,
60
64
  wrapper: :horizontal_datepicker,
61
- hint: "To be updated by feed"
65
+ hint: "To be updated by feed",
66
+ input_html: { "data-controlled-by-tissue-typing-feed": true }
62
67
 
63
68
  = render layout: "renalware/shared/fieldset",
64
69
  locals: { legend: "Organs", name: "organs" } do
@@ -83,9 +88,9 @@ ruby:
83
88
  locals: { legend: "Admin", name: "admin" } do
84
89
  = f.input :referred_on, as: :date_picker, wrapper: :horizontal_datepicker
85
90
  = f.input :assessed_on, as: :date_picker, wrapper: :horizontal_datepicker
86
- = f.input :entered_on, as: :date_picker, wrapper: :horizontal_datepicker
87
- = f.input :contact, as: :text, input_html: { rows: 5 }, wrapper: :horizontal_large
88
- = f.input :notes, as: :text, input_html: { rows: 5 }, wrapper: :horizontal_large
91
+ = f.input :entered_on, as: :date_picker, wrapper: :horizontal_datepicker, input_html: { "data-controlled-by-tissue-typing-feed": true }
92
+ = f.input :contact, as: :text, wrapper: :horizontal_large, input_html: { rows: 5, "data-controlled-by-tissue-typing-feed": true }
93
+ = f.input :notes, as: :text, wrapper: :horizontal_large, input_html: { rows: 5, "data-controlled-by-tissue-typing-feed": true }
89
94
 
90
95
  = render "status_form", f: f if f.object.new_record?
91
96
 
@@ -19,12 +19,18 @@ en:
19
19
  renalware:
20
20
  clinical:
21
21
  body_compositions:
22
+ index:
23
+ title: Body Composition Measurements
22
24
  show:
23
25
  title: Body Composition Measurements
24
26
  list:
25
27
  title: Body Composition Measurements
26
28
  add_dry_weight: Add a Body Composition Measurements
27
29
  add: Add
30
+ view_all: View All
31
+ recent:
32
+ title: Recent Body Composition Measurements
33
+ table:
28
34
  modality_description: Modality
29
35
  assessed_on: Date
30
36
  overhydration: OH
@@ -40,6 +46,3 @@ en:
40
46
  body_cell_mass: BCM
41
47
  quality_of_reading: Q
42
48
  assessor: Assessor
43
- view_all: View All
44
- recent:
45
- title: Recent Body Composition Measurements
@@ -17,10 +17,11 @@ en:
17
17
  list:
18
18
  title: Dry Weights
19
19
  add_dry_weight: Add a Dry Weight
20
+ view_all: View All
21
+ recent:
22
+ title: Recent Dry Weights
20
23
  add: Add
24
+ table:
21
25
  date: Date
22
26
  weight: Weight (kg)
23
27
  assessor: Assessor
24
- view_all: View All
25
- recent:
26
- title: Recent Dry Weights
@@ -1,11 +1,12 @@
1
1
  en:
2
2
  renalware:
3
3
  hd:
4
- diary_slot:
4
+ scheduling:
5
+ diary_slot:
5
6
  activerecord:
6
7
  errors:
7
8
  models:
8
- renalware/hd/diary_slot:
9
+ renalware/hd/scheduling/diary_slot:
9
10
  patient_id:
10
11
  taken: has already been assigned to a station in this day and period
11
12
  diurnal_period_code_id:
@@ -19,8 +19,6 @@ en:
19
19
  new:
20
20
  title: Add new contact
21
21
  form:
22
- person_auto_complete:
23
- prompt: Start entering the person's name (min. 2 characters)"
24
22
  description:
25
23
  other: Other - please specify in the field below
26
24
  person_from_directory:
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :feeds do
4
+ resources :hl7_test_messages
5
+ end