renalware-core 2.0.158 → 2.0.163

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/components/configuration.js +20 -0
  3. data/app/assets/javascripts/renalware/components/{dialogs.js.erb → dialogs.js} +2 -5
  4. data/app/assets/javascripts/renalware/components/{feed_only_inputs.js.erb → feed_only_inputs.js} +4 -4
  5. data/app/assets/javascripts/renalware/{core.js.erb → core.js} +0 -5
  6. data/app/assets/javascripts/renalware/rollup_compiled.css +42050 -42050
  7. data/app/assets/javascripts/renalware/rollup_compiled.js +768 -201
  8. data/app/assets/stylesheets/renalware/modules/_clinical.scss +41 -0
  9. data/app/components/renalware/admissions/active_consult_alert_component.html.slim +1 -1
  10. data/app/components/renalware/article_component.rb +1 -1
  11. data/app/components/renalware/letters/letters_in_progress_component.rb +1 -5
  12. data/app/components/renalware/letters/unread_electronic_ccs_component.rb +1 -4
  13. data/app/components/renalware/medications/tabbed_prescriptions_list_component.html.slim +2 -2
  14. data/app/components/renalware/pathology/sparkline_component.html.slim +1 -1
  15. data/app/components/renalware/patients/bookmarks_component.rb +1 -5
  16. data/app/components/renalware/patients/messages_component.rb +1 -7
  17. data/app/components/renalware/pd/adequacy_results_component.rb +1 -1
  18. data/app/components/renalware/pd/pet_results_component.html.slim +5 -7
  19. data/app/components/renalware/surveys/eq5d_component.rb +1 -5
  20. data/app/components/renalware/surveys/pos_s_component.rb +1 -5
  21. data/app/components/renalware/system/admin_menu_component.rb +1 -4
  22. data/app/components/renalware/system/users_awaiting_approval_component.rb +1 -5
  23. data/app/controllers/renalware/api/token_authenticated_api_controller.rb +1 -1
  24. data/app/controllers/renalware/api/v1/medications/prescriptions_controller.rb +1 -1
  25. data/app/controllers/renalware/api/v1/patients/patients_controller.rb +1 -1
  26. data/app/controllers/renalware/events/events_controller.rb +0 -1
  27. data/app/controllers/renalware/pd/pet_results_controller.rb +1 -1
  28. data/{lib → app/documents}/document/attribute_initializer.rb +0 -0
  29. data/{lib → app/documents}/document/attribute_initializer/active_model.rb +0 -0
  30. data/{lib → app/documents}/document/attribute_initializer/base.rb +0 -0
  31. data/{lib → app/documents}/document/attribute_initializer/enum.rb +0 -0
  32. data/{lib → app/documents}/document/base.rb +0 -0
  33. data/{lib → app/documents}/document/embedded.rb +0 -0
  34. data/{lib → app/documents}/document/enum.rb +0 -0
  35. data/app/javascript/renalware/controllers/modal_controller.js +1 -1
  36. data/app/jobs/renalware/hd/generate_monthly_statistics.rb +1 -1
  37. data/app/jobs/renalware/hd/generate_monthly_statistics_for_patient_job.rb +1 -1
  38. data/app/jobs/renalware/letters/calculate_page_count_job.rb +0 -1
  39. data/app/jobs/renalware/letters/mailshots/create_mailshot_letters_job.rb +0 -1
  40. data/app/jobs/renalware/letters/printing/batch_print_job.rb +0 -1
  41. data/app/jobs/renalware/letters/save_rtf_letter_to_file_job.rb +1 -1
  42. data/app/mailers/renalware/letters/{delivery/errors.rb → delivery.rb} +2 -1
  43. data/app/mailers/renalware/letters/delivery/practice_mailer.rb +2 -2
  44. data/app/models/concerns/renalware/deviseable.rb +3 -3
  45. data/app/models/renalware/admissions/admission_query.rb +0 -1
  46. data/{lib → app/models}/renalware/automatic_age_calculator.rb +0 -0
  47. data/app/models/renalware/clinical/create_allergy.rb +4 -4
  48. data/app/models/renalware/clinics/create_clinic_visit.rb +4 -4
  49. data/app/models/renalware/clinics/current_observations.rb +3 -4
  50. data/app/models/renalware/events/alertable_events_query.rb +27 -0
  51. data/app/models/renalware/events/create_event.rb +0 -1
  52. data/app/models/renalware/events/event.rb +4 -0
  53. data/app/models/renalware/events/event_type_alert_trigger.rb +15 -0
  54. data/app/models/renalware/events/type.rb +7 -0
  55. data/app/models/renalware/feeds/files/exceptions.rb +1 -0
  56. data/app/models/renalware/feeds/files/practice_memberships/import_csv.rb +0 -1
  57. data/app/models/renalware/feeds/files/primary_care_physicians/import_csv.rb +0 -1
  58. data/app/models/renalware/feeds/message_processor.rb +0 -1
  59. data/app/models/renalware/hd/prescription_administration.rb +6 -4
  60. data/app/models/renalware/hd/profiles_in_date_range_query.rb +1 -6
  61. data/app/models/renalware/hd/scheduling/diary_range.rb +1 -2
  62. data/app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb +1 -1
  63. data/app/models/renalware/hd/session_forms/batch.rb +0 -1
  64. data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +0 -1
  65. data/app/models/renalware/hd/session_forms/batch_item.rb +0 -1
  66. data/app/models/renalware/hd/sessions/close_stale_open_sessions.rb +0 -1
  67. data/app/models/renalware/letters/approve_letter.rb +0 -1
  68. data/app/models/renalware/letters/complete_letter.rb +0 -1
  69. data/app/models/renalware/letters/delivery/delivery_policy.rb +0 -1
  70. data/app/models/renalware/letters/delivery/email_letter_to_practice.rb +0 -1
  71. data/app/models/renalware/letters/delivery/practice_email.rb +0 -1
  72. data/app/models/renalware/letters/html_renderer.rb +1 -1
  73. data/app/models/renalware/letters/letter_factory.rb +1 -1
  74. data/app/models/renalware/letters/part/recent_pathology_results.rb +0 -1
  75. data/app/models/renalware/letters/pathology_layout.rb +1 -1
  76. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  77. data/app/models/renalware/letters/pdf_renderer.rb +1 -1
  78. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +0 -1
  79. data/app/models/renalware/letters/printing/complete_batch.rb +0 -1
  80. data/app/models/renalware/letters/printing/pdf_combining.rb +0 -2
  81. data/app/models/renalware/letters/resolve_default_electronic_ccs.rb +0 -2
  82. data/app/models/renalware/letters/rtf_renderer.rb +3 -2
  83. data/app/models/renalware/modalities/change_patient_modality.rb +4 -4
  84. data/app/models/renalware/pathology.rb +1 -0
  85. data/app/models/renalware/pathology/adjust_observation.rb +0 -1
  86. data/app/models/renalware/pathology/message_listener.rb +1 -1
  87. data/app/models/renalware/pathology/observation.rb +1 -1
  88. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  89. data/app/models/renalware/pathology/observations_grouped_by_date_query.rb +0 -1
  90. data/app/models/renalware/pathology/observations_grouped_by_date_table.rb +0 -1
  91. data/app/models/renalware/pathology/ordered_patient_query.rb +1 -1
  92. data/app/models/renalware/pathology/requests/request_params_factory.rb +0 -1
  93. data/app/models/renalware/patients/calculate_age.rb +0 -1
  94. data/app/models/renalware/patients/clear_patient_ukrdc_data.rb +0 -1
  95. data/app/models/renalware/patients/ingestion/update_master_patient_index.rb +0 -1
  96. data/app/models/renalware/patients/last_successful_practice_sync_date_query.rb +0 -2
  97. data/app/models/renalware/patients/primary_care_physician.rb +1 -0
  98. data/app/models/renalware/patients/sync_ods_job.rb +1 -1
  99. data/app/models/renalware/patients/sync_practices_via_api.rb +1 -1
  100. data/app/models/renalware/pd.rb +5 -0
  101. data/app/models/renalware/pd/{apd/exceptions.rb → apd.rb.dead} +0 -0
  102. data/app/models/renalware/pd/apd/available_overnight_volume.rb +0 -1
  103. data/app/models/renalware/pd/apd/regime_calculations.rb +1 -1
  104. data/app/models/renalware/pd/create_regime.rb +4 -4
  105. data/app/models/renalware/pd/regimes_in_date_range_query.rb +0 -2
  106. data/app/models/renalware/pd/revise_regime.rb +5 -5
  107. data/{lib → app/models}/renalware/remembered_preferences.rb +0 -0
  108. data/app/models/renalware/research/study_participants_query.rb +0 -1
  109. data/app/models/renalware/transplants/create_donor_stage.rb +4 -4
  110. data/app/models/renalware/transplants/registrations/wait_list_query.rb +1 -1
  111. data/app/models/renalware/ukrdc.rb +1 -0
  112. data/app/models/renalware/ukrdc/create_encrypted_patient_xml_files.rb +2 -2
  113. data/app/models/renalware/ukrdc/create_patient_xml_file.rb +1 -2
  114. data/app/models/renalware/ukrdc/export_summary.rb +0 -1
  115. data/app/models/renalware/ukrdc/housekeeping/remove_old_export_archive_folders.rb +0 -1
  116. data/app/models/renalware/ukrdc/incoming/file_list.rb +0 -2
  117. data/app/models/renalware/ukrdc/incoming/import_survey.rb +0 -1
  118. data/app/models/renalware/ukrdc/incoming/import_surveys.rb +0 -1
  119. data/app/models/renalware/ukrdc/incoming/xml_document.rb +0 -1
  120. data/app/models/renalware/ukrdc/pathology_observation_requests_query.rb +1 -2
  121. data/app/models/renalware/ukrdc/treatment_timeline/generate_timeline.rb +0 -1
  122. data/app/models/renalware/ukrdc/treatment_timeline/generate_treatments.rb +1 -1
  123. data/app/models/renalware/ukrdc/treatment_timeline/generator_factory.rb +1 -1
  124. data/app/models/renalware/ukrdc/treatment_timeline/hd/generator.rb +1 -1
  125. data/app/models/renalware/ukrdc/treatment_timeline/pd/generator.rb +0 -1
  126. data/app/models/renalware/ukrdc/treatment_timeline/pd/regime_decorator.rb +0 -1
  127. data/app/models/renalware/ukrdc/treatment_timeline/transfer_out/generator.rb +0 -1
  128. data/app/models/renalware/ukrdc/treatment_timeline/transplant/generator.rb +0 -1
  129. data/app/models/renalware/ukrdc/xml_renderer.rb +2 -2
  130. data/app/models/renalware/virology/vaccination.rb +10 -2
  131. data/app/models/renalware/virology/vaccination_type.rb +16 -0
  132. data/app/presenters/renalware/accesses/dashboard_presenter.rb +0 -1
  133. data/app/presenters/renalware/clinical/header_presenter.rb +0 -1
  134. data/app/presenters/renalware/letters/letter_presenter.rb +1 -1
  135. data/app/presenters/renalware/letters/part_class_filter.rb +0 -1
  136. data/app/presenters/renalware/letters/practice_email_meta_data.rb +0 -1
  137. data/app/presenters/renalware/low_clearance/dashboard_presenter.rb +0 -1
  138. data/app/presenters/renalware/medications/prescription_presenter.rb +7 -0
  139. data/app/presenters/renalware/pathology/observations_diff.rb +0 -1
  140. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +0 -1
  141. data/app/presenters/renalware/summary_part.rb +0 -2
  142. data/app/presenters/renalware/transplants/donor_dashboard_presenter.rb +0 -1
  143. data/app/presenters/renalware/transplants/recipient_dashboard_presenter.rb +0 -1
  144. data/app/presenters/renalware/ukrdc/transplant_operation_presenter.rb +0 -1
  145. data/app/presenters/renalware/user_session_presenter.rb +1 -3
  146. data/app/values/renalware/bmi.rb +0 -2
  147. data/app/views/renalware/admin/cache/show.html.slim +0 -36
  148. data/app/views/renalware/admin/playgrounds/show.html.slim +2 -2
  149. data/app/views/renalware/events/events/_alerts.html.slim +3 -0
  150. data/app/views/renalware/events/events/alert/_simple.html.slim +5 -0
  151. data/app/views/renalware/events/events/toggled_cell/_swab.html.slim +1 -1
  152. data/app/views/renalware/hd/dashboards/_page_actions.html.slim +4 -1
  153. data/app/views/renalware/hd/mdm_patients/_patient.html.slim +1 -1
  154. data/app/views/renalware/hd/prescription_administrations/_form.html.slim +2 -2
  155. data/app/views/renalware/hd/transmission_logs/index.html.slim +2 -1
  156. data/app/views/renalware/layouts/_patient.html.slim +1 -0
  157. data/app/views/renalware/letters/batches/_create.html.slim +2 -2
  158. data/app/views/renalware/letters/contacts/_new_person.html.slim +1 -1
  159. data/app/views/renalware/letters/contacts/_person_from_directory.html.slim +1 -1
  160. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +13 -14
  161. data/app/views/renalware/letters/mailshots/mailshots/_form.html.slim +25 -21
  162. data/app/views/renalware/letters/parts/_allergies.html.slim +1 -1
  163. data/app/views/renalware/letters/parts/_problems.html.slim +1 -1
  164. data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +1 -1
  165. data/app/views/renalware/medications/home_delivery/events/_edit.html.slim +4 -4
  166. data/app/views/renalware/medications/prescriptions/_current.html.slim +1 -1
  167. data/app/views/renalware/medications/prescriptions/_current_hd.html.slim +1 -1
  168. data/app/views/renalware/medications/prescriptions/_form.html.slim +3 -3
  169. data/app/views/renalware/medications/prescriptions/_prescription.html.slim +3 -1
  170. data/app/views/renalware/medications/prescriptions/_recently_stopped.html.slim +1 -1
  171. data/app/views/renalware/system/downloads/index.html.slim +1 -1
  172. data/app/views/renalware/system/messages/_form.html.slim +1 -1
  173. data/app/views/renalware/system/view_metadata/_columns_table.html.slim +2 -2
  174. data/app/views/renalware/system/view_metadata/edit.html.slim +6 -6
  175. data/app/views/renalware/virology/vaccinations/_alert.html.slim +5 -0
  176. data/app/views/renalware/virology/vaccinations/_inputs.html.slim +2 -1
  177. data/app/views/renalware/virology/vaccinations/_toggled_cell.html.slim +1 -1
  178. data/config/initializers/core_extensions.rb +1 -1
  179. data/config/initializers/inflections.rb +2 -0
  180. data/config/locales/renalware/virology/virology.en.yml +2 -0
  181. data/db/migrate/20201105153422_update_medication_current_prescriptions_view.rb +7 -0
  182. data/db/migrate/20201112152752_update_pd_mdm_patients_view1.rb +7 -0
  183. data/db/migrate/20210105163944_create_virology_vaccination_types.rb +13 -0
  184. data/db/migrate/20210115181817_create_event_type_alert_triggers.rb +15 -0
  185. data/db/seeds/default/seeds.rb +1 -0
  186. data/db/seeds/default/virology/seeds.rb +3 -0
  187. data/db/seeds/default/virology/vaccination_types.rb +25 -0
  188. data/db/views/medication_current_prescriptions_v01.sql +2 -1
  189. data/db/views/medication_current_prescriptions_v02.sql +30 -0
  190. data/db/views/pd_mdm_patients_v03.sql +50 -0
  191. data/db/views/reporting_anaemia_audit_v01.sql +0 -2
  192. data/lib/core_extensions/active_support/{duration.rb → duration_additions.rb} +0 -0
  193. data/lib/failure.rb +6 -0
  194. data/lib/gpg_encrypt_folder.rb +0 -2
  195. data/lib/month_period.rb +16 -0
  196. data/lib/renalware/configuration.rb +5 -6
  197. data/lib/renalware/version_number.rb +1 -1
  198. data/lib/service_result.rb +17 -0
  199. data/lib/sql/indexed_case_stmt.rb +1 -3
  200. data/lib/success.rb +9 -0
  201. data/lib/tasks/ukrdc.rake +1 -1
  202. data/lib/week_period.rb +57 -0
  203. data/spec/factories/events/events.rb +1 -2
  204. data/spec/factories/letters/letters.rb +4 -11
  205. data/spec/factories/medications/prescription_version.rb +1 -2
  206. data/spec/factories/patients/ethnicities.rb +1 -2
  207. data/spec/factories/pd/bag_types.rb +2 -2
  208. data/spec/factories/snippets/users.rb +1 -2
  209. data/spec/factories/transplants/recipient_followups.rb +1 -2
  210. data/spec/factories/virology/vaccination_types.rb +8 -0
  211. data/spec/factories/virology/vaccinations.rb +1 -1
  212. data/{lib/test_support → spec/support}/ajax_helpers.rb +0 -0
  213. data/{lib/test_support → spec/support}/text_editor_helpers.rb +0 -0
  214. metadata +49 -40
  215. data/app/assets/javascripts/renalware/components/reporting.js.erb +0 -0
  216. data/app/assets/javascripts/renalware/components/session_timeout_redirect.js.erb +0 -37
  217. data/app/components/renalware/system/article_component.html.slim +0 -3
  218. data/app/components/renalware/system/article_component.rb +0 -9
  219. data/app/mailers/renalware/previews/report_preview.rb +0 -14
  220. data/app/mailers/renalware/previews/ukrdc_summary_preview.rb +0 -20
  221. data/app/mailers/renalware/previews/user_mailer_preview.rb +0 -16
  222. data/lib/renalware/failure.rb +0 -6
  223. data/lib/renalware/month_period.rb +0 -18
  224. data/lib/renalware/service_result.rb +0 -19
  225. data/lib/renalware/success.rb +0 -9
  226. data/lib/renalware/week_period.rb +0 -59
