package Ġnet . cord acl ub . mar ge . hospital Ċ Ċ import Ġio . blue bank . bra id . cord a . services . transaction Ċ import Ġio . cord ite . d gl . cord a . impl . Ledger Api Impl Ċ import Ġio . cord ite . d gl . cord a . token . list All Token Types Ċ import Ġio . vertx . core . Future Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġnet . cord a . core . node . App Service Hub Ċ import Ġnet . cord a . core . node . services . query By Ċ import Ġnet . cord a . core . node . services . vault . Query Criteria Ċ import Ġnet . cord a . core . utilities . logger For Ċ import Ġnet . cord a . finance . GBP Ċ import Ġnet . cord acl ub . mar ge .* Ċ import Ġnet . cord acl ub . mar ge . util .* Ċ import Ġrx . Observable Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ Ċ class ĠHo spital API ( private Ġval Ġservice Hub : ĠApp Service Hub ) Ġ: ĠInitial izer (){ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHO SP ITAL _ ACCOUNT Ġ= Ġ" hospital " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġlogger For < Ho spital API >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġledger Api Ġ= ĠLed ger Api Impl ( service Hub ) ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Demo () Ġ: ĠFuture < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! initial ised ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial ised Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġservice Hub . network Map Cache . not ary Id entities . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Api . create Account ( HO SP ITAL _ ACCOUNT , Ġnot ary . name ). map Empty < Unit >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. recover Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" account Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . succeeded Future < Unit >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġlog . info (" hospital Ġinitial ised ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Fail Ġ{ Ġlog . info (" failed Ġto Ġinitialise Ġhospital ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . succeeded Future () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget InitialState (): ĠFuture < Ho spital InitialState > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinitialise Demo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġledger Api . balance For Account ( HO SP ITAL _ ACCOUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġbalances Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbalances String Ġ= Ġbalances . first OrNull ()?. to Decimal ()?. toString ()? :" 0 . 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHo spital InitialState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . my Info . legal Id entities . first (). name . organisation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPat ients . all Pat ients , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbalances String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . load T reat ments (). map Ġ{ Ġit . linear Id . id . toString () Ġto Ġit Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess T reatment Request ( request : ĠT reatment Request ) Ġ: ĠFuture < T reatment State > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatient Ġ= ĠPat ients . all Pat ients . first OrNull Ġ{ Ġit . name Ġ== Ġrequest . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" could Ġnot Ġfind Ġpatient Ġ${ request . name }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= ĠBigDecimal ( request . amount ). longValue Exact () Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġestimation Ġ= ĠT reatment Coverage Estimation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT reatment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . service Hub . my Info . legal Id entities . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠAmount ( amount , ĠG BP )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins urers Ġ= ĠIn sur ers . all Ins urers . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . network Map Cache . getNode By Legal Name ( it )?. legal Id entities ?. first () Ġ?: Ġthrow ĠRuntimeException (" failed Ġto Ġlocate Ġins urer Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn sur er Qu oting Flows . Retrieve Ins urer Quotes Flow ( est imation , Ġins urers ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( err : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFuture . failed Future ( err ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġservice Hub . start Flow ( flow ). to Easy Future () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . core Transaction . outputs OfType ( T reatment State :: class . java ). first () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlisten For T reat ments () Ġ: ĠObservable < List < T reatment State >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġservice Hub . listen For T reat ments () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Payment ( id : ĠString , Ġamount : ĠLong ) Ġ: ĠFuture < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĠQuery Criteria . Linear State Query Criteria ( linear Id Ġ= ĠlistOf ( Unique Identifier ( id Ġ= ĠUUID . fromString ( id )))) ĊĠĠĠĠĠĠĠ Ġval Ġtreatment State And Ref Ġ= Ġservice Hub . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġservice Hub . vault Service . query By < T reatment State >( criteria ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . states . first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual Amount Ġ= ĠAmount ( amount , ĠG BP ) ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠTrigger T reatment Payments Flow ( t reatment State And Ref , Ġactual Amount ) ĊĠĠĠĠĠĠĠ Ġreturn Ġservice Hub . start Flow ( flow ). to Easy Future (). map Empty < Unit >() ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠHo spital InitialState ( val Ġname : ĠString , Ġval Ġpatients : ĠList < Patient >, Ġval Ġbalance : ĠString , Ġval Ġtreat ments : ĠMap < String , ĠT reatment State >) Ċ data Ġclass ĠT reatment Request ( val Ġname : ĠString , Ġval Ġdescription : ĠString , Ġval Ġamount : ĠString )