@@ -318,59 +318,87 @@ def programmes_by_id
318318 def decision_expiration_events
319319 all_programmes = Programme . all . to_a
320320
321- AcademicYear . all . filter_map do |academic_year |
322- next if academic_year >= AcademicYear . current
321+ AcademicYear . all . flat_map do |academic_year |
322+ next [ ] if academic_year >= AcademicYear . current
323323
324- vaccinated_programmes =
325- all_programmes . select do |programme |
324+ not_vaccinated_programmes =
325+ all_programmes . reject do |programme |
326326 patient . vaccination_status ( programme :, academic_year :) . vaccinated?
327327 end
328328
329- programmes_with_expired_consents =
330- consents
331- . select { it . academic_year == academic_year }
332- . flat_map { programmes_for ( it ) }
333- . reject { vaccinated_programmes . include? ( it ) }
334-
335- programmes_with_expired_triages =
336- triages
337- . select { it . academic_year == academic_year }
338- . flat_map { programmes_for ( it ) }
339- . reject { vaccinated_programmes . include? ( it ) }
340-
341- programmes_with_expired_psds =
342- patient_specific_directions
343- . select { it . academic_year == academic_year }
344- . flat_map { programmes_for ( it ) }
345- . reject { vaccinated_programmes . include? ( it ) }
346-
347- expired_items = [ ]
348- if programmes_with_expired_consents . any?
349- expired_items += [ "consent" , "health information" ]
350- end
351- expired_items << "triage outcome" if programmes_with_expired_triages . any?
352- expired_items << "PSD status" if programmes_with_expired_psds . any?
329+ vaccinated_but_seasonal_programmes =
330+ all_programmes . select do |programme |
331+ patient . vaccination_status ( programme :, academic_year :) . vaccinated? &&
332+ programme . seasonal?
333+ end
353334
354- next if expired_items . empty?
335+ expired_items =
336+ {
337+ vaccinated_but_seasonal : vaccinated_but_seasonal_programmes ,
338+ not_vaccinated : not_vaccinated_programmes
339+ } . transform_values do |programmes |
340+ get_expired_items ( academic_year :, programmes :)
341+ end
355342
356- programmes_with_expired_items = [
357- programmes_with_expired_consents ,
358- programmes_with_expired_triages ,
359- programmes_with_expired_psds
360- ] . flatten . uniq
343+ expired_items . map do |category , expired_items_in_category |
344+ expired_item_names = [ ]
345+ if expired_items_in_category [ :consents ] . any?
346+ expired_item_names += [ "consent" , "health information" ]
347+ end
348+ if expired_items_in_category [ :triages ] . any?
349+ expired_item_names << "triage outcome"
350+ end
351+ if expired_items_in_category [ :psds ] . any?
352+ expired_item_names << "PSD status"
353+ end
361354
362- expired_items_sentence =
363- expired_items . to_sentence (
364- words_connector : ", " ,
365- last_word_connector : " and "
366- )
355+ next [ ] if expired_item_names . empty?
356+
357+ title =
358+ "#{
359+ expired_item_names . to_sentence (
360+ words_connector : ", " ,
361+ last_word_connector : " and "
362+ ) . upcase_first
363+ } expired"
364+
365+ body =
366+ case category
367+ when :not_vaccinated
368+ "#{ @patient . full_name } was not vaccinated."
369+ when :vaccinated_but_seasonal
370+ "#{ @patient . full_name } was vaccinated."
371+ end
367372
368- {
369- title : "#{ expired_items_sentence . upcase_first } expired" ,
370- body : "#{ @patient . full_name } was not vaccinated." ,
371- at : academic_year . to_academic_year_date_range . end . end_of_day - 1 . second ,
372- programmes : programmes_with_expired_items
373- }
373+ programmes = expired_items_in_category . values . flatten . uniq
374+
375+ {
376+ title :,
377+ body :,
378+ at :
379+ academic_year . to_academic_year_date_range . end . end_of_day - 1 . second ,
380+ programmes :
381+ }
382+ end
383+ end
384+ end
385+
386+ private
387+
388+ def filter_expired ( items , academic_year :, programmes :)
389+ items
390+ . select { it . academic_year == academic_year }
391+ . flat_map { programmes_for ( it ) }
392+ . select { programmes . include? ( it ) }
393+ end
394+
395+ def get_expired_items ( academic_year :, programmes :)
396+ {
397+ consents :,
398+ triages :,
399+ psds : patient_specific_directions
400+ } . transform_values do |items |
401+ filter_expired ( items , academic_year :, programmes :)
374402 end
375403 end
376404end
0 commit comments