renalware-core 2.0.0.pre.rc3 → 2.0.0.pre.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +1 -0
  4. data/app/assets/images/renalware/chosen-sprite.png +0 -0
  5. data/app/assets/images/renalware/chosen-sprite@2x.png +0 -0
  6. data/app/assets/images/renalware/nhs_a4_letter_logo_black.png +0 -0
  7. data/app/assets/images/renalware/nhs_a4_letter_logo_blue.png +0 -0
  8. data/app/assets/javascripts/renalware/session_timeout_redirect.js.erb +3 -1
  9. data/app/assets/stylesheets/renalware/base/_variables.scss +2 -0
  10. data/app/assets/stylesheets/renalware/modules/_admissions.scss +21 -25
  11. data/app/assets/stylesheets/renalware/modules/_feeds.scss +27 -0
  12. data/app/assets/stylesheets/renalware/modules/_letters.scss +4 -0
  13. data/app/assets/stylesheets/renalware/modules/_patients.scss +18 -17
  14. data/app/assets/stylesheets/renalware/modules/_pd.scss +8 -0
  15. data/app/assets/stylesheets/renalware/partials/_lists.scss +3 -0
  16. data/app/assets/stylesheets/renalware/partials/_modal_window.scss +7 -1
  17. data/app/assets/stylesheets/renalware/partials/_navigation.scss +2 -2
  18. data/app/assets/stylesheets/renalware/partials/_tables.scss +20 -0
  19. data/app/assets/stylesheets/renalware/partials/_typography.scss +4 -0
  20. data/app/controllers/renalware/admin/feeds/files_controller.rb +49 -0
  21. data/app/controllers/renalware/admissions/admissions_controller.rb +101 -0
  22. data/app/controllers/renalware/admissions/patient_admissions_controller.rb +20 -0
  23. data/app/controllers/renalware/devise/sessions_controller.rb +29 -0
  24. data/app/controllers/renalware/letters/approved_letters_controller.rb +9 -1
  25. data/app/controllers/renalware/letters/contacts_controller.rb +29 -0
  26. data/app/controllers/renalware/low_clearance/base_controller.rb +13 -0
  27. data/app/controllers/renalware/low_clearance/dashboards_controller.rb +21 -0
  28. data/app/controllers/renalware/low_clearance/mdm_controller.rb +13 -0
  29. data/app/controllers/renalware/low_clearance/mdm_patients_controller.rb +27 -0
  30. data/app/controllers/renalware/low_clearance/profiles_controller.rb +45 -0
  31. data/app/controllers/renalware/patients/primary_care_physicians_controller.rb +4 -3
  32. data/app/controllers/renalware/pd/exit_site_infections_controller.rb +2 -1
  33. data/app/controllers/renalware/transplants/donor_workups_controller.rb +5 -2
  34. data/app/documents/renalware/low_clearance/profile_document.rb +26 -0
  35. data/app/documents/renalware/renal/profile_document.rb +0 -21
  36. data/app/helpers/renalware/application_helper.rb +5 -0
  37. data/app/helpers/renalware/attribute_name_helper.rb +0 -24
  38. data/app/helpers/renalware/infection_organisms_helper.rb +0 -20
  39. data/app/helpers/renalware/mdm_helper.rb +1 -1
  40. data/app/helpers/renalware/pd_regimes_helper.rb +1 -5
  41. data/app/mailers/renalware/admin/user_mailer.rb +1 -3
  42. data/app/mailers/renalware/letters/delivery/errors.rb +9 -0
  43. data/app/mailers/renalware/letters/delivery/practice_mailer.rb +55 -0
  44. data/app/mailers/{previews → renalware/previews}/user_mailer_preview.rb +0 -0
  45. data/app/models/concerns/renalware/feeds/job.rb +30 -0
  46. data/app/models/concerns/renalware/letters/letter_pathology.rb +31 -8
  47. data/app/models/concerns/renalware/patients_ransack_helper.rb +9 -9
  48. data/app/models/concerns/renalware/personable.rb +8 -3
  49. data/app/models/concerns/renalware/string_logging.rb +11 -0
  50. data/app/models/renalware/admissions/admission.rb +42 -0
  51. data/app/models/renalware/admissions/admission_query.rb +38 -0
  52. data/app/models/renalware/admissions/admission_search_form.rb +51 -0
  53. data/app/models/renalware/clinics/clinic_visit.rb +1 -0
  54. data/app/models/renalware/feeds/file.rb +31 -0
  55. data/app/models/renalware/feeds/file_type.rb +13 -0
  56. data/app/models/renalware/feeds/files/create_feed_file.rb +51 -0
  57. data/app/models/renalware/feeds/files/enqueue_file_for_background_processing.rb +18 -0
  58. data/app/models/renalware/feeds/files/exceptions.rb +12 -0
  59. data/app/models/renalware/feeds/files/file_upload_form.rb +24 -0
  60. data/app/models/renalware/feeds/files/import_job_factory.rb +15 -0
  61. data/app/models/renalware/feeds/files/practice_memberships/import_csv.rb +30 -0
  62. data/app/models/renalware/feeds/files/practice_memberships/import_job.rb +49 -0
  63. data/app/models/renalware/feeds/files/practices/convert_xml_to_csv.rb +145 -0
  64. data/app/models/renalware/feeds/files/practices/country_map.rb +33 -0
  65. data/app/models/renalware/feeds/files/practices/csv_file.rb +23 -0
  66. data/app/models/renalware/feeds/files/practices/csv_organisation.rb +35 -0
  67. data/app/models/renalware/feeds/files/practices/import_csv.rb +30 -0
  68. data/app/models/renalware/feeds/files/practices/import_job.rb +58 -0
  69. data/app/models/renalware/feeds/files/primary_care_physicians/import_csv.rb +28 -0
  70. data/app/models/renalware/feeds/files/primary_care_physicians/import_job.rb +44 -0
  71. data/app/models/renalware/feeds/files/tissue_typing/import.rb +12 -0
  72. data/app/models/renalware/feeds/hl7_message.rb +15 -0
  73. data/app/models/renalware/hd/sessions/auditable_session.rb +1 -1
  74. data/app/models/renalware/hospitals/unit.rb +2 -1
  75. data/app/models/renalware/hospitals/ward.rb +1 -1
  76. data/app/models/renalware/letters/approve_letter.rb +15 -9
  77. data/app/models/renalware/letters/delivery/deliver_letter.rb.dead +41 -0
  78. data/app/models/renalware/letters/delivery/delivery_policy.rb +28 -0
  79. data/app/models/renalware/letters/delivery/email_letter_to_practice.rb +46 -0
  80. data/app/models/renalware/letters/delivery/practice_email.rb +28 -0
  81. data/app/models/renalware/letters/draft_letter.rb +1 -1
  82. data/app/models/renalware/letters/part/recent_pathology_results.rb +43 -4
  83. data/app/models/renalware/letters/pdf_letter_cache.rb +2 -3
  84. data/app/models/renalware/letters/recipient_params_processor.rb +1 -1
  85. data/app/models/renalware/letters/relevant_observation_description.rb +2 -3
  86. data/app/models/renalware/letters/revise_letter.rb +3 -1
  87. data/app/models/renalware/letters.rb +3 -0
  88. data/app/models/renalware/low_clearance/mdm_patients_query.rb +62 -0
  89. data/app/models/renalware/low_clearance/modality_description.rb +11 -0
  90. data/app/models/renalware/low_clearance/patient.rb +14 -0
  91. data/app/models/renalware/low_clearance/profile.rb +15 -0
  92. data/app/models/renalware/low_clearance/version.rb +9 -0
  93. data/app/models/renalware/low_clearance.rb +15 -0
  94. data/app/models/renalware/patient.rb +3 -0
  95. data/app/models/renalware/patients/patient_hospital_identifiers.rb +8 -0
  96. data/app/models/renalware/patients/practice.rb +4 -1
  97. data/app/models/renalware/patients/practice_membership.rb +12 -0
  98. data/app/models/renalware/patients/primary_care_physician.rb +24 -5
  99. data/app/models/renalware/pd/exit_site_infection.rb +6 -0
  100. data/app/models/renalware/pd/regime_bag.rb +1 -1
  101. data/app/models/renalware/problems/note.rb +1 -1
  102. data/app/models/renalware/renal/registry/preflight_checks/deaths_query.rb +1 -1
  103. data/app/models/renalware/renal.rb +0 -4
  104. data/app/models/renalware/system/update_user.rb +1 -1
  105. data/app/models/renalware/transplants/recipient_operation.rb +3 -8
  106. data/app/models/renalware/user.rb +3 -3
  107. data/app/models/renalware/zip_archive.rb +48 -0
  108. data/app/policies/renalware/admissions/admission_policy.rb +8 -0
  109. data/app/policies/renalware/feeds/file_policy.rb +25 -0
  110. data/app/policies/renalware/letters/letter_policy.rb +2 -0
  111. data/app/policies/renalware/low_clearance/profile_policy.rb +13 -0
  112. data/app/presenters/renalware/admissions/admission_presenter.rb +49 -0
  113. data/app/presenters/renalware/dashboard/dashboard_presenter.rb +1 -1
  114. data/app/presenters/renalware/hd/session_access_presenter.rb +1 -1
  115. data/app/presenters/renalware/letters/letter_form_presenter.rb +1 -1
  116. data/app/presenters/renalware/letters/letter_presenter.rb +6 -1
  117. data/app/presenters/renalware/letters/practice_email_meta_data.rb +85 -0
  118. data/app/presenters/renalware/low_clearance/dashboard_presenter.rb +19 -0
  119. data/app/presenters/renalware/low_clearance/mdm_presenter.rb +12 -0
  120. data/app/presenters/renalware/pathology/observation_set_presenter.rb +1 -1
  121. data/app/presenters/renalware/pathology/observations_diff.rb +1 -1
  122. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +17 -1
  123. data/app/validators/renalware/patients/height_validator.rb +17 -0
  124. data/app/views/renalware/admin/feeds/files/index.html.slim +61 -0
  125. data/app/views/renalware/admissions/admissions/_filters.html.slim +24 -0
  126. data/app/views/renalware/admissions/admissions/_form.html.slim +56 -0
  127. data/app/views/renalware/admissions/admissions/_table.html.slim +65 -0
  128. data/app/views/renalware/admissions/admissions/edit.html.slim +6 -0
  129. data/app/views/renalware/admissions/admissions/index.html.slim +12 -0
  130. data/app/views/renalware/admissions/admissions/new.html.slim +6 -0
  131. data/app/views/renalware/admissions/consults/_form.html.slim +2 -3
  132. data/app/views/renalware/admissions/consults/_table.html.slim +1 -3
  133. data/app/views/renalware/admissions/patient_admissions/index.html.slim +10 -0
  134. data/app/views/renalware/clinics/clinic_visits/_table.html.slim +2 -1
  135. data/app/views/renalware/clinics/clinic_visits/_table_row.html.slim +1 -0
  136. data/app/views/renalware/drugs/drugs/index.html.slim +3 -2
  137. data/app/views/renalware/hd/current_profile/_summary.html.slim +8 -8
  138. data/app/views/renalware/hd/diary_slots/_form.html.slim +4 -4
  139. data/app/views/renalware/hd/mdm_patients/_patient.html.slim +0 -1
  140. data/app/views/renalware/hd/protocols/_profile.html.slim +4 -4
  141. data/app/views/renalware/letters/contacts/_contact.html.slim +5 -1
  142. data/app/views/renalware/letters/contacts/_edit.html.slim +30 -0
  143. data/app/views/renalware/letters/contacts/_form.html.slim +1 -1
  144. data/app/views/renalware/letters/contacts/_table.html.slim +6 -5
  145. data/app/views/renalware/letters/contacts/edit.html.slim +8 -0
  146. data/app/views/renalware/letters/contacts/edit.js.erb +9 -0
  147. data/app/views/renalware/letters/contacts/index.html.slim +9 -3
  148. data/app/views/renalware/letters/contacts/index.js.erb +1 -1
  149. data/app/views/renalware/letters/contacts/update.js.erb +10 -0
  150. data/app/views/renalware/letters/delivery/practice_mailer/patient_letter.text.erb +3 -0
  151. data/app/views/renalware/letters/electronic_receipts/_table.html.slim +3 -1
  152. data/app/views/renalware/letters/electronic_receipts/sent.html.slim +6 -9
  153. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +26 -13
  154. data/app/views/renalware/letters/letters/_cc_recipient_form.html.slim +1 -1
  155. data/app/views/renalware/letters/letters/_form.html.slim +0 -1
  156. data/app/views/renalware/letters/letters/_pathology.html.slim +1 -2
  157. data/app/views/renalware/letters/letters/_preview.html.slim +14 -5
  158. data/app/views/renalware/letters/parts/_clinical_observations.html.slim +2 -2
  159. data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +1 -7
  160. data/app/views/renalware/low_clearance/dashboards/_page_actions.html.slim +19 -0
  161. data/app/views/renalware/low_clearance/dashboards/show.html.slim +7 -0
  162. data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_bottom.html.slim +0 -0
  163. data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_low_clearance_profile.html.slim +0 -0
  164. data/app/views/renalware/{renal/low_clearance → low_clearance}/mdm/_top.html.slim +0 -0
  165. data/app/views/renalware/low_clearance/mdm_patients/_filters.html.slim +9 -0
  166. data/app/views/renalware/low_clearance/profiles/_summary.html.slim +125 -0
  167. data/app/views/renalware/low_clearance/profiles/edit.html.slim +39 -0
  168. data/app/views/renalware/medications/prescriptions/_table.html.slim +1 -1
  169. data/app/views/renalware/messaging/internal/receipts/_receipt.html.slim +2 -1
  170. data/app/views/renalware/messaging/internal/receipts/_sent_receipt.html.slim +3 -2
  171. data/app/views/renalware/messaging/internal/receipts/_sent_table.html.slim +2 -1
  172. data/app/views/renalware/messaging/internal/receipts/_table.html.slim +1 -0
  173. data/app/views/renalware/navigation/_mdms.html.slim +1 -1
  174. data/app/views/renalware/navigation/_patients_admin.html.slim +1 -0
  175. data/app/views/renalware/navigation/_renalware_admin.html.slim +12 -22
  176. data/app/views/renalware/patients/_side_menu.html.slim +0 -1
  177. data/app/views/renalware/patients/clinical_summaries/_admissions.html.slim +11 -0
  178. data/app/views/renalware/patients/clinical_summaries/show.html.slim +7 -0
  179. data/app/views/renalware/patients/primary_care_physicians/_form.html.slim +1 -3
  180. data/app/views/renalware/patients/primary_care_physicians/_primary_care_physician.html.slim +1 -3
  181. data/app/views/renalware/patients/primary_care_physicians/index.html.slim +0 -1
  182. data/app/views/renalware/patients/side_menu/_actions.html.slim +1 -1
  183. data/app/views/renalware/patients/side_menu/_general.html.slim +3 -0
  184. data/app/views/renalware/patients/side_menu/_modalities.html.slim +4 -0
  185. data/app/views/renalware/pd/_pet_adequacies.html.slim +1 -1
  186. data/app/views/renalware/pd/dashboards/show/_page_actions.html.slim +3 -1
  187. data/app/views/renalware/pd/exit_site_infections/_details.html.slim +6 -1
  188. data/app/views/renalware/pd/exit_site_infections/_fields.html.slim +7 -0
  189. data/app/views/renalware/pd/exit_site_infections/_form.html.slim +6 -7
  190. data/app/views/renalware/pd/regime_bags/_regime_bag.html.slim +1 -1
  191. data/app/views/renalware/pd/regime_bags/_regime_bags.html.slim +1 -1
  192. data/app/views/renalware/pd/regimes/_current_regime.html.slim +6 -1
  193. data/app/views/renalware/pd/regimes/_glucose.html.slim +1 -3
  194. data/app/views/renalware/renal/profiles/_form.html.slim +0 -21
  195. data/app/views/renalware/renal/profiles/show.html.slim +0 -5
  196. data/app/views/renalware/research/study_participants/_form.html.slim +2 -2
  197. data/app/views/renalware/shared/_attributes_list.html.slim +4 -4
  198. data/app/views/renalware/snippets/snippets/_table.html.slim +10 -5
  199. data/app/views/renalware/transplants/donations/_form.html.slim +6 -6
  200. data/app/views/renalware/transplants/live_donors/_filters.html.slim +5 -5
  201. data/app/views/renalware/transplants/recipient_dashboards/_page_actions.html.slim +5 -1
  202. data/config/cucumber.yml +2 -2
  203. data/config/initializers/client_side_validations.rb +8 -10
  204. data/config/initializers/devise_security_extension.rb +1 -1
  205. data/config/initializers/inflections.rb +6 -1
  206. data/config/initializers/renalware.rb +6 -6
  207. data/config/locales/renalware/admissions/admissions.yml +37 -0
  208. data/config/locales/renalware/clinics/visit.yml +3 -0
  209. data/config/locales/renalware/feeds/file.en.yml +17 -0
  210. data/config/locales/renalware/low_clearance/dashboard.en.yml +11 -0
  211. data/config/locales/renalware/low_clearance/low_clearance.en.yml +14 -0
  212. data/config/locales/renalware/low_clearance/profile.en.yml +71 -0
  213. data/config/locales/renalware/messaging/internal/messages.en.yml +3 -2
  214. data/config/locales/renalware/patients/side_menu.en.yml +2 -0
  215. data/config/locales/renalware/pd/dashboard.en.yml +1 -0
  216. data/config/locales/renalware/pd/exit_site_infection.en.yml +10 -0
  217. data/config/locales/renalware/renal/profile.en.yml +0 -46
  218. data/config/locales/renalware/transplants/recipient_dashboards.en.yml +1 -0
  219. data/config/routes.rb +19 -9
  220. data/db/migrate/20170523125610_add_esi_fields.rb +9 -0
  221. data/db/migrate/20170615130714_add_deleted_at_to_practices.rb +7 -0
  222. data/db/migrate/20170615144802_add_name_to_patient_primary_care_physicians.rb +9 -0
  223. data/db/migrate/20170620121255_create_patient_practice_memberships.rb +24 -0
  224. data/db/migrate/20170621102157_add_unique_index_on_practice_code.rb +6 -0
  225. data/db/migrate/20170627110058_create_feed_file_types.rb +15 -0
  226. data/db/migrate/20170627110619_create_feed_files.rb +20 -0
  227. data/db/migrate/20171009181615_add_columns_to_drug_drugs.rb +8 -0
  228. data/db/migrate/20171127082158_add_region_to_addresses.rb +5 -0
  229. data/db/migrate/20171127092158_create_function_to_import_practices.rb +123 -0
  230. data/db/migrate/20171127092359_create_fn_to_insert_gps.rb +145 -0
  231. data/db/migrate/20171206140738_create_fn_to_load_practice_memberships_csv.rb +62 -0
  232. data/db/migrate/20171211131918_remove_email_from_primary_care_physicians.rb +7 -0
  233. data/db/migrate/20171219154529_create_admission_admissions.rb +28 -0
  234. data/db/migrate/20171222153815_add_unique_constraint_to_patient_practice_memberships.rb +8 -0
  235. data/db/migrate/20180102155055_update_patient_summaries_to_version_5.rb +5 -0
  236. data/db/migrate/20180105132358_add_emailed_at_to_letter_recipients.rb +6 -0
  237. data/db/migrate/20180108185400_remove_null_constraint_from_letters_pathology_snapshot.rb +5 -0
  238. data/db/migrate/20180112151706_create_low_clearance_profiles.rb +49 -0
  239. data/db/migrate/20180112151813_create_low_clearance_versions.rb +14 -0
  240. data/db/seeds/default/feeds/import_file_types.rb +35 -0
  241. data/db/seeds/default/feeds/seeds.rb +1 -0
  242. data/db/seeds/default/modalities/descriptions.rb +1 -2
  243. data/db/seeds/default/practices/nhs_practices_sample.csv +26 -26
  244. data/db/seeds/default/practices/practices.rb +1 -2
  245. data/db/seeds/default/practices/primary_care_physicians.rb +3 -4
  246. data/db/seeds/default/practices/primary_care_physicians_sample.csv +193 -193
  247. data/db/seeds/default/seeds.rb +1 -0
  248. data/db/views/patient_summaries_v05.sql +17 -0
  249. data/lib/dropdown_button_item.rb +1 -1
  250. data/lib/renalware/configuration.rb +19 -1
  251. data/lib/renalware/engine.rb +6 -2
  252. data/lib/renalware/version.rb +1 -1
  253. data/lib/tasks/feeds/files.rake +34 -0
  254. data/lib/xml_parser.rb +84 -0
  255. data/spec/factories/admissions/admissions.rb +11 -0
  256. data/spec/factories/clinics/clinic_visits.rb +2 -2
  257. data/spec/factories/feeds/file.rb +14 -0
  258. data/spec/factories/feeds/file_types.rb +17 -0
  259. data/spec/factories/low_clearance/modality_descriptions.rb +8 -0
  260. data/spec/factories/low_clearance/patients.rb +3 -0
  261. data/spec/factories/low_clearance/profiles.rb +3 -0
  262. data/spec/factories/modalities/modality_descriptions.rb +1 -1
  263. data/spec/factories/patients/practice_memberships.rb +7 -0
  264. data/spec/factories/patients/primary_care_physicians.rb +2 -4
  265. data/spec/factories/system/users.rb +1 -1
  266. data/spec/support/factory_bot.rb +1 -1
  267. data/spec/support/shared_examples/paranoia_examples.rb +14 -0
  268. metadata +172 -40
  269. data/app/controllers/renalware/renal/low_clearance/mdm_controller.rb +0 -15
  270. data/app/controllers/renalware/renal/low_clearance/mdm_patients_controller.rb +0 -29
  271. data/app/helpers/renalware/section_helper.rb +0 -10
  272. data/app/models/renalware/renal/low_clearance/mdm_patients_query.rb +0 -64
  273. data/app/models/renalware/renal/low_clearance/modality_description.rb +0 -13
  274. data/app/presenters/renalware/renal/low_clearance/mdm_presenter.rb +0 -14
  275. data/app/views/renalware/renal/low_clearance/mdm_patients/_filters.html.slim +0 -9
  276. data/app/views/renalware/transplants/registrations/_sections_nav.html.slim +0 -15
  277. data/config/initializers/application_controller_renderer.rb +0 -13
  278. data/config/initializers/assets.rb +0 -10
  279. data/config/initializers/renalware_core.rb +0 -15
  280. data/config/locales/renalware/renal/low_clearance.en.yml +0 -15
  281. data/spec/factories/renal/lcc_modality_description.rb +0 -9
