{
 "generated_at": "2026-08-11T16:58:31Z",
 "issued_by": "AstraNL (KvK 88449335)",
 "principle": "classification by WHAT is coordinated, not by industry - one mechanism serves construction, logistics and energy alike",
 "pipeline": "ECONOMY -> Coordination Domains -> Coordination Markets -> Coordination Cases -> Participants/Assets -> Matching -> Agreement -> Execution -> Proof -> Settlement -> Reputation/Learning",
 "universal_primitives": [
  "Need",
  "Resource",
  "Constraints",
  "Match",
  "Agreement",
  "Execute",
  "Verify",
  "Settle",
  "Learn"
 ],
 "execution_standard": {
  "name": "AWERI v0.1",
  "home": "https://astranl.com/api/aweri",
  "note": "primitives Execute/Verify/Settle/Learn are carried by AWERI output states: accepted_by_named_executor, time_agreed, action_performed, proof_delivered_per_criterion, principal_confirmed_or_disputed, settled_directly, immutably_recorded, memory_updated"
 },
 "sectors": [
  {
   "name": "Resources",
   "scope": "товари, матеріали, сировина"
  },
  {
   "name": "Capacity",
   "scope": "фабрики, склади, обладнання"
  },
  {
   "name": "Mobility",
   "scope": "вантажі, транспорт, доставка"
  },
  {
   "name": "Energy",
   "scope": "генерація, батареї, зарядка, споживання"
  },
  {
   "name": "Machines",
   "scope": "роботи, дрони, техніка"
  },
  {
   "name": "Production",
   "scope": "виробничі ланцюги"
  },
  {
   "name": "Services",
   "scope": "ремонт, обслуговування, професійні послуги"
  },
  {
   "name": "Capital & Contracts",
   "scope": "платежі, фінансування, страхування, зобовязання"
  }
 ],
 "coordination_classes": [
  {
   "name": "demand_supply",
   "coordinates_what": "потреба та доступний ресурс",
   "example": "потрібен бетон <-> є постачальник",
   "sector": "Resources"
  },
  {
   "name": "capacity_load",
   "coordinates_what": "вільні виробничі ресурси",
   "example": "вільний CNC <-> замовлення",
   "sector": "Capacity"
  },
  {
   "name": "goods_shortage",
   "coordinates_what": "залишки та потреби",
   "example": "надлишок труб <-> інший обєкт",
   "sector": "Resources"
  },
  {
   "name": "cargo_transport",
   "coordinates_what": "фізичне переміщення",
   "example": "палета <-> вільна вантажівка",
   "sector": "Mobility"
  },
  {
   "name": "site_equipment",
   "coordinates_what": "машини та обладнання",
   "example": "будмайданчик <-> підйомник",
   "sector": "Capacity"
  },
  {
   "name": "energy_consumption",
   "coordinates_what": "генерація, батареї, навантаження",
   "example": "сонце <-> зарядна станція",
   "sector": "Energy"
  },
  {
   "name": "robot_task",
   "coordinates_what": "автономні виконавці",
   "example": "AMR <-> переміщення палет",
   "sector": "Machines"
  },
  {
   "name": "production_order",
   "coordinates_what": "виробничі ланцюги",
   "example": "деталь <-> фабрика",
   "sector": "Production"
  },
  {
   "name": "spare_fault",
   "coordinates_what": "ремонт і maintenance",
   "example": "насос <-> потрібна деталь",
   "sector": "Services"
  },
  {
   "name": "warehouse_goods",
   "coordinates_what": "складська місткість",
   "example": "вільні 500 м2 <-> запас",
   "sector": "Capacity"
  },
  {
   "name": "waste_resource",
   "coordinates_what": "circular economy",
   "example": "обрізки металу <-> переробник",
   "sector": "Resources"
  },
  {
   "name": "capital_action",
   "coordinates_what": "фінансування",
   "example": "рахунок/замовлення <-> factoring",
   "sector": "Capital & Contracts"
  },
  {
   "name": "data_decision",
   "coordinates_what": "інформаційні сигнали",
   "example": "прогноз попиту <-> закупівля",
   "sector": "Capital & Contracts"
  },
  {
   "name": "contract_execution",
   "coordinates_what": "зобовязання між сторонами",
   "example": "SLA <-> фактичне виконання",
   "sector": "Capital & Contracts"
  },
  {
   "name": "multiagent",
   "coordinates_what": "AI, роботи, компанії, системи",
   "example": "AI-агент -> склад -> робот -> транспорт",
   "sector": "Machines"
  }
 ],
 "live_signals": [
  {
   "class": "energy_consumption",
   "signal": "https://astranl.com/data/energy_flow.json",
   "cadence": "hourly",
   "source": "EPEX NL day-ahead"
  }
 ],
 "engine": {
  "name": "AstraNL Coordination Engine v1",
  "built": "2026-08-11",
  "what": "one state machine carrying every coordination case of all 15 classes through the universal primitives",
  "states": [
   "need_open",
   "resource_found",
   "constrained",
   "matched",
   "agreed",
   "executing",
   "verified",
   "settled",
   "learned",
   "dead"
  ],
  "laws": [
   "no state transition without an evidence line (enforced in code)",
   "no agreement without a proof_criterion agreed BEFORE work starts (AWERI law)",
   "Execute..Learn is carried by AWERI v0.1, never duplicated",
   "revenue is counted only from a settle with a real payment_ref",
   "every synthetic row carries data_quality=test and is reported separately"
  ],
  "money": {
   "model": "broker",
   "fee_pct": 1.0,
   "flow": "principal pays executor directly, AstraNL holds no funds",
   "referral_share_pct_of_net": 25
  },
  "endpoints": {
   "open_case": {
    "method": "POST",
    "url": "https://astranl.com/api/coordination/case",
    "body": {
     "need": "string (required)",
     "class_ref": "one of coordination_classes, default demand_supply",
     "constraints": "object, optional",
     "budget_cents": "int, optional",
     "geography": "default NL"
    }
   },
   "case_status": {
    "method": "GET",
    "url": "https://astranl.com/api/coordination/case/{case_id}",
    "returns": "state, next_action, resource candidates and the full state_history with evidence"
   },
   "pulse": {
    "method": "GET",
    "url": "https://astranl.com/api/coordination/pulse",
    "returns": "cases by state, real and test counted separately"
   },
   "open_opportunities_human": {
    "method": "GET",
    "url": "https://astranl.com/kansen/"
   },
   "open_opportunities_machine": {
    "method": "GET",
    "url": "https://astranl.com/api/kansen.json",
    "returns": "each opportunity with the measured euro gap, its evidence line and candidates"
   },
   "single_opportunity": {
    "method": "GET",
    "url": "https://astranl.com/kans/{case_id}"
   },
   "partner_capacity_feed": {
    "method": "POST",
    "url": "https://astranl.com/api/feed/capacity",
    "auth": "X-Agent-Key from POST /api/agents/register",
    "docs": "https://astranl.com/koppelen/",
    "body": {
     "items": [
      {
       "id": "your own id",
       "kind": "stock|equipment|transport|capacity|energy|service",
       "title": "required",
       "location": "optional",
       "price_cents": "optional"
      }
     ]
    },
    "note": "free capacity and surplus stock become coordination cases; no account, no login"
   },
   "claim_profile": {
    "method": "POST",
    "url": "https://astranl.com/api/claim",
    "page": "https://astranl.com/claim/{osm_id}",
    "note": "profiles are built from open map data and carry name, trade and city only; a claim is verified before anything is attached to a person"
   },
   "widget": {
    "url": "https://astranl.com/embed/astranl.js",
    "docs": "https://astranl.com/embed/"
   },
   "open_work_by_trade": {
    "method": "GET",
    "url": "https://astranl.com/vakwerk/{trade}",
    "trades": [
     "schoonmaak",
     "groen",
     "bouw",
     "kozijnen",
     "klussen",
     "loodgieter",
     "renovatie",
     "klimaat"
    ],
    "shows": "open demands with a named buyer and a real deadline, and says plainly where no executor exists yet",
    "register": "POST /api/providers/register with a real KvK lookup"
   }
  },
  "live_adapters": [
   {
    "name": "intake_adapter",
    "direction": "need",
    "cadence": "hourly",
    "source": "order_intents + mail_work_queue (human replies only) + tasks, with truth filters against probes, bursts and internal duplicates"
   },
   {
    "name": "resource_adapter",
    "direction": "resource",
    "cadence": "hourly",
    "source": "merchant_skus (875k SKU, FTS5) + merchant_skus store=Loxam + verified providers + energy_flow.json; supply is pulled only by a real need"
   },
   {
    "name": "energy_adapter",
    "direction": "both",
    "cadence": "hourly",
    "source": "EPEX NL day-ahead via organism/flow_pulse.py; opens a case when the daily spread reaches 40 percent"
   }
  ],
  "autonomy": {
   "daemon": "case_daemon",
   "cadence": "every 2 hours",
   "does": "retries matching, refreshes candidates, reminds, escalates to the founder as a one-tap item, and closes a case dead after 30 days without movement (Article 103.1)"
  },
  "connection_law": {
   "name": "LAW 0.4 OPPORTUNITY-FIRST",
   "since": "2026-08-11",
   "rule": "never ask a company to join; bring it a measured euro figure with evidence and a link",
   "enforced_in_code": "core/email_engine.opportunity_gate blocks any join-class letter that carries no euro figure and no live /kans/ link",
   "channel_order": [
    "live order",
    "claim your own profile",
    "API or system feed",
    "aggregators",
    "EEN and RVO matchmaking",
    "tender coalition",
    "partner widget",
    "referral",
    "trade fairs",
    "cold email last"
   ],
   "onboarding": "zero risk: no subscription, no yearly contract, registration only AFTER interest",
   "referral": {
    "ruled_by": "founder",
    "ruled_at": "2026-08-11",
    "share_pct": 25,
    "basis": "NET income of AstraNL from operational coordination: the 1% coordination fee minus ALL AstraNL costs for the period",
    "not": "not 25% of turnover and not 25% of the fee",
    "attribution": "add ?ref=CODE to any shared link, or send ref in POST /api/coordination/case and POST /api/feed/capacity; the code is bound to the case itself",
    "no_proof_no_payout": "without a code bound to a case there is no payout",
    "unmeasured_cost_rule": "a cost that is not measured is never treated as zero; the report returns complete=false and the payout is held",
    "page": "https://astranl.com/referral/",
    "status_today": "coordination fee this month is EUR 0.00 while costs exist, so net is negative and nothing is payable; the rule computes itself once real money arrives"
   }
  },
  "demand_truth": {
   "since": "2026-08-11",
   "field": "vraag_bevestigd in /api/kansen.json",
   "rule": "a measured price or stock gap is NOT the same as someone asking for it; the two are shown separately and never mixed",
   "confirmed_demand": "a named principal with a real deadline (public procurement) or a request that came from a human channel",
   "unconfirmed": "a difference measured in a live source that nobody has asked for yet - published as exactly that",
   "value_rule": "a euro figure is shown only when it is known; confirmed demand may carry no figure and that is stated instead of guessed",
   "guard": "auto_guards/engine_pulse fails when a case claims confirmed demand without a named principal and without a human channel",
   "feasibility": {
    "field": "uitvoerder_beschikbaar in /api/kansen.json",
    "rule": "an executor counts only when verified AND their trade actually covers the work; having providers on file is not capability",
    "today": "8 confirmed demands assessed, 3 with a real executor, 5 without - density 37.5%",
    "shown_publicly": "a request with no executor says so and invites whoever can do it"
   }
  }
 }
}