renalware-core 2.0.159 → 2.0.164

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/rollup_compiled.js +768 -201
  3. data/app/assets/stylesheets/renalware/modules/_clinical.scss +28 -0
  4. data/app/components/renalware/article_component.rb +1 -1
  5. data/app/components/renalware/letters/letters_in_progress_component.rb +1 -5
  6. data/app/components/renalware/letters/unread_electronic_ccs_component.rb +1 -4
  7. data/app/components/renalware/medications/tabbed_prescriptions_list_component.html.slim +2 -2
  8. data/app/components/renalware/pathology/sparkline_component.html.slim +1 -1
  9. data/app/components/renalware/patients/bookmarks_component.rb +1 -5
  10. data/app/components/renalware/patients/messages_component.rb +1 -7
  11. data/app/components/renalware/pd/adequacy_results_component.rb +1 -1
  12. data/app/components/renalware/pd/pet_results_component.html.slim +4 -4
  13. data/app/components/renalware/surveys/eq5d_component.rb +1 -5
  14. data/app/components/renalware/surveys/pos_s_component.rb +1 -5
  15. data/app/components/renalware/system/admin_menu_component.rb +1 -4
  16. data/app/components/renalware/system/users_awaiting_approval_component.rb +1 -5
  17. data/app/controllers/renalware/api/token_authenticated_api_controller.rb +1 -1
  18. data/app/controllers/renalware/api/v1/medications/prescriptions_controller.rb +1 -1
  19. data/app/controllers/renalware/api/v1/patients/patients_controller.rb +1 -1
  20. data/app/controllers/renalware/events/events_controller.rb +0 -1
  21. data/{lib → app/documents}/document/attribute_initializer.rb +0 -0
  22. data/{lib → app/documents}/document/attribute_initializer/active_model.rb +0 -0
  23. data/{lib → app/documents}/document/attribute_initializer/base.rb +0 -0
  24. data/{lib → app/documents}/document/attribute_initializer/enum.rb +0 -0
  25. data/{lib → app/documents}/document/base.rb +0 -0
  26. data/{lib → app/documents}/document/embedded.rb +0 -0
  27. data/{lib → app/documents}/document/enum.rb +0 -0
  28. data/app/javascript/renalware/controllers/modal_controller.js +1 -1
  29. data/app/jobs/renalware/hd/generate_monthly_statistics.rb +1 -1
  30. data/app/jobs/renalware/hd/generate_monthly_statistics_for_patient_job.rb +1 -1
  31. data/app/jobs/renalware/letters/calculate_page_count_job.rb +0 -1
  32. data/app/jobs/renalware/letters/mailshots/create_mailshot_letters_job.rb +0 -1
  33. data/app/jobs/renalware/letters/printing/batch_print_job.rb +0 -1
  34. data/app/jobs/renalware/letters/save_rtf_letter_to_file_job.rb +1 -1
  35. data/app/mailers/renalware/letters/{delivery/errors.rb → delivery.rb} +2 -1
  36. data/app/mailers/renalware/letters/delivery/practice_mailer.rb +2 -2
  37. data/app/models/concerns/renalware/deviseable.rb +3 -3
  38. data/app/models/renalware/admissions/admission_query.rb +0 -1
  39. data/{lib → app/models}/renalware/automatic_age_calculator.rb +0 -0
  40. data/app/models/renalware/clinical/create_allergy.rb +4 -4
  41. data/app/models/renalware/clinics/create_clinic_visit.rb +4 -4
  42. data/app/models/renalware/clinics/current_observations.rb +3 -4
  43. data/app/models/renalware/events/alertable_events_query.rb +27 -0
  44. data/app/models/renalware/events/create_event.rb +0 -1
  45. data/app/models/renalware/events/event.rb +4 -0
  46. data/app/models/renalware/events/event_type_alert_trigger.rb +15 -0
  47. data/app/models/renalware/events/type.rb +7 -0
  48. data/app/models/renalware/feeds/files/exceptions.rb +1 -0
  49. data/app/models/renalware/feeds/files/practice_memberships/import_csv.rb +0 -1
  50. data/app/models/renalware/feeds/files/primary_care_physicians/import_csv.rb +0 -1
  51. data/app/models/renalware/feeds/message_processor.rb +0 -1
  52. data/app/models/renalware/hd/prescription_administration.rb +6 -4
  53. data/app/models/renalware/hd/profiles_in_date_range_query.rb +1 -6
  54. data/app/models/renalware/hd/scheduling/diary_range.rb +1 -2
  55. data/app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb +1 -1
  56. data/app/models/renalware/hd/session_forms/batch.rb +0 -1
  57. data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +0 -1
  58. data/app/models/renalware/hd/session_forms/batch_item.rb +0 -1
  59. data/app/models/renalware/hd/sessions/close_stale_open_sessions.rb +0 -1
  60. data/app/models/renalware/letters/approve_letter.rb +0 -1
  61. data/app/models/renalware/letters/complete_letter.rb +0 -1
  62. data/app/models/renalware/letters/delivery/delivery_policy.rb +0 -1
  63. data/app/models/renalware/letters/delivery/email_letter_to_practice.rb +0 -1
  64. data/app/models/renalware/letters/delivery/practice_email.rb +0 -1
  65. data/app/models/renalware/letters/html_renderer.rb +1 -1
  66. data/app/models/renalware/letters/letter_factory.rb +1 -1
  67. data/app/models/renalware/letters/part/recent_pathology_results.rb +0 -1
  68. data/app/models/renalware/letters/pathology_layout.rb +1 -1
  69. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  70. data/app/models/renalware/letters/pdf_renderer.rb +1 -1
  71. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +0 -1
  72. data/app/models/renalware/letters/printing/complete_batch.rb +0 -1
  73. data/app/models/renalware/letters/printing/pdf_combining.rb +0 -2
  74. data/app/models/renalware/letters/resolve_default_electronic_ccs.rb +0 -2
  75. data/app/models/renalware/letters/rtf_renderer.rb +3 -2
  76. data/app/models/renalware/modalities/change_patient_modality.rb +4 -4
  77. data/app/models/renalware/pathology.rb +1 -0
  78. data/app/models/renalware/pathology/adjust_observation.rb +0 -1
  79. data/app/models/renalware/pathology/message_listener.rb +1 -1
  80. data/app/models/renalware/pathology/observation.rb +1 -1
  81. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  82. data/app/models/renalware/pathology/observations_grouped_by_date_query.rb +0 -1
  83. data/app/models/renalware/pathology/observations_grouped_by_date_table.rb +0 -1
  84. data/app/models/renalware/pathology/ordered_patient_query.rb +1 -1
  85. data/app/models/renalware/pathology/requests/request_params_factory.rb +0 -1
  86. data/app/models/renalware/patients/calculate_age.rb +0 -1
  87. data/app/models/renalware/patients/clear_patient_ukrdc_data.rb +0 -1
  88. data/app/models/renalware/patients/ingestion/update_master_patient_index.rb +0 -1
  89. data/app/models/renalware/patients/last_successful_practice_sync_date_query.rb +0 -2
  90. data/app/models/renalware/patients/primary_care_physician.rb +1 -0
  91. data/app/models/renalware/patients/sync_ods_job.rb +1 -1
  92. data/app/models/renalware/patients/sync_practices_via_api.rb +1 -1
  93. data/app/models/renalware/pd.rb +5 -0
  94. data/app/models/renalware/pd/{apd/exceptions.rb → apd.rb.dead} +0 -0
  95. data/app/models/renalware/pd/apd/available_overnight_volume.rb +0 -1
  96. data/app/models/renalware/pd/apd/regime_calculations.rb +1 -1
  97. data/app/models/renalware/pd/create_regime.rb +4 -4
  98. data/app/models/renalware/pd/regimes_in_date_range_query.rb +0 -2
  99. data/app/models/renalware/pd/revise_regime.rb +5 -5
  100. data/{lib → app/models}/renalware/remembered_preferences.rb +0 -0
  101. data/app/models/renalware/research/study_participants_query.rb +0 -1
  102. data/app/models/renalware/transplants/create_donor_stage.rb +4 -4
  103. data/app/models/renalware/transplants/registrations/wait_list_query.rb +1 -1
  104. data/app/models/renalware/ukrdc.rb +1 -0
  105. data/app/models/renalware/ukrdc/create_encrypted_patient_xml_files.rb +2 -2
  106. data/app/models/renalware/ukrdc/create_patient_xml_file.rb +1 -2
  107. data/app/models/renalware/ukrdc/export_summary.rb +0 -1
  108. data/app/models/renalware/ukrdc/housekeeping/remove_old_export_archive_folders.rb +0 -1
  109. data/app/models/renalware/ukrdc/incoming/file_list.rb +0 -2
  110. data/app/models/renalware/ukrdc/incoming/import_survey.rb +0 -1
  111. data/app/models/renalware/ukrdc/incoming/import_surveys.rb +0 -1
  112. data/app/models/renalware/ukrdc/incoming/xml_document.rb +0 -1
  113. data/app/models/renalware/ukrdc/pathology_observation_requests_query.rb +1 -2
  114. data/app/models/renalware/ukrdc/treatment_timeline/generate_timeline.rb +0 -1
  115. data/app/models/renalware/ukrdc/treatment_timeline/generate_treatments.rb +1 -1
  116. data/app/models/renalware/ukrdc/treatment_timeline/generator_factory.rb +1 -1
  117. data/app/models/renalware/ukrdc/treatment_timeline/hd/generator.rb +1 -1
  118. data/app/models/renalware/ukrdc/treatment_timeline/pd/generator.rb +0 -1
  119. data/app/models/renalware/ukrdc/treatment_timeline/pd/regime_decorator.rb +0 -1
  120. data/app/models/renalware/ukrdc/treatment_timeline/transfer_out/generator.rb +0 -1
  121. data/app/models/renalware/ukrdc/treatment_timeline/transplant/generator.rb +0 -1
  122. data/app/models/renalware/ukrdc/xml_renderer.rb +2 -2
  123. data/app/models/renalware/virology/vaccination.rb +10 -2
  124. data/app/models/renalware/virology/vaccination_type.rb +16 -0
  125. data/app/presenters/renalware/accesses/dashboard_presenter.rb +0 -1
  126. data/app/presenters/renalware/clinical/header_presenter.rb +0 -1
  127. data/app/presenters/renalware/letters/letter_presenter.rb +1 -1
  128. data/app/presenters/renalware/letters/part_class_filter.rb +0 -1
  129. data/app/presenters/renalware/letters/practice_email_meta_data.rb +0 -1
  130. data/app/presenters/renalware/low_clearance/dashboard_presenter.rb +0 -1
  131. data/app/presenters/renalware/medications/prescription_presenter.rb +7 -0
  132. data/app/presenters/renalware/pathology/observations_diff.rb +0 -1
  133. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +0 -1
  134. data/app/presenters/renalware/summary_part.rb +0 -2
  135. data/app/presenters/renalware/transplants/donor_dashboard_presenter.rb +0 -1
  136. data/app/presenters/renalware/transplants/recipient_dashboard_presenter.rb +0 -1
  137. data/app/presenters/renalware/ukrdc/transplant_operation_presenter.rb +0 -1
  138. data/app/values/renalware/bmi.rb +0 -2
  139. data/app/views/renalware/admin/cache/show.html.slim +0 -36
  140. data/app/views/renalware/admin/playgrounds/show.html.slim +2 -2
  141. data/app/views/renalware/events/events/_alerts.html.slim +3 -0
  142. data/app/views/renalware/events/events/alert/_simple.html.slim +5 -0
  143. data/app/views/renalware/events/events/toggled_cell/_swab.html.slim +1 -1
  144. data/app/views/renalware/hd/dashboards/_page_actions.html.slim +4 -1
  145. data/app/views/renalware/hd/mdm_patients/_patient.html.slim +1 -1
  146. data/app/views/renalware/hd/prescription_administrations/_form.html.slim +2 -2
  147. data/app/views/renalware/hd/transmission_logs/index.html.slim +2 -1
  148. data/app/views/renalware/layouts/_patient.html.slim +1 -0
  149. data/app/views/renalware/letters/batches/_create.html.slim +2 -2
  150. data/app/views/renalware/letters/contacts/_new_person.html.slim +1 -1
  151. data/app/views/renalware/letters/contacts/_person_from_directory.html.slim +1 -1
  152. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +13 -14
  153. data/app/views/renalware/letters/parts/_allergies.html.slim +1 -1
  154. data/app/views/renalware/letters/parts/_problems.html.slim +1 -1
  155. data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +1 -1
  156. data/app/views/renalware/medications/home_delivery/events/_edit.html.slim +4 -4
  157. data/app/views/renalware/medications/prescriptions/_current.html.slim +1 -1
  158. data/app/views/renalware/medications/prescriptions/_current_hd.html.slim +1 -1
  159. data/app/views/renalware/medications/prescriptions/_form.html.slim +3 -3
  160. data/app/views/renalware/medications/prescriptions/_prescription.html.slim +3 -1
  161. data/app/views/renalware/medications/prescriptions/_recently_stopped.html.slim +1 -1
  162. data/app/views/renalware/system/downloads/index.html.slim +1 -1
  163. data/app/views/renalware/system/messages/_form.html.slim +1 -1
  164. data/app/views/renalware/system/view_metadata/edit.html.slim +6 -6
  165. data/app/views/renalware/virology/vaccinations/_alert.html.slim +5 -0
  166. data/app/views/renalware/virology/vaccinations/_inputs.html.slim +2 -1
  167. data/app/views/renalware/virology/vaccinations/_toggled_cell.html.slim +1 -1
  168. data/config/initializers/core_extensions.rb +1 -1
  169. data/config/initializers/inflections.rb +2 -0
  170. data/config/locales/renalware/virology/virology.en.yml +2 -0
  171. data/db/migrate/20210105163944_create_virology_vaccination_types.rb +13 -0
  172. data/db/migrate/20210115181817_create_event_type_alert_triggers.rb +15 -0
  173. data/db/seeds/default/seeds.rb +1 -0
  174. data/db/seeds/default/virology/seeds.rb +3 -0
  175. data/db/seeds/default/virology/vaccination_types.rb +25 -0
  176. data/lib/core_extensions/active_support/{duration.rb → duration_additions.rb} +0 -0
  177. data/lib/failure.rb +6 -0
  178. data/lib/gpg_encrypt_folder.rb +0 -2
  179. data/lib/month_period.rb +16 -0
  180. data/lib/renalware/configuration.rb +5 -1
  181. data/lib/renalware/version_number.rb +1 -1
  182. data/lib/service_result.rb +17 -0
  183. data/lib/sql/indexed_case_stmt.rb +1 -3
  184. data/lib/success.rb +9 -0
  185. data/lib/tasks/ukrdc.rake +1 -1
  186. data/lib/week_period.rb +57 -0
  187. data/spec/factories/events/events.rb +1 -2
  188. data/spec/factories/letters/letters.rb +4 -11
  189. data/spec/factories/medications/prescription_version.rb +1 -2
  190. data/spec/factories/patients/ethnicities.rb +1 -2
  191. data/spec/factories/pd/bag_types.rb +2 -2
  192. data/spec/factories/snippets/users.rb +1 -2
  193. data/spec/factories/transplants/recipient_followups.rb +1 -2
  194. data/spec/factories/virology/vaccination_types.rb +8 -0
  195. data/spec/factories/virology/vaccinations.rb +1 -1
  196. data/{lib/test_support → spec/support}/ajax_helpers.rb +0 -0
  197. data/{lib/test_support → spec/support}/text_editor_helpers.rb +0 -0
  198. metadata +37 -31
  199. data/app/components/renalware/system/article_component.html.slim +0 -3
  200. data/app/components/renalware/system/article_component.rb +0 -9
  201. data/app/mailers/renalware/previews/report_preview.rb +0 -14
  202. data/app/mailers/renalware/previews/ukrdc_summary_preview.rb +0 -20
  203. data/app/mailers/renalware/previews/user_mailer_preview.rb +0 -16
  204. data/lib/renalware/failure.rb +0 -6
  205. data/lib/renalware/month_period.rb +0 -18
  206. data/lib/renalware/service_result.rb +0 -19
  207. data/lib/renalware/success.rb +0 -9
  208. data/lib/renalware/week_period.rb +0 -59
