@hyperscale0/hsx 1.0.0-rc.1 → 1.0.123

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 (311) hide show
  1. package/CHANGELOG.md +5 -239
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +45 -43
  5. package/bin/hsx.ts +0 -5
  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 -4
  9. package/dist/bin/hsx.js.map +1 -1
  10. package/dist/src/ast.d.ts +113 -302
  11. package/dist/src/ast.d.ts.map +1 -1
  12. package/dist/src/ast.js +7 -47
  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 -17
  23. package/dist/src/cli.d.ts.map +1 -1
  24. package/dist/src/cli.js +92 -259
  25. package/dist/src/cli.js.map +1 -1
  26. package/dist/src/compile.d.ts +34 -68
  27. package/dist/src/compile.d.ts.map +1 -1
  28. package/dist/src/compile.js +2949 -118
  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 +8 -11
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +5 -8
  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 +2 -0
  79. package/dist/src/std-bundle.d.ts.map +1 -0
  80. package/dist/src/std-bundle.js +15 -0
  81. package/dist/src/std-bundle.js.map +1 -0
  82. package/dist/src/std-library.d.ts +5 -0
  83. package/dist/src/std-library.d.ts.map +1 -0
  84. package/dist/src/std-library.js +5 -0
  85. package/dist/src/std-library.js.map +1 -0
  86. package/dist/src/tunables.d.ts +7 -0
  87. package/dist/src/tunables.d.ts.map +1 -0
  88. package/dist/src/tunables.js +27 -0
  89. package/dist/src/tunables.js.map +1 -0
  90. package/docs/README.md +528 -23
  91. package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
  92. package/docs/assets/brand/hsx-horizontal.svg +1 -0
  93. package/docs/assets/brand/hsx-stacked-white.svg +1 -0
  94. package/docs/assets/brand/hsx-stacked.svg +1 -0
  95. package/docs/assets/brand/manifest.json +30 -0
  96. package/docs/assets/hsx.svg +11 -0
  97. package/examples/cards.hsx +34 -0
  98. package/examples/collections.hsx +37 -0
  99. package/examples/cost-table.json +633 -385
  100. package/examples/escrow.hsx +24 -0
  101. package/examples/financing.hsx +32 -0
  102. package/examples/insurance.hsx +30 -0
  103. package/examples/lending.hsx +57 -0
  104. package/examples/library.hsx +15 -0
  105. package/examples/marketplace.hsx +32 -0
  106. package/examples/money.hsx +19 -0
  107. package/examples/rental-deposit.hsx +60 -0
  108. package/examples/repair-approval.hsx +44 -0
  109. package/examples/reporting.hsx +28 -0
  110. package/examples/savings.hsx +21 -0
  111. package/examples/serviced.hsx +25 -0
  112. package/examples/wallet.hsx +24 -0
  113. package/package.json +27 -17
  114. package/src/ast.ts +84 -411
  115. package/src/attachment-economics.ts +103 -0
  116. package/src/binding-contract.ts +104 -0
  117. package/src/cli.ts +98 -309
  118. package/src/compile.ts +4063 -212
  119. package/src/cost.ts +71 -574
  120. package/src/diagnostics.ts +57 -437
  121. package/src/examples-bundle.ts +19 -0
  122. package/src/examples.ts +9 -0
  123. package/src/format.ts +12 -256
  124. package/src/header-source.ts +54 -0
  125. package/src/headers.ts +195 -0
  126. package/src/index.ts +16 -29
  127. package/src/keywords.ts +134 -0
  128. package/src/language.ts +629 -0
  129. package/src/lex.ts +131 -192
  130. package/src/parse.ts +489 -1195
  131. package/src/std-bundle.ts +15 -0
  132. package/src/std-library.ts +7 -0
  133. package/src/tunables.ts +36 -0
  134. package/std/cards.hsx +85 -0
  135. package/std/collections.hsx +90 -0
  136. package/std/escrow.hsx +73 -0
  137. package/std/financing.hsx +683 -0
  138. package/std/insurance.hsx +89 -0
  139. package/std/lending.hsx +138 -0
  140. package/std/marketplace.hsx +123 -0
  141. package/std/money.hsx +173 -0
  142. package/std/reporting.hsx +753 -0
  143. package/std/savings.hsx +68 -0
  144. package/std/wallet.hsx +57 -0
  145. package/LICENSE +0 -661
  146. package/LICENSING.md +0 -52
  147. package/TRADEMARKS.md +0 -35
  148. package/dist/src/emit.d.ts +0 -35
  149. package/dist/src/emit.d.ts.map +0 -1
  150. package/dist/src/emit.js +0 -359
  151. package/dist/src/emit.js.map +0 -1
  152. package/dist/src/entry-overrides.d.ts +0 -58
  153. package/dist/src/entry-overrides.d.ts.map +0 -1
  154. package/dist/src/entry-overrides.js +0 -284
  155. package/dist/src/entry-overrides.js.map +0 -1
  156. package/dist/src/ir.d.ts +0 -66
  157. package/dist/src/ir.d.ts.map +0 -1
  158. package/dist/src/ir.js +0 -15
  159. package/dist/src/ir.js.map +0 -1
  160. package/dist/src/limits.d.ts +0 -21
  161. package/dist/src/limits.d.ts.map +0 -1
  162. package/dist/src/limits.js +0 -21
  163. package/dist/src/limits.js.map +0 -1
  164. package/dist/src/modules.d.ts +0 -36
  165. package/dist/src/modules.d.ts.map +0 -1
  166. package/dist/src/modules.js +0 -372
  167. package/dist/src/modules.js.map +0 -1
  168. package/dist/src/typecheck.d.ts +0 -8
  169. package/dist/src/typecheck.d.ts.map +0 -1
  170. package/dist/src/typecheck.js +0 -2958
  171. package/dist/src/typecheck.js.map +0 -1
  172. package/dist/src/version.d.ts +0 -5
  173. package/dist/src/version.d.ts.map +0 -1
  174. package/dist/src/version.js +0 -5
  175. package/dist/src/version.js.map +0 -1
  176. package/docs/guide/01-first-program.md +0 -24
  177. package/docs/guide/02-money.md +0 -25
  178. package/docs/guide/03-instruments.md +0 -22
  179. package/docs/guide/04-lifecycles.md +0 -25
  180. package/docs/guide/05-fees-and-splits.md +0 -45
  181. package/docs/guide/06-schedules.md +0 -22
  182. package/docs/guide/07-composition.md +0 -46
  183. package/docs/guide/08-writing-a-module.md +0 -26
  184. package/docs/guide/09-cost.md +0 -24
  185. package/docs/guide/10-diagnostics.md +0 -27
  186. package/docs/llms-full.txt +0 -1738
  187. package/docs/llms.txt +0 -45
  188. package/docs/reference/cli.md +0 -33
  189. package/docs/reference/diagnostics.md +0 -619
  190. package/docs/reference/grammar.md +0 -39
  191. package/docs/reference/std/advance.md +0 -35
  192. package/docs/reference/std/cancellable_booking.md +0 -35
  193. package/docs/reference/std/captured_payment.md +0 -43
  194. package/docs/reference/std/conditional_disbursement.md +0 -33
  195. package/docs/reference/std/credit_facility.md +0 -35
  196. package/docs/reference/std/held_payment.md +0 -64
  197. package/docs/reference/std/instant_transfer.md +0 -30
  198. package/docs/reference/std/metered.md +0 -27
  199. package/docs/reference/std/pooled_split.md +0 -26
  200. package/docs/reference/std/premium_forward.md +0 -39
  201. package/docs/reference/std/reconciled_payout.md +0 -33
  202. package/docs/reference/std/recurring_collection.md +0 -25
  203. package/docs/reference/std/rotating_pool.md +0 -42
  204. package/docs/reference/std/scheduled.md +0 -51
  205. package/docs/reference/std/security_deposit.md +0 -46
  206. package/docs/reference/std/settlement_batch.md +0 -42
  207. package/docs/reference/std/swap.md +0 -46
  208. package/docs/reference/std/threshold_pool.md +0 -47
  209. package/docs/reference/std/weighted_distribution.md +0 -39
  210. package/docs/reference/types.md +0 -20
  211. package/docs/reference/udl-output.md +0 -14
  212. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  213. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  214. package/examples/01-first-program/README.md +0 -45
  215. package/examples/01-first-program/tip-jar.hsx +0 -17
  216. package/examples/02-imports-and-archetypes/README.md +0 -99
  217. package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
  218. package/examples/03-diagnostics/README.md +0 -68
  219. package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
  220. package/examples/03-diagnostics/corner-shop.hsx +0 -19
  221. package/examples/04-complete-product/README.md +0 -87
  222. package/examples/04-complete-product/study-hall.hsx +0 -67
  223. package/examples/05-watch-club/README.md +0 -9
  224. package/examples/05-watch-club/watch-club.hsx +0 -124
  225. package/examples/README.md +0 -18
  226. package/examples/advance/README.md +0 -3
  227. package/examples/advance/advance.hsx +0 -13
  228. package/examples/advance/advance.udl +0 -339
  229. package/examples/cancellable_booking/README.md +0 -3
  230. package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
  231. package/examples/cancellable_booking/cancellable_booking.udl +0 -391
  232. package/examples/captured_payment/README.md +0 -3
  233. package/examples/captured_payment/captured_payment.hsx +0 -21
  234. package/examples/captured_payment/captured_payment.udl +0 -677
  235. package/examples/conditional_disbursement/README.md +0 -3
  236. package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
  237. package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
  238. package/examples/credit_facility/README.md +0 -3
  239. package/examples/credit_facility/credit_facility.hsx +0 -27
  240. package/examples/credit_facility/credit_facility.udl +0 -1373
  241. package/examples/held_payment/README.md +0 -3
  242. package/examples/held_payment/held_payment.hsx +0 -13
  243. package/examples/held_payment/held_payment.udl +0 -507
  244. package/examples/instant_transfer/README.md +0 -3
  245. package/examples/instant_transfer/instant_transfer.hsx +0 -16
  246. package/examples/instant_transfer/instant_transfer.udl +0 -364
  247. package/examples/metered/README.md +0 -3
  248. package/examples/metered/metered.hsx +0 -13
  249. package/examples/metered/metered.udl +0 -247
  250. package/examples/pooled_split/README.md +0 -3
  251. package/examples/pooled_split/pooled_split.hsx +0 -15
  252. package/examples/pooled_split/pooled_split.udl +0 -425
  253. package/examples/premium_forward/README.md +0 -3
  254. package/examples/premium_forward/premium_forward.hsx +0 -19
  255. package/examples/premium_forward/premium_forward.udl +0 -594
  256. package/examples/reconciled_payout/README.md +0 -3
  257. package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
  258. package/examples/reconciled_payout/reconciled_payout.udl +0 -303
  259. package/examples/recurring_collection/README.md +0 -3
  260. package/examples/recurring_collection/recurring_collection.hsx +0 -21
  261. package/examples/recurring_collection/recurring_collection.udl +0 -1130
  262. package/examples/rotating_pool/README.md +0 -3
  263. package/examples/rotating_pool/rotating_pool.hsx +0 -18
  264. package/examples/rotating_pool/rotating_pool.udl +0 -4352
  265. package/examples/scheduled/README.md +0 -3
  266. package/examples/scheduled/scheduled.hsx +0 -12
  267. package/examples/scheduled/scheduled.udl +0 -335
  268. package/examples/security_deposit/README.md +0 -3
  269. package/examples/security_deposit/security_deposit.hsx +0 -21
  270. package/examples/security_deposit/security_deposit.udl +0 -293
  271. package/examples/settlement_batch/README.md +0 -3
  272. package/examples/settlement_batch/settlement_batch.hsx +0 -19
  273. package/examples/settlement_batch/settlement_batch.udl +0 -753
  274. package/examples/swap/README.md +0 -3
  275. package/examples/swap/swap.hsx +0 -19
  276. package/examples/swap/swap.udl +0 -876
  277. package/examples/threshold_pool/README.md +0 -3
  278. package/examples/threshold_pool/threshold_pool.hsx +0 -16
  279. package/examples/threshold_pool/threshold_pool.udl +0 -667
  280. package/examples/weighted_distribution/README.md +0 -3
  281. package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
  282. package/examples/weighted_distribution/weighted_distribution.udl +0 -337
  283. package/skills/hsx/SKILL.md +0 -483
  284. package/src/emit.ts +0 -447
  285. package/src/entry-overrides.ts +0 -428
  286. package/src/ir.ts +0 -99
  287. package/src/limits.ts +0 -20
  288. package/src/modules.ts +0 -444
  289. package/src/typecheck.ts +0 -3876
  290. package/src/version.ts +0 -5
  291. package/std/SEMANTICS.md +0 -130
  292. package/std/settlements/advance.hsx +0 -177
  293. package/std/settlements/cancellable_booking.hsx +0 -87
  294. package/std/settlements/captured_payment.hsx +0 -144
  295. package/std/settlements/conditional_disbursement.hsx +0 -185
  296. package/std/settlements/credit_facility.hsx +0 -167
  297. package/std/settlements/held_payment.hsx +0 -578
  298. package/std/settlements/index.hsx +0 -3
  299. package/std/settlements/instant_transfer.hsx +0 -190
  300. package/std/settlements/metered.hsx +0 -67
  301. package/std/settlements/pooled_split.hsx +0 -68
  302. package/std/settlements/premium_forward.hsx +0 -257
  303. package/std/settlements/reconciled_payout.hsx +0 -77
  304. package/std/settlements/recurring_collection.hsx +0 -27
  305. package/std/settlements/rotating_pool.hsx +0 -252
  306. package/std/settlements/scheduled.hsx +0 -641
  307. package/std/settlements/security_deposit.hsx +0 -166
  308. package/std/settlements/settlement_batch.hsx +0 -122
  309. package/std/settlements/swap.hsx +0 -1114
  310. package/std/settlements/threshold_pool.hsx +0 -221
  311. package/std/settlements/weighted_distribution.hsx +0 -141
