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,5 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ def ensure_log_goes_to_stdout
4
+ old_logger = Webpacker.logger
5
+ Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
6
+ yield
7
+ ensure
8
+ Webpacker.logger = old_logger
9
+ end
10
+
3
11
  namespace :renalware do
4
12
  desc "Install package.json dependencies with yarn for the renalware-core engine - "\
5
13
  "without this <path to installed gem>/renalware-core/node_modules is not populated "\
@@ -10,17 +18,94 @@ namespace :renalware do
10
18
  system "yarn install --no-progress --production"
11
19
  end
12
20
  end
21
+
22
+ desc "Cleans the Webpack output folder (public/renalware-core-packs)"
23
+ task :clean_webpack_output_folder do
24
+ puts "Destroying packs output folder ..."
25
+ Dir.chdir(File.join(__dir__, "..", "..")) do
26
+ # TODO : Load packs output from config/webpacker.yml
27
+ system "rm -rf public/renalware-core-packs"
28
+ end
29
+ end
30
+
31
+ # I have found that it is necessary to force remove public/renalware-core-packs with the
32
+ # clean_webpack_output_folder task above before compiling, otherwise webpack does not
33
+ # always find changes in js/controllers/*.js. I think this is safe to do in a capistrano deploy
34
+ # because the symlink to public is only applied after a successful execution of (among other
35
+ # things) assets:precompile.
36
+ desc "Compile JavaScript packs using webpack for production with digests"
37
+ task webpacker_compile: %i(clean_webpack_output_folder yarn_install environment) do
38
+ puts "Compiling renalware-core packs with webpack.."
39
+ if Rails.env.development? || Rails.env.test?
40
+ compile_webpacker_output
41
+ else
42
+ temporarily_point_webpacker_config_public_root_path_to_rails_app_root do
43
+ compile_webpacker_output
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def compile_webpacker_output
50
+ Webpacker.with_node_env("production") do
51
+ ensure_log_goes_to_stdout do
52
+ if Renalware.webpacker.commands.compile
53
+ # Successful compilation!
54
+ else
55
+ # Failed compilation
56
+ exit!
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ # This is something of a hack to get webpacker to compile the renalware-core-packs in the
63
+ # host Rails app's public folder. We change out config/webpacker.yml to point to the host app's
64
+ # public path, do the compile, then revert out change.
65
+ # The downside of this approach is that if running staging or production env locally without
66
+ # nginx to find and serve public/renalware-core-packs, the pack files will not be found by the host
67
+ # because the Rack::Static middleware we setup in engine.rb will not find them.
68
+ # An alternative is for us to do the compile inside the engine and then cp -R or rsync (better
69
+ # if we are symlinking renawlare-core-packs to shared in deploy.rb) the
70
+ # folder into the host's public app where it can be served by nginx (if configured).
71
+ # This has the advantage that the same files are available in the engine's public folder (so they
72
+ # can be servered by Rack::Static - see engine.rb) and also in the host apps public folder
73
+ # where nginx can server them if we are in a real 'environment'
74
+ def temporarily_point_webpacker_config_public_root_path_to_rails_app_root
75
+ engine_config_folder = Renalware::Engine.root.join("config")
76
+ find = "public_root_path: .*$"
77
+ replace = "public_root_path: #{Rails.root.join('public')}"
78
+
79
+ # This changes the contents of file, creating a backup in webpacker.yml.bak
80
+ `ruby -pi.bak -e "gsub(/#{find}/, '#{replace}')" #{engine_config_folder}/webpacker.yml`
81
+
82
+ yield if block_given?
83
+ ensure
84
+ # Ensure that we always restore the backup webpacker.yml
85
+ FileUtils.mv(
86
+ engine_config_folder.join("webpacker.yml.bak"),
87
+ engine_config_folder.join("webpacker.yml")
88
+ )
13
89
  end
14
90
 