@@ -0,0 +1,12 @@
1
+ = content_for(:actions) do
2
+ = link_to("Add", new_admissions_admission_path, class: :button)
3
+
4
+ = within_admin_layout(title: "Inpatient Admissions") do
5
+ .panel.radius.compact
6
+ | If the patient is not on Renalware yet, please 
7
+ = link_to("add them", new_patient_path)
8
+ |  first
9
+
10
+ = render "filters", form: form
11
+ = render "table", admissions: admissions
12
+ = paginate admissions
@@ -0,0 +1,6 @@
1
+ = within_admin_layout( \
2
+ title: "New",
3
+ breadcrumbs: breadcrumb_for("Inpatient Admissions", admissions_admissions_path) \
4
+ ) do
5
+
6
+ = render "form", admission: admission
@@ -11,15 +11,14 @@
11
11
  wrapper: :horizontal_medium,
12
12
  collection: [[consult.patient&.to_s, consult.patient&.id]],
13
13
  selected: 1,
14
- input_html: {\
14
+ input_html: { \
15
15
  class: "patient-id-select2 patient-ajax-search",
16
16
  data: { "ajax--url" => search_patients_path(format: :json),
17
- placeholder: "Search by patient name or hospital/NHS no." }\
17
+ placeholder: "Search by patient name or hospital/NHS no." } \
18
18
  }