@@ -1,5 +1,5 @@
1
1
  .list.problems
2
- h3 Problems
2
+ b.subtitle Problems
3
3
 
4
4
  - if problems.any?
5
5
  ul.indented
@@ -1,3 +1,3 @@
1
1
  .list.investigations
2
- h3 Recent Investigations
2
+ b.subtitle Recent Investigations
3
3
  p= recent_pathology_results.results || " None"
@@ -7,7 +7,7 @@
7
7
  remote: true,
8
8
  authenticity_token: true,
9
9
  method: :patch,
10
- data: { target: "home-delivery-modal.form" },
10
+ data: { "home-delivery-modal-target" => "form" },
11
11
  as: :event) do |f|
12
12
 
13
13
  .modal__header
@@ -24,7 +24,7 @@
24
24
  / - the first is initially displayed and has the print options and a print button
25
25
  / - the second is displayed once Print has been clicked, and asked asks for feedback as to
26
26
  / whether printing was successful or not. It it was successful we set
27
- .form-fields data-target="home-delivery-modal.printOptions"
27
+ .form-fields data-home-delivery-modal-target="printOptions"
28
28
  - homecare_forms = Renalware::Drugs::HomecareForm.all
29
29
  = f.association :drug_type,
30
30
  collection: Renalware::Drugs::Type.where(id: homecare_forms.map(&:drug_type_id)),
