From 5ee838b8c0b4b6608184cd888b752991bf7a6f63 Mon Sep 17 00:00:00 2001 From: ggrg Date: Thu, 20 Feb 2020 22:56:27 +0200 Subject: [PATCH 1/4] Added transferParticipantStateChange and FKs --- .../central-ledger-ddl-MySQLWorkbench.sql | 51 +++++++++++++----- .../central-ledger-schema-DBeaver.erd | 25 +++++---- .../assets/database/central-ledger-schema.png | Bin 136419 -> 142320 bytes 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-ddl-MySQLWorkbench.sql b/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-ddl-MySQLWorkbench.sql index 8e2d4903d..280962173 100644 --- a/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-ddl-MySQLWorkbench.sql +++ b/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-ddl-MySQLWorkbench.sql @@ -415,7 +415,7 @@ CREATE TABLE `migration` ( `batch` int(11) DEFAULT NULL, `migration_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=155 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=157 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -448,7 +448,7 @@ CREATE TABLE `participant` ( `createdBy` varchar(128) NOT NULL, PRIMARY KEY (`participantId`), UNIQUE KEY `participant_name_unique` (`name`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -498,7 +498,7 @@ CREATE TABLE `participantCurrency` ( CONSTRAINT `participantcurrency_currencyid_foreign` FOREIGN KEY (`currencyId`) REFERENCES `currency` (`currencyid`), CONSTRAINT `participantcurrency_ledgeraccounttypeid_foreign` FOREIGN KEY (`ledgerAccountTypeId`) REFERENCES `ledgerAccountType` (`ledgeraccounttypeid`), CONSTRAINT `participantcurrency_participantid_foreign` FOREIGN KEY (`participantId`) REFERENCES `participant` (`participantid`) -) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -521,7 +521,7 @@ CREATE TABLE `participantEndpoint` ( KEY `participantendpoint_endpointtypeid_index` (`endpointTypeId`), CONSTRAINT `participantendpoint_endpointtypeid_foreign` FOREIGN KEY (`endpointTypeId`) REFERENCES `endpointType` (`endpointtypeid`), CONSTRAINT `participantendpoint_participantid_foreign` FOREIGN KEY (`participantId`) REFERENCES `participant` (`participantid`) -) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -548,7 +548,7 @@ CREATE TABLE `participantLimit` ( CONSTRAINT `participantlimit_participantcurrencyid_foreign` FOREIGN KEY (`participantCurrencyId`) REFERENCES `participantCurrency` (`participantcurrencyid`), CONSTRAINT `participantlimit_participantlimittypeid_foreign` FOREIGN KEY (`participantLimitTypeId`) REFERENCES `participantLimitType` (`participantlimittypeid`), CONSTRAINT `participantlimit_startafterparticipantpositionchangeid_foreign` FOREIGN KEY (`startAfterParticipantPositionChangeId`) REFERENCES `participantPositionChange` (`participantpositionchangeid`) -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -603,7 +603,7 @@ CREATE TABLE `participantPosition` ( PRIMARY KEY (`participantPositionId`), KEY `participantposition_participantcurrencyid_index` (`participantCurrencyId`), CONSTRAINT `participantposition_participantcurrencyid_foreign` FOREIGN KEY (`participantCurrencyId`) REFERENCES `participantCurrency` (`participantcurrencyid`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -625,7 +625,7 @@ CREATE TABLE `participantPositionChange` ( KEY `participantpositionchange_transferstatechangeid_index` (`transferStateChangeId`), CONSTRAINT `participantpositionchange_participantpositionid_foreign` FOREIGN KEY (`participantPositionId`) REFERENCES `participantPosition` (`participantpositionid`), CONSTRAINT `participantpositionchange_transferstatechangeid_foreign` FOREIGN KEY (`transferStateChangeId`) REFERENCES `transferStateChange` (`transferstatechangeid`) -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -991,7 +991,7 @@ CREATE TABLE `segment` ( `changedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`segmentId`), KEY `segment_keys_index` (`segmentType`,`enumeration`,`tableName`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1119,6 +1119,7 @@ CREATE TABLE `settlementModel` ( `currencyId` varchar(3) DEFAULT NULL, `requireLiquidityCheck` tinyint(1) NOT NULL DEFAULT '1', `ledgerAccountTypeId` int(10) unsigned NOT NULL, + `autoPositionReset` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`settlementModelId`), UNIQUE KEY `settlementmodel_name_unique` (`name`), KEY `settlementmodel_settlementgranularityid_index` (`settlementGranularityId`), @@ -1570,7 +1571,7 @@ CREATE TABLE `transferExtension` ( PRIMARY KEY (`transferExtensionId`), KEY `transferextension_transferid_foreign` (`transferId`), CONSTRAINT `transferextension_transferid_foreign` FOREIGN KEY (`transferId`) REFERENCES `transfer` (`transferid`) -) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1625,16 +1626,19 @@ CREATE TABLE `transferParticipant` ( `ledgerEntryTypeId` int(10) unsigned NOT NULL, `amount` decimal(18,4) NOT NULL, `createdDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `currentStateChangeId` bigint(20) unsigned DEFAULT NULL, PRIMARY KEY (`transferParticipantId`), KEY `transferparticipant_transferid_index` (`transferId`), KEY `transferparticipant_participantcurrencyid_index` (`participantCurrencyId`), KEY `transferparticipant_transferparticipantroletypeid_index` (`transferParticipantRoleTypeId`), KEY `transferparticipant_ledgerentrytypeid_index` (`ledgerEntryTypeId`), + KEY `transferparticipant_currentstatechangeid_foreign` (`currentStateChangeId`), + CONSTRAINT `transferparticipant_currentstatechangeid_foreign` FOREIGN KEY (`currentStateChangeId`) REFERENCES `transferParticipantStateChange` (`transferparticipantstatechangeid`), CONSTRAINT `transferparticipant_ledgerentrytypeid_foreign` FOREIGN KEY (`ledgerEntryTypeId`) REFERENCES `ledgerEntryType` (`ledgerentrytypeid`), CONSTRAINT `transferparticipant_participantcurrencyid_foreign` FOREIGN KEY (`participantCurrencyId`) REFERENCES `participantCurrency` (`participantcurrencyid`), CONSTRAINT `transferparticipant_transferid_foreign` FOREIGN KEY (`transferId`) REFERENCES `transfer` (`transferid`), CONSTRAINT `transferparticipant_transferparticipantroletypeid_foreign` FOREIGN KEY (`transferParticipantRoleTypeId`) REFERENCES `transferParticipantRoleType` (`transferparticipantroletypeid`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1655,6 +1659,27 @@ CREATE TABLE `transferParticipantRoleType` ( ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `transferParticipantStateChange` +-- + +DROP TABLE IF EXISTS `transferParticipantStateChange`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `transferParticipantStateChange` ( + `transferParticipantStateChangeId` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `transferParticipantId` bigint(20) unsigned NOT NULL, + `settlementWindowStateId` varchar(50) NOT NULL, + `reason` varchar(512) DEFAULT NULL, + `createdDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`transferParticipantStateChangeId`), + KEY `transferparticipantstatechange_transferparticipantid_index` (`transferParticipantId`), + KEY `transferparticipantstatechange_settlementwindowstateid_index` (`settlementWindowStateId`), + CONSTRAINT `transferparticipantstatechange_settlementwindowstateid_foreign` FOREIGN KEY (`settlementWindowStateId`) REFERENCES `settlementWindowState` (`settlementwindowstateid`), + CONSTRAINT `transferparticipantstatechange_transferparticipantid_foreign` FOREIGN KEY (`transferParticipantId`) REFERENCES `transferParticipant` (`transferparticipantid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `transferRules` -- @@ -1708,7 +1733,7 @@ CREATE TABLE `transferStateChange` ( KEY `transferstatechange_transferstateid_index` (`transferStateId`), CONSTRAINT `transferstatechange_transferid_foreign` FOREIGN KEY (`transferId`) REFERENCES `transfer` (`transferid`), CONSTRAINT `transferstatechange_transferstateid_foreign` FOREIGN KEY (`transferStateId`) REFERENCES `transferState` (`transferstateid`) -) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1726,7 +1751,7 @@ CREATE TABLE `transferTimeout` ( PRIMARY KEY (`transferTimeoutId`), UNIQUE KEY `transfertimeout_transferid_unique` (`transferId`), CONSTRAINT `transfertimeout_transferid_foreign` FOREIGN KEY (`transferId`) REFERENCES `transfer` (`transferid`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1792,4 +1817,4 @@ CREATE TABLE `transferTimeout` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-23 19:33:54 +-- Dump completed on 2020-02-20 22:51:43 diff --git a/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema-DBeaver.erd b/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema-DBeaver.erd index b9548bc9b..dc18f82f2 100644 --- a/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema-DBeaver.erd +++ b/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema-DBeaver.erd @@ -1,5 +1,5 @@ - + @@ -35,10 +35,10 @@ - + - + @@ -47,7 +47,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -104,10 +104,10 @@ - + - + @@ -128,7 +128,7 @@ - + @@ -146,6 +146,9 @@ + + + @@ -169,12 +172,14 @@ + + @@ -194,7 +199,8 @@ - + + @@ -212,6 +218,7 @@ + COLOR LEGEND: diff --git a/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema.png b/mojaloop-technical-overview/central-ledger/assets/database/central-ledger-schema.png index 8ad147141d06ae9e846fe0b1cb66679e23485968..6ae8e2e18dc0459b7eea48d35da861917d41df1d 100644 GIT binary patch literal 142320 zcmdqJWmFv9(=Up<1O|dT3~mF#6Wj-jKyVw}A-DvG!GZ+HU_nA4I0U!g%mfJzL4%V7 zcM<}p$@Bc*b>4H{FL&Lw?uWZSuxPrw>Q}XQcl~x%HE>;RRbm2K0yH!z$^jI18n-M>hDVY|NMtdKoA2O23NVdlKfM@oZa9y*A1ygvE1e|bj)Y& zx<2){i#esef9`QQx)b_wbNJblSPDXtV9@*5tw}jt@#HJSRVW z(lrXXmaiNBb4*BH`$NwTVEc8R&ka9jB#oZyfbs@1QmtD?S|Z@uf>)!L2X6a2pWNPBqsy+Wtf*r4ae(wx((U9#kWaRgw(=+A`H_9~S0C&i zIcV!qWqGTVRC0J}vw%)`e{P<-up&ZvRSD)eKw=q$2kW`d%e{Df@WnVmUvxli4^8|F zLro#*wH1*>NToM)N5#m#ikW2V<;ibikfR&xyL)B(vhVFN7hSVqBi@LYeM4I$V$GA* zn~50xiB^q_fzrR~0O<*xj8#k$`>f}zqayV+#7XL1O~=uElX`!7CCX)0_u9EXfmO(Z zZ>Z$WdtrqojW}hi8>l{AzHNUe>p&JzVmLj~xoA3$+(ig&fb<*sp~!7#EpY4R>5CW` ztAZ0!_`pF(2}~RHNMhmkQdj|-w*K1^PGiOT$)4&(j|$AHNUyjlShAgj-4z58b_k(; zn}_w8AIGlPc#B>Y{4V)1mrPBvkT|bzf37?3nR3*&=!$E#gG|9Lc4Foq_);o7W->xz zzSj-cqq#kYMAbuz;K&_Ez4vS0$7d(*=LNfn7|;srQ=|k|Dt`0TYS6oTb_r1^tiEFm zj}Q>)7eH%1zQ-6xCM6L$Dxn@}`W)fp<4=qeIGa}E1Ry-)X9JM(J zX@sqPhllrY^@fuW9Pu3not}%QLrv@-NiveI`9(XZ(DNhghuNue3MH^c)s?`bq<+0a zM|30B^wT3S49=IAU6{llKW!7P;*Z!ZDLZ6^)xXk_fP}3W*T5xU3bB({7VyyDb!Q%u z;iWs>$Du{VSld*WI+^B--x4~$yElr@p_RmQf=K;N zNyT4KH)rA}b2rziuCCURKzm+y3zOdC9nPiyAueP6X}89r?Y#UUT`GRy*?3g`bA5#X zNLY)%XYt{$&n<&%1wC`3SLGYxD*vpETqxer&DHt&cH8e?M^`IfnACW0uIpt(V!z0) z%9`GQzRU?~iuJV-AKsu~Ya^xs5nk@AlgsDk<4ucXfWL&w=A_O3NbdTd|4wlWiJa6? z155OM^xI=_B~O9(l9eQ2LgiHRQj@x&Rywj>FP_9mnEDO)`(NT*e4_VbTrYJ6gG3j2 zH%TJ52`fQ$nb6CHhX^^zC^nE^;OTUdgcL}()h=w16aCg)EeWs!ch};;&2y)=)O|YEiri{Ar&wLaghf=}+=-CcVKH z@@r{Z*S_ethIxmhkQiT9kawvLpxqv^{^t)azf%{7(P8Myd8vMTtSZM+l1~29Jiq(JU;SFpno5 z4MQvUW?6Jf(%eVE|7O18UzJC2rnj>B68`7Du<%(fHHokl z>bMY$X*meX@^Z*GakDa1Wa8@H+ar`xq|b&F#apk3q%&f>xOHg;ac>maIY7Br@E6>q zYLvTA!@UUjyqXbM+r?>YplvXs=Ah=@p`3V2sVfI)z82m08%oJfA=OMt4SaY-fiz36 zU@ee`St24iK@S$@m=Mf}UNQ>sJPd>2<{Ef-wbyoA`uQLp0cZ?F8)++Vbk3~@Vd2Xp zx;S6=&krM>Vo6MW^gAo+qGAU%^TZb)U0%*J9*Ak(@cbt{3^Rk+y}Hs9#So!PZ(ri1 z!hMgvw?uJ**n{0O9U+!4&#FB8I6=ILJo}4pV63W;)zb?G1Re)yMJg43A5pU{XMlmi zQUkl@dPTE?-t!}BR3EFCRDU(wLbJp&smzoNH5FwCjg!HlGC6{{>?GT`s^HFtCTezT zr=C{1_ypbxt4dm6IovHj3FFgb{Mh~`9C=N;!68F>^Q3&i$!ga&Ysk?h!Ox5um8+e$ z4&$Yufh6q!^!m%IA2ZUmZN2dr)vo8saE71I7enwDV2e$v!D>}L#_Y}6->jgf#=i?# z1lhO1X|H%4DyRy+`ThdDobssaCBa!z4?GKs=7opsBh>*Po(viv@TdksY9~t9M&-Y- z<>I$q9ieVQ98=*T4aK4`jQ4L&R?_5z7zu@D5V(V{M9IB@Llh*}S0T$uNZCnV^BpZ+6hX;XwVqkb~`D z2VD(SFQYJ`Mt0GaM1nADVZL|w(=fq(Q`s{Q;Af*p%c*N7{Y&H?Qby~Vws=%fEV|cN3n3yob42T{2EmN z2Utk5C>=(j`r38JlX($p8Q0IROh5glWXLe+HFcdydIprwK{ZlP9;{7TAz3?-^Q2nV z8CC*eTuX*K@U5zJ_eJf#Gp|zpXbur}WVW;|wdVqe#C6pQEd&`z3*`h&KJQ`e?n|Z| zo`bQ@luo#5S`ith!0|=k{RoObUkos)R_Kp-c(~6s!9HOC8BJdqKF-7G$M(OEjDuFh z{XeCrN6%1wNwv-X+V(`)WXQg%|A|REW-UG4HBA-_hh=UM`Z}xCbp`+NkxU(sgjsno zl&HWUWWvX$%s7bW(gP-p8HVI{hQM-F7B2BY-u)xaPkjhpbul?>tdTYIki^(ddd5uxzQEdg_pkIi^dmY%jC1jaWOxPJ z3N`^^&gDO5D1eV+_wV!hoN{1G?Tl^6FKQojQS8{oYtA{vA+av^^7Gy2+G&VgW>+Z( zihIhLDZ0&TrdGdD_r}~D!6p`r_x3-_5Fn6J$ENxJH)1G6@AtjTiQ6(n`1wE$>LmI| zTPo<@^^B3ItJvA=FRSD0na6rXk@8N8+C#k}(NvF;9i|@jC992jN&jSxg2EWC1ay&o zu4#8mo%v@16(mLVMUw>_h7lY)$tURU9o`r<=3M3YmOhE0i&hCKPLzhPNWqAT zB<|Ofe#!6vfhXgqMpU%8P6rFWLPo=SAoMTk>CNP&-yuSr{L+pFzox)rH_5jG+1{~& zp3L`0GSei;Ei@E3_U5ICi18meq^vyWg?mm(FDDF8nnBgU0Z&3E4_it}=me0M4p^h3 zqbtq()32rq4i%n= zk0v^fYxeGaA||d+CIX%b<5MI1sNB&x`);S1&nl9R7cHGf@5wTAnahPr663j1N(YB5 z{=ej)Szh7ew&OWZ+L$?Au#QQ2hkcN~mq;T-WRJv`%q%Jj)>*9&M7w z0A2OXn>JyDnvnqI>-ctQ$oP}@iDYiEQ0f<7HDdx6= zlqPo2hoPu&G-LYJF+EL-Kh%Mrr#AHo0;*FFm#t0qoVZjrQlH|{##@WSSRLtT?OE=g zZLuE>%$(jQTmwq8iylVd!m+~AvxmPavOjOD5K6ouo@?5Tf4C*X8^5)hZL)-d@y5Kr9!nZ4GwGVR{0c<;x6+os19V)&YtW z*PjPrg=K9`PV@_$FU8iH3c~KE-i7RVGhX{jx#KydrpGRaf7c0wowc`f0zQcs&mnTd_LwLtWF`hB%_mQ?9;5EC6!xC?F06Hc|?yRCBGn*N->M}OehP`4y86_9(8im$jZ zgn?4ZhQ4Tpi9*KtFs)qQhb-NzWSJ^yR|czW(Noz8Z2*a)ZN~s*!=UT4S#zc!dG#`8 z&BGw;s1!3NvkZ)e`xye>;k0ITkK4f|zc{ssR(WTbXSZ#5L!!yGJ@6<^o+QJcZWgLx z>REU!(je?#b8p?>s6QjH)&0HSp;!>|AZIyuRH_N3!)1tQ37}}1sZ8%;U3A%kP_D*v)C8rqz4}M5SdlHbERr_zt^aS z0P^9B!HlVf!$W&~SNSSj`au)O>JigT1fkN`(&FZUxZ-kzUz|5i-K0y=@1iuHzGm)0lk;?Fr9tYSqp&~hpC^*VL;a>~;#&Hj@rP7HD&$zQs%a`% z8U(SSukils(JP!iM%&0@(OGk)C#(>xc+9(ys2HMA713h(oIp_e^rFW_pkz;gCJK7` z8l69KHWgo7(cbLK5w}}1{77;-8R4;$SL+*fb40MhSalX)U!*6S)iQKz64)yuxf zrX*^wQ4^|-2$C*NQ$`E)*~^#(Oh_ly1`gz?eDZlU)#7RXy2Yf6Wq;BmpWG7dI2nf) z_HG>5+N|o!E^1QEP?!tX9n)DeD_129VSv<{CV@$MJ4j9Z*6VkwlIRqD4u18jAiSbY zl0TlI&aX$3x+t?+i0C6f#(T8xR{I4$t2t+x`{_5S+>)_TOdm;7cK%4)vfEOU-@PEv z^O~_{FBpWltor1|qLW!(Z9AT))%4vVV@jL@q&~!fzm|q?{$4n_J2I<+*amnZsx3MV zE`6?00E-Qe_gOaMrl9(!J*<-!O4PhYYY07$1()^1m{q@#%LF$vM1CaOi~i}Jkg9-Z zXWq71m;?34#c59Th>5edy4bi}$}BZT^)ap7zIkqfs^vz^>9tfuUIHNlVJlPsc2fMy z2=^Px0b1rM8i|ClTG9-&gS4nN`gmSn3|V5#u8%Hdd`e`9417teHM>o_*zt4z24nZmH6truB z1IV8t`$$;-i+lcV6soX#<2^u#K(e(O3uQvpD`h1KcLAm$5~K&FsM~r@8mDH*Mj~xZvVS6IcrYoE&+}$shPVG^}NC7 ziQW6K4-Q+1=GAcey$F`_9RV)2rqD2-IvIq!04mC%nS}F3Ue-?xs0GP2%VH1lm%p{+6g4qYZusoFic#4Qb>{S z9fwasqW_`fzyds#5vMb#Nwu(&0H)x7C&Nt`6_h6hyS* z9d@N>2&BSIfXqD$NLrBvqzB~j|MF>r7`<;av`O{#F=0p6sH%7Iqe=o?upT$!Gq3=s zqFAq!WVdE>OzM+7F*b!KNTscmm9<+Zk(W$??4Yn$T|~4#ETDMw2w|G41=vUBFOC(( zU_D*-oE@{0!lEl_nlz&EJa*?6n?4fRBQh!PIY1vjKRt|m@_pXe0*AOQ8SYnO>^EP@?<`Q51|RVf11CzLLsk?D#guGn^RN<(~Hm928#IL{&ovZ=p(DPh`Wl)WGDYl|;vn zXuh?EQt`ZdOvv!;M>O_uqS2hmq8u19GJX%(n(=Lwa=?0G=P@OXD%rL3Ir8=@H1Qt6 zZOdM>ft(GE{d6|VRzKt{rlf`OZQGha_-TBkwQ=gJ^l}lfHH^}0+!+ekQ~4)~I8Mym z7U>|c{OoTK+atucbK~3U)=jISKK+bJhD1&mboD3P6><~`p+w>P!ubNx5W~1>u8lBi0}Bq4FV*5Y!SnoAY$zDlZE* zUeX_%wb5kWWUw@?Z>Txjps>Ur2kQEds(!$dJ-Fnc0P7G^@Ql9vm=s#c4%&}@w6Mua zX~d4*`l@j@-9?r1nT5?5Z$%sK(pbPMTOB5mqu>N?IxppeQ!nF%F5yEh1x<3tosKj( zwM`r*TZTar%<6Y%y8N=DJ@b&eMOT*4rhqo@a(xuP=HkOmdztZ{Dw%`y56tbt6HGLH zK15L{$ji!6nM??pOl4)c+OV^O%ESs7kmRpL5d68)o~IjR%`~_P%?z`n4#+YX#;w4o zTSooY1%|`6lVZ}P%oCY2lpA6SggJ>L$jINGiCa(%N{m+{2nnjl8<2YMmW&yOa}HeO=x=6 z=+H-YEnAwkhr=JNz~%9Z<&Z)tP~DaQNcT|J6t^fL_#hIftN{xnO9rJB-r3;4d^AEp z`b{~Z%z0!p{=?k=;o62+XlW=kUsS$;JPIGBB;;G31yuusLNcQ{LG}5os7OoSqPp+4 zi-Y3dd`wXI0dIyfB>5hN{P}gZN>^UVC2w`EqHI&shdvhz?OIvE^Xtx!W#-Gg5y$wJ ze>uI|R|Rh)Cq_oPntXd(A?IP93Qr%Rz*YGWi0t#}pN@b9JF!8~hp66NFtZ7oL;K(J zI~%U;bE~ey&BR+}wo0+3KsC`Lj7W96a8dAKekQbQ;`O&NZM&XY{DTiBg`z!a_&%yh z8u!AoJ*>!jT?Z3EF%|0IvL7qY^<-sle*LT_6(Bayd*A$2BWqEOu|$EOsu4=-t9 zJ*#fhM}8GI+EhX(mMwB&%)bZ!h`qaHZ@=%o1Sd}F86A!6nYovYFJNFWMNOiQ_H1(( zYVjhF6GXzB!M#kv(4-8O6G+h&OQ~?H)b|d#Dl8)u@BYybbDr;U1)j1Ed!xeHB!Nx( z2bs`~B<>qcsx{gIxSrEa_|(rYR>1)smV z+Q_c^4QuTT)|@c* zr*3U@4!=2f?|tO^*>g(=zH1FciBbz3D8pRM#;=H_`$E=6%$&q{HQ*i_;n_C z35RsQ{#uEzWiMVp$eN%LD2k~PfA1A%Nloxij^m;ypXj`cU5p!2Y257VY>ab?nd@DlL?4F%{H_eV2dB@vS}8u z8JfeIk6dI#9p~8+@z|+n{N0BN{GUxbf(oWOGX&qW{xoaDK_Gcm6`wops4cx}1rns` z6DU$TfV;&4Nl{4E4=AOlkG|B}u`dH=3e3&zTMBJYg7bNl)SAby5zWNenOM zDUp5JHIEC^E{X)UQsIxNHqzQ7zu<}UgRwIPs2vHIL|t<_7%!M=th;7d@Z0^J;mRo;l=k|(-*lpKuXVhqpj;E5k80 z75@dX|0^T1^*eFG5X-LqvxelFdvX*e_<|Q+reb$O@ey(hPj^`9opq+Q+kU|FTnr1! z-Ax=gbk^sWRH{Cswwqm>8819Z<1nuiK4QDc9AFf2lA3IdHB6qUK=)HFwHm8|ET}S| z+B6x??rs(K8n)&H5WAQBkTB7ZF6NAJvpUXP*Tx>4_bUduLRP{_g*2k z0_nu0Ro|P}%H%Da4GkSghpm4dU7%atox$^*$`B4sz}JW4x>0d-Ik4P=Fc$^TQXSIg7eZ?AFYPy`4Paw%K35=gvK`stvjo z*OsSDCkSatHuM|Ch?*Gd&B&$}>Ria*8M}*UUXa^}s*Z4iG*a1!Op@LA`;SuZ<>7Y) zV3PjPg2*?i`?R5phRuYuHvzSbd&b&HvRGFX zhWp4%AA&QE1LUUZdG@$c43^K_+DweP)~cjGTR6_;8kjRH79+JPZ+%vVF0{Zn^G5e} zJCQ)d+iZ%~IK3aU{BTLzfI7%lrHN^Hzky``8S@i}Ft_T%U-IDQ*doGCxAT=wD>5uW zKTqtUK$;Of%?wF*4_1@2ogdJi`hzJ^Aa%U`CktAd#UzTv>R)9C6)bqT0JXkfRt!%f zprLE6ul&FW3-hCWOecaDvSUrWMo2}id-nESkYb!Ij7Mec{uSZaG@h2&&j?}8gd$aW zP>BNrr=-*>6UUXNsUp+;F(*10O%sX2Lq~I&P8iWoj>(5Oxj%#uhhY>^LeJwU>l{Wp zKS|t=y$^q|_`Qtd5o-!OuW{hYyBM1!PIO~xJLsr)g4J;47=~d-Qva-2?u%A5mSR9b z-f^Irhp~)GSg%@rDm<#CBcqMt%R8R9*>c;p`%6=qMfwq;GniG;5pSctqV3!h3NL8r zZM#fMS-(;?^gM{q&wy4OFQ<*uH$+17XE6MT3^1iYJFU|#1l5@eKNc_`@&TavH2e>= z9um3uaq-if7?9Ob>d7S3!_?=IMCTtz!Jtc~>-K=rm?+XtlOsaLim~9vKjismVUNDc z)fQO^U^nH*I8W?6*L@Kpph0-l5R2bax)Ioo9IyL>sM18o(8mnZ$)~4mLM^qmBO_ls^fjx91GP%q zGbL#y6>I`O{2A-9Ry--W|7d$)nltKzu`T${35%{t=^7$Ml8yq1IckGSb!ZZo+HIW; ziB+)dO9kux_c)YM)>y3xv#y53xTNNK@2g4)etIfGgqw32RUXMuF9f{c_xz-U+XAHfu&N0c91hd;P@1VL9Ie)GMSl4q7+mJh?tZf)z$kDcQ;MV)wv zSsastl*CI1put;J`UDL)eHj z(4o|-7K_o;8!a63HKEav_%AipmBP>V8zW{v2|m&8HylztWw9^~Pe3Vo(R)gRezAi* zO(5um^!pu3QXDIW(D0q20zs%h0J8ty~{&SwVl&{NAxVJ z@uQciUL7Q9(yHwlH7hSf57R8wkF#HmZT8*k>7Bkz!iiV{hLyEnY+@Gc%N{04Ki5`M z3yMpBwLa7=44hO1(-*7ca&@;y=s$9)kBf>n0W4dF;5Ie9`UJ4;h$^nR>ie%V-YaIF z^pk4F1ML2H`+8}F>gP7FvZ;>L_Sdcou0X11Djd&7%mVQ>g7Rm>?LkR;mU5}1+I)*p zaMpTqPsdgsul)peevs8q^3`~vPvyD`Wb8Le4vkJxPWQV%?+F%3^7ul?Fhx*GOmg;- zbv~~%k8LfZvS)*pYaKIiT&VOU#~t6pdV19!|K7tCVEm!I@v=N=(E7|bfX9|RevnwR zky$t7TYQWr&Y4Ac6XtIdvBYsjuqdiHg}dh0W7E#&J;m5oqcyhHT=?ywdB5#-#Dr%| zz}3Kt2~vs4>H^3TBndHif0-W*Bbbr6uk;YcXUTl2TV1SQ4t?&l|E9=r`Mv^)Z8j=R%TrU{;pj-wZT4_1+7yf`mrYD_PM!}1kVvDv{w_~lv5+eLGj@U40v8n;6^LUgxa%57eYfbysVh7RT z^BXl3wU8O7!1uOGTVOpc%m$9mt)1v;Y@PcrgYba-Wci%JwNUtjtP10s>C#eE^)<7= z&I_yG2j-Vk+=)jssRbzzmn&B}a7geeZo*Lw);~!I)~U~A_Bi3Ma-J3y?|+_!eQ;2d|MTL30rHs={#qPX39WA{nE$rHz#iR zp;WoA{zefTovZFLJ2=A(I+K`sVR)9A3^x4{s87>L=qh{f_gt%%+S0| zm$Fm1E%Y?qYAbK8H;SAysrxpQ~Xj((Ev{N0w zmp&Y$lf2>E>l+Gl3CA#&3rW*yqkQ&6~MHx z@SQNnR!X=0O_KIkP%Q2KTq9+_56WP!Rx=1X&L*Ig&2hrlM1U7)H(vrP&G3ZseN$+x4&-pA3)9rW41JP*O}O)vJknWPe~Q z5$@+;9136s+HBfiB?WbeALC^0cRdK;aZASc;YotY7cdxj%9@!Ipp?F~(yK+@XD4HM zxw%xL$_WY^c+oqb1JT>d9hM`3S@D~T(Xc*1*o)U8hy^3axC~c*vBC-oPC1UVv`XZq zIU`jX+V7DVt}!T?t&iygX|%h5j3o1_)Eedh?XET6IPbPNzH#EbkO0Mt@`y2m9&Sz$ zWGDme|3I5u1C+r?S^DFujpAMAvswYnv-x`^I)l$GvX(x)LM6;MHEiDX3XdQsW6zQv z=)kFaQv_@(U*|X(1cDLY8jWt7lE1Z)JuI=8$Jsq9!IyGh zoqF}Kny);kdQtr!$GUCuVwJ$Z=4l_W5@S1l>Yj=#gf#4Fr6Q|5iN7>R{C+I{1CtNf z78be%(?G)Z1@N;T#umUNx7kD&UpBbbKW(^Ji@#{!TXM5|NYc*?0tRJ6b1JoTKZ3_pDEOb_;Ihe9d>*b$dsdSUE7TLnaVtU@2)2<7VuVpv#&XZo z>T!TZ8V3^bavOU!qru{z-D5nJ_h`+c-W!LSl$u=-9i__Bp?=K(VV>OLNuxV9&D3{W z3*m=4?*MA+F5RLuv#tvy*M3Mk-omUNWu)L=T%~D7WEON~R-T3{b^p}cK+Vb(aFA;` ztAJ@Y*JP+8rfX|JX?c4LaPV3xyasB@2H8>m+JdVBkvE$&(d(6@zweCTeb6b8)!mm? z;kKj(7RV&YmdK-HF_Oj1v8{~&SvnpP{dnPY?;r9w3uFE1!NrPDlToFFcyzq*1PrWqGd{Q}(N+do z5T+@Cp_KO@q`(PqiK7HrjlnO)0Q!7}inOo86&Af^!mWPc{;1u=Z)ju6IQrOI2c!Ew zKs!^R*Vk~6!|1v$G#6hg-7zUk6WpFS#0WiO>>Qrm4)EY(0p(p?#r331AEOghhilE) ztlJ;2z0*$Uzf~2tA094VGcV(v1N1;ctgN zrDy8vUVbSR8$o>R9%gYqOBRxcwHyP(sOpr-(TQ<;!L&HmlnlucTxRxo={`h%tHOBX z#k8)g1cbMwEVug4`Nd_Ah*IG*xnE}WLEU3qTVpddHXh?eZNpqPwSrmrISmw?j#9pY6#9C8ne zk`tE8t;zGl1QT@Xo>g7khtE6RWtjS}Sb-*Dogr%7`7qd;UyUr&E=}u~$K*u95l|tp zbJ`q@k0gnUt)110q$7}XNt?yVd@vT#oS`w5G@u-ajWO7C7|yJ^*3Ipyw4ak2!KtUN z{b=l@`2sT9IlAfqM`7hJv5z3X?xoDwr+;T$o>gnC94~Vpy41zYel{wZhA%hVNvUYJ zHf$2whtGN4IcNA*hsoU^lNzfAH*h~_fLYLQ;5gn|3(RFvGwdN>rC{J}-(KLxu_=W> zD;bK9<1^Uxq@Rz2qBZ6g-A{qfM^FXaGYB_{O@q5s&bMX>olIg|p@o|y;95%3`e;|>8b`RO$gkB}ib&~v<+$p+#yxp|m;9+~_7 zY9Utz;z1s>jvn4A;eqolmX{G%2h6zpB?f5nY;&<_w{m-Am7|GN>c^qp$E6WnznV*h zI>%qZFhmudO6a%>x?YW?ap9b`W{p0`G{z;fr!dB~6prrVmP8D{KO^(`ruSQ_#61d{ zPy}@4+@)Mnp4sV!`6`2R-m`16=S240sh7ynE{S1NrxRdDNJyiwJmb-U{$>dVGd0Lj zA_pk=jamMd*?k#^{lJMH5@?Hltnuvkh{Y^zAN9NAszGA^?c_YD+PRn`eb_xIqWE@< zf?QQyRWMSTOXAXEQ)jyXs3QtfK*%UjK#`US=y9|HJ{XEwAG$i+!>(s~ZnuWD5=4va z!&WBC;FF;junS}iXJm5M!=hmCJMtuFK}h&Rj>12`IsdWgtoV(X^dapV5rU^-yzh!P zGs*tJq-2eV;Pj$Nh08(4Ro=pSYGC2t7*ew5JDM}0c;}ERI$r*NJpiObo79_Apr_Bf z>P@}{-NWc7JtwsNs!r^1imIxr+;Oo)?x`B#ch&< zBynKJ35K7z4PoCc8o=)19G`=Em4W9dH zdl0RAD&P-pX60C0=4LUt9U}8-zNpGTQUdPw5h~wz;o5hGjB|iI7L0Hx-&DA{D1gbo zy_b5>Rxg(#FOv7FITileYYM0)R9K9AY7T=z%kiJDvmoYQ?9*xJGmH!tzvL%GAB+%< zBm2Z$_#^Zr3|9btNNOSP?)wXLhc#9a?D?ihA1EpJVn95O8oZ0&&nqa_*boF-^roY< zC_YRk<8S65PYb>K|Mb=A*-v=)?Ik#*uQ7{#J-wd-bsnFAP)DVmRVsjSYCaJ&Mi`Rp zDwdDwpI%RNJ>Bb zgSSxo;`jVc^|?_HuoP)bTQ^1j(@$F>LTS*coa(YgbbEPTV@$Cydvu)s$ZwYF^Nl~X z!>lQ}{p+SS%$6DHWC)W~tUB?54*;r6u3w%i#$@|*!1(zXUX(v>;nlsjTR|WoN7vZj ztAr(fM%`)3Gl$O}bz+R2(nZq=o$mUgtI?hK28Rk?iBxBUz_0~t=9NczV+J8YZM+Gb z246UClGN7_a?Vv#~Gvg%+c)DVxm|PpBJ_4PqO#^KuVYxuZshnhVE#Mca)HEOv*U z!lIm1v_|^$Q{k;aJg16wbMMrqxfq1F!(kZJTwD*MUN4(w{<@F6^!fpz#>6F?iR@!&$(5wl|8+}D@2y5`+Ap^ zJJ#CK2Za!p7pL-m?EhA9GokrmF$)zk&`-X^=9|IeI4xQFdPx_OTbi&;{jD+XHl=J& ziS+4`!@UIq3NeR6=YgAoL_`0OpXvdN$lm3ly*WXzxrmwuxBb!i^FlOa=+m7KV_} zWPCm8>giZX)H&q=1>a*-KW!b~6jtRIF~VN%Oknx_)&8YMX;rhrP_(p%JmUanbUv!M zx$WD-1nbx5uIPo1#fykOfQys(J1~_KCis5!CxmHq7Vc0qE+(ISg?LgH3l9Sy)8yNi z-ACYQs1_aawHIRF4jzvqDTvP8KfGSY0^ZCr)#@s^k6Y!Wd#BN=qq-=Q`jo%0=nIBT zTQ8PX+6X-Xs#HLcCQ?sNwUkmwjHLT<*%2mTwP&kduNcDyCK5WN_JcXxc?8Zs$0els)Gdt%RNh76RFTSTcv6N6!|~pa3EnbLhV>>rs4O= zoSOYmhOrssn>3gW!`Sv|1we{t->q!M}*yc{u3-bv8n}{5w`vKDvsre68)KFJG(=z#gk2qqPJ)jRB8!eh~fIR86 zrXKNpiAm!oX3R{EKw8}G4#wCd_P69J)pcEyK`5n4k?w_uUu{}G-SeZ)WI?D^h{!`k zeT7QgpRiIQkc5xR42!N{eXJn5hK4(Kwvwd`4qyEmKV}CsQ_UBs7K{;vzP@giKtriK z72^P1?*JPV*jU0g8}LnnRZ^CVor1dAfSgenFC_@*xnNZF$HC3FA?dtRMvTIGtF8*> z`NZ5rC!mMK!VvWzak9)8`Bu>K=Ceweh5HOV?pwvLZw46i#a^3sM@b~iUb8;~vve#rB%$twi;ro#b z(wa0{bjVuZo>7evQl{cZa8h)fpZvfcVEfK9_>PjB{$y}#h@P>Axnp%5C;84iVDlw; zKMf8ik#Z!8URezD|KFP1_{I@6Ou#UM6sWzk;@`$X^9f&VykL#6m0^m42H8{>v;n^Qr-w}_8+tGE z^6ckq3>%2uO0Kf{vnDu}5zUm@O1|xlhdEBA_nSk_0+>Q#3Vv^()J|E2eRkfFGdnk; zw2bIKOu5g110+4LCMH}UyfGOHV!=T)XU+&e_~b7u!4A65^zzTyEUtNIrNiSe*LM~V za8lKhzxvg!lfc6N;O1{A@NoYWERGEcol%qnj}a+!s7K_;=$FRGlh%@A5BgxZbkuJ3 z4+m8eBgP7!C2vms!kDa;LLl*;OeUNN(KJoD+F&fXL9@CPx8H)?;6T@(t1^z4o)rbe zBQWG7#GQBU<>f11ujJZC5X?w1LrcXHm}Mk8#8U0`w~%rHP zx%c{bC>Zbp8lmq(zv65>97$U+T*l1>{;h(g_5xk7ob|E+r`w0zTHcoikAbhSu>Uky z%Dxk&c^)D53J)PT^YgdK#T<0vi z_nSnNN5SMTpLfx37dxI6X45@Lg!-vGLG}^k=iVD=D$smM_an?9z2%%F&X&W1<*teN z6}y&dO_Hs|XSi^QTk6hJH_b~AqT!ZL%S4>d7alYG z(Il#hgI!3oa%NsL=Fb!3NJzZY|M}c1@CsxAB}>me}D(K ztx#N_but`e5d=l`ofXatx5ETutQ5{<@fu^Gy%?ktK6!y@t|Gwe$%A`=j<)q=BRr!U zX>b&d7E`?8pCvfh7i|3pHC%55#9FbVmTtnP%g>-~@Rl9z-i_$@UT8Pcy6ag#hR>(E za2kv}&pD>kCz#UgM0}C0;6}T~*C{&T?-r3!F|QQgwR4R0?X)r(!)bVa|8(X7DoWT`77ODehxQ?os(7`{IQj!T-?;mMz2Fl6At32eZM<@zBtHYC$vG!q)Qt75$ zr}k7Qa@GTlbFP}(s}_w;9H?w_Po_-_i2SGF5}bCt-Fv?r8h1uNDNH|Kx2G+7Jl9RWn>DF zwULbtKhCrf?)H&?6jyjF)3TZGj}fA_$j0|iYnz89g=nN4+Yfb02j%}k!1|4&zmHpB z!UyxA-WoH$Z&q2s-eDtvZ!X_AG<*go$PpOEAVu&;!D`W>Ob3NB#ep!xIXkhQVOE(h zIys|RO<`Q9cIR*Raov7mcESfB7#@Sfqh~@?h7V!7R4ORae@+FhU$d~?zA90N$my1L ze~Dzw1AWcjy**$YE!fpqi7giNz;-akzNZc2MSbui#aLwow^dkM)Qw@R4y1wNv+EPp zA*EfN>X63uZBAB(=p_|3NOl<&$u5k)6Nl796LQZ>9Gm(Mngg5*T4U00uYf`r39zZ? zEZjlpm!Uiu6*v=NmxPyWkQyuPe;#3N{2~Ul9xvGvF=XXP`*meq8WH<`w;>UNsCxRB}x)t&?I zmAdJWzYQikH=<{;1(&XbWD3u_o*8M?8}K8BpVv#c$4~`)&8?2GUBKAyDy_Lnkz)3C?`UB=XhuTIry;;`k>qkn(2 z`4FlF4f`%dhd@CO)o8K`kAE$2w@N3B=M@ z)?g;CEV*v-4~D=zD_!F7GZ_t4e!9q|y>nF8Xe{+)(2r>+v4p%DCx@n@cqAxZ?zzrv zQ?xSCVZvwHYL$(#`!2oUSqg(8D(-hy6pS@2$$EyX(Ew`K;^aj8Q3O&OQM>O*3n+>wO~r2ZpqZW1E8xv0pu1hnIPAA$`ge&{T{|8gG_%(>0$#e3xWkfHLIY zf*ii?`@3!N=AOsEI;}7P=R=WoS{yY8oSAdJh5M!bpEFytlw*>A|C;frt6|BztU&%#%>cJfdhu;|(Ij2zS8}`Z|MyR>pV~&4XtT3>tJiBdyE1J>GgOLSNQ{+> z+2lCnq-_MtuXhaC#JpT{EM8Csm`LmZBLzU8Zx~5WD|6zaXX5&eO3RLng=L-B&;UuZE+$FNn(j?eRq zYkTqSzx4{d{!lApz`s*LKnL!yoC+pzWGh+mNH~G-4ofNd_-(WA#%V?WdKR4W#|Atb zyJE2;B9LoW5tuqo&!zCnCCDaHB#hmYC1VCxo94U4>Q=M<#z&c#XD{TaNy@D&OpDEi z{%*?ZKo$vX)gX(sw#+N4=|Wy@Zwa}^G!`wNhmBee88?|*%u`ix)I_R~Q&zQ{%k@UN z@5%hGDvZ!;csu>;HftfBz)#gmHxha45bgtUxDYO!>~fn?q9!?da!B)7DPzoZyXdYE z{rZKLCrufZUYhNj3o$bBI-{>ypKJ+blxbgw1#p1QaH(=dru{o>0=X)m{q`ZDkpO#t zR)=gH!l)MoDoXjak%!30!&)S}+_O4>)Rh2Sy}o5Qv*3zB`mASsY(*XGD+@a6p7BxzyIG;nSfkvRnc8qFUC`gc-(o;L={v_J)FC6lz|QVRM?8-RVRDKO#P;8@847i z)ALiz_i#;h5vmwVrU)d)t540n+>YJToOiaY$2-$%A|lWH|Ab#&2z zP$wP!h_PE5wwA7|22m>;RFmqm$spO}iZ`5STQm!2w`w6Eu%pJJG9Gm|ZmQ+O>%%V? zEaGYrv=VuS+cy=+1w?VFRqhnK6mwEPbSYDl)LXBcTE7vNVi_2lz|>aG)0c+uWM}`( zC#m$)T^Pq)6wz`H}o`3a9MmQ7MAVu@$CP3DhBt5;