19
19
 
20
20
  = f.input :consult_site_id,
21
21
  collection: Renalware::Admissions::ConsultSite.all,
22
- include_blank: true,
23
22
  wrapper: :horizontal_medium,
24
23
  include_blank: "Select local site (or enter other site below)",
25
24
  label: "Site"
@@ -29,7 +29,7 @@
29
29
  td= yes_no(consult.requires_aki_nurse)
30
30
  td.show-for-large-up.consult-author.col-width-medium-with-ellipsis(title=consult.created_by)= consult.created_by
31
31
  td.col-width-medium-with-ellipsis(title=consult.description)= consult.description
32
- td
32
+ td.actions-dropdown
33
33
  / As we have lots of possible actions, group them in a button group.
34
34
  / A wrapping div is required for now in order for the button group display correctly
35
35
  / (though we could style the td like a div I guess).
@@ -57,5 +57,3 @@
57
57
  li= render "renalware/admissions/requests/create_request_link",
58
58
  patient: consult.patient,
59
59
  link_text: "Request Admission"
60
-
61
- = render "renalware/admissions/requests/modal_dialog_placeholder"
@@ -0,0 +1,10 @@
1
+ = content_for(:actions) do
2
+ = link_to t("new_record.link_title"),
3
+ new_admissions_admission_path,
4
+ class: "button"
5
+
6
+ = within_patient_layout(title: "Inpatient Admissions") do
7
+
8
+ = render "renalware/admissions/admissions/table",
9
+ admissions: admissions,
10
+ compact: true
@@ -5,7 +5,8 @@ table.clinics.auto-layout
5
5
  th.col-width-date Date