@@ -32,7 +32,7 @@
32
32
  input_html: { \
33
33
  data: { \
34
34
  action: "change->home-delivery-modal#refreshForm", \
35
- target: "home-delivery-modal.drugtype" \
35
+ "home-delivery-modal-target" => "drugtype" \
36
36
  } \
37
37
  },
38
38
  wrapper: :horizontal_medium
@@ -59,7 +59,7 @@
59
59
  data: { action: "click->home-delivery-modal#askForPrintFeedback" },
60
60
  **disabled_args
61
61
 
62
- .show-after-printing.visuallyhidden data-target="home-delivery-modal.printFeedback"
62
+ .show-after-printing.visuallyhidden data-home-delivery-modal-target="printFeedback"
63
63
 
64
64
  h2 Was printing successful?
65
65
  .right
@@ -1,4 +1,4 @@
1
- h3 Current Medications
1
+ b.subtitle Current Medications
2
2
 
3
3
  - if prescriptions.blank?
4
4
  p.prescription No medications listed
@@ -1,5 +1,5 @@
1
1
  - if prescriptions.any?
2
- h3 Drugs to give on Haemodialysis
2
+ b.subtitle Drugs to give on Haemodialysis
3
3
 
4
4
  ul
5
5
  - prescriptions.each do |prescription|
