@hyperscale0/hsx 1.0.0-beta.1 → 1.0.0

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 (255) hide show
  1. package/CHANGELOG.md +58 -9
  2. package/LICENSING.md +3 -3
  3. package/README.md +39 -149
  4. package/TRADEMARKS.md +4 -4
  5. package/bin/hsx.ts +2 -0
  6. package/dist/bin/hsx.js +2 -0
  7. package/dist/bin/hsx.js.map +1 -1
  8. package/dist/src/ast.d.ts +135 -10
  9. package/dist/src/ast.d.ts.map +1 -1
  10. package/dist/src/ast.js +24 -0
  11. package/dist/src/ast.js.map +1 -1
  12. package/dist/src/cli.d.ts +4 -1
  13. package/dist/src/cli.d.ts.map +1 -1
  14. package/dist/src/cli.js +172 -16
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/compile.d.ts +42 -7
  17. package/dist/src/compile.d.ts.map +1 -1
  18. package/dist/src/compile.js +82 -16
  19. package/dist/src/compile.js.map +1 -1
  20. package/dist/src/cost.d.ts +78 -0
  21. package/dist/src/cost.d.ts.map +1 -0
  22. package/dist/src/cost.js +369 -0
  23. package/dist/src/cost.js.map +1 -0
  24. package/dist/src/diagnostics.d.ts +11 -0
  25. package/dist/src/diagnostics.d.ts.map +1 -0
  26. package/dist/src/diagnostics.js +420 -0
  27. package/dist/src/diagnostics.js.map +1 -0
  28. package/dist/src/emit.d.ts +34 -0
  29. package/dist/src/emit.d.ts.map +1 -0
  30. package/dist/src/emit.js +137 -0
  31. package/dist/src/emit.js.map +1 -0
  32. package/dist/src/entry-overrides.d.ts +17 -3
  33. package/dist/src/entry-overrides.d.ts.map +1 -1
  34. package/dist/src/entry-overrides.js +180 -35
  35. package/dist/src/entry-overrides.js.map +1 -1
  36. package/dist/src/format.d.ts +10 -0
  37. package/dist/src/format.d.ts.map +1 -0
  38. package/dist/src/format.js +183 -0
  39. package/dist/src/format.js.map +1 -0
  40. package/dist/src/index.d.ts +11 -4
  41. package/dist/src/index.d.ts.map +1 -1
  42. package/dist/src/index.js +10 -3
  43. package/dist/src/index.js.map +1 -1
  44. package/dist/src/ir.d.ts +66 -0
  45. package/dist/src/ir.d.ts.map +1 -0
  46. package/dist/src/ir.js +15 -0
  47. package/dist/src/ir.js.map +1 -0
  48. package/dist/src/lex.d.ts +9 -1
  49. package/dist/src/lex.d.ts.map +1 -1
  50. package/dist/src/lex.js +50 -4
  51. package/dist/src/lex.js.map +1 -1
  52. package/dist/src/limits.d.ts +2 -3
  53. package/dist/src/limits.d.ts.map +1 -1
  54. package/dist/src/limits.js +2 -3
  55. package/dist/src/limits.js.map +1 -1
  56. package/dist/src/lsp/server.d.ts +32 -0
  57. package/dist/src/lsp/server.d.ts.map +1 -0
  58. package/dist/src/lsp/server.js +391 -0
  59. package/dist/src/lsp/server.js.map +1 -0
  60. package/dist/src/modules.d.ts +38 -0
  61. package/dist/src/modules.d.ts.map +1 -0
  62. package/dist/src/modules.js +368 -0
  63. package/dist/src/modules.js.map +1 -0
  64. package/dist/src/parse.d.ts.map +1 -1
  65. package/dist/src/parse.js +590 -17
  66. package/dist/src/parse.js.map +1 -1
  67. package/dist/src/std-bundle.d.ts +2 -0
  68. package/dist/src/std-bundle.d.ts.map +1 -0
  69. package/dist/src/std-bundle.js +88 -0
  70. package/dist/src/std-bundle.js.map +1 -0
  71. package/dist/src/std-library.d.ts +5 -0
  72. package/dist/src/std-library.d.ts.map +1 -0
  73. package/dist/src/std-library.js +9 -0
  74. package/dist/src/std-library.js.map +1 -0
  75. package/dist/src/typecheck.d.ts +8 -0
  76. package/dist/src/typecheck.d.ts.map +1 -0
  77. package/dist/src/typecheck.js +2958 -0
  78. package/dist/src/typecheck.js.map +1 -0
  79. package/dist/src/version.d.ts +4 -15
  80. package/dist/src/version.d.ts.map +1 -1
  81. package/dist/src/version.js +4 -15
  82. package/dist/src/version.js.map +1 -1
  83. package/docs/README.md +26 -0
  84. package/docs/guide/01-first-program.md +24 -0
  85. package/docs/guide/02-money.md +25 -0
  86. package/docs/guide/03-instruments.md +22 -0
  87. package/docs/guide/04-lifecycles.md +25 -0
  88. package/docs/guide/05-fees-and-splits.md +45 -0
  89. package/docs/guide/06-schedules.md +22 -0
  90. package/docs/guide/07-composition.md +46 -0
  91. package/docs/guide/08-writing-a-module.md +26 -0
  92. package/docs/guide/09-cost.md +24 -0
  93. package/docs/guide/10-diagnostics.md +27 -0
  94. package/docs/llms-full.txt +1739 -0
  95. package/docs/llms.txt +45 -0
  96. package/docs/playground.md +54 -0
  97. package/docs/reference/cli.md +35 -0
  98. package/docs/reference/diagnostics.md +619 -0
  99. package/docs/reference/grammar.md +39 -0
  100. package/docs/reference/std/advance.md +35 -0
  101. package/docs/reference/std/cancellable_booking.md +35 -0
  102. package/docs/reference/std/captured_payment.md +43 -0
  103. package/docs/reference/std/conditional_disbursement.md +33 -0
  104. package/docs/reference/std/credit_facility.md +35 -0
  105. package/docs/reference/std/held_payment.md +64 -0
  106. package/docs/reference/std/instant_transfer.md +30 -0
  107. package/docs/reference/std/metered.md +27 -0
  108. package/docs/reference/std/pooled_split.md +26 -0
  109. package/docs/reference/std/premium_forward.md +39 -0
  110. package/docs/reference/std/reconciled_payout.md +33 -0
  111. package/docs/reference/std/recurring_collection.md +25 -0
  112. package/docs/reference/std/rotating_pool.md +42 -0
  113. package/docs/reference/std/scheduled.md +51 -0
  114. package/docs/reference/std/security_deposit.md +46 -0
  115. package/docs/reference/std/settlement_batch.md +42 -0
  116. package/docs/reference/std/swap.md +46 -0
  117. package/docs/reference/std/threshold_pool.md +47 -0
  118. package/docs/reference/std/weighted_distribution.md +39 -0
  119. package/docs/reference/types.md +20 -0
  120. package/docs/reference/udl-output.md +13 -0
  121. package/docs/sessions/2026-09-02-two-instruments.hsx +21 -0
  122. package/docs/sessions/2026-09-02-two-instruments.md +41 -0
  123. package/examples/01-first-program/README.md +45 -0
  124. package/examples/01-first-program/tip-jar.hsx +17 -0
  125. package/examples/02-imports-and-archetypes/README.md +96 -0
  126. package/examples/02-imports-and-archetypes/photo-booth.hsx +37 -0
  127. package/examples/03-diagnostics/README.md +68 -0
  128. package/examples/03-diagnostics/corner-shop-fixed.hsx +22 -0
  129. package/examples/03-diagnostics/corner-shop.hsx +19 -0
  130. package/examples/04-complete-product/README.md +84 -0
  131. package/examples/04-complete-product/study-hall.hsx +67 -0
  132. package/examples/05-watch-club/README.md +9 -0
  133. package/examples/05-watch-club/watch-club.hsx +124 -0
  134. package/examples/README.md +18 -0
  135. package/examples/advance/README.md +3 -0
  136. package/examples/advance/advance.hsx +13 -0
  137. package/examples/advance/advance.udl +339 -0
  138. package/examples/cancellable_booking/README.md +3 -0
  139. package/examples/cancellable_booking/cancellable_booking.hsx +14 -0
  140. package/examples/cancellable_booking/cancellable_booking.udl +391 -0
  141. package/examples/captured_payment/README.md +3 -0
  142. package/examples/captured_payment/captured_payment.hsx +21 -0
  143. package/examples/captured_payment/captured_payment.udl +677 -0
  144. package/examples/conditional_disbursement/README.md +3 -0
  145. package/examples/conditional_disbursement/conditional_disbursement.hsx +17 -0
  146. package/examples/conditional_disbursement/conditional_disbursement.udl +412 -0
  147. package/examples/cost-table.json +386 -0
  148. package/examples/credit_facility/README.md +3 -0
  149. package/examples/credit_facility/credit_facility.hsx +27 -0
  150. package/examples/credit_facility/credit_facility.udl +1373 -0
  151. package/examples/held_payment/README.md +3 -0
  152. package/examples/held_payment/held_payment.hsx +13 -0
  153. package/examples/held_payment/held_payment.udl +507 -0
  154. package/examples/instant_transfer/README.md +3 -0
  155. package/examples/instant_transfer/instant_transfer.hsx +16 -0
  156. package/examples/instant_transfer/instant_transfer.udl +364 -0
  157. package/examples/metered/README.md +3 -0
  158. package/examples/metered/metered.hsx +13 -0
  159. package/examples/metered/metered.udl +247 -0
  160. package/examples/pooled_split/README.md +3 -0
  161. package/examples/pooled_split/pooled_split.hsx +15 -0
  162. package/examples/pooled_split/pooled_split.udl +425 -0
  163. package/examples/premium_forward/README.md +3 -0
  164. package/examples/premium_forward/premium_forward.hsx +19 -0
  165. package/examples/premium_forward/premium_forward.udl +594 -0
  166. package/examples/reconciled_payout/README.md +3 -0
  167. package/examples/reconciled_payout/reconciled_payout.hsx +13 -0
  168. package/examples/reconciled_payout/reconciled_payout.udl +303 -0
  169. package/examples/recurring_collection/README.md +3 -0
  170. package/examples/recurring_collection/recurring_collection.hsx +21 -0
  171. package/examples/recurring_collection/recurring_collection.udl +1130 -0
  172. package/examples/rotating_pool/README.md +3 -0
  173. package/examples/rotating_pool/rotating_pool.hsx +18 -0
  174. package/examples/rotating_pool/rotating_pool.udl +4352 -0
  175. package/examples/scheduled/README.md +3 -0
  176. package/examples/scheduled/scheduled.hsx +12 -0
  177. package/examples/scheduled/scheduled.udl +335 -0
  178. package/examples/security_deposit/README.md +3 -0
  179. package/examples/security_deposit/security_deposit.hsx +21 -0
  180. package/examples/security_deposit/security_deposit.udl +293 -0
  181. package/examples/settlement_batch/README.md +3 -0
  182. package/examples/settlement_batch/settlement_batch.hsx +19 -0
  183. package/examples/settlement_batch/settlement_batch.udl +753 -0
  184. package/examples/swap/README.md +3 -0
  185. package/examples/swap/swap.hsx +19 -0
  186. package/examples/swap/swap.udl +876 -0
  187. package/examples/threshold_pool/README.md +3 -0
  188. package/examples/threshold_pool/threshold_pool.hsx +16 -0
  189. package/examples/threshold_pool/threshold_pool.udl +667 -0
  190. package/examples/weighted_distribution/README.md +3 -0
  191. package/examples/weighted_distribution/weighted_distribution.hsx +20 -0
  192. package/examples/weighted_distribution/weighted_distribution.udl +337 -0
  193. package/package.json +27 -6
  194. package/skills/hsx/SKILL.md +483 -0
  195. package/src/ast.ts +193 -9
  196. package/src/cli.ts +191 -20
  197. package/src/compile.ts +160 -23
  198. package/src/cost.ts +579 -0
  199. package/src/diagnostics.ts +442 -0
  200. package/src/emit.ts +201 -0
  201. package/src/entry-overrides.ts +263 -48
  202. package/src/format.ts +261 -0
  203. package/src/index.ts +34 -4
  204. package/src/ir.ts +99 -0
  205. package/src/lex.ts +59 -4
  206. package/src/limits.ts +2 -3
  207. package/src/lsp/server.ts +460 -0
  208. package/src/modules.ts +446 -0
  209. package/src/parse.ts +655 -21
  210. package/src/std-bundle.ts +91 -0
  211. package/src/std-library.ts +12 -0
  212. package/src/typecheck.ts +3876 -0
  213. package/src/version.ts +4 -16
  214. package/std/SEMANTICS.md +130 -0
  215. package/std/settlements/advance.hsx +177 -0
  216. package/std/settlements/cancellable_booking.hsx +87 -0
  217. package/std/settlements/captured_payment.hsx +144 -0
  218. package/std/settlements/conditional_disbursement.hsx +185 -0
  219. package/std/settlements/credit_facility.hsx +167 -0
  220. package/std/settlements/held_payment.hsx +578 -0
  221. package/std/settlements/index.hsx +3 -0
  222. package/std/settlements/instant_transfer.hsx +190 -0
  223. package/std/settlements/metered.hsx +67 -0
  224. package/std/settlements/pooled_split.hsx +68 -0
  225. package/std/settlements/premium_forward.hsx +257 -0
  226. package/std/settlements/reconciled_payout.hsx +77 -0
  227. package/std/settlements/recurring_collection.hsx +27 -0
  228. package/std/settlements/rotating_pool.hsx +252 -0
  229. package/std/settlements/scheduled.hsx +641 -0
  230. package/std/settlements/security_deposit.hsx +166 -0
  231. package/std/settlements/settlement_batch.hsx +122 -0
  232. package/std/settlements/swap.hsx +1114 -0
  233. package/std/settlements/threshold_pool.hsx +221 -0
  234. package/std/settlements/weighted_distribution.hsx +141 -0
  235. package/dist/src/archetypes.d.ts +0 -17
  236. package/dist/src/archetypes.d.ts.map +0 -1
  237. package/dist/src/archetypes.js +0 -327
  238. package/dist/src/archetypes.js.map +0 -1
  239. package/dist/src/check.d.ts +0 -12
  240. package/dist/src/check.d.ts.map +0 -1
  241. package/dist/src/check.js +0 -1910
  242. package/dist/src/check.js.map +0 -1
  243. package/dist/src/lower.d.ts +0 -146
  244. package/dist/src/lower.d.ts.map +0 -1
  245. package/dist/src/lower.js +0 -4570
  246. package/dist/src/lower.js.map +0 -1
  247. package/dist/src/model.d.ts +0 -467
  248. package/dist/src/model.d.ts.map +0 -1
  249. package/dist/src/model.js +0 -15
  250. package/dist/src/model.js.map +0 -1
  251. package/spec/hsx-ir.schema.json +0 -920
  252. package/src/archetypes.ts +0 -340
  253. package/src/check.ts +0 -2938
  254. package/src/lower.ts +0 -5416
  255. package/src/model.ts +0 -519
