renalware-core 2.0.113 → 2.0.115

Sign up to get free protection for your applications and to get access to all the features.
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