@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,124 +0,0 @@
1
- // A watch club whose money rules remain explicit from member checkout through
2
- // seller payout. Each item owns its sale, deposit, and trade lifecycle. The
3
- // club membership schedule opens periods but never moves money on a timeout.
4
-
5
- program watch_club "Watch club"
6
-
7
- import {
8
- security_deposit,
9
- instant_transfer,
10
- recurring_collection,
11
- scheduled,
12
- settlement_batch,
13
- swap
14
- } from "std/settlements"
15
-
16
- party member: person
17
- party seller: business
18
- party club: business
19
- party payout_destination: business
20
-
21
- asset watch: good { title_transfer: on_platform }
22
-
23
- settlement purchase = instant_transfer {
24
- payer: member
25
- payee: seller
26
- amount: purchasePrice: money(SAR)
27
- fees {
28
- member: checkoutFee: money(SAR)
29
- seller {
30
- tier {
31
- from: 0
32
- to: 10000
33
- fee: 1%
34
- }
35
- tier {
36
- from: 10000
37
- fee: highValueFee: money(SAR)
38
- }
39
- }
40
- }
41
- }
42
-
43
- settlement inspection_deposit = security_deposit {
44
- payer: member
45
- holder: seller
46
- amount: depositAmount: money(SAR)
47
- claim: port assess_watch
48
- claim_amount: decided {
49
- field: damageAmount
50
- bound: depositAmount
51
- remainder: return
52
- }
53
- return: port return_deposit
54
- }
55
-
56
- settlement membership = scheduled {
57
- mode: obligation
58
- payer: member
59
- payee: club
60
- debtor: member
61
- amount: monthlyFee: money(SAR)
62
- every: P1M
63
- first_due: firstPeriodAt
64
- until: port cancel_membership
65
- month_end: clamp_to_last_day
66
- period_liability: one_open
67
- termination_drain: cancel_membership
68
- mandate: port collect_membership
69
- }
70
-
71
- settlement member_trade = swap {
72
- between: [member, seller]
73
- amounts {
74
- member: memberPays: money(SAR)
75
- seller: sellerPays: money(SAR)
76
- }
77
- fees {
78
- member: memberTradeFee: money(SAR)
79
- seller: sellerTradeFee: money(SAR)
80
- }
81
- release: port confirm_trade
82
- dispute: port resolve_trade within P14D
83
- }
84
-
85
- settlement seller_payout = settlement_batch {
86
- settlement_account: club
87
- source_capture_refs: captureReference
88
- fee_entries: feeReference
89
- external_reversal_offsets: externalReversalReference
90
- close_trigger: closeAt
91
- payout_destination: payout_destination
92
- negative_position: reject
93
- payout_acknowledgement: port acknowledge_payout
94
- payout_beneficiary_ref: payoutBeneficiaryId
95
- }
96
-
97
- port assess_watch {
98
- allowed: [seller]
99
- shape {
100
- damageAmount: money(SAR)
101
- evidence: text
102
- }
103
- }
104
-
105
- port return_deposit { allowed: [seller] }
106
-
107
- port collect_membership {
108
- allowed: [member]
109
- shape { evidenceReference: text }
110
- }
111
-
112
- port cancel_membership {
113
- allowed: [member]
114
- shape { reason: text }
115
- }
116
-
117
- port confirm_trade { allowed: [member, seller] }
118
-
119
- port resolve_trade { allowed: [member, seller] }
120
-
121
- port acknowledge_payout {
122
- allowed: [payout_destination]
123
- shape { acknowledgementReference: text }
124
- }
@@ -1,18 +0,0 @@
1
- # Examples
2
-
3
- Each standard-library module has its own directory with an HSX program, a
4
- short lesson, and pinned canonical UDL bytes. The test suite reads the module
5
- list from `std/settlements`, compiles every program, and compares each emitted
6
- document byte for byte.
7
-
8
- The numbered examples remain as longer lessons. They cover a first program,
9
- imports, diagnostic repair, a composed product, and a multi-instrument club.
10
-
11
- Run an example with the installed CLI:
12
-
13
- ```sh
14
- hsx check examples/instant_transfer/instant_transfer.hsx
15
- hsx build examples/instant_transfer/instant_transfer.hsx --out program.udl
16
- ```
17
-
18
- Every company and person in these files is invented.
@@ -1,3 +0,0 @@
1
- # advance
2
-
3
- This example applies the `advance` standard-library module. Its sibling UDL file pins the canonical compiler output byte for byte. The company and parties are invented.
@@ -1,13 +0,0 @@
1
- program advance_example "Advance example"
2
- import { advance } from "std/settlements"
3
- party funder: business
4
- party recipient: business
5
- settlement advance_payment = advance {
6
- funder: funder
7
- to: recipient
8
- amount: principal: money(SAR)
9
- fee: 2.5%
10
- count: 2
11
- every: P30D
12
- first_due: firstDueAt
13
- }
@@ -1,339 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "create",
6
- "disburse",
7
- "collect_repayment_1",
8
- "collect_repayment_2"
9
- ],
10
- "actions": {
11
- "collect_repayment_1": {
12
- "due": {
13
- "field": "firstDueAt"
14
- },
15
- "effects": {
16
- "moves": [
17
- {
18
- "signature": "moves.transfer.internal",
19
- "source": "moves[0]"
20
- }
21
- ],
22
- "schedules": [
23
- {
24
- "signature": "schedules.due",
25
- "source": "due"
26
- }
27
- ]
28
- },
29
- "moves": [
30
- {
31
- "bind": {
32
- "amount": {
33
- "from": "instance",
34
- "path": "fields.repayment1Amount"
35
- },
36
- "currency": {
37
- "from": "instance",
38
- "path": "fields.currency"
39
- },
40
- "destinationAccountId": {
41
- "from": "instance",
42
- "path": "fields.funderAccountId"
43
- },
44
- "metadata.instrumentId": {
45
- "from": "const",
46
- "value": "advance_payment"
47
- },
48
- "metadata.instrumentInstanceId": {
49
- "from": "instance",
50
- "path": "instrumentInstanceId"
51
- },
52
- "metadata.phase": {
53
- "from": "const",
54
- "value": "collect_repayment_1"
55
- },
56
- "productId": {
57
- "from": "instance",
58
- "path": "productId"
59
- },
60
- "sourceAccountId": {
61
- "from": "instance",
62
- "path": "fields.recipientAccountId"
63
- }
64
- },
65
- "capture": {
66
- "collectRepayment1TransferTransferId": "transferId"
67
- },
68
- "key": "transfer",
69
- "operation": "internal_transfer.create"
70
- }
71
- ],
72
- "steps": [],
73
- "summary": "Collect repayment 1 of 2"
74
- },
75
- "collect_repayment_2": {
76
- "due": {
77
- "field": "firstDueAt",
78
- "offset": "P30D"
79
- },
80
- "effects": {
81
- "moves": [
82
- {
83
- "signature": "moves.transfer.internal",
84
- "source": "moves[0]"
85
- }
86
- ],
87
- "schedules": [
88
- {
89
- "signature": "schedules.due",
90
- "source": "due"
91
- }
92
- ]
93
- },
94
- "moves": [
95
- {
96
- "bind": {
97
- "amount": {
98
- "from": "instance",
99
- "path": "fields.repayment2Amount"
100
- },
101
- "currency": {
102
- "from": "instance",
103
- "path": "fields.currency"
104
- },
105
- "destinationAccountId": {
106
- "from": "instance",
107
- "path": "fields.funderAccountId"
108
- },
109
- "metadata.instrumentId": {
110
- "from": "const",
111
- "value": "advance_payment"
112
- },
113
- "metadata.instrumentInstanceId": {
114
- "from": "instance",
115
- "path": "instrumentInstanceId"
116
- },
117
- "metadata.phase": {
118
- "from": "const",
119
- "value": "collect_repayment_2"
120
- },
121
- "productId": {
122
- "from": "instance",
123
- "path": "productId"
124
- },
125
- "sourceAccountId": {
126
- "from": "instance",
127
- "path": "fields.recipientAccountId"
128
- }
129
- },
130
- "capture": {
131
- "collectRepayment2TransferTransferId": "transferId"
132
- },
133
- "key": "transfer",
134
- "operation": "internal_transfer.create"
135
- }
136
- ],
137
- "steps": [],
138
- "summary": "Collect repayment 2 of 2"
139
- },
140
- "create": {
141
- "agentDescription": "Open the advance row before any money moves. The caller supplies the principal, the fee amount, the repayable total, and the first repayment date. The repayment fields must partition the repayable total exactly. Nothing is disbursed here.",
142
- "moves": [],
143
- "publicAction": "createAdvancePayment",
144
- "steps": [],
145
- "summary": "Create a advance payment"
146
- },
147
- "disburse": {
148
- "agentDescription": "Pay the principal from the funder to the recipient and start the repayment schedule. The advance must be created. The transfer posts straight out and does not unwind. Each repayment is collected on its own stored date anchor.",
149
- "effects": {
150
- "moves": [
151
- {
152
- "signature": "moves.transfer.internal",
153
- "source": "moves[0]"
154
- }
155
- ]
156
- },
157
- "moves": [
158
- {
159
- "bind": {
160
- "amount": {
161
- "from": "instance",
162
- "path": "fields.principal"
163
- },
164
- "currency": {
165
- "from": "instance",
166
- "path": "fields.currency"
167
- },
168
- "destinationAccountId": {
169
- "from": "instance",
170
- "path": "fields.recipientAccountId"
171
- },
172
- "metadata.instrumentId": {
173
- "from": "const",
174
- "value": "advance_payment"
175
- },
176
- "metadata.instrumentInstanceId": {
177
- "from": "instance",
178
- "path": "instrumentInstanceId"
179
- },
180
- "metadata.phase": {
181
- "from": "const",
182
- "value": "disburse"
183
- },
184
- "productId": {
185
- "from": "instance",
186
- "path": "productId"
187
- },
188
- "sourceAccountId": {
189
- "from": "instance",
190
- "path": "fields.funderAccountId"
191
- }
192
- },
193
- "capture": {
194
- "disburseTransferTransferId": "transferId"
195
- },
196
- "key": "transfer",
197
- "operation": "internal_transfer.create"
198
- }
199
- ],
200
- "publicAction": "disburseAdvancePayment",
201
- "steps": [],
202
- "summary": "Disburse the principal to the recipient"
203
- }
204
- },
205
- "agentDescription": "Reach for advance when the funder pays the recipient up front and is repaid afterwards, either out of a carved hold release or over scheduled repayments. Pick deposit for a refundable reservation and instant transfer when nobody repays the payer.",
206
- "description": "Advance: the funder disburses principal to the recipient, repaid over 2 scheduled repayments plus the funder's discount",
207
- "fields": {
208
- "currency": {
209
- "description": "ISO 4217 currency code",
210
- "maxLength": 3,
211
- "minLength": 3,
212
- "pattern": "^[A-Z]{3}$",
213
- "type": "string"
214
- },
215
- "feeAmount": {
216
- "description": "2.5% of principal, the funder's discount repaid on top of the advance",
217
- "pattern": "^[1-9][0-9]{0,17}$",
218
- "type": "string"
219
- },
220
- "firstDueAt": {
221
- "description": "Due date of the first repayment; repayment k falls P30D after its predecessor",
222
- "format": "hyperscale-date-time",
223
- "type": "string"
224
- },
225
- "funderAccountId": {
226
- "description": "The funder account",
227
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
228
- "type": "string",
229
- "x-hyperscale-reference-filter": {
230
- "column": "role",
231
- "values": [
232
- "customer_balance"
233
- ]
234
- }
235
- },
236
- "principal": {
237
- "description": "The advanced amount in SAR minor units, disbursed to the recipient up front",
238
- "pattern": "^[1-9][0-9]{0,17}$",
239
- "type": "string"
240
- },
241
- "recipientAccountId": {
242
- "description": "The recipient account",
243
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
244
- "type": "string",
245
- "x-hyperscale-reference-filter": {
246
- "column": "role",
247
- "values": [
248
- "customer_balance"
249
- ]
250
- }
251
- },
252
- "repayableAmount": {
253
- "description": "principal + feeAmount: the total the repayment fields below partition exactly",
254
- "pattern": "^[1-9][0-9]{0,17}$",
255
- "type": "string"
256
- },
257
- "repayment1Amount": {
258
- "description": "Repayment 1 of 2 (carries the integer-division remainder): about 33.34% of repayableAmount, collected on its own stored-date anchor",
259
- "pattern": "^[1-9][0-9]{0,17}$",
260
- "type": "string"
261
- },
262
- "repayment2Amount": {
263
- "description": "Repayment 2 of 2: about 33.33% of repayableAmount, collected on its own stored-date anchor",
264
- "pattern": "^[1-9][0-9]{0,17}$",
265
- "type": "string"
266
- }
267
- },
268
- "id": "advance_payment",
269
- "idPrefix": "ap",
270
- "lifecycle": {
271
- "initial": "created",
272
- "states": [
273
- "created",
274
- "advanced",
275
- "repaying_1",
276
- "repaid"
277
- ],
278
- "transitions": {
279
- "collect_repayment_1": {
280
- "from": [
281
- "advanced"
282
- ],
283
- "to": "repaying_1"
284
- },
285
- "collect_repayment_2": {
286
- "from": [
287
- "repaying_1"
288
- ],
289
- "to": "repaid"
290
- },
291
- "disburse": {
292
- "from": [
293
- "created"
294
- ],
295
- "to": "advanced"
296
- }
297
- }
298
- },
299
- "parties": {
300
- "beneficiary": "recipientAccountId",
301
- "payer": "funderAccountId"
302
- },
303
- "partitions": [
304
- {
305
- "pieceFields": [
306
- "repayment1Amount",
307
- "repayment2Amount"
308
- ],
309
- "totalField": "repayableAmount"
310
- },
311
- {
312
- "pieceFields": [
313
- "principal",
314
- "feeAmount"
315
- ],
316
- "totalField": "repayableAmount"
317
- }
318
- ],
319
- "required": [
320
- "funderAccountId",
321
- "recipientAccountId",
322
- "principal",
323
- "feeAmount",
324
- "repayableAmount",
325
- "firstDueAt",
326
- "repayment1Amount",
327
- "repayment2Amount",
328
- "currency"
329
- ],
330
- "summary": "Advance to recipient repaid over 2 anchors",
331
- "title": "Advance payment"
332
- }
333
- ],
334
- "product": "advance_example",
335
- "subjects": [],
336
- "title": "Advance example",
337
- "udl": 1,
338
- "version": 1
339
- }
@@ -1,3 +0,0 @@
1
- # cancellable_booking
2
-
3
- This example applies the `cancellable_booking` standard-library module. Its sibling UDL file pins the canonical compiler output byte for byte. The company and parties are invented.
@@ -1,14 +0,0 @@
1
- program cancellable_booking_example "Cancellable booking example"
2
- import { cancellable_booking } from "std/settlements"
3
- party guest: person
4
- party studio: business
5
- settlement studio_session = cancellable_booking {
6
- guest: guest
7
- host: studio
8
- amount: sessionPrice: money(SAR)
9
- starts_at: startsAt
10
- late_penalty_bps: 5000
11
- late_within: P2D
12
- early_penalty_bps: 1000
13
- offer_life: PT30M
14
- }