@@ -0,0 +1,483 @@
1
+ ---
2
+ name: hsx
3
+ description: Write, review, and repair HSX programs that compile financial-product rules to canonical UDL.
4
+ ---
5
+
6
+ # Write HSX
7
+
8
+ Use this skill when a task creates or changes an `.hsx` program, chooses a standard-library settlement form, explains an HSX diagnostic, or reviews authored money rules. Do not use it to hand-edit canonical UDL or runtime state.
9
+
10
+ ## Program shape
11
+
12
+ One file declares one `program`. Declare parties and assets before using them. Import standard-library instruments from `std/settlements`. Apply each selected instrument as a `settlement`, and declare every decision port it names. A program may also declare general instruments and subjects.
13
+
14
+ Start with [the first-program guide](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/01-first-program.md). Read the generated [grammar](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/grammar.md), [types](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/types.md), and [standard-library pages](https://github.com/hyperscale0/hyperscale-hsx/tree/main/docs/reference/std) for the exact surface.
15
+
16
+ ## Choose a standard instrument
17
+
18
+ Choose the module whose lifecycle and money path already match the product. Do not copy its emitted mechanics into a custom instrument.
19
+
20
+ - `instant_transfer` sends money without custody.
21
+ - `held_payment` holds money until a decision or deadline.
22
+ - `security_deposit` reserves value for a bounded claim or return.
23
+ - `cancellable_booking` quotes a cancellation penalty before commitment.
24
+ - `captured_payment` reserves, captures, settles, voids, or corrects a payment.
25
+ - `scheduled` expands finite installments or a bounded obligation.
26
+ - `recurring_collection` records collection periods.
27
+ - `advance` disburses now against finite repayment or a referenced release.
28
+ - `credit_facility` controls draws against a referenced obligation.
29
+ - `conditional_disbursement` releases a capped amount on stored evidence.
30
+ - `pooled_split`, `weighted_distribution`, and `rotating_pool` divide bounded pools.
31
+ - `threshold_pool` closes a bounded contribution campaign.
32
+ - `premium_forward` holds and forwards an insurance premium.
33
+ - `reconciled_payout` matches an instructed payout against bank evidence.
34
+ - `metered` commits a finite usage rate card for a period.
35
+ - `settlement_batch` closes, calculates, approves, instructs, acknowledges, and reconciles a batch.
36
+ - `swap` exchanges two independently typed sides.
37
+
38
+ The standard library forms are demonstrated below. The marker before each program lets the repository test read the module list from disk and compile one matching example per module.
39
+
40
+ ## Diagnostic loop
41
+
42
+ Run `hsx check` after each coherent edit. Read the first error code, open the [diagnostics reference](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/diagnostics.md), apply the catalog fix, and compile again. Match tools on the stable `HSX####` code, not the message. Never patch emitted UDL to bypass a refusal.
43
+
44
+ ## Money rules
45
+
46
+ - Money uses integer minor units and carries a currency type.
47
+ - Money in different currencies never unifies.
48
+ - Percent literals have basis-point precision.
49
+ - Every percentage partition totals 100 percent.
50
+ - Every computed amount is consumed exactly once.
51
+ - Every held balance drains on each reachable exit.
52
+ - Schedules and comprehensions have compile-time finite bounds.
53
+ - A port supplies typed evidence or a bounded decision. It cannot invent money or a new route.
54
+
55
+ The [money](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/02-money.md), [fees and splits](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/05-fees-and-splits.md), [schedules](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/06-schedules.md), and [cost](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/09-cost.md) chapters explain these rules.
56
+
57
+ ## Standard-library witnesses
58
+
59
+ <!-- hsx-brick: advance -->
60
+
61
+ ```hsx
62
+ program advance_example "Advance example"
63
+ import { advance } from "std/settlements"
64
+ party funder: business
65
+ party recipient: business
66
+ settlement advance_payment = advance {
67
+ funder: funder
68
+ to: recipient
69
+ amount: principal: money(SAR)
70
+ fee: 2.5%
71
+ count: 2
72
+ every: P30D
73
+ first_due: firstDueAt
74
+ }
75
+ ```
76
+
77
+ <!-- hsx-brick: cancellable_booking -->
78
+
79
+ ```hsx
80
+ program cancellable_booking_example "Cancellable booking example"
81
+ import { cancellable_booking } from "std/settlements"
82
+ party guest: person
83
+ party studio: business
84
+ settlement studio_session = cancellable_booking {
85
+ guest: guest
86
+ host: studio
87
+ amount: sessionPrice: money(SAR)
88
+ starts_at: startsAt
89
+ late_penalty_bps: 5000
90
+ late_within: P2D
91
+ early_penalty_bps: 1000
92
+ offer_life: PT30M
93
+ }
94
+ ```
95
+
96
+ <!-- hsx-brick: captured_payment -->
97
+
98
+ ```hsx
99
+ program captured_payment_example "Captured payment example"
100
+ import { captured_payment } from "std/settlements"
101
+ party payer: person
102
+ party payee: business
103
+ settlement card_payment = captured_payment {
104
+ payer: payer
105
+ payee: payee
106
+ amount: authorizedAmount: money(SAR)
107
+ reserve_until: reserveUntil
108
+ correction: port correct_capture
109
+ external_reversal: port reverse_capture within P14D
110
+ capture_mode: partial_then_full
111
+ correction_mode: full_only
112
+ negative_position: reject
113
+ timeout: reject
114
+ }
115
+ port correct_capture { allowed: [payee] }
116
+ port reverse_capture {
117
+ allowed: [payee]
118
+ shape: { externalReference: text }
119
+ }
120
+ ```
121
+
122
+ <!-- hsx-brick: conditional_disbursement -->
123
+
124
+ ```hsx
125
+ program conditional_disbursement_example "Conditional disbursement example"
126
+ import { conditional_disbursement } from "std/settlements"
127
+ party source: business
128
+ party claimant: person
129
+ settlement claim_payment = conditional_disbursement {
130
+ source: source
131
+ destination: claimant
132
+ cap: policyLimit: money(SAR)
133
+ amount: approvedAmount: money(SAR)
134
+ decision: port approve_claim
135
+ reopen_policy: refuse
136
+ recovery_policy: separate_transfer
137
+ }
138
+ port approve_claim {
139
+ allowed: [source]
140
+ shape: { evidenceReference: text }
141
+ }
142
+ ```
143
+
144
+ <!-- hsx-brick: credit_facility -->
145
+
146
+ ```hsx
147
+ program credit_facility_example "Credit facility example"
148
+ import { credit_facility, scheduled } from "std/settlements"
149
+ party lender: business
150
+ party borrower: business
151
+ party draw_destination: business
152
+ party repayment_source: business
153
+ settlement repayment = scheduled {
154
+ mode: obligation
155
+ payer: repayment_source
156
+ payee: lender
157
+ debtor: borrower
158
+ amount: principal: money(SAR)
159
+ count: 2
160
+ every: P30D
161
+ first_due: firstDueAt
162
+ }
163
+ settlement facility = credit_facility {
164
+ lender: lender
165
+ borrower: borrower
166
+ draw_destination: draw_destination
167
+ limit: facilityLimit: money(SAR)
168
+ expires_at: expiresAt
169
+ obligation: repayment.obligation
170
+ availability_policy: revolving
171
+ expiry_policy: freeze_draws
172
+ close_policy: no_open_draws
173
+ }
174
+ ```
175
+
176
+ <!-- hsx-brick: security_deposit -->
177
+
178
+ ```hsx
179
+ program deposit_example "Deposit example"
180
+ import { security_deposit } from "std/settlements"
181
+ party renter: person
182
+ party owner: business
183
+ settlement security_deposit = security_deposit {
184
+ payer: renter
185
+ holder: owner
186
+ amount: depositAmount: money(SAR)
187
+ claim: port assess_damage
188
+ claim_amount: decided {
189
+ field: damageAmount
190
+ bound: depositAmount
191
+ remainder: return
192
+ }
193
+ return: port return_deposit
194
+ }
195
+ port assess_damage {
196
+ allowed: [owner]
197
+ shape: { damageAmount: money(SAR), evidence: text }
198
+ }
199
+ port return_deposit { allowed: [owner] }
200
+ ```
201
+
202
+ <!-- hsx-brick: threshold_pool -->
203
+
204
+ ```hsx
205
+ program capital_pool_example "Capital pool example"
206
+ import { threshold_pool } from "std/settlements"
207
+ party contributor: person
208
+ party company: business
209
+ settlement round = threshold_pool {
210
+ contributor: contributor
211
+ beneficiary: company
212
+ target: targetAmount: money(SAR)
213
+ commitment: commitmentAmount: money(SAR)
214
+ max_contributors: 100
215
+ close_by: closeBy
216
+ close_policy: threshold
217
+ overfund_policy: reject
218
+ cancel_policy: before_close
219
+ fail_policy: whole_commitment_refund
220
+ }
221
+ ```
222
+
223
+ <!-- hsx-brick: held_payment -->
224
+
225
+ ```hsx
226
+ program held_payment_example "Held payment example"
227
+ import { held_payment } from "std/settlements"
228
+ party buyer: person
229
+ party seller: business
230
+ settlement sale = held_payment {
231
+ payer: buyer
232
+ payee: seller
233
+ amount: price: money(SAR)
234
+ fees { buyer: 1% }
235
+ on_cancel(funded) { buyer: 100% }
236
+ release: port confirm_delivery | at(releaseDueAt)
237
+ }
238
+ port confirm_delivery { allowed: [buyer] }
239
+ ```
240
+
241
+ <!-- hsx-brick: instant_transfer -->
242
+
243
+ ```hsx
244
+ program instant_transfer_example "Instant transfer example"
245
+ import { instant_transfer } from "std/settlements"
246
+ party customer: person
247
+ party merchant: business
248
+ settlement transfer = instant_transfer {
249
+ payer: customer
250
+ payee: merchant
251
+ amount: transferAmount: money(SAR)
252
+ fees {
253
+ customer: checkoutFee: money(SAR)
254
+ merchant {
255
+ tier { from: 0, to: 10000, fee: 1% }
256
+ tier { from: 10000, fee: highValueFee: money(SAR) }
257
+ }
258
+ }
259
+ }
260
+ ```
261
+
262
+ <!-- hsx-brick: metered -->
263
+
264
+ ```hsx
265
+ program metered_example "Metered example"
266
+ import { metered } from "std/settlements"
267
+ party customer: business
268
+ party provider: business
269
+ settlement usage = metered {
270
+ payer: customer
271
+ payee: provider
272
+ close_by: periodEnd
273
+ rates {
274
+ api_call: callRate: money(SAR)
275
+ storage_gib: storageRate: money(SAR)
276
+ }
277
+ }
278
+ ```
279
+
280
+ <!-- hsx-brick: pooled_split -->
281
+
282
+ ```hsx
283
+ program pooled_split_example "Pooled split example"
284
+ import { pooled_split } from "std/settlements"
285
+ party payer: business
286
+ party first_recipient: business
287
+ party second_recipient: business
288
+ settlement pool = pooled_split {
289
+ payer: payer
290
+ amount: poolAmount: money(SAR)
291
+ payout_due: payoutDueAt
292
+ split {
293
+ first_recipient: 60%
294
+ second_recipient: 40%
295
+ remainder_to: first_recipient
296
+ }
297
+ }
298
+ ```
299
+
300
+ <!-- hsx-brick: premium_forward -->
301
+
302
+ ```hsx
303
+ program premium_forward_example "Premium forward example"
304
+ import { premium_forward } from "std/settlements"
305
+ party policyholder: person
306
+ party carrier: business
307
+ settlement premium = premium_forward {
308
+ payer: policyholder
309
+ carrier: carrier
310
+ amount: premiumAmount: money(SAR)
311
+ commission: 2%
312
+ bind: port bind_policy
313
+ policy_ref: policyReference
314
+ renewal_due: renewalDueAt
315
+ endorsement: port record_endorsement
316
+ }
317
+ port bind_policy { allowed: [policyholder, carrier] }
318
+ port record_endorsement {
319
+ allowed: [carrier]
320
+ shape: { evidenceReference: text }
321
+ }
322
+ ```
323
+
324
+ <!-- hsx-brick: reconciled_payout -->
325
+
326
+ ```hsx
327
+ program reconciled_payout_example "Reconciled payout example"
328
+ import { reconciled_payout } from "std/settlements"
329
+ party treasury: business
330
+ party supplier: business
331
+ settlement supplier_payout = reconciled_payout {
332
+ payer: treasury
333
+ beneficiary: supplier
334
+ amount: netPayable: money(SAR)
335
+ beneficiary_ref: supplierBeneficiaryId
336
+ settle_by: settleBy
337
+ matched_within: 100
338
+ matched_ceiling: 500
339
+ }
340
+ ```
341
+
342
+ <!-- hsx-brick: recurring_collection -->
343
+
344
+ ```hsx
345
+ program recurring_collection_example "Recurring collection example"
346
+ import { recurring_collection, scheduled } from "std/settlements"
347
+ party debtor: person
348
+ party repayment_source: business
349
+ party recipient: business
350
+ settlement obligation = scheduled {
351
+ mode: obligation
352
+ payer: repayment_source
353
+ payee: recipient
354
+ debtor: debtor
355
+ amount: principal: money(SAR)
356
+ count: 2
357
+ every: P30D
358
+ first_due: firstDueAt
359
+ mandate: port mandate_evidence
360
+ }
361
+ settlement collection = recurring_collection {}
362
+ port mandate_evidence {
363
+ allowed: [repayment_source]
364
+ shape: { evidenceReference: text }
365
+ }
366
+ ```
367
+
368
+ <!-- hsx-brick: rotating_pool -->
369
+
370
+ ```hsx
371
+ program rotating_pool_example "Rotating pool example"
372
+ import { rotating_pool } from "std/settlements"
373
+ party member_a: person
374
+ party member_b: person
375
+ party member_c: person
376
+ party guarantor: business
377
+ settlement pool = rotating_pool {
378
+ members: [member_a, member_b, member_c]
379
+ contribution: contributionAmount: money(SAR)
380
+ count: 3
381
+ every: P30D
382
+ first_due: firstContributionAt
383
+ payout_order: [member_b, member_c, member_a]
384
+ default_policy: due_condition
385
+ guarantee_policy: funded_only
386
+ guarantor: guarantor
387
+ exit_policy: before_activation_only
388
+ }
389
+ ```
390
+
391
+ <!-- hsx-brick: scheduled -->
392
+
393
+ ```hsx
394
+ program scheduled_example "Scheduled example"
395
+ import { scheduled } from "std/settlements"
396
+ party payer: business
397
+ party payee: business
398
+ settlement installments = scheduled {
399
+ payer: payer
400
+ payee: payee
401
+ amount: totalAmount: money(SAR)
402
+ count: 3
403
+ every: P30D
404
+ first_due: firstDueAt
405
+ }
406
+ ```
407
+
408
+ <!-- hsx-brick: settlement_batch -->
409
+
410
+ ```hsx
411
+ program settlement_batch_example "Settlement batch example"
412
+ import { settlement_batch } from "std/settlements"
413
+ party settlement_account: business
414
+ party payout_destination: business
415
+ settlement batch = settlement_batch {
416
+ settlement_account: settlement_account
417
+ source_capture_refs: captureReference
418
+ fee_entries: feeReference
419
+ external_reversal_offsets: reversalReference
420
+ close_trigger: closeAt
421
+ payout_destination: payout_destination
422
+ negative_position: reject
423
+ payout_acknowledgement: port acknowledge_payout
424
+ payout_beneficiary_ref: payoutBeneficiaryId
425
+ }
426
+ port acknowledge_payout {
427
+ allowed: [payout_destination]
428
+ shape: { acknowledgementReference: text }
429
+ }
430
+ ```
431
+
432
+ <!-- hsx-brick: swap -->
433
+
434
+ ```hsx
435
+ program swap_example "Swap example"
436
+ import { swap } from "std/settlements"
437
+ party buyer: business
438
+ party seller: business
439
+ settlement exchange = swap {
440
+ between: [buyer, seller]
441
+ amounts {
442
+ buyer: buyerAmount: money(SAR)
443
+ seller: sellerAmount: money(SAR)
444
+ }
445
+ fees {
446
+ buyer: buyerFee: money(SAR)
447
+ seller: sellerFee: money(SAR)
448
+ }
449
+ release: port release_exchange
450
+ dispute: port dispute_exchange within P7D
451
+ }
452
+ port release_exchange { allowed: [buyer, seller] }
453
+ port dispute_exchange { allowed: [buyer, seller] }
454
+ ```
455
+
456
+ <!-- hsx-brick: weighted_distribution -->
457
+
458
+ ```hsx
459
+ program weighted_distribution_example "Weighted distribution example"
460
+ import { weighted_distribution } from "std/settlements"
461
+ party distribution_source: business
462
+ party recipient: business
463
+ settlement proceeds = weighted_distribution {
464
+ source: distribution_source
465
+ recipient: recipient
466
+ amount: distributableAmount: money(SAR)
467
+ weight: entitlementWeight: money(SAR)
468
+ max_recipients: 12
469
+ record_at: recordAt
470
+ snapshot: port snapshot_entitlements
471
+ rounding_policy: largest_remainder
472
+ withholding_policy: refuse
473
+ correction_policy: new_distribution
474
+ }
475
+ port snapshot_entitlements {
476
+ allowed: [distribution_source]
477
+ shape: { evidenceReference: text }
478
+ }
479
+ ```
480
+
481
+ ## Output boundary
482
+
483
+ Use `compile` or the CLI to obtain canonical UDL, the origin map, and the cost manifest. The engine reads UDL and never HSX. When a task needs direct UDL work, use the UDL skill instead.