@@ -38,16 +38,16 @@ ruby:
38
38
  required: false,
39
39
  wrapper: :horizontal_datepicker
40
40
 
41
- span(data-target= "prescriptions.providers")
41
+ span(data-prescriptions-target= "providers")
42
42
  = f.input :provider,
43
43
  collection: provider_codes,
44
44
  as: :inline_radio_buttons,
45
45
  label_method: :to_label,
46
46
  wrapper: :horizontal_medium,
47
- input_html: { data: { action: "change->prescriptions#toggleDeliveryDates", target: "prescriptions.providers"} }
47
+ input_html: { data: { action: "change->prescriptions#toggleDeliveryDates", "prescriptions.target" => "providers"} }
48
48
 
49
49
  / Only show this if home_delivery provider is active/selected. See prescriptions stimulus controller.
50
- .home_delivery_dates(style="display:none" data-target="prescriptions.homeDeliveryDates")
50
+ .home_delivery_dates(style="display:none" data-prescriptions-target="homeDeliveryDates")
51
51
  .row
52
52
  .small-12.medium-4.large-3.columns
53
53
  .small-12.medium-8.large-9.columns
@@ -1,5 +1,4 @@
1
1
  - recently_changed = defined?(recently_changed) && recently_changed
2
-
3
2
  li.prescription class=("recently_changed" if recently_changed)
