@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,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
- }