package Ġno . nav . su . se . bak over . client . stubs . op pd rag Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . right Ċ import Ġno . nav . su . se . bak over . common . id ag Ċ import Ġno . nav . su . se . bak over . common . peri ode . Per i ode Ċ import Ġno . nav . su . se . bak over . domain . S aks nummer Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . U tb et aling Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . U tb et al ings lin je Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . K lasse K ode Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . K lasse Type Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim uler ing Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim uler ing Client Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim uler ing Fe ilet Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim ul ert Det al jer Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim ul ert Per i ode Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing . Sim ul ert U tb et aling Ċ import Ġjava . time . LocalDate Ċ Ċ object ĠSim uler ing Stub Ġ: ĠSim uler ing Client Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsim uler U tb et aling ( ut bet aling : ĠU tb et aling ): ĠEither < Sim uler ing Fe ilet , ĠSim uler ing > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( ut bet aling . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU tb et aling . U tb et al ings Type . NY Ġ-> Ġsim uler Ny U tb et aling ( ut bet aling , Ġut bet aling . s aks nummer ). right () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU tb et aling . U tb et al ings Type . ST ANS Ġ-> Ġsim uler In gen U tb et aling ( ut bet aling ). right () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU tb et aling . U tb et al ings Type . GJ EN OP PT A Ġ-> Ġsim uler Ny U tb et aling ( ut bet aling , Ġut bet aling . s aks nummer ). right () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU tb et aling . U tb et al ings Type . OP PH Ã ĺ R Ġ-> Ġsim uler In gen U tb et aling ( ut bet aling ). right () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsim uler Ny U tb et aling ( ut bet aling : ĠU tb et aling , Ġs aks nummer : ĠS aks nummer ): ĠSim uler ing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġperiod er Ġ= Ġut bet aling . ut bet al ings lin jer . map Ġ{ Ġut bet al ings lin je Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer i ode . create ( ut bet al ings lin je . f ra Og Med , Ġut bet al ings lin je . til Og Med ). til M Ã¥ ned sper iod er (). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ut bet al ings lin je . bel Ã¸ p Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSim ul ert Per i ode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ra Og Med Ġ= Ġit . f ra Og Med , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Og Med Ġ= Ġit . til Og Med , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSim ul ert U tb et aling ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ag System Id Ġ= Ġs aks nummer . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfe ilk onto Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor fall Ġ= Ġit . til Og Med , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet ales Til Id Ġ= Ġut bet aling . fn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet ales Til Nav n Ġ= Ġ" MY GG ĠL UR ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetal jer Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Yt else ( it . f ra Og Med , Ġit . til Og Med , Ġut bet al ings lin je . bel Ã¸ p ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. flatten () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSim uler ing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg jel der Id Ġ= Ġut bet aling . fn r , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg jel der Nav n Ġ= Ġ" MY GG ĠL UR ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdat o B ere g net Ġ= Ġid ag (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet to Bel Ã¸ p Ġ= Ġperiod er . calculate Net to (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode List Ġ= Ġperiod er , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Sim ul ert Per i ode >. calculate Net to () Ġ= ĊĠĠĠĠĠĠĠ Ġthis . sum Of Ġ{ Ġit . br ut to Yt else () Ġ} Ġ+ Ġthis . sum Of Ġ{ Ġsim ul ert Per i ode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsim ul ert Per i ode . ut bet aling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . detal jer Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Yt else () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sum Of Ġ{ Ġit . be lop Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsim uler In gen U tb et aling ( ut bet aling : ĠU tb et aling ): ĠSim uler ing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsim uler ings Per i ode Ġ= Ġwhen Ġ( val Ġsist e U tb et al ings lin je Ġ= Ġut bet aling . s iste U tb et al ings lin je ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠU tb et al ings lin je . End ring Ġ-> ĠSim ul ert Per i ode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ra Og Med Ġ= Ġsist e U tb et al ings lin je . vir k ning st id sp unkt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Og Med Ġ= Ġut bet aling . sen este D ato (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSim ul ert Per i ode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ra Og Med Ġ= Ġut bet aling . tid lig ste D ato (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Og Med Ġ= Ġut bet aling . sen este D ato (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSim uler ing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg jel der Id Ġ= Ġut bet aling . fn r , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg jel der Nav n Ġ= Ġ" MY GG ĠL UR ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdat o B ere g net Ġ= Ġid ag (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet to Bel Ã¸ p Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode List Ġ= ĠlistOf ( sim uler ings Per i ode ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Yt else ( f ra Og Med : ĠLocalDate , Ġtil Og Med : ĠLocalDate , Ġbel Ã¸ p : ĠInt ) Ġ= ĠSim ul ert Det al jer ( ĊĠĠĠĠĠĠĠ Ġf akt isk F ra Og Med Ġ= Ġf ra Og Med , ĊĠĠĠĠĠĠĠ Ġf akt isk Til Og Med Ġ= Ġtil Og Med , ĊĠĠĠĠĠĠĠ Ġk onto Ġ= Ġ" 4 9 5 2 0 0 0 ", ĊĠĠĠĠĠĠĠ Ġbe lop Ġ= Ġbel Ã¸ p , ĊĠĠĠĠĠĠĠ Ġtil b ake for ing Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġs ats Ġ= Ġbel Ã¸ p , ĊĠĠĠĠĠĠĠ Ġtype S ats Ġ= Ġ" M ND ", ĊĠĠĠĠĠĠĠ Ġant all S ats Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġu fore grad Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġklas se kode Ġ= ĠK lasse K ode . SU U FORE , ĊĠĠĠĠĠĠĠ Ġklas se kode B es k riv else Ġ= Ġ" Sup pl eren de Ġst Ã¸ nad ĠU f Ã¸ re ", ĊĠĠĠĠĠĠĠ Ġklas se Type Ġ= ĠK lasse Type . Y TEL , ĊĠĠĠ Ġ) Ċ } Ċ