package Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning Ċ Ċ import Ġno . nav . f amil ie . ba . sak . common . Fe il Ċ import Ġno . nav . f amil ie . ba . sak . common . U tb et al ings ik ker het Fe il Ċ import Ġno . nav . f amil ie . ba . sak . common . til K ort String Ċ import Ġno . nav . f amil ie . ba . sak . common . to Year Month Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . Til kj ent Yt else Val ider ing . mak s Bel Ã¸ p Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . dom ene . An del Til kj ent Yt else Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . dom ene . S ats Type Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . dom ene . Til kj ent Yt else Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . ber eg ning . dom ene . til T ids lin je Med An de ler Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . gr un nl ag . person op pl ys ning er . Person Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . gr un nl ag . person op pl ys ning er . Person Type Ċ import Ġno . nav . f amil ie . ba . sak . kj er ne . gr un nl ag . person op pl ys ning er . Person op pl ys ning G run nl ag Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . time . LocalDateTime Ċ Ċ // Ġ 3 ĠÃ¥ r Ġ( kr av Ġi Ġlo ven ) Ġog Ġ 2 ĠmÃ¥ ned er Ġ( p Ã¥ Ġg run n Ġav Ġbe handling st id ) Ċ fun Ġh ent Gy ld ig Et ter bet aling F om ( kr av D ato : ĠLocalDateTime ) Ġ= ĊĠĠĠ Ġkr av D ato . minus Years ( 3 ) ĊĠĠĠĠĠĠĠ Ġ. minus Months ( 2 ) ĊĠĠĠĠĠĠĠ Ġ. to LocalDate () ĊĠĠĠĠĠĠĠ Ġ. to Year Month () Ċ Ċ fun Ġh ent S Ã¸ kers An de ler ( ĊĠĠĠ Ġan de ler : ĠList < An del Til kj ent Yt else >, ĊĠĠĠ Ġs Ã¸ ker : ĠPerson Ċ ) Ġ= Ġan de ler . filter Ġ{ Ġit . person Ident Ġ== Ġs Ã¸ ker . person Ident . ident Ġ} Ċ Ċ fun Ġh ent B arn as An de ler ( ande ler : ĠList < An del Til kj ent Yt else >, Ġb arna : ĠList < Person >) Ġ= Ġb arna . map Ġ{ Ġb arn Ġ-> ĊĠĠĠ Ġb arn Ġto Ġan de ler . filter Ġ{ Ġit . person Ident Ġ== Ġb arn . person Ident . ident Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠE k stra Ġs ik ker het Ġr und t Ġh va Ġsom Ġut bet ales Ġsom ĠpÃ¥ Ġs ik t Ġv il Ġleg ges Ġinn Ġi Ċ Ġ* Ġde Ġres pe kt ive Ġst eg ene ĠSB Ġh Ã¥ nd ter er Ġs lik Ġat Ġdet Ġer Ġletter e Ġfor ĠSB ĠÃ¥ Ġret te Ġfe il ene . Ċ Ġ*/ Ċ object ĠT il kj ent Yt else Val ider ing Ġ{ ĊĊĠĠĠ Ġfun Ġval ider At Til kj ent Yt else Har Gy ld ig Et ter bet aling sp eri ode ( til kj ent Yt else : ĠT il kj ent Yt else ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgy ld ig Et ter bet aling F om Ġ= Ġh ent Gy ld ig Et ter bet aling F om ( til kj ent Yt else . be handling . op prett et Tid sp unkt ) ĊĠĠĠĠĠĠĠ Ġif Ġ( til kj ent Yt else . ande ler Til kj ent Yt else . any Ġ{ Ġit . st Ã¸ nad F om Ġ< Ġgy ld ig Et ter bet aling F om Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠU tb et al ings ik ker het Fe il ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme ld ing Ġ= Ġ" U tb et aling sper iod er Ġfor Ġen Ġeller Ġfl ere Ġav Ġpart ene / person ene Ġg Ã¥r Ġmer Ġen n Ġ 3 ĠÃ¥ r Ġtil b ake Ġi Ġtid .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrontend Fe il meld ing Ġ= Ġ" U tb et aling sper iod er Ġfor Ġen Ġeller Ġfl ere Ġav Ġpart ene / person ene Ġg Ã¥r Ġmer Ġen n Ġ 3 ĠÃ¥ r Ġtil b ake Ġi Ġtid . ĠV en nl ig st Ġend re ĠpÃ¥ Ġdat o ene , Ġeller Ġta Ġkont akt Ġmed Ġte amet Ġfor Ġh jel p ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġval ider At Til kj ent Yt else Har For nu ft ige Period er Og Bel Ã¸ p ( ĊĠĠĠĠĠĠĠ Ġtil kj ent Yt else : ĠT il kj ent Yt else , ĊĠĠĠĠĠĠĠ Ġperson op pl ys ning G run nl ag : ĠPerson op pl ys ning G run nl ag ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ã¸ ker Ġ= Ġperson op pl ys ning G run nl ag . s Ã¸ ker ĊĠĠĠĠĠĠĠ Ġval Ġb arna Ġ= Ġperson op pl ys ning G run nl ag . bar na ĊĊĠĠĠĠĠĠĠ Ġval Ġt ids lin je Med An de ler Ġ= Ġtil kj ent Yt else . til T ids lin je Med An de ler () ĊĊĠĠĠĠĠĠĠ Ġt ids lin je Med An de ler . to Segments (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ã¸ kers An de ler Ġ= Ġh ent S Ã¸ kers An de ler ( it . value , Ġs Ã¸ ker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb arn as An de ler Ġ= Ġh ent B arn as An de ler ( it . value , Ġb arna ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ider At Bel Ã¸ p For Part Stem mer Med Sat ser ( s Ã¸ ker , Ġs Ã¸ kers An de ler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb arn as An de ler . forEach Ġ{ Ġ( person , Ġan de ler ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ider At Bel Ã¸ p For Part Stem mer Med Sat ser ( person , Ġan de ler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġval ider At B arn Ik ke F Ã¥r Fl ere U tb et al inger Sam me Per i ode ( ĊĠĠĠĠĠĠĠ Ġbe hand len de Be handling Til kj ent Yt else : ĠT il kj ent Yt else , ĊĠĠĠĠĠĠĠ Ġb arn Med And re Til kj ent Yt else : ĠList < Pair < Person , ĠList < Til kj ent Yt else >> >, ĊĠĠĠĠĠĠĠ Ġperson op pl ys ning G run nl ag : ĠPerson op pl ys ning G run nl ag ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb arna Ġ= Ġperson op pl ys ning G run nl ag . bar na . sorted By Ġ{ Ġit . f Ã¸ d sel sd ato Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġb arn as An de ler Ġ= Ġh ent B arn as An de ler ( be hand len de Be handling Til kj ent Yt else . ande ler Til kj ent Yt else . toList (), Ġb arna ) ĊĊĠĠĠĠĠĠĠ Ġb arn as An de ler . forEach Ġ{ Ġ( bar n , Ġan de ler ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar ns An de ler F ra And re Be handling er Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb arn Med And re Til kj ent Yt else . filter Ġ{ Ġit . first . person Ident . ident Ġ== Ġb arn . person Ident . ident Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . ande ler Til kj ent Yt else Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . person Ident Ġ== Ġb arn . person Ident . ident Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ider In gen Over l app Av An de ler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan de ler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar ns An de ler F ra And re Be handling er , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe hand len de Be handling Til kj ent Yt else , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb arn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġval ider In gen Over l app Av An de ler ( ĊĠĠĠĠĠĠĠ Ġan de ler : ĠList < An del Til kj ent Yt else >, ĊĠĠĠĠĠĠĠ Ġbar ns An de ler F ra And re Be handling er : ĠList < An del Til kj ent Yt else >, ĊĠĠĠĠĠĠĠ Ġbe hand len de Be handling Til kj ent Yt else : ĠT il kj ent Yt else , ĊĠĠĠĠĠĠĠ Ġb arn : ĠPerson ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġan de ler . forEach Ġ{ Ġan del Til kj ent Yt else Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bar ns An de ler F ra And re Be handling er . any ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan del Til kj ent Yt else . overlap per Med ( it ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan del Til kj ent Yt else . pro sent Ġ+ Ġit . pro sent Ġ> ĠBigDecimal ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠU tb et al ings ik ker het Fe il ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme ld ing Ġ= Ġ" Vi Ġf inner Ġfl ere Ġut bet al inger Ġfor Ġb arn ĠpÃ¥ Ġbe handling Ġ${ be hand len de Be handling Til kj ent Yt else . be handling . id }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrontend Fe il meld ing Ġ= Ġ" Det Ġer Ġall ere de Ġin nv il get Ġut bet aling Ġav Ġbar ne try gd Ġfor Ġ${ bar n . person Ident . ident } Ġi Ġperiod en Ġ${ an del Til kj ent Yt else . st Ã¸ nad F om . til K ort String ()} Ġ- Ġ${ an del Til kj ent Yt else . st Ã¸ nad Tom . til K ort String ()} ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġm aks Bel Ã¸ p ( person Type : ĠPerson Type ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsat ser Ġ= ĠS ats Service . h ent Al les at ser () ĊĠĠĠĠĠĠĠ Ġval Ġsm Ã¥ bar ns Til leg g Ġ= Ġsat ser . filter Ġ{ Ġit . type Ġ== ĠS ats Type . S MA Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġord in Ã¦ r Med Til leg g Ġ= Ġsat ser . filter Ġ{ Ġit . type Ġ== ĠS ats Type . T IL LE GG _ OR BA Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġord in Ã¦ r Ġ= Ġsat ser . filter Ġ{ Ġit . type Ġ== ĠS ats Type . OR BA Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( sm Ã¥ bar ns Til leg g . isEmpty () Ġ|| Ġord in Ã¦ r Med Til leg g . isEmpty () Ġ|| Ġord in Ã¦ r . isEmpty ()) Ġerror (" F ant Ġik ke Ġsat ser Ġved Ġval ider ing ") ĊĠĠĠĠĠĠĠ Ġval Ġm aks Sm Ã¥ bar n st il leg g Ġ= Ġsm Ã¥ bar ns Til leg g . max By OrNull Ġ{ Ġit . bel Ã¸ p Ġ} !!. bel Ã¸ p ĊĠĠĠĠĠĠĠ Ġval Ġm aks Ord in Ã¦ r Med Til leg g Ġ= Ġord in Ã¦ r Med Til leg g . max By OrNull Ġ{ Ġit . bel Ã¸ p Ġ} !!. bel Ã¸ p ĊĠĠĠĠĠĠĠ Ġval Ġm aks Ord in Ã¦ r Ġ= Ġord in Ã¦ r . max By OrNull Ġ{ Ġit . bel Ã¸ p Ġ} !!. bel Ã¸ p ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( person Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson Type . BAR N Ġ-> Ġm aks Ord in Ã¦ r Med Til leg g ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson Type . S Ã ĺ KER Ġ-> Ġm aks Ord in Ã¦ r Ġ+ Ġm aks Sm Ã¥ bar n st il leg g ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠFe il (" Ik ke Ġst Ã¸ tte Ġfor ĠÃ¥ Ġut bet ale Ġtil Ġpers ont ype Ġ${ person Type . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġval ider At Bel Ã¸ p For Part Stem mer Med Sat ser ( ĊĠĠĠ Ġperson : ĠPerson , ĊĠĠĠ Ġan de ler : ĠList < An del Til kj ent Yt else >, ĊĠĠĠ Ġm aks Ant all An de ler : ĠInt Ġ= Ġif Ġ( person . type Ġ== ĠPerson Type . BAR N ) Ġ 1 Ġelse Ġ 2 , ĊĠĠĠ Ġm aks Total Bel Ã¸ p : ĠInt Ġ= Ġm aks Bel Ã¸ p ( person . type ) Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( ande ler . size Ġ> Ġm aks Ant all An de ler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠU tb et al ings ik ker het Fe il ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme ld ing Ġ= Ġ" Val ider ing Ġav Ġan de ler Ġfor Ġ${ person . type } Ġi Ġperiod en Ġ(${ ande ler . first (). st Ã¸ nad F om } Ġ- Ġ${ ande ler . first (). st Ã¸ nad Tom }) Ġfe ilet : ĠT ill at te Ġan de ler Ġ= Ġ$ mak s Ant all An de ler , Ġf akt is ke Ġan de ler Ġ= Ġ${ ande ler . size }. ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrontend Fe il meld ing Ġ= Ġ" Det Ġhar Ġsk j edd Ġen Ġsystem fe il , Ġog Ġbel Ã¸ pen e Ġstem mer Ġik ke Ġover ens Ġmed Ġdag ens Ġsat ser . ĠKont akt Ġte amet Ġfor Ġh jel p " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtotal bel Ã¸ p Ġ= Ġan de ler . map Ġ{ Ġit . k alk ul ert U tb et al ings bel Ã¸ p Ġ} ĊĠĠĠĠĠĠĠ Ġ. fold ( 0 ) Ġ{ Ġsum , Ġbel Ã¸ p Ġ-> Ġsum Ġ+ Ġbel Ã¸ p Ġ} ĊĠĠĠ Ġif Ġ( total bel Ã¸ p Ġ> Ġm aks Total Bel Ã¸ p ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠU tb et al ings ik ker het Fe il ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme ld ing Ġ= Ġ" Val ider ing Ġav Ġan de ler Ġfor Ġ${ person . type } Ġi Ġperiod en Ġ(${ ande ler . first (). st Ã¸ nad F om } Ġ- Ġ${ ande ler . first (). st Ã¸ nad Tom }) Ġfe ilet : ĠT ill att Ġtotal bel Ã¸ p Ġ= Ġ$ mak s Total Bel Ã¸ p , Ġf akt is ke Ġtotal bel Ã¸ p Ġ= Ġ$ total bel Ã¸ p .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrontend Fe il meld ing Ġ= Ġ" Det Ġhar Ġsk j edd Ġen Ġsystem fe il , Ġog Ġbel Ã¸ pen e Ġstem mer Ġik ke Ġover ens Ġmed Ġdag ens Ġsat ser . ĠKont akt Ġte amet Ġfor Ġh jel p " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