4
3
  = prescription.drug.name
5
4
  = blank_separator
@@ -8,6 +7,9 @@ li.prescription class=("recently_changed" if recently_changed)
8
7
  = prescription.medication_route.code
9
8
  = blank_separator
10
9
  = prescription.frequency
10
+ = blank_separator
11
+ i
12
+ b= prescription.provider_suffix
11
13
 
12
14
  / We pass in date_changed if the prescription is recently_changed or recently_stopped
13
15
  / It could be the prescribed_on or terminated_on date
@@ -1,4 +1,4 @@
1
- h3 Recently Stopped Medications
1
+ b.subtitle Recently Stopped Medications
2
2
 
3
3
  - if prescriptions.blank?
4
4
  p.prescription None
@@ -22,7 +22,7 @@
22
22
  - items.each do |item|
23
23
  .download
24
24
  .file
25
- = link_to(system_download_path(item), target: "_blank") do
25
+ = link_to(system_download_path(item), target: "_blank", rel: "noopener") do
26
26
  i.far.fa-file-alt
27
27
  .details
28
28
  h3= link_to(item.name, system_download_path(item), target: "_blank")
@@ -1,4 +1,4 @@
1
- - severities = Renalware::System::Message.severity.values.map{|val| [val&.humanize, val] }
1
+ - severities = Renalware::System::Message.severity.values.map{ |val| [val&.humanize, val] }
2
2
  = simple_form_for(message,
3
3
  as: :message,
4
4
  html: { autocomplete: "off" }) do |f|
