package Ġno . nav . hel se . ut bet aling st ids lin je Ċ Ċ import Ġjava . time . DayOfWeek . MON DAY Ċ import Ġjava . time . DayOfWeek . S UND AY Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Year Ċ import Ġjava . time . temporal . Ch rono Unit . YEAR S Ċ import Ġno . nav . hel se . hen del ser . Per i ode Ċ import Ġno . nav . hel se . person . IA ktiv it ets log g Ċ import Ġno . nav . hel se . person . et ter level se . Sub sums jon Observer Ċ import Ġno . nav . hel se . plus Ċ import Ġno . nav . hel se . sy k dom st ids lin je . uk ed ager Ċ import Ġno . nav . hel se . uk ed ager Ċ Ċ internal Ġclass ĠAl der ( private Ġval Ġf Ã¸ d sel sd ato : ĠLocalDate ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsy tti Ã¥r sd agen : ĠLocalDate Ġ= Ġf Ã¸ d sel sd ato . plus Years ( 7 0 ) ĊĠĠĠ Ġprivate Ġval Ġsist eV irk ed ag F Ã¸ r F yl te 7 0 Ã¥r : ĠLocalDate Ġ= Ġsy tti Ã¥r sd agen . s iste V irk ed ag F Ã¸ r () ĊĠĠĠ Ġprivate Ġval Ġred user t Yt else Al der : ĠLocalDate Ġ= Ġf Ã¸ d sel sd ato . plus Years ( 6 7 ) ĊĠĠĠ Ġprivate Ġval Ġfor h Ã¸ yet In n tek ts kr av Al der : ĠLocalDate Ġ= Ġf Ã¸ d sel sd ato . plus Years ( 6 7 ) ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM AK S _ SY KE PEN GED AGER _ OVER _ 6 7 Ġ= Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL DER _ FOR _ FOR H Ã ĺ Y ET _ FER IE PEN GES ATS Ġ= Ġ 5 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM INST E AL DER _ UT EN _ FULL MA KT _ FR A _ VER GE Ġ= Ġ 1 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠLocalDate . s iste V irk ed ag F Ã¸ r (): ĠLocalDate Ġ= Ġthis . minus Days ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this . day OfWeek ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS UND AY Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMON DAY Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġin nen for 6 7 Ã¥r sg ren se ( dat o : ĠLocalDate ) Ġ= Ġdat o Ġ<= Ġred user t Yt else Al der ĊĠĠĠ Ġinternal Ġfun Ġin nen for 7 0 Ã¥r sg ren se ( dat o : ĠLocalDate ) Ġ= Ġdat o Ġ<= Ġsist eV irk ed ag F Ã¸ r F yl te 7 0 Ã¥r ĊĠĠĠ Ġinternal Ġfun Ġhar N Ã¥ dd 7 0 Ã¥r sg ren se ( dat o : ĠLocalDate ) Ġ= Ġdat o Ġ>= Ġsist eV irk ed ag F Ã¸ r F yl te 7 0 Ã¥r ĊĠĠĠ Ġinternal Ġfun Ġmist et Sy ke p enger ett ( dat o : ĠLocalDate ) Ġ= Ġdat o Ġ>= Ġsy tti Ã¥r sd agen ĊĊĠĠĠ Ġinternal Ġfun Ġal der P Ã¥ D ato ( dat o : ĠLocalDate ) Ġ= ĠYEAR S . between ( f Ã¸ d sel sd ato , Ġdat o ). toInt () ĊĊĠĠĠ Ġprivate Ġfun Ġal der V ed Sl ut ten Av Ã ħ ret ( year : ĠYear ) Ġ= ĠYEAR S . between ( Year . from ( f Ã¸ d sel sd ato ), Ġyear ). toInt () ĊĊĠĠĠ Ġ// ĠFor h Ã¸ yet Ġinn tek ts kr av Ġg jel der Ġf ra Ġd agen Ġ_ et ter _ Ġ 6 7 - Ã¥r sd agen Ġ- Ġse ĠÂ§ Ġ 8 - 5 1 Ġand re Ġle dd Ġder Ġdet Ġs pes if iser es Ġ_ mel lom _. ĊĠĠĠ Ġinternal Ġfun Ġfor h Ã¸ yet In n tek ts kr av ( dat o : ĠLocalDate ) Ġ= Ġdat o Ġ> Ġfor h Ã¸ yet In n tek ts kr av Al der ĊĊĠĠĠ Ġinternal Ġfun Ġbe gr un n else For Minimum In n te kt ( sk j Ã¦ ring st id sp unkt : ĠLocalDate ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( for h Ã¸ yet In n tek ts kr av ( sk j Ã¦ ring st id sp unkt )) ĠBe gr un n else . Minimum In n te kt Over 6 7 Ġelse ĠBe gr un n else . Minimum In n te kt ĊĊĠĠĠ Ġinternal Ġfun Ġbe gr un n else For Al der ( d agen : ĠLocalDate ): ĠBe gr un n else Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( inn en for 6 7 Ã¥r sg ren se ( d agen )) Ġreturn ĠBe gr un n else . Sy ke pen ged ager Opp br uk t ĊĠĠĠĠĠĠĠ Ġif Ġ( inn en for 7 0 Ã¥r sg ren se ( d agen )) Ġreturn ĠBe gr un n else . Sy ke pen ged ager Opp br uk t Over 6 7 ĊĠĠĠĠĠĠĠ Ġreturn ĠBe gr un n else . Over 7 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfor Un g For Ã ħ S Ã¸ ke ( s Ã¸ kn ad st id sp unkt : ĠLocalDate ) Ġ= Ġal der P Ã¥ D ato ( s Ã¸ kn ad st id sp unkt ) Ġ< ĠM INST E AL DER _ UT EN _ FULL MA KT _ FR A _ VER GE ĊĊĠĠĠ Ġinternal Ġfun Ġbere gn F eri ep enger ( op pt jen ings Ã¥r : ĠYear , Ġbel Ã¸ p : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġal der V ed Sl ut ten Av Ã ħ ret Ġ= Ġal der V ed Sl ut ten Av Ã ħ ret ( op pt jen ings Ã¥r ) ĊĠĠĠĠĠĠĠ Ġval Ġpro sent s ats Ġ= Ġif Ġ( al der V ed Sl ut ten Av Ã ħ ret Ġ< ĠAL DER _ FOR _ FOR H Ã ĺ Y ET _ FER IE PEN GES ATS ) Ġ 0 . 1 0 2 Ġelse Ġ 0 . 1 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġf eri ep enger Ġ= Ġbel Ã¸ p Ġ* Ġpro sent s ats ĊĠĠĠĠĠĠĠ Ġ// TODO : Ġsub sums jon Observer .` Â§ 8 - 3 3 Ġle dd Ġ 3 `( bel Ã¸ p , Ġop pt jen ings Ã¥r , Ġpro sent s ats , Ġal der V ed Sl ut ten Av Ã ħ ret , Ġf eri ep enger ) ĊĠĠĠĠĠĠĠ Ġreturn Ġf eri ep enger ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġet ter level se 7 0 Ã¥r ( aktiv it ets log g : ĠIA ktiv it ets log g , Ġper i ode : ĠPer i ode , Ġav v iste D ager : ĠSet < LocalDate >, Ġj ur ist : ĠSub sums jon Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġf Ã¸ r F yl te 7 0 ( peri ode , Ġj ur ist ) ĊĠĠĠĠĠĠĠ Ġf ra Og Med F yl te 7 0 ( aktiv it ets log g , Ġper i ode , Ġav v iste D ager , Ġj ur ist ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġf Ã¸ r F yl te 7 0 ( peri ode : ĠPer i ode , Ġj ur ist : ĠSub sums jon Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( peri ode . start Ġ>= Ġsy tti Ã¥r sd agen ) Ġreturn ĊĠĠĠĠĠĠĠ Ġj ur ist .` Â§ Ġ 8 - 3 Ġle dd Ġ 1 Ġp unkt um Ġ 2 `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopp fy lt Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy tti Ã¥r sd agen Ġ= Ġsy tti Ã¥r sd agen , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all F om Ġ= Ġper i ode . start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all Tom Ġ= Ġmin Of ( sy tti Ã¥r sd agen . minus Days ( 1 ), Ġper i ode . end Inclusive ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ids lin je F om Ġ= Ġper i ode . start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ids lin je Tom Ġ= Ġper i ode . end Inclusive , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġav v iste D ager Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġf ra Og Med F yl te 7 0 ( aktiv it ets log g : ĠIA ktiv it ets log g , Ġper i ode : ĠPer i ode , Ġav v iste D ager : ĠSet < LocalDate >, Ġj ur ist : ĠSub sums jon Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġav v iste D ager F ra Og Med S Ã¸ tti Ġ= Ġav v iste D ager . filter Ġ{ Ġit Ġ>= Ġsy tti Ã¥r sd agen Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( av v iste D ager F ra Og Med S Ã¸ tti . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġaktiv it ets log g . info (" U tb et aling Ġstop pet Ġet ter Ġ$ sy tti Ã¥r sd agen , Ġs Ã¸ ker Ġf yl te Ġ 7 0 ĠÃ¥ r .") ĊĠĠĠĠĠĠĠ Ġj ur ist .` Â§ Ġ 8 - 3 Ġle dd Ġ 1 Ġp unkt um Ġ 2 `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopp fy lt Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy tti Ã¥r sd agen Ġ= Ġsy tti Ã¥r sd agen , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all F om Ġ= Ġmax Of ( sy tti Ã¥r sd agen , Ġper i ode . start ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all Tom Ġ= Ġper i ode . end Inclusive , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ids lin je F om Ġ= Ġper i ode . start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ids lin je Tom Ġ= Ġper i ode . end Inclusive , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġav v iste D ager Ġ= Ġav v iste D ager F ra Og Med S Ã¸ tti ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġm aks imum Sy ke p enger ( dat o : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġg jen st Ã¥ ende Sy ke pen ged ager : ĠInt , Ġg jen st Ã¥ ende Sy ke pen ged ager Over 6 7 : ĠInt ): ĠM aks imum Sy ke p enger Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmak sd ato Ord in Ã¦ r Ret t Ġ= ĠM aks imum Sy ke p enger . ord in Ã¦ r Ret t ( dat o , Ġfor br uk te D ager , Ġg jen st Ã¥ ende Sy ke pen ged ager ) ĊĠĠĠĠĠĠĠ Ġval Ġmak sd ato Be g ren set Ret t Ġ= ĠM aks imum Sy ke p enger . beg ren set Ret t ( dat o , Ġfor br uk te D ager , Ġthis , Ġg jen st Ã¥ ende Sy ke pen ged ager Over 6 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġab sol utt S iste Dag Med Sy ke p enger Ġ= ĠM aks imum Sy ke p enger . ab sol utt S iste Dag Med Sy ke p enger ( dat o , Ġfor br uk te D ager , Ġsist eV irk ed ag F Ã¸ r F yl te 7 0 Ã¥r ) ĊĠĠĠĠĠĠĠ Ġreturn ĠM aks imum Sy ke p enger . min ste Av ( mak sd ato Ord in Ã¦ r Ret t , Ġmak sd ato Be g ren set Ret t , Ġab sol utt S iste Dag Med Sy ke p enger ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠM aks imum Sy ke p enger Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġbere g ning F om : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfor br uk te D ager : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsist e Dag : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtil stand : ĠT il stand ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġg jen st Ã¥ ende D ager Ġ= Ġ( ber eg ning F om .. s iste Dag ). uk ed ager () ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġsist e Dag ( be gr un n else : ĠBe gr un n else ? Ġ= Ġnull ): ĠLocalDate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp or Be gr un n else ( be gr un n else ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsist e Dag ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfor br uk te D ager () Ġ= Ġfor br uk te D ager ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbe gr un n else () Ġ= Ġtil stand . be gr un n Av vis ning () ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġg jen st Ã¥ ende D ager ( be gr un n else : ĠBe gr un n else ? Ġ= Ġnull ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp or Be gr un n else ( be gr un n else ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġg jen st Ã¥ ende D ager ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsp or Be gr un n else ( be gr un n else : ĠBe gr un n else ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( be gr un n else Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtil stand . sp or Be gr un n else ()( be gr un n else , Ġsist e Dag , Ġfor br uk te D ager , Ġg jen st Ã¥ ende D ager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinterface ĠT il stand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsp or Be gr un n else (): ĠBe gr un n else .( LocalDate , ĠInt , ĠInt ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbe gr un n Av vis ning (): Ġno . nav . hel se . ut bet aling st ids lin je . Be gr un n else ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠUnder 6 7 Ġ: ĠT il stand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsp or Be gr un n else () Ġ= ĠBe gr un n else :: ` Â§ Ġ 8 - 1 2 Ġle dd Ġ 1 Ġp unkt um Ġ 1 ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbe gr un n Av vis ning () Ġ= Ġno . nav . hel se . ut bet aling st ids lin je . Be gr un n else . Sy ke pen ged ager Opp br uk t ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠOver 6 7 Ġ: ĠT il stand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsp or Be gr un n else () Ġ= ĠBe gr un n else :: ` Â§ Ġ 8 - 5 1 Ġle dd Ġ 3 ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbe gr un n Av vis ning () Ġ= Ġno . nav . hel se . ut bet aling st ids lin je . Be gr un n else . Sy ke pen ged ager Opp br uk t Over 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠOver 7 0 Ġ: ĠT il stand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsp or Be gr un n else () Ġ= ĠBe gr un n else :: ` Â§ Ġ 8 - 3 Ġle dd Ġ 1 Ġp unkt um Ġ 2 ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbe gr un n Av vis ning () Ġ= Ġno . nav . hel se . ut bet aling st ids lin je . Be gr un n else . Over 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinterface ĠBe gr un n else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Â§ Ġ 8 - 1 2 Ġle dd Ġ 1 Ġp unkt um Ġ 1 `( s iste Dag : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġg jen st Ã¥ ende D ager : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Â§ Ġ 8 - 5 1 Ġle dd Ġ 3 `( s iste Dag : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġg jen st Ã¥ ende D ager : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Â§ Ġ 8 - 3 Ġle dd Ġ 1 Ġp unkt um Ġ 2 `( s iste Dag : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġg jen st Ã¥ ende D ager : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġord in Ã¦ r Ret t ( dat o : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġg jen st Ã¥ ende Sy ke pen ged ager : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM aks imum Sy ke p enger ( dat o , for br uk te D ager , Ġdat o Ġ+ Ġg jen st Ã¥ ende Sy ke pen ged ager . uk ed ager , ĠT il stand . Under 6 7 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbeg ren set Ret t ( dat o : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġal der : ĠAl der , Ġg jen st Ã¥ ende Sy ke pen ged ager Over 6 7 : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM aks imum Sy ke p enger ( dat o , Ġfor br uk te D ager , Ġif Ġ( al der . inn en for 6 7 Ã¥r sg ren se ( dat o )) Ġal der . red user t Yt else Al der Ġ+ ĠM AK S _ SY KE PEN GED AGER _ OVER _ 6 7 . uk ed ager Ġelse Ġdat o Ġ+ Ġg jen st Ã¥ ende Sy ke pen ged ager Over 6 7 . uk ed ager , ĠT il stand . Over 6 7 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġab sol utt S iste Dag Med Sy ke p enger ( dat o : ĠLocalDate , Ġfor br uk te D ager : ĠInt , Ġsist e Dag : ĠLocalDate ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM aks imum Sy ke p enger ( dat o , Ġfor br uk te D ager , Ġsist e Dag , ĠT il stand . Over 7 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġmin ste Av ( var arg Ġdat o : ĠM aks imum Sy ke p enger ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdat o . min By OrNull Ġ{ Ġit . s iste Dag Ġ} !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