6
6
  th.col-width-tiny DNA
7
7
  th Clinic Type
8
- th.col-width-tinyish Wt
8
+ th.col-width-tinyish Height
9
+ th.col-width-tinyish Weight
9
10
  th.col-width-tinyish BMI
10
11
  th.col-width-tinyish BP
11
12
  th.col-width-tinyish Standing BP
@@ -12,6 +12,7 @@ tr(class="#{'dna' if clinic_visit.did_not_attend?}")
12
12
  td.date-time= l(clinic_visit.date)
13
13
  td= yes_no(clinic_visit.did_not_attend)
14
14
  td.clinic-type= clinic_visit.clinic
15
+ td.bmi= clinic_visit.height
15
16
  td.bmi= clinic_visit.weight
16
17
  td.bmi= clinic_visit.bmi
17
18
  td.bp= clinic_visit.bp
@@ -12,6 +12,7 @@
12
12
  tr
13
13
  th.col-width-small
14
14
  th Name
15
+ th Dm+d Virtual Product ID
15
16
  tbody
16
17
  - @drugs.each do |drug|
17
18
  tr
@@ -22,7 +23,7 @@
22
23
  id: "#{drug.id}-drug",
23
24
  method: :delete,
24
25
  data: { confirm: I18n.t("prompts.confirm_delete") }