@@ -38,18 +38,18 @@ ruby:
38
38
  / Tabs - see also js stimulus tabs-controller
39
39
  div(data-controller="tabs" data-tabs-active-tab="-mb-px border-l border-t border-r rounded-t")
40
40
  ul.list-reset.flex.border-b.ml-0
41
- li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
41
+ li.-mb-px.mr-1(data-tabs-target="tab" data-action="click->tabs#change")
42
42
  a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Columns
43
- li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
43
+ li.-mb-px.mr-1(data-tabs-target="tab" data-action="click->tabs#change")
44
44
  a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Filters
45
- li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
45
+ li.-mb-px.mr-1(data-tabs-target="tab" data-action="click->tabs#change")
46
46
  a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Previous versions
47
47
 
48
- .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
48
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-tabs-target="panel")
49
49
  = render "columns_table", view: view
50
- .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
50
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-tabs-target="panel")
51
51
  = render "filters_form", view: view
52
- .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
52
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-tabs-target="panel")
53
53
  = render "versions", view: view
54
54
 
55
55
  .modal__footer
@@ -0,0 +1,5 @@
1
+ li.patient-alert.vaccination
2
+ i.fas.fa-syringe
3
+ - title = Renalware::Virology::VaccinationType.find_by(code: event.document&.type)&.name
4
+ span.title= link_to title, renalware.patient_virology_dashboard_path(event.patient)
5
+ span.date= l(event.date_time.to_date)
@@ -1,5 +1,6 @@
1
1
  / See Vaccination.to_partial_path etc
2
2
  / Pulled into the New Event form via a js get to EventsController#new
3
3
  = f.simple_fields_for :document, event.document do |fd|
4
- = fd.input :type, wrapper: :horizontal_medium
4
+ /= fd.input :type, wrapper: :horizontal_medium
5
+ = fd.input :type, wrapper: :horizontal_medium, collection: Renalware::Virology::VaccinationType.ordered.pluck(:name, :code)
5
6
  = fd.input :drug, wrapper: :horizontal_medium, collection: Renalware::Drugs::Drug.for(:vaccine).pluck(:name, :name)
@@ -3,7 +3,7 @@
3
3
 
4
4
  dl.dl-horizontal
5
5
  dt= attr_name(document, :type, suffix: ":")
6
- dd= document.type&.text || t("unspecified")
6
+ dd= document.type_name.presence || t("unspecified")
7
7
  dt= attr_name(document, :drug, suffix: ":")
8
8
  dd= document.drug.presence || t("unspecified")
9
9
  dt= attr_name(event, :notes, suffix: ":")
@@ -5,7 +5,7 @@ require "core_extensions/i18n/always_cascade"
5
5
  require "core_extensions/dumb_delegator"
6
6
  # require "core_extensions/active_record/sort"
7
7
  require "core_extensions/date"
8
- require "core_extensions/active_support/duration"
8
+ require "core_extensions/active_support/duration_additions"
9
9
  require "core_extensions/scenic"
