@hyperscale0/hsx 2.1.0 → 2.2.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.
- package/CHANGELOG.md +36 -7
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +39 -5
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compile.d.ts +0 -1
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +15 -1
- package/dist/src/compile.js.map +1 -1
- package/dist/src/cost.d.ts +3 -3
- package/dist/src/cost.d.ts.map +1 -1
- package/dist/src/cost.js +22 -12
- package/dist/src/cost.js.map +1 -1
- package/dist/src/parse.d.ts.map +1 -1
- package/dist/src/parse.js +10 -14
- package/dist/src/parse.js.map +1 -1
- package/dist/src/std-bundle.d.ts.map +1 -1
- package/dist/src/std-bundle.js +20 -84
- package/dist/src/std-bundle.js.map +1 -1
- package/dist/src/typecheck.d.ts.map +1 -1
- package/dist/src/typecheck.js +171 -39
- package/dist/src/typecheck.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/README.md +8 -2
- package/docs/guide/01-first-program.md +1 -1
- package/docs/guide/06-schedules.md +5 -1
- package/docs/guide/08-writing-a-module.md +48 -0
- package/docs/llms-full.txt +1928 -421
- package/docs/llms.txt +2 -3
- package/docs/piece-plans.md +120 -0
- package/docs/reference/cli.md +6 -5
- package/docs/reference/diagnostics.md +9 -9
- package/docs/reference/grammar.md +2 -3
- package/docs/reference/std/advance.md +94 -17
- package/docs/reference/std/cancellable_booking.md +138 -17
- package/docs/reference/std/captured_payment.md +96 -24
- package/docs/reference/std/conditional_disbursement.md +82 -14
- package/docs/reference/std/credit_facility.md +89 -16
- package/docs/reference/std/held_payment.md +155 -55
- package/docs/reference/std/instant_transfer.md +79 -12
- package/docs/reference/std/metered.md +71 -9
- package/docs/reference/std/pooled_split.md +76 -7
- package/docs/reference/std/premium_forward.md +100 -20
- package/docs/reference/std/reconciled_payout.md +84 -14
- package/docs/reference/std/rotating_pool.md +112 -24
- package/docs/reference/std/scheduled.md +117 -32
- package/docs/reference/std/security_deposit.md +119 -27
- package/docs/reference/std/settlement_batch.md +105 -24
- package/docs/reference/std/swap.md +113 -26
- package/docs/reference/std/threshold_pool.md +120 -29
- package/docs/reference/std/weighted_distribution.md +117 -21
- package/docs/reference/types.md +15 -15
- package/docs/reference/udl-output.md +6 -6
- package/examples/01-first-program/README.md +1 -1
- package/examples/{02-imports-and-archetypes → 02-imports-and-modules}/README.md +1 -1
- package/examples/{02-imports-and-archetypes → 02-imports-and-modules}/photo-booth.hsx +1 -1
- package/examples/04-complete-product/README.md +1 -1
- package/examples/05-authored-instrument/README.md +5 -0
- package/examples/05-authored-instrument/payment.hsx +37 -0
- package/examples/05-watch-club/watch-club.hsx +0 -1
- package/examples/README.md +1 -2
- package/examples/advance/advance.udl +29 -6
- package/examples/cancellable_booking/cancellable_booking.udl +19 -0
- package/examples/captured_payment/captured_payment.hsx +0 -4
- package/examples/captured_payment/captured_payment.udl +6 -0
- package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -2
- package/examples/conditional_disbursement/conditional_disbursement.udl +4 -0
- package/examples/cost-table.json +136 -8
- package/examples/credit_facility/credit_facility.hsx +0 -3
- package/examples/credit_facility/credit_facility.udl +17 -1
- package/examples/held_payment/held_payment.udl +16 -0
- package/examples/instant_transfer/instant_transfer.udl +6 -0
- package/examples/metered/metered.udl +5 -1
- package/examples/pooled_split/pooled_split.udl +4 -0
- package/examples/premium_forward/premium_forward.udl +4 -0
- package/examples/reconciled_payout/reconciled_payout.udl +7 -0
- package/examples/rotating_pool/rotating_pool.udl +8 -0
- package/examples/scheduled/scheduled.udl +18 -3
- package/examples/security_deposit/security_deposit.udl +13 -0
- package/examples/settlement_batch/settlement_batch.udl +4 -0
- package/examples/swap/swap.udl +10 -0
- package/examples/threshold_pool/threshold_pool.udl +11 -0
- package/examples/weighted_distribution/weighted_distribution.udl +9 -0
- package/package.json +10 -10
- package/skills/hsx/SKILL.md +2 -36
- package/src/cli.ts +41 -5
- package/src/compile.ts +14 -6
- package/src/cost.ts +13 -16
- package/src/parse.ts +15 -10
- package/src/std-bundle.ts +21 -88
- package/src/typecheck.ts +207 -34
- package/src/version.ts +1 -1
- package/std/SEMANTICS.md +33 -128
- package/std/money_flows/advance.hsx +39 -26
- package/std/money_flows/cancellable_booking.hsx +275 -8
- package/std/money_flows/captured_payment.hsx +1 -9
- package/std/money_flows/conditional_disbursement.hsx +0 -6
- package/std/money_flows/credit_facility.hsx +0 -9
- package/std/money_flows/held_payment.hsx +39 -1
- package/std/money_flows/index.hsx +2 -1
- package/std/money_flows/metered.hsx +1 -5
- package/std/money_flows/scheduled.hsx +29 -119
- package/std/money_flows/threshold_pool.hsx +40 -5
- package/std/money_flows/weighted_distribution.hsx +47 -5
- package/docs/reference/std/recurring_collection.md +0 -25
- package/examples/recurring_collection/README.md +0 -3
- package/examples/recurring_collection/recurring_collection.hsx +0 -21
- package/examples/recurring_collection/recurring_collection.udl +0 -1135
- package/std/money_flows/recurring_collection.hsx +0 -72
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by scripts/docs/build.ts for HSX 2.
|
|
1
|
+
<!-- Generated by scripts/docs/build.ts for HSX 2.2.0. Do not edit. -->
|
|
2
2
|
|
|
3
3
|
# captured_payment
|
|
4
4
|
|
|
@@ -10,17 +10,89 @@ Source: [`std/money_flows/captured_payment.hsx`](../../../std/money_flows/captur
|
|
|
10
10
|
|
|
11
11
|
## Parameters
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
| Parameter | Type | Required | Meaning |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `payer` | `party` | Yes | Party whose account balance is reserved during authorization. |
|
|
16
|
+
| `payee` | `party` | Yes | Beneficiary party capturing authorized funds. |
|
|
17
|
+
| `amount` | `money<C>` | Yes | Maximum authorized reservation in minor units of currency `C`. |
|
|
18
|
+
| `reserve_until` | `date` | Yes | Expiration date for the authorization hold. |
|
|
19
|
+
| `correction` | `condition` | Yes | Condition port allowing post-settlement amount corrections. |
|
|
20
|
+
| `external_reversal` | `condition` | Yes | Condition port allowing external processor chargebacks/reversals. |
|
|
21
|
+
| `derived_amount` | `optional<block>` | No | Optional block declaring percentage fee calculation. |
|
|
22
|
+
|
|
23
|
+
Required means required by the template signature. A selected mode may also need parameters marked optional; the guidance below describes those combinations.
|
|
24
|
+
|
|
25
|
+
## Module guidance
|
|
26
|
+
|
|
27
|
+
Two-phase authorization and capture payment flow for card and merchant processing.
|
|
28
|
+
|
|
29
|
+
### Purpose
|
|
30
|
+
|
|
31
|
+
`captured_payment` reserves funds against a payer's account and allows the payee to capture the authorized
|
|
32
|
+
balance in one or multiple slices before a reservation expiry date (`reserve_until`). It fits ecommerce checkouts,
|
|
33
|
+
card processing, hotel authorizations, and pay-at-pump fuel payments where final amounts vary or settle later.
|
|
34
|
+
|
|
35
|
+
### Selection guidance
|
|
36
|
+
|
|
37
|
+
- vs `instant_transfer`: `instant_transfer` immediately transfers money from payer to payee in a single irreversible
|
|
38
|
+
step without reservation or settlement delays. `captured_payment` separates authorization from capture, allowing
|
|
39
|
+
incremental captures, voids, amount corrections via the `correction` port, and external network reversals via `external_reversal`.
|
|
40
|
+
- vs `held_payment`: `held_payment` holds the full amount in third-party escrow pending release. `captured_payment`
|
|
41
|
+
reserves funds directly on payer balance and settles incrementally directly to payee.
|
|
42
|
+
|
|
43
|
+
### Parameters
|
|
44
|
+
|
|
45
|
+
- `payer`: Party whose account balance is reserved during authorization.
|
|
46
|
+
- `payee`: Beneficiary party capturing authorized funds.
|
|
47
|
+
- `amount`: Maximum authorized reservation in minor units of currency `C`.
|
|
48
|
+
- `reserve_until`: Expiration date for the authorization hold.
|
|
49
|
+
- `correction`: Condition port allowing post-settlement amount corrections.
|
|
50
|
+
- `external_reversal`: Condition port allowing external processor chargebacks/reversals.
|
|
51
|
+
- `derived_amount`: Optional block declaring percentage fee calculation.
|
|
52
|
+
|
|
53
|
+
### Decision ports
|
|
54
|
+
|
|
55
|
+
- `correction`: Condition allowing payee or processor to submit an amount correction after settlement.
|
|
56
|
+
- `external_reversal`: Condition allowing bank or card network to execute an external reversal.
|
|
57
|
+
|
|
58
|
+
### Example
|
|
59
|
+
|
|
60
|
+
```hsx
|
|
61
|
+
program captured_payment_example "Captured payment example"
|
|
62
|
+
import { captured_payment } from "std/money_flows"
|
|
63
|
+
party payer: person
|
|
64
|
+
party payee: business
|
|
65
|
+
settlement card_payment = captured_payment {
|
|
66
|
+
payer: payer
|
|
67
|
+
payee: payee
|
|
68
|
+
amount: authorizedAmount: money(SAR)
|
|
69
|
+
reserve_until: reserveUntil
|
|
70
|
+
correction: port correct_capture
|
|
71
|
+
external_reversal: port reverse_capture within P14D
|
|
72
|
+
}
|
|
73
|
+
port correct_capture { allowed: [payee] }
|
|
74
|
+
port reverse_capture {
|
|
75
|
+
allowed: [payee]
|
|
76
|
+
shape: { externalReference: text }
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Declared clauses
|
|
81
|
+
|
|
82
|
+
- `agent description`
|
|
83
|
+
- `capture input`
|
|
84
|
+
- `deadline`
|
|
85
|
+
- `description`
|
|
86
|
+
- `due`
|
|
87
|
+
- `input`
|
|
88
|
+
- `moves`
|
|
89
|
+
- `port`
|
|
90
|
+
- `sandbox failure point`
|
|
91
|
+
- `steps`
|
|
92
|
+
- `summary`
|
|
93
|
+
- `title`
|
|
94
|
+
|
|
95
|
+
This inventory covers all branches and nested instruments in the module. The selected parameters determine which clauses and actions the compiler emits. Indexed action names expand over the declared finite list.
|
|
24
96
|
|
|
25
97
|
## Decision ports
|
|
26
98
|
|
|
@@ -29,15 +101,15 @@ Source: [`std/money_flows/captured_payment.hsx`](../../../std/money_flows/captur
|
|
|
29
101
|
|
|
30
102
|
## Actions and clauses
|
|
31
103
|
|
|
32
|
-
| Action
|
|
33
|
-
|
|
|
34
|
-
| `create`
|
|
35
|
-
| `authorize`
|
|
36
|
-
| `capture`
|
|
37
|
-
| `capture_more`
|
|
38
|
-
| `settle`
|
|
39
|
-
| `void`
|
|
40
|
-
| `expire`
|
|
41
|
-
| `settle_on_expiry` | `due`, `moves`, `steps`, `summary`
|
|
42
|
-
| `correction_name`
|
|
43
|
-
| `reversal_name`
|
|
104
|
+
| Action | Clauses lowered |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
107
|
+
| `authorize` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
108
|
+
| `capture` | `agent description`, `deadline`, `description`, `input`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
109
|
+
| `capture_more` | `agent description`, `deadline`, `description`, `input`, `moves`, `steps`, `summary` |
|
|
110
|
+
| `settle` | `agent description`, `deadline`, `moves`, `steps`, `summary` |
|
|
111
|
+
| `void` | `agent description`, `moves`, `steps`, `summary` |
|
|
112
|
+
| `expire` | `due`, `moves`, `steps`, `summary` |
|
|
113
|
+
| `settle_on_expiry` | `due`, `moves`, `steps`, `summary` |
|
|
114
|
+
| `[correction_name]` | `agent description`, `capture input`, `input`, `moves`, `port`, `steps`, `summary` |
|
|
115
|
+
| `[reversal_name]` | `agent description`, `capture input`, `deadline`, `input`, `moves`, `port`, `steps`, `summary` |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by scripts/docs/build.ts for HSX 2.
|
|
1
|
+
<!-- Generated by scripts/docs/build.ts for HSX 2.2.0. Do not edit. -->
|
|
2
2
|
|
|
3
3
|
# conditional_disbursement
|
|
4
4
|
|
|
@@ -10,13 +10,81 @@ Source: [`std/money_flows/conditional_disbursement.hsx`](../../../std/money_flow
|
|
|
10
10
|
|
|
11
11
|
## Parameters
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
| Parameter | Type | Required | Meaning |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `source` | `party` | Yes | The funding party providing the money. |
|
|
16
|
+
| `destination` | `party` | Yes | The beneficiary party receiving approved disbursements. |
|
|
17
|
+
| `cap` | `money<C>` | Yes | Maximum total amount that can be disbursed across all child approvals in minor units of currency `C`. |
|
|
18
|
+
| `amount` | `money<C>` | Yes | Binding name for child approval amount values. |
|
|
19
|
+
| `decision` | `condition` | Yes | Port conditioning approval, requiring evidence reference. |
|
|
20
|
+
|
|
21
|
+
Required means required by the template signature. A selected mode may also need parameters marked optional; the guidance below describes those combinations.
|
|
22
|
+
|
|
23
|
+
## Module guidance
|
|
24
|
+
|
|
25
|
+
Capped disbursement from a source party to a destination party gated on stored external decision evidence.
|
|
26
|
+
|
|
27
|
+
### Purpose
|
|
28
|
+
|
|
29
|
+
`conditional_disbursement` manages evidence-contingent payouts subject to a cumulative cap.
|
|
30
|
+
It fits insurance claim settlements, grant tranches, subsidy distributions, and escrow milestones
|
|
31
|
+
where each approved payment requires explicit external evidence and the total paid must not exceed `cap`.
|
|
32
|
+
|
|
33
|
+
### Selection guidance
|
|
34
|
+
|
|
35
|
+
- vs `advance`: `conditional_disbursement` disburses non-repayable funds against external evidence
|
|
36
|
+
up to a declared cap. `advance` pays money up front with the expectation of repayment through carved
|
|
37
|
+
hold releases or scheduled installments.
|
|
38
|
+
- vs `instant_transfer`: `instant_transfer` moves money immediately with no evidence gate or cap.
|
|
39
|
+
`conditional_disbursement` requires an external decision port and evidence reference before any child amount moves.
|
|
40
|
+
|
|
41
|
+
### Parameters
|
|
42
|
+
|
|
43
|
+
- `source`: The funding party providing the money.
|
|
44
|
+
- `destination`: The beneficiary party receiving approved disbursements.
|
|
45
|
+
- `cap`: Maximum total amount that can be disbursed across all child approvals in minor units of currency `C`.
|
|
46
|
+
- `amount`: Binding name for child approval amount values.
|
|
47
|
+
- `decision`: Port conditioning approval, requiring evidence reference.
|
|
48
|
+
|
|
49
|
+
### Decision ports
|
|
50
|
+
|
|
51
|
+
- `decision`: External port providing decision evidence required to approve child disbursement amounts.
|
|
52
|
+
|
|
53
|
+
### Example
|
|
54
|
+
|
|
55
|
+
```hsx
|
|
56
|
+
program conditional_disbursement_example "Conditional disbursement example"
|
|
57
|
+
import { conditional_disbursement } from "std/money_flows"
|
|
58
|
+
party source: business
|
|
59
|
+
party claimant: person
|
|
60
|
+
settlement claim_payment = conditional_disbursement {
|
|
61
|
+
source: source
|
|
62
|
+
destination: claimant
|
|
63
|
+
cap: policyLimit: money(SAR)
|
|
64
|
+
amount: approvedAmount: money(SAR)
|
|
65
|
+
decision: port approve_claim
|
|
66
|
+
}
|
|
67
|
+
port approve_claim {
|
|
68
|
+
allowed: [source]
|
|
69
|
+
shape: { evidenceReference: text }
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Declared clauses
|
|
74
|
+
|
|
75
|
+
- `agent description`
|
|
76
|
+
- `capture input`
|
|
77
|
+
- `description`
|
|
78
|
+
- `id prefix`
|
|
79
|
+
- `input`
|
|
80
|
+
- `moves`
|
|
81
|
+
- `port`
|
|
82
|
+
- `steps`
|
|
83
|
+
- `summary`
|
|
84
|
+
- `title`
|
|
85
|
+
- `unique`
|
|
86
|
+
|
|
87
|
+
This inventory covers all branches and nested instruments in the module. The selected parameters determine which clauses and actions the compiler emits. Indexed action names expand over the declared finite list.
|
|
20
88
|
|
|
21
89
|
## Decision ports
|
|
22
90
|
|
|
@@ -24,10 +92,10 @@ Source: [`std/money_flows/conditional_disbursement.hsx`](../../../std/money_flow
|
|
|
24
92
|
|
|
25
93
|
## Actions and clauses
|
|
26
94
|
|
|
27
|
-
| Action
|
|
28
|
-
|
|
|
29
|
-
| `create`
|
|
30
|
-
| `deny`
|
|
31
|
-
| `create`
|
|
95
|
+
| Action | Clauses lowered |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
98
|
+
| `deny` | `agent description`, `capture input`, `input`, `moves`, `port`, `steps`, `summary` |
|
|
99
|
+
| `create` | `agent description`, `moves`, `steps`, `summary`, `unique` |
|
|
32
100
|
| `approve` | `agent description`, `capture input`, `description`, `input`, `moves`, `port`, `steps`, `summary` |
|
|
33
|
-
| `pay`
|
|
101
|
+
| `pay` | `agent description`, `moves`, `steps`, `summary` |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by scripts/docs/build.ts for HSX 2.
|
|
1
|
+
<!-- Generated by scripts/docs/build.ts for HSX 2.2.0. Do not edit. -->
|
|
2
2
|
|
|
3
3
|
# credit_facility
|
|
4
4
|
|
|
@@ -10,15 +10,88 @@ Source: [`std/money_flows/credit_facility.hsx`](../../../std/money_flows/credit_
|
|
|
10
10
|
|
|
11
11
|
## Parameters
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
| Parameter | Type | Required | Meaning |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `lender` | `party` | Yes | The financing institution or party providing the credit capacity. |
|
|
16
|
+
| `borrower` | `party` | Yes | The borrowing party authorized to draw against the facility limit. |
|
|
17
|
+
| `draw_destination` | `party` | Yes | Account or party receiving disbursed draw proceeds. |
|
|
18
|
+
| `limit` | `money<C>` | Yes | Total revolving borrowing limit in minor units of currency `C`. |
|
|
19
|
+
| `expires_at` | `date` | Yes | Expiration date after which new draws cannot be opened. |
|
|
20
|
+
| `obligation` | `ref` | Yes | Reference to a scheduled obligation instrument handling draw repayments. |
|
|
21
|
+
|
|
22
|
+
Required means required by the template signature. A selected mode may also need parameters marked optional; the guidance below describes those combinations.
|
|
23
|
+
|
|
24
|
+
## Module guidance
|
|
25
|
+
|
|
26
|
+
Revolving credit line providing reusable borrowing capacity up to a limit backed by scheduled obligations.
|
|
27
|
+
|
|
28
|
+
### Purpose
|
|
29
|
+
|
|
30
|
+
`credit_facility` manages revolving commercial credit, inventory financing, and overdraft facilities.
|
|
31
|
+
A borrower can draw funds multiple times up to `limit` into `draw_destination`. Each draw creates a child
|
|
32
|
+
record linked to a scheduled `obligation`. Repayments restore available borrowing capacity until `expires_at`.
|
|
33
|
+
|
|
34
|
+
### Selection guidance
|
|
35
|
+
|
|
36
|
+
- vs `advance`: `credit_facility` provides revolving, reusable credit lines where multiple draws can occur
|
|
37
|
+
and repayments restore capacity. `advance` is a single upfront lump-sum disbursement with a fixed repayment plan.
|
|
38
|
+
- vs `scheduled`: `scheduled` defines repayment installments or recurring transfers. `credit_facility` delegates
|
|
39
|
+
draw repayments to a `scheduled` obligation while tracking total facility utilization and limit compliance.
|
|
40
|
+
|
|
41
|
+
### Parameters
|
|
42
|
+
|
|
43
|
+
- `lender`: The financing institution or party providing the credit capacity.
|
|
44
|
+
- `borrower`: The borrowing party authorized to draw against the facility limit.
|
|
45
|
+
- `draw_destination`: Account or party receiving disbursed draw proceeds.
|
|
46
|
+
- `limit`: Total revolving borrowing limit in minor units of currency `C`.
|
|
47
|
+
- `expires_at`: Expiration date after which new draws cannot be opened.
|
|
48
|
+
- `obligation`: Reference to a scheduled obligation instrument handling draw repayments.
|
|
49
|
+
|
|
50
|
+
### Decision ports
|
|
51
|
+
|
|
52
|
+
None on the facility itself. Mandates and decision ports are declared on the linked `obligation` instrument.
|
|
53
|
+
|
|
54
|
+
### Example
|
|
55
|
+
|
|
56
|
+
```hsx
|
|
57
|
+
program credit_facility_example "Credit facility example"
|
|
58
|
+
import { credit_facility, scheduled } from "std/money_flows"
|
|
59
|
+
party lender: business
|
|
60
|
+
party borrower: business
|
|
61
|
+
party draw_destination: business
|
|
62
|
+
party repayment_source: business
|
|
63
|
+
settlement repayment = scheduled {
|
|
64
|
+
mode: obligation
|
|
65
|
+
payer: repayment_source
|
|
66
|
+
payee: lender
|
|
67
|
+
debtor: borrower
|
|
68
|
+
amount: principal: money(SAR)
|
|
69
|
+
count: 2
|
|
70
|
+
every: P30D
|
|
71
|
+
first_due: firstDueAt
|
|
72
|
+
}
|
|
73
|
+
settlement facility = credit_facility {
|
|
74
|
+
lender: lender
|
|
75
|
+
borrower: borrower
|
|
76
|
+
draw_destination: draw_destination
|
|
77
|
+
limit: facilityLimit: money(SAR)
|
|
78
|
+
expires_at: expiresAt
|
|
79
|
+
obligation: repayment.obligation
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Declared clauses
|
|
84
|
+
|
|
85
|
+
- `agent description`
|
|
86
|
+
- `description`
|
|
87
|
+
- `due`
|
|
88
|
+
- `id prefix`
|
|
89
|
+
- `moves`
|
|
90
|
+
- `steps`
|
|
91
|
+
- `summary`
|
|
92
|
+
- `title`
|
|
93
|
+
|
|
94
|
+
This inventory covers all branches and nested instruments in the module. The selected parameters determine which clauses and actions the compiler emits. Indexed action names expand over the declared finite list.
|
|
22
95
|
|
|
23
96
|
## Decision ports
|
|
24
97
|
|
|
@@ -26,10 +99,10 @@ None.
|
|
|
26
99
|
|
|
27
100
|
## Actions and clauses
|
|
28
101
|
|
|
29
|
-
| Action
|
|
30
|
-
|
|
|
31
|
-
| `create`
|
|
32
|
-
| `freeze`
|
|
33
|
-
| `close`
|
|
34
|
-
| `create`
|
|
102
|
+
| Action | Clauses lowered |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
105
|
+
| `freeze` | `due`, `moves`, `steps`, `summary` |
|
|
106
|
+
| `close` | `agent description`, `moves`, `steps`, `summary` |
|
|
107
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
35
108
|
| `resolve` | `agent description`, `moves`, `steps`, `summary` |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by scripts/docs/build.ts for HSX 2.
|
|
1
|
+
<!-- Generated by scripts/docs/build.ts for HSX 2.2.0. Do not edit. -->
|
|
2
2
|
|
|
3
3
|
# held_payment
|
|
4
4
|
|
|
@@ -10,22 +10,122 @@ Source: [`std/money_flows/held_payment.hsx`](../../../std/money_flows/held_payme
|
|
|
10
10
|
|
|
11
11
|
## Parameters
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
| Parameter | Type | Required | Meaning |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `payer` | `party` | Yes | The funding party providing the money. |
|
|
16
|
+
| `payee` | `party` | Yes | The beneficiary party receiving the released funds. |
|
|
17
|
+
| `amount` | `money<C>` | Yes | Total amount in minor units of currency `C`. |
|
|
18
|
+
| `release` | `condition` | Yes | Condition required to release funds. Supports decision ports (`port <name>`), date deadlines (`at(<date>)`), or disjunctions (`port <name> | at(<date>)`). |
|
|
19
|
+
| `fees` | `optional<block>` | No | Optional block declaring percentage or fixed fee cuts, e.g. `{ buyer: 1%, seller: 2% }`. |
|
|
20
|
+
| `on_cancel` | `optional<block>` | No | Optional block defining refund splits if cancelled while funded, e.g. `(funded) { buyer: 90%, seller: 10% }`. |
|
|
21
|
+
| `derived_amount` | `optional<block>` | No | Optional block declaring machine-derived fees calculated as a percentage of another field. |
|
|
22
|
+
| `release_to` | `optional<party>` | No | Optional third-party destination for release. |
|
|
23
|
+
| `whole_amount` | `optional<block>` | No | Optional block enabling single-action funding and release of principal plus on-top fee. |
|
|
24
|
+
| `release_action` | `optional<text>` | No | Optional custom name for the release action. |
|
|
25
|
+
| `whole_fee` | `optional<money<C>>` | No | Optional money amount for the whole-amount fee. |
|
|
26
|
+
| `reference` | `optional<text>` | No | Optional string reference stored on the instance. |
|
|
27
|
+
| `upstream` | `optional<ref>` | No | Optional reference to a parent instrument. |
|
|
28
|
+
| `id_prefix_override` | `optional<text>` | No | Optional custom prefix for generated instrument IDs. |
|
|
29
|
+
| `cancel_charge_bps` | `optional<integer>` | No | Optional cancellation charge in basis points. Declaring it gives the settlement a quoted cancellation: `quote_cancellation` prices the charge and the refund and freezes both, `cancel` pays the refund to the payer, and `retain_cancellation_charge` pays the charge to the payee. A zero charge keeps the flow with a zero fee. |
|
|
30
|
+
| `cancel_offer_life` | `optional<text>` | No | ISO 8601 duration a cancellation quote stays open, required with `cancel_charge_bps`. |
|
|
31
|
+
| `private_actions` | `optional<boolean>` | No | Suppress automatic aliases. Publish chosen actions with `expose`. |
|
|
32
|
+
|
|
33
|
+
Required means required by the template signature. A selected mode may also need parameters marked optional; the guidance below describes those combinations.
|
|
34
|
+
|
|
35
|
+
## Module guidance
|
|
36
|
+
|
|
37
|
+
Escrow settlement holding funds from a payer before releasing to a payee upon a verified condition or deadline.
|
|
38
|
+
|
|
39
|
+
### Purpose
|
|
40
|
+
|
|
41
|
+
`held_payment` holds customer funds in a dedicated product escrow account away from both payer and payee.
|
|
42
|
+
It fits milestone-gated commerce, vehicle escrow, contractor holdbacks, and goods purchases where funds
|
|
43
|
+
must remain reserved until delivery confirmation or inspection.
|
|
44
|
+
|
|
45
|
+
### Selection guidance
|
|
46
|
+
|
|
47
|
+
- vs `cancellable_booking`: Both hold funds in custody and both can quote a cancellation before it is
|
|
48
|
+
spent. `held_payment` quotes one flat charge declared by `cancel_charge_bps`, because it has no scheduled
|
|
49
|
+
start to price against, and `on_cancel` remains the way to unwind it on static splits instead.
|
|
50
|
+
Choose `cancellable_booking` when the charge must follow the time left before a scheduled start date.
|
|
51
|
+
- vs `security_deposit`: `held_payment` releases or cancels the principal according to predefined splits.
|
|
52
|
+
Choose `security_deposit` when the holder must assess damages and claim an arbitrary partial amount
|
|
53
|
+
via a `decided amount` clause while returning the unspent remainder to the payer.
|
|
54
|
+
- vs `swap`: `held_payment` is a one-way transfer from payer to payee. Choose `swap` for bilateral or
|
|
55
|
+
multi-party atomic exchanges where all parties must fund their legs into escrow before simultaneous release.
|
|
56
|
+
- vs `premium_forward`: Choose `premium_forward` for insurance premium collection requiring carrier policy
|
|
57
|
+
binding conditions, broker commission retention, policy endorsements, and lapse schedules.
|
|
58
|
+
|
|
59
|
+
### Parameters
|
|
60
|
+
|
|
61
|
+
- `payer`: The funding party providing the money.
|
|
62
|
+
- `payee`: The beneficiary party receiving the released funds.
|
|
63
|
+
- `amount`: Total amount in minor units of currency `C`.
|
|
64
|
+
- `release`: Condition required to release funds. Supports decision ports (`port <name>`), date deadlines
|
|
65
|
+
(`at(<date>)`), or disjunctions (`port <name> | at(<date>)`).
|
|
66
|
+
- `fees`: Optional block declaring percentage or fixed fee cuts, e.g. `{ buyer: 1%, seller: 2% }`.
|
|
67
|
+
- `on_cancel`: Optional block defining refund splits if cancelled while funded, e.g. `(funded) { buyer: 90%, seller: 10% }`.
|
|
68
|
+
- `derived_amount`: Optional block declaring machine-derived fees calculated as a percentage of another field.
|
|
69
|
+
- `release_to`: Optional third-party destination for release.
|
|
70
|
+
- `whole_amount`: Optional block enabling single-action funding and release of principal plus on-top fee.
|
|
71
|
+
- `release_action`: Optional custom name for the release action.
|
|
72
|
+
- `whole_fee`: Optional money amount for the whole-amount fee.
|
|
73
|
+
- `reference`: Optional string reference stored on the instance.
|
|
74
|
+
- `upstream`: Optional reference to a parent instrument.
|
|
75
|
+
- `id_prefix_override`: Optional custom prefix for generated instrument IDs.
|
|
76
|
+
- `cancel_charge_bps`: Optional cancellation charge in basis points. Declaring it gives the settlement a
|
|
77
|
+
quoted cancellation: `quote_cancellation` prices the charge and the refund and freezes both,
|
|
78
|
+
`cancel` pays the refund to the payer, and `retain_cancellation_charge` pays the charge to the payee.
|
|
79
|
+
A zero charge keeps the flow with a zero fee.
|
|
80
|
+
- `cancel_offer_life`: ISO 8601 duration a cancellation quote stays open, required with `cancel_charge_bps`.
|
|
81
|
+
|
|
82
|
+
- `private_actions`: Suppress automatic aliases. Publish chosen actions with `expose`.
|
|
83
|
+
|
|
84
|
+
### Decision ports
|
|
85
|
+
|
|
86
|
+
- `release`: Port deciding release authorization, answered by allowed parties declared in the port.
|
|
87
|
+
|
|
88
|
+
### Example
|
|
89
|
+
|
|
90
|
+
```hsx
|
|
91
|
+
program held_payment_example "Held payment example"
|
|
92
|
+
import { held_payment } from "std/money_flows"
|
|
93
|
+
party buyer: person
|
|
94
|
+
party seller: business
|
|
95
|
+
settlement sale = held_payment {
|
|
96
|
+
payer: buyer
|
|
97
|
+
payee: seller
|
|
98
|
+
amount: price: money(SAR)
|
|
99
|
+
fees { buyer: 1% }
|
|
100
|
+
on_cancel(funded) { buyer: 100% }
|
|
101
|
+
release: port confirm_delivery | at(releaseDueAt)
|
|
102
|
+
}
|
|
103
|
+
port confirm_delivery { allowed: [buyer] }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Declared clauses
|
|
107
|
+
|
|
108
|
+
- `agent description`
|
|
109
|
+
- `caller parked states`
|
|
110
|
+
- `commit`
|
|
111
|
+
- `deadline`
|
|
112
|
+
- `description`
|
|
113
|
+
- `distinct parties`
|
|
114
|
+
- `due`
|
|
115
|
+
- `event name`
|
|
116
|
+
- `id prefix`
|
|
117
|
+
- `input`
|
|
118
|
+
- `moves`
|
|
119
|
+
- `partitions`
|
|
120
|
+
- `port`
|
|
121
|
+
- `quote`
|
|
122
|
+
- `requires drained`
|
|
123
|
+
- `sandbox failure point`
|
|
124
|
+
- `steps`
|
|
125
|
+
- `summary`
|
|
126
|
+
- `title`
|
|
127
|
+
|
|
128
|
+
This inventory covers all branches and nested instruments in the module. The selected parameters determine which clauses and actions the compiler emits. Indexed action names expand over the declared finite list.
|
|
29
129
|
|
|
30
130
|
## Decision ports
|
|
31
131
|
|
|
@@ -33,41 +133,41 @@ Source: [`std/money_flows/held_payment.hsx`](../../../std/money_flows/held_payme
|
|
|
33
133
|
|
|
34
134
|
## Actions and clauses
|
|
35
135
|
|
|
36
|
-
| Action
|
|
37
|
-
|
|
|
38
|
-
| `fund_piece_2`
|
|
39
|
-
| `fund_piece_3`
|
|
40
|
-
| `collect_service_fee`
|
|
41
|
-
| `release_piece_2`
|
|
42
|
-
| `release_piece_3`
|
|
43
|
-
| `refund_piece_2`
|
|
44
|
-
| `refund_piece_3`
|
|
45
|
-
| `unfund_piece_1`
|
|
46
|
-
| `unfund_piece_2`
|
|
47
|
-
| `unfund_piece_3`
|
|
48
|
-
| `create`
|
|
49
|
-
| `fund_piece_1`
|
|
50
|
-
| `release_name`
|
|
51
|
-
| `release_on_deadline`
|
|
52
|
-
| `cancel`
|
|
53
|
-
| `quote_cancellation`
|
|
54
|
-
| `cancel`
|
|
55
|
-
| `retain_cancellation_charge` | `agent description`, `moves`, `steps`, `summary`
|
|
56
|
-
| `fund_piece_2`
|
|
57
|
-
| `release_piece_2`
|
|
58
|
-
| `unfund_piece_1`
|
|
59
|
-
| `fund_piece_2`
|
|
60
|
-
| `release_piece_2`
|
|
61
|
-
| `refund_piece_2`
|
|
62
|
-
| `unfund_piece_1`
|
|
63
|
-
| `abandon`
|
|
64
|
-
| `dispute`
|
|
65
|
-
| `resume`
|
|
66
|
-
| `create`
|
|
67
|
-
| `fund`
|
|
68
|
-
| `release_action`
|
|
69
|
-
| `release_on_deadline`
|
|
70
|
-
| `cancel`
|
|
71
|
-
| `abandon`
|
|
72
|
-
| `dispute`
|
|
73
|
-
| `resume`
|
|
136
|
+
| Action | Clauses lowered |
|
|
137
|
+
| --- | --- |
|
|
138
|
+
| `fund_piece_2` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
139
|
+
| `fund_piece_3` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
140
|
+
| `collect_service_fee` | `agent description`, `moves`, `steps`, `summary` |
|
|
141
|
+
| `release_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
142
|
+
| `release_piece_3` | `agent description`, `moves`, `steps`, `summary` |
|
|
143
|
+
| `refund_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
144
|
+
| `refund_piece_3` | `agent description`, `moves`, `steps`, `summary` |
|
|
145
|
+
| `unfund_piece_1` | `agent description`, `moves`, `steps`, `summary` |
|
|
146
|
+
| `unfund_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
147
|
+
| `unfund_piece_3` | `agent description`, `moves`, `steps`, `summary` |
|
|
148
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
149
|
+
| `fund_piece_1` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
150
|
+
| `[release_name]` | `agent description`, `deadline`, `input`, `moves`, `port`, `sandbox failure point`, `steps`, `summary` |
|
|
151
|
+
| `release_on_deadline` | `due`, `moves`, `steps`, `summary` |
|
|
152
|
+
| `cancel` | `agent description`, `deadline`, `moves`, `steps`, `summary` |
|
|
153
|
+
| `quote_cancellation` | `agent description`, `deadline`, `moves`, `quote`, `steps`, `summary` |
|
|
154
|
+
| `cancel` | `agent description`, `commit`, `deadline`, `moves`, `steps`, `summary` |
|
|
155
|
+
| `retain_cancellation_charge` | `agent description`, `moves`, `steps`, `summary` |
|
|
156
|
+
| `fund_piece_2` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
157
|
+
| `release_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
158
|
+
| `unfund_piece_1` | `agent description`, `moves`, `steps`, `summary` |
|
|
159
|
+
| `fund_piece_2` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
160
|
+
| `release_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
161
|
+
| `refund_piece_2` | `agent description`, `moves`, `steps`, `summary` |
|
|
162
|
+
| `unfund_piece_1` | `agent description`, `moves`, `steps`, `summary` |
|
|
163
|
+
| `abandon` | `agent description`, `moves`, `steps`, `summary` |
|
|
164
|
+
| `dispute` | `agent description`, `deadline`, `description`, `moves`, `steps`, `summary` |
|
|
165
|
+
| `resume` | `agent description`, `description`, `moves`, `steps`, `summary` |
|
|
166
|
+
| `create` | `agent description`, `moves`, `steps`, `summary` |
|
|
167
|
+
| `fund` | `agent description`, `moves`, `sandbox failure point`, `steps`, `summary` |
|
|
168
|
+
| `[release_action]` | `agent description`, `deadline`, `moves`, `port`, `sandbox failure point`, `steps`, `summary` |
|
|
169
|
+
| `release_on_deadline` | `due`, `event name`, `moves`, `steps`, `summary` |
|
|
170
|
+
| `cancel` | `agent description`, `deadline`, `event name`, `moves`, `steps`, `summary` |
|
|
171
|
+
| `abandon` | `agent description`, `moves`, `requires drained`, `steps`, `summary` |
|
|
172
|
+
| `dispute` | `agent description`, `deadline`, `description`, `moves`, `steps`, `summary` |
|
|
173
|
+
| `resume` | `agent description`, `description`, `moves`, `steps`, `summary` |
|