25
- td
26
- = link_to drug, edit_drugs_drug_path(drug)
26
+ td= link_to drug, edit_drugs_drug_path(drug)
27
+ td= drug.vmpid
27
28
 
28
29
  = paginate @drugs
@@ -29,7 +29,7 @@ article
29
29
  dt= t(".cannulation_type")
30
30
  dd= profile.cannulation_type
31
31
  dt= t(".anticoagulant.type")
32
- dd= profile.anticoagulant_type.try!(:text)
32
+ dd= profile.anticoagulant_type&.text
33
33
 
34
34
  dl.dl-horizontal.large.full-hd-profile
35
35
  dt.inset=t(".anticoagulant.loading_dose")
@@ -42,7 +42,7 @@ article
42
42
  dt= t(".needle_size")
43
43
  dd= profile.needle_size
44
44
  dt= t(".single_needle")
45
- dd= profile.single_needle.try!(:text)
45
+ dd= profile.single_needle&.text
46
46
  dt= t(".blood_flow")
47
47
  dd= profile.blood_flow
48
48
  dt= t(".temperature")
@@ -50,23 +50,23 @@ article
50
50
  dt= t(".bicarbonate")
51
51
  dd= profile.bicarbonate
52
52
  dt= t(".has_sodium_profiling")
53
- dd= profile.has_sodium_profiling.try!(:text)
53
+ dd= profile.has_sodium_profiling&.text
54
54
  dt.inset= t(".sodium_first_half")
55
55
  dd.inset= profile.sodium_first_half
56
56
  dt.inset= t(".sodium_second_half")
57
57
  dd.inset= profile.sodium_second_half
58
58
 
59
59
  dt= t(".drugs.on_esa")
60
- dd= profile.drugs_on_esa.try!(:text)
60
+ dd= profile.drugs_on_esa&.text
61
61
  dt= t(".drugs.on_iron")
62
- dd= profile.drugs_on_iron.try!(:text)
62
+ dd= profile.drugs_on_iron&.text
63
63
  dt= t(".drugs.on_warfarin")
64
- dd= profile.drugs_on_warfarin.try!(:text)
64
+ dd= profile.drugs_on_warfarin&.text
65
65
 
66
66
  dt= t(".transport.has_transport")
67
- dd= profile.transport.has_transport.try!(:text)
67
+ dd= profile.transport.has_transport&.text
68
68
  dt.inset= t(".transport.type")
69
- dd.inset= profile.transport.type.try!(:text)
69
+ dd.inset= profile.transport.type&.text
70
70
  dt.inset= t(".transport.decided_on")
71
71
  dd.inset= profile.transport.present? && I18n.l(profile.transport&.decided_on)
72
72
 
@@ -43,21 +43,21 @@
43
43
  #dialysing_at_unit(style="display:none")
44
44
  = f.input :patient_id,
45
45
  collection: [],
46
- input_html: {\
46
+ input_html: { \
47
47
  class: "patient-id-select2 patient-ajax-search",
48
48
  name: "hd_diary_slot[patient_id][]",
49
49
  data: { "ajax--url" => hd_patients_dialysing_at_unit_path(unit_id: slot.diary.hospital_unit_id, format: :json),
50
- placeholder: "Search by patient name or NHS/hosp no." }\
50
+ placeholder: "Search by patient name or NHS/hosp no." } \
51
51
  }
