package Ġnet . cord a . finance . contracts . universal Ċ Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . serialization . C ord a Serializable Ċ import Ġnet . cord a . finance . contracts . Frequency Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ Ċ @ C ord a Serializable Ċ interface ĠArrange ment Ċ Ċ // ĠA Ġbase Ġarrange ment Ġwith Ġno Ġrights Ġand Ġno Ġoblig ations . ĠContract Ġcancellation / termination Ġis Ġa Ġtransition Ġto Ġ`` Zero ``. Ċ class ĠZero Ġ: ĠArrange ment Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠZero ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠA Ġbasic Ġarrange ment Ġrepresenting Ġimmediate Ġtransfer Ġof ĠCash Ġ- ĠX Ġamount Ġof Ġcurrency ĠC CY Ġfrom Ġparty ĠA Ġto Ġparty ĠB . Ċ // ĠX Ġis Ġan Ġobservable Ġof Ġtype ĠBigDecimal . Ċ // Ċ // ĠTODO : Ġshould Ġbe Ġreplaced Ġwith Ġsomething Ġthat Ġuses ĠC ord a Ġassets Ġand / or Ġcash ? Ċ // ĠTODO : Ġshould Ġonly Ġbe Ġallowed Ġto Ġtransfer Ġnon - negative Ġamounts Ċ data Ġclass ĠO bl igation ( val Ġamount : ĠPer ceiv able < BigDecimal >, Ġval Ġcurrency : ĠCurrency , Ġval Ġfrom : ĠParty , Ġval Ġto : ĠParty ) Ġ: ĠArrange ment Ċ Ċ // ĠA Ġcombin ator Ġover Ġa Ġlist Ġof Ġarrange ments . ĠEach Ġarrange ment Ġin Ġlist Ġwill Ġcreate Ġa Ġseparate Ġindependent Ġarrange ment Ġstate . Ċ // ĠThe Ġ`` And `` Ġcombin ator Ġcannot Ġbe Ġroot Ġin Ġa Ġarrange ment . Ċ data Ġclass ĠAnd ( val Ġarrange ments : ĠSet < Arrange ment >) Ġ: ĠArrange ment Ċ Ċ @ C ord a Serializable Ċ data Ġclass ĠAction ( val Ġname : ĠString , Ġval Ġcondition : ĠPer ceiv able < Boolean >, Ġval Ġarrange ment : ĠArrange ment ) Ċ Ċ // ĠAn Ġaction Ġcombin ator . ĠThis Ġdecl ares Ġa Ġlist Ġof Ġnamed Ġaction Ġthat Ġcan Ġbe Ġtaken Ġby Ġanyone Ġof Ġthe Ġactors Ġgiven Ġthat Ċ // Ġ_ condition _ Ġis Ġmet . ĠIf Ġthe Ġaction Ġis Ġperformed Ġthe Ġarrange ment Ġstate Ġtransitions Ġinto Ġthe Ġspecified Ġarrange ment . Ċ data Ġclass ĠActions ( val Ġactions : ĠSet < Action >) Ġ: ĠArrange ment Ċ Ċ // ĠRoll Ġout Ġof Ġarrange ment Ċ // ĠTODO : Ġfixing Ġoffset Ċ // ĠTODO : Ġthink Ġabout Ġpayment Ġoffset Ġ( ie . Ġset tlement ) Ġ- Ġprobably Ġit Ġdoesn 't Ġbelong Ġon Ġa Ġdistributed Ġledger Ċ data Ġclass ĠRoll Out ( val ĠstartDate : ĠLocalDate , Ġval ĠendDate : ĠLocalDate , Ġval Ġfrequency : ĠFrequency , Ġval Ġtemplate : ĠArrange ment ) Ġ: ĠArrange ment Ċ Ċ // ĠContinu ation Ġof Ġroll Ġout Ċ // ĠMay Ġonly Ġbe Ġused Ġinside Ġtemplate Ġfor ĠRoll Out Ċ class ĠContinu ation Ġ: ĠArrange ment Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠContinu ation ĊĠĠĠ Ġ} Ċ }