U 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

T|$2US>jQ`KX$xU-51Z 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

Yl&oM)?1N1)emgm=G zHcTpH0`uTR;DTC8N~%xGk6Km)oNs~F*Ny{nz+~9m)F7gY#-9m5kP!OxCVuKPM5REp z5D&{Hi?eN2N?(w*;?@#+d)8{nBa~}MczpOtK4K5&TneO`9<`&sBk##>^7pF?d<)-! zY5jpAYP;s?+Q0E2mbS!_=D)M)8eovs@%|*9^U#&@*$+|dZD4E~H6uh%Si0G<6^HS>6w2F#ruZ@f4Xe*e*{QagevN;1CBm@iy8?*srxwO`G zFOutX$SkbNOnEt9AzDihjVBdszqN^I`tUJK`puE^dlg%ip@9PbUX%zn2V9f^c6hbf-I?W|U(&+#%BA36^MVSaDR-!owe)KBEQ*zOdlUwMa)%ceBRF?G zOBiPIj1bKAZ1KV{-Cv~n`w1ws>c3!x26hbGGYtUI4vZ3y)u_!AA=5l3uMux5O@t8I zNye=-FxZ@hmGWPVsAz#EeB{q;xP1g>rmtc6(U?w_l+qJ5(g{-BzyH^UAAsO=`(B^+ z@3V@r!iHZAL7d;5W8tU#01Thdll;}>hAmU*Du2+Hm(6%NL-Wqu1najB$A>I=;y1XQz zP5}+*5QpW@TvkNEA%37z_Xym`cqS5-9wEFW3d759c4AtPX=`*>%TaW?jzd=iDj4S* z&cp81N1~_IN^Ioa#1fN!_oY$@KPB^#^Q@naX;;}aFugRhg%^lc$tApy;=ow81LFo- zd4K*N#o8;q809}sXwN_!defmM#a|Mzcs_PHYt+2y`uM?d3U$5Gu9*^+zj9e+VP!{W ziQP#Ey7v0B{}vVOfIt_cr>hM|QGqmRNW`So;jJ>fk&0TI6(x`m%@!If@?&|NwDVxL z*@XYczMip<$(7pEz?%MQmW%*I4Bc-W6AKI5pp@5mJ zTsr+7BJ(B!)sobY<#6RHct9h>xSF3!>#)y~i0O4*UEP`64T>dNZKRJQ6XIL~T{eLE zpz$8v4m%1r$xx|wqtxE&Sh(rOruRfqoyVAGa1K6S4SP%LW^Jtr0`WP2(+s*gYP|4G~Q;27@K4`F7XexdI7XRumq7}8N_mu81y}_ z=X0QI?W?2@Z+x?E=X*n+{eldc>R?U{8C-sLpmaz(heOh!3*>E7SUM2LJI4!hRm2Oby{5AzcNi zgqC8lv|5J)v>QeK5_!t6z3b_6D_Xe8un~dPLlli$tT!z&bn`E~8#U%GmlN`VCUTox34SQJ;~41%qot& z;B>XPWTx0F&irx6}c| z1r0RP!OUjK@hqC4Br+ZnF6p7zk7V--cxS@S@e4PO=Vz(sE8k2fdPyLRd8#qmcd&!& zN&uP@2!|)gziKeqV>&#}6b0e(WY>R)&J-W>Xb(<1DCv5|CP~nu@ZG2-5reXd6H_>D=%N6sSJ5e@oukP& zahrqp)Tn8Zern=%dn7MnNbPCR-?iJzd1B1lZf3nP z#?BXp*?aCVbHAI0R4gq?>|shzDIU2?Z+fSUeUBoG1wC+g#f**yI5Wi0&n_BLPxag} zjHg|dJ{|M0ovnL8BX$+O&x?zw6^p>7Qx?GihqN-{nVV#MjK!U5oXC}Act|KK66iCb z_9}LM5#tnKwL5zI)#AIEvb>3~9tz0oJ!fZiv%36Q$ZUCYhKeRI8Bkl2i|hk9^(4PPV%S$WofX*w!>kc!Us}= z8{Y9OdBSh~m$P>ObRjRxZhi!I?_1$nz0!?SdKXG1=x^?JCtNcvcO6}4fBNBV2O{KB zm)I*g^gQ4f9?>EN#6xnnsvqeCL|z6E26n)JIE5r1H z5VWr^1rzM#aY3|}PXH*wWT@dKq$uz|DX;l|K^X1-o*%$8kq7$kdyz@NVMPGyd)FIv z3MBt}kyz7JKt7ay-a<|uKuxnckS!tM@BUpeOuu9PH)@)RfXC`5uG2ID=)b@c&6nci zy+#G5)RzFMo0qDB`?4dW`7_>)*Z+b>{E&+e4t;A0**Z-x{1^W<9$-gJxY~mSc^sT1 z&03(95`X}gmPYmCV;o{L`08XKI`O&3{%QP?k#EApaIbN%LWH33Kwb;8qx8ET1;s<# z6MT@Kgwe9S#7|nm@62Bvt+!hUDByll@pU@?z6AhKlw-9;!nY)Vtn@L+tdHn6z6>AK zaX5J{y?J^Xi+jiN<+MgnKBn@63W z2;ymSthNZTv(Y33wMY!YpDvo-0oSD7rezdfHuP!E>Q`6;pjHIjfazBIs}3nWRvUI~Ta(51a=AG=$V*6Dxf!>WI#mrwS-z)uuRh23N+-jp z0vs)pV^q!)09IO0>nX|il4Q7afu7eMNJd$pC-&Xoz2~$11BoIWI^P_QEl{S+yi>;d zY;ehEJ?&ym%;p`1nVon*Hep5QX{}r_p|;yU<|qMrWWp4J-=(PX&0`RiT(()xgJ|9g zQ7O?`Ed=4u_H;wFo}NtYH*q*$#EJam2VEWQed@bQv1@SCFNyt$7Y)ZN z_|4x96qi95;pbl5us?7X1_|#Dj6=cxJ_3o2Qhe(Bb)5SB6CW>Sp7sgxm2NA>wuRB& z<5UK%_5ah#bw)L@ZDC3%q2nOEmmobNt@qx~x8D9SYt30}&OT?I+2z~co=K)BhTOF?KIQA7 zD&u1_goBBAsyC(VKee?QJd_%@DDYr4ufm|SX4@2)%RVlWFXkpH@qw`m&&~7NA7LcF zHuG^chhYkiLwQJ>tFr|+Vm8JJ^!Ftb&l@Jqa!HGVU%@?7ibH z!U%tBEj3oeQ`uDK17y_uM&&2(iPj?@+LsRcwRxFt^e_QePY~oU`B61Tn*ni6Cd9_l z=bsC&yd8JNypo&1oG;@9$r@fBa`4!I3DS=C%f#X zKvq8<2OF^LFkDm3>TT&}sX^Sx;hR`70)!mgqn(XH5eGQ;Lih?vC_>K*JvhHYpkAE3 zMyu?a5W>(B2Up#|l?QjEH$6%ZNj9qZvGX%M&{W%OCO+P044b<{`s`CV;%E^;oU1BF z^8yXdND^$WqmT}+@&H(N{*zM5lV!Zb_GUQv<|0n;2#W@LqIsb(`g5YG8PUp zrOM?tsQ3}k$x3R?NgPB{m+2~EEiS$tZ^Wm+a;G(#VWM$2!ep zQ8=A>mTc%U&a4<11+jW*7?vGEGM3L*;7UB-Oz@vc=b1>sML5(@?vjqA(?pMssWnm5 z$EN5ADNE4goUDi(e9QbsO<2Vw8O10*kx*P@J=C$cnkrzKsCs|Eo%>*~nD%Yg=6=tP z`~(acVljlheR%XfKELZxSFP&<5r{SYUF(afw*-Suv+sMaC;u3MLw;as| zG|6CgQ}x-MRL^cpvH+hVpI0p{k0sg;-co;NrTsdq!{76 zhW7_ZOc&+}?Wf80z?wCKUY$w6)7{asU-n|u3Qb(wk<9Hwgr646advU=(-7G8qTphY z0SI@kc<;Uko7!2rr)M`e)T8VY;kPon$yf2$Yy&xg5^kagKf++@wbk*Z!#8amF1QDc zmG)5Y4y}90T+bdX)VM~hK=~tWb3?G_t_xg#S~eH*{S^$6zu3YGx*ZjX!&j`_3Q{9} z-TXAQe&kQfr9sEvlpjBWj~Uy#8J6`olCNb4CIS?Q2f*Jn#UbJWZd}ga1%>}18Ve%@ zorZ-=|2q)7@B@#hj`AXox^9Eni9j3DR$98VG6!iJ812l9K=k79uONomE)n0Cf4I)) zoKvYjk;#vO3Ja?L;qm?BB-NJ=I($Rd>DK~+r5g_y56eH(Y~|ld$3isyvak81JO$@J=ns6sIt)ta3yZ^=`L*Eei4h; zorf4!b|BYa*M%5q$7&iRi<{`5dwb=<^~m`j_qqfZQVolFfL5x+D=Xro9e*5rsndF` zY7~KqLfXnhTR4NX4UTp$Ai>J#!`sMauQ&K!pU?BmVFR|8pouvF5rbV-Vx%qW03iI0 z8hO=wk3LrqLky-SwzRKtHk9TSi~u zVOz&U{c(&P6e66wRo-w@wTzL?I4y#p`qz>6_zFhv9*3Z)E4V*h&=F@ z^|bccv4ly@W406aXN13ZZ#*hqoT*k)KfK8GWJ+=Ow#M5?c*1?u5=^{4G3w8Dn7K(2(5ui{6-LIZx@eGDTt8* zaY1O-@Qvq}9k#=kyK=!%4*N5xiPW!a<}y9+$KB^ms?tV*sM`8Pt?gico3!K=q}(@j z&54+5zoT5H#uB1oNv=r`X|iF05?GcZj`a&+hHITeeLszmf@b*0W<_2rnq$#BJr%3c zPfZ%aoDKxTXHFR^_yw-}zU7fUvJb6gr;1BMmSiC}#rf-y*a11WX}TJg*2PYKhnkx% za3pcvs1~jyl#L0#jg3f9LmTNvoJ1%$o)!H%644zV<@1zcjgeQ>YWqX<<2&UJ5oB>1 z^4PJ+$D?m%TGwC*$)`qq2m-ZK$?xpG)-8Iug|oP6F{dW!Ws5QTnsL7zR`&__&W=Qq z5mo1zDhI;mro!hOY0&K@9rER5Nl-L0EX^7dUtPip(8IcM@Pz%Q4%?q{zprkQqc($5 zuzZ3P*g^~r-b*f&Ah`0eNVLH^<}dF9m)+h}C0IWB54ARFgiAr36MYl+q4=-+q)!O( zLkuI2tAcE8G!ZXQ>-T+|B3WWYgt(BPGufZP4h|rK!p)7LQ6nGq!1@n#BL(*3Duh3O7T>Oxp}=H}G&~SU zx!XpLd5{(thJi~h3b+r_tCcY)26}MoHM(%{D0KGV3^m#RxebOq4c!mL$#`Qlad-h6 zeDZe&BBR9G_!!98q$<(%NpjvqdSB*?s-V+*Dyi(VV$xbHF?+O0Ne5MF4GT)< zqZ|fK9$kh3trA#j#?jn2M;=_=CT5l99(glP?THONs)JrTznu3khZM9$x^v zFZ(UOT{j^vr(rOcmB=tB^Rok|!^iTFac~Y#0Z(FV{l$;SP59hgZOMUNdx;1PB1p`1fiF?( z$XHc0d3mSwcP$y-Aue;}ORaa*>5+c6``8o&=0qVce-2ijnr4>rYF3S#@irZVNI`!a zEj0-Q1N<#iWmSJ+#JhJqGxkQv;CRV~Iy#2-D_YhC+?8&6=cy8K>JrMmQBUuVFn zX?wR3Q*!E1w0!`kWRc#ug`qtgLU-?7t@0S&?2W?%4ByKEI2r8v6Q|MZ6l&gP{V$N` zCj~mxsS^$FL(M{dxAd^Ic4KAm4)hrW1X3M{;@|~=PD_2_v@OKhhdB}r9|&Pfe5L&I zSs@VlZv)HhJwHDix((Pl|NhYbzLhdO?xxW5V}Lo zl*7rXPmh;<6%Oh%#Pm#cW&Uqz9LJPY{t^`{Uc~=@aF2hR^CH#GrtK{gBo^j2s9G~j G{J#KpHu1m! literal 136419 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 Date: Fri, 21 Feb 2020 18:08:46 +0200 Subject: [PATCH 2/4] Init SettlementModelHandler SD --- .../sequence/seq-setmodel-2.1.2.plantuml | 139 ++++++++++++++++++ .../diagrams/sequence/seq-setmodel-2.1.2.svg | 118 +++++++++++++++ 2 files changed, 257 insertions(+) create mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml create mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml new file mode 100644 index 000000000..8a5f5c88d --- /dev/null +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml @@ -0,0 +1,139 @@ +/'***** + License + -------------- + Copyright © 2017 Bill & Melinda Gates Foundation + The Mojaloop files are made available by the Bill & Melinda Gates Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + Contributors + -------------- + This is the official list of the Mojaloop project contributors for this file. + Names of the original copyright holders (individuals or organizations) + should be listed with a '*' in the first column. People who have + contributed from an organization can be listed under the organization + that actually holds the copyright for their contributions (see the + Gates Foundation organization for an example). Those individuals should have + their names indented and be marked with a '-'. Email address can be added + optionally within square brackets . + * Gates Foundation + - Name Surname + + * ModusBox + - Georgi Georgiev + -------------- + ******'/ + +@startuml +' declate title +title 2.1.2. Settlement Model Handler Consume +autonumber +' Actor Keys: +' boundary - APIs/Interfaces, etc +' collections - Kafka Topics +' control - Kafka Consumers +' entity - Database Access Objects +' database - Database Persistance Store +' declare actors +collections "topic-\nsettlement-model" as TOPIC_SETMODEL +control "Settlement Model\nHandler" as SETMODEL_HANDLER +collections "topic-event" as TOPIC_EVENT +entity "Settlement DAO" as SET_DAO +database "Central Store" as DB +box "Central Service" #LightYellow + participant TOPIC_SETMODEL + participant SETMODEL_HANDLER + participant TOPIC_EVENT + participant SET_DAO + participant DB +end box + +' start flow +activate SETMODEL_HANDLER +group Settlement Model Handler Consume + alt Consume Single Message + TOPIC_SETMODEL <- SETMODEL_HANDLER: Consume settlement model\nevent message + activate TOPIC_SETMODEL + deactivate TOPIC_SETMODEL + break + group Validate Event + SETMODEL_HANDLER <-> SETMODEL_HANDLER: Validate event - Rule: type == 'setmodel' && action == 'assign'\nError codes: 2001 + end + end + group Persist Event Information + ||| + SETMODEL_HANDLER -> TOPIC_EVENT: Publish event information + ref over SETMODEL_HANDLER, TOPIC_EVENT: Event Handler Consume\n + ||| + end + + group Request current Settlement Window + SETMODEL_HANDLER -> SET_DAO: Request to retrieve current/latest transfer settlement window\nError code: 2003 + activate SET_DAO + SET_DAO -> DB: Fetch OPEN window + activate DB + hnote over DB #lightyellow + settlementWindow + end note + DB --> SET_DAO: Return settlementWindowId + deactivate DB + SETMODEL_HANDLER <-- SET_DAO: Return settlementWindowId + deactivate SET_DAO + end + + SETMODEL_HANDLER -> SET_DAO: Assign window and transferParicipant state\nError code: 2003 + activate SET_DAO + group DB TRANSACTION + SET_DAO -> DB: Assign settlement window id + activate DB + hnote over DB #lightyellow + transferFulfilment + end note + deactivate DB + + SET_DAO -> DB: Fetch transfer participant entries + activate DB + hnote over DB #lightyellow + transferParticipant + end note + DB --> SET_DAO: Return **transferParticipantRecords** + deactivate DB + + loop for each transferParticipant + SET_DAO -> DB: Get settlement model by currency and ledger entry + activate DB + hnote over DB #lightyellow + settlementModel + end note + DB --> SET_DAO: Return **settlementModel** + deactivate DB + + opt settlementModel.delay == 'IMMEDIATE' || settlementModel.granularity == 'GROSS' + SET_DAO -> DB: Set state: OPEN->CLOSED->PENDING_SETTLEMENT->SETTLED + activate DB + hnote over DB #lightyellow + transferParticipantStateChange + transferParticipant + end note + deactivate DB + else + SET_DAO -> DB: Set state: OPEN + activate DB + hnote over DB #lightyellow + transferParticipantStateChange + transferParticipant + end note + deactivate DB + end + + end + end + SETMODEL_HANDLER <-- SET_DAO: Return success + deactivate SET_DAO + else Consume Batch Messages + note left of SETMODEL_HANDLER #lightblue + To be delivered by future story + end note + end +end +deactivate SETMODEL_HANDLER +@enduml diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg new file mode 100644 index 000000000..15ce0f079 --- /dev/null +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg @@ -0,0 +1,118 @@ +2.1.2. Settlement Model Handler ConsumeCentral Servicetopic-settlement-modeltopic-settlement-modelSettlement ModelHandlerSettlement ModelHandlertopic-eventtopic-eventSettlement DAOSettlement DAOCentral StoreCentral StoreSettlement Model Handler Consumealt[Consume Single Message]1Consume settlement modelevent messagebreakValidate Event2Validate event - Rule: type == 'setmodel' && action == 'assign'Error codes:2001Persist Event Information3Publish event informationrefEvent Handler ConsumeRequest current Settlement Window4Request to retrieve current/latest transfer settlement windowError code:20035Fetch OPEN windowsettlementWindow6Return settlementWindowId7Return settlementWindowId8Assign window and transferParicipant stateError code:2003DB TRANSACTION9Assign settlement window idtransferFulfilment10Fetch transfer participant entriestransferParticipant11ReturntransferParticipantRecordsloop[for each transferParticipant]12Get settlement model by currency and ledger entrysettlementModel13ReturnsettlementModelopt[settlementModel.delay == 'IMMEDIATE' || settlementModel.granularity == 'GROSS']14Set state: OPEN->CLOSED->PENDING_SETTLEMENT->SETTLEDtransferParticipantStateChangetransferParticipant15Set state: OPENtransferParticipantStateChangetransferParticipant16Return success[Consume Batch Messages]To be delivered by future story \ No newline at end of file From 43bc2a926ffe376b07ba5d18257b5d9fd2bbfc87 Mon Sep 17 00:00:00 2001 From: ggrg Date: Fri, 28 Feb 2020 13:27:41 +0200 Subject: [PATCH 3/4] Updated sequence diagrams --- .../sequence/seq-fulfil-2.1.0.plantuml | 17 +- .../diagrams/sequence/seq-fulfil-2.1.0.svg | 153 +++++ .../sequence/seq-fulfil-2.1.1.plantuml | 49 +- .../diagrams/sequence/seq-fulfil-2.1.1.svg | 251 ++++++++ .../sequence/seq-setmodel-2.1.2.plantuml | 33 +- .../diagrams/sequence/seq-setmodel-2.1.2.svg | 35 +- .../sequence/seq-settlement-6.2.1.plantuml | 2 + .../sequence/seq-settlement-6.2.1.svg | 336 +++++++++++ .../sequence/seq-settlement-6.2.5.plantuml | 32 +- .../sequence/seq-settlement-6.2.5.svg | 565 ++++++++++++++++++ .../sequence/seq-setwindow-6.1.2.plantuml | 143 +++-- .../diagrams/sequence/seq-setwindow-6.1.2.svg | 349 +++++++++++ 12 files changed, 1829 insertions(+), 136 deletions(-) create mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg create mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg create mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.1.svg create mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg create mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.plantuml b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.plantuml index 03bfc515c..08c71eb9f 100644 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.plantuml +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.plantuml @@ -41,11 +41,13 @@ actor "DFSP2\nPayee" as DFSP2 boundary "ML API Adapter" as MLAPI control "ML API Notification Event Handler" as NOTIFY_HANDLER boundary "Central Service API" as CSAPI -collections "Fulfil-Topic" as TOPIC_FULFIL +collections "topic-fulfil" as TOPIC_FULFIL control "Fulfil Event Handler" as FULF_HANDLER -collections "topic-transfer-position" as TOPIC_TRANSFER_POSITION -control "Position Event Handler" as POS_HANDLER -collections "Notification-Topic" as TOPIC_NOTIFICATIONS +collections "topic-\nsettlement-model" as TOPIC_SETMODEL +control "Settlement Model\nHandler" as SETMODEL_HANDLER +collections "topic-\ntransfer-position" as TOPIC_TRANSFER_POSITION +control "Position Handler" as POS_HANDLER +collections "topic-\nnotification" as TOPIC_NOTIFICATIONS box "Financial Service Providers" #lightGray participant DFSP1 @@ -61,6 +63,8 @@ box "Central Service" #LightYellow participant CSAPI participant TOPIC_FULFIL participant FULF_HANDLER + participant TOPIC_SETMODEL + participant SETMODEL_HANDLER participant TOPIC_TRANSFER_POSITION participant POS_HANDLER participant TOPIC_NOTIFICATIONS @@ -69,6 +73,7 @@ end box ' start flow activate NOTIFY_HANDLER activate FULF_HANDLER +activate SETMODEL_HANDLER activate POS_HANDLER group DFSP2 sends a Fulfil Success Transfer request DFSP2 <-> DFSP2: Retrieve fulfilment string generated during\nthe quoting process or regenerate it using\n**Local secret** and **ILP Packet** as inputs @@ -138,8 +143,12 @@ group DFSP2 sends a Fulfil Success Transfer request deactivate MLAPI TOPIC_FULFIL <- FULF_HANDLER: Consume message ref over TOPIC_FULFIL, TOPIC_TRANSFER_POSITION: Fulfil Handler Consume (Success) {[[https://github.com/mojaloop/documentation/tree/master/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg 2.1.1]]} \n + FULF_HANDLER -> TOPIC_SETMODEL: Produce message FULF_HANDLER -> TOPIC_TRANSFER_POSITION: Produce message ||| + TOPIC_SETMODEL <- SETMODEL_HANDLER: Consume message + ref over TOPIC_SETMODEL, SETMODEL_HANDLER: Settlement Model Handler Consume (Success)\n + ||| TOPIC_TRANSFER_POSITION <- POS_HANDLER: Consume message ref over TOPIC_TRANSFER_POSITION, TOPIC_NOTIFICATIONS: Position Handler Consume (Success)\n POS_HANDLER -> TOPIC_NOTIFICATIONS: Produce message diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg new file mode 100644 index 000000000..cbeb4cdae --- /dev/null +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg @@ -0,0 +1,153 @@ +2.1.0. DFSP2 sends a Fulfil Success Transfer requestFinancial Service ProvidersML API Adapter ServiceCentral ServiceDFSP1PayerDFSP1PayerDFSP2PayeeDFSP2PayeeML API AdapterML API AdapterML API Notification Event HandlerML API Notification Event HandlerCentral Service APICentral Service APItopic-fulfiltopic-fulfilFulfil Event HandlerFulfil Event Handlertopic-settlement-modeltopic-settlement-modelSettlement ModelHandlerSettlement ModelHandlertopic-transfer-positiontopic-transfer-positionPosition HandlerPosition Handlertopic-notificationtopic-notificationDFSP2 sends a Fulfil Success Transfer request1Retrieve fulfilment string generated duringthe quoting process or regenerate it usingLocal secretandILP Packetas inputsHeaders - transferHeaders: {Content-Length: <Content-Length>,Content-Type: <Content-Type>,Date: <Date>,X-Forwarded-For: <X-Forwarded-For>,FSPIOP-Source: <FSPIOP-Source>,FSPIOP-Destination: <FSPIOP-Destination>,FSPIOP-Encryption: <FSPIOP-Encryption>,FSPIOP-Signature: <FSPIOP-Signature>,FSPIOP-URI: <FSPIOP-URI>,FSPIOP-HTTP-Method: <FSPIOP-HTTP-Method>}Payload - transferMessage:{"fulfilment": <IlpFulfilment>,"completedTimestamp": <DateTime>,"transferState": "COMMITTED","extensionList": {"extension": [{"key": <string>,"value": <string>}]}}2PUT - /transfers/<ID>3Validate incoming token and originator matching PayeeError codes:3000-3002, 3100-3107Message:{id: <ID>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,type: fulfil,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}4Route & Publish Fulfil event for PayeeError code:20035Ensure event is replicated as configured (ACKS=all)Error code:20036Respond replication acknowledgements have been received7Respond HTTP - 200 (OK)8Consume messagerefFulfil Handler Consume (Success) {2.1.1}9Produce message10Produce message11Consume messagerefSettlement Model Handler Consume (Success)12Consume messagerefPosition Handler Consume (Success)13Produce message14Consume messageopt[action == 'commit']refSend notification to Participant (Payer)15Send callback notification16Consume messageopt[action == 'commit']refSend notification to Participant (Payee)17Send callback notification \ No newline at end of file diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.plantuml b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.plantuml index 484af46a6..42f281ef6 100644 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.plantuml +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.plantuml @@ -34,12 +34,13 @@ autonumber ' entity - Database Access Objects ' database - Database Persistance Store ' declare actors -collections "Fulfil-Topic" as TOPIC_FULFIL -control "Fulfil Event Handler" as FULF_HANDLER -collections "Event-Topic" as TOPIC_EVENT -collections "topic-transfer-position" as TOPIC_TRANSFER_POSITION -collections "Notification-Topic" as TOPIC_NOTIFICATIONS -'entity "Transfer Duplicate Facade" as DUP_FACADE +collections "topic-fulfil" as TOPIC_FULFIL +control "Fulfil Event\nHandler" as FULF_HANDLER +collections "topic-event" as TOPIC_EVENT +collections "topic-\ntransfer-position" as TOPIC_TRANSFER_POSITION +collections "topic-\nsettlement-model" as TOPIC_SETMODEL +collections "topic-\nnotification" as TOPIC_NOTIFICATIONS + entity "Position DAO" as POS_DAO database "Central Store" as DB box "Central Service" #LightYellow @@ -47,6 +48,7 @@ box "Central Service" #LightYellow participant FULF_HANDLER participant TOPIC_TRANSFER_POSITION participant TOPIC_EVENT + participant TOPIC_SETMODEL participant TOPIC_NOTIFICATIONS participant POS_DAO participant DB @@ -157,7 +159,38 @@ group Fulfil Handler Consume (Success) note right of FULF_HANDLER #yellow Message: { - id: , + id: , + from: switch, + to: switch, + type: application/json + content: { + payload: { + transferId: {id} + } + }, + metadata: { + event: { + id: , + responseTo: , + type: setmodel, + action: commit, + createdAt: , + state: { + status: "success", + code: 0 + } + } + } + } + end note + FULF_HANDLER -> TOPIC_SETMODEL: Route & Publish settlement model event + activate TOPIC_SETMODEL + deactivate TOPIC_SETMODEL + + note right of FULF_HANDLER #yellow + Message: + { + id: , from: , to: , type: application/json, @@ -200,7 +233,7 @@ group Fulfil Handler Consume (Success) note right of FULF_HANDLER #yellow Message: { - id: , + id: , from: , to: , type: application/json, diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg new file mode 100644 index 000000000..bea41342f --- /dev/null +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg @@ -0,0 +1,251 @@ +2.1.1. Fulfil Handler Consume (Success)Central Servicetopic-fulfiltopic-fulfilFulfil EventHandlerFulfil EventHandlertopic-transfer-positiontopic-transfer-positiontopic-eventtopic-eventtopic-settlement-modeltopic-settlement-modeltopic-notificationtopic-notificationPosition DAOPosition DAOCentral StoreCentral StoreFulfil Handler Consume (Success)alt[Consume Single Message]1Consume Fulfil event message for PayerbreakValidate Event2Validate event - Rule: type == 'fulfil' && action == 'commit'Error codes:2001Persist Event Information3Publish event informationrefEvent Handler ConsumeValidate Duplicate Check4Request Duplicate CheckrefRequest Duplicate Check5Return { hasDuplicateId: Boolean, hasDuplicateHash: Boolean }alt[hasDuplicateId == TRUE && hasDuplicateHash == TRUE]break6stateRecord = await getTransferState(transferId)alt[endStateList.includes(stateRecord.transferStateId)]refgetTransfer callback7Produce messageIgnore - resend in progress[hasDuplicateId == TRUE && hasDuplicateHash == FALSE]Validate Prepare Transfer (failure) - Modified Request[hasDuplicateId == FALSE]Validate and persist Transfer Fulfilment8Request information for the validate checksError code:20039Fetch from databasetransfer1011Return transfer12Validate that Transfer.ilpCondition = SHA-256 (content.payload.fulfilment)Error code:200113Validate expirationDateError code:3303opt[Transfer.ilpCondition validate successful]Request current Settlement Window14Request to retrieve current/latest transfer settlement windowError code:200315Fetch settlementWindowIdsettlementWindow1617Return settlementWindowId to be appended during transferFulfilment insertTODO: During settlement design make sure transfers in 'RECEIVED-FULFIL'state are updated to the next settlement windowPersist fulfilment18Persist fulfilment with the result of the above check (transferFulfilment.isValid)Error code:200319Persist to databasetransferFulfilmenttransferExtension20Return successalt[Transfer.ilpCondition validate successful]Persist Transfer State (with transferState='RECEIVED-FULFIL')21Request to persist transfer stateError code:200322Persist transfer statetransferStateChange23Return successMessage:{id: <id>,from: switch,to: switch,type: application/jsoncontent: {payload: {transferId: {id}}},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: setmodel,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}24Route & Publish settlement model eventMessage:{id: <id>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: position,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}25Route & Publish Position event for Payee[Validate Fulfil Transfer not successful]Persist Transfer State (with transferState='ABORTED')26Request to persist transfer stateError code:200327Persist transfer statetransferStateChange28Return successMessage:{id: <id>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: position,action: abort,createdAt: <timestamp>,state: {status: "error",code: 1}}}}29Route & Publish Position event for Payer[Consume Batch Messages]To be delivered by future story \ No newline at end of file diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml index 8a5f5c88d..3d8209299 100644 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.plantuml @@ -39,6 +39,7 @@ control "Settlement Model\nHandler" as SETMODEL_HANDLER collections "topic-event" as TOPIC_EVENT entity "Settlement DAO" as SET_DAO database "Central Store" as DB + box "Central Service" #LightYellow participant TOPIC_SETMODEL participant SETMODEL_HANDLER @@ -56,7 +57,7 @@ group Settlement Model Handler Consume deactivate TOPIC_SETMODEL break group Validate Event - SETMODEL_HANDLER <-> SETMODEL_HANDLER: Validate event - Rule: type == 'setmodel' && action == 'assign'\nError codes: 2001 + SETMODEL_HANDLER <-> SETMODEL_HANDLER: Validate event - Rule: type == 'setmodel' && action == 'commit'\nError codes: 2001 end end group Persist Event Information @@ -66,30 +67,9 @@ group Settlement Model Handler Consume ||| end - group Request current Settlement Window - SETMODEL_HANDLER -> SET_DAO: Request to retrieve current/latest transfer settlement window\nError code: 2003 - activate SET_DAO - SET_DAO -> DB: Fetch OPEN window - activate DB - hnote over DB #lightyellow - settlementWindow - end note - DB --> SET_DAO: Return settlementWindowId - deactivate DB - SETMODEL_HANDLER <-- SET_DAO: Return settlementWindowId - deactivate SET_DAO - end - - SETMODEL_HANDLER -> SET_DAO: Assign window and transferParicipant state\nError code: 2003 + SETMODEL_HANDLER -> SET_DAO: Assign transferParicipant state(s)\nError code: 2003 activate SET_DAO group DB TRANSACTION - SET_DAO -> DB: Assign settlement window id - activate DB - hnote over DB #lightyellow - transferFulfilment - end note - deactivate DB - SET_DAO -> DB: Fetch transfer participant entries activate DB hnote over DB #lightyellow @@ -99,6 +79,9 @@ group Settlement Model Handler Consume deactivate DB loop for each transferParticipant + note right of SET_DAO #lightgrey + Settlement models caching to be considered + end note SET_DAO -> DB: Get settlement model by currency and ledger entry activate DB hnote over DB #lightyellow @@ -107,8 +90,8 @@ group Settlement Model Handler Consume DB --> SET_DAO: Return **settlementModel** deactivate DB - opt settlementModel.delay == 'IMMEDIATE' || settlementModel.granularity == 'GROSS' - SET_DAO -> DB: Set state: OPEN->CLOSED->PENDING_SETTLEMENT->SETTLED + opt settlementModel.delay == 'IMMEDIATE' && settlementModel.granularity == 'GROSS' + SET_DAO -> DB: Set states: CLOSED->PENDING_SETTLEMENT->SETTLED activate DB hnote over DB #lightyellow transferParticipantStateChange diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg index 15ce0f079..f58653d17 100644 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg +++ b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg @@ -1,4 +1,4 @@ -2.1.2. Settlement Model Handler ConsumeCentral Servicetopic-settlement-modeltopic-settlement-modelSettlement ModelHandlerSettlement ModelHandlertopic-eventtopic-eventSettlement DAOSettlement DAOCentral StoreCentral StoreSettlement Model Handler Consumealt[Consume Single Message]1Consume settlement modelevent messagebreakValidate Event2Validate event - Rule: type == 'setmodel' && action == 'assign'Error codes:2001Persist Event Information3Publish event informationrefEvent Handler ConsumeRequest current Settlement Window4Request to retrieve current/latest transfer settlement windowError code:20035Fetch OPEN windowsettlementWindow6Return settlementWindowId7Return settlementWindowId8Assign window and transferParicipant stateError code:2003DB TRANSACTION9Assign settlement window idtransferFulfilment10Fetch transfer participant entriestransferParticipant11ReturntransferParticipantRecordsloop[for each transferParticipant]12Get settlement model by currency and ledger entrysettlementModel13ReturnsettlementModelopt[settlementModel.delay == 'IMMEDIATE' || settlementModel.granularity == 'GROSS']14Set state: OPEN->CLOSED->PENDING_SETTLEMENT->SETTLEDtransferParticipantStateChangetransferParticipant15Set state: OPENtransferParticipantStateChangetransferParticipant16Return success[Consume Batch Messages]To be delivered by future story \ No newline at end of file diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.plantuml b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.plantuml index 6769f4ea6..66e9c65b0 100644 --- a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.plantuml +++ b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.plantuml @@ -82,10 +82,12 @@ group Acknowledgement of Settlement Transfer activate DB hnote over DB #lightyellow SELECT s.settlementId, ssc.settlementStateId, - ssc.reason, ssc.createdDate + ssc.reason, ssc.createdDate, sm.autoPositionReset FROM **settlement** s JOIN **settlementStateChange** ssc ON ssc.settlementStateChangeId = s.currentStateChangeId + JOIN **settlementModel** sm + ON sm.settlementModelId = s.settlementModelId WHERE s.settlementId = {id} FOR UPDATE end hnote @@ -408,18 +410,20 @@ group Acknowledgement of Settlement Transfer deactivate DB end - alt settlementData.state == 'PENDING_SETTLEMENT' - ||| - ref over SETTLE_DAO, DB: Settlement Transfer Prepare\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n - ||| - else settlementData.state == 'PS_TRANSFERS_RECORDED' - ||| - ref over SETTLE_DAO, DB: Settlement Transfer Reserve\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n - ||| - else settlementData.state == 'PS_TRANSFERS_RESERVED' - ||| - ref over SETTLE_DAO, DB: Settlement Transfer Commit\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n - ||| + opt autoPositionReset == true + alt settlementData.state == 'PENDING_SETTLEMENT' + ||| + ref over SETTLE_DAO, DB: Settlement Transfer Prepare\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n + ||| + else settlementData.state == 'PS_TRANSFERS_RECORDED' + ||| + ref over SETTLE_DAO, DB: Settlement Transfer Reserve\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n + ||| + else settlementData.state == 'PS_TRANSFERS_RESERVED' + ||| + ref over SETTLE_DAO, DB: Settlement Transfer Commit\n\n**Inputs**: settlementId, transactionTimestamp, enums, trx\n + ||| + end end group Update aggregations, contents & windows @@ -429,6 +433,8 @@ group Acknowledgement of Settlement Transfer deactivate DB hnote over DB #lightyellow settlementContentAggregation + transferParticipantStateChange + transferParticipant settlementWindowContentStateChange settlementWindowContent settlementWindowStateChange diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg new file mode 100644 index 000000000..9669d1599 --- /dev/null +++ b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg @@ -0,0 +1,565 @@ +6.2.5. Acknowledgement of Settlement Transfer (updateSettlementById)Central HUBSettlement ServiceCentral ServicesHub EmployeeHub EmployeeSettlement Service APISettlement Service APISettlement DAOSettlement DAOCentral StoreCentral StoreAcknowledgement of Settlement Transfer{"participants": [{"id": 1"accounts" : [{ "id": 1, "state": "PENDING_SETTLEMENT", "reason": <string> },{ "id": 2, "state": "PS_TRANSFERS_RECORDED", "reason": <string>, "externalReference": <string> },{ "id": 3, "state": "PS_TRANSFERS_RESERVED", "reason": <string> },{ "id": 4, "state": "PS_TRANSFERS_COMMITTED", "reason": <string>, "externalReference": <string> },{ "id": 5, "state": "SETTLED", "reason": <string> }]},{"id": 2"accounts" : [{ "id": 6, "state": "SETTLED", "reason": <string> }]}]}1PUT - /settlement/{id}2updateSettlementById routineError code:2001DB TRANSACTION3Retrieve settlement informationSELECT s.settlementId, ssc.settlementStateId,ssc.reason, ssc.createdDate, sm.autoPositionResetFROMsettlementsJOINsettlementStateChangesscON ssc.settlementStateChangeId = s.currentStateChangeIdJOINsettlementModelsmON sm.settlementModelId = s.settlementModelIdWHERE s.settlementId = {id}FOR UPDATE4ReturnsettlementData5Retrive settlement accounts informationSELECT pc.participantId, spc.participantCurrencyId,spcsc.settlementStateId, spcsc.reason,spcsc.createdDate, spc.netAmount, pc.currencyId,spc.settlementParticipantCurrencyId ASkeyFROMsettlementParticipantCurrencyspcJOINsettlementParticipantCurrencyStateChangespcscON spcsc.settlementParticipantCurrencyStateChangeId =spc.currentStateChangeIdJOINparticipantCurrencypcON pc.participantCurrencyId = spc.participantCurrencyIdWHERE spc.settlementId = {id}FOR UPDATE6ReturnsettlementAccountsListAll objects below are for the purpose of the syncronous request.If at some point, Node process memory limit is reached, we may decide to:A. Limit the amount of transfers per window and windows per settlement orB. Move to asyncronous processing where we don't need these objectsAvailable raw datasets from DB:settlementDatacontains information about settlement and its current state/reasonsettlementAccountsListholds information about all accounts and their current state/reasonLocal variables and objects:settlementAccounts: { // (derived fromsettlementAccountsList)pendingSettlementCount: <integer>, // count of accounts in PENDING_SETTLEMENT statepsTransfersRecordedCount: <integer>, // count of accounts in PS_TRANSFERS_RECORDED statepsTransfersReservedCount: <integer>, // count of accounts in PS_TRANSFERS_RESERVED statepsTransfersCommittedCount: <integer>, // count of accounts in PS_TRANSFERS_COMMITTED statesettledCount: <integer>, // count of accounts in SETTLED stateabortedCount: <integer> // count of accounts in ABORTED stateunknownCount: <integer>,settledIdList: <array>,changedIdList: <array>}settlementAccountsInitcopy of previous object to be preserved for comparission at the endallAccounts: { // same as previous but accessed by account id (derived fromsettlementAccountsList)participantCurrencyId_key: { // number used to access the object in map-like styleid: participantCurrencyId,state: settlementStateId,reason: reason,createdDate: createdDate,netSettlementAmount: {amount: netAmount,currency: currencyId},participantId: participantId, // could be used to reconstruct allParticipantskey:key// will be used to insert new state for settlementParticipantCurrency}}lettransactionTimestamp= now()7Declare and initialize variableslet settlementAccounts = {pendingSettlementCount: 0,psTransfersRecordedCount: 0,psTransfersReservedCount: 0,psTransfersCommittedCount: 0,settledCount: 0,abortedCount: 0,unknownCount: 0}let allAccounts = {} // declare maplet pid // participantIdlet aid // accountId (participantCurrencyId)let stateloop[settlementAccountsList as account]8PopulateallAccountspid = account.participantIdaid = account.participantCurrencyIdstate = account.settlementStateIdallAccounts[aid] = {id: aid,state,reason: account.reason,createDate: account.createdDate,netSettlementAmount: {amount: account.netAmount,currency: account.currencyId},participantId: pid,key: account.key}9PopulatesettlementAccountsalt[state == 'PENDING_SETTLEMENT']settlementAccounts.pendingSettlementCount++[state == 'PS_TRANSFERS_RECORDED']settlementAccounts.psTransfersRecordedCount++[state == 'PS_TRANSFERS_RESERVED']settlementAccounts.psTransfersReservedCount++[state == 'PS_TRANSFERS_COMMITTED']settlementAccounts.psTransfersCommittedCount++[state == 'SETTLED']settlementAccounts.settledCount++[state == 'ABORTED']settlementAccounts.abortedCount++[default]settlementAccounts.unknownCount++10Make a copy of settlementAccounts intosettlementAccountsInitsettlementAccountsInit = Object.assign({}, settlementAccounts)Available objects after the setup:settlementAccountsis used for tracing settlement state and state transition allowanceallAccountsis helper object, same as previous, providing direct access to account by idNow we are ready to process thepayload:participants= [] // part of the response object that lists the affected participants and respective accountssettlementParticipantCurrencyStateChange= [] // array to collect inserts to the tablesettlementParticipantCurrencySettledList= [] // array to collect settled accountsprocessedAccounts= [] // array to log processed accounts and restrict subsequent processingloop[let participant IN payload.participants]11Loop payload for eachparticipantPayloadlet participantPayload = payload.participants[participant]participants.push({id: participantPayload.id, accounts: []})let pi = participants.length - 1participant = participants[pi]loop[let account IN participantPayload.accounts]12Loop payload for eachaccountPayloadlet accountPayload = participantPayload.accounts[account]alt[allAccounts[accountPayload.id] == undefined]13If the account doesn't match the settlementparticipant.accounts.push({id: accountPayload.id,errorInformation: {errorCode: 3000,errorDescription: 'Account not found'}})[participantPayload.id != allAccounts[accountPayload.id].participantId]14If the account doesn't match the participantparticipant.accounts.push({id: accountPayload.id,errorInformation: {errorCode: 3000,errorDescription: 'Participant and account mismatch'}})[processedAccounts.indexOf(accountPayload.id) > -1]15If the account has been previosly processed (duplicated in the payload)participant.accounts.push({id: accountPayload.id,state: allAccounts[accountPayload.id].state,reason: allAccounts[accountPayload.id].reason,createdDate: allAccounts[accountPayload.id].createdDate,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmounterrorInformation: {errorCode: 3000,errorDescription: 'Account already processed once'}})[allAccounts[account.id].state == accountPayload.state // allowed]16Same-state reason amendment is always allowedprocessedAccounts.push(accountPayload.id)participant.accounts.push({id: accountPayload.id,state: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,createdDate: transactionTimestamp,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmount})settlementParticipantCurrencyStateChange.push({settlementParticipantCurrencyId: allAccounts[accountPayload.id].key,settlementStateId: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference})allAccounts[accountPayload.id].reason = accountPayload.reasonallAccounts[accountPayload.id].createdDate = currentTimestamp[settlementData.state == 'PENDING_SETTLEMENT' && accountPayload.state == 'PS_TRANSFERS_RECORDED'][settlementData.state == 'PS_TRANSFERS_RECORDED' && accountPayload.state == 'PS_TRANSFERS_RESERVED'][settlementData.state == 'PS_TRANSFERS_RESERVED' && accountPayload.state == 'PS_TRANSFERS_COMMITTED'][settlementData.state == 'PS_TRANSFERS_COMMITTED' || settlementData.state == 'SETTLING' && accountPayload.state == 'SETTLED']Note: Since we previously checked same-state, here we don't need to matchallAccounts[account.id].state == settlementData.state.17Settlement acknowledgementprocessedAccounts.push(accountPayload.id)participant.accounts.push({id: accountPayload.id,state: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,createdDate: transactionTimestamp,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmount})settlementParticipantCurrencyStateChange.push({settlementParticipantCurrencyId: allAccounts[accountPayload.id].key,settlementStateId: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,settlementTransferId: Uuid() -- only for PS_TRANSFERS_RECORDED})if (accountPayload.state == 'PS_TRANSFERS_RECORDED') {settlementAccounts.pendingSettlementCount--settlementAccounts.psTransfersRecordedCount++} else if (accountPayload.state == 'PS_TRANSFERS_RESERVED') {settlementAccounts.psTransfersRecordedCount--settlementAccounts.psTransfersReservedCount++} else if (accountPayload.state == 'PS_TRANSFERS_COMMITTED') {settlementAccounts.psTransfersReservedCount--settlementAccounts.psTransfersCommittedCount++} else if (accountPayload.state == 'SETTLED') {settlementParticipantCurrencySettledIdList.push(allAccounts[accountPayload.id].key)settlementAccounts.psTransfersCommittedCount--settlementAccounts.settledCount++settlementAccounts.settledIdList.push(accountPayload.id)}settlementAccounts.changedIdList.push(accountPayload.id)allAccounts[accountPayload.id].state = accountPayload.stateallAccounts[accountPayload.id].reason = accountPayload.reasonallAccounts[accountPayload.id].externalReference = accountPayload.externalReferenceallAccounts[accountPayload.id].createdDate = currentTimestamp18All other state transitions are not permittedparticipant.accounts.push({id: accountPayload.id,state: allAccounts[accountPayload.id].state,reason: allAccounts[accountPayload.id].reason,createdDate: allAccounts[accountPayload.id].createdDate,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmounterrorInformation: {errorCode: <integer>,errorDescription: 'State change not allowed'}})Bulk insert settlementParticipantCurrencyStateChange19Insert settlementParticipantCurrencyStateChangesettlementParticipantCurrencyStateChange20ReturnsettlementParticipantCurrencyStateChangeIdList21Merge settlementParticipantCurrencyStateChangeIdListtosettlementParticipantCurrencyIdListin order toissue the following update in one knex command22Update pointers to current state change idsUPDATEsettlementParticipantCurrencySET currentStateChangeId ={settlementParticipantCurrencyStateChangeIdList},settlementTransferId =settlementParticipantCurrencyStateChange.settlementTransferId-- only for PENDING_SETTLEMENT to PS_TRANSFERS_RECORDEDWHERE settlementParticipantCurrencyId ={settlementParticipantCurrencyStateChange.settlementParticipantCurrencyIdList}opt[autoPositionReset == true]alt[settlementData.state == 'PENDING_SETTLEMENT']refSettlement Transfer PrepareInputs: settlementId, transactionTimestamp, enums, trx[settlementData.state == 'PS_TRANSFERS_RECORDED']refSettlement Transfer ReserveInputs: settlementId, transactionTimestamp, enums, trx[settlementData.state == 'PS_TRANSFERS_RESERVED']refSettlement Transfer CommitInputs: settlementId, transactionTimestamp, enums, trxUpdate aggregations, contents & windowsopt[settlementParticipantCurrencySettledIdList.length > 0]23Change settlementWindowState where applicablesettlementContentAggregationtransferParticipantStateChangetransferParticipantsettlementWindowContentStateChangesettlementWindowContentsettlementWindowStateChangesettlementWindow24Retrieve all affected content (incl. when settled)settlementContentAggregationsettlementWindowContentsettlementWindowContentStateChangeledgerAccountTypesettlementWindowsettlementWindowStateChange25ReturnaffectedWindowsReport26Use previous result to produce settlementWindowsData (swd) arrayPrepare and insert settlementStateChangelet settlementStateChanged = truealt[settlementData.state == 'PENDING_SETTLEMENT'&& settlementAccounts.pendingSettlementCount == 0]settlementData.state = 'PS_TRANSFERS_RECORDED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_RECORDED'[settlementData.state == 'PS_TRANSFERS_RECORDED'&& settlementAccounts.psTransfersRecordedCount == 0]settlementData.state = 'PS_TRANSFERS_RESERVED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_RESERVED'[settlementData.state == 'PS_TRANSFERS_RESERVED'&& settlementAccounts.psTransfersReservedCount == 0]settlementData.state = 'PS_TRANSFERS_COMMITTED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_COMMITTED'[settlementData.state == 'PS_TRANSFERS_COMMITTED'&& settlementAccounts.psTransfersCommittedCount > 0&& settlementAccounts.settledCount > 0]settlementData.state = 'SETTLING'settlementData.reason = 'Some settlement accounts are SETTLED'[(settlementData.state == 'PS_TRANSFERS_COMMITTED' || settlementData.state == 'SETTLING')&& settlementAccounts.psTransfersCommittedCount == 0]settlementData.state = 'SETTLED'settlementData.reason = 'All settlement accounts are SETTLED'settlementStateChanged = falseopt[settlementStateChanged == true]settlementData.createdDate = currentTimestampsettlementStateChange.push(settlementData)27Insert settlementStateChangesettlementStateChange28ReturnsettlementStateChangeId29Update pointer to current state change idUPDATEsettlement.currentStateChangeId30Return transaction result{"id": {id},"state": settlementData.state,"createdDate": settlementData.createdDate,"settlementWindows": [{"id": swd[m].id,"state": swd[m].state,"reason": swd[m].reason,"createdDate": swd[m].createdDate,"changedDate": swd[m].changedDate,"content": [{"id": swd[m].content[n].settlementWindowContentId,"state": swd[m].content[n].settlementWindowStateId,"ledgerAccountType": swd[m].content[n].ledgerAccountType,"currencyId": swd[m].content[n].currencyId,"createdDate": swd[m].content[n].createdDate,"changedDate": swd[m].content[n].changedDate}]}],"participants": [{"id": <integer>,"accounts": [{"id": <integer>,"state": "<string>,"reason": <string>,"externalReference": <string>,"createdDate": <date>,"netSettlementAmount": {"amount": <decimal>,"currency": <enum>}},{"id": <integer>,"state": <string>,"reason": <string>,"createdDate": <date>,"netSettlementAmount": {"amount": <decimal>,"currency": <enum>},"errorInformation": {"errorCode": <integer>,"errorDescription": <string>}}]}]}31Return response \ No newline at end of file diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.plantuml b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.plantuml index bbc922691..cca5d36cf 100644 --- a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.plantuml +++ b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.plantuml @@ -221,73 +221,96 @@ group Close Settlement Window iter++ end note - SET_WIN_HANDLER -> SETTLE_DAO: Generate window content and aggregations\nError code: 2001 + SET_WIN_HANDLER -> SETTLE_DAO: Check if all transferParticipant records\nfor the requested window have been set\n(currentStateChangeId is NOT NULL).\nError code: 2001 activate SETTLE_DAO - group DB TRANSACTION: Generate window content and aggregations - note right of SETTLE_DAO #lightgray - let **transactionTimestamp** = now() - end note + SETTLE_DAO -> DB: Use EXISTS query to find NULL currentStateChangeId records + activate DB + hnote over DB #lightyellow + transferFulfilment + transferParticipant + end hnote + deactivate DB + SET_WIN_HANDLER <-- SETTLE_DAO: Return result (success / failure) + deactivate SETTLE_DAO - SETTLE_DAO -> DB: Determine window content and insert - activate DB - hnote over DB #lightyellow - INSERT INTO **settlementWindowContent** (settlementWindowId, ledgerAccountTypeId, - currencyId, createdDate) - SELECT DISTINCT {id} settlementWindowId, pc.ledgerAccountTypeId, - pc.currencyId, transactionTimestamp - FROM **transferFulfilment** tf - JOIN **transferParticipant** tp - ON tp.transferId = tf.transferId - JOIN **participantCurrency** pc - ON pc.participantCurrencyId = tp.participantCurrencyId - WHERE tf.settlementWindowId = {id} - end hnote - deactivate DB + opt transferParticipant records have been processed by central-ledger SettlementModelHandler + SET_WIN_HANDLER -> SETTLE_DAO: Generate window content and aggregations\nError code: 2001 + activate SETTLE_DAO + group DB TRANSACTION: Generate window content and aggregations + note right of SETTLE_DAO #lightgray + let **transactionTimestamp** = now() + end note - SETTLE_DAO -> DB: Aggregate window data and insert - activate DB - hnote over DB #lightyellow - INSERT INTO **settlementContentAggregation** (settlementWindowContentId, participantCurrencyId, - transferParticipantRoleTypeId, ledgerEntryTypeId, currentStateId, createdDate, amount) - SELECT swc.settlementWindowContentId, pc.participantCurrencyId, tp.transferParticipantRoleTypeId, - tp.ledgerEntryTypeId, 'CLOSED', transactionTimestamp, SUM(tp.amount) - FROM **transferFulfilment** tf - JOIN **transferParticipant** tp - ON tf.transferId = tp.transferId - JOIN **participantCurrency** pc - ON pc.participantCurrencyId = tp.participantCurrencyId - JOIN **settlementWindowContent** swc - ON swc.settlementWindowId = tf.settlementWindowId - AND swc.ledgerAccountTypeId = pc.ledgerAccountTypeId - AND swc.currencyId = pc.currencyId - WHERE tf.settlementWindowId = {id} - GROUP BY swc.settlementWindowContentId, pc.participantCurrencyId, - tp.transferParticipantRoleTypeId, tp.ledgerEntryTypeId - end hnote - deactivate DB + SETTLE_DAO -> DB: Change all applicable entries to CLOSED state + activate DB + hnote over DB #lightyellow + transferParticipantStateChange + transferParticipant + + end hnote + deactivate DB - SETTLE_DAO -> DB: Insert initial window content state change - activate DB - hnote over DB #lightyellow - INSERT INTO **settlementWindowContentStateChange** - (settlementWindowContentId, settlementWindowStateId) - SELECT swc.settlementWindowContentId, 'CLOSED' - FROM **settlementWindowContent** swc - WHERE swc.settlementWindowId = {id} - end hnote - deactivate DB + SETTLE_DAO -> DB: Determine window content and insert + activate DB + hnote over DB #lightyellow + INSERT INTO **settlementWindowContent** (settlementWindowId, ledgerAccountTypeId, + currencyId, createdDate) + SELECT DISTINCT {id} settlementWindowId, pc.ledgerAccountTypeId, + pc.currencyId, transactionTimestamp + FROM **transferFulfilment** tf + JOIN **transferParticipant** tp + ON tp.transferId = tf.transferId + JOIN **participantCurrency** pc + ON pc.participantCurrencyId = tp.participantCurrencyId + WHERE tf.settlementWindowId = {id} + end hnote + deactivate DB - SETTLE_DAO -> DB: Update pointers to current state change ids - activate DB - hnote over DB #lightyellow - settlementWindowContent - end hnote - deactivate DB + SETTLE_DAO -> DB: Aggregate window data and insert + activate DB + hnote over DB #lightyellow + INSERT INTO **settlementContentAggregation** (settlementWindowContentId, participantCurrencyId, + transferParticipantRoleTypeId, ledgerEntryTypeId, currentStateId, createdDate, amount) + SELECT swc.settlementWindowContentId, pc.participantCurrencyId, tp.transferParticipantRoleTypeId, + tp.ledgerEntryTypeId, 'CLOSED', transactionTimestamp, SUM(tp.amount) + FROM **transferFulfilment** tf + JOIN **transferParticipant** tp + ON tf.transferId = tp.transferId + JOIN **participantCurrency** pc + ON pc.participantCurrencyId = tp.participantCurrencyId + JOIN **settlementWindowContent** swc + ON swc.settlementWindowId = tf.settlementWindowId + AND swc.ledgerAccountTypeId = pc.ledgerAccountTypeId + AND swc.currencyId = pc.currencyId + WHERE ttf.settlementWindowId = {id} + GROUP BY swc.settlementWindowContentId, pc.participantCurrencyId, + tp.transferParticipantRoleTypeId, tp.ledgerEntryTypeId + end hnote + deactivate DB + + SETTLE_DAO -> DB: Insert initial window content state change + activate DB + hnote over DB #lightyellow + INSERT INTO **settlementWindowContentStateChange** + (settlementWindowContentId, settlementWindowStateId) + SELECT swc.settlementWindowContentId, 'CLOSED' + FROM **settlementWindowContent** swc + WHERE swc.settlementWindowId = {id} + end hnote + deactivate DB + + SETTLE_DAO -> DB: Update pointers to current state change ids + activate DB + hnote over DB #lightyellow + settlementWindowContent + end hnote + deactivate DB + end + SETTLE_DAO --> SET_WIN_HANDLER: Return result (success / failure) + deactivate SETTLE_DAO end - SETTLE_DAO --> SET_WIN_HANDLER: Return result - deactivate SETTLE_DAO - opt success + alt success note right of SET_WIN_HANDLER #lightgray windowContentReady = true end note diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg new file mode 100644 index 000000000..ef6ad181d --- /dev/null +++ b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg @@ -0,0 +1,349 @@ +6.1.2. Close Settlement Window (closeSettlementWindow)Central HUBSettlement ServiceCentral ServicesHub EmployeeHub EmployeeSettlement Service APISettlement Service APItopic-settlement-windowtopic-settlement-windowSettlement WindowHandlerSettlement WindowHandlertopic-eventtopic-eventSettlement DAOSettlement DAOCentral StoreCentral StoreClose Settlement Window{"state": "CLOSED","reason": <string>}1POST - /settlementWindows/{id}2Validate payload, existing window,state, assigned transfers, etc.break{"errorInformation": {"errorCode": <integer>,"errorDescription": "FSPIOP Error Description"}}3Respond HTTP - 400 (Bad Request)4Get requested settlementWindow and stateError code:20015Get settlementWindow stateSELECT sw.settlementWindowId, swsc.settlementWindowStateId,swsc.reason, sw.createdDate, swsc.createdDate changedDateFROMsettlementWindowAS swJOINsettlementWindowStateChangeAS swscON swsc.settlementWindowStateChangeId = sw.currentStateChangeIdWHERE sw.settlementWindowId = {id}6Return resultalt[settlementWindow found && settlementWindowStateId == 'OPEN']Process settlement window7Terminate current window and open a new oneError code:2001DB TRANSACTION: Terminate window usage and initate nextlettransactionTimestamp= now()8Terminate requested windowINSERT INTOsettlementWindowStateChange(settlementWindowId, settlementWindowStateId, reason, createdDate)VALUES ({id}, 'PROCESSING', {payload.reason}, {transactionTimestamp})9ReturnsettlementWindowStateChangeId10Update pointer to current state change idUPDATEsettlementWindowSET currentStateChangeId = {settlementWindowStateChangeId}WHERE settlementWindowId = {id}11Create new settlementWindowINSERT INTOsettlementWindow(reason, createdDate)VALUES ({payload.reason}, {transactionTimestamp})12ReturnsettlementWindowId13Insert intial state for the created windowINSERT INTOsettlementWindowStateChange(settlementWindowId, settlementWindowStateId, reason, createdDate)VALUES ({settlementWindowId}, 'OPEN', {payload.reason}, {transactionTimestamp})14ReturnnewSettlementWindowStateChangeId15Update pointer to current state change idUPDATEsettlementWindowSET currentStateChangeId = {newSettlementWindowStateChangeId}WHERE settlementWindowId = {settlementWindowId}16Return successMessage:{id: <uuid>from: switch,to: switch,type: application/jsoncontent: {payload: {settlementWindowId: {id}}},metadata: {event: {id: <uuid>,responseTo: null,type: setwin,action: close,createdAt: <timestamp>,state: {status: "success",code: 0}}}}17Produce Settlement Windowevent messageError codes:2003{"id": settlementWindowId,"state": 'OPEN',"reason": payload.reason,"createdDate": transactionTimestamp,"changedDate": transactionTimestamp}18Respond HTTP - 201 (Created)Close settlement window (SettlementWindowHandler)19Consume Settlement Windowevent messagePersist Event Information20Publish event informationrefEvent Handler Consumeletid= message.content.payload.settlementWindowIdletwindowContentReady= falseletiter= 0loop[iter < Config.WIN_AGGREGATION_RETRY_COUNT && !windowContentReady]iter++21Check if all transferParticipant recordsfor the requested window have been set(currentStateChangeId is NOT NULL).Error code:200122Use EXISTS query to find NULL currentStateChangeId recordstransferFulfilmenttransferParticipant23Return result (success / failure)opt[transferParticipant records have been processed by central-ledger SettlementModelHandler]24Generate window content and aggregationsError code:2001DB TRANSACTION: Generate window content and aggregationslettransactionTimestamp= now()25Change all applicable entries to CLOSED statetransferParticipantStateChangetransferParticipant26Determine window content and insertINSERT INTOsettlementWindowContent(settlementWindowId, ledgerAccountTypeId,currencyId, createdDate)SELECT DISTINCT {id} settlementWindowId, pc.ledgerAccountTypeId,pc.currencyId, transactionTimestampFROMtransferFulfilmenttfJOINtransferParticipanttpON tp.transferId = tf.transferIdJOINparticipantCurrencypcON pc.participantCurrencyId = tp.participantCurrencyIdWHERE tf.settlementWindowId = {id}27Aggregate window data and insertINSERT INTOsettlementContentAggregation(settlementWindowContentId, participantCurrencyId,transferParticipantRoleTypeId, ledgerEntryTypeId, currentStateId, createdDate, amount)SELECT swc.settlementWindowContentId, pc.participantCurrencyId, tp.transferParticipantRoleTypeId,tp.ledgerEntryTypeId, 'CLOSED', transactionTimestamp, SUM(tp.amount)FROMtransferFulfilmenttfJOINtransferParticipanttpON tf.transferId = tp.transferIdJOINparticipantCurrencypcON pc.participantCurrencyId = tp.participantCurrencyIdJOINsettlementWindowContentswcON swc.settlementWindowId = tf.settlementWindowIdAND swc.ledgerAccountTypeId = pc.ledgerAccountTypeIdAND swc.currencyId = pc.currencyIdWHERE ttf.settlementWindowId = {id}GROUP BY swc.settlementWindowContentId, pc.participantCurrencyId,tp.transferParticipantRoleTypeId, tp.ledgerEntryTypeId28Insert initial window content state changeINSERT INTOsettlementWindowContentStateChange(settlementWindowContentId, settlementWindowStateId)SELECT swc.settlementWindowContentId, 'CLOSED'FROMsettlementWindowContentswcWHERE swc.settlementWindowId = {id}29Update pointers to current state change idssettlementWindowContent30Return result (success / failure)alt[success]windowContentReady = true31Close requested windowError code:200132Change window state to 'CLOSED'settlementWindowStateChangesettlementWindow.currentStateChangeId[failure && iter < Config.WIN_AGGREGATION_RETRY_COUNT]sleepConfig.WIN_AGGREGATION_RETRY_INTERVAL seconds[failure]33Fail requested windowError code:200134Change window state to 'FAILED'settlementWindowStateChangesettlementWindow.currentStateChangeId35Log ERROR event36Log ERROR event{"errorInformation": {"errorCode": <integer>,"errorDescription": "Client error description"}}37Respond HTTP - 4xx (Client error) \ No newline at end of file From 3350c5712bb61f51c8be20968338f73400c199c3 Mon Sep 17 00:00:00 2001 From: ggrg Date: Fri, 28 Feb 2020 13:50:06 +0200 Subject: [PATCH 4/4] Remove SVG files --- .../diagrams/sequence/seq-fulfil-2.1.0.svg | 153 ----- .../diagrams/sequence/seq-fulfil-2.1.1.svg | 251 -------- .../diagrams/sequence/seq-setmodel-2.1.2.svg | 101 ---- .../sequence/seq-settlement-6.2.1.svg | 336 ----------- .../sequence/seq-settlement-6.2.5.svg | 565 ------------------ .../diagrams/sequence/seq-setwindow-6.1.2.svg | 349 ----------- 6 files changed, 1755 deletions(-) delete mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg delete mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg delete mode 100644 mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg delete mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.1.svg delete mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg delete mode 100644 mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg deleted file mode 100644 index cbeb4cdae..000000000 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.0.svg +++ /dev/null @@ -1,153 +0,0 @@ -2.1.0. DFSP2 sends a Fulfil Success Transfer requestFinancial Service ProvidersML API Adapter ServiceCentral ServiceDFSP1PayerDFSP1PayerDFSP2PayeeDFSP2PayeeML API AdapterML API AdapterML API Notification Event HandlerML API Notification Event HandlerCentral Service APICentral Service APItopic-fulfiltopic-fulfilFulfil Event HandlerFulfil Event Handlertopic-settlement-modeltopic-settlement-modelSettlement ModelHandlerSettlement ModelHandlertopic-transfer-positiontopic-transfer-positionPosition HandlerPosition Handlertopic-notificationtopic-notificationDFSP2 sends a Fulfil Success Transfer request1Retrieve fulfilment string generated duringthe quoting process or regenerate it usingLocal secretandILP Packetas inputsHeaders - transferHeaders: {Content-Length: <Content-Length>,Content-Type: <Content-Type>,Date: <Date>,X-Forwarded-For: <X-Forwarded-For>,FSPIOP-Source: <FSPIOP-Source>,FSPIOP-Destination: <FSPIOP-Destination>,FSPIOP-Encryption: <FSPIOP-Encryption>,FSPIOP-Signature: <FSPIOP-Signature>,FSPIOP-URI: <FSPIOP-URI>,FSPIOP-HTTP-Method: <FSPIOP-HTTP-Method>}Payload - transferMessage:{"fulfilment": <IlpFulfilment>,"completedTimestamp": <DateTime>,"transferState": "COMMITTED","extensionList": {"extension": [{"key": <string>,"value": <string>}]}}2PUT - /transfers/<ID>3Validate incoming token and originator matching PayeeError codes:3000-3002, 3100-3107Message:{id: <ID>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,type: fulfil,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}4Route & Publish Fulfil event for PayeeError code:20035Ensure event is replicated as configured (ACKS=all)Error code:20036Respond replication acknowledgements have been received7Respond HTTP - 200 (OK)8Consume messagerefFulfil Handler Consume (Success) {2.1.1}9Produce message10Produce message11Consume messagerefSettlement Model Handler Consume (Success)12Consume messagerefPosition Handler Consume (Success)13Produce message14Consume messageopt[action == 'commit']refSend notification to Participant (Payer)15Send callback notification16Consume messageopt[action == 'commit']refSend notification to Participant (Payee)17Send callback notification \ No newline at end of file diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg deleted file mode 100644 index bea41342f..000000000 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-fulfil-2.1.1.svg +++ /dev/null @@ -1,251 +0,0 @@ -2.1.1. Fulfil Handler Consume (Success)Central Servicetopic-fulfiltopic-fulfilFulfil EventHandlerFulfil EventHandlertopic-transfer-positiontopic-transfer-positiontopic-eventtopic-eventtopic-settlement-modeltopic-settlement-modeltopic-notificationtopic-notificationPosition DAOPosition DAOCentral StoreCentral StoreFulfil Handler Consume (Success)alt[Consume Single Message]1Consume Fulfil event message for PayerbreakValidate Event2Validate event - Rule: type == 'fulfil' && action == 'commit'Error codes:2001Persist Event Information3Publish event informationrefEvent Handler ConsumeValidate Duplicate Check4Request Duplicate CheckrefRequest Duplicate Check5Return { hasDuplicateId: Boolean, hasDuplicateHash: Boolean }alt[hasDuplicateId == TRUE && hasDuplicateHash == TRUE]break6stateRecord = await getTransferState(transferId)alt[endStateList.includes(stateRecord.transferStateId)]refgetTransfer callback7Produce messageIgnore - resend in progress[hasDuplicateId == TRUE && hasDuplicateHash == FALSE]Validate Prepare Transfer (failure) - Modified Request[hasDuplicateId == FALSE]Validate and persist Transfer Fulfilment8Request information for the validate checksError code:20039Fetch from databasetransfer1011Return transfer12Validate that Transfer.ilpCondition = SHA-256 (content.payload.fulfilment)Error code:200113Validate expirationDateError code:3303opt[Transfer.ilpCondition validate successful]Request current Settlement Window14Request to retrieve current/latest transfer settlement windowError code:200315Fetch settlementWindowIdsettlementWindow1617Return settlementWindowId to be appended during transferFulfilment insertTODO: During settlement design make sure transfers in 'RECEIVED-FULFIL'state are updated to the next settlement windowPersist fulfilment18Persist fulfilment with the result of the above check (transferFulfilment.isValid)Error code:200319Persist to databasetransferFulfilmenttransferExtension20Return successalt[Transfer.ilpCondition validate successful]Persist Transfer State (with transferState='RECEIVED-FULFIL')21Request to persist transfer stateError code:200322Persist transfer statetransferStateChange23Return successMessage:{id: <id>,from: switch,to: switch,type: application/jsoncontent: {payload: {transferId: {id}}},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: setmodel,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}24Route & Publish settlement model eventMessage:{id: <id>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: position,action: commit,createdAt: <timestamp>,state: {status: "success",code: 0}}}}25Route & Publish Position event for Payee[Validate Fulfil Transfer not successful]Persist Transfer State (with transferState='ABORTED')26Request to persist transfer stateError code:200327Persist transfer statetransferStateChange28Return successMessage:{id: <id>,from: <transferHeaders.FSPIOP-Source>,to: <transferHeaders.FSPIOP-Destination>,type: application/json,content: {headers: <transferHeaders>,payload: <transferMessage>},metadata: {event: {id: <uuid>,responseTo: <previous.uuid>,type: position,action: abort,createdAt: <timestamp>,state: {status: "error",code: 1}}}}29Route & Publish Position event for Payer[Consume Batch Messages]To be delivered by future story \ No newline at end of file diff --git a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg b/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg deleted file mode 100644 index f58653d17..000000000 --- a/mojaloop-technical-overview/central-ledger/assets/diagrams/sequence/seq-setmodel-2.1.2.svg +++ /dev/null @@ -1,101 +0,0 @@ -2.1.2. Settlement Model Handler ConsumeCentral Servicetopic-settlement-modeltopic-settlement-modelSettlement ModelHandlerSettlement ModelHandlertopic-eventtopic-eventSettlement DAOSettlement DAOCentral StoreCentral StoreSettlement Model Handler Consumealt[Consume Single Message]1Consume settlement modelevent messagebreakValidate Event2Validate event - Rule: type == 'setmodel' && action == 'commit'Error codes:2001Persist Event Information3Publish event informationrefEvent Handler Consume4Assign transferParicipant state(s)Error code:2003DB TRANSACTION5Fetch transfer participant entriestransferParticipant6ReturntransferParticipantRecordsloop[for each transferParticipant]Settlement models caching to be considered7Get settlement model by currency and ledger entrysettlementModel8ReturnsettlementModelopt[settlementModel.delay == 'IMMEDIATE' && settlementModel.granularity == 'GROSS']9Set states: CLOSED->PENDING_SETTLEMENT->SETTLEDtransferParticipantStateChangetransferParticipant10Set state: OPENtransferParticipantStateChangetransferParticipant11Return success[Consume Batch Messages]To be delivered by future story \ No newline at end of file diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.1.svg b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.1.svg deleted file mode 100644 index 56b2d36cb..000000000 --- a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.1.svg +++ /dev/null @@ -1,336 +0,0 @@ -6.2.1. Trigger Settlement Event (createSettlement)Central HUBSettlement ServiceCentral ServicesHub EmployeeHub EmployeeSettlement Service APISettlement Service APISettlement DAOSettlement DAOCentral StoreCentral StoreTrigger Settlement Event{"settlementModel": "string","reason": "string","settlementWindows": [{"id": 1,},{"id": 2,}]}1POST - /settlements2Request settlementModelError code:20013Retrieve settlementModelSELECT sg.name settlementGranularity, si.name settlementInterchange,sd.name settlementDelay, sm.ledgerAccountTypeId,sm.currencyId, sm.requireLiquidityCheckFROMsettlementModelsmJOINsettlementGranularitysgON sg.settlementGranularityId = sm.settlementGranularityIdJOINsettlementInterchangesiON si.settlementInterchangeId = sm.settlementInterchangeIdJOINsettlementDelaysdON sd.settlementDelayId = sm.settlementDelayIdWHERE name = {settlementModelName}AND isActive = 14Return data5ReturnsettlementModelData (smd)break[smd.settlementGranularity != 'NET' ||smd.settlementInterchange != 'MULTILATERAL' ||smd.settlementDelay != 'DEFERRED']Log ERROR event{errorInformation: {"errorCode": <integer>,"errorDescription": "Invalid settlement model"}}6Respond HTTP - 4xx (Client error)7Request settlementWindow(s)Error code:20018Retrieve settlementWindow(s)SELECT DISTINCT sw.settlementWindowId, sw.currentStateChangeId, sw.createdDateFROMsettlementWindowswJOINsettlementWindowStateChangeswscON swsc.settlementWindowStateChangeId = sw.currentStateChangeIdJOINsettlementWindowContentswcON swc.settlementWindowId = sw.settlementWindowIdJOINsettlementWindowContentStateChangeswcscON swcsc.settlementWindowContentStateChangeId = sw.currentStateChangeIdWHERE sw.settlementWindowId IN {payload.settlementWindows.idList}AND swc.ledgerAccountType = smd.ledgerAccountTypeAND swc.currencyId = ISNULL(smd.currencyId, swc.currencyId)AND swsc.settlementWindowStateId IN ('CLOSED', 'ABORTED', 'PENDING_SETTLEMENT')AND swcsc.settlementWindowStateId IN ('CLOSED', 'ABORTED')9Return data10ReturnwindowsDatabreak[payload.settlementWindows.length != windowsData.length]Log ERROR event{errorInformation: {"errorCode": <integer>,"errorDescription": "Inapplicable windows found: ${windowId1}, ${windowId2}, ..."}}11Respond HTTP - 4xx (Client error)All preliminary validations succeededMain processing12Create settlementError code:2001DB TRANSACTIONlettransactionTimestamp= now()13Insert new settlementINSERT INTOsettlement(reason, createdDate)VALUES ({payload.reason}, {transactionTimestamp})14ReturnsettlementId15Associate settlement windows with the settlementINSERT INTOsettlementSettlementWindow(settlementId, settlementWindowId, createdDate)VALUES ({settlementId}, {payload.settlementWindows.idList}, {transactionTimestamp})16Bind to settlementsettlementWindowContent.settlementIdsettlementContentAggregation.settlementId.currentStateId17Change state to 'PENDING_SETTLEMENT'transferParticipantStateChangetransferParticipantsettlementWindowContentStateChangesettlementWindowContent18Aggregate settlement net amountsINSERT INTOsettlementParticipantCurrency(settlementId, participantCurrencyId, netAmount, createdDate)SELECT settlementId, participantCurrencyId, SUM(amount), {transactionTimestamp}JOINsettlementContentAggregationWHERE settlementId = {settlementId}GROUP BY settlementId, participantCurrencyId19Return insertedsettlementParticipantCurrencyIdList20Insert initial settlement accounts state 'PENDING_SETTLEMENT'INSERT INTOsettlementParticipantCurrencyStateChange(settlementParticipantCurrencyId, settlementStateId, reason, createdDate)VALUES ({settlementParticipantCurrencyIdList}, 'PENDING_SETTLEMENT',{payload.reason}, {transactionTimestamp})21Return insertedsettlementParticipantCurrencyStateChangeIdList22Merge settlementParticipantCurrencyStateChangeIdListto settlementParticipantCurrencyIdList in order toissue the following update in one knex command23Update pointers to current state change idsUPDATEsettlementParticipantCurrencySET currentStateChangeId = {settlementParticipantCurrencyStateChangeIdList}WHERE settlementParticipantCurrencyId = {settlementParticipantCurrencyIdList}loop[foreach w in windowsData]opt[if w.currentStateChangeId IN ('CLOSED', 'ABORTED')]24Insert new state for settlementWindow 'PENDING_SETTLEMENT'INSERT INTOsettlementWindowStateChange(settlementWindowId, settlementWindowStateId, reason, createdDate)VALUES ({w.settlementWindowId}, 'PENDING_SETTLEMENT',{payload.reason}, {transactionTimestamp})25Return insertedsettlementWindowStateChangeId26Update pointers to current state change idsUPDATEsettlementWindowSET currentStateChangeId = {settlementWindowStateChangeId}WHERE settlementWindowId = {w.settlementWindowId}27Insert initial state for settlement 'PENDING_SETTLEMENT'INSERT INTOsettlementStateChange(settlementId, settlementStateId, reason, createdDate)VALUES ({settlementId}, ‘PENDING_SETTLEMENT’,{payload.reason}, {transactionTimestamp})28ReturnsettlementStateChangeId29Update pointer to current state change idUPDATEsettlementSET currentStateChangeId = {settlementStateChangeId}WHERE settlementId = {settlementId}30Retrieve all contentsettlementWindowContentsettlementWindowContentStateChangeledgerAccountTypecurrencysettlementWindowsettlementWindowStateChange31ReturnsettlementWindowContentReport32Use previous result to produce settlementWindowsData (swd) array33Select account data for responseSELECT pc.participantId, spc.participantCurrencyId, spc.netAmount, pc.currencyIdFROMsettlementParticipantCurrencyspcJOINparticipantCurrencypcON pc.participantCurrencyId = spc.participantCurrencyIdWHERE spc.settlementId = {settlementId}34ReturnaccountData35Construct and return result{"id": settlementId,"state": "PENDING_SETTLEMENT","settlementWindows": [{"id": swd[m].id,"state": swd[m].state,"reason": swd[m].reason,"createdDate": swd[m].createdDate,"changedDate": swd[m].changedDate,"content": [{"id": swd[m].content[n].settlementWindowContentId,"state": swd[m].content[n].settlementWindowStateId,"ledgerAccountType": swd[m].content[n].ledgerAccountType,"currencyId": swd[m].content[n].currencyId,"createdDate": swd[m].content[n].createdDate,"changedDate": swd[m].content[n].changedDate}]}],"participants": [{"id": accountData.participantId,"accounts": [{"id": accountData.participantCurrencyId,"state": "PENDING_SETTLEMENT","reason": payload.reason,"netSettlementAmount": {"amount": accountData.netAmount,"currency": accountData.currencyId}}]}]}36Respond HTTP - 201 (Created) \ No newline at end of file diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg deleted file mode 100644 index 9669d1599..000000000 --- a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-settlement-6.2.5.svg +++ /dev/null @@ -1,565 +0,0 @@ -6.2.5. Acknowledgement of Settlement Transfer (updateSettlementById)Central HUBSettlement ServiceCentral ServicesHub EmployeeHub EmployeeSettlement Service APISettlement Service APISettlement DAOSettlement DAOCentral StoreCentral StoreAcknowledgement of Settlement Transfer{"participants": [{"id": 1"accounts" : [{ "id": 1, "state": "PENDING_SETTLEMENT", "reason": <string> },{ "id": 2, "state": "PS_TRANSFERS_RECORDED", "reason": <string>, "externalReference": <string> },{ "id": 3, "state": "PS_TRANSFERS_RESERVED", "reason": <string> },{ "id": 4, "state": "PS_TRANSFERS_COMMITTED", "reason": <string>, "externalReference": <string> },{ "id": 5, "state": "SETTLED", "reason": <string> }]},{"id": 2"accounts" : [{ "id": 6, "state": "SETTLED", "reason": <string> }]}]}1PUT - /settlement/{id}2updateSettlementById routineError code:2001DB TRANSACTION3Retrieve settlement informationSELECT s.settlementId, ssc.settlementStateId,ssc.reason, ssc.createdDate, sm.autoPositionResetFROMsettlementsJOINsettlementStateChangesscON ssc.settlementStateChangeId = s.currentStateChangeIdJOINsettlementModelsmON sm.settlementModelId = s.settlementModelIdWHERE s.settlementId = {id}FOR UPDATE4ReturnsettlementData5Retrive settlement accounts informationSELECT pc.participantId, spc.participantCurrencyId,spcsc.settlementStateId, spcsc.reason,spcsc.createdDate, spc.netAmount, pc.currencyId,spc.settlementParticipantCurrencyId ASkeyFROMsettlementParticipantCurrencyspcJOINsettlementParticipantCurrencyStateChangespcscON spcsc.settlementParticipantCurrencyStateChangeId =spc.currentStateChangeIdJOINparticipantCurrencypcON pc.participantCurrencyId = spc.participantCurrencyIdWHERE spc.settlementId = {id}FOR UPDATE6ReturnsettlementAccountsListAll objects below are for the purpose of the syncronous request.If at some point, Node process memory limit is reached, we may decide to:A. Limit the amount of transfers per window and windows per settlement orB. Move to asyncronous processing where we don't need these objectsAvailable raw datasets from DB:settlementDatacontains information about settlement and its current state/reasonsettlementAccountsListholds information about all accounts and their current state/reasonLocal variables and objects:settlementAccounts: { // (derived fromsettlementAccountsList)pendingSettlementCount: <integer>, // count of accounts in PENDING_SETTLEMENT statepsTransfersRecordedCount: <integer>, // count of accounts in PS_TRANSFERS_RECORDED statepsTransfersReservedCount: <integer>, // count of accounts in PS_TRANSFERS_RESERVED statepsTransfersCommittedCount: <integer>, // count of accounts in PS_TRANSFERS_COMMITTED statesettledCount: <integer>, // count of accounts in SETTLED stateabortedCount: <integer> // count of accounts in ABORTED stateunknownCount: <integer>,settledIdList: <array>,changedIdList: <array>}settlementAccountsInitcopy of previous object to be preserved for comparission at the endallAccounts: { // same as previous but accessed by account id (derived fromsettlementAccountsList)participantCurrencyId_key: { // number used to access the object in map-like styleid: participantCurrencyId,state: settlementStateId,reason: reason,createdDate: createdDate,netSettlementAmount: {amount: netAmount,currency: currencyId},participantId: participantId, // could be used to reconstruct allParticipantskey:key// will be used to insert new state for settlementParticipantCurrency}}lettransactionTimestamp= now()7Declare and initialize variableslet settlementAccounts = {pendingSettlementCount: 0,psTransfersRecordedCount: 0,psTransfersReservedCount: 0,psTransfersCommittedCount: 0,settledCount: 0,abortedCount: 0,unknownCount: 0}let allAccounts = {} // declare maplet pid // participantIdlet aid // accountId (participantCurrencyId)let stateloop[settlementAccountsList as account]8PopulateallAccountspid = account.participantIdaid = account.participantCurrencyIdstate = account.settlementStateIdallAccounts[aid] = {id: aid,state,reason: account.reason,createDate: account.createdDate,netSettlementAmount: {amount: account.netAmount,currency: account.currencyId},participantId: pid,key: account.key}9PopulatesettlementAccountsalt[state == 'PENDING_SETTLEMENT']settlementAccounts.pendingSettlementCount++[state == 'PS_TRANSFERS_RECORDED']settlementAccounts.psTransfersRecordedCount++[state == 'PS_TRANSFERS_RESERVED']settlementAccounts.psTransfersReservedCount++[state == 'PS_TRANSFERS_COMMITTED']settlementAccounts.psTransfersCommittedCount++[state == 'SETTLED']settlementAccounts.settledCount++[state == 'ABORTED']settlementAccounts.abortedCount++[default]settlementAccounts.unknownCount++10Make a copy of settlementAccounts intosettlementAccountsInitsettlementAccountsInit = Object.assign({}, settlementAccounts)Available objects after the setup:settlementAccountsis used for tracing settlement state and state transition allowanceallAccountsis helper object, same as previous, providing direct access to account by idNow we are ready to process thepayload:participants= [] // part of the response object that lists the affected participants and respective accountssettlementParticipantCurrencyStateChange= [] // array to collect inserts to the tablesettlementParticipantCurrencySettledList= [] // array to collect settled accountsprocessedAccounts= [] // array to log processed accounts and restrict subsequent processingloop[let participant IN payload.participants]11Loop payload for eachparticipantPayloadlet participantPayload = payload.participants[participant]participants.push({id: participantPayload.id, accounts: []})let pi = participants.length - 1participant = participants[pi]loop[let account IN participantPayload.accounts]12Loop payload for eachaccountPayloadlet accountPayload = participantPayload.accounts[account]alt[allAccounts[accountPayload.id] == undefined]13If the account doesn't match the settlementparticipant.accounts.push({id: accountPayload.id,errorInformation: {errorCode: 3000,errorDescription: 'Account not found'}})[participantPayload.id != allAccounts[accountPayload.id].participantId]14If the account doesn't match the participantparticipant.accounts.push({id: accountPayload.id,errorInformation: {errorCode: 3000,errorDescription: 'Participant and account mismatch'}})[processedAccounts.indexOf(accountPayload.id) > -1]15If the account has been previosly processed (duplicated in the payload)participant.accounts.push({id: accountPayload.id,state: allAccounts[accountPayload.id].state,reason: allAccounts[accountPayload.id].reason,createdDate: allAccounts[accountPayload.id].createdDate,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmounterrorInformation: {errorCode: 3000,errorDescription: 'Account already processed once'}})[allAccounts[account.id].state == accountPayload.state // allowed]16Same-state reason amendment is always allowedprocessedAccounts.push(accountPayload.id)participant.accounts.push({id: accountPayload.id,state: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,createdDate: transactionTimestamp,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmount})settlementParticipantCurrencyStateChange.push({settlementParticipantCurrencyId: allAccounts[accountPayload.id].key,settlementStateId: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference})allAccounts[accountPayload.id].reason = accountPayload.reasonallAccounts[accountPayload.id].createdDate = currentTimestamp[settlementData.state == 'PENDING_SETTLEMENT' && accountPayload.state == 'PS_TRANSFERS_RECORDED'][settlementData.state == 'PS_TRANSFERS_RECORDED' && accountPayload.state == 'PS_TRANSFERS_RESERVED'][settlementData.state == 'PS_TRANSFERS_RESERVED' && accountPayload.state == 'PS_TRANSFERS_COMMITTED'][settlementData.state == 'PS_TRANSFERS_COMMITTED' || settlementData.state == 'SETTLING' && accountPayload.state == 'SETTLED']Note: Since we previously checked same-state, here we don't need to matchallAccounts[account.id].state == settlementData.state.17Settlement acknowledgementprocessedAccounts.push(accountPayload.id)participant.accounts.push({id: accountPayload.id,state: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,createdDate: transactionTimestamp,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmount})settlementParticipantCurrencyStateChange.push({settlementParticipantCurrencyId: allAccounts[accountPayload.id].key,settlementStateId: accountPayload.state,reason: accountPayload.reason,externalReference: accountPayload.externalReference,settlementTransferId: Uuid() -- only for PS_TRANSFERS_RECORDED})if (accountPayload.state == 'PS_TRANSFERS_RECORDED') {settlementAccounts.pendingSettlementCount--settlementAccounts.psTransfersRecordedCount++} else if (accountPayload.state == 'PS_TRANSFERS_RESERVED') {settlementAccounts.psTransfersRecordedCount--settlementAccounts.psTransfersReservedCount++} else if (accountPayload.state == 'PS_TRANSFERS_COMMITTED') {settlementAccounts.psTransfersReservedCount--settlementAccounts.psTransfersCommittedCount++} else if (accountPayload.state == 'SETTLED') {settlementParticipantCurrencySettledIdList.push(allAccounts[accountPayload.id].key)settlementAccounts.psTransfersCommittedCount--settlementAccounts.settledCount++settlementAccounts.settledIdList.push(accountPayload.id)}settlementAccounts.changedIdList.push(accountPayload.id)allAccounts[accountPayload.id].state = accountPayload.stateallAccounts[accountPayload.id].reason = accountPayload.reasonallAccounts[accountPayload.id].externalReference = accountPayload.externalReferenceallAccounts[accountPayload.id].createdDate = currentTimestamp18All other state transitions are not permittedparticipant.accounts.push({id: accountPayload.id,state: allAccounts[accountPayload.id].state,reason: allAccounts[accountPayload.id].reason,createdDate: allAccounts[accountPayload.id].createdDate,netSettlementAmount: allAccounts[accountPayload.id].netSettlementAmounterrorInformation: {errorCode: <integer>,errorDescription: 'State change not allowed'}})Bulk insert settlementParticipantCurrencyStateChange19Insert settlementParticipantCurrencyStateChangesettlementParticipantCurrencyStateChange20ReturnsettlementParticipantCurrencyStateChangeIdList21Merge settlementParticipantCurrencyStateChangeIdListtosettlementParticipantCurrencyIdListin order toissue the following update in one knex command22Update pointers to current state change idsUPDATEsettlementParticipantCurrencySET currentStateChangeId ={settlementParticipantCurrencyStateChangeIdList},settlementTransferId =settlementParticipantCurrencyStateChange.settlementTransferId-- only for PENDING_SETTLEMENT to PS_TRANSFERS_RECORDEDWHERE settlementParticipantCurrencyId ={settlementParticipantCurrencyStateChange.settlementParticipantCurrencyIdList}opt[autoPositionReset == true]alt[settlementData.state == 'PENDING_SETTLEMENT']refSettlement Transfer PrepareInputs: settlementId, transactionTimestamp, enums, trx[settlementData.state == 'PS_TRANSFERS_RECORDED']refSettlement Transfer ReserveInputs: settlementId, transactionTimestamp, enums, trx[settlementData.state == 'PS_TRANSFERS_RESERVED']refSettlement Transfer CommitInputs: settlementId, transactionTimestamp, enums, trxUpdate aggregations, contents & windowsopt[settlementParticipantCurrencySettledIdList.length > 0]23Change settlementWindowState where applicablesettlementContentAggregationtransferParticipantStateChangetransferParticipantsettlementWindowContentStateChangesettlementWindowContentsettlementWindowStateChangesettlementWindow24Retrieve all affected content (incl. when settled)settlementContentAggregationsettlementWindowContentsettlementWindowContentStateChangeledgerAccountTypesettlementWindowsettlementWindowStateChange25ReturnaffectedWindowsReport26Use previous result to produce settlementWindowsData (swd) arrayPrepare and insert settlementStateChangelet settlementStateChanged = truealt[settlementData.state == 'PENDING_SETTLEMENT'&& settlementAccounts.pendingSettlementCount == 0]settlementData.state = 'PS_TRANSFERS_RECORDED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_RECORDED'[settlementData.state == 'PS_TRANSFERS_RECORDED'&& settlementAccounts.psTransfersRecordedCount == 0]settlementData.state = 'PS_TRANSFERS_RESERVED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_RESERVED'[settlementData.state == 'PS_TRANSFERS_RESERVED'&& settlementAccounts.psTransfersReservedCount == 0]settlementData.state = 'PS_TRANSFERS_COMMITTED'settlementData.reason = 'All settlement accounts are PS_TRANSFERS_COMMITTED'[settlementData.state == 'PS_TRANSFERS_COMMITTED'&& settlementAccounts.psTransfersCommittedCount > 0&& settlementAccounts.settledCount > 0]settlementData.state = 'SETTLING'settlementData.reason = 'Some settlement accounts are SETTLED'[(settlementData.state == 'PS_TRANSFERS_COMMITTED' || settlementData.state == 'SETTLING')&& settlementAccounts.psTransfersCommittedCount == 0]settlementData.state = 'SETTLED'settlementData.reason = 'All settlement accounts are SETTLED'settlementStateChanged = falseopt[settlementStateChanged == true]settlementData.createdDate = currentTimestampsettlementStateChange.push(settlementData)27Insert settlementStateChangesettlementStateChange28ReturnsettlementStateChangeId29Update pointer to current state change idUPDATEsettlement.currentStateChangeId30Return transaction result{"id": {id},"state": settlementData.state,"createdDate": settlementData.createdDate,"settlementWindows": [{"id": swd[m].id,"state": swd[m].state,"reason": swd[m].reason,"createdDate": swd[m].createdDate,"changedDate": swd[m].changedDate,"content": [{"id": swd[m].content[n].settlementWindowContentId,"state": swd[m].content[n].settlementWindowStateId,"ledgerAccountType": swd[m].content[n].ledgerAccountType,"currencyId": swd[m].content[n].currencyId,"createdDate": swd[m].content[n].createdDate,"changedDate": swd[m].content[n].changedDate}]}],"participants": [{"id": <integer>,"accounts": [{"id": <integer>,"state": "<string>,"reason": <string>,"externalReference": <string>,"createdDate": <date>,"netSettlementAmount": {"amount": <decimal>,"currency": <enum>}},{"id": <integer>,"state": <string>,"reason": <string>,"createdDate": <date>,"netSettlementAmount": {"amount": <decimal>,"currency": <enum>},"errorInformation": {"errorCode": <integer>,"errorDescription": <string>}}]}]}31Return response \ No newline at end of file diff --git a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg b/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg deleted file mode 100644 index ef6ad181d..000000000 --- a/mojaloop-technical-overview/central-settlements/settlement-process/assets/diagrams/sequence/seq-setwindow-6.1.2.svg +++ /dev/null @@ -1,349 +0,0 @@ -6.1.2. Close Settlement Window (closeSettlementWindow)Central HUBSettlement ServiceCentral ServicesHub EmployeeHub EmployeeSettlement Service APISettlement Service APItopic-settlement-windowtopic-settlement-windowSettlement WindowHandlerSettlement WindowHandlertopic-eventtopic-eventSettlement DAOSettlement DAOCentral StoreCentral StoreClose Settlement Window{"state": "CLOSED","reason": <string>}1POST - /settlementWindows/{id}2Validate payload, existing window,state, assigned transfers, etc.break{"errorInformation": {"errorCode": <integer>,"errorDescription": "FSPIOP Error Description"}}3Respond HTTP - 400 (Bad Request)4Get requested settlementWindow and stateError code:20015Get settlementWindow stateSELECT sw.settlementWindowId, swsc.settlementWindowStateId,swsc.reason, sw.createdDate, swsc.createdDate changedDateFROMsettlementWindowAS swJOINsettlementWindowStateChangeAS swscON swsc.settlementWindowStateChangeId = sw.currentStateChangeIdWHERE sw.settlementWindowId = {id}6Return resultalt[settlementWindow found && settlementWindowStateId == 'OPEN']Process settlement window7Terminate current window and open a new oneError code:2001DB TRANSACTION: Terminate window usage and initate nextlettransactionTimestamp= now()8Terminate requested windowINSERT INTOsettlementWindowStateChange(settlementWindowId, settlementWindowStateId, reason, createdDate)VALUES ({id}, 'PROCESSING', {payload.reason}, {transactionTimestamp})9ReturnsettlementWindowStateChangeId10Update pointer to current state change idUPDATEsettlementWindowSET currentStateChangeId = {settlementWindowStateChangeId}WHERE settlementWindowId = {id}11Create new settlementWindowINSERT INTOsettlementWindow(reason, createdDate)VALUES ({payload.reason}, {transactionTimestamp})12ReturnsettlementWindowId13Insert intial state for the created windowINSERT INTOsettlementWindowStateChange(settlementWindowId, settlementWindowStateId, reason, createdDate)VALUES ({settlementWindowId}, 'OPEN', {payload.reason}, {transactionTimestamp})14ReturnnewSettlementWindowStateChangeId15Update pointer to current state change idUPDATEsettlementWindowSET currentStateChangeId = {newSettlementWindowStateChangeId}WHERE settlementWindowId = {settlementWindowId}16Return successMessage:{id: <uuid>from: switch,to: switch,type: application/jsoncontent: {payload: {settlementWindowId: {id}}},metadata: {event: {id: <uuid>,responseTo: null,type: setwin,action: close,createdAt: <timestamp>,state: {status: "success",code: 0}}}}17Produce Settlement Windowevent messageError codes:2003{"id": settlementWindowId,"state": 'OPEN',"reason": payload.reason,"createdDate": transactionTimestamp,"changedDate": transactionTimestamp}18Respond HTTP - 201 (Created)Close settlement window (SettlementWindowHandler)19Consume Settlement Windowevent messagePersist Event Information20Publish event informationrefEvent Handler Consumeletid= message.content.payload.settlementWindowIdletwindowContentReady= falseletiter= 0loop[iter < Config.WIN_AGGREGATION_RETRY_COUNT && !windowContentReady]iter++21Check if all transferParticipant recordsfor the requested window have been set(currentStateChangeId is NOT NULL).Error code:200122Use EXISTS query to find NULL currentStateChangeId recordstransferFulfilmenttransferParticipant23Return result (success / failure)opt[transferParticipant records have been processed by central-ledger SettlementModelHandler]24Generate window content and aggregationsError code:2001DB TRANSACTION: Generate window content and aggregationslettransactionTimestamp= now()25Change all applicable entries to CLOSED statetransferParticipantStateChangetransferParticipant26Determine window content and insertINSERT INTOsettlementWindowContent(settlementWindowId, ledgerAccountTypeId,currencyId, createdDate)SELECT DISTINCT {id} settlementWindowId, pc.ledgerAccountTypeId,pc.currencyId, transactionTimestampFROMtransferFulfilmenttfJOINtransferParticipanttpON tp.transferId = tf.transferIdJOINparticipantCurrencypcON pc.participantCurrencyId = tp.participantCurrencyIdWHERE tf.settlementWindowId = {id}27Aggregate window data and insertINSERT INTOsettlementContentAggregation(settlementWindowContentId, participantCurrencyId,transferParticipantRoleTypeId, ledgerEntryTypeId, currentStateId, createdDate, amount)SELECT swc.settlementWindowContentId, pc.participantCurrencyId, tp.transferParticipantRoleTypeId,tp.ledgerEntryTypeId, 'CLOSED', transactionTimestamp, SUM(tp.amount)FROMtransferFulfilmenttfJOINtransferParticipanttpON tf.transferId = tp.transferIdJOINparticipantCurrencypcON pc.participantCurrencyId = tp.participantCurrencyIdJOINsettlementWindowContentswcON swc.settlementWindowId = tf.settlementWindowIdAND swc.ledgerAccountTypeId = pc.ledgerAccountTypeIdAND swc.currencyId = pc.currencyIdWHERE ttf.settlementWindowId = {id}GROUP BY swc.settlementWindowContentId, pc.participantCurrencyId,tp.transferParticipantRoleTypeId, tp.ledgerEntryTypeId28Insert initial window content state changeINSERT INTOsettlementWindowContentStateChange(settlementWindowContentId, settlementWindowStateId)SELECT swc.settlementWindowContentId, 'CLOSED'FROMsettlementWindowContentswcWHERE swc.settlementWindowId = {id}29Update pointers to current state change idssettlementWindowContent30Return result (success / failure)alt[success]windowContentReady = true31Close requested windowError code:200132Change window state to 'CLOSED'settlementWindowStateChangesettlementWindow.currentStateChangeId[failure && iter < Config.WIN_AGGREGATION_RETRY_COUNT]sleepConfig.WIN_AGGREGATION_RETRY_INTERVAL seconds[failure]33Fail requested windowError code:200134Change window state to 'FAILED'settlementWindowStateChangesettlementWindow.currentStateChangeId35Log ERROR event36Log ERROR event{"errorInformation": {"errorCode": <integer>,"errorDescription": "Client error description"}}37Respond HTTP - 4xx (Client error) \ No newline at end of file