15
- def enhance_assets_precompile_with_engine_yarn_install
16
- Rake::Task["assets:precompile"].enhance(["renalware:yarn_install"])
91
+ def enhance_assets_precompile_with_renalware_webpacker_compile
92
+ Rake::Task["assets:precompile"].enhance(["renalware:webpacker_compile"])
17
93
  end
18
94
 
19
95
  # When a host app runs rake assets:precompile, hook into this and enhance the
20
- # task so it runs yarn install for (and relative to) the engine, wherever it is installed.
96
+ # task so it runs webpacker install for (and relative to) the engine, wherever it is installed.
21
97
  # Without that, assets:precompile will fail because the engine references various js and css files
22
98
  # in ./node_modules, and these are not included in the source, but need to be installed with yarn
23
99
  # at deploy time.
100
+ #
101
+ # Note that when runnning in the engine in development, we need to set the ENV
102
+ # var WEBPACKER_PRECOMPILE=no (e.g. in ./.env) otherwise wepacker will enhance the
103
+ # 'assets:precompile' task with 'webpacker:compile' task, and the latter task does not exist
104
+ # in out context (for us its called app:webpacker:compile).
105
+ # A possible downside of this is that webpacker compilation in the dummy app, if ever required, may
106
+ # not work, I'm not sure.
24
107
  if Rake::Task.task_defined?("assets:precompile")
25
- enhance_assets_precompile_with_engine_yarn_install
108
+ enhance_assets_precompile_with_renalware_webpacker_compile
109
+ else
110
+ Rake::Task.define_task("assets:precompile" => "renalware:webpacker:compile")
26
111
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :hd_weekly_diary, class: "Renalware::HD::Scheduling::WeeklyDiary" do
5
+ accountable
6
+ year { 2017 }
7
+ week_number { 2 }
8
+ master { false }
9
+ hospital_unit_id { nil }
10
+ association :master_diary, factory: :hd_master_diary
11
+ end
12
+
13
+ factory :hd_master_diary, class: "Renalware::HD::Scheduling::MasterDiary" do
14
+ accountable
15
+ master { true }
16
+ hospital_unit_id { nil }
17
+ end
18
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :hd_diary_slot, class: "Renalware::HD::DiarySlot" do
4
+ factory :hd_diary_slot, class: "Renalware::HD::Scheduling::DiarySlot" do
5
5
  association :diurnal_period_code_id, :am, factory: :hd_diurnal_period_code
6
6
  association :patient
7
7
  association :station, factory: :hd_station
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :abridged_patient, class: "Renalware::Patients::Abridgement" do
5
+ hospital_number { "KCH99999" }
6
+ given_name { "Aaron" }
7
+ family_name { "BALLARD" }
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HL7Helpers
4
+ def hl7_message_from_file(filename, patient)
5
+ result = parse_hl7_file(filename, patient)
6
+ Renalware::Feeds::HL7Message.new(::HL7::Message.new(result.lines))
7
+ end
8
+
9
+ def parse_hl7_file(filename, patient, pid = nil)
10
+ body = file_fixture("hl7/#{filename}.hl7.erb").read
11
+ ERB.new(body).result(binding)
12
+ end
13
+ end
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_helper"
3
4
  require_relative "../page_object"
4
5
 
5
6
  # rubocop disable Metrics/LineLength
6
7
  module Pages
7
8
  module Letters
8
9
  class Form < PageObject
10
+ include CapybaraSelect2
11
+
9
12
  PERSON_ROLE_TO_RADIO_ID_MAP = {
10
13
  patient: :letter_main_recipient_attributes_person_role_patient,
11
14
  primary_care_physician: :letter_main_recipient_attributes_person_role_primary_care_physician,
@@ -26,7 +29,7 @@ module Pages
26
29
  end
27
30
 
28
31
  def description=(value)
29
- fill_in "Description", with: value
32
+ select2 value, css: ".letter_description"
30
33
  end
31
34
 
32
35
  def main_recipient=(main_recipient_role)