@@ -1,677 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "create",
6
- "authorize",
7
- "capture",
8
- "capture_more",
9
- "settle",
10
- "void",
11
- "expire",
12
- "settle_on_expiry",
13
- "correct_capture",
14
- "reverse_capture"
15
- ],
16
- "actions": {
17
- "authorize": {
18
- "agentDescription": "Reserve the authorizedAmount against the payer in the payee's favor until reserveUntil. The payment must be created. The money is held, not paid: capture and settle post it, void and expiry release it.",
19
- "effects": {
20
- "holds": [
21
- {
22
- "signature": "holds.reserve",
23
- "source": "moves[0]"
24
- }
25
- ],
26
- "moves": [
27
- {
28
- "signature": "moves.transfer.internal",
29
- "source": "moves[0]"
30
- }
31
- ]
32
- },
33
- "moves": [
34
- {
35
- "bind": {
36
- "amount": {
37
- "from": "instance",
38
- "path": "fields.authorizedAmount"
39
- },
40
- "currency": {
41
- "from": "instance",
42
- "path": "fields.currency"
43
- },
44
- "destinationAccountId": {
45
- "from": "instance",
46
- "path": "fields.payeeAccountId"
47
- },
48
- "metadata.instrumentId": {
49
- "from": "const",
50
- "value": "card_payment"
51
- },
52
- "metadata.instrumentInstanceId": {
53
- "from": "instance",
54
- "path": "instrumentInstanceId"
55
- },
56
- "metadata.phase": {
57
- "from": "const",
58
- "value": "authorize"
59
- },
60
- "productId": {
61
- "from": "instance",
62
- "path": "productId"
63
- },
64
- "sourceAccountId": {
65
- "from": "instance",
66
- "path": "fields.payerAccountId"
67
- }
68
- },
69
- "capture": {
70
- "authorizeReservationTransferId": "transferId"
71
- },
72
- "key": "reservation",
73
- "operation": "internal_transfer.reserve"
74
- }
75
- ],
76
- "publicAction": "authorizeCardPayment",
77
- "steps": [],
78
- "summary": "Reserve the authorizedAmount until reserveUntil"
79
- },
80
- "capture": {
81
- "agentDescription": "Post the first capture slice out of the live reservation. The payment must be authorized and the caller passes captureAmount in minor units. The slice settles for good and void can no longer release the reservation. Call before reserveUntil.",
82
- "deadline": {
83
- "field": "reserveUntil"
84
- },
85
- "effects": {
86
- "moves": [
87
- {
88
- "signature": "moves.transfer.internal",
89
- "source": "moves[0]"
90
- }
91
- ],
92
- "schedules": [
93
- {
94
- "signature": "schedules.deadline",
95
- "source": "deadline"
96
- }
97
- ]
98
- },
99
- "input": {
100
- "additionalProperties": false,
101
- "properties": {
102
- "captureAmount": {
103
- "description": "Positive partial capture amount in minor units",
104
- "pattern": "^[1-9][0-9]{0,17}$",
105
- "type": "string"
106
- }
107
- },
108
- "required": [
109
- "captureAmount"
110
- ],
111
- "type": "object"
112
- },
113
- "moves": [
114
- {
115
- "bind": {
116
- "amount": {
117
- "from": "input",
118
- "path": "captureAmount"
119
- },
120
- "currency": {
121
- "from": "instance",
122
- "path": "fields.currency"
123
- },
124
- "postMode": {
125
- "from": "const",
126
- "value": "partial_only"
127
- },
128
- "transferId": {
129
- "from": "instance",
130
- "path": "refs.authorizeReservationTransferId"
131
- }
132
- },
133
- "capture": {
134
- "capturedAmount": "postedAmount"
135
- },
136
- "key": "post",
137
- "operation": "internal_transfer.post"
138
- }
139
- ],
140
- "publicAction": "captureCardPayment",
141
- "steps": [],
142
- "summary": "Post one strict partial capture slice"
143
- },
144
- "capture_more": {
145
- "agentDescription": "Post another capture slice out of a partly captured reservation. Call this only after capture took the first slice. Each slice settles for good, and the uncaptured remainder still releases at reserveUntil.",
146
- "deadline": {
147
- "field": "reserveUntil"
148
- },
149
- "effects": {
150
- "moves": [
151
- {
152
- "signature": "moves.transfer.internal",
153
- "source": "moves[0]"
154
- }
155
- ],
156
- "schedules": [
157
- {
158
- "signature": "schedules.deadline",
159
- "source": "deadline"
160
- }
161
- ]
162
- },
163
- "input": {
164
- "additionalProperties": false,
165
- "properties": {
166
- "captureAmount": {
167
- "description": "Positive partial capture amount in minor units",
168
- "pattern": "^[1-9][0-9]{0,17}$",
169
- "type": "string"
170
- }
171
- },
172
- "required": [
173
- "captureAmount"
174
- ],
175
- "type": "object"
176
- },
177
- "moves": [
178
- {
179
- "bind": {
180
- "amount": {
181
- "from": "input",
182
- "path": "captureAmount"
183
- },
184
- "currency": {
185
- "from": "instance",
186
- "path": "fields.currency"
187
- },
188
- "postMode": {
189
- "from": "const",
190
- "value": "partial_only"
191
- },
192
- "transferId": {
193
- "from": "instance",
194
- "path": "refs.authorizeReservationTransferId"
195
- }
196
- },
197
- "capture": {
198
- "capturedAmount": "postedAmount"
199
- },
200
- "key": "post",
201
- "operation": "internal_transfer.post"
202
- }
203
- ],
204
- "publicAction": "captureMoreCardPayment",
205
- "steps": [],
206
- "summary": "Post another strict partial capture slice"
207
- },
208
- "correct_capture": {
209
- "agentDescription": "Return the whole captured amount to the payer after the payment settled. Only a settled payment corrects, and only the party the product authorized may call it. The money moves back and there is no undo.",
210
- "effects": {
211
- "decides": [
212
- {
213
- "signature": "decides.tenant_port",
214
- "source": "port"
215
- }
216
- ],
217
- "moves": [
218
- {
219
- "signature": "moves.transfer.internal",
220
- "source": "moves[0]"
221
- }
222
- ]
223
- },
224
- "moves": [
225
- {
226
- "bind": {
227
- "amount": {
228
- "from": "instance",
229
- "path": "refs.capturedAmount"
230
- },
231
- "currency": {
232
- "from": "instance",
233
- "path": "fields.currency"
234
- },
235
- "destinationAccountId": {
236
- "from": "instance",
237
- "path": "fields.payerAccountId"
238
- },
239
- "metadata.clawbackOfTransferId": {
240
- "from": "instance",
241
- "path": "refs.authorizeReservationTransferId"
242
- },
243
- "metadata.instrumentId": {
244
- "from": "const",
245
- "value": "card_payment"
246
- },
247
- "metadata.instrumentInstanceId": {
248
- "from": "instance",
249
- "path": "instrumentInstanceId"
250
- },
251
- "metadata.phase": {
252
- "from": "const",
253
- "value": "correct_capture"
254
- },
255
- "productId": {
256
- "from": "instance",
257
- "path": "productId"
258
- },
259
- "sourceAccountId": {
260
- "from": "instance",
261
- "path": "fields.payeeAccountId"
262
- }
263
- },
264
- "capture": {
265
- "correctCaptureTransferTransferId": "transferId"
266
- },
267
- "key": "transfer",
268
- "operation": "internal_transfer.create"
269
- }
270
- ],
271
- "port": {
272
- "allowedParties": [
273
- "beneficiary"
274
- ]
275
- },
276
- "publicAction": "correctCaptureCardPayment",
277
- "steps": [],
278
- "summary": "Return the full captured amount on payee correction"
279
- },
280
- "create": {
281
- "agentDescription": "Open the payment row before anything is reserved. The caller supplies the authorizedAmount, the currency, and both party accounts. This reserves nothing, call authorize next.",
282
- "moves": [],
283
- "publicAction": "createCardPayment",
284
- "steps": [],
285
- "summary": "Create a card payment"
286
- },
287
- "expire": {
288
- "due": {
289
- "field": "reserveUntil"
290
- },
291
- "effects": {
292
- "moves": [
293
- {
294
- "signature": "moves.transfer.internal",
295
- "source": "moves[0]"
296
- }
297
- ],
298
- "schedules": [
299
- {
300
- "signature": "schedules.due",
301
- "source": "due"
302
- }
303
- ]
304
- },
305
- "moves": [
306
- {
307
- "bind": {
308
- "reason": {
309
- "from": "const",
310
- "value": "Uncaptured reservation expired"
311
- },
312
- "transferId": {
313
- "from": "instance",
314
- "path": "refs.authorizeReservationTransferId"
315
- }
316
- },
317
- "key": "void",
318
- "operation": "internal_transfer.void"
319
- }
320
- ],
321
- "steps": [],
322
- "summary": "Release an uncaptured reservation at expiry"
323
- },
324
- "reverse_capture": {
325
- "agentDescription": "Return the whole captured amount to the payer on an external reversal. The payment must be settled and the call must land before reversalUntil. The caller passes externalReference, which stays in the receipt. There is no undo.",
326
- "captureInput": {
327
- "externalReference": "externalReference"
328
- },
329
- "deadline": {
330
- "field": "reversalUntil"
331
- },
332
- "effects": {
333
- "decides": [
334
- {
335
- "signature": "decides.tenant_port",
336
- "source": "port"
337
- }
338
- ],
339
- "moves": [
340
- {
341
- "signature": "moves.transfer.internal",
342
- "source": "moves[0]"
343
- }
344
- ],
345
- "schedules": [
346
- {
347
- "signature": "schedules.deadline",
348
- "source": "deadline"
349
- }
350
- ]
351
- },
352
- "input": {
353
- "additionalProperties": false,
354
- "properties": {
355
- "externalReference": {
356
- "description": "Required decision reference retained in the operation receipt",
357
- "maxLength": 180,
358
- "minLength": 1,
359
- "type": "string"
360
- }
361
- },
362
- "required": [
363
- "externalReference"
364
- ],
365
- "type": "object"
366
- },
367
- "moves": [
368
- {
369
- "bind": {
370
- "amount": {
371
- "from": "instance",
372
- "path": "refs.capturedAmount"
373
- },
374
- "currency": {
375
- "from": "instance",
376
- "path": "fields.currency"
377
- },
378
- "destinationAccountId": {
379
- "from": "instance",
380
- "path": "fields.payerAccountId"
381
- },
382
- "metadata.clawbackOfTransferId": {
383
- "from": "instance",
384
- "path": "refs.authorizeReservationTransferId"
385
- },
386
- "metadata.instrumentId": {
387
- "from": "const",
388
- "value": "card_payment"
389
- },
390
- "metadata.instrumentInstanceId": {
391
- "from": "instance",
392
- "path": "instrumentInstanceId"
393
- },
394
- "metadata.phase": {
395
- "from": "const",
396
- "value": "reverse_capture"
397
- },
398
- "productId": {
399
- "from": "instance",
400
- "path": "productId"
401
- },
402
- "sourceAccountId": {
403
- "from": "instance",
404
- "path": "fields.payeeAccountId"
405
- }
406
- },
407
- "capture": {
408
- "reverseCaptureTransferTransferId": "transferId"
409
- },
410
- "key": "transfer",
411
- "operation": "internal_transfer.create"
412
- }
413
- ],
414
- "port": {
415
- "allowedParties": [
416
- "beneficiary"
417
- ]
418
- },
419
- "publicAction": "reverseCaptureCardPayment",
420
- "steps": [],
421
- "summary": "Return the full captured amount on an external reversal"
422
- },
423
- "settle": {
424
- "agentDescription": "Post the whole reserved remainder and finish the payment. The payment must be authorized or partly captured. The money settles and the external reversal window opens on reversalUntil.",
425
- "deadline": {
426
- "field": "reserveUntil"
427
- },
428
- "effects": {
429
- "moves": [
430
- {
431
- "signature": "moves.transfer.internal",
432
- "source": "moves[0]"
433
- }
434
- ],
435
- "schedules": [
436
- {
437
- "signature": "schedules.deadline",
438
- "source": "deadline"
439
- }
440
- ]
441
- },
442
- "moves": [
443
- {
444
- "bind": {
445
- "transferId": {
446
- "from": "instance",
447
- "path": "refs.authorizeReservationTransferId"
448
- }
449
- },
450
- "capture": {
451
- "capturedAmount": "postedAmount"
452
- },
453
- "key": "post",
454
- "operation": "internal_transfer.post"
455
- }
456
- ],
457
- "publicAction": "settleCardPayment",
458
- "setsAt": {
459
- "field": "reversalUntil",
460
- "offset": "P14D"
461
- },
462
- "steps": [],
463
- "summary": "Post the full reserved remainder and settle"
464
- },
465
- "settle_on_expiry": {
466
- "due": {
467
- "field": "reserveUntil"
468
- },
469
- "effects": {
470
- "moves": [
471
- {
472
- "signature": "moves.transfer.internal",
473
- "source": "moves[0]"
474
- }
475
- ],
476
- "schedules": [
477
- {
478
- "signature": "schedules.due",
479
- "source": "due"
480
- }
481
- ]
482
- },
483
- "moves": [
484
- {
485
- "bind": {
486
- "reason": {
487
- "from": "const",
488
- "value": "Uncaptured remainder released at expiry"
489
- },
490
- "transferId": {
491
- "from": "instance",
492
- "path": "refs.authorizeReservationTransferId"
493
- }
494
- },
495
- "key": "void",
496
- "operation": "internal_transfer.void"
497
- }
498
- ],
499
- "setsAt": {
500
- "field": "reversalUntil",
501
- "offset": "P14D"
502
- },
503
- "steps": [],
504
- "summary": "Release the uncaptured remainder and settle captured slices"
505
- },
506
- "void": {
507
- "agentDescription": "Release the reservation whole and cancel the payment. Only an authorized reservation with nothing captured can void. Once any slice is captured, settle it or let it expire instead.",
508
- "effects": {
509
- "moves": [
510
- {
511
- "signature": "moves.transfer.internal",
512
- "source": "moves[0]"
513
- }
514
- ]
515
- },
516
- "moves": [
517
- {
518
- "bind": {
519
- "reason": {
520
- "from": "const",
521
- "value": "Reservation voided before any capture"
522
- },
523
- "transferId": {
524
- "from": "instance",
525
- "path": "refs.authorizeReservationTransferId"
526
- }
527
- },
528
- "key": "void",
529
- "operation": "internal_transfer.void"
530
- }
531
- ],
532
- "publicAction": "voidCardPayment",
533
- "steps": [],
534
- "summary": "Release an entirely uncaptured reservation"
535
- }
536
- },
537
- "agentDescription": "Reach for captured payment when the payee reserves against the payer first and then takes the money in slices before reserveUntil. Pick instant transfer when the whole amount moves at once, and deposit when the reservation is claimed or returned whole.",
538
- "description": "Payer reservation captured by the payee in slices within a fixed window",
539
- "fields": {
540
- "authorizedAmount": {
541
- "description": "Maximum captured amount in SAR minor units",
542
- "pattern": "^[1-9][0-9]{0,17}$",
543
- "type": "string"
544
- },
545
- "currency": {
546
- "description": "ISO 4217 currency code",
547
- "maxLength": 3,
548
- "minLength": 3,
549
- "pattern": "^[A-Z]{3}$",
550
- "type": "string"
551
- },
552
- "payeeAccountId": {
553
- "description": "The payee account",
554
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
555
- "type": "string",
556
- "x-hyperscale-reference-filter": {
557
- "column": "role",
558
- "values": [
559
- "customer_balance"
560
- ]
561
- }
562
- },
563
- "payerAccountId": {
564
- "description": "The payer account",
565
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
566
- "type": "string",
567
- "x-hyperscale-reference-filter": {
568
- "column": "role",
569
- "values": [
570
- "customer_balance"
571
- ]
572
- }
573
- },
574
- "reserveUntil": {
575
- "description": "Reservation expiry that releases any uncaptured remainder",
576
- "format": "hyperscale-date-time",
577
- "type": "string"
578
- },
579
- "reversalUntil": {
580
- "description": "Machine-owned external reversal cutoff anchored when settlement completes",
581
- "format": "hyperscale-date-time",
582
- "type": "string"
583
- }
584
- },
585
- "id": "card_payment",
586
- "idPrefix": "cp",
587
- "lifecycle": {
588
- "initial": "created",
589
- "states": [
590
- "created",
591
- "authorized",
592
- "partially_captured",
593
- "settled",
594
- "voided",
595
- "expired",
596
- "corrected",
597
- "reversed"
598
- ],
599
- "transitions": {
600
- "authorize": {
601
- "from": [
602
- "created"
603
- ],
604
- "to": "authorized"
605
- },
606
- "capture": {
607
- "from": [
608
- "authorized"
609
- ],
610
- "to": "partially_captured"
611
- },
612
- "capture_more": {
613
- "from": [
614
- "partially_captured"
615
- ],
616
- "to": "partially_captured"
617
- },
618
- "correct_capture": {
619
- "from": [
620
- "settled"
621
- ],
622
- "to": "corrected"
623
- },
624
- "expire": {
625
- "from": [
626
- "authorized"
627
- ],
628
- "to": "expired"
629
- },
630
- "reverse_capture": {
631
- "from": [
632
- "settled"
633
- ],
634
- "to": "reversed"
635
- },
636
- "settle": {
637
- "from": [
638
- "authorized",
639
- "partially_captured"
640
- ],
641
- "to": "settled"
642
- },
643
- "settle_on_expiry": {
644
- "from": [
645
- "partially_captured"
646
- ],
647
- "to": "settled"
648
- },
649
- "void": {
650
- "from": [
651
- "authorized"
652
- ],
653
- "to": "voided"
654
- }
655
- }
656
- },
657
- "parties": {
658
- "beneficiary": "payeeAccountId",
659
- "payer": "payerAccountId"
660
- },
661
- "required": [
662
- "payerAccountId",
663
- "payeeAccountId",
664
- "authorizedAmount",
665
- "reserveUntil",
666
- "currency"
667
- ],
668
- "summary": "Capture reservation from payer to payee",
669
- "title": "Card payment"
670
- }
671
- ],
672
- "product": "captured_payment_example",
673
- "subjects": [],
674
- "title": "Captured payment example",
675
- "udl": 1,
676
- "version": 1
677
- }
@@ -1,3 +0,0 @@
1
- # conditional_disbursement
2
-
3
- This example applies the `conditional_disbursement` standard-library module. Its sibling UDL file pins the canonical compiler output byte for byte. The company and parties are invented.
@@ -1,17 +0,0 @@
1
- program conditional_disbursement_example "Conditional disbursement example"
2
- import { conditional_disbursement } from "std/settlements"
3
- party source: business
4
- party claimant: person
5
- settlement claim_payment = conditional_disbursement {
6
- source: source
7
- destination: claimant
8
- cap: policyLimit: money(SAR)
9
- amount: approvedAmount: money(SAR)
10
- decision: port approve_claim
11
- reopen_policy: refuse
12
- recovery_policy: separate_transfer
13
- }
14
- port approve_claim {
15
- allowed: [source]
16
- shape: { evidenceReference: text }
17
- }