@@ -1,37 +0,0 @@
1
- // Create a timer that will poll to see if the user's session is still valid.
2
- // If it isn't, the server returns a 401 unauthorised causing a redirect the login page.
3
- // Note that we could in the future display a message letting them know their session
4
- // will expired in X seconds. The controller action we hit here could be expanded to
5
- // to render some js that would insert than into the page.
6
- // Note we don't want to poll if we are sat on the login page anyway. For one thing on Heroku it
7
- // would prevent a dyno sleeping, but its also a waste of resources.
8
- //
9
- // Note this mechanism has been superceded by the session_timeout.js stimulus controller.
10
- //
11
-
12
- <% if Renalware.config.session_expiry_use_previous_mechansim %>
13
- $(document).ready(function() {
14
- var login_path ="<%= Renalware::Engine.routes.url_helpers.new_user_session_path %>";
15
- var defaultPollFreq = <%= Renalware.config.session_timeout_polling_frequency.to_i %>;
16
- var frequency_s = defaultPollFreq;
17
-
18
- // This is a global window function so that we can call it directly from capybara tests to
19
- // bypass having to wait for the session polling interval to tick over.
20
- window.sessionTimeoutCheck = function(){
21
- if(window.location.pathname != login_path) {
22
- Rails.ajax({
23
- type: "GET",
24
- url: "<%= Renalware::Engine.routes.url_helpers.check_session_expired_path %>",
25
- dataType: "html",
26
- error: function(responseText, status, xhr) {
27
- if (xhr.status == 401) {
28
- window.location.reload()
29
- }
30
- }
31
- });
32
- }
33
- };
34
-
35
- setInterval(window.sessionTimeoutCheck, (frequency_s * 1000));
36
- });
37
- <% end %>
@@ -1,3 +0,0 @@
1
- article
2
- header
3
- h1= title
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- module System
5
- # Experimental ActionView component
6
- class AdminMenuComponent < ApplicationComponent
7
- end
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency "renalware/reporting"
4
-
5
- module Renalware
6
- module Reporting
7
- # Preview all emails at http://localhost:3000/rails/mailers
8
- class ReportPreview < ActionMailer::Preview
9
- def daily_summary
10
- Reporting::ReportMailer.daily_summary
11
- end
12
- end
13
- end
14
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency "renalware/reporting"
4
-
5
- module Renalware
6
- module UKRDC
7
- # Preview all emails at http://localhost:3000/rails/mailers
8
- class SumaryPreview < ActionMailer::Preview
9
- def daily_summary
10
- summary = ExportSummary.new(
11
- archive_folder: "/var/ukrdc/test",
12
- num_changed_patients: 10,
13
- milliseconds_taken: 123.0,
14
- results: { sent: 1, unsent: 2 }
15
- )
16
- UKRDC::SummaryMailer.export_summary(summary: summary)
17
- end
18
- end
19
- end
20
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- # Preview all emails at http://localhost:3000/rails/mailers
5
- class Admin::UserMailerPreview < ActionMailer::Preview
6
- def approval
7
- user = User.first
8
- Admin::UserMailer.approval(user)
9
- end
10
-
11
- def unexpiry
12
- user = User.first
13
- Admin::UserMailer.unexpiry(user)
14
- end
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- class Failure < ServiceResult
5
- end
6
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- class MonthPeriod
5
- attr_reader :month, :year, :start, :finish
6
-
7
- def initialize(month:, year:)
8
- @month = month
9
- @year = year
10
- @start = Time.new(year, month, 1, 0, 0, 0)
11
- @finish = start.end_of_month.end_of_day
12
- end
13
-
14
- def to_range
15
- start..finish
16
- end
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- class ServiceResult
5
- attr_reader :object
6
-
7
- def initialize(object)
8
- @object = object
9
- end
10
-
11
- def success?
12
- false
13
- end
14
-
15
- def failure?
16
- !success?
17
- end
18
- end
19
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- class Success < ServiceResult
5
- def success?
6
- true
7
- end
8
- end
9
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Renalware
4
- class WeekPeriod
5
- attr_reader :year, :week_number, :date_on_first_day_of_week
6
-
7
- def self.from_date(date)
8
- date = date.to_date
9
- new(week_number: date.cweek, year: date.cwyear)
10
- end
11
-
12
- def initialize(week_number:, year:)
13
- @week_number = week_number.to_i
14
- @year = year.to_i
15
- validate_week_number
16
- validate_year
17
- @date_on_first_day_of_week = Date.commercial(@year, @week_number)
18
- end
19
-
20
- def next
21
- self.class.from_date(date_on_first_day_of_week + 1.week)
22
- end
23
-
24
- def previous
25
- self.class.from_date(date_on_first_day_of_week - 1.week)
26
- end
27
-
28
- def to_a
29
- [week_number, year]
30
- end
31
-
32
- def to_s
33
- "#{I18n.l(date_on_first_day_of_week, format: :long)} " \
34
- "to #{I18n.l(last_day_of_week, format: :long)}"
35
- end
36
-
37
- # The date of last day of the week (a Sunday)
38
- def last_day_of_week
39
- @last_day_of_week ||= (date_on_first_day_of_week + 1.week - 1.minute).to_date
40
- end
41
-
42
- def validate_week_number
43
- if week_number < 1 || week_number > 53
44
- raise(ArgumentError, "invalid date: week_number must be 1-53")
45
- end
46
- end
47
-
48
- def validate_year
49
- raise(ArgumentError, "invalid date year must be >= 2000") if year <= 2000
50
- end
51
-
52
- def to_h
53
- {
54
- year: year,
55
- week_number: week_number
56
- }
57
- end
58
- end
59
- end