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,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency "collection_presenter"
4
-
5
- # TODO: mixing query and presenter here..
6
- module Renalware
7
- module HD
8
- class DiaryPresenter
9
- attr_reader :user, :weekly_diary, :master_diary, :null_diary
10
- delegate :id, :hospital_unit_id, :to_s, :week, to: :weekly_diary
11
-
12
- # https://github.com/avdi/naught
13
- NullDiary = Naught.build do |config|
14
- config.black_hole
15
- config.define_explicit_conversions
16
- config.predicates_return false
17
-
18
- def master?
19
- false
20
- end
21
-
22
- def slot_for(diary_id, diurnal_period_code_id, station_id, day_of_week)
23
- NullSlot.new(diary_id, diurnal_period_code_id, station_id, day_of_week)
24
- end
25
- end
26
-
27
- def initialize(user, weekly_diary)
28
- @user = user
29
- @weekly_diary = weekly_diary
30
- @master_diary = weekly_diary.master_diary
31
- @null_diary = NullDiary.new
32
- end
33
-
34
- def each_diurnal_period
35
- DiurnalPeriodCode.all.each do |diurnal_period_code|
36
- yield(diurnal_period_code) if block_given?
37
- end
38
- end
39
-
40
- def each_station
41
- stations.each_with_index { |station, index| yield(station, index + 1) if block_given? }
42
- end
43
-
44
- def each_day(diurnal_period, station)
45
- (1..last_day_of_week).each do |day_of_week|
46
- diurnal_period_id = diurnal_period.id
47
- station_id = station.id
48
- slot = weekly_diary.slot_for(diurnal_period_id, station_id, day_of_week) ||
49
- master_diary.slot_for(diurnal_period_id, station_id, day_of_week) ||
50
- null_diary.slot_for(weekly_diary.id, diurnal_period_id, station_id, day_of_week)
51
- yield(slot) if block_given?
52
- end
53
- end
54
-
55
- def day_names
56
- all_day_names = Time::DAYS_INTO_WEEK.keys
57
- all_day_names.take(last_day_of_week)
58
- end
59
-
60
- def stations
61
- @stations ||= begin
62
- Station.includes(:location).for_unit(hospital_unit_id).ordered.map do |station|
63
- StationPresenter.new(station)
64
- end
65
- end
66
- end
67
-
68
- def station_locations
69
- StationLocation.all
70
- end
71
-
72
- private
73
-
74
- def last_day_of_week
75
- Renalware.config.include_sunday_on_hd_diaries ? 7 : 6
76
- end
77
- end
78
- end
79
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency "renalware/hd"
4
- require_dependency "collection_presenter"
5
-
6
- # TODO: mixing query and presenter here..
7
- module Renalware
8
- module HD
9
- class DiarySlotPresenter < SimpleDelegator
10
- delegate :master?, to: :diary, allow_nil: true
11
-
12
- # Patients who prefer to dialyse on this day e.g. Mon and in this period e.g. AM.
13
- # Flag those already assigned so they cannot be chosen.
14
- def patients_preferring_to_dialyse_today_in_this_period
15
- patients = Renalware::HD::PatientsDialysingByDayAndPeriodQuery
16
- .new(
17
- diary.hospital_unit_id,
18
- day_of_week,
19
- diurnal_period_code.code
20
- ).call.all
21
- simplify(patients)
22
- end
23
-
24
- # Patients who prefer to dialyse on this day e.g. Mon
25
- # Flag those already assigned so they cannot be chosen.
26
- def patients_preferring_to_dialyse_today
27
- patients = Renalware::HD::PatientsDialysingByDayQuery
28
- .new(
29
- diary.hospital_unit_id,
30
- day_of_week
31
- ).call.all
32
- simplify(patients)
33
- end
34
-
35
- # rubocop:disable Metrics/MethodLength
36
- def patient_search_options
37
- hospital_unit = Renalware::Hospitals::Unit.find(diary.hospital_unit_id)
38
- [
39
- OpenStruct.new(
40
- id: :dialysing_on_day_and_period,
41
- name: "Dialysing #{day_of_week_name} #{diurnal_period_code.to_s.upcase}"
42
- ),
43
- OpenStruct.new(
44
- id: :dialysing_on_day,
45
- name: "Dialysing on #{day_of_week_name}"
46
- ),
47
- OpenStruct.new(
48
- id: :dialysing_at_unit,
49
- name: "All #{hospital_unit.unit_code} HD patients"
50
- ),
51
- OpenStruct.new(
52
- id: :dialysing_at_hospital,
53
- name: "All HD patients"
54
- )
55
- ]
56
- end
57
- # rubocop:enable Metrics/MethodLength
58
-
59
- private
60
-
61
- def simplify(patients)
62
- patients.map do |patient|
63
- hd_profile = patient.hd_profile
64
- text = "#{patient.to_s(:long)} - "\
65
- "#{hd_profile&.schedule_definition} "\
66
- "#{hd_profile&.hospital_unit&.unit_code}".strip.truncate(65)
67
- OpenStruct.new(id: patient.id, text: text)
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "renalware/hd"
4
-
5
- module Renalware
6
- module HD
7
- NullSlot = Naught.build do |config|
8
- config.black_hole
9
- config.define_explicit_conversions
10
- config.predicates_return false
11
-
12
- attr_reader :diary_id, :diurnal_period_code_id, :station_id, :day_of_week
13
-
14
- def initialize(diary_id, diurnal_period_code_id, station_id, day_of_week)
15
- @diary_id = diary_id
16
- @diurnal_period_code_id = diurnal_period_code_id
17
- @station_id = station_id
18
- @day_of_week = day_of_week
19
- end
20
-
21
- def master?
22
- false
23
- end
24
-
25
- def cell_id
26
- "#{diurnal_period_code_id}-#{station_id}-#{day_of_week}"
27
- end
28
-
29
- def cache_key
30
- [
31
- self.class.name,
32
- diary_id,
33
- diurnal_period_code_id,
34
- station_id,
35
- day_of_week
36
- ].join("-")
37
- end
38
- end
39
- end
40
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.array! @prd_descriptions do |prd_description|
4
- json.id prd_description.id
5
- json.label prd_description.to_s
6
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AutocompleteHelpers
4
- def fill_autocomplete(form, field, options = {})
5
- fill_in field, with: options[:with]
6
-
7
- page.execute_script " $('#{form}').find('[name=#{field}]').trigger('focus') "
8
- page.execute_script " $('#{form}').find('[name=#{field}]').trigger('keydown') "
9
- selector = %Q{ul.ui-autocomplete li.ui-menu-item:contains("#{options[:select]}")}
10
-
11
- expect(page).to have_selector("ul.ui-autocomplete li.ui-menu-item")
12
- page.execute_script " $('#{selector}').trigger('mouseenter').click() "
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- FactoryBot.define do
4
- factory :hd_weekly_diary, class: "Renalware::HD::WeeklyDiary" do
5
- year { 2017 }
6
- week_number { 2 }
7
- master { false }
8
- association :master_diary, factory: :hd_master_diary
9
- end
10
-
11
- factory :hd_master_diary, class: "Renalware::HD::MasterDiary" do
12
- master { true }
13
- end
14
- end