@hyperscale0/hsx 1.0.0 → 1.0.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/CHANGELOG.md +5 -256
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +44 -44
  5. package/bin/hsx.ts +0 -7
  6. package/dist/bin/hsx.d.ts +0 -4
  7. package/dist/bin/hsx.d.ts.map +1 -1
  8. package/dist/bin/hsx.js +0 -6
  9. package/dist/bin/hsx.js.map +1 -1
  10. package/dist/src/ast.d.ts +113 -308
  11. package/dist/src/ast.d.ts.map +1 -1
  12. package/dist/src/ast.js +7 -71
  13. package/dist/src/ast.js.map +1 -1
  14. package/dist/src/attachment-economics.d.ts +5 -0
  15. package/dist/src/attachment-economics.d.ts.map +1 -0
  16. package/dist/src/attachment-economics.js +55 -0
  17. package/dist/src/attachment-economics.js.map +1 -0
  18. package/dist/src/binding-contract.d.ts +22 -0
  19. package/dist/src/binding-contract.d.ts.map +1 -0
  20. package/dist/src/binding-contract.js +74 -0
  21. package/dist/src/binding-contract.js.map +1 -0
  22. package/dist/src/cli.d.ts +4 -19
  23. package/dist/src/cli.d.ts.map +1 -1
  24. package/dist/src/cli.js +89 -276
  25. package/dist/src/cli.js.map +1 -1
  26. package/dist/src/compile.d.ts +34 -66
  27. package/dist/src/compile.d.ts.map +1 -1
  28. package/dist/src/compile.js +2949 -117
  29. package/dist/src/compile.js.map +1 -1
  30. package/dist/src/cost.d.ts +8 -75
  31. package/dist/src/cost.d.ts.map +1 -1
  32. package/dist/src/cost.js +54 -364
  33. package/dist/src/cost.js.map +1 -1
  34. package/dist/src/diagnostics.d.ts +14 -9
  35. package/dist/src/diagnostics.d.ts.map +1 -1
  36. package/dist/src/diagnostics.js +39 -416
  37. package/dist/src/diagnostics.js.map +1 -1
  38. package/dist/src/examples-bundle.d.ts +3 -0
  39. package/dist/src/examples-bundle.d.ts.map +1 -0
  40. package/dist/src/examples-bundle.js +18 -0
  41. package/dist/src/examples-bundle.js.map +1 -0
  42. package/dist/src/examples.d.ts +10 -0
  43. package/dist/src/examples.d.ts.map +1 -0
  44. package/dist/src/examples.js +2 -0
  45. package/dist/src/examples.js.map +1 -0
  46. package/dist/src/format.d.ts +8 -7
  47. package/dist/src/format.d.ts.map +1 -1
  48. package/dist/src/format.js +9 -175
  49. package/dist/src/format.js.map +1 -1
  50. package/dist/src/header-source.d.ts +3 -0
  51. package/dist/src/header-source.d.ts.map +1 -0
  52. package/dist/src/header-source.js +41 -0
  53. package/dist/src/header-source.js.map +1 -0
  54. package/dist/src/headers.d.ts +64 -0
  55. package/dist/src/headers.d.ts.map +1 -0
  56. package/dist/src/headers.js +167 -0
  57. package/dist/src/headers.js.map +1 -0
  58. package/dist/src/index.d.ts +7 -11
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +4 -9
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/keywords.d.ts +56 -0
  63. package/dist/src/keywords.d.ts.map +1 -0
  64. package/dist/src/keywords.js +133 -0
  65. package/dist/src/keywords.js.map +1 -0
  66. package/dist/src/language.d.ts +26 -0
  67. package/dist/src/language.d.ts.map +1 -0
  68. package/dist/src/language.js +440 -0
  69. package/dist/src/language.js.map +1 -0
  70. package/dist/src/lex.d.ts +13 -28
  71. package/dist/src/lex.d.ts.map +1 -1
  72. package/dist/src/lex.js +119 -145
  73. package/dist/src/lex.js.map +1 -1
  74. package/dist/src/parse.d.ts +4 -17
  75. package/dist/src/parse.d.ts.map +1 -1
  76. package/dist/src/parse.js +484 -1036
  77. package/dist/src/parse.js.map +1 -1
  78. package/dist/src/std-bundle.d.ts.map +1 -1
  79. package/dist/src/std-bundle.js +11 -84
  80. package/dist/src/std-bundle.js.map +1 -1
  81. package/dist/src/std-library.d.ts +1 -1
  82. package/dist/src/std-library.d.ts.map +1 -1
  83. package/dist/src/std-library.js +1 -5
  84. package/dist/src/std-library.js.map +1 -1
  85. package/dist/src/tunables.d.ts +7 -0
  86. package/dist/src/tunables.d.ts.map +1 -0
  87. package/dist/src/tunables.js +27 -0
  88. package/dist/src/tunables.js.map +1 -0
  89. package/docs/README.md +528 -26
  90. package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
  91. package/docs/assets/brand/hsx-horizontal.svg +1 -0
  92. package/docs/assets/brand/hsx-stacked-white.svg +1 -0
  93. package/docs/assets/brand/hsx-stacked.svg +1 -0
  94. package/docs/assets/brand/manifest.json +30 -0
  95. package/docs/assets/hsx.svg +11 -0
  96. package/examples/cards.hsx +34 -0
  97. package/examples/collections.hsx +37 -0
  98. package/examples/cost-table.json +633 -385
  99. package/examples/escrow.hsx +24 -0
  100. package/examples/financing.hsx +32 -0
  101. package/examples/insurance.hsx +30 -0
  102. package/examples/lending.hsx +57 -0
  103. package/examples/library.hsx +15 -0
  104. package/examples/marketplace.hsx +32 -0
  105. package/examples/money.hsx +19 -0
  106. package/examples/rental-deposit.hsx +60 -0
  107. package/examples/repair-approval.hsx +44 -0
  108. package/examples/reporting.hsx +28 -0
  109. package/examples/savings.hsx +21 -0
  110. package/examples/serviced.hsx +25 -0
  111. package/examples/wallet.hsx +24 -0
  112. package/package.json +25 -23
  113. package/src/ast.ts +83 -440
  114. package/src/attachment-economics.ts +103 -0
  115. package/src/binding-contract.ts +104 -0
  116. package/src/cli.ts +95 -325
  117. package/src/compile.ts +4063 -209
  118. package/src/cost.ts +71 -574
  119. package/src/diagnostics.ts +57 -437
  120. package/src/examples-bundle.ts +19 -0
  121. package/src/examples.ts +9 -0
  122. package/src/format.ts +12 -256
  123. package/src/header-source.ts +54 -0
  124. package/src/headers.ts +195 -0
  125. package/src/index.ts +18 -33
  126. package/src/keywords.ts +134 -0
  127. package/src/language.ts +629 -0
  128. package/src/lex.ts +131 -192
  129. package/src/parse.ts +489 -1195
  130. package/src/std-bundle.ts +12 -88
  131. package/src/std-library.ts +2 -7
  132. package/src/tunables.ts +36 -0
  133. package/std/cards.hsx +85 -0
  134. package/std/collections.hsx +90 -0
  135. package/std/escrow.hsx +73 -0
  136. package/std/financing.hsx +683 -0
  137. package/std/insurance.hsx +89 -0
  138. package/std/lending.hsx +138 -0
  139. package/std/marketplace.hsx +123 -0
  140. package/std/money.hsx +173 -0
  141. package/std/reporting.hsx +753 -0
  142. package/std/savings.hsx +68 -0
  143. package/std/wallet.hsx +57 -0
  144. package/LICENSE +0 -661
  145. package/LICENSING.md +0 -52
  146. package/TRADEMARKS.md +0 -35
  147. package/dist/src/emit.d.ts +0 -34
  148. package/dist/src/emit.d.ts.map +0 -1
  149. package/dist/src/emit.js +0 -137
  150. package/dist/src/emit.js.map +0 -1
  151. package/dist/src/entry-overrides.d.ts +0 -58
  152. package/dist/src/entry-overrides.d.ts.map +0 -1
  153. package/dist/src/entry-overrides.js +0 -284
  154. package/dist/src/entry-overrides.js.map +0 -1
  155. package/dist/src/ir.d.ts +0 -66
  156. package/dist/src/ir.d.ts.map +0 -1
  157. package/dist/src/ir.js +0 -15
  158. package/dist/src/ir.js.map +0 -1
  159. package/dist/src/limits.d.ts +0 -21
  160. package/dist/src/limits.d.ts.map +0 -1
  161. package/dist/src/limits.js +0 -21
  162. package/dist/src/limits.js.map +0 -1
  163. package/dist/src/lsp/server.d.ts +0 -32
  164. package/dist/src/lsp/server.d.ts.map +0 -1
  165. package/dist/src/lsp/server.js +0 -391
  166. package/dist/src/lsp/server.js.map +0 -1
  167. package/dist/src/modules.d.ts +0 -38
  168. package/dist/src/modules.d.ts.map +0 -1
  169. package/dist/src/modules.js +0 -368
  170. package/dist/src/modules.js.map +0 -1
  171. package/dist/src/typecheck.d.ts +0 -8
  172. package/dist/src/typecheck.d.ts.map +0 -1
  173. package/dist/src/typecheck.js +0 -2958
  174. package/dist/src/typecheck.js.map +0 -1
  175. package/dist/src/version.d.ts +0 -5
  176. package/dist/src/version.d.ts.map +0 -1
  177. package/dist/src/version.js +0 -5
  178. package/dist/src/version.js.map +0 -1
  179. package/docs/guide/01-first-program.md +0 -24
  180. package/docs/guide/02-money.md +0 -25
  181. package/docs/guide/03-instruments.md +0 -22
  182. package/docs/guide/04-lifecycles.md +0 -25
  183. package/docs/guide/05-fees-and-splits.md +0 -45
  184. package/docs/guide/06-schedules.md +0 -22
  185. package/docs/guide/07-composition.md +0 -46
  186. package/docs/guide/08-writing-a-module.md +0 -26
  187. package/docs/guide/09-cost.md +0 -24
  188. package/docs/guide/10-diagnostics.md +0 -27
  189. package/docs/llms-full.txt +0 -1739
  190. package/docs/llms.txt +0 -45
  191. package/docs/playground.md +0 -54
  192. package/docs/reference/cli.md +0 -35
  193. package/docs/reference/diagnostics.md +0 -619
  194. package/docs/reference/grammar.md +0 -39
  195. package/docs/reference/std/advance.md +0 -35
  196. package/docs/reference/std/cancellable_booking.md +0 -35
  197. package/docs/reference/std/captured_payment.md +0 -43
  198. package/docs/reference/std/conditional_disbursement.md +0 -33
  199. package/docs/reference/std/credit_facility.md +0 -35
  200. package/docs/reference/std/held_payment.md +0 -64
  201. package/docs/reference/std/instant_transfer.md +0 -30
  202. package/docs/reference/std/metered.md +0 -27
  203. package/docs/reference/std/pooled_split.md +0 -26
  204. package/docs/reference/std/premium_forward.md +0 -39
  205. package/docs/reference/std/reconciled_payout.md +0 -33
  206. package/docs/reference/std/recurring_collection.md +0 -25
  207. package/docs/reference/std/rotating_pool.md +0 -42
  208. package/docs/reference/std/scheduled.md +0 -51
  209. package/docs/reference/std/security_deposit.md +0 -46
  210. package/docs/reference/std/settlement_batch.md +0 -42
  211. package/docs/reference/std/swap.md +0 -46
  212. package/docs/reference/std/threshold_pool.md +0 -47
  213. package/docs/reference/std/weighted_distribution.md +0 -39
  214. package/docs/reference/types.md +0 -20
  215. package/docs/reference/udl-output.md +0 -13
  216. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  217. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  218. package/examples/01-first-program/README.md +0 -45
  219. package/examples/01-first-program/tip-jar.hsx +0 -17
  220. package/examples/02-imports-and-archetypes/README.md +0 -96
  221. package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
  222. package/examples/03-diagnostics/README.md +0 -68
  223. package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
  224. package/examples/03-diagnostics/corner-shop.hsx +0 -19
  225. package/examples/04-complete-product/README.md +0 -84
  226. package/examples/04-complete-product/study-hall.hsx +0 -67
  227. package/examples/05-watch-club/README.md +0 -9
  228. package/examples/05-watch-club/watch-club.hsx +0 -124
  229. package/examples/README.md +0 -18
  230. package/examples/advance/README.md +0 -3
  231. package/examples/advance/advance.hsx +0 -13
  232. package/examples/advance/advance.udl +0 -339
  233. package/examples/cancellable_booking/README.md +0 -3
  234. package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
  235. package/examples/cancellable_booking/cancellable_booking.udl +0 -391
  236. package/examples/captured_payment/README.md +0 -3
  237. package/examples/captured_payment/captured_payment.hsx +0 -21
  238. package/examples/captured_payment/captured_payment.udl +0 -677
  239. package/examples/conditional_disbursement/README.md +0 -3
  240. package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
  241. package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
  242. package/examples/credit_facility/README.md +0 -3
  243. package/examples/credit_facility/credit_facility.hsx +0 -27
  244. package/examples/credit_facility/credit_facility.udl +0 -1373
  245. package/examples/held_payment/README.md +0 -3
  246. package/examples/held_payment/held_payment.hsx +0 -13
  247. package/examples/held_payment/held_payment.udl +0 -507
  248. package/examples/instant_transfer/README.md +0 -3
  249. package/examples/instant_transfer/instant_transfer.hsx +0 -16
  250. package/examples/instant_transfer/instant_transfer.udl +0 -364
  251. package/examples/metered/README.md +0 -3
  252. package/examples/metered/metered.hsx +0 -13
  253. package/examples/metered/metered.udl +0 -247
  254. package/examples/pooled_split/README.md +0 -3
  255. package/examples/pooled_split/pooled_split.hsx +0 -15
  256. package/examples/pooled_split/pooled_split.udl +0 -425
  257. package/examples/premium_forward/README.md +0 -3
  258. package/examples/premium_forward/premium_forward.hsx +0 -19
  259. package/examples/premium_forward/premium_forward.udl +0 -594
  260. package/examples/reconciled_payout/README.md +0 -3
  261. package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
  262. package/examples/reconciled_payout/reconciled_payout.udl +0 -303
  263. package/examples/recurring_collection/README.md +0 -3
  264. package/examples/recurring_collection/recurring_collection.hsx +0 -21
  265. package/examples/recurring_collection/recurring_collection.udl +0 -1130
  266. package/examples/rotating_pool/README.md +0 -3
  267. package/examples/rotating_pool/rotating_pool.hsx +0 -18
  268. package/examples/rotating_pool/rotating_pool.udl +0 -4352
  269. package/examples/scheduled/README.md +0 -3
  270. package/examples/scheduled/scheduled.hsx +0 -12
  271. package/examples/scheduled/scheduled.udl +0 -335
  272. package/examples/security_deposit/README.md +0 -3
  273. package/examples/security_deposit/security_deposit.hsx +0 -21
  274. package/examples/security_deposit/security_deposit.udl +0 -293
  275. package/examples/settlement_batch/README.md +0 -3
  276. package/examples/settlement_batch/settlement_batch.hsx +0 -19
  277. package/examples/settlement_batch/settlement_batch.udl +0 -753
  278. package/examples/swap/README.md +0 -3
  279. package/examples/swap/swap.hsx +0 -19
  280. package/examples/swap/swap.udl +0 -876
  281. package/examples/threshold_pool/README.md +0 -3
  282. package/examples/threshold_pool/threshold_pool.hsx +0 -16
  283. package/examples/threshold_pool/threshold_pool.udl +0 -667
  284. package/examples/weighted_distribution/README.md +0 -3
  285. package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
  286. package/examples/weighted_distribution/weighted_distribution.udl +0 -337
  287. package/skills/hsx/SKILL.md +0 -483
  288. package/src/emit.ts +0 -201
  289. package/src/entry-overrides.ts +0 -428
  290. package/src/ir.ts +0 -99
  291. package/src/limits.ts +0 -20
  292. package/src/lsp/server.ts +0 -460
  293. package/src/modules.ts +0 -446
  294. package/src/typecheck.ts +0 -3876
  295. package/src/version.ts +0 -5
  296. package/std/SEMANTICS.md +0 -130
  297. package/std/settlements/advance.hsx +0 -177
  298. package/std/settlements/cancellable_booking.hsx +0 -87
  299. package/std/settlements/captured_payment.hsx +0 -144
  300. package/std/settlements/conditional_disbursement.hsx +0 -185
  301. package/std/settlements/credit_facility.hsx +0 -167
  302. package/std/settlements/held_payment.hsx +0 -578
  303. package/std/settlements/index.hsx +0 -3
  304. package/std/settlements/instant_transfer.hsx +0 -190
  305. package/std/settlements/metered.hsx +0 -67
  306. package/std/settlements/pooled_split.hsx +0 -68
  307. package/std/settlements/premium_forward.hsx +0 -257
  308. package/std/settlements/reconciled_payout.hsx +0 -77
  309. package/std/settlements/recurring_collection.hsx +0 -27
  310. package/std/settlements/rotating_pool.hsx +0 -252
  311. package/std/settlements/scheduled.hsx +0 -641
  312. package/std/settlements/security_deposit.hsx +0 -166
  313. package/std/settlements/settlement_batch.hsx +0 -122
  314. package/std/settlements/swap.hsx +0 -1114
  315. package/std/settlements/threshold_pool.hsx +0 -221
  316. package/std/settlements/weighted_distribution.hsx +0 -141
