package Ġdev . val ity . v ort ig on . handler . party . contract Ċ Ċ import Ġdev . val ity . dam sel . payment _ processing . Party Change Ċ import Ġdev . val ity . ge ck . common . util . T Base Util Ċ import Ġdev . val ity . ge ck . common . util . Type Util Ċ import Ġdev . val ity . machine gun . events ink . Machine Event Ċ import Ġdev . val ity . v ort ig on . domain . db . enums . Contract Status Ċ import Ġdev . val ity . v ort ig on . domain . db . enums . Contract or Type Ċ import Ġdev . val ity . v ort ig on . domain . db . enums . Legal Entity Ċ import Ġdev . val ity . v ort ig on . domain . db . enums . Private Entity Ċ import Ġdev . val ity . v ort ig on . domain . db . tables . po jos . Contract Ċ import Ġdev . val ity . v ort ig on . domain . db . tables . po jos . Contract or Ċ import Ġdev . val ity . v ort ig on . extension . get Claim Status Ċ import Ġdev . val ity . v ort ig on . handler . Change Handler Ċ import Ġdev . val ity . v ort ig on . handler . constant . Handle EventType Ċ import Ġdev . val ity . v ort ig on . repository . Contract Dao Ċ import Ġdev . val ity . v ort ig on . repository . Contract or Dao Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . springframework . core . annotation . Order Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . util . UUID Ċ Ċ private Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ @ Order ( 3 ) Ċ @ Component Ċ class ĠContract Create Handler ( ĊĠĠĠ Ġprivate Ġval Ġcontract Dao : ĠContract Dao , ĊĠĠĠ Ġprivate Ġval Ġcontract or Dao : ĠContract or Dao , Ċ ) Ġ: ĠChange Handler < Party Change , ĠMachine Event > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠhandleChange ( change : ĠParty Change , Ġevent : ĠMachine Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Handle Ġcontract Ġcreate Ġchange : Ġ$ change " Ġ} ĊĠĠĠĠĠĠĠ Ġchange . get Claim Status ()?. accepted ?. effects ?. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSet Contract Effect Ġ&& Ġit . contract Effect . effect . isSet Created ĊĠĠĠĠĠĠĠ Ġ} ?. forEach Ġ{ Ġclaim Effect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Contract Ġcreate Ġchange . ĠHandle Ġeffect : Ġ$ claim Effect " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontract Created Ġ= Ġclaim Effect . contract Effect . effect . created ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontract Ġ= ĠContract (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparty Id Ġ= Ġevent . source Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Id Ġ= Ġevent . eventId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time Ġ= ĠType Util . string To LocalDateTime ( event . createdAt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠType Util . string To LocalDateTime ( contract Created . createdAt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Since Ġ= Ġcontract Created . valid Since ?. let Ġ{ ĠType Util . string To LocalDateTime ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Until Ġ= Ġcontract Created . valid Until ?. let Ġ{ ĠType Util . string To LocalDateTime ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠT Base Util . union Field To Enum ( contract Created . getStatus (), ĠContract Status :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract Created . status . isSet Terminated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Terminated At Ġ= ĠType Util . string To LocalDateTime ( contract Created . status . terminated . terminated At ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract Created . isSet Legal Agreement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegal Agreement Id Ġ= Ġcontract Created . legal _ agreement . legal Agreement Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegal Agreement Signed At Ġ= ĠType Util . string To LocalDateTime ( contract Created . legal _ agreement . signed At ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract Created . legal _ agreement . isSet Valid Until ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegal Agreement Valid Until Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Util . string To LocalDateTime ( contract Created . legal _ agreement . valid Until ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontract or Ġ= Ġcontract Created . contract or ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontract or Id Ġ= Ġget Contract or Id ( contract Created ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract or Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontract or Ġ= Ġconvert Thrift Contract or ( event , Ġcontract or ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract or . contract or Id Ġ= Ġcontract or Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Save Ġcontract or : Ġ$ contract or " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract or Dao . save ( contract or ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . contract or Id Ġ= Ġcontract or Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . contract Id Ġ= Ġclaim Effect . contract Effect . contract Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Save Ġcontract : Ġ$ contract " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract Dao . save ( contract ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( change : ĠParty Change ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Handle EventType . CL AIM _ CREATED _ FILTER . filter . match ( change ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandle EventType . CL AIM _ STATUS _ CHANGED _ FILTER . filter . match ( change ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclaim Status Ġ= Ġchange . get Claim Status () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclaim Status ?. accepted ?. effects ?. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSet Contract Effect Ġ&& Ġit . contract Effect . effect . isSet Created ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Thrift Contract or ( ĊĠĠĠĠĠĠĠ Ġevent : ĠMachine Event , ĊĠĠĠĠĠĠĠ Ġcontract or : Ġdev . val ity . dam sel . domain . Contract or , ĊĠĠĠ Ġ): ĠContract or Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContract or (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . party Id Ġ= Ġevent . source Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Id Ġ= Ġevent . eventId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time Ġ= ĠType Util . string To LocalDateTime ( event . createdAt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . contract or Id Ġ= Ġcontract or Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract or Type Ġ= ĠT Base Util . union Field To Enum ( contract or , ĠContract or Type :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract or . isSet Registered User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg User Email Ġ= Ġcontract or . registered User . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( contract or . isSet Legal Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegal EntityType Ġ= ĠT Base Util . union Field To Enum ( contract or . legal Entity , ĠLeg al Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract or . legal Entity . isSet R ussian Legal Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr ussian Legal Entity Ġ= Ġcontract or . legal Entity . r ussian Legal Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Name Ġ= Ġr ussian Legal Entity . registered Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Registered Number Ġ= Ġr ussian Legal Entity . registered Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity In n Ġ= Ġr ussian Legal Entity . inn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Actual Address Ġ= Ġr ussian Legal Entity . actual Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Post Address Ġ= Ġr ussian Legal Entity . post Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Represent ative Position Ġ= Ġr ussian Legal Entity . represent ative Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Represent ative FullName Ġ= Ġr ussian Legal Entity . represent ative FullName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Represent ative Document Ġ= Ġr ussian Legal Entity . represent ative Document ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Bank Account Ġ= Ġr ussian Legal Entity . r ussian Bank Account . account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Bank Name Ġ= Ġr ussian Legal Entity . r ussian Bank Account . bank Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Legal Entity Bank Post Account Ġ= Ġr ussian Legal Entity . r ussian Bank Account . bank Post Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( contract or . legal Entity . isSet International Legal Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinternational Legal Entity Ġ= Ġcontract or . legal Entity . international Legal Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Legal Entity Name Ġ= Ġinternational Legal Entity . legal Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Legal Entity Trading Name Ġ= Ġinternational Legal Entity . trading Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Legal Entity Registered Address Ġ= Ġinternational Legal Entity . registered Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Actual Address Ġ= Ġinternational Legal Entity . actual Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Legal Entity Registered Number Ġ= Ġinternational Legal Entity . registered Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( international Legal Entity . isSet Country ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternational Legal Entity CountryCode Ġ= Ġinternational Legal Entity . country . id . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( contract or . isSet Private Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate EntityType Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Base Util . union Field To Enum ( contract or . private Entity , ĠPrivate Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract or . private Entity . isSet R ussian Private Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr ussian Private Entity Ġ= Ġcontract or . private Entity . r ussian Private Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r ussian Private Entity . isSet Contact Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Private Entity Email Ġ= Ġr ussian Private Entity . contact Info . email ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Private Entity PhoneNumber Ġ= Ġr ussian Private Entity . contact Info . phone _ number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Private Entity FirstName Ġ= Ġr ussian Private Entity . firstName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Private Entity Second Name Ġ= Ġr ussian Private Entity . second Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ussian Private Entity Middle Name Ġ= Ġr ussian Private Entity . middle Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Contract or Id ( contract Created : Ġdev . val ity . dam sel . domain . Contract ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontract or Id : ĠString Ġ= Ġif Ġ( contract Created . isSet Contract or Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontract Created . contract or Id ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( contract Created . isSet Contract or ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġcontract or Id ĊĠĠĠ Ġ} Ċ } Ċ