52
52
 
53
53
  #dialysing_at_hospital(style="display:none")
54
54
  = f.input :patient_id,
55
55
  collection: [],
56
- input_html: {\
56
+ input_html: { \
57
57
  class: "patient-id-select2 patient-ajax-search",
58
58
  name: "hd_diary_slot[patient_id][]",
59
59
  data: { "ajax--url" => hd_patients_dialysing_at_hospital_path(format: :json),
60
- placeholder: "Search by patient name or NHS/hosp no." }\
60
+ placeholder: "Search by patient name or NHS/hosp no." } \
61
61
  }
62
62
  = f.submit "Add for this week only", class: "button save weekly"
63
63
  |  
@@ -1,6 +1,5 @@
1
1
  / We try and keep cross-module dependencies in the View layer.
2
2
  - access_patient = Renalware::Accesses::PatientPresenter.new(patient)
3
- - pathology_patient = Renalware::Pathology::PatientPresenter.new(patient)
4
3
  - transplant_patient = Renalware::Transplants::PatientPresenter.new(patient)
5
4
 
6
5
  tr
@@ -13,14 +13,14 @@ dl
13
13
  dt.new_line= t(".needle_size")
14
14
  dd= profile.needle_size
15
15
  dt= t(".single_needle")
16
- dd= profile.single_needle.try!(:text)
16
+ dd= profile.single_needle&.text
17
17
  dt= t(".dialyser")
18
18
  dd= profile.dialyser
19
19
  dt= t(".dialysate")
20
20
  dd= profile.dialysate
21
21
 
22
22
  dt.new_line= t(".has_sodium_profiling")
23
- dd= profile.has_sodium_profiling.try!(:text)
23
+ dd= profile.has_sodium_profiling&.text
24
24
  dt= t(".sodium_first_half")
25
25
  dd= profile.sodium_first_half
26
26
  dt= t(".sodium_second_half")
@@ -41,8 +41,8 @@ dl
41
41
  dd= profile.last_update
42
42
 
43
43
  dt.new_line= t(".transport.has_transport")
44
- dd= profile.transport_has_transport.try!(:text)
44
+ dd= profile.transport_has_transport&.text
45
45
  dt= t(".transport.type")
46
- dd= profile.transport_type.try!(:text)
46
+ dd= profile.transport_type&.text
47
47
  dt= t(".transport.decided_on")
48
48
  dd= profile.transport_decided_on
@@ -1,6 +1,10 @@
1
- tr
1
+ = content_tag_for(:tr, contact) do
2
2
  td= link_to contact, directory_person_path(contact.person)
3
3
  td= contact.description_name
4
4
  td= yes_no(contact.default_cc)
5
5
  td= contact.address
6
6
  td= contact.notes
7
+ td
8
+ = link_to("Edit",
9
+ edit_patient_letters_contact_path(patient, contact),
10
+ data: { "reveal-id" => "edit-patient-contact-modal", "reveal-ajax" => "true" })
@@ -0,0 +1,30 @@
1
+ .modal
2
+ .modal__header
3
+ h2
4
+ = "#{controller.action_name.capitalize} Patient Contact /"
5
+ |  
6
+ h3.muted= contact
7
+ = render "renalware/shared/modal_close_link"
8
+
9
+ .modal__body
10
+ = render "renalware/shared/errors", model: contact
11
+
12
+ = simple_form_for(contact,
13
+ url: patient_letters_contact_path(patient, contact),
14
+ method: :patch,
15
+ remote: true,
16
+ wrapper: :horizontal_form) do |f|
17
+
18
+ = f.input :default_cc, as: :inline_radio_buttons
19
+ = f.input :description_id, collection: contact_descriptions
20
+ = f.input :other_description
21
+ = f.input :notes, as: :text
22
+
23
+ = f.submit class: :button
24
+ span= " or "
25
+ = link_to "Cancel",
26
+ "#",
27
+ "aria-label" => "Close",
28
+ class: "reveal-modal-close"
29
+
30
+ .modal__footer
@@ -2,7 +2,7 @@
2
2
  "Pick person from directory",
3
3
  class: "right inline"
4
4
  = text_field_tag "person_auto_complete", \