10
10
  require "core_extensions/hash"
11
11
  require "core_extensions/active_record/migration_helpers"
@@ -32,6 +32,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
32
32
  inflect.acronym "CCs"
33
33
  inflect.acronym "CM"
34
34
  inflect.acronym "CSV"
35
+ inflect.acronym "CRF"
35
36
  inflect.acronym "DNA"
36
37
  inflect.acronym "EDTA"
37
38
  inflect.acronym "ESRF"
@@ -55,6 +56,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
55
56
  inflect.acronym "EQ5D"
56
57
  inflect.acronym "EQ5D5L"
57
58
  inflect.acronym "POS"
59
+ inflect.acronym "YAML"
58
60
  inflect.irregular "feedback", "feedback"
59
61
  inflect.acronym "NHS"
60
62
  inflect.uncountable %w(cache)
@@ -26,4 +26,6 @@ en:
26
26
  hbv_booster: HBV Booster
27
27
  influenza: Influenza
28
28
  pneumococcus: Pneumococcus
29
+ covid19_1: COVID-19 1
30
+ covid19_2: COVID-19 2
29
31
  patient_refused: Patient Refused
@@ -0,0 +1,13 @@
1
+ class CreateVirologyVaccinationTypes < ActiveRecord::Migration[5.2]
2
+ within_renalware_schema do
3
+ def change
4
+ create_table :virology_vaccination_types do |t|
5
+ t.string :code, null: false, index: { unique: true }
6
+ t.string :name, null: false, index: { unique: true }
7
+ t.integer :position, null: false, default: 0
8
+ t.datetime :deleted_at
9
+ t.timestamps null: false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ class CreateEventTypeAlertTriggers < ActiveRecord::Migration[5.2]
2
+ def change
3
+ within_renalware_schema do
4
+ create_table(
5
+ :event_type_alert_triggers,
6
+ comment: "Matching alerts are displayed on patient pages"
7
+ ) do |t|
8
+ t.references :event_type, foreign_key: true, null: false
9
+ t.text :when_event_document_contains
10
+ t.text :when_event_description_contains
11
+ t.timestamps null: false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -20,3 +20,4 @@ require_relative "./practices/seeds"
20
20
  require_relative "./pd/seeds"
21
21
  require_relative "./renal/seeds"
22
22
  require_relative "./transplants/seeds"
23
+ require_relative "./virology/seeds"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "./vaccination_types"
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Renalware
4
+ module Virology
5
+ log "Adding virology vaccination types" do
6
+ {
7
+ hbv1: "HBV Vaccination 1",
8
+ hbv2: "HBV Vaccination 2",
9
+ hbv3: "HBV Vaccination 3",
10
+ hbv4: "HBV Vaccination 4",
11
+ hbv_booster: "HBV Booster",
12
+ influenza: "Influenza",
13
+ pneumococcus: "Pneumococcus",
14
+ covid19_1: "COVID-19 1",
15
+ covid19_2: "COVID-19 2",
16
+ patient_refused: "Patient Refused",
17
+ patient_refused_covid19: "Patient refused Covid-19 vaccine",
18
+ patient_refused_covid19_pfizer: "Patient refused Covid-19 vaccine Pfizer",
19
+ patient_refused_covid19_astrazenica: "Patient refused Covid-19 vaccine Astra Zeneca"
20
+ }.each do |code, name|
21
+ VaccinationType.find_or_create_by!(code: code, name: name)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "service_result"
4
+
5
+ class Failure < ServiceResult
6
+ end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "attr_extras"
4
-
5
3
  # Shell out to gpg with a a command like this
6
4
  # gpg --armor --no-default-keyring --keyring keyring.gpg
7
5
  # --trust-model always -r 'renalware_test'
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MonthPeriod
4
+ attr_reader :month, :year, :start, :finish
5
+
6
+ def initialize(month:, year:)
7
+ @month = month
8
+ @year = year
9
+ @start = Time.new(year, month, 1, 0, 0, 0)
10
+ @finish = start.end_of_month.end_of_day
11
+ end
12
+
13
+ def to_range
14
+ start..finish
15
+ end
16
+ end
@@ -136,6 +136,9 @@ module Renalware
136
136
  # Note that the standard HL7 PID admin sex values are not adhered to here. For reference
