{
 "_doctrine": "PAYMENT_TRUTH_CONTRACT: one contract for every money flow. Work money belongs on the provider-owned rail, not in AstraNL. Settlement evidence is rail-specific: direct bank means confirmed provider credit; Stripe means captured/transferred and paid_out only when the bank payout is observed. Never call an ordinary transfer or Stripe timing control escrow.",
 "version": "1.0",
 "generated_at": "2026-09-28T00:11:11.562945+00:00",
 "state_model": [
  "UNFUNDED",
  "PAYMENT_AUTHORIZED",
  "EVIDENCE_SUBMITTED",
  "PRINCIPAL_ACCEPTED",
  "CAPTURED",
  "TRANSFERRED",
  "PAID_OUT",
  "RELEASED",
  "DISPUTED",
  "FAILED"
 ],
 "money_as_permissioned_transition": "an agent never holds money; it holds a bounded mandate to request a transition; every transition is sealed in AstraLock (event_type agent_hands.order.<state>)",
 "flows": [
  {
   "flow_id": "AH-DEST-1",
   "product": "Agent Hands errand (agent or human principal -> KvK-registered executor)",
   "payer": "principal (card, Stripe Checkout)",
   "merchant_of_record": "settlement merchant = executor (Stripe Express connected account, on_behalf_of=executor); the charge itself is created on the AstraNL platform account (destination charge), so Stripe debits the platform balance for Stripe fees, refunds and chargebacks - source docs.stripe.com/connect/charges, decision 177",
   "platform_role": "broker/coordinator - Stripe Connect platform; collects application_fee only",
   "connected_account_role": "executor = payee; charge settles on the executor's own account",
   "where_charge_lands": "created on the AstraNL platform account, transferred to the executor connected account (destination charge)",
   "where_balance_sits": "UNFUNDED: nowhere (no money moved) | PAYMENT_AUTHORIZED: card authorisation only, no funds moved | CAPTURED/TRANSFERRED: executor connected account balance (pending -> available per Stripe schedule) | PAID_OUT: executor bank account",
   "who_owns_funds_at_each_state": {
    "UNFUNDED": "principal",
    "PAYMENT_AUTHORIZED": "principal (authorisation hold on the card)",
    "CAPTURED": "executor (Stripe balance of the executor account)",
    "TRANSFERRED": "executor",
    "PAID_OUT": "executor (bank)",
    "RELEASED": "principal",
    "DISPUTED": "principal until resolved"
   },
   "who_can_release_transfer_payout": "capture is triggered ONLY by the principal's confirm of the agreed proof (or a dispute resolution); payout to bank is governed by the executor's own Stripe payout schedule, not by AstraNL",
   "maximum_hold_period_days": 7,
   "auto_release_policy": "uncaptured authorisation expires at the capture_before time Stripe sets per authorisation (default 7 days for online cards); no capture without confirm; capture_before is not yet read from live charges because no real authorisation has existed (EVENT_GATED, decision 177)",
   "refund": "before capture: authorisation released (nothing to refund); after capture: refund from executor account via Stripe, AstraNL application fee refunded proportionally on request",
   "chargeback": "lands on the executor account as merchant of record; platform is liable for negative balances of connected accounts per Stripe Connect terms",
   "dispute": "POST /order/{id}/dispute by the principal agent freezes capture; unresolved -> authorisation expires",
   "platform_fee": "coordination fee 1% of the order amount (application_fee_amount, fee registry: runtime/canon/commitments.json)",
   "processor_fee": "Stripe processing fees are charged to the executor account (merchant of record) per Stripe pricing",
   "vat": "executor invoices the principal under its own KvK/BTW; AstraNL invoices its 1% fee separately (BTW NL004604224B69)",
   "currency": "EUR",
   "evidence_trigger": "executor report matched to the proof_criterion agreed before work; principal confirm",
   "legal_basis": "brokerage/coordination (bemiddeling); direct contract principal<->executor; NL volmacht for agent mandates (BW 3:60+)",
   "liability": "AstraNL is not party to the errand contract; not an escrow agent; not an insurer",
   "stripe_fact": "Stripe does not provide escrow services or escrow accounts; delaying capture/payout is timing control, not escrow (docs.stripe.com/connect/manual-payouts)",
   "binding_levels": {
    "open": "NON_BINDING",
    "reserved": "NON_BINDING",
    "accepted": "AUTHORIZED",
    "reported": "AUTHORIZED",
    "confirmed": "FINANCIALLY_COMMITTED",
    "settled": "FINANCIALLY_COMMITTED",
    "paid_out": "FINANCIALLY_COMMITTED"
   },
   "maturity": "contract_tested (G1) - live destination checkout creation verified against Stripe; no real external cycle captured yet",
   "evidence": {
    "code": {
     "destination_charge_in_fund": true,
     "on_behalf_of_in_fund": true,
     "application_fee_in_fund": true,
     "manual_capture": true,
     "kill_switch_custody": true,
     "payout_observe": true,
     "astralock_seal_on_transition": true,
     "hold_days": 7,
     "reservation_hours": 48,
     "source_file": "core/agent_hands.py"
    },
    "negative_tests": {
     "suite": "agent_hands_negative",
     "checks": 18,
     "failed": [],
     "ran_at": "2026-08-27T13:41:58.365895+00:00",
     "evidence": "website/data/agent_hands_negative.json"
    },
    "real_orders_by_payment_state": {
     "UNFUNDED": 3
    },
    "executors_payout_ready_and_consented": 3,
    "executors_kvk_registered_with_payout_account": 3
   },
   "status": "LIVE"
  },
  {
   "flow_id": "DIRECT-BUSINESS-BANK-1",
   "product": "Direct client-to-provider business-bank settlement for coordinated work",
   "payer": "principal (business principal in the current NL rail)",
   "payee": "named independent provider on its own verified NL business account",
   "platform_role": "broker/coordinator only; AstraNL does not initiate the transfer and has no access to either bank account",
   "custody": "none - principal independently instructs its own bank; work principal never enters AstraNL",
   "where_charge_lands": "directly on the provider business bank account",
   "hold_or_release": "none - ordinary bank transfer is not escrow, has no AstraNL hold and no AstraNL automatic release/refund",
   "platform_fee": "1% of the agreed amount only after accepted performance and confirmed actual settlement; invoiced separately by AstraNL; invoice due is not income received",
   "vat": "provider invoices the principal under its own KvK/BTW; AstraNL invoices its coordination fee separately",
   "currency": "EUR",
   "legal_basis": "brokerage/coordination; direct contract and work payment principal<->provider; Article 55 payment-rail independence",
   "dispute": "parties resolve work-payment disputes directly; AstraNL can record evidence but cannot hold or reverse the bank transfer",
   "maturity": "PILOT - signed terms active and contract tests pass; no real direct-bank order has settled yet",
   "evidence": {
    "rail": "direct_business_bank",
    "orders_enabled": true,
    "accounts_declared": 0,
    "accounts_verified": 0,
    "orders_total": 0,
    "orders_settled": 0,
    "fees_due": 0,
    "fees_received": 0,
    "note": "",
    "terms_version": "2026-09-12.bank1",
    "blocker": null
   },
   "status": "LIVE"
  },
  {
   "flow_id": "AH-PLATFORM-0",
   "product": "LEGACY agent-hands hold on the AstraNL platform account (no destination)",
   "status": "KILLED - never captured (kill_switch_custody); any such hold auto-releases",
   "reason": "capturing would put third-party funds on the AstraNL balance, contradicting the constitution (custody: never)",
   "evidence": {
    "kill_switch_in_code": true,
    "real_orders_ever_captured_under_this_flow": 0
   }
  },
  {
   "flow_id": "DIRECT-SERVICE-1",
   "product": "AstraNL Direct Services (AstraNL is the contractor)",
   "payer": "client",
   "merchant_of_record": "AstraNL ZZP (KvK 88449335)",
   "platform_role": "seller - NOT coordination; accounting kept separate from AH-DEST-1",
   "where_charge_lands": "AstraNL Stripe account",
   "platform_fee": "n/a (price = service)",
   "vat": "NL BTW on AstraNL invoice",
   "legal_basis": "service contract (opdracht)",
   "status": "LIVE (pre-existing)",
   "evidence": {
    "note": "separate product; not counted as coordination revenue"
   }
  },
  {
   "flow_id": "ATTEST-WALLET-1",
   "product": "Reality Notary attestation fees (25-50 eurocent per seal) from a prepaid agent wallet",
   "payer": "agent (X-Agent-Key wallet top-up via Stripe)",
   "merchant_of_record": "AstraNL ZZP",
   "where_charge_lands": "AstraNL Stripe account",
   "platform_fee": "published fee per schema",
   "status": "LIVE (pre-existing)",
   "evidence": {
    "manifest": "https://astranl.com/api/agents/wallet/manifest"
   }
  }
 ],
 "money_reality_gate": {
  "gate": "MONEY_REALITY_GATE_001",
  "definition": "external principal -> authority -> real executor -> accepted terms -> execution -> evidence -> acceptance -> settlement on the explicitly chosen provider-owned rail -> separately evidenced AstraNL 1% fee receipt -> proof receipt; no founder relay",
  "status": "NOT PASSED",
  "real_orders_paid_out": 0,
  "real_orders_transferred_not_yet_paid_out": 0,
  "what_is_proven_today": [
   "destination-charge hold can be created on a live executor account (Stripe-validated)",
   "anonymous/wrong-party money transitions are rejected (negative suite)",
   "legacy platform-custody path is killed"
  ],
  "first_cycle_acceptance_rule": {
   "source": "external reviewers 2026-08-27 (ChatGPT, xAI), adopted verbatim as the gate",
   "all_must_hold": [
    "external principal did not come as an AstraNL test",
    "a real need exists",
    "executor independent of the founder (not provider 603)",
    "explicit acceptance of terms by both sides",
    "the agreed provider-owned payment rail is named and the work payment actually settles on it",
    "the action was executed",
    "evidence bound to the specific contract id",
    "principal confirmed, or the pre-agreed acceptance rule fired",
    "provider settlement is evidenced according to the chosen rail",
    "AstraNL received its separate 1% fee (or Stripe application fee when that rail is chosen)",
    "the whole chain is verifiable after the fact"
   ],
   "size": "small on purpose: EUR 20-200, strangers who want it done (pickup, photo inspection, part delivery, short physical check, small local job)",
   "boundary_now": "CONTROL PLANE PROVEN. ECONOMIC PLANE UNPROVEN.",
   "norm": "until this gate passes, no internal technical work counts as mission progress unless it directly removes a blocker of this cycle"
  },
  "what_is_not_proven": [
   "no real external principal has completed a cycle",
   "no payout observed on an executor account for an agent-hands order"
  ],
  "agent_settlement_maturity": "PILOT"
 },
 "plain_language": {
  "en": {
   "principal": "You pay the provider directly on the payment rail agreed for that job. With a direct business-bank payment, you instruct your own bank yourself and AstraNL never receives, holds, routes or releases the work amount. Stripe remains optional; when chosen, its separate authorisation and capture rules apply. AstraNL earns only its published 1% coordination fee after a paid, confirmed outcome.",
   "executor": "The client pays you directly on your own agreed business payment rail. AstraNL does not receive or control the work amount. Direct business-bank payment is the default independent rail in the current NL pilot and Stripe remains optional. AstraNL invoices only its published 1% coordination fee after a paid, confirmed outcome.",
   "short": "Client pays provider directly on a provider-owned rail; AstraNL stays outside the work-money flow and earns only the separate 1% coordination fee after confirmed settlement. Stripe is optional.",
   "never": "not escrow, not insurance, not a wallet, not a payment institution",
   "fee": "1% coordination fee - only on a paid outcome, in force since 2026-09-01"
  },
  "nl": {
   "principal": "U betaalt de uitvoerder rechtstreeks via de betaalroute die u samen voor de opdracht afspreekt. Bij een zakelijke bankoverschrijving geeft u zelf de opdracht aan uw bank; AstraNL ontvangt, bewaart, routeert of geeft het werkbedrag niet vrij. Stripe blijft optioneel en alleen bij die keuze gelden de aparte reserverings- en capture-regels. AstraNL verdient uitsluitend de gepubliceerde 1% coördinatievergoeding na een betaald en bevestigd resultaat.",
   "executor": "De klant betaalt u rechtstreeks via uw eigen afgesproken zakelijke betaalroute. AstraNL ontvangt of beheert het werkbedrag niet. De zakelijke bankrekening is in de huidige NL-pilot de standaard onafhankelijke route; Stripe blijft optioneel. AstraNL factureert alleen de gepubliceerde 1% coördinatievergoeding na een betaald en bevestigd resultaat.",
   "short": "Klant betaalt uitvoerder rechtstreeks via een betaalroute van de uitvoerder; AstraNL blijft buiten de werkbetaling en verdient alleen de aparte 1% coördinatievergoeding na bevestigde afwikkeling. Stripe is optioneel.",
   "never": "geen escrow, geen verzekering, geen wallet, geen betaalinstelling",
   "fee": "1% coordinatievergoeding - alleen op een betaald resultaat, geldig sinds 2026-09-01"
  },
  "_source": "runtime/canon/commitments.json money.custody + Article 55 direct-business-bank rail + optional AH-DEST-1 Stripe rail",
  "law": "render, do not paraphrase: every human surface copies these sentences verbatim; source is the contract in this file (decision 133)"
 },
 "sources": [
  "https://docs.stripe.com/connect/manual-payouts",
  "https://docs.stripe.com/connect/destination-charges",
  "https://astranl.com/api/agent-hands",
  "https://astranl.com/api/agent-hands/board",
  "https://astranl.com/api/agent-hands/bank"
 ]
}