@@ -1,4352 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "create",
6
- "cancel",
7
- "activate",
8
- "ready_cycle_1",
9
- "advance_cycle_1",
10
- "ready_cycle_2",
11
- "advance_cycle_2",
12
- "ready_cycle_3",
13
- "advance_cycle_3"
14
- ],
15
- "actions": {
16
- "activate": {
17
- "agentDescription": "Start cycle one. Refused unless every member on the roster has exactly one contribution row waiting at the first cycle, so a pool can never run a member short. No money moves.",
18
- "effects": {
19
- "reads": [
20
- {
21
- "signature": "reads.requires_aggregate",
22
- "source": "requiresAggregate"
23
- }
24
- ]
25
- },
26
- "moves": [],
27
- "publicAction": "activatePool",
28
- "requiresAggregate": [
29
- {
30
- "check": {
31
- "field": "one",
32
- "kind": "count_equals_field"
33
- },
34
- "instrumentId": "pool_member_a_contribution",
35
- "over": "children",
36
- "refField": "poolId",
37
- "statuses": [
38
- "cycle_1_due"
39
- ]
40
- },
41
- {
42
- "check": {
43
- "field": "one",
44
- "kind": "count_equals_field"
45
- },
46
- "instrumentId": "pool_member_b_contribution",
47
- "over": "children",
48
- "refField": "poolId",
49
- "statuses": [
50
- "cycle_1_due"
51
- ]
52
- },
53
- {
54
- "check": {
55
- "field": "one",
56
- "kind": "count_equals_field"
57
- },
58
- "instrumentId": "pool_member_c_contribution",
59
- "over": "children",
60
- "refField": "poolId",
61
- "statuses": [
62
- "cycle_1_due"
63
- ]
64
- }
65
- ],
66
- "steps": [],
67
- "summary": "Activate only after every fixed member row exists once"
68
- },
69
- "advance_cycle_1": {
70
- "agentDescription": "Close cycle 1 once every member row has paid into that cycle pot, moving the pool to the next cycle or to completed on the last one. Refused while any row is unpaid. No money moves here. The money moved on the member rows.",
71
- "effects": {
72
- "reads": [
73
- {
74
- "signature": "reads.requires_aggregate",
75
- "source": "requiresAggregate"
76
- }
77
- ]
78
- },
79
- "moves": [],
80
- "publicAction": "advanceCycle1Pool",
81
- "requiresAggregate": [
82
- {
83
- "check": {
84
- "kind": "all_in"
85
- },
86
- "instrumentId": "pool_member_a_contribution",
87
- "over": "children",
88
- "refField": "poolId",
89
- "statuses": [
90
- "cycle_2_due"
91
- ]
92
- },
93
- {
94
- "check": {
95
- "kind": "all_in"
96
- },
97
- "instrumentId": "pool_member_b_contribution",
98
- "over": "children",
99
- "refField": "poolId",
100
- "statuses": [
101
- "cycle_2_due"
102
- ]
103
- },
104
- {
105
- "check": {
106
- "kind": "all_in"
107
- },
108
- "instrumentId": "pool_member_c_contribution",
109
- "over": "children",
110
- "refField": "poolId",
111
- "statuses": [
112
- "cycle_2_due"
113
- ]
114
- }
115
- ],
116
- "steps": [],
117
- "summary": "Advance after every cycle 1 contribution pays"
118
- },
119
- "advance_cycle_2": {
120
- "agentDescription": "Close cycle 2 once every member row has paid into that cycle pot, moving the pool to the next cycle or to completed on the last one. Refused while any row is unpaid. No money moves here. The money moved on the member rows.",
121
- "effects": {
122
- "reads": [
123
- {
124
- "signature": "reads.requires_aggregate",
125
- "source": "requiresAggregate"
126
- }
127
- ]
128
- },
129
- "moves": [],
130
- "publicAction": "advanceCycle2Pool",
131
- "requiresAggregate": [
132
- {
133
- "check": {
134
- "kind": "all_in"
135
- },
136
- "instrumentId": "pool_member_a_contribution",
137
- "over": "children",
138
- "refField": "poolId",
139
- "statuses": [
140
- "cycle_3_due"
141
- ]
142
- },
143
- {
144
- "check": {
145
- "kind": "all_in"
146
- },
147
- "instrumentId": "pool_member_b_contribution",
148
- "over": "children",
149
- "refField": "poolId",
150
- "statuses": [
151
- "cycle_3_due"
152
- ]
153
- },
154
- {
155
- "check": {
156
- "kind": "all_in"
157
- },
158
- "instrumentId": "pool_member_c_contribution",
159
- "over": "children",
160
- "refField": "poolId",
161
- "statuses": [
162
- "cycle_3_due"
163
- ]
164
- }
165
- ],
166
- "steps": [],
167
- "summary": "Advance after every cycle 2 contribution pays"
168
- },
169
- "advance_cycle_3": {
170
- "agentDescription": "Close cycle 3 once every member row has paid into that cycle pot, moving the pool to the next cycle or to completed on the last one. Refused while any row is unpaid. No money moves here. The money moved on the member rows.",
171
- "effects": {
172
- "reads": [
173
- {
174
- "signature": "reads.requires_aggregate",
175
- "source": "requiresAggregate"
176
- }
177
- ]
178
- },
179
- "moves": [],
180
- "publicAction": "advanceCycle3Pool",
181
- "requiresAggregate": [
182
- {
183
- "check": {
184
- "kind": "all_in"
185
- },
186
- "instrumentId": "pool_member_a_contribution",
187
- "over": "children",
188
- "refField": "poolId",
189
- "statuses": [
190
- "completed"
191
- ]
192
- },
193
- {
194
- "check": {
195
- "kind": "all_in"
196
- },
197
- "instrumentId": "pool_member_b_contribution",
198
- "over": "children",
199
- "refField": "poolId",
200
- "statuses": [
201
- "completed"
202
- ]
203
- },
204
- {
205
- "check": {
206
- "kind": "all_in"
207
- },
208
- "instrumentId": "pool_member_c_contribution",
209
- "over": "children",
210
- "refField": "poolId",
211
- "statuses": [
212
- "completed"
213
- ]
214
- }
215
- ],
216
- "steps": [],
217
- "summary": "Complete after the final shared pot pays"
218
- },
219
- "cancel": {
220
- "agentDescription": "Cancel the pool before it activates. Only a forming pool cancels, no money has moved yet, and there is nothing to refund. Once the pool activates this exit is gone.",
221
- "moves": [],
222
- "publicAction": "cancelPool",
223
- "steps": [],
224
- "summary": "Cancel before activation without moving money"
225
- },
226
- "create": {
227
- "agentDescription": "Create the pool with its frozen roster, cycle count, contribution amount, and payout order. No money moves. Each member's contribution row is created separately, and the pool cannot activate until every row exists.",
228
- "moves": [],
229
- "publicAction": "createPool",
230
- "steps": [],
231
- "summary": "Create the fixed roster before activation"
232
- },
233
- "ready_cycle_1": {
234
- "agentDescription": "Lock cycle 1 once every member row is funded or covered by the guarantor. Refused while any row is still due or defaulted. No money moves here. Locking the cycle is what lets its payouts run.",
235
- "effects": {
236
- "reads": [
237
- {
238
- "signature": "reads.requires_aggregate",
239
- "source": "requiresAggregate"
240
- }
241
- ]
242
- },
243
- "moves": [],
244
- "publicAction": "readyCycle1Pool",
245
- "requiresAggregate": [
246
- {
247
- "check": {
248
- "kind": "all_in"
249
- },
250
- "instrumentId": "pool_member_a_contribution",
251
- "over": "children",
252
- "refField": "poolId",
253
- "statuses": [
254
- "cycle_1_funded",
255
- "cycle_1_guaranteed"
256
- ]
257
- },
258
- {
259
- "check": {
260
- "kind": "all_in"
261
- },
262
- "instrumentId": "pool_member_b_contribution",
263
- "over": "children",
264
- "refField": "poolId",
265
- "statuses": [
266
- "cycle_1_funded",
267
- "cycle_1_guaranteed"
268
- ]
269
- },
270
- {
271
- "check": {
272
- "kind": "all_in"
273
- },
274
- "instrumentId": "pool_member_c_contribution",
275
- "over": "children",
276
- "refField": "poolId",
277
- "statuses": [
278
- "cycle_1_funded",
279
- "cycle_1_guaranteed"
280
- ]
281
- }
282
- ],
283
- "steps": [],
284
- "summary": "Lock cycle 1 only after every member row is funded or guaranteed"
285
- },
286
- "ready_cycle_2": {
287
- "agentDescription": "Lock cycle 2 once every member row is funded or covered by the guarantor. Refused while any row is still due or defaulted. No money moves here. Locking the cycle is what lets its payouts run.",
288
- "effects": {
289
- "reads": [
290
- {
291
- "signature": "reads.requires_aggregate",
292
- "source": "requiresAggregate"
293
- }
294
- ]
295
- },
296
- "moves": [],
297
- "publicAction": "readyCycle2Pool",
298
- "requiresAggregate": [
299
- {
300
- "check": {
301
- "kind": "all_in"
302
- },
303
- "instrumentId": "pool_member_a_contribution",
304
- "over": "children",
305
- "refField": "poolId",
306
- "statuses": [
307
- "cycle_2_funded",
308
- "cycle_2_guaranteed"
309
- ]
310
- },
311
- {
312
- "check": {
313
- "kind": "all_in"
314
- },
315
- "instrumentId": "pool_member_b_contribution",
316
- "over": "children",
317
- "refField": "poolId",
318
- "statuses": [
319
- "cycle_2_funded",
320
- "cycle_2_guaranteed"
321
- ]
322
- },
323
- {
324
- "check": {
325
- "kind": "all_in"
326
- },
327
- "instrumentId": "pool_member_c_contribution",
328
- "over": "children",
329
- "refField": "poolId",
330
- "statuses": [
331
- "cycle_2_funded",
332
- "cycle_2_guaranteed"
333
- ]
334
- }
335
- ],
336
- "steps": [],
337
- "summary": "Lock cycle 2 only after every member row is funded or guaranteed"
338
- },
339
- "ready_cycle_3": {
340
- "agentDescription": "Lock cycle 3 once every member row is funded or covered by the guarantor. Refused while any row is still due or defaulted. No money moves here. Locking the cycle is what lets its payouts run.",
341
- "effects": {
342
- "reads": [
343
- {
344
- "signature": "reads.requires_aggregate",
345
- "source": "requiresAggregate"
346
- }
347
- ]
348
- },
349
- "moves": [],
350
- "publicAction": "readyCycle3Pool",
351
- "requiresAggregate": [
352
- {
353
- "check": {
354
- "kind": "all_in"
355
- },
356
- "instrumentId": "pool_member_a_contribution",
357
- "over": "children",
358
- "refField": "poolId",
359
- "statuses": [
360
- "cycle_3_funded",
361
- "cycle_3_guaranteed"
362
- ]
363
- },
364
- {
365
- "check": {
366
- "kind": "all_in"
367
- },
368
- "instrumentId": "pool_member_b_contribution",
369
- "over": "children",
370
- "refField": "poolId",
371
- "statuses": [
372
- "cycle_3_funded",
373
- "cycle_3_guaranteed"
374
- ]
375
- },
376
- {
377
- "check": {
378
- "kind": "all_in"
379
- },
380
- "instrumentId": "pool_member_c_contribution",
381
- "over": "children",
382
- "refField": "poolId",
383
- "statuses": [
384
- "cycle_3_funded",
385
- "cycle_3_guaranteed"
386
- ]
387
- }
388
- ],
389
- "steps": [],
390
- "summary": "Lock cycle 3 only after every member row is funded or guaranteed"
391
- }
392
- },
393
- "agentDescription": "Reach for rotating pool when a fixed group pays the same contribution every cycle and one member takes the whole pot each cycle, in a declared order. The roster freezes at creation, one contribution row per member, and the pot rotates until every member has been paid. Scheduled is the one payer, one payee shape on a calendar.",
394
- "description": "Fixed rotating contribution and payout order",
395
- "fields": {
396
- "contributionAmount": {
397
- "description": "Exact contribution in SAR minor units",
398
- "pattern": "^[1-9][0-9]{0,17}$",
399
- "type": "string"
400
- },
401
- "currency": {
402
- "description": "ISO 4217 currency code",
403
- "maxLength": 3,
404
- "minLength": 3,
405
- "pattern": "^[A-Z]{3}$",
406
- "type": "string"
407
- },
408
- "firstContributionAt": {
409
- "description": "Stored first contribution due date",
410
- "format": "hyperscale-date-time",
411
- "type": "string"
412
- },
413
- "guarantorAccountId": {
414
- "description": "The guarantor account",
415
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
416
- "type": "string",
417
- "x-hyperscale-reference-filter": {
418
- "column": "role",
419
- "values": [
420
- "customer_balance"
421
- ]
422
- }
423
- },
424
- "memberAAccountId": {
425
- "description": "The member a account",
426
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
427
- "type": "string",
428
- "x-hyperscale-reference-filter": {
429
- "column": "role",
430
- "values": [
431
- "customer_balance"
432
- ]
433
- }
434
- },
435
- "memberBAccountId": {
436
- "description": "The member b account",
437
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
438
- "type": "string",
439
- "x-hyperscale-reference-filter": {
440
- "column": "role",
441
- "values": [
442
- "customer_balance"
443
- ]
444
- }
445
- },
446
- "memberCAccountId": {
447
- "description": "The member c account",
448
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
449
- "type": "string",
450
- "x-hyperscale-reference-filter": {
451
- "column": "role",
452
- "values": [
453
- "customer_balance"
454
- ]
455
- }
456
- },
457
- "one": {
458
- "const": 1,
459
- "description": "Exact fixed member-row count",
460
- "type": "integer"
461
- }
462
- },
463
- "id": "pool",
464
- "idPrefix": "pool",
465
- "lifecycle": {
466
- "initial": "forming",
467
- "states": [
468
- "forming",
469
- "cancelled",
470
- "active_cycle_1",
471
- "cycle_1_ready",
472
- "active_cycle_2",
473
- "cycle_2_ready",
474
- "active_cycle_3",
475
- "cycle_3_ready",
476
- "completed"
477
- ],
478
- "transitions": {
479
- "activate": {
480
- "from": [
481
- "forming"
482
- ],
483
- "to": "active_cycle_1"
484
- },
485
- "advance_cycle_1": {
486
- "from": [
487
- "cycle_1_ready"
488
- ],
489
- "to": "active_cycle_2"
490
- },
491
- "advance_cycle_2": {
492
- "from": [
493
- "cycle_2_ready"
494
- ],
495
- "to": "active_cycle_3"
496
- },
497
- "advance_cycle_3": {
498
- "from": [
499
- "cycle_3_ready"
500
- ],
501
- "to": "completed"
502
- },
503
- "cancel": {
504
- "from": [
505
- "forming"
506
- ],
507
- "to": "cancelled"
508
- },
509
- "ready_cycle_1": {
510
- "from": [
511
- "active_cycle_1"
512
- ],
513
- "to": "cycle_1_ready"
514
- },
515
- "ready_cycle_2": {
516
- "from": [
517
- "active_cycle_2"
518
- ],
519
- "to": "cycle_2_ready"
520
- },
521
- "ready_cycle_3": {
522
- "from": [
523
- "active_cycle_3"
524
- ],
525
- "to": "cycle_3_ready"
526
- }
527
- }
528
- },
529
- "parties": {
530
- "payer": "guarantorAccountId"
531
- },
532
- "required": [
533
- "memberAAccountId",
534
- "memberBAccountId",
535
- "memberCAccountId",
536
- "guarantorAccountId",
537
- "currency",
538
- "contributionAmount",
539
- "firstContributionAt",
540
- "one"
541
- ],
542
- "summary": "3-member rotating pool",
543
- "title": "Pool"
544
- },
545
- {
546
- "actionOrder": [
547
- "create",
548
- "contribute_cycle_1",
549
- "mark_default_cycle_1",
550
- "guarantee_cycle_1",
551
- "pay_cycle_1",
552
- "pay_guaranteed_cycle_1",
553
- "contribute_cycle_2",
554
- "mark_default_cycle_2",
555
- "guarantee_cycle_2",
556
- "pay_cycle_2",
557
- "pay_guaranteed_cycle_2",
558
- "contribute_cycle_3",
559
- "mark_default_cycle_3",
560
- "guarantee_cycle_3",
561
- "pay_cycle_3",
562
- "pay_guaranteed_cycle_3",
563
- "close"
564
- ],
565
- "actions": {
566
- "close": {
567
- "agentDescription": "Retire this member row after its final payout. Refused while the row escrow account still holds anything, so a row can never close over stranded money. No money moves.",
568
- "moves": [],
569
- "publicAction": "closePoolMemberAContribution",
570
- "requiresDrainedAccount": {
571
- "path": "refs.escrowAccountId"
572
- },
573
- "steps": [],
574
- "summary": "Complete after the final payout drains this member custody"
575
- },
576
- "contribute_cycle_1": {
577
- "due": {
578
- "field": "firstContributionAt"
579
- },
580
- "effects": {
581
- "moves": [
582
- {
583
- "signature": "moves.collection.pay_in",
584
- "source": "moves[0]"
585
- }
586
- ],
587
- "reads": [
588
- {
589
- "signature": "reads.requires_refs",
590
- "source": "requiresRefs"
591
- }
592
- ],
593
- "schedules": [
594
- {
595
- "signature": "schedules.due",
596
- "source": "due"
597
- }
598
- ]
599
- },
600
- "moves": [
601
- {
602
- "bind": {
603
- "amount": {
604
- "from": "instance",
605
- "path": "fields.contributionAmount"
606
- },
607
- "currency": {
608
- "from": "instance",
609
- "path": "fields.currency"
610
- },
611
- "destinationAccountId": {
612
- "from": "instance",
613
- "path": "refs.escrowAccountId"
614
- },
615
- "metadata.instrumentId": {
616
- "from": "const",
617
- "value": "pool_member_a_contribution"
618
- },
619
- "metadata.instrumentInstanceId": {
620
- "from": "instance",
621
- "path": "instrumentInstanceId"
622
- },
623
- "metadata.phase": {
624
- "from": "const",
625
- "value": "contribute_cycle_1"
626
- },
627
- "productId": {
628
- "from": "instance",
629
- "path": "productId"
630
- },
631
- "sourceAccountId": {
632
- "from": "instance",
633
- "path": "fields.memberAAccountId"
634
- }
635
- },
636
- "capture": {
637
- "contributeCycle1ContributionTransferId": "transferId"
638
- },
639
- "key": "contribution",
640
- "operation": "internal_transfer.create"
641
- }
642
- ],
643
- "requiresRefs": [
644
- {
645
- "field": "poolId",
646
- "statuses": [
647
- "active_cycle_1"
648
- ]
649
- }
650
- ],
651
- "steps": [],
652
- "summary": "Fund member a's cycle 1 contribution"
653
- },
654
- "contribute_cycle_2": {
655
- "due": {
656
- "field": "firstContributionAt",
657
- "offset": "P30D"
658
- },
659
- "effects": {
660
- "moves": [
661
- {
662
- "signature": "moves.collection.pay_in",
663
- "source": "moves[0]"
664
- }
665
- ],
666
- "reads": [
667
- {
668
- "signature": "reads.requires_refs",
669
- "source": "requiresRefs"
670
- }
671
- ],
672
- "schedules": [
673
- {
674
- "signature": "schedules.due",
675
- "source": "due"
676
- }
677
- ]
678
- },
679
- "moves": [
680
- {
681
- "bind": {
682
- "amount": {
683
- "from": "instance",
684
- "path": "fields.contributionAmount"
685
- },
686
- "currency": {
687
- "from": "instance",
688
- "path": "fields.currency"
689
- },
690
- "destinationAccountId": {
691
- "from": "instance",
692
- "path": "refs.escrowAccountId"
693
- },
694
- "metadata.instrumentId": {
695
- "from": "const",
696
- "value": "pool_member_a_contribution"
697
- },
698
- "metadata.instrumentInstanceId": {
699
- "from": "instance",
700
- "path": "instrumentInstanceId"
701
- },
702
- "metadata.phase": {
703
- "from": "const",
704
- "value": "contribute_cycle_2"
705
- },
706
- "productId": {
707
- "from": "instance",
708
- "path": "productId"
709
- },
710
- "sourceAccountId": {
711
- "from": "instance",
712
- "path": "fields.memberAAccountId"
713
- }
714
- },
715
- "capture": {
716
- "contributeCycle2ContributionTransferId": "transferId"
717
- },
718
- "key": "contribution",
719
- "operation": "internal_transfer.create"
720
- }
721
- ],
722
- "requiresRefs": [
723
- {
724
- "field": "poolId",
725
- "statuses": [
726
- "active_cycle_2"
727
- ]
728
- }
729
- ],
730
- "steps": [],
731
- "summary": "Fund member a's cycle 2 contribution"
732
- },
733
- "contribute_cycle_3": {
734
- "due": {
735
- "field": "firstContributionAt",
736
- "offset": "P60D"
737
- },
738
- "effects": {
739
- "moves": [
740
- {
741
- "signature": "moves.collection.pay_in",
742
- "source": "moves[0]"
743
- }
744
- ],
745
- "reads": [
746
- {
747
- "signature": "reads.requires_refs",
748
- "source": "requiresRefs"
749
- }
750
- ],
751
- "schedules": [
752
- {
753
- "signature": "schedules.due",
754
- "source": "due"
755
- }
756
- ]
757
- },
758
- "moves": [
759
- {
760
- "bind": {
761
- "amount": {
762
- "from": "instance",
763
- "path": "fields.contributionAmount"
764
- },
765
- "currency": {
766
- "from": "instance",
767
- "path": "fields.currency"
768
- },
769
- "destinationAccountId": {
770
- "from": "instance",
771
- "path": "refs.escrowAccountId"
772
- },
773
- "metadata.instrumentId": {
774
- "from": "const",
775
- "value": "pool_member_a_contribution"
776
- },
777
- "metadata.instrumentInstanceId": {
778
- "from": "instance",
779
- "path": "instrumentInstanceId"
780
- },
781
- "metadata.phase": {
782
- "from": "const",
783
- "value": "contribute_cycle_3"
784
- },
785
- "productId": {
786
- "from": "instance",
787
- "path": "productId"
788
- },
789
- "sourceAccountId": {
790
- "from": "instance",
791
- "path": "fields.memberAAccountId"
792
- }
793
- },
794
- "capture": {
795
- "contributeCycle3ContributionTransferId": "transferId"
796
- },
797
- "key": "contribution",
798
- "operation": "internal_transfer.create"
799
- }
800
- ],
801
- "requiresRefs": [
802
- {
803
- "field": "poolId",
804
- "statuses": [
805
- "active_cycle_3"
806
- ]
807
- }
808
- ],
809
- "steps": [],
810
- "summary": "Fund member a's cycle 3 contribution"
811
- },
812
- "create": {
813
- "agentDescription": "Create the contribution row for the member a and provision its escrow account. The pool must still be forming, and every member needs exactly one row before the pool can activate. No money moves.",
814
- "effects": {
815
- "reads": [
816
- {
817
- "signature": "reads.requires_refs",
818
- "source": "requiresRefs"
819
- }
820
- ]
821
- },
822
- "moves": [],
823
- "publicAction": "createPoolMemberAContribution",
824
- "requiresRefs": [
825
- {
826
- "bind": {
827
- "contributionAmount": "fields.contributionAmount",
828
- "currency": "fields.currency",
829
- "firstContributionAt": "fields.firstContributionAt",
830
- "guarantorAccountId": "fields.guarantorAccountId",
831
- "memberAAccountId": "fields.memberAAccountId",
832
- "memberBAccountId": "fields.memberBAccountId",
833
- "memberCAccountId": "fields.memberCAccountId"
834
- },
835
- "field": "poolId",
836
- "statuses": [
837
- "forming"
838
- ],
839
- "unique": true
840
- }
841
- ],
842
- "steps": [
843
- {
844
- "bind": {
845
- "currency": {
846
- "from": "instance",
847
- "path": "fields.currency"
848
- },
849
- "owner.id": {
850
- "from": "instance",
851
- "path": "productId"
852
- },
853
- "owner.type": {
854
- "from": "const",
855
- "value": "product"
856
- },
857
- "productId": {
858
- "from": "instance",
859
- "path": "productId"
860
- },
861
- "role": {
862
- "from": "const",
863
- "value": "product_escrow"
864
- }
865
- },
866
- "capture": {
867
- "escrowAccountId": "accountId"
868
- },
869
- "operation": "account.escrow.provision"
870
- }
871
- ],
872
- "summary": "Create the fixed contribution row for member a"
873
- },
874
- "guarantee_cycle_1": {
875
- "agentDescription": "Have the guarantor fund cycle 1 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
876
- "effects": {
877
- "moves": [
878
- {
879
- "signature": "moves.collection.pay_in",
880
- "source": "moves[0]"
881
- }
882
- ],
883
- "reads": [
884
- {
885
- "signature": "reads.requires_refs",
886
- "source": "requiresRefs"
887
- }
888
- ]
889
- },
890
- "moves": [
891
- {
892
- "bind": {
893
- "amount": {
894
- "from": "instance",
895
- "path": "fields.contributionAmount"
896
- },
897
- "currency": {
898
- "from": "instance",
899
- "path": "fields.currency"
900
- },
901
- "destinationAccountId": {
902
- "from": "instance",
903
- "path": "refs.escrowAccountId"
904
- },
905
- "metadata.instrumentId": {
906
- "from": "const",
907
- "value": "pool_member_a_contribution"
908
- },
909
- "metadata.instrumentInstanceId": {
910
- "from": "instance",
911
- "path": "instrumentInstanceId"
912
- },
913
- "metadata.phase": {
914
- "from": "const",
915
- "value": "guarantee_cycle_1"
916
- },
917
- "productId": {
918
- "from": "instance",
919
- "path": "productId"
920
- },
921
- "sourceAccountId": {
922
- "from": "instance",
923
- "path": "fields.guarantorAccountId"
924
- }
925
- },
926
- "capture": {
927
- "guaranteeCycle1GuaranteeTransferId": "transferId"
928
- },
929
- "key": "guarantee",
930
- "operation": "internal_transfer.create"
931
- }
932
- ],
933
- "publicAction": "guaranteeCycle1PoolMemberAContribution",
934
- "requiresRefs": [
935
- {
936
- "field": "poolId",
937
- "statuses": [
938
- "active_cycle_1"
939
- ]
940
- }
941
- ],
942
- "steps": [],
943
- "summary": "Fund the defaulted cycle 1 amount before payout"
944
- },
945
- "guarantee_cycle_2": {
946
- "agentDescription": "Have the guarantor fund cycle 2 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
947
- "effects": {
948
- "moves": [
949
- {
950
- "signature": "moves.collection.pay_in",
951
- "source": "moves[0]"
952
- }
953
- ],
954
- "reads": [
955
- {
956
- "signature": "reads.requires_refs",
957
- "source": "requiresRefs"
958
- }
959
- ]
960
- },
961
- "moves": [
962
- {
963
- "bind": {
964
- "amount": {
965
- "from": "instance",
966
- "path": "fields.contributionAmount"
967
- },
968
- "currency": {
969
- "from": "instance",
970
- "path": "fields.currency"
971
- },
972
- "destinationAccountId": {
973
- "from": "instance",
974
- "path": "refs.escrowAccountId"
975
- },
976
- "metadata.instrumentId": {
977
- "from": "const",
978
- "value": "pool_member_a_contribution"
979
- },
980
- "metadata.instrumentInstanceId": {
981
- "from": "instance",
982
- "path": "instrumentInstanceId"
983
- },
984
- "metadata.phase": {
985
- "from": "const",
986
- "value": "guarantee_cycle_2"
987
- },
988
- "productId": {
989
- "from": "instance",
990
- "path": "productId"
991
- },
992
- "sourceAccountId": {
993
- "from": "instance",
994
- "path": "fields.guarantorAccountId"
995
- }
996
- },
997
- "capture": {
998
- "guaranteeCycle2GuaranteeTransferId": "transferId"
999
- },
1000
- "key": "guarantee",
1001
- "operation": "internal_transfer.create"
1002
- }
1003
- ],
1004
- "publicAction": "guaranteeCycle2PoolMemberAContribution",
1005
- "requiresRefs": [
1006
- {
1007
- "field": "poolId",
1008
- "statuses": [
1009
- "active_cycle_2"
1010
- ]
1011
- }
1012
- ],
1013
- "steps": [],
1014
- "summary": "Fund the defaulted cycle 2 amount before payout"
1015
- },
1016
- "guarantee_cycle_3": {
1017
- "agentDescription": "Have the guarantor fund cycle 3 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
1018
- "effects": {
1019
- "moves": [
1020
- {
1021
- "signature": "moves.collection.pay_in",
1022
- "source": "moves[0]"
1023
- }
1024
- ],
1025
- "reads": [
1026
- {
1027
- "signature": "reads.requires_refs",
1028
- "source": "requiresRefs"
1029
- }
1030
- ]
1031
- },
1032
- "moves": [
1033
- {
1034
- "bind": {
1035
- "amount": {
1036
- "from": "instance",
1037
- "path": "fields.contributionAmount"
1038
- },
1039
- "currency": {
1040
- "from": "instance",
1041
- "path": "fields.currency"
1042
- },
1043
- "destinationAccountId": {
1044
- "from": "instance",
1045
- "path": "refs.escrowAccountId"
1046
- },
1047
- "metadata.instrumentId": {
1048
- "from": "const",
1049
- "value": "pool_member_a_contribution"
1050
- },
1051
- "metadata.instrumentInstanceId": {
1052
- "from": "instance",
1053
- "path": "instrumentInstanceId"
1054
- },
1055
- "metadata.phase": {
1056
- "from": "const",
1057
- "value": "guarantee_cycle_3"
1058
- },
1059
- "productId": {
1060
- "from": "instance",
1061
- "path": "productId"
1062
- },
1063
- "sourceAccountId": {
1064
- "from": "instance",
1065
- "path": "fields.guarantorAccountId"
1066
- }
1067
- },
1068
- "capture": {
1069
- "guaranteeCycle3GuaranteeTransferId": "transferId"
1070
- },
1071
- "key": "guarantee",
1072
- "operation": "internal_transfer.create"
1073
- }
1074
- ],
1075
- "publicAction": "guaranteeCycle3PoolMemberAContribution",
1076
- "requiresRefs": [
1077
- {
1078
- "field": "poolId",
1079
- "statuses": [
1080
- "active_cycle_3"
1081
- ]
1082
- }
1083
- ],
1084
- "steps": [],
1085
- "summary": "Fund the defaulted cycle 3 amount before payout"
1086
- },
1087
- "mark_default_cycle_1": {
1088
- "due": {
1089
- "field": "firstContributionAt"
1090
- },
1091
- "effects": {
1092
- "reads": [
1093
- {
1094
- "signature": "reads.requires_refs",
1095
- "source": "requiresRefs"
1096
- }
1097
- ],
1098
- "schedules": [
1099
- {
1100
- "signature": "schedules.due",
1101
- "source": "due"
1102
- }
1103
- ]
1104
- },
1105
- "moves": [],
1106
- "requiresRefs": [
1107
- {
1108
- "field": "poolId",
1109
- "statuses": [
1110
- "active_cycle_1"
1111
- ]
1112
- }
1113
- ],
1114
- "steps": [],
1115
- "summary": "Mark the stored cycle 1 due condition"
1116
- },
1117
- "mark_default_cycle_2": {
1118
- "due": {
1119
- "field": "firstContributionAt",
1120
- "offset": "P30D"
1121
- },
1122
- "effects": {
1123
- "reads": [
1124
- {
1125
- "signature": "reads.requires_refs",
1126
- "source": "requiresRefs"
1127
- }
1128
- ],
1129
- "schedules": [
1130
- {
1131
- "signature": "schedules.due",
1132
- "source": "due"
1133
- }
1134
- ]
1135
- },
1136
- "moves": [],
1137
- "requiresRefs": [
1138
- {
1139
- "field": "poolId",
1140
- "statuses": [
1141
- "active_cycle_2"
1142
- ]
1143
- }
1144
- ],
1145
- "steps": [],
1146
- "summary": "Mark the stored cycle 2 due condition"
1147
- },
1148
- "mark_default_cycle_3": {
1149
- "due": {
1150
- "field": "firstContributionAt",
1151
- "offset": "P60D"
1152
- },
1153
- "effects": {
1154
- "reads": [
1155
- {
1156
- "signature": "reads.requires_refs",
1157
- "source": "requiresRefs"
1158
- }
1159
- ],
1160
- "schedules": [
1161
- {
1162
- "signature": "schedules.due",
1163
- "source": "due"
1164
- }
1165
- ]
1166
- },
1167
- "moves": [],
1168
- "requiresRefs": [
1169
- {
1170
- "field": "poolId",
1171
- "statuses": [
1172
- "active_cycle_3"
1173
- ]
1174
- }
1175
- ],
1176
- "steps": [],
1177
- "summary": "Mark the stored cycle 3 due condition"
1178
- },
1179
- "pay_cycle_1": {
1180
- "agentDescription": "Pay this row's funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
1181
- "effects": {
1182
- "moves": [
1183
- {
1184
- "signature": "moves.transfer.internal",
1185
- "source": "moves[0]"
1186
- }
1187
- ],
1188
- "reads": [
1189
- {
1190
- "signature": "reads.requires_refs",
1191
- "source": "requiresRefs"
1192
- }
1193
- ]
1194
- },
1195
- "moves": [
1196
- {
1197
- "bind": {
1198
- "amount": {
1199
- "from": "instance",
1200
- "path": "fields.contributionAmount"
1201
- },
1202
- "currency": {
1203
- "from": "instance",
1204
- "path": "fields.currency"
1205
- },
1206
- "destinationAccountId": {
1207
- "from": "instance",
1208
- "path": "fields.memberBAccountId"
1209
- },
1210
- "metadata.instrumentId": {
1211
- "from": "const",
1212
- "value": "pool_member_a_contribution"
1213
- },
1214
- "metadata.instrumentInstanceId": {
1215
- "from": "instance",
1216
- "path": "instrumentInstanceId"
1217
- },
1218
- "metadata.phase": {
1219
- "from": "const",
1220
- "value": "pay_cycle_1"
1221
- },
1222
- "productId": {
1223
- "from": "instance",
1224
- "path": "productId"
1225
- },
1226
- "sourceAccountId": {
1227
- "from": "instance",
1228
- "path": "refs.escrowAccountId"
1229
- }
1230
- },
1231
- "capture": {
1232
- "payCycle1PayoutTransferId": "transferId"
1233
- },
1234
- "key": "payout",
1235
- "operation": "internal_transfer.create"
1236
- }
1237
- ],
1238
- "publicAction": "payCycle1PoolMemberAContribution",
1239
- "requiresRefs": [
1240
- {
1241
- "field": "poolId",
1242
- "statuses": [
1243
- "cycle_1_ready"
1244
- ]
1245
- }
1246
- ],
1247
- "steps": [],
1248
- "summary": "Pay this member's stored contribution into cycle 1's shared pot recipient"
1249
- },
1250
- "pay_cycle_2": {
1251
- "agentDescription": "Pay this row's funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
1252
- "effects": {
1253
- "moves": [
1254
- {
1255
- "signature": "moves.transfer.internal",
1256
- "source": "moves[0]"
1257
- }
1258
- ],
1259
- "reads": [
1260
- {
1261
- "signature": "reads.requires_refs",
1262
- "source": "requiresRefs"
1263
- }
1264
- ]
1265
- },
1266
- "moves": [
1267
- {
1268
- "bind": {
1269
- "amount": {
1270
- "from": "instance",
1271
- "path": "fields.contributionAmount"
1272
- },
1273
- "currency": {
1274
- "from": "instance",
1275
- "path": "fields.currency"
1276
- },
1277
- "destinationAccountId": {
1278
- "from": "instance",
1279
- "path": "fields.memberCAccountId"
1280
- },
1281
- "metadata.instrumentId": {
1282
- "from": "const",
1283
- "value": "pool_member_a_contribution"
1284
- },
1285
- "metadata.instrumentInstanceId": {
1286
- "from": "instance",
1287
- "path": "instrumentInstanceId"
1288
- },
1289
- "metadata.phase": {
1290
- "from": "const",
1291
- "value": "pay_cycle_2"
1292
- },
1293
- "productId": {
1294
- "from": "instance",
1295
- "path": "productId"
1296
- },
1297
- "sourceAccountId": {
1298
- "from": "instance",
1299
- "path": "refs.escrowAccountId"
1300
- }
1301
- },
1302
- "capture": {
1303
- "payCycle2PayoutTransferId": "transferId"
1304
- },
1305
- "key": "payout",
1306
- "operation": "internal_transfer.create"
1307
- }
1308
- ],
1309
- "publicAction": "payCycle2PoolMemberAContribution",
1310
- "requiresRefs": [
1311
- {
1312
- "field": "poolId",
1313
- "statuses": [
1314
- "cycle_2_ready"
1315
- ]
1316
- }
1317
- ],
1318
- "steps": [],
1319
- "summary": "Pay this member's stored contribution into cycle 2's shared pot recipient"
1320
- },
1321
- "pay_cycle_3": {
1322
- "agentDescription": "Pay this row's funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
1323
- "effects": {
1324
- "moves": [
1325
- {
1326
- "signature": "moves.transfer.internal",
1327
- "source": "moves[0]"
1328
- }
1329
- ],
1330
- "reads": [
1331
- {
1332
- "signature": "reads.requires_refs",
1333
- "source": "requiresRefs"
1334
- }
1335
- ]
1336
- },
1337
- "moves": [
1338
- {
1339
- "bind": {
1340
- "amount": {
1341
- "from": "instance",
1342
- "path": "fields.contributionAmount"
1343
- },
1344
- "currency": {
1345
- "from": "instance",
1346
- "path": "fields.currency"
1347
- },
1348
- "destinationAccountId": {
1349
- "from": "instance",
1350
- "path": "fields.memberAAccountId"
1351
- },
1352
- "metadata.instrumentId": {
1353
- "from": "const",
1354
- "value": "pool_member_a_contribution"
1355
- },
1356
- "metadata.instrumentInstanceId": {
1357
- "from": "instance",
1358
- "path": "instrumentInstanceId"
1359
- },
1360
- "metadata.phase": {
1361
- "from": "const",
1362
- "value": "pay_cycle_3"
1363
- },
1364
- "productId": {
1365
- "from": "instance",
1366
- "path": "productId"
1367
- },
1368
- "sourceAccountId": {
1369
- "from": "instance",
1370
- "path": "refs.escrowAccountId"
1371
- }
1372
- },
1373
- "capture": {
1374
- "payCycle3PayoutTransferId": "transferId"
1375
- },
1376
- "key": "payout",
1377
- "operation": "internal_transfer.create"
1378
- }
1379
- ],
1380
- "publicAction": "payCycle3PoolMemberAContribution",
1381
- "requiresRefs": [
1382
- {
1383
- "field": "poolId",
1384
- "statuses": [
1385
- "cycle_3_ready"
1386
- ]
1387
- }
1388
- ],
1389
- "steps": [],
1390
- "summary": "Pay this member's stored contribution into cycle 3's shared pot recipient"
1391
- },
1392
- "pay_guaranteed_cycle_1": {
1393
- "agentDescription": "Pay this row's guarantor-funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
1394
- "effects": {
1395
- "moves": [
1396
- {
1397
- "signature": "moves.transfer.internal",
1398
- "source": "moves[0]"
1399
- }
1400
- ],
1401
- "reads": [
1402
- {
1403
- "signature": "reads.requires_refs",
1404
- "source": "requiresRefs"
1405
- }
1406
- ]
1407
- },
1408
- "moves": [
1409
- {
1410
- "bind": {
1411
- "amount": {
1412
- "from": "instance",
1413
- "path": "fields.contributionAmount"
1414
- },
1415
- "currency": {
1416
- "from": "instance",
1417
- "path": "fields.currency"
1418
- },
1419
- "destinationAccountId": {
1420
- "from": "instance",
1421
- "path": "fields.memberBAccountId"
1422
- },
1423
- "metadata.instrumentId": {
1424
- "from": "const",
1425
- "value": "pool_member_a_contribution"
1426
- },
1427
- "metadata.instrumentInstanceId": {
1428
- "from": "instance",
1429
- "path": "instrumentInstanceId"
1430
- },
1431
- "metadata.phase": {
1432
- "from": "const",
1433
- "value": "pay_guaranteed_cycle_1"
1434
- },
1435
- "productId": {
1436
- "from": "instance",
1437
- "path": "productId"
1438
- },
1439
- "sourceAccountId": {
1440
- "from": "instance",
1441
- "path": "refs.escrowAccountId"
1442
- }
1443
- },
1444
- "capture": {
1445
- "payGuaranteedCycle1PayoutTransferId": "transferId"
1446
- },
1447
- "key": "payout",
1448
- "operation": "internal_transfer.create"
1449
- }
1450
- ],
1451
- "publicAction": "payGuaranteedCycle1PoolMemberAContribution",
1452
- "requiresRefs": [
1453
- {
1454
- "field": "poolId",
1455
- "statuses": [
1456
- "cycle_1_ready"
1457
- ]
1458
- }
1459
- ],
1460
- "steps": [],
1461
- "summary": "Pay the funded default into cycle 1's stored recipient"
1462
- },
1463
- "pay_guaranteed_cycle_2": {
1464
- "agentDescription": "Pay this row's guarantor-funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
1465
- "effects": {
1466
- "moves": [
1467
- {
1468
- "signature": "moves.transfer.internal",
1469
- "source": "moves[0]"
1470
- }
1471
- ],
1472
- "reads": [
1473
- {
1474
- "signature": "reads.requires_refs",
1475
- "source": "requiresRefs"
1476
- }
1477
- ]
1478
- },
1479
- "moves": [
1480
- {
1481
- "bind": {
1482
- "amount": {
1483
- "from": "instance",
1484
- "path": "fields.contributionAmount"
1485
- },
1486
- "currency": {
1487
- "from": "instance",
1488
- "path": "fields.currency"
1489
- },
1490
- "destinationAccountId": {
1491
- "from": "instance",
1492
- "path": "fields.memberCAccountId"
1493
- },
1494
- "metadata.instrumentId": {
1495
- "from": "const",
1496
- "value": "pool_member_a_contribution"
1497
- },
1498
- "metadata.instrumentInstanceId": {
1499
- "from": "instance",
1500
- "path": "instrumentInstanceId"
1501
- },
1502
- "metadata.phase": {
1503
- "from": "const",
1504
- "value": "pay_guaranteed_cycle_2"
1505
- },
1506
- "productId": {
1507
- "from": "instance",
1508
- "path": "productId"
1509
- },
1510
- "sourceAccountId": {
1511
- "from": "instance",
1512
- "path": "refs.escrowAccountId"
1513
- }
1514
- },
1515
- "capture": {
1516
- "payGuaranteedCycle2PayoutTransferId": "transferId"
1517
- },
1518
- "key": "payout",
1519
- "operation": "internal_transfer.create"
1520
- }
1521
- ],
1522
- "publicAction": "payGuaranteedCycle2PoolMemberAContribution",
1523
- "requiresRefs": [
1524
- {
1525
- "field": "poolId",
1526
- "statuses": [
1527
- "cycle_2_ready"
1528
- ]
1529
- }
1530
- ],
1531
- "steps": [],
1532
- "summary": "Pay the funded default into cycle 2's stored recipient"
1533
- },
1534
- "pay_guaranteed_cycle_3": {
1535
- "agentDescription": "Pay this row's guarantor-funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
1536
- "effects": {
1537
- "moves": [
1538
- {
1539
- "signature": "moves.transfer.internal",
1540
- "source": "moves[0]"
1541
- }
1542
- ],
1543
- "reads": [
1544
- {
1545
- "signature": "reads.requires_refs",
1546
- "source": "requiresRefs"
1547
- }
1548
- ]
1549
- },
1550
- "moves": [
1551
- {
1552
- "bind": {
1553
- "amount": {
1554
- "from": "instance",
1555
- "path": "fields.contributionAmount"
1556
- },
1557
- "currency": {
1558
- "from": "instance",
1559
- "path": "fields.currency"
1560
- },
1561
- "destinationAccountId": {
1562
- "from": "instance",
1563
- "path": "fields.memberAAccountId"
1564
- },
1565
- "metadata.instrumentId": {
1566
- "from": "const",
1567
- "value": "pool_member_a_contribution"
1568
- },
1569
- "metadata.instrumentInstanceId": {
1570
- "from": "instance",
1571
- "path": "instrumentInstanceId"
1572
- },
1573
- "metadata.phase": {
1574
- "from": "const",
1575
- "value": "pay_guaranteed_cycle_3"
1576
- },
1577
- "productId": {
1578
- "from": "instance",
1579
- "path": "productId"
1580
- },
1581
- "sourceAccountId": {
1582
- "from": "instance",
1583
- "path": "refs.escrowAccountId"
1584
- }
1585
- },
1586
- "capture": {
1587
- "payGuaranteedCycle3PayoutTransferId": "transferId"
1588
- },
1589
- "key": "payout",
1590
- "operation": "internal_transfer.create"
1591
- }
1592
- ],
1593
- "publicAction": "payGuaranteedCycle3PoolMemberAContribution",
1594
- "requiresRefs": [
1595
- {
1596
- "field": "poolId",
1597
- "statuses": [
1598
- "cycle_3_ready"
1599
- ]
1600
- }
1601
- ],
1602
- "steps": [],
1603
- "summary": "Pay the funded default into cycle 3's stored recipient"
1604
- }
1605
- },
1606
- "agentDescription": "One seat in the pool. The member a pays the same contribution every cycle and takes the whole pot on their turn. Every contribution, default, guarantee, and payout for that member happens on this row, never on the pool itself.",
1607
- "description": "Fixed contribution row for member a",
1608
- "fields": {
1609
- "contributionAmount": {
1610
- "description": "Exact contribution amount shared by every cycle",
1611
- "pattern": "^[1-9][0-9]{0,17}$",
1612
- "type": "string"
1613
- },
1614
- "currency": {
1615
- "description": "ISO 4217 currency code",
1616
- "maxLength": 3,
1617
- "minLength": 3,
1618
- "pattern": "^[A-Z]{3}$",
1619
- "type": "string"
1620
- },
1621
- "firstContributionAt": {
1622
- "description": "First due anchor derived from the pool",
1623
- "format": "hyperscale-date-time",
1624
- "type": "string"
1625
- },
1626
- "guarantorAccountId": {
1627
- "description": "The guarantor account",
1628
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
1629
- "type": "string",
1630
- "x-hyperscale-reference-filter": {
1631
- "column": "role",
1632
- "values": [
1633
- "customer_balance"
1634
- ]
1635
- }
1636
- },
1637
- "memberAAccountId": {
1638
- "description": "The member a account",
1639
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
1640
- "type": "string",
1641
- "x-hyperscale-reference-filter": {
1642
- "column": "role",
1643
- "values": [
1644
- "customer_balance"
1645
- ]
1646
- }
1647
- },
1648
- "memberBAccountId": {
1649
- "description": "The member b account",
1650
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
1651
- "type": "string",
1652
- "x-hyperscale-reference-filter": {
1653
- "column": "role",
1654
- "values": [
1655
- "customer_balance"
1656
- ]
1657
- }
1658
- },
1659
- "memberCAccountId": {
1660
- "description": "The member c account",
1661
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
1662
- "type": "string",
1663
- "x-hyperscale-reference-filter": {
1664
- "column": "role",
1665
- "values": [
1666
- "customer_balance"
1667
- ]
1668
- }
1669
- },
1670
- "poolId": {
1671
- "description": "The exact pool",
1672
- "pattern": "^pool_(sandbox|live)_[a-z0-9]{8,64}$",
1673
- "type": "string"
1674
- }
1675
- },
1676
- "id": "pool_member_a_contribution",
1677
- "idPrefix": "zzaa",
1678
- "lifecycle": {
1679
- "initial": "cycle_1_due",
1680
- "states": [
1681
- "cycle_1_due",
1682
- "cycle_1_funded",
1683
- "cycle_1_defaulted",
1684
- "cycle_1_guaranteed",
1685
- "cycle_2_due",
1686
- "cycle_2_funded",
1687
- "cycle_2_defaulted",
1688
- "cycle_2_guaranteed",
1689
- "cycle_3_due",
1690
- "cycle_3_funded",
1691
- "cycle_3_defaulted",
1692
- "cycle_3_guaranteed",
1693
- "final_paid",
1694
- "completed"
1695
- ],
1696
- "transitions": {
1697
- "close": {
1698
- "from": [
1699
- "final_paid"
1700
- ],
1701
- "to": "completed"
1702
- },
1703
- "contribute_cycle_1": {
1704
- "from": [
1705
- "cycle_1_due"
1706
- ],
1707
- "to": "cycle_1_funded"
1708
- },
1709
- "contribute_cycle_2": {
1710
- "from": [
1711
- "cycle_2_due"
1712
- ],
1713
- "to": "cycle_2_funded"
1714
- },
1715
- "contribute_cycle_3": {
1716
- "from": [
1717
- "cycle_3_due"
1718
- ],
1719
- "to": "cycle_3_funded"
1720
- },
1721
- "guarantee_cycle_1": {
1722
- "from": [
1723
- "cycle_1_defaulted"
1724
- ],
1725
- "to": "cycle_1_guaranteed"
1726
- },
1727
- "guarantee_cycle_2": {
1728
- "from": [
1729
- "cycle_2_defaulted"
1730
- ],
1731
- "to": "cycle_2_guaranteed"
1732
- },
1733
- "guarantee_cycle_3": {
1734
- "from": [
1735
- "cycle_3_defaulted"
1736
- ],
1737
- "to": "cycle_3_guaranteed"
1738
- },
1739
- "mark_default_cycle_1": {
1740
- "from": [
1741
- "cycle_1_due"
1742
- ],
1743
- "to": "cycle_1_defaulted"
1744
- },
1745
- "mark_default_cycle_2": {
1746
- "from": [
1747
- "cycle_2_due"
1748
- ],
1749
- "to": "cycle_2_defaulted"
1750
- },
1751
- "mark_default_cycle_3": {
1752
- "from": [
1753
- "cycle_3_due"
1754
- ],
1755
- "to": "cycle_3_defaulted"
1756
- },
1757
- "pay_cycle_1": {
1758
- "from": [
1759
- "cycle_1_funded"
1760
- ],
1761
- "to": "cycle_2_due"
1762
- },
1763
- "pay_cycle_2": {
1764
- "from": [
1765
- "cycle_2_funded"
1766
- ],
1767
- "to": "cycle_3_due"
1768
- },
1769
- "pay_cycle_3": {
1770
- "from": [
1771
- "cycle_3_funded"
1772
- ],
1773
- "to": "final_paid"
1774
- },
1775
- "pay_guaranteed_cycle_1": {
1776
- "from": [
1777
- "cycle_1_guaranteed"
1778
- ],
1779
- "to": "cycle_2_due"
1780
- },
1781
- "pay_guaranteed_cycle_2": {
1782
- "from": [
1783
- "cycle_2_guaranteed"
1784
- ],
1785
- "to": "cycle_3_due"
1786
- },
1787
- "pay_guaranteed_cycle_3": {
1788
- "from": [
1789
- "cycle_3_guaranteed"
1790
- ],
1791
- "to": "final_paid"
1792
- }
1793
- }
1794
- },
1795
- "parties": {
1796
- "beneficiary": "memberAAccountId",
1797
- "payer": "guarantorAccountId"
1798
- },
1799
- "required": [
1800
- "memberAAccountId",
1801
- "guarantorAccountId",
1802
- "memberBAccountId",
1803
- "memberCAccountId",
1804
- "contributionAmount",
1805
- "currency",
1806
- "firstContributionAt",
1807
- "poolId"
1808
- ],
1809
- "summary": "member a contribution row",
1810
- "title": "Pool Member a Contribution"
1811
- },
1812
- {
1813
- "actionOrder": [
1814
- "create",
1815
- "contribute_cycle_1",
1816
- "mark_default_cycle_1",
1817
- "guarantee_cycle_1",
1818
- "pay_cycle_1",
1819
- "pay_guaranteed_cycle_1",
1820
- "contribute_cycle_2",
1821
- "mark_default_cycle_2",
1822
- "guarantee_cycle_2",
1823
- "pay_cycle_2",
1824
- "pay_guaranteed_cycle_2",
1825
- "contribute_cycle_3",
1826
- "mark_default_cycle_3",
1827
- "guarantee_cycle_3",
1828
- "pay_cycle_3",
1829
- "pay_guaranteed_cycle_3",
1830
- "close"
1831
- ],
1832
- "actions": {
1833
- "close": {
1834
- "agentDescription": "Retire this member row after its final payout. Refused while the row escrow account still holds anything, so a row can never close over stranded money. No money moves.",
1835
- "moves": [],
1836
- "publicAction": "closePoolMemberBContribution",
1837
- "requiresDrainedAccount": {
1838
- "path": "refs.escrowAccountId"
1839
- },
1840
- "steps": [],
1841
- "summary": "Complete after the final payout drains this member custody"
1842
- },
1843
- "contribute_cycle_1": {
1844
- "due": {
1845
- "field": "firstContributionAt"
1846
- },
1847
- "effects": {
1848
- "moves": [
1849
- {
1850
- "signature": "moves.collection.pay_in",
1851
- "source": "moves[0]"
1852
- }
1853
- ],
1854
- "reads": [
1855
- {
1856
- "signature": "reads.requires_refs",
1857
- "source": "requiresRefs"
1858
- }
1859
- ],
1860
- "schedules": [
1861
- {
1862
- "signature": "schedules.due",
1863
- "source": "due"
1864
- }
1865
- ]
1866
- },
1867
- "moves": [
1868
- {
1869
- "bind": {
1870
- "amount": {
1871
- "from": "instance",
1872
- "path": "fields.contributionAmount"
1873
- },
1874
- "currency": {
1875
- "from": "instance",
1876
- "path": "fields.currency"
1877
- },
1878
- "destinationAccountId": {
1879
- "from": "instance",
1880
- "path": "refs.escrowAccountId"
1881
- },
1882
- "metadata.instrumentId": {
1883
- "from": "const",
1884
- "value": "pool_member_b_contribution"
1885
- },
1886
- "metadata.instrumentInstanceId": {
1887
- "from": "instance",
1888
- "path": "instrumentInstanceId"
1889
- },
1890
- "metadata.phase": {
1891
- "from": "const",
1892
- "value": "contribute_cycle_1"
1893
- },
1894
- "productId": {
1895
- "from": "instance",
1896
- "path": "productId"
1897
- },
1898
- "sourceAccountId": {
1899
- "from": "instance",
1900
- "path": "fields.memberBAccountId"
1901
- }
1902
- },
1903
- "capture": {
1904
- "contributeCycle1ContributionTransferId": "transferId"
1905
- },
1906
- "key": "contribution",
1907
- "operation": "internal_transfer.create"
1908
- }
1909
- ],
1910
- "requiresRefs": [
1911
- {
1912
- "field": "poolId",
1913
- "statuses": [
1914
- "active_cycle_1"
1915
- ]
1916
- }
1917
- ],
1918
- "steps": [],
1919
- "summary": "Fund member b's cycle 1 contribution"
1920
- },
1921
- "contribute_cycle_2": {
1922
- "due": {
1923
- "field": "firstContributionAt",
1924
- "offset": "P30D"
1925
- },
1926
- "effects": {
1927
- "moves": [
1928
- {
1929
- "signature": "moves.collection.pay_in",
1930
- "source": "moves[0]"
1931
- }
1932
- ],
1933
- "reads": [
1934
- {
1935
- "signature": "reads.requires_refs",
1936
- "source": "requiresRefs"
1937
- }
1938
- ],
1939
- "schedules": [
1940
- {
1941
- "signature": "schedules.due",
1942
- "source": "due"
1943
- }
1944
- ]
1945
- },
1946
- "moves": [
1947
- {
1948
- "bind": {
1949
- "amount": {
1950
- "from": "instance",
1951
- "path": "fields.contributionAmount"
1952
- },
1953
- "currency": {
1954
- "from": "instance",
1955
- "path": "fields.currency"
1956
- },
1957
- "destinationAccountId": {
1958
- "from": "instance",
1959
- "path": "refs.escrowAccountId"
1960
- },
1961
- "metadata.instrumentId": {
1962
- "from": "const",
1963
- "value": "pool_member_b_contribution"
1964
- },
1965
- "metadata.instrumentInstanceId": {
1966
- "from": "instance",
1967
- "path": "instrumentInstanceId"
1968
- },
1969
- "metadata.phase": {
1970
- "from": "const",
1971
- "value": "contribute_cycle_2"
1972
- },
1973
- "productId": {
1974
- "from": "instance",
1975
- "path": "productId"
1976
- },
1977
- "sourceAccountId": {
1978
- "from": "instance",
1979
- "path": "fields.memberBAccountId"
1980
- }
1981
- },
1982
- "capture": {
1983
- "contributeCycle2ContributionTransferId": "transferId"
1984
- },
1985
- "key": "contribution",
1986
- "operation": "internal_transfer.create"
1987
- }
1988
- ],
1989
- "requiresRefs": [
1990
- {
1991
- "field": "poolId",
1992
- "statuses": [
1993
- "active_cycle_2"
1994
- ]
1995
- }
1996
- ],
1997
- "steps": [],
1998
- "summary": "Fund member b's cycle 2 contribution"
1999
- },
2000
- "contribute_cycle_3": {
2001
- "due": {
2002
- "field": "firstContributionAt",
2003
- "offset": "P60D"
2004
- },
2005
- "effects": {
2006
- "moves": [
2007
- {
2008
- "signature": "moves.collection.pay_in",
2009
- "source": "moves[0]"
2010
- }
2011
- ],
2012
- "reads": [
2013
- {
2014
- "signature": "reads.requires_refs",
2015
- "source": "requiresRefs"
2016
- }
2017
- ],
2018
- "schedules": [
2019
- {
2020
- "signature": "schedules.due",
2021
- "source": "due"
2022
- }
2023
- ]
2024
- },
2025
- "moves": [
2026
- {
2027
- "bind": {
2028
- "amount": {
2029
- "from": "instance",
2030
- "path": "fields.contributionAmount"
2031
- },
2032
- "currency": {
2033
- "from": "instance",
2034
- "path": "fields.currency"
2035
- },
2036
- "destinationAccountId": {
2037
- "from": "instance",
2038
- "path": "refs.escrowAccountId"
2039
- },
2040
- "metadata.instrumentId": {
2041
- "from": "const",
2042
- "value": "pool_member_b_contribution"
2043
- },
2044
- "metadata.instrumentInstanceId": {
2045
- "from": "instance",
2046
- "path": "instrumentInstanceId"
2047
- },
2048
- "metadata.phase": {
2049
- "from": "const",
2050
- "value": "contribute_cycle_3"
2051
- },
2052
- "productId": {
2053
- "from": "instance",
2054
- "path": "productId"
2055
- },
2056
- "sourceAccountId": {
2057
- "from": "instance",
2058
- "path": "fields.memberBAccountId"
2059
- }
2060
- },
2061
- "capture": {
2062
- "contributeCycle3ContributionTransferId": "transferId"
2063
- },
2064
- "key": "contribution",
2065
- "operation": "internal_transfer.create"
2066
- }
2067
- ],
2068
- "requiresRefs": [
2069
- {
2070
- "field": "poolId",
2071
- "statuses": [
2072
- "active_cycle_3"
2073
- ]
2074
- }
2075
- ],
2076
- "steps": [],
2077
- "summary": "Fund member b's cycle 3 contribution"
2078
- },
2079
- "create": {
2080
- "agentDescription": "Create the contribution row for the member b and provision its escrow account. The pool must still be forming, and every member needs exactly one row before the pool can activate. No money moves.",
2081
- "effects": {
2082
- "reads": [
2083
- {
2084
- "signature": "reads.requires_refs",
2085
- "source": "requiresRefs"
2086
- }
2087
- ]
2088
- },
2089
- "moves": [],
2090
- "publicAction": "createPoolMemberBContribution",
2091
- "requiresRefs": [
2092
- {
2093
- "bind": {
2094
- "contributionAmount": "fields.contributionAmount",
2095
- "currency": "fields.currency",
2096
- "firstContributionAt": "fields.firstContributionAt",
2097
- "guarantorAccountId": "fields.guarantorAccountId",
2098
- "memberAAccountId": "fields.memberAAccountId",
2099
- "memberBAccountId": "fields.memberBAccountId",
2100
- "memberCAccountId": "fields.memberCAccountId"
2101
- },
2102
- "field": "poolId",
2103
- "statuses": [
2104
- "forming"
2105
- ],
2106
- "unique": true
2107
- }
2108
- ],
2109
- "steps": [
2110
- {
2111
- "bind": {
2112
- "currency": {
2113
- "from": "instance",
2114
- "path": "fields.currency"
2115
- },
2116
- "owner.id": {
2117
- "from": "instance",
2118
- "path": "productId"
2119
- },
2120
- "owner.type": {
2121
- "from": "const",
2122
- "value": "product"
2123
- },
2124
- "productId": {
2125
- "from": "instance",
2126
- "path": "productId"
2127
- },
2128
- "role": {
2129
- "from": "const",
2130
- "value": "product_escrow"
2131
- }
2132
- },
2133
- "capture": {
2134
- "escrowAccountId": "accountId"
2135
- },
2136
- "operation": "account.escrow.provision"
2137
- }
2138
- ],
2139
- "summary": "Create the fixed contribution row for member b"
2140
- },
2141
- "guarantee_cycle_1": {
2142
- "agentDescription": "Have the guarantor fund cycle 1 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
2143
- "effects": {
2144
- "moves": [
2145
- {
2146
- "signature": "moves.collection.pay_in",
2147
- "source": "moves[0]"
2148
- }
2149
- ],
2150
- "reads": [
2151
- {
2152
- "signature": "reads.requires_refs",
2153
- "source": "requiresRefs"
2154
- }
2155
- ]
2156
- },
2157
- "moves": [
2158
- {
2159
- "bind": {
2160
- "amount": {
2161
- "from": "instance",
2162
- "path": "fields.contributionAmount"
2163
- },
2164
- "currency": {
2165
- "from": "instance",
2166
- "path": "fields.currency"
2167
- },
2168
- "destinationAccountId": {
2169
- "from": "instance",
2170
- "path": "refs.escrowAccountId"
2171
- },
2172
- "metadata.instrumentId": {
2173
- "from": "const",
2174
- "value": "pool_member_b_contribution"
2175
- },
2176
- "metadata.instrumentInstanceId": {
2177
- "from": "instance",
2178
- "path": "instrumentInstanceId"
2179
- },
2180
- "metadata.phase": {
2181
- "from": "const",
2182
- "value": "guarantee_cycle_1"
2183
- },
2184
- "productId": {
2185
- "from": "instance",
2186
- "path": "productId"
2187
- },
2188
- "sourceAccountId": {
2189
- "from": "instance",
2190
- "path": "fields.guarantorAccountId"
2191
- }
2192
- },
2193
- "capture": {
2194
- "guaranteeCycle1GuaranteeTransferId": "transferId"
2195
- },
2196
- "key": "guarantee",
2197
- "operation": "internal_transfer.create"
2198
- }
2199
- ],
2200
- "publicAction": "guaranteeCycle1PoolMemberBContribution",
2201
- "requiresRefs": [
2202
- {
2203
- "field": "poolId",
2204
- "statuses": [
2205
- "active_cycle_1"
2206
- ]
2207
- }
2208
- ],
2209
- "steps": [],
2210
- "summary": "Fund the defaulted cycle 1 amount before payout"
2211
- },
2212
- "guarantee_cycle_2": {
2213
- "agentDescription": "Have the guarantor fund cycle 2 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
2214
- "effects": {
2215
- "moves": [
2216
- {
2217
- "signature": "moves.collection.pay_in",
2218
- "source": "moves[0]"
2219
- }
2220
- ],
2221
- "reads": [
2222
- {
2223
- "signature": "reads.requires_refs",
2224
- "source": "requiresRefs"
2225
- }
2226
- ]
2227
- },
2228
- "moves": [
2229
- {
2230
- "bind": {
2231
- "amount": {
2232
- "from": "instance",
2233
- "path": "fields.contributionAmount"
2234
- },
2235
- "currency": {
2236
- "from": "instance",
2237
- "path": "fields.currency"
2238
- },
2239
- "destinationAccountId": {
2240
- "from": "instance",
2241
- "path": "refs.escrowAccountId"
2242
- },
2243
- "metadata.instrumentId": {
2244
- "from": "const",
2245
- "value": "pool_member_b_contribution"
2246
- },
2247
- "metadata.instrumentInstanceId": {
2248
- "from": "instance",
2249
- "path": "instrumentInstanceId"
2250
- },
2251
- "metadata.phase": {
2252
- "from": "const",
2253
- "value": "guarantee_cycle_2"
2254
- },
2255
- "productId": {
2256
- "from": "instance",
2257
- "path": "productId"
2258
- },
2259
- "sourceAccountId": {
2260
- "from": "instance",
2261
- "path": "fields.guarantorAccountId"
2262
- }
2263
- },
2264
- "capture": {
2265
- "guaranteeCycle2GuaranteeTransferId": "transferId"
2266
- },
2267
- "key": "guarantee",
2268
- "operation": "internal_transfer.create"
2269
- }
2270
- ],
2271
- "publicAction": "guaranteeCycle2PoolMemberBContribution",
2272
- "requiresRefs": [
2273
- {
2274
- "field": "poolId",
2275
- "statuses": [
2276
- "active_cycle_2"
2277
- ]
2278
- }
2279
- ],
2280
- "steps": [],
2281
- "summary": "Fund the defaulted cycle 2 amount before payout"
2282
- },
2283
- "guarantee_cycle_3": {
2284
- "agentDescription": "Have the guarantor fund cycle 3 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
2285
- "effects": {
2286
- "moves": [
2287
- {
2288
- "signature": "moves.collection.pay_in",
2289
- "source": "moves[0]"
2290
- }
2291
- ],
2292
- "reads": [
2293
- {
2294
- "signature": "reads.requires_refs",
2295
- "source": "requiresRefs"
2296
- }
2297
- ]
2298
- },
2299
- "moves": [
2300
- {
2301
- "bind": {
2302
- "amount": {
2303
- "from": "instance",
2304
- "path": "fields.contributionAmount"
2305
- },
2306
- "currency": {
2307
- "from": "instance",
2308
- "path": "fields.currency"
2309
- },
2310
- "destinationAccountId": {
2311
- "from": "instance",
2312
- "path": "refs.escrowAccountId"
2313
- },
2314
- "metadata.instrumentId": {
2315
- "from": "const",
2316
- "value": "pool_member_b_contribution"
2317
- },
2318
- "metadata.instrumentInstanceId": {
2319
- "from": "instance",
2320
- "path": "instrumentInstanceId"
2321
- },
2322
- "metadata.phase": {
2323
- "from": "const",
2324
- "value": "guarantee_cycle_3"
2325
- },
2326
- "productId": {
2327
- "from": "instance",
2328
- "path": "productId"
2329
- },
2330
- "sourceAccountId": {
2331
- "from": "instance",
2332
- "path": "fields.guarantorAccountId"
2333
- }
2334
- },
2335
- "capture": {
2336
- "guaranteeCycle3GuaranteeTransferId": "transferId"
2337
- },
2338
- "key": "guarantee",
2339
- "operation": "internal_transfer.create"
2340
- }
2341
- ],
2342
- "publicAction": "guaranteeCycle3PoolMemberBContribution",
2343
- "requiresRefs": [
2344
- {
2345
- "field": "poolId",
2346
- "statuses": [
2347
- "active_cycle_3"
2348
- ]
2349
- }
2350
- ],
2351
- "steps": [],
2352
- "summary": "Fund the defaulted cycle 3 amount before payout"
2353
- },
2354
- "mark_default_cycle_1": {
2355
- "due": {
2356
- "field": "firstContributionAt"
2357
- },
2358
- "effects": {
2359
- "reads": [
2360
- {
2361
- "signature": "reads.requires_refs",
2362
- "source": "requiresRefs"
2363
- }
2364
- ],
2365
- "schedules": [
2366
- {
2367
- "signature": "schedules.due",
2368
- "source": "due"
2369
- }
2370
- ]
2371
- },
2372
- "moves": [],
2373
- "requiresRefs": [
2374
- {
2375
- "field": "poolId",
2376
- "statuses": [
2377
- "active_cycle_1"
2378
- ]
2379
- }
2380
- ],
2381
- "steps": [],
2382
- "summary": "Mark the stored cycle 1 due condition"
2383
- },
2384
- "mark_default_cycle_2": {
2385
- "due": {
2386
- "field": "firstContributionAt",
2387
- "offset": "P30D"
2388
- },
2389
- "effects": {
2390
- "reads": [
2391
- {
2392
- "signature": "reads.requires_refs",
2393
- "source": "requiresRefs"
2394
- }
2395
- ],
2396
- "schedules": [
2397
- {
2398
- "signature": "schedules.due",
2399
- "source": "due"
2400
- }
2401
- ]
2402
- },
2403
- "moves": [],
2404
- "requiresRefs": [
2405
- {
2406
- "field": "poolId",
2407
- "statuses": [
2408
- "active_cycle_2"
2409
- ]
2410
- }
2411
- ],
2412
- "steps": [],
2413
- "summary": "Mark the stored cycle 2 due condition"
2414
- },
2415
- "mark_default_cycle_3": {
2416
- "due": {
2417
- "field": "firstContributionAt",
2418
- "offset": "P60D"
2419
- },
2420
- "effects": {
2421
- "reads": [
2422
- {
2423
- "signature": "reads.requires_refs",
2424
- "source": "requiresRefs"
2425
- }
2426
- ],
2427
- "schedules": [
2428
- {
2429
- "signature": "schedules.due",
2430
- "source": "due"
2431
- }
2432
- ]
2433
- },
2434
- "moves": [],
2435
- "requiresRefs": [
2436
- {
2437
- "field": "poolId",
2438
- "statuses": [
2439
- "active_cycle_3"
2440
- ]
2441
- }
2442
- ],
2443
- "steps": [],
2444
- "summary": "Mark the stored cycle 3 due condition"
2445
- },
2446
- "pay_cycle_1": {
2447
- "agentDescription": "Pay this row's funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
2448
- "effects": {
2449
- "moves": [
2450
- {
2451
- "signature": "moves.transfer.internal",
2452
- "source": "moves[0]"
2453
- }
2454
- ],
2455
- "reads": [
2456
- {
2457
- "signature": "reads.requires_refs",
2458
- "source": "requiresRefs"
2459
- }
2460
- ]
2461
- },
2462
- "moves": [
2463
- {
2464
- "bind": {
2465
- "amount": {
2466
- "from": "instance",
2467
- "path": "fields.contributionAmount"
2468
- },
2469
- "currency": {
2470
- "from": "instance",
2471
- "path": "fields.currency"
2472
- },
2473
- "destinationAccountId": {
2474
- "from": "instance",
2475
- "path": "fields.memberBAccountId"
2476
- },
2477
- "metadata.instrumentId": {
2478
- "from": "const",
2479
- "value": "pool_member_b_contribution"
2480
- },
2481
- "metadata.instrumentInstanceId": {
2482
- "from": "instance",
2483
- "path": "instrumentInstanceId"
2484
- },
2485
- "metadata.phase": {
2486
- "from": "const",
2487
- "value": "pay_cycle_1"
2488
- },
2489
- "productId": {
2490
- "from": "instance",
2491
- "path": "productId"
2492
- },
2493
- "sourceAccountId": {
2494
- "from": "instance",
2495
- "path": "refs.escrowAccountId"
2496
- }
2497
- },
2498
- "capture": {
2499
- "payCycle1PayoutTransferId": "transferId"
2500
- },
2501
- "key": "payout",
2502
- "operation": "internal_transfer.create"
2503
- }
2504
- ],
2505
- "publicAction": "payCycle1PoolMemberBContribution",
2506
- "requiresRefs": [
2507
- {
2508
- "field": "poolId",
2509
- "statuses": [
2510
- "cycle_1_ready"
2511
- ]
2512
- }
2513
- ],
2514
- "steps": [],
2515
- "summary": "Pay this member's stored contribution into cycle 1's shared pot recipient"
2516
- },
2517
- "pay_cycle_2": {
2518
- "agentDescription": "Pay this row's funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
2519
- "effects": {
2520
- "moves": [
2521
- {
2522
- "signature": "moves.transfer.internal",
2523
- "source": "moves[0]"
2524
- }
2525
- ],
2526
- "reads": [
2527
- {
2528
- "signature": "reads.requires_refs",
2529
- "source": "requiresRefs"
2530
- }
2531
- ]
2532
- },
2533
- "moves": [
2534
- {
2535
- "bind": {
2536
- "amount": {
2537
- "from": "instance",
2538
- "path": "fields.contributionAmount"
2539
- },
2540
- "currency": {
2541
- "from": "instance",
2542
- "path": "fields.currency"
2543
- },
2544
- "destinationAccountId": {
2545
- "from": "instance",
2546
- "path": "fields.memberCAccountId"
2547
- },
2548
- "metadata.instrumentId": {
2549
- "from": "const",
2550
- "value": "pool_member_b_contribution"
2551
- },
2552
- "metadata.instrumentInstanceId": {
2553
- "from": "instance",
2554
- "path": "instrumentInstanceId"
2555
- },
2556
- "metadata.phase": {
2557
- "from": "const",
2558
- "value": "pay_cycle_2"
2559
- },
2560
- "productId": {
2561
- "from": "instance",
2562
- "path": "productId"
2563
- },
2564
- "sourceAccountId": {
2565
- "from": "instance",
2566
- "path": "refs.escrowAccountId"
2567
- }
2568
- },
2569
- "capture": {
2570
- "payCycle2PayoutTransferId": "transferId"
2571
- },
2572
- "key": "payout",
2573
- "operation": "internal_transfer.create"
2574
- }
2575
- ],
2576
- "publicAction": "payCycle2PoolMemberBContribution",
2577
- "requiresRefs": [
2578
- {
2579
- "field": "poolId",
2580
- "statuses": [
2581
- "cycle_2_ready"
2582
- ]
2583
- }
2584
- ],
2585
- "steps": [],
2586
- "summary": "Pay this member's stored contribution into cycle 2's shared pot recipient"
2587
- },
2588
- "pay_cycle_3": {
2589
- "agentDescription": "Pay this row's funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
2590
- "effects": {
2591
- "moves": [
2592
- {
2593
- "signature": "moves.transfer.internal",
2594
- "source": "moves[0]"
2595
- }
2596
- ],
2597
- "reads": [
2598
- {
2599
- "signature": "reads.requires_refs",
2600
- "source": "requiresRefs"
2601
- }
2602
- ]
2603
- },
2604
- "moves": [
2605
- {
2606
- "bind": {
2607
- "amount": {
2608
- "from": "instance",
2609
- "path": "fields.contributionAmount"
2610
- },
2611
- "currency": {
2612
- "from": "instance",
2613
- "path": "fields.currency"
2614
- },
2615
- "destinationAccountId": {
2616
- "from": "instance",
2617
- "path": "fields.memberAAccountId"
2618
- },
2619
- "metadata.instrumentId": {
2620
- "from": "const",
2621
- "value": "pool_member_b_contribution"
2622
- },
2623
- "metadata.instrumentInstanceId": {
2624
- "from": "instance",
2625
- "path": "instrumentInstanceId"
2626
- },
2627
- "metadata.phase": {
2628
- "from": "const",
2629
- "value": "pay_cycle_3"
2630
- },
2631
- "productId": {
2632
- "from": "instance",
2633
- "path": "productId"
2634
- },
2635
- "sourceAccountId": {
2636
- "from": "instance",
2637
- "path": "refs.escrowAccountId"
2638
- }
2639
- },
2640
- "capture": {
2641
- "payCycle3PayoutTransferId": "transferId"
2642
- },
2643
- "key": "payout",
2644
- "operation": "internal_transfer.create"
2645
- }
2646
- ],
2647
- "publicAction": "payCycle3PoolMemberBContribution",
2648
- "requiresRefs": [
2649
- {
2650
- "field": "poolId",
2651
- "statuses": [
2652
- "cycle_3_ready"
2653
- ]
2654
- }
2655
- ],
2656
- "steps": [],
2657
- "summary": "Pay this member's stored contribution into cycle 3's shared pot recipient"
2658
- },
2659
- "pay_guaranteed_cycle_1": {
2660
- "agentDescription": "Pay this row's guarantor-funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
2661
- "effects": {
2662
- "moves": [
2663
- {
2664
- "signature": "moves.transfer.internal",
2665
- "source": "moves[0]"
2666
- }
2667
- ],
2668
- "reads": [
2669
- {
2670
- "signature": "reads.requires_refs",
2671
- "source": "requiresRefs"
2672
- }
2673
- ]
2674
- },
2675
- "moves": [
2676
- {
2677
- "bind": {
2678
- "amount": {
2679
- "from": "instance",
2680
- "path": "fields.contributionAmount"
2681
- },
2682
- "currency": {
2683
- "from": "instance",
2684
- "path": "fields.currency"
2685
- },
2686
- "destinationAccountId": {
2687
- "from": "instance",
2688
- "path": "fields.memberBAccountId"
2689
- },
2690
- "metadata.instrumentId": {
2691
- "from": "const",
2692
- "value": "pool_member_b_contribution"
2693
- },
2694
- "metadata.instrumentInstanceId": {
2695
- "from": "instance",
2696
- "path": "instrumentInstanceId"
2697
- },
2698
- "metadata.phase": {
2699
- "from": "const",
2700
- "value": "pay_guaranteed_cycle_1"
2701
- },
2702
- "productId": {
2703
- "from": "instance",
2704
- "path": "productId"
2705
- },
2706
- "sourceAccountId": {
2707
- "from": "instance",
2708
- "path": "refs.escrowAccountId"
2709
- }
2710
- },
2711
- "capture": {
2712
- "payGuaranteedCycle1PayoutTransferId": "transferId"
2713
- },
2714
- "key": "payout",
2715
- "operation": "internal_transfer.create"
2716
- }
2717
- ],
2718
- "publicAction": "payGuaranteedCycle1PoolMemberBContribution",
2719
- "requiresRefs": [
2720
- {
2721
- "field": "poolId",
2722
- "statuses": [
2723
- "cycle_1_ready"
2724
- ]
2725
- }
2726
- ],
2727
- "steps": [],
2728
- "summary": "Pay the funded default into cycle 1's stored recipient"
2729
- },
2730
- "pay_guaranteed_cycle_2": {
2731
- "agentDescription": "Pay this row's guarantor-funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
2732
- "effects": {
2733
- "moves": [
2734
- {
2735
- "signature": "moves.transfer.internal",
2736
- "source": "moves[0]"
2737
- }
2738
- ],
2739
- "reads": [
2740
- {
2741
- "signature": "reads.requires_refs",
2742
- "source": "requiresRefs"
2743
- }
2744
- ]
2745
- },
2746
- "moves": [
2747
- {
2748
- "bind": {
2749
- "amount": {
2750
- "from": "instance",
2751
- "path": "fields.contributionAmount"
2752
- },
2753
- "currency": {
2754
- "from": "instance",
2755
- "path": "fields.currency"
2756
- },
2757
- "destinationAccountId": {
2758
- "from": "instance",
2759
- "path": "fields.memberCAccountId"
2760
- },
2761
- "metadata.instrumentId": {
2762
- "from": "const",
2763
- "value": "pool_member_b_contribution"
2764
- },
2765
- "metadata.instrumentInstanceId": {
2766
- "from": "instance",
2767
- "path": "instrumentInstanceId"
2768
- },
2769
- "metadata.phase": {
2770
- "from": "const",
2771
- "value": "pay_guaranteed_cycle_2"
2772
- },
2773
- "productId": {
2774
- "from": "instance",
2775
- "path": "productId"
2776
- },
2777
- "sourceAccountId": {
2778
- "from": "instance",
2779
- "path": "refs.escrowAccountId"
2780
- }
2781
- },
2782
- "capture": {
2783
- "payGuaranteedCycle2PayoutTransferId": "transferId"
2784
- },
2785
- "key": "payout",
2786
- "operation": "internal_transfer.create"
2787
- }
2788
- ],
2789
- "publicAction": "payGuaranteedCycle2PoolMemberBContribution",
2790
- "requiresRefs": [
2791
- {
2792
- "field": "poolId",
2793
- "statuses": [
2794
- "cycle_2_ready"
2795
- ]
2796
- }
2797
- ],
2798
- "steps": [],
2799
- "summary": "Pay the funded default into cycle 2's stored recipient"
2800
- },
2801
- "pay_guaranteed_cycle_3": {
2802
- "agentDescription": "Pay this row's guarantor-funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
2803
- "effects": {
2804
- "moves": [
2805
- {
2806
- "signature": "moves.transfer.internal",
2807
- "source": "moves[0]"
2808
- }
2809
- ],
2810
- "reads": [
2811
- {
2812
- "signature": "reads.requires_refs",
2813
- "source": "requiresRefs"
2814
- }
2815
- ]
2816
- },
2817
- "moves": [
2818
- {
2819
- "bind": {
2820
- "amount": {
2821
- "from": "instance",
2822
- "path": "fields.contributionAmount"
2823
- },
2824
- "currency": {
2825
- "from": "instance",
2826
- "path": "fields.currency"
2827
- },
2828
- "destinationAccountId": {
2829
- "from": "instance",
2830
- "path": "fields.memberAAccountId"
2831
- },
2832
- "metadata.instrumentId": {
2833
- "from": "const",
2834
- "value": "pool_member_b_contribution"
2835
- },
2836
- "metadata.instrumentInstanceId": {
2837
- "from": "instance",
2838
- "path": "instrumentInstanceId"
2839
- },
2840
- "metadata.phase": {
2841
- "from": "const",
2842
- "value": "pay_guaranteed_cycle_3"
2843
- },
2844
- "productId": {
2845
- "from": "instance",
2846
- "path": "productId"
2847
- },
2848
- "sourceAccountId": {
2849
- "from": "instance",
2850
- "path": "refs.escrowAccountId"
2851
- }
2852
- },
2853
- "capture": {
2854
- "payGuaranteedCycle3PayoutTransferId": "transferId"
2855
- },
2856
- "key": "payout",
2857
- "operation": "internal_transfer.create"
2858
- }
2859
- ],
2860
- "publicAction": "payGuaranteedCycle3PoolMemberBContribution",
2861
- "requiresRefs": [
2862
- {
2863
- "field": "poolId",
2864
- "statuses": [
2865
- "cycle_3_ready"
2866
- ]
2867
- }
2868
- ],
2869
- "steps": [],
2870
- "summary": "Pay the funded default into cycle 3's stored recipient"
2871
- }
2872
- },
2873
- "agentDescription": "One seat in the pool. The member b pays the same contribution every cycle and takes the whole pot on their turn. Every contribution, default, guarantee, and payout for that member happens on this row, never on the pool itself.",
2874
- "description": "Fixed contribution row for member b",
2875
- "fields": {
2876
- "contributionAmount": {
2877
- "description": "Exact contribution amount shared by every cycle",
2878
- "pattern": "^[1-9][0-9]{0,17}$",
2879
- "type": "string"
2880
- },
2881
- "currency": {
2882
- "description": "ISO 4217 currency code",
2883
- "maxLength": 3,
2884
- "minLength": 3,
2885
- "pattern": "^[A-Z]{3}$",
2886
- "type": "string"
2887
- },
2888
- "firstContributionAt": {
2889
- "description": "First due anchor derived from the pool",
2890
- "format": "hyperscale-date-time",
2891
- "type": "string"
2892
- },
2893
- "guarantorAccountId": {
2894
- "description": "The guarantor account",
2895
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
2896
- "type": "string",
2897
- "x-hyperscale-reference-filter": {
2898
- "column": "role",
2899
- "values": [
2900
- "customer_balance"
2901
- ]
2902
- }
2903
- },
2904
- "memberAAccountId": {
2905
- "description": "The member a account",
2906
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
2907
- "type": "string",
2908
- "x-hyperscale-reference-filter": {
2909
- "column": "role",
2910
- "values": [
2911
- "customer_balance"
2912
- ]
2913
- }
2914
- },
2915
- "memberBAccountId": {
2916
- "description": "The member b account",
2917
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
2918
- "type": "string",
2919
- "x-hyperscale-reference-filter": {
2920
- "column": "role",
2921
- "values": [
2922
- "customer_balance"
2923
- ]
2924
- }
2925
- },
2926
- "memberCAccountId": {
2927
- "description": "The member c account",
2928
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
2929
- "type": "string",
2930
- "x-hyperscale-reference-filter": {
2931
- "column": "role",
2932
- "values": [
2933
- "customer_balance"
2934
- ]
2935
- }
2936
- },
2937
- "poolId": {
2938
- "description": "The exact pool",
2939
- "pattern": "^pool_(sandbox|live)_[a-z0-9]{8,64}$",
2940
- "type": "string"
2941
- }
2942
- },
2943
- "id": "pool_member_b_contribution",
2944
- "idPrefix": "zzab",
2945
- "lifecycle": {
2946
- "initial": "cycle_1_due",
2947
- "states": [
2948
- "cycle_1_due",
2949
- "cycle_1_funded",
2950
- "cycle_1_defaulted",
2951
- "cycle_1_guaranteed",
2952
- "cycle_2_due",
2953
- "cycle_2_funded",
2954
- "cycle_2_defaulted",
2955
- "cycle_2_guaranteed",
2956
- "cycle_3_due",
2957
- "cycle_3_funded",
2958
- "cycle_3_defaulted",
2959
- "cycle_3_guaranteed",
2960
- "final_paid",
2961
- "completed"
2962
- ],
2963
- "transitions": {
2964
- "close": {
2965
- "from": [
2966
- "final_paid"
2967
- ],
2968
- "to": "completed"
2969
- },
2970
- "contribute_cycle_1": {
2971
- "from": [
2972
- "cycle_1_due"
2973
- ],
2974
- "to": "cycle_1_funded"
2975
- },
2976
- "contribute_cycle_2": {
2977
- "from": [
2978
- "cycle_2_due"
2979
- ],
2980
- "to": "cycle_2_funded"
2981
- },
2982
- "contribute_cycle_3": {
2983
- "from": [
2984
- "cycle_3_due"
2985
- ],
2986
- "to": "cycle_3_funded"
2987
- },
2988
- "guarantee_cycle_1": {
2989
- "from": [
2990
- "cycle_1_defaulted"
2991
- ],
2992
- "to": "cycle_1_guaranteed"
2993
- },
2994
- "guarantee_cycle_2": {
2995
- "from": [
2996
- "cycle_2_defaulted"
2997
- ],
2998
- "to": "cycle_2_guaranteed"
2999
- },
3000
- "guarantee_cycle_3": {
3001
- "from": [
3002
- "cycle_3_defaulted"
3003
- ],
3004
- "to": "cycle_3_guaranteed"
3005
- },
3006
- "mark_default_cycle_1": {
3007
- "from": [
3008
- "cycle_1_due"
3009
- ],
3010
- "to": "cycle_1_defaulted"
3011
- },
3012
- "mark_default_cycle_2": {
3013
- "from": [
3014
- "cycle_2_due"
3015
- ],
3016
- "to": "cycle_2_defaulted"
3017
- },
3018
- "mark_default_cycle_3": {
3019
- "from": [
3020
- "cycle_3_due"
3021
- ],
3022
- "to": "cycle_3_defaulted"
3023
- },
3024
- "pay_cycle_1": {
3025
- "from": [
3026
- "cycle_1_funded"
3027
- ],
3028
- "to": "cycle_2_due"
3029
- },
3030
- "pay_cycle_2": {
3031
- "from": [
3032
- "cycle_2_funded"
3033
- ],
3034
- "to": "cycle_3_due"
3035
- },
3036
- "pay_cycle_3": {
3037
- "from": [
3038
- "cycle_3_funded"
3039
- ],
3040
- "to": "final_paid"
3041
- },
3042
- "pay_guaranteed_cycle_1": {
3043
- "from": [
3044
- "cycle_1_guaranteed"
3045
- ],
3046
- "to": "cycle_2_due"
3047
- },
3048
- "pay_guaranteed_cycle_2": {
3049
- "from": [
3050
- "cycle_2_guaranteed"
3051
- ],
3052
- "to": "cycle_3_due"
3053
- },
3054
- "pay_guaranteed_cycle_3": {
3055
- "from": [
3056
- "cycle_3_guaranteed"
3057
- ],
3058
- "to": "final_paid"
3059
- }
3060
- }
3061
- },
3062
- "parties": {
3063
- "beneficiary": "memberBAccountId",
3064
- "payer": "guarantorAccountId"
3065
- },
3066
- "required": [
3067
- "memberBAccountId",
3068
- "guarantorAccountId",
3069
- "memberCAccountId",
3070
- "memberAAccountId",
3071
- "contributionAmount",
3072
- "currency",
3073
- "firstContributionAt",
3074
- "poolId"
3075
- ],
3076
- "summary": "member b contribution row",
3077
- "title": "Pool Member b Contribution"
3078
- },
3079
- {
3080
- "actionOrder": [
3081
- "create",
3082
- "contribute_cycle_1",
3083
- "mark_default_cycle_1",
3084
- "guarantee_cycle_1",
3085
- "pay_cycle_1",
3086
- "pay_guaranteed_cycle_1",
3087
- "contribute_cycle_2",
3088
- "mark_default_cycle_2",
3089
- "guarantee_cycle_2",
3090
- "pay_cycle_2",
3091
- "pay_guaranteed_cycle_2",
3092
- "contribute_cycle_3",
3093
- "mark_default_cycle_3",
3094
- "guarantee_cycle_3",
3095
- "pay_cycle_3",
3096
- "pay_guaranteed_cycle_3",
3097
- "close"
3098
- ],
3099
- "actions": {
3100
- "close": {
3101
- "agentDescription": "Retire this member row after its final payout. Refused while the row escrow account still holds anything, so a row can never close over stranded money. No money moves.",
3102
- "moves": [],
3103
- "publicAction": "closePoolMemberCContribution",
3104
- "requiresDrainedAccount": {
3105
- "path": "refs.escrowAccountId"
3106
- },
3107
- "steps": [],
3108
- "summary": "Complete after the final payout drains this member custody"
3109
- },
3110
- "contribute_cycle_1": {
3111
- "due": {
3112
- "field": "firstContributionAt"
3113
- },
3114
- "effects": {
3115
- "moves": [
3116
- {
3117
- "signature": "moves.collection.pay_in",
3118
- "source": "moves[0]"
3119
- }
3120
- ],
3121
- "reads": [
3122
- {
3123
- "signature": "reads.requires_refs",
3124
- "source": "requiresRefs"
3125
- }
3126
- ],
3127
- "schedules": [
3128
- {
3129
- "signature": "schedules.due",
3130
- "source": "due"
3131
- }
3132
- ]
3133
- },
3134
- "moves": [
3135
- {
3136
- "bind": {
3137
- "amount": {
3138
- "from": "instance",
3139
- "path": "fields.contributionAmount"
3140
- },
3141
- "currency": {
3142
- "from": "instance",
3143
- "path": "fields.currency"
3144
- },
3145
- "destinationAccountId": {
3146
- "from": "instance",
3147
- "path": "refs.escrowAccountId"
3148
- },
3149
- "metadata.instrumentId": {
3150
- "from": "const",
3151
- "value": "pool_member_c_contribution"
3152
- },
3153
- "metadata.instrumentInstanceId": {
3154
- "from": "instance",
3155
- "path": "instrumentInstanceId"
3156
- },
3157
- "metadata.phase": {
3158
- "from": "const",
3159
- "value": "contribute_cycle_1"
3160
- },
3161
- "productId": {
3162
- "from": "instance",
3163
- "path": "productId"
3164
- },
3165
- "sourceAccountId": {
3166
- "from": "instance",
3167
- "path": "fields.memberCAccountId"
3168
- }
3169
- },
3170
- "capture": {
3171
- "contributeCycle1ContributionTransferId": "transferId"
3172
- },
3173
- "key": "contribution",
3174
- "operation": "internal_transfer.create"
3175
- }
3176
- ],
3177
- "requiresRefs": [
3178
- {
3179
- "field": "poolId",
3180
- "statuses": [
3181
- "active_cycle_1"
3182
- ]
3183
- }
3184
- ],
3185
- "steps": [],
3186
- "summary": "Fund member c's cycle 1 contribution"
3187
- },
3188
- "contribute_cycle_2": {
3189
- "due": {
3190
- "field": "firstContributionAt",
3191
- "offset": "P30D"
3192
- },
3193
- "effects": {
3194
- "moves": [
3195
- {
3196
- "signature": "moves.collection.pay_in",
3197
- "source": "moves[0]"
3198
- }
3199
- ],
3200
- "reads": [
3201
- {
3202
- "signature": "reads.requires_refs",
3203
- "source": "requiresRefs"
3204
- }
3205
- ],
3206
- "schedules": [
3207
- {
3208
- "signature": "schedules.due",
3209
- "source": "due"
3210
- }
3211
- ]
3212
- },
3213
- "moves": [
3214
- {
3215
- "bind": {
3216
- "amount": {
3217
- "from": "instance",
3218
- "path": "fields.contributionAmount"
3219
- },
3220
- "currency": {
3221
- "from": "instance",
3222
- "path": "fields.currency"
3223
- },
3224
- "destinationAccountId": {
3225
- "from": "instance",
3226
- "path": "refs.escrowAccountId"
3227
- },
3228
- "metadata.instrumentId": {
3229
- "from": "const",
3230
- "value": "pool_member_c_contribution"
3231
- },
3232
- "metadata.instrumentInstanceId": {
3233
- "from": "instance",
3234
- "path": "instrumentInstanceId"
3235
- },
3236
- "metadata.phase": {
3237
- "from": "const",
3238
- "value": "contribute_cycle_2"
3239
- },
3240
- "productId": {
3241
- "from": "instance",
3242
- "path": "productId"
3243
- },
3244
- "sourceAccountId": {
3245
- "from": "instance",
3246
- "path": "fields.memberCAccountId"
3247
- }
3248
- },
3249
- "capture": {
3250
- "contributeCycle2ContributionTransferId": "transferId"
3251
- },
3252
- "key": "contribution",
3253
- "operation": "internal_transfer.create"
3254
- }
3255
- ],
3256
- "requiresRefs": [
3257
- {
3258
- "field": "poolId",
3259
- "statuses": [
3260
- "active_cycle_2"
3261
- ]
3262
- }
3263
- ],
3264
- "steps": [],
3265
- "summary": "Fund member c's cycle 2 contribution"
3266
- },
3267
- "contribute_cycle_3": {
3268
- "due": {
3269
- "field": "firstContributionAt",
3270
- "offset": "P60D"
3271
- },
3272
- "effects": {
3273
- "moves": [
3274
- {
3275
- "signature": "moves.collection.pay_in",
3276
- "source": "moves[0]"
3277
- }
3278
- ],
3279
- "reads": [
3280
- {
3281
- "signature": "reads.requires_refs",
3282
- "source": "requiresRefs"
3283
- }
3284
- ],
3285
- "schedules": [
3286
- {
3287
- "signature": "schedules.due",
3288
- "source": "due"
3289
- }
3290
- ]
3291
- },
3292
- "moves": [
3293
- {
3294
- "bind": {
3295
- "amount": {
3296
- "from": "instance",
3297
- "path": "fields.contributionAmount"
3298
- },
3299
- "currency": {
3300
- "from": "instance",
3301
- "path": "fields.currency"
3302
- },
3303
- "destinationAccountId": {
3304
- "from": "instance",
3305
- "path": "refs.escrowAccountId"
3306
- },
3307
- "metadata.instrumentId": {
3308
- "from": "const",
3309
- "value": "pool_member_c_contribution"
3310
- },
3311
- "metadata.instrumentInstanceId": {
3312
- "from": "instance",
3313
- "path": "instrumentInstanceId"
3314
- },
3315
- "metadata.phase": {
3316
- "from": "const",
3317
- "value": "contribute_cycle_3"
3318
- },
3319
- "productId": {
3320
- "from": "instance",
3321
- "path": "productId"
3322
- },
3323
- "sourceAccountId": {
3324
- "from": "instance",
3325
- "path": "fields.memberCAccountId"
3326
- }
3327
- },
3328
- "capture": {
3329
- "contributeCycle3ContributionTransferId": "transferId"
3330
- },
3331
- "key": "contribution",
3332
- "operation": "internal_transfer.create"
3333
- }
3334
- ],
3335
- "requiresRefs": [
3336
- {
3337
- "field": "poolId",
3338
- "statuses": [
3339
- "active_cycle_3"
3340
- ]
3341
- }
3342
- ],
3343
- "steps": [],
3344
- "summary": "Fund member c's cycle 3 contribution"
3345
- },
3346
- "create": {
3347
- "agentDescription": "Create the contribution row for the member c and provision its escrow account. The pool must still be forming, and every member needs exactly one row before the pool can activate. No money moves.",
3348
- "effects": {
3349
- "reads": [
3350
- {
3351
- "signature": "reads.requires_refs",
3352
- "source": "requiresRefs"
3353
- }
3354
- ]
3355
- },
3356
- "moves": [],
3357
- "publicAction": "createPoolMemberCContribution",
3358
- "requiresRefs": [
3359
- {
3360
- "bind": {
3361
- "contributionAmount": "fields.contributionAmount",
3362
- "currency": "fields.currency",
3363
- "firstContributionAt": "fields.firstContributionAt",
3364
- "guarantorAccountId": "fields.guarantorAccountId",
3365
- "memberAAccountId": "fields.memberAAccountId",
3366
- "memberBAccountId": "fields.memberBAccountId",
3367
- "memberCAccountId": "fields.memberCAccountId"
3368
- },
3369
- "field": "poolId",
3370
- "statuses": [
3371
- "forming"
3372
- ],
3373
- "unique": true
3374
- }
3375
- ],
3376
- "steps": [
3377
- {
3378
- "bind": {
3379
- "currency": {
3380
- "from": "instance",
3381
- "path": "fields.currency"
3382
- },
3383
- "owner.id": {
3384
- "from": "instance",
3385
- "path": "productId"
3386
- },
3387
- "owner.type": {
3388
- "from": "const",
3389
- "value": "product"
3390
- },
3391
- "productId": {
3392
- "from": "instance",
3393
- "path": "productId"
3394
- },
3395
- "role": {
3396
- "from": "const",
3397
- "value": "product_escrow"
3398
- }
3399
- },
3400
- "capture": {
3401
- "escrowAccountId": "accountId"
3402
- },
3403
- "operation": "account.escrow.provision"
3404
- }
3405
- ],
3406
- "summary": "Create the fixed contribution row for member c"
3407
- },
3408
- "guarantee_cycle_1": {
3409
- "agentDescription": "Have the guarantor fund cycle 1 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
3410
- "effects": {
3411
- "moves": [
3412
- {
3413
- "signature": "moves.collection.pay_in",
3414
- "source": "moves[0]"
3415
- }
3416
- ],
3417
- "reads": [
3418
- {
3419
- "signature": "reads.requires_refs",
3420
- "source": "requiresRefs"
3421
- }
3422
- ]
3423
- },
3424
- "moves": [
3425
- {
3426
- "bind": {
3427
- "amount": {
3428
- "from": "instance",
3429
- "path": "fields.contributionAmount"
3430
- },
3431
- "currency": {
3432
- "from": "instance",
3433
- "path": "fields.currency"
3434
- },
3435
- "destinationAccountId": {
3436
- "from": "instance",
3437
- "path": "refs.escrowAccountId"
3438
- },
3439
- "metadata.instrumentId": {
3440
- "from": "const",
3441
- "value": "pool_member_c_contribution"
3442
- },
3443
- "metadata.instrumentInstanceId": {
3444
- "from": "instance",
3445
- "path": "instrumentInstanceId"
3446
- },
3447
- "metadata.phase": {
3448
- "from": "const",
3449
- "value": "guarantee_cycle_1"
3450
- },
3451
- "productId": {
3452
- "from": "instance",
3453
- "path": "productId"
3454
- },
3455
- "sourceAccountId": {
3456
- "from": "instance",
3457
- "path": "fields.guarantorAccountId"
3458
- }
3459
- },
3460
- "capture": {
3461
- "guaranteeCycle1GuaranteeTransferId": "transferId"
3462
- },
3463
- "key": "guarantee",
3464
- "operation": "internal_transfer.create"
3465
- }
3466
- ],
3467
- "publicAction": "guaranteeCycle1PoolMemberCContribution",
3468
- "requiresRefs": [
3469
- {
3470
- "field": "poolId",
3471
- "statuses": [
3472
- "active_cycle_1"
3473
- ]
3474
- }
3475
- ],
3476
- "steps": [],
3477
- "summary": "Fund the defaulted cycle 1 amount before payout"
3478
- },
3479
- "guarantee_cycle_2": {
3480
- "agentDescription": "Have the guarantor fund cycle 2 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
3481
- "effects": {
3482
- "moves": [
3483
- {
3484
- "signature": "moves.collection.pay_in",
3485
- "source": "moves[0]"
3486
- }
3487
- ],
3488
- "reads": [
3489
- {
3490
- "signature": "reads.requires_refs",
3491
- "source": "requiresRefs"
3492
- }
3493
- ]
3494
- },
3495
- "moves": [
3496
- {
3497
- "bind": {
3498
- "amount": {
3499
- "from": "instance",
3500
- "path": "fields.contributionAmount"
3501
- },
3502
- "currency": {
3503
- "from": "instance",
3504
- "path": "fields.currency"
3505
- },
3506
- "destinationAccountId": {
3507
- "from": "instance",
3508
- "path": "refs.escrowAccountId"
3509
- },
3510
- "metadata.instrumentId": {
3511
- "from": "const",
3512
- "value": "pool_member_c_contribution"
3513
- },
3514
- "metadata.instrumentInstanceId": {
3515
- "from": "instance",
3516
- "path": "instrumentInstanceId"
3517
- },
3518
- "metadata.phase": {
3519
- "from": "const",
3520
- "value": "guarantee_cycle_2"
3521
- },
3522
- "productId": {
3523
- "from": "instance",
3524
- "path": "productId"
3525
- },
3526
- "sourceAccountId": {
3527
- "from": "instance",
3528
- "path": "fields.guarantorAccountId"
3529
- }
3530
- },
3531
- "capture": {
3532
- "guaranteeCycle2GuaranteeTransferId": "transferId"
3533
- },
3534
- "key": "guarantee",
3535
- "operation": "internal_transfer.create"
3536
- }
3537
- ],
3538
- "publicAction": "guaranteeCycle2PoolMemberCContribution",
3539
- "requiresRefs": [
3540
- {
3541
- "field": "poolId",
3542
- "statuses": [
3543
- "active_cycle_2"
3544
- ]
3545
- }
3546
- ],
3547
- "steps": [],
3548
- "summary": "Fund the defaulted cycle 2 amount before payout"
3549
- },
3550
- "guarantee_cycle_3": {
3551
- "agentDescription": "Have the guarantor fund cycle 3 for this member after the row defaulted. The row must be marked defaulted for that cycle. This moves the guarantor's money into the row escrow so the pot still pays in full.",
3552
- "effects": {
3553
- "moves": [
3554
- {
3555
- "signature": "moves.collection.pay_in",
3556
- "source": "moves[0]"
3557
- }
3558
- ],
3559
- "reads": [
3560
- {
3561
- "signature": "reads.requires_refs",
3562
- "source": "requiresRefs"
3563
- }
3564
- ]
3565
- },
3566
- "moves": [
3567
- {
3568
- "bind": {
3569
- "amount": {
3570
- "from": "instance",
3571
- "path": "fields.contributionAmount"
3572
- },
3573
- "currency": {
3574
- "from": "instance",
3575
- "path": "fields.currency"
3576
- },
3577
- "destinationAccountId": {
3578
- "from": "instance",
3579
- "path": "refs.escrowAccountId"
3580
- },
3581
- "metadata.instrumentId": {
3582
- "from": "const",
3583
- "value": "pool_member_c_contribution"
3584
- },
3585
- "metadata.instrumentInstanceId": {
3586
- "from": "instance",
3587
- "path": "instrumentInstanceId"
3588
- },
3589
- "metadata.phase": {
3590
- "from": "const",
3591
- "value": "guarantee_cycle_3"
3592
- },
3593
- "productId": {
3594
- "from": "instance",
3595
- "path": "productId"
3596
- },
3597
- "sourceAccountId": {
3598
- "from": "instance",
3599
- "path": "fields.guarantorAccountId"
3600
- }
3601
- },
3602
- "capture": {
3603
- "guaranteeCycle3GuaranteeTransferId": "transferId"
3604
- },
3605
- "key": "guarantee",
3606
- "operation": "internal_transfer.create"
3607
- }
3608
- ],
3609
- "publicAction": "guaranteeCycle3PoolMemberCContribution",
3610
- "requiresRefs": [
3611
- {
3612
- "field": "poolId",
3613
- "statuses": [
3614
- "active_cycle_3"
3615
- ]
3616
- }
3617
- ],
3618
- "steps": [],
3619
- "summary": "Fund the defaulted cycle 3 amount before payout"
3620
- },
3621
- "mark_default_cycle_1": {
3622
- "due": {
3623
- "field": "firstContributionAt"
3624
- },
3625
- "effects": {
3626
- "reads": [
3627
- {
3628
- "signature": "reads.requires_refs",
3629
- "source": "requiresRefs"
3630
- }
3631
- ],
3632
- "schedules": [
3633
- {
3634
- "signature": "schedules.due",
3635
- "source": "due"
3636
- }
3637
- ]
3638
- },
3639
- "moves": [],
3640
- "requiresRefs": [
3641
- {
3642
- "field": "poolId",
3643
- "statuses": [
3644
- "active_cycle_1"
3645
- ]
3646
- }
3647
- ],
3648
- "steps": [],
3649
- "summary": "Mark the stored cycle 1 due condition"
3650
- },
3651
- "mark_default_cycle_2": {
3652
- "due": {
3653
- "field": "firstContributionAt",
3654
- "offset": "P30D"
3655
- },
3656
- "effects": {
3657
- "reads": [
3658
- {
3659
- "signature": "reads.requires_refs",
3660
- "source": "requiresRefs"
3661
- }
3662
- ],
3663
- "schedules": [
3664
- {
3665
- "signature": "schedules.due",
3666
- "source": "due"
3667
- }
3668
- ]
3669
- },
3670
- "moves": [],
3671
- "requiresRefs": [
3672
- {
3673
- "field": "poolId",
3674
- "statuses": [
3675
- "active_cycle_2"
3676
- ]
3677
- }
3678
- ],
3679
- "steps": [],
3680
- "summary": "Mark the stored cycle 2 due condition"
3681
- },
3682
- "mark_default_cycle_3": {
3683
- "due": {
3684
- "field": "firstContributionAt",
3685
- "offset": "P60D"
3686
- },
3687
- "effects": {
3688
- "reads": [
3689
- {
3690
- "signature": "reads.requires_refs",
3691
- "source": "requiresRefs"
3692
- }
3693
- ],
3694
- "schedules": [
3695
- {
3696
- "signature": "schedules.due",
3697
- "source": "due"
3698
- }
3699
- ]
3700
- },
3701
- "moves": [],
3702
- "requiresRefs": [
3703
- {
3704
- "field": "poolId",
3705
- "statuses": [
3706
- "active_cycle_3"
3707
- ]
3708
- }
3709
- ],
3710
- "steps": [],
3711
- "summary": "Mark the stored cycle 3 due condition"
3712
- },
3713
- "pay_cycle_1": {
3714
- "agentDescription": "Pay this row's funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
3715
- "effects": {
3716
- "moves": [
3717
- {
3718
- "signature": "moves.transfer.internal",
3719
- "source": "moves[0]"
3720
- }
3721
- ],
3722
- "reads": [
3723
- {
3724
- "signature": "reads.requires_refs",
3725
- "source": "requiresRefs"
3726
- }
3727
- ]
3728
- },
3729
- "moves": [
3730
- {
3731
- "bind": {
3732
- "amount": {
3733
- "from": "instance",
3734
- "path": "fields.contributionAmount"
3735
- },
3736
- "currency": {
3737
- "from": "instance",
3738
- "path": "fields.currency"
3739
- },
3740
- "destinationAccountId": {
3741
- "from": "instance",
3742
- "path": "fields.memberBAccountId"
3743
- },
3744
- "metadata.instrumentId": {
3745
- "from": "const",
3746
- "value": "pool_member_c_contribution"
3747
- },
3748
- "metadata.instrumentInstanceId": {
3749
- "from": "instance",
3750
- "path": "instrumentInstanceId"
3751
- },
3752
- "metadata.phase": {
3753
- "from": "const",
3754
- "value": "pay_cycle_1"
3755
- },
3756
- "productId": {
3757
- "from": "instance",
3758
- "path": "productId"
3759
- },
3760
- "sourceAccountId": {
3761
- "from": "instance",
3762
- "path": "refs.escrowAccountId"
3763
- }
3764
- },
3765
- "capture": {
3766
- "payCycle1PayoutTransferId": "transferId"
3767
- },
3768
- "key": "payout",
3769
- "operation": "internal_transfer.create"
3770
- }
3771
- ],
3772
- "publicAction": "payCycle1PoolMemberCContribution",
3773
- "requiresRefs": [
3774
- {
3775
- "field": "poolId",
3776
- "statuses": [
3777
- "cycle_1_ready"
3778
- ]
3779
- }
3780
- ],
3781
- "steps": [],
3782
- "summary": "Pay this member's stored contribution into cycle 1's shared pot recipient"
3783
- },
3784
- "pay_cycle_2": {
3785
- "agentDescription": "Pay this row's funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
3786
- "effects": {
3787
- "moves": [
3788
- {
3789
- "signature": "moves.transfer.internal",
3790
- "source": "moves[0]"
3791
- }
3792
- ],
3793
- "reads": [
3794
- {
3795
- "signature": "reads.requires_refs",
3796
- "source": "requiresRefs"
3797
- }
3798
- ]
3799
- },
3800
- "moves": [
3801
- {
3802
- "bind": {
3803
- "amount": {
3804
- "from": "instance",
3805
- "path": "fields.contributionAmount"
3806
- },
3807
- "currency": {
3808
- "from": "instance",
3809
- "path": "fields.currency"
3810
- },
3811
- "destinationAccountId": {
3812
- "from": "instance",
3813
- "path": "fields.memberCAccountId"
3814
- },
3815
- "metadata.instrumentId": {
3816
- "from": "const",
3817
- "value": "pool_member_c_contribution"
3818
- },
3819
- "metadata.instrumentInstanceId": {
3820
- "from": "instance",
3821
- "path": "instrumentInstanceId"
3822
- },
3823
- "metadata.phase": {
3824
- "from": "const",
3825
- "value": "pay_cycle_2"
3826
- },
3827
- "productId": {
3828
- "from": "instance",
3829
- "path": "productId"
3830
- },
3831
- "sourceAccountId": {
3832
- "from": "instance",
3833
- "path": "refs.escrowAccountId"
3834
- }
3835
- },
3836
- "capture": {
3837
- "payCycle2PayoutTransferId": "transferId"
3838
- },
3839
- "key": "payout",
3840
- "operation": "internal_transfer.create"
3841
- }
3842
- ],
3843
- "publicAction": "payCycle2PoolMemberCContribution",
3844
- "requiresRefs": [
3845
- {
3846
- "field": "poolId",
3847
- "statuses": [
3848
- "cycle_2_ready"
3849
- ]
3850
- }
3851
- ],
3852
- "steps": [],
3853
- "summary": "Pay this member's stored contribution into cycle 2's shared pot recipient"
3854
- },
3855
- "pay_cycle_3": {
3856
- "agentDescription": "Pay this row's funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be funded rather than guaranteed. This moves money and does not reverse.",
3857
- "effects": {
3858
- "moves": [
3859
- {
3860
- "signature": "moves.transfer.internal",
3861
- "source": "moves[0]"
3862
- }
3863
- ],
3864
- "reads": [
3865
- {
3866
- "signature": "reads.requires_refs",
3867
- "source": "requiresRefs"
3868
- }
3869
- ]
3870
- },
3871
- "moves": [
3872
- {
3873
- "bind": {
3874
- "amount": {
3875
- "from": "instance",
3876
- "path": "fields.contributionAmount"
3877
- },
3878
- "currency": {
3879
- "from": "instance",
3880
- "path": "fields.currency"
3881
- },
3882
- "destinationAccountId": {
3883
- "from": "instance",
3884
- "path": "fields.memberAAccountId"
3885
- },
3886
- "metadata.instrumentId": {
3887
- "from": "const",
3888
- "value": "pool_member_c_contribution"
3889
- },
3890
- "metadata.instrumentInstanceId": {
3891
- "from": "instance",
3892
- "path": "instrumentInstanceId"
3893
- },
3894
- "metadata.phase": {
3895
- "from": "const",
3896
- "value": "pay_cycle_3"
3897
- },
3898
- "productId": {
3899
- "from": "instance",
3900
- "path": "productId"
3901
- },
3902
- "sourceAccountId": {
3903
- "from": "instance",
3904
- "path": "refs.escrowAccountId"
3905
- }
3906
- },
3907
- "capture": {
3908
- "payCycle3PayoutTransferId": "transferId"
3909
- },
3910
- "key": "payout",
3911
- "operation": "internal_transfer.create"
3912
- }
3913
- ],
3914
- "publicAction": "payCycle3PoolMemberCContribution",
3915
- "requiresRefs": [
3916
- {
3917
- "field": "poolId",
3918
- "statuses": [
3919
- "cycle_3_ready"
3920
- ]
3921
- }
3922
- ],
3923
- "steps": [],
3924
- "summary": "Pay this member's stored contribution into cycle 3's shared pot recipient"
3925
- },
3926
- "pay_guaranteed_cycle_1": {
3927
- "agentDescription": "Pay this row's guarantor-funded cycle 1 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
3928
- "effects": {
3929
- "moves": [
3930
- {
3931
- "signature": "moves.transfer.internal",
3932
- "source": "moves[0]"
3933
- }
3934
- ],
3935
- "reads": [
3936
- {
3937
- "signature": "reads.requires_refs",
3938
- "source": "requiresRefs"
3939
- }
3940
- ]
3941
- },
3942
- "moves": [
3943
- {
3944
- "bind": {
3945
- "amount": {
3946
- "from": "instance",
3947
- "path": "fields.contributionAmount"
3948
- },
3949
- "currency": {
3950
- "from": "instance",
3951
- "path": "fields.currency"
3952
- },
3953
- "destinationAccountId": {
3954
- "from": "instance",
3955
- "path": "fields.memberBAccountId"
3956
- },
3957
- "metadata.instrumentId": {
3958
- "from": "const",
3959
- "value": "pool_member_c_contribution"
3960
- },
3961
- "metadata.instrumentInstanceId": {
3962
- "from": "instance",
3963
- "path": "instrumentInstanceId"
3964
- },
3965
- "metadata.phase": {
3966
- "from": "const",
3967
- "value": "pay_guaranteed_cycle_1"
3968
- },
3969
- "productId": {
3970
- "from": "instance",
3971
- "path": "productId"
3972
- },
3973
- "sourceAccountId": {
3974
- "from": "instance",
3975
- "path": "refs.escrowAccountId"
3976
- }
3977
- },
3978
- "capture": {
3979
- "payGuaranteedCycle1PayoutTransferId": "transferId"
3980
- },
3981
- "key": "payout",
3982
- "operation": "internal_transfer.create"
3983
- }
3984
- ],
3985
- "publicAction": "payGuaranteedCycle1PoolMemberCContribution",
3986
- "requiresRefs": [
3987
- {
3988
- "field": "poolId",
3989
- "statuses": [
3990
- "cycle_1_ready"
3991
- ]
3992
- }
3993
- ],
3994
- "steps": [],
3995
- "summary": "Pay the funded default into cycle 1's stored recipient"
3996
- },
3997
- "pay_guaranteed_cycle_2": {
3998
- "agentDescription": "Pay this row's guarantor-funded cycle 2 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
3999
- "effects": {
4000
- "moves": [
4001
- {
4002
- "signature": "moves.transfer.internal",
4003
- "source": "moves[0]"
4004
- }
4005
- ],
4006
- "reads": [
4007
- {
4008
- "signature": "reads.requires_refs",
4009
- "source": "requiresRefs"
4010
- }
4011
- ]
4012
- },
4013
- "moves": [
4014
- {
4015
- "bind": {
4016
- "amount": {
4017
- "from": "instance",
4018
- "path": "fields.contributionAmount"
4019
- },
4020
- "currency": {
4021
- "from": "instance",
4022
- "path": "fields.currency"
4023
- },
4024
- "destinationAccountId": {
4025
- "from": "instance",
4026
- "path": "fields.memberCAccountId"
4027
- },
4028
- "metadata.instrumentId": {
4029
- "from": "const",
4030
- "value": "pool_member_c_contribution"
4031
- },
4032
- "metadata.instrumentInstanceId": {
4033
- "from": "instance",
4034
- "path": "instrumentInstanceId"
4035
- },
4036
- "metadata.phase": {
4037
- "from": "const",
4038
- "value": "pay_guaranteed_cycle_2"
4039
- },
4040
- "productId": {
4041
- "from": "instance",
4042
- "path": "productId"
4043
- },
4044
- "sourceAccountId": {
4045
- "from": "instance",
4046
- "path": "refs.escrowAccountId"
4047
- }
4048
- },
4049
- "capture": {
4050
- "payGuaranteedCycle2PayoutTransferId": "transferId"
4051
- },
4052
- "key": "payout",
4053
- "operation": "internal_transfer.create"
4054
- }
4055
- ],
4056
- "publicAction": "payGuaranteedCycle2PoolMemberCContribution",
4057
- "requiresRefs": [
4058
- {
4059
- "field": "poolId",
4060
- "statuses": [
4061
- "cycle_2_ready"
4062
- ]
4063
- }
4064
- ],
4065
- "steps": [],
4066
- "summary": "Pay the funded default into cycle 2's stored recipient"
4067
- },
4068
- "pay_guaranteed_cycle_3": {
4069
- "agentDescription": "Pay this row's guarantor-funded cycle 3 contribution out of escrow to whoever holds the pot that cycle. The cycle must be locked first and the row must be guaranteed rather than funded. This moves money and does not reverse.",
4070
- "effects": {
4071
- "moves": [
4072
- {
4073
- "signature": "moves.transfer.internal",
4074
- "source": "moves[0]"
4075
- }
4076
- ],
4077
- "reads": [
4078
- {
4079
- "signature": "reads.requires_refs",
4080
- "source": "requiresRefs"
4081
- }
4082
- ]
4083
- },
4084
- "moves": [
4085
- {
4086
- "bind": {
4087
- "amount": {
4088
- "from": "instance",
4089
- "path": "fields.contributionAmount"
4090
- },
4091
- "currency": {
4092
- "from": "instance",
4093
- "path": "fields.currency"
4094
- },
4095
- "destinationAccountId": {
4096
- "from": "instance",
4097
- "path": "fields.memberAAccountId"
4098
- },
4099
- "metadata.instrumentId": {
4100
- "from": "const",
4101
- "value": "pool_member_c_contribution"
4102
- },
4103
- "metadata.instrumentInstanceId": {
4104
- "from": "instance",
4105
- "path": "instrumentInstanceId"
4106
- },
4107
- "metadata.phase": {
4108
- "from": "const",
4109
- "value": "pay_guaranteed_cycle_3"
4110
- },
4111
- "productId": {
4112
- "from": "instance",
4113
- "path": "productId"
4114
- },
4115
- "sourceAccountId": {
4116
- "from": "instance",
4117
- "path": "refs.escrowAccountId"
4118
- }
4119
- },
4120
- "capture": {
4121
- "payGuaranteedCycle3PayoutTransferId": "transferId"
4122
- },
4123
- "key": "payout",
4124
- "operation": "internal_transfer.create"
4125
- }
4126
- ],
4127
- "publicAction": "payGuaranteedCycle3PoolMemberCContribution",
4128
- "requiresRefs": [
4129
- {
4130
- "field": "poolId",
4131
- "statuses": [
4132
- "cycle_3_ready"
4133
- ]
4134
- }
4135
- ],
4136
- "steps": [],
4137
- "summary": "Pay the funded default into cycle 3's stored recipient"
4138
- }
4139
- },
4140
- "agentDescription": "One seat in the pool. The member c pays the same contribution every cycle and takes the whole pot on their turn. Every contribution, default, guarantee, and payout for that member happens on this row, never on the pool itself.",
4141
- "description": "Fixed contribution row for member c",
4142
- "fields": {
4143
- "contributionAmount": {
4144
- "description": "Exact contribution amount shared by every cycle",
4145
- "pattern": "^[1-9][0-9]{0,17}$",
4146
- "type": "string"
4147
- },
4148
- "currency": {
4149
- "description": "ISO 4217 currency code",
4150
- "maxLength": 3,
4151
- "minLength": 3,
4152
- "pattern": "^[A-Z]{3}$",
4153
- "type": "string"
4154
- },
4155
- "firstContributionAt": {
4156
- "description": "First due anchor derived from the pool",
4157
- "format": "hyperscale-date-time",
4158
- "type": "string"
4159
- },
4160
- "guarantorAccountId": {
4161
- "description": "The guarantor account",
4162
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
4163
- "type": "string",
4164
- "x-hyperscale-reference-filter": {
4165
- "column": "role",
4166
- "values": [
4167
- "customer_balance"
4168
- ]
4169
- }
4170
- },
4171
- "memberAAccountId": {
4172
- "description": "The member a account",
4173
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
4174
- "type": "string",
4175
- "x-hyperscale-reference-filter": {
4176
- "column": "role",
4177
- "values": [
4178
- "customer_balance"
4179
- ]
4180
- }
4181
- },
4182
- "memberBAccountId": {
4183
- "description": "The member b account",
4184
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
4185
- "type": "string",
4186
- "x-hyperscale-reference-filter": {
4187
- "column": "role",
4188
- "values": [
4189
- "customer_balance"
4190
- ]
4191
- }
4192
- },
4193
- "memberCAccountId": {
4194
- "description": "The member c account",
4195
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
4196
- "type": "string",
4197
- "x-hyperscale-reference-filter": {
4198
- "column": "role",
4199
- "values": [
4200
- "customer_balance"
4201
- ]
4202
- }
4203
- },
4204
- "poolId": {
4205
- "description": "The exact pool",
4206
- "pattern": "^pool_(sandbox|live)_[a-z0-9]{8,64}$",
4207
- "type": "string"
4208
- }
4209
- },
4210
- "id": "pool_member_c_contribution",
4211
- "idPrefix": "zzac",
4212
- "lifecycle": {
4213
- "initial": "cycle_1_due",
4214
- "states": [
4215
- "cycle_1_due",
4216
- "cycle_1_funded",
4217
- "cycle_1_defaulted",
4218
- "cycle_1_guaranteed",
4219
- "cycle_2_due",
4220
- "cycle_2_funded",
4221
- "cycle_2_defaulted",
4222
- "cycle_2_guaranteed",
4223
- "cycle_3_due",
4224
- "cycle_3_funded",
4225
- "cycle_3_defaulted",
4226
- "cycle_3_guaranteed",
4227
- "final_paid",
4228
- "completed"
4229
- ],
4230
- "transitions": {
4231
- "close": {
4232
- "from": [
4233
- "final_paid"
4234
- ],
4235
- "to": "completed"
4236
- },
4237
- "contribute_cycle_1": {
4238
- "from": [
4239
- "cycle_1_due"
4240
- ],
4241
- "to": "cycle_1_funded"
4242
- },
4243
- "contribute_cycle_2": {
4244
- "from": [
4245
- "cycle_2_due"
4246
- ],
4247
- "to": "cycle_2_funded"
4248
- },
4249
- "contribute_cycle_3": {
4250
- "from": [
4251
- "cycle_3_due"
4252
- ],
4253
- "to": "cycle_3_funded"
4254
- },
4255
- "guarantee_cycle_1": {
4256
- "from": [
4257
- "cycle_1_defaulted"
4258
- ],
4259
- "to": "cycle_1_guaranteed"
4260
- },
4261
- "guarantee_cycle_2": {
4262
- "from": [
4263
- "cycle_2_defaulted"
4264
- ],
4265
- "to": "cycle_2_guaranteed"
4266
- },
4267
- "guarantee_cycle_3": {
4268
- "from": [
4269
- "cycle_3_defaulted"
4270
- ],
4271
- "to": "cycle_3_guaranteed"
4272
- },
4273
- "mark_default_cycle_1": {
4274
- "from": [
4275
- "cycle_1_due"
4276
- ],
4277
- "to": "cycle_1_defaulted"
4278
- },
4279
- "mark_default_cycle_2": {
4280
- "from": [
4281
- "cycle_2_due"
4282
- ],
4283
- "to": "cycle_2_defaulted"
4284
- },
4285
- "mark_default_cycle_3": {
4286
- "from": [
4287
- "cycle_3_due"
4288
- ],
4289
- "to": "cycle_3_defaulted"
4290
- },
4291
- "pay_cycle_1": {
4292
- "from": [
4293
- "cycle_1_funded"
4294
- ],
4295
- "to": "cycle_2_due"
4296
- },
4297
- "pay_cycle_2": {
4298
- "from": [
4299
- "cycle_2_funded"
4300
- ],
4301
- "to": "cycle_3_due"
4302
- },
4303
- "pay_cycle_3": {
4304
- "from": [
4305
- "cycle_3_funded"
4306
- ],
4307
- "to": "final_paid"
4308
- },
4309
- "pay_guaranteed_cycle_1": {
4310
- "from": [
4311
- "cycle_1_guaranteed"
4312
- ],
4313
- "to": "cycle_2_due"
4314
- },
4315
- "pay_guaranteed_cycle_2": {
4316
- "from": [
4317
- "cycle_2_guaranteed"
4318
- ],
4319
- "to": "cycle_3_due"
4320
- },
4321
- "pay_guaranteed_cycle_3": {
4322
- "from": [
4323
- "cycle_3_guaranteed"
4324
- ],
4325
- "to": "final_paid"
4326
- }
4327
- }
4328
- },
4329
- "parties": {
4330
- "beneficiary": "memberCAccountId",
4331
- "payer": "guarantorAccountId"
4332
- },
4333
- "required": [
4334
- "memberCAccountId",
4335
- "guarantorAccountId",
4336
- "memberBAccountId",
4337
- "memberAAccountId",
4338
- "contributionAmount",
4339
- "currency",
4340
- "firstContributionAt",
4341
- "poolId"
4342
- ],
4343
- "summary": "member c contribution row",
4344
- "title": "Pool Member c Contribution"
4345
- }
4346
- ],
4347
- "product": "rotating_pool_example",
4348
- "subjects": [],
4349
- "title": "Rotating pool example",
4350
- "udl": 1,
4351
- "version": 1
4352
- }