diff --git a/contracts/split/src/types.rs b/contracts/split/src/types.rs
index 7b06b16..3f8a502 100644
--- a/contracts/split/src/types.rs
+++ b/contracts/split/src/types.rs
@@ -613,45 +613,85 @@ pub struct InvoiceCore {
#[contracttype]
#[derive(Clone, Debug)]
pub struct InvoiceExt {
+ /// Addresses whose approval is required before the invoice can be released.
pub co_signers: Vec
,
+ /// How many of `co_signers` approvals are required (≤ `co_signers.len()`).
pub required_signatures: u32,
+ /// Addresses that have actually approved the release so far.
pub signatures: Vec,
+ /// Optional address permitted to call `approve_release` on behalf of the creator.
pub approver: Option,
+ /// Whether the release has been approved by the required approvers.
pub approved: bool,
+ /// Optional oracle that must confirm a release condition before funds move.
pub condition_oracle: Option,
+ /// Whether the `condition_oracle` has signalled the condition is met.
pub condition_met: bool,
+ /// Penalty applied (in basis points) to late payments.
pub penalty_bps: u32,
+ /// Timestamp after which the `penalty_bps` penalty begins to apply.
pub penalty_deadline: u64,
+ /// Minimum funding threshold (basis points) that must be reached before release.
pub min_funding_bps: u32,
+ /// Configured release stages as basis points; empty = release all at once.
pub release_stages: Vec,
+ /// Count of release stages already paid out.
pub released_stages: u32,
+ /// Optional allowlist of payer addresses; `None` = open to anyone.
pub allowed_payers: Option>,
+ /// Optional price oracle used for dynamic (oracle-priced) funding.
pub price_oracle: Option,
+ /// Cached per-recipient base amounts used during release math.
pub base_amounts: Vec,
+ /// Per-recipient optional output token used for a DEX swap on release.
pub swap_tokens: Vec