5
- f.object.person.try!(:to_s),
5
+ f.object.person&.to_s,
6
6
  data: { \
7
7
  autocomplete_source: search_directory_people_path, \
8
8
  autocomplete_rel: "[name='letters_contact[person_id]']" \
@@ -1,11 +1,12 @@
1
1
  table.auto-layout.contacts
2
2
  thead
3
3
  tr
4
- th Name
5
- th Description
6
- th.col-width-small Default CC
7
- th Address
4
+ th.col-width-medium Name
5
+ th.col-width-small.at-least Description
6
+ th.col-width-tiny Default CC
7
+ th.col-width-large Address
8
8
  th Notes
9
+ th.col-width-tiny.action
9
10
 
10
11
  tbody
11
- = render contacts
12
+ = render contacts, patient: patient
@@ -0,0 +1,8 @@
1
+ // Delegate to the edit partial _edit.html.slim
2
+ // _edit is re-rendered when have a validation error which is why it is a separate partial.
3
+ // Normally we would render _form, but that has more markup that we need just for a edit
4
+ // here on a couple of fields to allow defalt_cc and description to be changed
5
+ = render "edit",
6
+ patient: patient,
7
+ contact: contact,
8
+ contact_descriptions: contact_descriptions
@@ -0,0 +1,9 @@
1
+ // Displayed when we failed to update via a modal
2
+ // We render the edit partial _edit.html.slim
3
+ var modal = $("#edit-patient-contact-modal")
4
+ $(modal).html("<%=
5
+ j(render 'edit',
6
+ patient: patient,
7
+ contact: contact,
8
+ contact_descriptions: contact_descriptions)
9
+ %>");
@@ -6,8 +6,14 @@
6
6
 
7
7
  = within_patient_layout do
8
8
  #contacts
9
- = render "table", contacts: contacts
9
+ = render "table", patient: patient, contacts: contacts
10
10
 
11
- / The modal dialog
11
+ / The add modal dialog
12
12
  #add-patient-contact-modal.reveal-modal.medium(data-reveal)
13
- = render "new", patient: patient, contact: contact, contact_descriptions: contact_descriptions
13
+ = render "new",
14
+ patient: patient,
15
+ contact: contact,
16
+ contact_descriptions: contact_descriptions
17
+
18
+ / The edit modal dialog
19
+ #edit-patient-contact-modal.reveal-modal.medium(data-reveal)
@@ -1 +1 @@
1
- $("#contacts").html("<%= escape_javascript render("table", contacts: contacts) %>");
1
+ $("#contacts").html("<%= escape_javascript render("table", patient: patient, contacts: contacts) %>");
@@ -0,0 +1,10 @@
1
+ <%# We render this view when the request has been successfully updated.%>
2
+ <%= refresh(".flash-message", partial: "renalware/shared/flash_messages", locals: local_assigns) %>
3
+ $("#edit-patient-contact-modal").foundation('reveal', 'close');
4
+
5
+ // Refresh the just-updated admissions request
6
+ <%=
7
+ replace("#letters_contact_#{contact.id}",
8
+ partial: "contact",
9
+ locals: { patient: patient, contact: contact })
10
+ %>
@@ -0,0 +1,3 @@
1
+ <%= ident_metadata %>
2
+ This is an automated email - please do not reply directly to this email.
3
+ Please call on <%= help_phone_number %> or email <%= help_email_address %> if you have any queries.
@@ -2,6 +2,7 @@ table.letters.electronic-ccs.has-togglable-rows
2
2
  thead
3
3
  tr
4
4
  th.col-width-date Date
5
+ th.col-width-date-time Read at
5
6
  th.col-width-medium Author
6
7
  th.at-least.col-width-medium Patient
7
8
  th.col-width-nhs-no NHS no.
@@ -16,6 +17,7 @@ table.letters.electronic-ccs.has-togglable-rows
16
17
 
17
18
  tr(id=receipt.html_identifier)
18
19
  td= l(letter.issued_on)
20
+ td= l(receipt.read_at)
19
21
  td= letter.author
20
22
  td= default_patient_link(patient)
21
23
  td= patient.nhs_number
@@ -29,7 +31,7 @@ table.letters.electronic-ccs.has-togglable-rows
29
31
 
30
32
  = content_tag(:tr, id: receipt.html_preview_identifier, style: "display: none")
31
33
  td
32
- td(colspan=5)
34
+ td(colspan=6)
33
35
  .quick-preview
34
36
  = simple_format letter.body
35
37
 
@@ -5,29 +5,26 @@
5
5
  table.letters.electronic-ccs.sent.has-togglable-rows
6
6
  thead
7
7
  tr
8
- th.col-width-date Date
9
- th.col-width-medium Author
8
+ th.col-width-date Sent at
9
+ th Recipient
10
+ th.col-width-date-time Read at
10
11
  th.col-width-large Patient
11
12
  th.col-width-nhs-no NHS no.
12
13
  th.col-width-reference-no Hosp no.
13
14
  th Description
14
- th Recipient
15
- th Read?
16
15
  th
17
-
18
16
  tbody
19
17
  - receipts.each do |receipt|
20
18
  - letter = Renalware::Letters::LetterPresenter.new(receipt.letter)
21
19
  - patient = letter.patient
22
20
  tr
23
21
  td= l(letter.issued_on)
24
- td= letter.author
22
+ td.col-width-medium-with-ellipsis= receipt.recipient
23
+ td= l(receipt.read_at)
25
24
  td= default_patient_link(patient)
26
25
  td= patient.nhs_number
27
26
  td= patient.hospital_identifiers
28
27
  td.col-width-medium-with-ellipsis= letter.description
29
- td.col-width-medium-with-ellipsis= receipt.recipient
30
- td= yes_no(receipt.read?)
31
28
  td.actions
32
29
  = link_to "Toggle", "##{receipt.html_preview_identifier}", data: { behaviour: "toggler" }
33
30
  = pipe_separator
@@ -37,7 +34,7 @@
37
34
 
38
35
  = content_tag(:tr, id: receipt.html_preview_identifier, style: "display: none")
39
36
  td
40
- td(colspan=7)
37
+ td(colspan=6)
41
38
  .quick-preview
42
39
  = simple_format letter.body
43
40
  td
@@ -20,6 +20,7 @@ scss:
20
20
  p {
21
21
  padding: 0;
22
22
  line-height: 1.2em;
23
+ margin: .4rem 0;
23
24
  }
24
25
  }
25
26
 
@@ -52,21 +53,33 @@ scss:
52
53
 
53
54
  text-align: right;
54
55
 
55
- .trust-name p {
56
- font-size: 1.2em;
57
- vertical-align: bottom;
58
- margin: 0;
56
+ .trust-name {
57
+ padding: 0;
58
+
59
+ p {
60
+ font-size: 1.4em;
61
+ font-weight: bold;
62
+ vertical-align: bottom;
63
+ margin: 0;
64
+ padding: 0;
65
+ }
59
66
  }
60
67
 
61
- .trust-caption p {
62
- font-size: 0.8em;
63
- margin-top: 5px;
68
+ .trust-caption {
69
+ padding: 0;
70
+
71
+ p {
72
+ font-size: 1em;
73
+ font-weight: bold;
74
+ margin-top: .1rem;
75
+ color: #005EB8; // NHS blue
76
+ }
64
77
  }
65
78
 
66
79
  .nhs-logo {
67
- height: 33px;
80
+ // height: 33px; The height of the logo now determines the element height
68
81
  padding: 0;
69
- margin: 0 0 0 10px;
82
+ margin: 0 0 .4rem 0;
70
83
  display: inline-block;
71
84
  vertical-align: bottom;
72
85
  }
@@ -112,7 +125,7 @@ scss:
112
125
 
113
126
  ul {
114
127
  padding-left: 20px;
115
- margin-top: 7px;
128
+ margin-top: 0.4rem;
116
129
  margin-bottom: 7px;
117
130
  }
118
131
 
@@ -261,10 +274,10 @@ scss:
261
274
  p= letter.main_recipient.to_html
262
275
 
263
276
  .unit-block
277
+ span.nhs-logo
278
+ = image_tag(wicked_pdf_asset_base64("renalware/nhs_a4_letter_logo_black.png"))
264
279
  .trust-name
265
- p
266
- = raw letter.letterhead.trust_name
267
- /span.nhs-logo= inline_image_tag("renalware/NHS-Black.jpg", size: "82x33")
280
+ p= raw letter.letterhead.trust_name
268
281
  .trust-caption
269
282
  p= letter.letterhead.trust_caption
270
283
 
@@ -2,7 +2,7 @@
2
2
  - recipient = letter.cc_recipient_for_contact(contact)
3
3
  tr
4
4
  = content_tag(:td, style: "width: 20px") do
5
- = hidden_field_tag "letter[cc_recipients_attributes][][id]", recipient.try!(:id)
5
+ = hidden_field_tag "letter[cc_recipients_attributes][][id]", recipient&.id
6
6
  = hidden_field_tag "letter[cc_recipients_attributes][][person_role]", "contact"
7
7
  = hidden_field_tag "letter[cc_recipients_attributes][][addressee_id]", contact.id
8
8
 
@@ -73,4 +73,3 @@ ruby:
73
73
  = f.button :submit
74
74
  span= " or "
75
75
  = link_to "cancel", back_path
76
-
@@ -1,5 +1,4 @@
1
1
  ruby:
2
- new_pathology_timestamp = Time.zone.now
3
2
  diff = Renalware::Pathology::ObservationsDiff.new(
4
3
  patient: letter.patient,
5
4
  observation_set_a: letter.pathology_snapshot,
@@ -16,7 +15,7 @@ ruby:
16
15
  = f.input :pathology_timestamp, as: :hidden
17
16
  - else
18
17
  = f.input :pathology_timestamp,
19
- collection: [ \
18
+ collection: [\
20
19
  ["Yes", Time.zone.now],
21
20
  ["No", letter.pathology_timestamp], \
22
21
  ], \
@@ -17,13 +17,22 @@
17
17
 
18
18
  .columns.large-6
19
19
  .letter-unit-block
20
- p.trust-name
21
- = raw letter.letterhead.trust_name
22
- span.nhs-logo= image_tag("NHS-Black.jpg", size: "82x33")
23
- p.trust-caption= letter.letterhead.trust_caption
20
+ / p.trust-name
21
+ / = raw letter.letterhead.trust_name
22
+ / span.nhs-logo= image_tag("NHS-Black.jpg", size: "82x33")
23
+ / p.trust-caption= letter.letterhead.trust_caption
24
24
 
25
+ / .site-info-html
26
+ / p= raw letter.letterhead.site_info
27
+
28
+ span.nhs-logo
29
+ = image_tag(wicked_pdf_asset_base64("renalware/nhs_a4_letter_logo_black.png"))
30
+ .trust-name
31
+ p= raw letter.letterhead.trust_name
32
+ .trust-caption
33
+ p= letter.letterhead.trust_caption
25
34
  .site-info-html
26
- p= raw letter.letterhead.site_info
35
+ = raw letter.letterhead.site_info
27
36
 
28
37
  .letter-preview-body
29
38
  .row
@@ -4,5 +4,5 @@
4
4
  li= inline_value("Weight", clinical_observations.weight, "kg")
5
5
  li= inline_value("Height", clinical_observations.height, "m")
6
6
  li= inline_value("BMI", clinical_observations.bmi)
7
- li= inline_value("Urine Blood", clinical_observations.urine_blood.try!(:text))
8
- li= inline_value("Urine Protein", clinical_observations.urine_protein.try!(:text))
7
+ li= inline_value("Urine Blood", clinical_observations.urine_blood&.text)
8
+ li= inline_value("Urine Protein", clinical_observations.urine_protein&.text)
@@ -1,9 +1,3 @@
1
1
  .list.investigations
2
2
  h3 Recent Investigations
3
-
4
- - if recent_pathology_results.any?
5
- - recent_pathology_results.each do |code, observation|
6
- span #{l(observation[:observed_at]&.to_date)}: #{code} #{observation[:result]};
7
- | &nbsp;
8
- - else
9
- p None
3
+ p= recent_pathology_results.results || " None"
@@ -0,0 +1,19 @@
1
+ = link_to(patient_low_clearance_mdm_path(patient), class: "button with-icon secondary") do
2
+ i.fa.fa-group
3
+ = t(".mdm")
4
+
5
+ a.button.dropdown.with-icon(href="#"
6
+ data-dropdown="pd-options"
7
+ aria-controls="pd-options"
8
+ aria-expanded="false")
9
+ i.fa.fa-plus
10
+ | Add
11
+ br
12
+ ul.f-dropdown#pd-options(data-dropdown-content aria-hidden="true")
13
+
14
+ = dropdown_btn_item enabled: dashboard.profile.new_record? && dashboard.profile_policy_edit?,
15
+ title: t(".add_profile"),
16
+ url: edit_patient_low_clearance_profile_path(patient)
17
+
18
+ - unless patient.ever_been_on_low_clearance?
19
+ = render "modality_missing_warning", message: t(".missing_modality_warning")
@@ -0,0 +1,7 @@
1
+ = content_for(:actions) do
2
+ = render "page_actions", dashboard: dashboard, patient: patient
3
+
4
+ = within_patient_layout do
5
+ - if dashboard.profile&.persisted?
6
+ .row
7
+ = render "renalware/low_clearance/profiles/summary", profile: dashboard.profile
@@ -0,0 +1,9 @@
1
+ - named_filter_param = params[:named_filter]
2
+
3
+ dl.sub-nav.filters
4
+ dd(class=("active" unless named_filter_param.present?))
5
+ = link_to t(".filter.all"), low_clearance_mdm_patients_path
6
+ - Renalware::LowClearance::MDM_FILTERS.map(&:to_sym).each do |filter|
7
+ dd(class=("active" if named_filter_param == filter.to_s))
8
+ = link_to t(".filter.#{filter}"),
9
+ low_clearance_filtered_mdm_patients_path(named_filter: filter)