137
137
  # they are:
138
138
  # F Female, M Male, O Other, U Unknown, A Ambiguous, N Not applicable
139
+ # Note
140
+ # - NS = Not Stated
141
+ # - NK = Not Known
139
142
  config_accessor(:hl7_pid_sex_map) do
140
143
  {
141
144
  "MALE" => "M",
@@ -144,7 +147,8 @@ module Renalware
144
147
  "UNKNOWN" => "NK",
145
148
  "NOTKNOWN" => "NK",
146
149
  "AMBIGUOUS" => "NS",
147
- "NOT APPLICABLE" => "NS"
150
+ "NOT APPLICABLE" => "NS",
151
+ "BOTH" => "NS"
148
152
  }.freeze
149
153
  end
150
154
  end
@@ -5,6 +5,6 @@ module Renalware
5
5
  # to creat that class even though its not used. If we don't do this zeitwerk
6
6
  # complains that version.rb does export a constant called Version.
7
7
  class VersionNumber
8
- VERSION = "2.0.159"
8
+ VERSION = "2.0.164"
9
9
  end
10
10
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ServiceResult
4
+ attr_reader :object
5
+
6
+ def initialize(object)
7
+ @object = object
8
+ end
9
+
10
+ def success?
11
+ false
12
+ end
13
+
14
+ def failure?
15
+ !success?
16
+ end
17
+ end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "attr_extras"
4
-
5
- module SQL
3
+ module Sql
6
4
  # Example:
7
5
  #
8
6
  # indexed_case_stmt(:code, "DT", "AC", "XY")
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "service_result"
4
+
5
+ class Success < ServiceResult
6
+ def success?
7
+ true
8
+ end
9
+ end
@@ -39,7 +39,7 @@ namespace :ukrdc do
39
39
  RubyProf.start
40
40
  end
41
41
  # Renalware::UKRDC::TreatmentTimeline::GenerateTreatments.call
42
- Renalware::UKRDC::CreateEncryptedPatientXMLFiles.new(
42
+ Renalware::UKRDC::CreateEncryptedPatientXmlFiles.new(
43
43
  changed_since: ENV["changed_since"],
44
44
  patient_ids: ENV.fetch("patient_ids", "").split(",").map(&:to_i),
45
45
  force_send: ENV["force_send"] == "true"
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ class WeekPeriod
4
+ attr_reader :year, :week_number, :date_on_first_day_of_week
5
+
6
+ def self.from_date(date)
7
+ date = date.to_date
8
+ new(week_number: date.cweek, year: date.cwyear)
9
+ end
10
+
11
+ def initialize(week_number:, year:)
12
+ @week_number = week_number.to_i
13
+ @year = year.to_i
14
+ validate_week_number
15
+ validate_year
16
+ @date_on_first_day_of_week = Date.commercial(@year, @week_number)
17
+ end
18
+
19
+ def next
20
+ self.class.from_date(date_on_first_day_of_week + 1.week)
21
+ end
22
+
23
+ def previous
24
+ self.class.from_date(date_on_first_day_of_week - 1.week)
25
+ end
26
+
27
+ def to_a
28
+ [week_number, year]
29
+ end
30
+
31
+ def to_s
32
+ "#{I18n.l(date_on_first_day_of_week, format: :long)} " \
33
+ "to #{I18n.l(last_day_of_week, format: :long)}"
34
+ end
35
+
36
+ # The date of last day of the week (a Sunday)
37
+ def last_day_of_week
38
+ @last_day_of_week ||= (date_on_first_day_of_week + 1.week - 1.minute).to_date
39
+ end
40
+
41
+ def validate_week_number
42
+ if week_number < 1 || week_number > 53
43
+ raise(ArgumentError, "invalid date: week_number must be 1-53")
44
+ end
45
+ end
46
+
47
+ def validate_year
48
+ raise(ArgumentError, "invalid date year must be >= 2000") if year <= 2000
49
+ end
50
+
51
+ def to_h
52
+ {
53
+ year: year,
54
+ week_number: week_number
55
+ }
56
+ end
57
+ end