← Manual home

V10 · Organization Market Bidding

How an organisation deals with the Market Operator and the System Operator — Market, Bid Desk, Market Month, Accounts and Billing.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

1. This volume — your seat at the market

This volume is the organisation’s working desk with two counterparties you never meet in person: the Market Operator and the System Operator.

You already know how to run a book, make a deal, and settle a PPA. Those are conversations with your counterparties — an IPP, an off-taker, a trader. This volume is the other conversation: the one with the people who run the shared marketplace. You do not telephone them. You file paper, you send bids, you acknowledge instructions, you read statements, and you pay (or get paid) through accounts they hold in trust.

Think of a produce market that opens the day before the stalls do.

You are a farmer, a grocer, or a wholesaler. You do not set the crate price. You write a sealed note: how many crates you can sell, or how many you will take, and the worst price you will accept. The Market Operator opens every note, fills demand from cheapest supply, and announces one crate price for that hour. The System Operator is not in the hall at all. It is the traffic officer on the road to the market: it decides which trucks may actually roll, and it can tell you to dump crates if the road is blocked.

That picture is enough to use the five rooms in the organisation sidebar. The rest of this volume is that picture, screen by screen.

1.1 Who this is for

You log into the organisation app. You are an IPP, an off-taker, a trader, or a seat that wears more than one of those hats. Once you register as a Balance Responsible Party (BRP), the Market Operator treats you as one party — one membership card, one set of financial security, one inbox. The plants, sites and pools under that card are Trading Units. The market schedules and settles units, not your internal books.

You do not sit in the Market Operator console (/mo) or the System Operator console (/so). Those chairs are V11 and V12. This volume is what you press from /org.

Follow along. Seat: a seeded organisation, for example OffTaker C (offtaker_c@webill.net) or a trader (offtaker_c is the Organisation door on /; traders such as trader_1@webill.net work the same password). Password: supersecret (dev/demo only). Path: / → Organization. In the left sidebar, open the TRADING module: Market, Bid Desk, Month (the Market Month; its page is titled After Delivery), and Accounts. This volume covers those, plus Billing, which sits in the MONEY module beside the Room. Cross-border pool trading is not a sidebar room in this release.

1.2 What “dealing with” them actually means

Dealing with the Market Operator is mostly paper, prices and money:

  1. You join. You file an accession application. They issue an MPID, two agreements, and an effective date. Until they Activate, you cannot bid.
  2. You declare what you own. Trading Units, Points of Delivery, standing data. They keep the register the whole market can trust.
  3. You bid. Day-ahead by 10:00 on D−1; intraday as the day unfolds. They clear, they publish one System Marginal Price per hour, they write your schedule.
  4. You settle. After the meters come in they write a statement. Weeks later they invoice. You pay, or they pay you, through accounts they hold at the Market Bank.

Dealing with the System Operator is mostly physics and instructions:

  1. You read the map. Zones, corridors, how much can actually flow.
  2. You acknowledge instructions. Dispatch, curtailment, outage, reserve. An instruction you ignore is not “pending” — it is a missed operational order.
  3. You tell them when the plant changed. Availability revisions and constraint declarations, so they do not dispatch a machine that is already down.
  4. You dispute instructed energy when their published trace is wrong, because that trace is what imbalance will be measured against.

The two offices sit next to each other. They are not the same job. The Market Operator never throws a switch. The System Operator never writes your invoice.

1.3 The five rooms, in one sentence each

The sidebar’s TRADING module is this volume, plus Billing from the MONEY module. Five rooms, in the order the work actually runs (the sidebar rows are shorter — Month, Room — because the module says the rest):

Sidebar Job in one sentence Taught in
Market Join, stay eligible, read notices, talk to the System Operator, keep the register honest §4–§11
Bid Desk Bid tomorrow, patch today, then read the day’s chalkboard and the meter §12
After Delivery The Market Month — Billing Period wallet and file-join §13
Accounts Watch cover, move cash, pay and get paid, read vesting §14
Billing The documents — received, issued, sites, market, overview §15

Market is complete in this volume. Every tab, every card, every table, every operational button on Info, Account/Cover, Notices, SO, Registry, Standing Data and API is named. Bid Desk, Market Month and Accounts are written at the same grain — every tab, card, table, graph and operational button. Billing is still mapped tab by tab; the arithmetic those rooms run is taught in V9 and V15. Billing at Market grain is still open — see V22 §10.

1.4 How to read this volume

If you have twenty minutes, read this chapter, §2 and §3. That is the story: two offices, five rooms, one membership card.

If you are joining for the first time, start at §5 and walk the application board until the seat is ACTIVE. Then §6 (cover), §9 (units) and §10 (what the plant can do). You cannot usefully open Bid Desk until those four are green.

If an instruction arrived and you do not know whether to press Acknowledge, go to §8 and §7.

If someone asks “why was I charged this?”, start at Bid Desk › Settlement (§12.6) for the day, §13 for the month, and §14 for cash, then the statement arithmetic in V9 §13–§15.

Where this is taught. The SAWEM primer — what a BRP is, what the Market Operator auctions, what the System Operator dispatches — is V9 §1. This volume does not re-teach that. It teaches your screens. The Market Operator’s chair is V11. The System Operator’s chair is V12. The HTTP contract is V13.

1.5 Time, money, and the words on the badges

Every clock in this volume is SAST, a fixed UTC+02:00 with no daylight saving. D is the Trading Day — the calendar day the energy is actually produced or consumed. D−1 is the day before. A Trading Period is one hour, written as its start: 18:00 means 18:00–19:00. A Billing Period is a calendar month. They are not synonyms. Daily work picks a day; month work picks a month.

Money sign on market statements. Positive means the Market Operator pays you. Negative means you pay the Market Operator. Energy sign: positive means produced, negative means consumed.

Three status words you will see on Info, and they are not the same question:

Word Question it answers
Application state (fifteen values) Where is this paperwork?
Party state (seven values) Where is this party in §6?
Status (PENDING / ACTIVE / SUSPENDED / REVOKED) May this seat bid today?

The application board is the source of truth. The other two are projections. §5.4 walks the fifteen states from your chair.

1.6 A day in four pictures

Yesterday you bid. Today the energy flows. Next month the money moves. The rooms you live in change with that clock.

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"nodeSpacing": 28, "rankSpacing": 52, "padding": 18, "subGraphTitleMargin": {"top": 12, "bottom": 56}}}}%%
flowchart TB
  subgraph join ["Before you ever bid"]
    A["Market › Info<br/>file the application"] --> B["Market › Account/Cover<br/>notify the two accounts"]
    B --> C["Market › Registry + Standing Data<br/>units the market can schedule"]
  end
  subgraph dminus1 ["Yesterday · D−1"]
    D["Bid Desk › Submissions<br/>by 10:00"] --> E["MO clears and publishes<br/>by 14:00"]
  end
  subgraph d ["Today · Trading Day D"]
    F["Bid Desk › IDM<br/>five smaller auctions"] --> G["Market › SO / Notices<br/>acknowledge instructions"]
  end
  subgraph later ["Market Month"]
    H["Market Month<br/>wallet · file-join"] --> I["Accounts + Billing<br/>cover, cash, documents"]
  end
  C --> D
  E --> F
  G --> H

Nothing in that picture is optional once you are ACTIVE. Skip Registry and the meter cannot settle. Skip Account/Cover and accession never completes. Skip Acknowledge and the instruction still happened — you just did not admit you saw it.

The next chapter is the two counterparties, in ordinary language, with the metaphors you will need when a new colleague asks “who do I call?” The answer is: you do not call. You open the right room.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

2. Two counterparties — Market Operator and System Operator

The organisation app talks to two offices that share a building and do not share a job. Mixing them up is the most expensive confusion on this desk: you will send a bid to the people who throw switches, or wait for an invoice from the people who dispatch plant.

2.1 The airport metaphor

Picture an airport.

The Market Operator is the ticketing hall, the published timetable, and the airport bank. It decides who may fly (your accession). It runs the auction that fills tomorrow’s seats (the day-ahead market). It publishes one price for a crate of energy that hour (the System Marginal Price). It holds your deposit so other passengers are not left paying your bill (credit cover). Weeks later it issues the invoice.

The System Operator is air-traffic control. It does not sell tickets. It keeps the sky from colliding. It draws the map of runways and corridors (network zones). When weather closes a runway it tells a specific aircraft to hold or divert (dispatch, curtailment, outage). You acknowledge the instruction so the tower knows the cockpit heard it.

You buy a ticket from ticketing. You take orders from the tower. You do not argue a delay with the cashier, and you do not pay an invoice to air-traffic control.

Two offices, one organisation — what each one is for
Your organisationone BRP membership card
→files · bids · pays
Market Operatorauction · register · till
Your Trading Unitsplant, load, storage
→instructions · map
System Operatorzones · dispatch · reserve

2.2 What the Market Operator is, in this app

The Market Operator (MO) is the independent party that runs SAWEM. From your chair that means five verbs:

Verb Everyday meaning Where you see it
Admit Decide whether you may join, and on which date you become a Party Market › Info — the application board
Register Keep the public list of who is who, and the private list of your units Market › Registry · Standing Data
Clear Run the day-ahead auction and the five intraday auctions Bid Desk; they sit on /mo/bidding
Publish One SMP per hour, two schedules, notices, the accession register Bid Desk › Daily · Market › Notices
Settle Write the statement, raise the invoice, hold cover in trust Bid Desk › Settlement · Market Month · Accounts · Billing

They do not write the prices on your bid. They do not throw a switch. They do not settle your bilateral PPA — that is V8.

Where this is taught. The MO’s own chair — every /mo room — is V11. When this volume says “the Market Operator will Activate”, the button they press is on V11 §21.

2.3 What the System Operator is, in this app

The System Operator (SO) keeps the physical system secure. From your chair that means four verbs:

Verb Everyday meaning Where you see it
Map Publish zones, corridors, and how much can actually flow Market › SO — constrained scheduling model
Instruct Dispatch, curtail, call reserve, declare a system condition Market › Notices (the instruction table) · Bid Desk banner
Certify Agree how much reserve a unit may offer Market › Standing Data → Request Certification
Trace Publish Instructed Energy — the path they told the unit to follow Market › SO — Instructed Energy card

They do not set the energy price. Zones limit flow; they do not mint a local SMP. An instruction changes what “good delivery” means for imbalance. It does not quietly rewrite yesterday’s day-ahead price.

Where this is taught. The SO’s own chair — Dispatch Desk, Network Model, Registry — is V12. When this volume says “acknowledge the instruction”, the tower that issued it is V12 §4.

2.4 A worked hour — one crate, two offices

Data. Teaching numbers, not a sealed statement line. Pattern to expect on any ACTIVE demo seat. The golden fixture used across V7/V9 is Trading Day 2026-07-15, hour 18:00.

Yesterday (D−1). Your solar unit offered 20 MWh at a reservation of R 400/MWh. The Market Operator cleared the hour at an SMP of R 520/MWh. You were scheduled for 18 MWh. That is a ticket: 18 crates sold at R 520, not at R 400. The note only got you into the market.

Today 17:40. A corridor constraint appears. The System Operator issues a Curtailment instruction: hold 12 MWh for the hour, not 18. The instruction lands on Market › Notices (and the same row’s effects). You press Acknowledge. The Market Operator does not re-run yesterday’s auction. The 6 MWh you can no longer deliver is instructed. Imbalance will not treat it as a broken promise in the same way as a silent miss.

Tonight. Meters say you delivered 12.1 MWh. Bid Desk › Imbalance shows scheduled 18, instructed 12, actual 12.1. The small leftover is ordinary metering noise inside the band. Accounts later show the day-ahead energy pot (18 MWh at SMP) and a separate instructed/curtailment treatment — two offices, two lines, one hour.

Conservation of the story, not of a particular rand:

ticket (MO)     = 18 MWh scheduled at SMP
tower (SO)      = 12 MWh instructed
meter           = 12.1 MWh actual
imbalance story = actual − instructed, not actual − yesterday’s ticket

That is why Acknowledge is not politeness. It is how you admit the tower spoke, so the cashier can use the right measuring stick.

2.5 What you send, what you get

A pocket card for a new colleague.

To the Market Operator you send

From the Market Operator you receive

To the System Operator you send

From the System Operator you receive

There is no “call the MO” button and no “call the SO” button. Every verb above is a control on a screen in this volume, or an API operation on the API page you open from Market › Info.

2.6 Three facts that stop most arguments

  1. One price for the country, per hour. The day-ahead SMP is not per zone. Zones belong to the System Operator. They cap flow. They do not mint a Johannesburg price and a Cape Town price.
  2. Clearing is not paying. Schedules and prices publish at 14:00 on D−1. Cash leaves bank accounts on the Settlement Calendar, weeks later. Daily numbers on Market Month are a preview, not a payment.
  3. An instruction does not rewrite the bid. The IDM re-uses the day-ahead curve and moves volume for hours that have not started. A curtailment moves what you must physically do. The original crate price stays.

The next chapter is the map of the five rooms — which sidebar item, which tabs, which office you are talking to when you press it.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

3. The five rooms

The organisation sidebar is Configuration, a row of its own at the top, and four collapsible modules — the lives the platform actually has:

Module The life Rooms
WHEELING Your commercial life OffTaker Sites · IPP Sites · Trader Pools · Deals · Virtual Wheeling
TRADING The market life this volume teaches Market · Bid Desk · Month · Accounts
CARBON The tax, the venue, green claims Tax · Market · Certificates
MONEY How you are doing, and what you show finance Room · Billing

The rows are short because the module says the rest. TRADING › Month is the room this volume calls the Market Month (its page is titled After Delivery); MONEY › Room is the Money Room; CARBON › Tax and Market are the carbon tax and the carbon venue. Two rows read Market — SAWEM’s and carbon’s — and the module above each one tells them apart.

Each module is a row with an icon tile and a chevron, and the row is a button: click it to open or close that module. Its rooms are indented beneath it, and the room you are in is a solid amber chip. The module holding your room opens itself, so the chip is never hidden. A closed module still shows an amber number — the sum of what is waiting inside it — so a life you have folded away can still wave. Your open/closed shape is remembered per organisation in this browser.

The action bar sits under the brand: Sign out, and the chevron that narrows the sidebar. Under it, your organisation chip. Under that, Quick jump — type and the sidebar filters as you go: matching rooms, or every room of a module whose name matches, with the matching modules opened for you. Esc or the × clears it.

Collapse the whole sidebar with the chevron and the module rows disappear: an 80 px rail of room icons with hover tooltips.

Learn the chrome once. Every market room reuses it: organisation header, page title, one-sentence description, flash (green info or red error), and the tab bar belonging to that room.

3.1 Why the menu is in this order

The sidebar is not an alphabet. Inside a group it follows the operating clock.

  1. Market — may you be here at all? Membership, cover, inbox, register.
  2. Bid Desk — what are you doing about tomorrow and today?
  3. Month (the Market Month; the room is titled After Delivery) — what actually happened this month?
  4. Accounts — where is the cash and the cover?

Cross-border pool trading is not a Trading room in this release.

Billing is the fifth room of this volume — what document do I show finance? — and it sits one module down, in MONEY, beside the Room: the document lives with the picture of how you are doing.

A badge in the sidebar means attention, not inventory. Deals counts proposals waiting, negotiations live and disputes needing you; Certificates counts batches to review. How many sites or pools you own is written on the room label itself, in brackets — OffTaker Sites (n), IPP Sites (n), Trader Pools (n) — and it counts every site or pool the organisation holds, whatever its status: the same number as the N sites or N pools chip in that room’s top bar (and, on IPP Sites, its Sites (n) tab).

The five rooms, in the order the clock actually runs
1Marketjoin · register · inbox
→
2Bid DeskDAM · IDM · settle
→
3Market Monthwallet · file-join
→
4Accountscover · cash
→
5Billingdocuments

3.2 Shared chrome

Piece What it is How to read it
Sidebar Left column, organisation app The TRADING module is this volume (plus Billing, in MONEY)
Active item Highlighted label You are in that room
Module row Icon tile + uppercase label + chevron, and an amber number when closed Click to open or close that life; the number is what is waiting inside
Quick jump Search box above the modules Filters rooms and modules as you type; Esc clears
Page title One noun — Market, Bid Desk, After Delivery, Market Accounts, Billing The room. After Delivery is the Market Month.
Page description One sentence under the title The job of this room
Tab bar tabs tabs-bordered with an icon and a label Sub-rooms
Flash Green info or red error after a write Read it before you press again
Loading card Navy spinner, “Loading …” An async section; wait, do not re-click

A Trading Day picker is a calendar day. A month picker is a Billing Period. Default trading date: before 10:00 SAST the picker often offers tomorrow (you are still in D−1); from 10:00 it offers today. Default billing month: usually the previous calendar month once the current one is still open.

3.3 The sidebar, item by item

Path prefix: /org. Module: TRADING, except Billing, which is in MONEY. The room column is the page title where it differs from the sidebar row.

Sidebar Room Icon Lands on Tabs Taught in
Market Market presentation-chart-line /org/brp → Info Info · Account/Cover · Notices · SO · Registry · Standing Data. API is a link on Info, not a tab §4–§11
Bid Desk Bid Desk inbox-stack /org/brp/bid-desk → Daily none on Daily — Submissions, IDM, Forward, Settlement and Imbalance are destination rooms from a Trading Unit card §12
Month Market Month (After Delivery) calendar-days /org/brp/after-delivery/month none — the Billing Period wallet and file-join §13
Accounts Market Accounts wallet /org/market-accounts Overview · Payments & receipts · Balances · Statements §14 · §14.11
Billing (MONEY) Billing document-chart-bar /org/billing Received · Issued · Sites · Market · Overview · Analyze §15

Trading Units and Balancing Groups no longer have a sidebar row of their own; the live list they become is Market › Registry, and the planner is taught with them in V9 §3.3 · V9 §3.6.

Former Bid Desk paths /org/brp/bid-desk/settlement and the old /org/brp/imbalance redirect to Bid Desk › Settlement and Imbalance. /org/brp/bid-desk/month and /org/brp/reconciliation land on Market Month. Bookmarks still work.

3.4 Which office you are talking to

Not every room talks to both offices.

Room Market Operator System Operator
Market › Info Yes — accession No
Market › Account/Cover Yes — §6.2(11) notice, cover assessment No
Market › Notices Yes — broadcasts, defaults, cover calls Yes — instruction table, Acknowledge
Market › SO Indirect (re-declare path) Yes — map, traces, revisions, constraints
Market › Registry Yes — the register they keep Zones on the unit (SO map)
Market › Standing Data Yes — completeness gate for bidding Yes — reserve certification
Market › API MO OpenAPI SO OpenAPI
Bid Desk Yes — submissions, clearing, IDM, the day’s chalkboard System-condition banner; Instructed Energy on Settlement / Imbalance
After Delivery (Market Month) Yes — month wallet, file-join No
Accounts Yes — the three pots, cover, EFT No
Billing Yes — market documents No

3.5 A week on the clock

Use this as a standing rhythm, not a legal timetable. Gates and business-day counts live in V9 and V1.

A market day from the organisation chair (SAST)
00061218
  • 10:00 DAM gate — Bid Desk › Submissions
  • 14:00 Prices and schedules published
  • through D IDM + SO instructions
  • 17:00 Credit-cover assessment written

Monday–Friday, before you are ACTIVE. Live on Market › Info. Answer information requests. Sign agreements. Notify accounts. Do not open Bid Desk expecting a submit that will stick.

Every D−1. Bid Desk › Submissions by 10:00. Then Daily to watch publication. Notices if something broadcast.

Every Trading Day. Bid Desk › IDM for the hours still left. Notices and SO for instructions. Acknowledge the same day.

Every morning after delivery. Bid Desk › Settlement for yesterday. Imbalance if the hour looks wrong. Market Month as the days accumulate, and when the monthly file arrives.

Every 17:00 assessment, and at month-end. Accounts for cover and cash. Billing for the document finance will file.

The next seven chapters are Market — the membership desk — tab by tab.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

4. Market — the membership desk

Screen: Market (/org/brp). Sidebar icon: building-library. You land on the Info tab.

Market is one sidebar item with six tabs. Bid Desk and After Delivery used to share this neighbourhood; they are now their own sidebar items. The published interface for machines used to be a seventh tab; it is now a link on Info. Everything that answers who you are, whether you may trade, and what the two operators have told you still lives here.

Think of Market as the club reception. Info is the membership application. Account/Cover is the deposit the club holds. Notices is the pigeon-hole. SO is the sports-ground steward. Registry is the list of which lockers you hold. Standing Data is the medical certificate for each player. The letterbox for systems that do not use the front door is API, opened from Info — it is not a desk you work every morning.

You cannot skip reception and go straight to the trading floor. A Bid Desk without an ACTIVE registration is a desk that will not submit.

4.1 The tab bar

Nav #market-nav, aria-label Market. Each tab is #market-tab-{id} with an icon and a label.

Tab Icon Route One-sentence job Chapter
Info information-circle /org/brp File and watch the accession; attach books; read compliance §5
Account/Cover banknotes /org/brp/account-cover The two settlement accounts and the 17:00 cover assessment §6
Notices megaphone /org/brp/notices Chronological inbox — MO broadcasts and SO instructions §7
SO signal /org/brp/so Constrained model, instructed energy, dispatch control §8
Registry identification /org/brp/registry Trading Units, Points of Delivery, counterparty inbox §9
Standing Data clipboard-document-check /org/brp/standing-data What each unit can physically do, and who must answer §10

API is not on this bar. On Info, link #market-api-link (label API, code-bracket icon) sits to the right of the tabs and opens /org/brp/api. Old bookmarks to that address still open the same page. While you are there, the six tabs stay visible and none of them is current. The sticky bar reads API. Taught in §11.

The page shell is #market-page. Title Market. Description changes slightly with the tab; Info’s is Balance-responsible-party registration, the books it balances and SAWEM compliance.

4.2 Empty, loading, and “not yet a party”

Several tabs refuse to work until a BRP registration exists. They all say so in the same voice: a dashed empty card, a short reason, a Register link back to Info.

Async sections show a compact navy spinner (section_loading) with a label such as Loading registry stats…. Wait for the card. Clicking again does not hurry the Market Operator.

4.3 The membership-card metaphor

One organisation, one BRP registration. That card is the legal container. Trading Units are what the market schedules. Strategy books (trader / IPP / off-taker) are how you organise work. A book that is not attached to the registration is a book the Bid Desk cannot submit for.

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"nodeSpacing": 32, "rankSpacing": 40, "padding": 12}}}%%
flowchart LR
  O["Organisation"] --> R["BRP registration<br/>one card"]
  R --> TU["Trading Units<br/>what the market schedules"]
  R --> BK["Books<br/>how you plan"]
  TU --> POD["Points of Delivery<br/>meters, pairing"]
  TU --> SD["Standing data<br/>what the plant can do"]

Info creates the card. Registry and Standing Data fill it. Account/Cover proves there is money behind it. Notices and SO are how the two offices talk to the card once it exists. API is how a machine talks as the card. You open that letterbox from Info; it is not one of the six desks.

Follow along. Seat: any seeded org that already has a BRP (most full_demo organisations do). Path: Market. You should see six tabs and, on Info, an API link to the right of them, plus a header with a BRP code, a status badge, and a View Registration button. If you see Register as a Balance Responsible Party instead, you are on a seat that has not filed yet — §5.1.

The next chapter is Info, field by field and button by button.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

5. Market · Info

Screen: Market → Info (/org/brp). Tab #market-tab-info. This is the membership application, the membership card, and the day-to-day answer to may this seat bid today?

The Market Operator sits on the other side of every button on this tab. The System Operator does not.

To the right of the tab bar, link #market-api-link (API) opens the machine letterbox at /org/brp/api. It is on Info only. Account/Cover does not show it. A person working the membership card can ignore it. A system that bids without a browser starts there — §11.

Follow along. Seat: an organisation without a BRP if you want the empty CTA; or OffTaker C / a trader if you want a live card. Path: Market → Info.

5.1 No registration yet

When @registration is missing, Info is a single dashed card #brp-register-cta.

Piece What you see
Heading Register as a Balance Responsible Party
Body File the §6 accession application for this organization. The Market Operator issues the MPID and activates the seat; registration starts PENDING / APPLICANT.
Button #open-brp-wizard — navy-and-gold control under the heading. Click it. Event: open_brp_wizard.

That click opens the create wizard (§5.8). Nothing is sent to the Market Operator until you press Register as BRP on a complete application.

5.2 The stats strip

When a registration exists, six cards sit in #info-registry-strip. They are a dashboard, not buttons — each is a reading of work that lives on another tab.

Card ID Label Value How to read it If it looks bad, go to
#info-stat-trading-units Trading Units Count, unit Registered; sub Active trading capacity How many units the register holds §9
#info-stat-unpaired-pods Unpaired PoD Count. Badge All paired if zero (emerald). Else amber, sub Awaiting pairing Unpaired meters cannot settle (§12.3(1)) §9 drawer
#info-stat-incomplete Incomplete Data Count. Badge Fleet complete if zero. Else Need provenance Standing-data gaps §10
#info-stat-compliance Compliance Clear, or a count of uncovered ≥10 MW generators listed by name A large generator without cover is a Code problem §6
#info-stat-guarantee Guarantee type (Bank guarantee / Letter of credit / Cash / None / Guarantee) R … or —; sub Credit support on file What you declared at filing Header · wizard Security step
#info-stat-market-rules Market Rules Effective-from date, or Not synced; sub In-force code parameters Which published parameter set binds you MO Rules — V11 §25

Loading placeholder: #market-info-stats-loading — Loading registry stats….

5.3 The registration header

Card #brp-registration-header. This is the membership card as worn on the jacket.

5.3.1 Top band

Piece ID / control What it shows
BRP code heading, monospace The nickname you chose
Status badge registration_status_badge PENDING / ACTIVE / SUSPENDED / REVOKED — may this seat bid today?
Role badges brp_role_badge Generator / Load / Trader / Distributor
Party-state sentence #brp-clause-628 The §6 sentence (PartyState.describe)
Fallback copy — Awaiting Market Operator activation. when party state is empty and status is PENDING
MAY SUBMIT #org-compliance-may-submit A check, or —. Only ACTIVE may submit
MPID #brp-registration-mpid The permanent number the Market Operator issued. Shown when you may submit
Pricing — Price taker or Price maker
Safety margin — R {n}/MWh
Auto DAM #brp-auto-submit-dam-form / #brp-auto-submit-dam Checkbox, On by default. When on, the 03:00 worker sends a DAM draft for this BRP. When off, you Submit on Bid Desk (or via your own API) before 10:00, or the Market Operator rolls over. Label #brp-auto-submit-dam-label. Event: toggle_auto_submit_dam. This is a registration switch, not a Trading Unit switch.

Operational buttons on the band

ID Label When Event What happens
#view-brp-registration View Registration Always (once registered) view_brp_registration Opens the wizard in view mode — read-only replay of what you filed
#request-reactivation Request reinstatement Status REVOKED only request_reactivation Moves the application to REINSTATE_REQUESTED. Flash: Reinstatement requested — awaiting the Market Operator.

When status is SUSPENDED, a note #suspension-lift-is-section-six explains: Lift of this suspension is a clause 6 Market Governance Committee action — not an applicant self-service. There is no “unsuspend myself” button. That is the Market Operator’s (and the Committee’s).

5.3.2 Details grid

Block #brp-registration-details. Read-only facts, plus one editable limit.

Block / label Content
Warning Limit (§2.1(225)) #org-compliance-warning-limit The warning fires on headroom, not on a shortfall. You may set a lower limit than the Committee’s. Edit (#org-compliance-warning-limit-value or the Edit control) → form #warning-limit-adjust-form, field Amount (R) #warning-limit-adjust-value, submit Update #warning-limit-adjust-submit (adjust_warning_limit)
Acceded #brp-registration-acceded Long date, or —. Note: clause 6.2(8) — you become a Party on the agreements’ effective date
Party type Legal flavour, or —
VAT Number, or —
Market participant Yes/no mark — do you trade in DAM/IDM?
Balancing Agreement Reference, or —
Balance responsible Yes/no mark
MPA Market Participation Agreement reference, or —
Qualifying criterion Annexure 1 ground, or —
Agreement effective Long date, or —
Accession fee Paid, or —
Accounts notified Yes/no — the §6.2(11) written notice
Commissioning Yes/no — testing & commissioning declared

5.4 The application board

Section #brp-application-status. When: a registration exists and application_state is not ACTIVE. Once you are a trading Party the board hides: the header badge is enough.

Title: Your application. The badge is the fifteen-state machine. The explainer #brp-application-explainer is the exact sentence the Code-facing enum shows the applicant — not a paraphrase. Clock #brp-application-clock: Due + date; overdue or N business days left; yours or with the Market Operator.

5.4.1 What you see in each state

State The board tells you (applicant_sees) Period Whose move
PENDING Your application is with the Market Operator. It has 10 business days to ask you for anything further it needs (clause 6.2(4)). 10 BD MO
INFO_REQUESTED The Market Operator has asked for further information. You have 20 business days to provide it (clause 6.2(5)); after that the application expires. 20 BD You
INFO_SUBMITTED Your information is in and the Market Operator has 10 business days to review it (clause 6.2(6)). If it does not, your application becomes contractable anyway. 10 BD MO
CONTRACTABLE Every question has been answered. Your Market Participation Agreement and Balancing Agreement are prepared and issued for signature within 1 business day. 1 BD MO
CONTRACTS_ISSUED Your Market Participation Agreement and Balancing Agreement have been signed by the Market Operator and issued to you. You have 10 business days to sign and return them (clause 6.2(7)). 10 BD You
CONTRACTS_SIGNED You have signed both agreements. The Market Operator has 10 business days to approve them. 10 BD MO
APPROVED Your agreements are approved. Clause 6.2(7) needs 3 business days between approval and the effective date, and on that date you become a Party. 3 BD MO
ACTIVE Board hidden. Header: you may trade. — MO (suspend / revoke)
SUSPENDED Your participation is suspended. Submissions already accepted for periods before the effective date stand (clause 6.4). — MO
REVOKED Your participation has been revoked. Your obligations have not ended… You may request reinstatement. — You (request)
EXPIRED A deadline passed without the next step being taken, so the application lapsed. Nobody decided against you — you may ask for it to be reinstated. — You
WITHDRAWN You withdrew this application. You may ask for it to be reinstated. — You
DECLINED The Market Operator declined this application. Unlike an expiry, this was a decision — you may ask for it to be reinstated. — You
REINSTATE_REQUESTED Awaiting the Market Operator. — MO
REINSTATED The MO will resume a prior state. — MO
The applicant’s four moves; everything else is the Market Operator’s
PENDING
→MO asks
INFO_REQUESTED
→you submit
CONTRACTS_ISSUED
→you sign
ACTIVE
You can also: WITHDRAWN REINSTATE_REQUESTED

Applicant-owned targets: INFO_SUBMITTED, CONTRACTS_SIGNED, WITHDRAWN, REINSTATE_REQUESTED. A hand-crafted event cannot borrow Activate.

5.4.2 Information request — files and response

Shown when the MO has asked for further information (INFO_REQUESTED).

Clarification correspondence #brp-clarification-correspondence. Heading Information request. Each round: Question, Response, or empty Awaiting the applicant.

Supporting files #brp-application-files. Heading Supporting files. Each row #brp-application-file-{id}: title, filename, description. Links View and Download. Remove #brp-application-file-remove-{id} (remove_information_file) while you are still attaching.

Attach form #brp-info-attach-form (only in INFO_REQUESTED):

Field Label
Title Title — required. Flash if empty: Give the file a title before attaching it.
Description Description (optional)
File file input
Submit Attach file #brp-info-attach-submit (attach_information_file)

Response form #brp-info-response-form:

Field Label
Textarea Your response / Response
Submit Submit information #brp-application-action-INFO_SUBMITTED (submit_information / move_application target INFO_SUBMITTED)

Flash after submit: Information submitted. The Market Operator has ten business days to review it.

5.4.3 Agreements list

Block #brp-application-agreements when agreements exist. Heading Your agreements. Each row #brp-agreement-{id}:

That opens the PDF modal (§5.9).

5.4.4 Action buttons

Each visible applicant action is #brp-application-action-{TARGET} with phx-click="move_application" and phx-value-target. Labels come from ApplicationFlow.action_label/1. Submit information is the form above, not a second button in this row.

From state Buttons you see Confirm?
PENDING Withdraw Yes
INFO_REQUESTED Withdraw (plus the info forms) Withdraw confirm
INFO_SUBMITTED Withdraw Yes
CONTRACTABLE Withdraw Yes
CONTRACTS_ISSUED Sign contracts Yes — you are signing both agreements
CONTRACTS_SIGNED Withdraw Yes
REVOKED / EXPIRED / WITHDRAWN / DECLINED Request reinstatement No
REINSTATE_REQUESTED Withdraw Yes
APPROVED / SUSPENDED / idle Nothing for you to do — the next move is the Market Operator’s. —

Flash after Sign contracts: Both agreements signed. The Market Operator will approve them. After Withdraw: Application withdrawn. You may ask the Market Operator to reinstate it.

You cannot press Activate, Approve, Issue contracts, Request information, Decline, Suspend, or Revoke. Those labels exist on the Market Operator’s Participants board (V11 §21). The applicant LiveView refuses any other target with :not_permitted.

5.4.5 More time

When the clock is yours (INFO_REQUESTED or CONTRACTS_ISSUED) and you have not already asked:

ID What
#brp-extension-request-form Request more time
Field Business days needed
Field Reason for the extension
#brp-extension-request-submit Request extension (request_extension)

Flash: Extension requested for N business days. The Market Operator must decide before the deadline moves.

#brp-extension-pending: An extension request is with the Market Operator. Your deadline has not moved until it is granted.

#brp-extension-refused: the request was declined; you cannot ask again for this clock.

5.4.6 History

Collapsible #brp-application-history, summary History (N). Timeline #brp-application-history-list. Each item is a transition: PENDING → INFO_REQUESTED on {date} by {name} (applicant|Market Operator) (N business days, due {date}). Automatic rows are worded by the daily clock / no one acted; the period lapsed.

5.5 Compliance card

Component compliance_view, root #org-compliance. Heading Market Code compliance (§6, §15). Loading: #market-compliance-loading.

This is not Account/Cover. It is the outstanding work and the two agreements, plus Default Notices.

ID When What you see
#org-compliance-empty No view No market registration yet…
#org-compliance-balancing-group Alert Dynamic balancing-group alert
#org-compliance-default-note Party state DEFAULT You may still be trading while in default — read the note
#org-compliance-commissioning Commissioning flag Testing & commissioning note
#org-compliance-outstanding Always when view present Heading Outstanding, and by when
#org-compliance-nothing-outstanding Quiet Nothing outstanding.
#default-notices-inbox Notices exist Rows #org-compliance-notice-{id}: Default Notice — remedy by {date}, nature, Also required: …
#default-notices-inbox-empty None No Default Notices.
#org-compliance-clock Clock present {label} — §{clause} and the deadline
#org-compliance-clock-not-yours MO-owned clock This one is the Market Operator’s deadline…
#org-compliance-suspension-{tuid} Scheduled / in-effect {tuid} — suspension takes effect {date}
#org-compliance-agreements Always Agreements (§3.4(1)(b),(c))
#org-compliance-mpa / #org-compliance-ba Always Market Participation Agreement / Balancing Agreement — ref or not issued, status, executed date
#org-compliance-view-mpa / #org-compliance-view-ba viewable? View — same PDF modal as the board
#org-compliance-pay-now View present Pay now, argue later. plus §15.5(1) copy

There is no Notify Market Operator button here. That button lives on Account/Cover (§6.3).

5.6 Books balanced

Card #brp-books-balanced. Title Books balanced ({N}). Badge Unallocated when none attached. Note #brp-books-balanced-note explains Trading Units versus strategy books.

A book is how you plan (trader pool, IPP site, off-taker site). The registration is the market seat. Attach the book so Bid Desk has something to submit from.

Control ID Event What
Attach select placeholder Attach a book… phx-change="attach_book" Options Trader · {name} / Off-taker · {name} / IPP · {name}. Flash: Book attached.
Empty — — No books attached yet plus help copy
Table columns — — Book, Open-position cap, Last bid, Actions
Row #brp-book-row-{id} — One attached book
Detach #brp-detach-book-{id} aria Detach detach_book Flash: Book detached.

Loading: #market-covered-books-loading.

5.7 What you cannot do on Info

Honesty is a feature:

5.8 The registration wizard

Modal #brp-registration-wizard (create) or #brp-registration-view (view). Eyebrow SAWEM §6 accession / BRP registration. Title Register as a Balance Responsible Party / Balance Responsible Party.

Think of six short rooms in a corridor. Click any step button #brp-wizard-step-{0..5}. Incomplete rooms show a warning; hover Still needed lists missing fields. Green means that step has what it needs.

ID Label Event When
#brp-wizard-close aria Close wizard close Always
#brp-wizard-back Back prev_step Not on step 1
#brp-wizard-cancel Cancel (create) / Close (view) close Always
#brp-wizard-register Register as BRP submit Create, all steps valid
#brp-wizard-incomplete Complete the required steps to register. — Create, incomplete

Successful submit flashes BRP registration created. and closes. The seat lands PENDING / APPLICANT. The Market Operator still has to Activate.

Wizard steps six rooms

Step 1 Name 2 You are answering 3
1 Identity BRP code, roles, optional dates
2 Party Legal type, Annexure 1, two switches
3 Trading Safety margin, price taker?
4 Security Guarantee and Warning Limit
5 Agreements VAT, fees, MPA/BA, accounts, commissioning
6 Review Read it back, then Register as BRP
  1. 1Step is a room you can enter in any order.
  2. 2Name is the label on #brp-wizard-step-N.
  3. 3You are answering is the reception question, not a Code citation.

5.8.1 Step 1 — Identity

Panel #brp-wizard-panel-identity. Heading Identity & roles.

Control ID Required Meaning
BRP code #registration-brp-code Yes Nickname on your locker. Unique. Not the MPID
Role cards #brp-role-GENERATOR_BRP etc. At least one Generator, Load, Trader, Distributor (toggle_role)
Effective from / to #registration-effective-from / -to No Season-ticket dates; accession dates still govern

5.8.2 Step 2 — Party

Panel #brp-wizard-panel-party. Heading Party classification.

Party-type cards #brp-party-type-*: Generator, Trader, Distributor, Transmission, Network Operator, Import/Export, Consumer, Reseller. A Retailer is not admitted on this path.

Qualifying criterion #registration-qualifying-criterion is derived from the type — the Annexure 1 doorway. Two toggles:

A party can be balance-responsible without ever bidding. That is why there are two switches.

Where this is taught. Every field’s Code meaning is V9 §3.1. This chapter names the controls as built.

5.8.3 Step 3 — Trading

Panel #brp-wizard-panel-trading.

5.8.4 Step 4 — Security

Panel #brp-wizard-panel-security.

Letters of credit are modelled. This console’s enabled posted instrument today is cash in Collateral Reserve ([S28]). The wizard still records the legal form you intend.

5.8.5 Step 5 — Agreements

Panel #brp-wizard-panel-agreements.

Field Meaning
VAT number (§15.11.5) Required
Accession fee paid (§6.2(3)) Toggle — paid at application, not at accession
MPA / BA refs & executed dates Paper trail
Agreement effective date (§6.2(8)) When you become a Party
Agreements received by MO (§6.2(7)) Toggle
Collateral Reserve / Trading Clearing Account opened and MO notified (§6.2(11)) Toggle — the actual Notify button is later, on Account/Cover
Testing & commissioning (§6.2(10)) Toggle
Commissioning note Free text

5.8.6 Step 6 — Review

Panel #brp-wizard-panel-review. A definition list of the key fields. Create copy reminds you the seat will be PENDING. View copy is the same list, frozen.

In view mode every input is disabled. Register as BRP is hidden. Cancel reads Close.

5.9 The agreement PDF modal

Root #brp-participation-agreement-pdf-modal. Opens from the application board or the compliance View buttons.

ID Role
#brp-participation-agreement-pdf-modal-backdrop Click to close (close_participation_agreement_modal)
Dialog Title = agreement kind; ref; optional Signed by {name} · {date} #…-mo-sign
#…-close-x X
#…-viewer iframe /org/participation-agreements/{id}/view
#…-close Close

You read. You do not edit the PDF here. Signing is Sign contracts on the board.

5.10 Info — operational button index

Every write on this tab, in one place.

Control Event Typical flash
#open-brp-wizard open_brp_wizard (opens modal)
Register as BRP wizard submit BRP registration created.
View Registration view_brp_registration (opens view wizard)
Request reinstatement (header) request_reactivation Reinstatement requested — awaiting the Market Operator.
Update warning limit adjust_warning_limit (limit stored)
Attach file attach_information_file (file listed)
Remove file remove_information_file (file gone)
Submit information submit_information / move_application Information submitted. The Market Operator has ten business days to review it.
Sign contracts move_application CONTRACTS_SIGNED Both agreements signed. The Market Operator will approve them.
Withdraw move_application WITHDRAWN Application withdrawn. You may ask the Market Operator to reinstate it.
Request reinstatement (board) move_application REINSTATE_REQUESTED Reinstatement requested — awaiting the Market Operator.
Request extension request_extension Extension requested for N business days…
View agreement view_participation_agreement (PDF modal)
Attach book attach_book Book attached.
Detach detach_book Book detached.

Loading placeholders on the tab: #market-info-stats-loading, #brp-application-status-loading, #market-compliance-loading, #market-covered-books-loading.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

6. Market · Account/Cover

Screen: Market → Account/Cover (/org/brp/account-cover). Tab #market-tab-account-cover. Icon: banknotes.

This tab is the deposit the club holds, not the wallet you spend from. The wallet — add funds, pay invoices, request a withdrawal — is Accounts (§14). Here you read the published 17:00 assessment, respond to notices, record replenishment arrangements and notify the Market Operator that the two settlement accounts exist.

Metaphor: the airport bank has already opened two accounts in the Market Operator’s name, on trust. This tab is the letter that says “yes, those accounts are ours, please record it” plus the nightly printout of how much cover they require.

Follow along. Seat: an ACTIVE demo BRP. Path: Market → Account/Cover. You should see the Required / Posted / Headroom strip, two account-balance cards, then Accounts and credit cover with a Notify Market Operator button per un-notified account.

6.1 Loading

ID Label
#market-credit-cover-loading Loading credit cover…
#market-accounts-cover-loading Loading accounts…

Info-tab content (wizard, application board, books) is hidden on this tab. If you still see it, you are on Info.

6.2 Credit cover dashboard

Root #credit-cover. Read it in order: 1. Published cover position, 2. What needs attention, then 3. Settlement accounts. The publication date and daily 17:00 SAST label distinguish the assessment from current balances.

6.2.1 Stat cards #credit-cover-stats

The four compact cards are Required cover, Posted cover, Headroom and Warning limit. Each belongs to the dated assessment. Later deposits, payments and warning-limit changes appear in the next assessment.

How cover is calculated opens the method dialog, including its parameters and instrument restrictions. The notices below explain what needs attention; warning-limit changes use their own dialog. Cash is the enabled instrument today; modelled letters of credit remain disabled until enabled by the relevant market rules.

6.2.2 Account balance cards #cover-account-cards

Card ID Label Value Subtext Hover gist
#cover-collateral-reserve Collateral Reserve Account Balance R … or — {ref} at {bank} or No account recorded You may not withdraw from this account (clause 15.2.1(5)). Showing the balance without that constraint would look like spending money
#cover-trading-clearing Trading and Clearing Account Balance R … or — same Held by the Market Operator on trust. Interest accrues to you

Note the extra “and” in Trading and Clearing Account on these cards. The list below uses Trading Clearing Account. Same pot.

6.2.3 Empty assessment

#credit-cover-empty: No published credit-cover assessment yet. The figure on this page is the one the daily job wrote at 17:00 — not a live recompute.

6.2.4 Breakdown table #cover-components

Shown when an assessment exists.

Column
Component Clause
Row ID Component Clause
#component-unpaid-invoices Invoices issued but unpaid §15.10(8)(a)
#component-uninvoiced Statement amounts not yet invoiced §15.10(8)(a)
#component-undefined Undefined Potential Exposure — {daily} a day over {N} days §15.10(8)(b)

Amounts are rands, monospace.

6.2.5 Notices on the assessment

Credit Cover Increase Notice #increase-notice (kind == CREDIT_COVER_INCREASE_NOTICE):

Piece Text
Title Credit Cover Increase Notice — {amount}
Issued at #increase-notice-issued
Closes on #increase-notice-closes
Satisfied how #increase-notice-satisfied: Post additional cover, or pay an outstanding invoice early (§15.10.2(3)).
Body Clause 15.10.2(2): 17:00 on the second working day after this notice.
Subhead You can answer this two ways
#satisfy-post Post additional cover of {amount} into your Collateral Reserve Account.
#satisfy-pay-early Or pay an outstanding invoice early — clause 15.10.2(3).

There is no button on the notice. Posting cash and paying an invoice are Accounts (§14). This card is how you know the clock started.

Warning Notice #notice-WARNING_NOTICE:

History table #cover-history (columns Business day, Required, Posted, Headroom, Notices) is wired in the component. This tab does not pass history today, so the table stays empty here. The same component on Accounts can show a trail.

6.3 Accounts and credit cover

Root #org-compliance-accounts. Heading Accounts and credit cover with a mono span §15.2, §15.10.

Condition What you see
No registration view No market registration yet. Accession under clause 6.2 starts with an application to the Market Operator.
Registration, no accounts #org-compliance-accounts-empty: No account recorded. Clause 6.2(11) requires a Collateral Reserve Account or a Trading Clearing Account, and written notice to the Market Operator, before the effective date.

6.3.1 Per-account card

Each account: #org-compliance-account-{kind} where kind is TRADING_CLEARING or COLLATERAL_RESERVE.

Piece Text
Title Trading Clearing Account or Collateral Reserve Account
Line 2 {reference or "—"} at {bank or "the Market Bank"}
Interest Interest accrues to you. or Interest accrues to the Market Operator.
Un-notified warning Not yet notified to the Market Operator in writing — clause 6.2(11) needs that before the effective date.

The only operational button on this tab

ID Label Event When Effect
#org-compliance-notify-{account.id} Notify Market Operator (paper-airplane icon) notify_account with account-id notified_to_mo_at is nil SettlementAccount.notify_in_writing/1. Flash: Written notice under clause 6.2(11) sent to the Market Operator.

After notice: #org-compliance-notified-{id} — Notified in writing on {date} — clause 6.2(11).

That is the letter to ticketing. Without it, accession cannot complete. Press it once per account.

6.3.2 Provider, windows, surviving obligations

ID When Text
#org-compliance-provider Provider in force Credit Cover Provider: {name} ({authorisation}). Authorisation is one of: A South African banking licence · An international bank authorised to operate in South Africa · A parent-company guarantee · An insurer · This form of support
#org-compliance-credit-window Open window You have until {date} to complete {describe}. Clause 6.4(4): no Suspension Order may issue solely because your credit cover is absent during that period. Describe is either the replenishment window or the 10 business days allowed to appoint a new Credit Cover Provider
#org-compliance-surviving TERMINATED with surviving obligations Your participation has ended, and your obligations have not. Required cover stays until amounts are paid (§15.10(7)(e)); each deregistered unit keeps its Fixed Credit Requirement until the last Settlement Rerun for its deregistration day (§15.10(7)(f))

6.3.3 Open a replenishment window

When you have permission to replenish by an agreed date, record that arrangement here. Replenishment arrangements sits beside the existing windows under What needs attention. The form has moved from Accounts.

flowchart LR
  A[Open replenishment window] --> B[Enter permitted dates]
  B --> C[Record the arrangement]
  C --> D[Review the refreshed window]
  1. Choose Open replenishment window. The branded dialog opens over the page.
  2. Supply Opened on and Closes on. You may also enter Reason and Reference. Use the permitted closing date; this workflow does not choose a duration for you.
  3. Choose Open window. Missing required dates are refused. A backend refusal remains in the dialog so you can correct the fields. Cancel, the close button or Escape dismisses it without opening a window.
  4. On success, Replenishment window opened confirms the record and the compliance details refresh. A currently open window appears in Credit-cover arrangement in progress.

Opening the window does not transfer money, post collateral or rewrite the published assessment. Clause 6.4(4) concerns suspension solely for absent cover during the permitted period; other obligations remain.

6.4 What this tab is not

Cash funding and payments are in Accounts. Statements & transactions opens Accounts → Statements. The replenishment form here records permitted dates; it is a compliance arrangement, not a payment.

Where this is taught. Why three pots exist, and which money is yours, is V9 §3.16. How a cover call is satisfied in cash is §14.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

7. Market · Notices

Screen: Market → Notices (/org/brp/notices). Tab #market-tab-notices. Icon: megaphone.

Page description: Every notice issued to this BRP — Market Operator broadcasts, defaults, credit-cover calls, application updates and SO instructions for the selected month.

This is the pigeon-hole. Both offices drop paper here. The Market Operator drops broadcasts, defaults, cover calls, application updates. The System Operator drops dispatch, curtailment and outage instructions. You read the first kind. You Acknowledge the second.

Metaphor: a hotel front desk. Letters from accounts go in the same pigeon-hole as a note from the fire marshal. You may ignore a marketing flyer. You may not ignore the fire marshal.

Follow along. Seat: an ACTIVE BRP in a month that has been traded (full_demo). Path: Market → Notices. You should see a month picker and two cards: Notices (the table) and SO instructions.

7.1 Unregistered

Card #org-brp-notices-unregistered.

No pigeon-hole without a room number.

7.2 Month chrome

Panel #org-brp-notices-panel when registered. Heading Notices. Subtitle: Chronological inbox for {month}. Times are UTC.

Bar #org-brp-notices-month:

ID Control Event Notes
#org-brp-notices-month-prev Previous prev_month Always enabled on the panel
#org-brp-notices-month-form / #org-brp-notices-month-picker <input type="month"> aria Notices month select_month Jump to a month
#org-brp-notices-month-next Next next_month Disabled on the current month
#org-brp-notices-month-label Label — Human month name

Deep-link with ?month=2026-07.

7.3 The notices table

ID When What
#org-brp-notices-loading Async Loading notices…
#org-brp-notices-empty No rows No notices this month — Nothing was issued to this BRP in {month}. Use the month controls to look back at earlier periods.
#org-brp-notices Rows Table in #org-brp-notices-scroll

Columns: Date, Kind, Notice (#org-brp-notices-col-*). Each row #org-brp-notice-{id}: timestamp, a kind badge (notice.label), body text (notice.body).

There is no Acknowledge on this table. Market Operator broadcasts are read, not signed for. Credit-cover calls still need action — that action is on Account/Cover and Accounts, not a stamp here.

7.4 SO instructions card

Same month as the table above. Loading: #org-brp-so-instructions-loading — Loading SO instructions….

Card #org-brp-so-instructions. Heading SO instructions. Subtitle: Dispatch, curtailment and outage instructions issued in {month}. Same month as the notices table.

ID When What
#org-brp-so-instructions-empty None No SO instructions this month plus the look-back hint
#org-brp-so-instructions-table Rows Columns Issued, Kind, Site, Window, Reason, Effects, Status

Each row #so-instruction-{id}.

Kind badges: Curtailment · Planned outage · Unplanned outage · Dispatch constraint · Reserve · System condition.

Reason #instruction-reason-{id}: labelled reason, or reason not stated.

Effects (curtailment pattern): {MWh} MWh curtailed · deemed R {…} · imbalance excused R {…}. Otherwise —.

Status / actions

State What you see
Acknowledged Badge Ack ✓
Archived Badge Archived
Neither Button Acknowledge — phx-click="acknowledge" phx-value-id
Always Link View lines → Bid Desk › Imbalance (/org/brp/after-delivery/imbalance)

Acknowledge is a round-trip to the System Operator, not a local tick. Success flash: Instruction acknowledged. Failure flash: Acknowledge failed (…). Retry — the local stamp is only a projection of a round-trip.

Press it. The tower needs to know the cockpit heard. An archived instruction is end-of-day history; you cannot ack it after archive.

Where this is taught. What an instruction is, and why missing one under SO-controlled is a breach, is V12 §3. The map those instructions are issued against is §8. The Bid Desk also shows a system condition banner; that is context, not this table.

7.5 Notices — operational button index

Control Event Result
Previous / next / month picker prev_month / next_month / select_month Re-fetch both tables
Acknowledge acknowledge Round-trip; Ack ✓
View lines navigate Imbalance for the day
Register navigate Info, if unregistered
You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

8. Market · SO

Screen: Market → SO (/org/brp/so). Tab #market-tab-so. Icon: signal.

Page description: Constrained scheduling model, instructed energy and dispatch control. SO instructions live on Notices.

This is the tower radio and the wall map. Instructions you must sign for live on Notices (§7.4). This tab is the map those instructions are issued against, the Instructed Energy trace, whether a unit is under SO control, and the forms you use to tell the tower the plant changed.

Follow along. Seat: an ACTIVE BRP with Trading Units in named zones. Path: Market → SO. You should see Constrained scheduling model, then a metrics row of three cards: Instructed Energy, Dispatch Control, Instructions Reasons.

8.1 Unregistered

The same empty pattern: No BRP registration. plus Register. Instructed Energy still renders an empty card so the layout does not collapse.

8.2 Constrained scheduling model

Section #so-network-model-panel. Heading Constrained scheduling model. The body explains §3.3(4) and the two-month revision notice: the System Operator publishes a coming model so you can check your units against a boundary change before it invalidates a registration.

Loading: #so-network-model-loading — Loading network model….

A provisional banner [data-role=model-provisional-banner]: Not an SO declaration — do not plan against these figures. plus the blockers. Treat it as a sketch, not a clearance.

Empty [data-role=model-empty]: No zone model is loaded, so the System Operator’s network model cannot be shown.

If none of your units declares a zone: [data-role=no-zones-of-mine] — None of your Trading Units declares a Network Zone yet… Open the map to inspect the full System Operator model.

8.2.1 Action bar #so-action-bar

ID Label Event Opens
#so-event-subscription-open Event Subscription open_event_subscription Modal §8.6
#so-constraint-deletion-open Constraint Deletion open_constraint_deletion Modal §8.7
#so-revision-submission-open Revision submission open_revision_submission Modal §8.8
#so-view-all-zones View all zones open_zones_map_modal Map §8.9
#so-view-consolidated-report View Consolidated Report / Hide Consolidated Report toggle_dispatch_report Report §8.5

View all zones shows when you are a BRP, the model is loaded, and zones exist.

Nav #so-zone-nav. Label Select Zone:. Chip Active Model: N-1 Derated. Each tab #so-zone-tab-{code} (select_featured_zone).

The featured card #network-zone-{code}:

Basis chips: declared / assumed / no data. Hub labels: Deficit Hub / Surplus Hub / Balanced.

Footer counts: Corridors: · Interconnectors: · optional Not represented in any corridor:.

8.3 Metrics row

Row #so-metrics-row when registered.

8.3.1 Instructed Energy #instructed-energy-view

Heading Instructed Energy. This is the path the tower published for the unit in the period. Imbalance will be measured against it.

ID When What
#exposure-warning SO-controlled (rare on this page) DispatchControl.exposure_note
#revision-cross-reference Cross-reference set Clause plus the MO re-declare path
#instructed-energy-empty No trace No Instructed Energy has been published for this Trading Period.
#instructed-energy-total Trace Instructed Energy + MWh / MW·min
#instructed-energy-effective Determination Effective
#instructed-energy-segments Trace Columns Segment, From (min), To (min), MW, MW·min in period; footer Total #segment-total; rows #segment-{index}
#dispute-instructed-energy Always shown Dispute this value (clause 13.4.1(3)) — disabled if no trace; else dispute_instructed_energy with tuid

Flash on dispute: Instructed Energy dispute {id} filed (clause 13.4.1(3)). Failure: Could not file the Instructed Energy dispute.

Press it when the published trace is wrong. Do not press it because you dislike the instruction — that is a different argument.

8.3.2 Dispatch Control #so-control-state

Loading: #so-control-state-loading — Loading control….

Heading Dispatch Control plus badge STAND-IN when the intraday schedule is standing in (clause 11.4(9)).

ID When What
#control-state-empty No unit under SO control No unit is under System Operator control. The intraday schedule is standing in (clause 11.4(9)).
#control-state-{unit_key} Rows unit key · state · note

Footer Status: Automated dispatch loop inactive. or Units listed above are under System Operator control.

When the tower has taken the stick, the schedule is no longer the whole story. Instructed Energy is.

8.3.3 Instructions Reasons #instruction-reasons

A catalogue, not a live feed. Heading Instructions Reasons. Each row #instruction-reason-{code}:

Code Label
NETWORK_CONSTRAINT Network constraint
SYSTEM_SECURITY System security
RESERVE Reserve call
EMERGENCY Emergency operating condition
OUTAGE Outage / availability

Each carries its clause. Use the same codes on the revision and constraint forms.

8.4 Missing-instruction breach

Alert #missing-instruction-breach when breaches exist. Title Missing instruction under so_controlled (clause 11.4(10)). Body: the standing schedule is not a fallback once the unit is under SO control — the tower must keep instructing. This is the expensive silence.

Availability revisions that have been lodged list as #availability-revision-{id}: {tuid} · {clause} · {id}.

If you subscribed to events, #event-subscription-id shows the id.

8.5 Consolidated dispatch report

Section #dispatch-report when a report exists and you expanded it (View Consolidated Report). Heading Consolidated dispatch report (clause 14.2(1)).

Columns: Trading Unit, Control State, SO Instructions, Reasons, Status. Empty: No dispatch report rows for this trading date. Reason chip NONE. Footer Showing N trading unit(s) and a reference. Rows #dispatch-report-{unit_key}.

Collapse #dispatch-report-collapse (toggle_dispatch_report).

8.6 Event Subscription modal

@so_modal == :event_subscription. Dialog #so-event_subscription-modal (dom #event-subscription). Backdrop / Escape / Close / Cancel all close_so_modal.

Help #event-subscription-fallback: Poll-by-refresh is the §16(2)(f) fallback — GET /events?since= remains the system of record.

Form #event-subscription-form (subscribe_events):

ID Label
#event-subscription-callback Callback URL
#event-subscription-transport Transport — Webhook / SSE
#event-subscription-cancel Cancel
#event-subscription-submit Subscribe

This is how a machine listens. A browser tab that you refresh is the fallback, not a second truth.

8.7 Constraint declaration modal

Opened by Constraint Deletion (the control’s label; the form declares a constrained MW). Dialog around #constraint-declaration.

Form #constraint-declaration-form (submit_constraint_declaration):

ID Label
#constraint-tuid TUID
#constraint-trading-date Trading date
#constraint-available-mw Constrained MW
#constraint-reason-code Reason code (default NETWORK_CONSTRAINT)
#constraint-declaration-cancel Cancel
#constraint-declaration-submit Submit constraint

Tell the tower a cap. Do not wait for them to discover the line is short.

8.8 Availability revision modal

Revision submission. Form #availability-revision-form (submit_availability_revision):

ID Label
#revision-tuid TUID
#revision-trading-date Trading date
#revision-period-start Period start
#revision-available-mw Available MW
#revision-reason-code Reason code (default OUTAGE)
#availability-revision-cancel Cancel
#availability-revision-submit Submit revision

The plant is down. Say so before the tower dispatches it.

8.9 Zones map modal

When View all zones is pressed and the model is ok.

ID Role
#org-brp-so-zones-map-backdrop Click to close (close_zones_map_modal)
#org-brp-so-zones-map-modal Dialog. Title System Inter-Zonal Map & Status #org-brp-so-zones-map-title. Subtitle: The System Operator’s constrained scheduling map. Click a polygon for its card.
#org-brp-so-zones-map-close aria Close
#org-brp-so-zones-map Map hook NetworkZonesMap
#org-brp-so-map-zone-{code} Compact zone card beside the map

On this seat the compact cards are not a second selector (selectable? defaults false). The featured-zone tabs on the page are.

8.10 SO — operational button index

Control Event Result
Zone tabs select_featured_zone Featured card
View all zones open_zones_map_modal Map
Map close / backdrop close_zones_map_modal Close map
Event Subscription open_event_subscription Modal
Subscribe subscribe_events Subscription id
Constraint Deletion open_constraint_deletion Modal
Submit constraint submit_constraint_declaration Constraint lodged
Revision submission open_revision_submission Modal
Submit revision submit_availability_revision Revision listed
Modal close / Cancel / Escape close_so_modal Close
View / Hide Consolidated Report · Collapse toggle_dispatch_report Report
Dispute this value dispute_instructed_energy Dispute id
Acknowledge (handler exists; the table is on Notices) Use Notices

Handlers set_tab / search_archived still exist on the LiveView. The active/archive feed UI moved to Notices. Do not look for those tabs here.

Where this is taught. The SO console that issues these artefacts is V12. Zones as a concept: V12 §2.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

9. Market · Registry

Screen: Market → Registry (/org/brp/registry). Tab #market-tab-registry. Icon: identification.

Page description: Trading Units, Points of Delivery and the counterparty inbox.

This is the locker list. The Market Operator keeps the register the whole market trusts. You declare units and meters. The other party must confirm that a meter you named is actually theirs. Until they do, that energy cannot settle.

Metaphor: two neighbours sharing a garden tap. You file “the tap on the fence is also theirs.” They must sign “yes, that’s ours.” An unsigned tap is water nobody can bill.

Follow along. Seat: a demo BRP that has Trading Units. Path: Market → Registry. You should see Counterparty inbox, Trading Units table, and Points that cannot settle yet.

9.1 No party

#registry-no-party: This organization has no Balance Responsible Party registration, so it has no market registry yet. A Trading Unit belongs to a party, not to a site. Link Register.

9.2 Counterparty inbox

Card #registry-counterparty-inbox. Loading: #registry-counterparty-inbox-loading — Loading counterparty inbox….

Heading Counterparty inbox — plus count #registry-inbox-count and §7.1(6). The Market Operator must inform the other party when a Point of Delivery is added or removed. This inbox is how they answer. Without it every point would sit at PENDING_RECIPROCITY forever.

Empty: Nothing waiting on you.

Each notification #registry-inbox-{id}:

ID Label Event
#registry-confirm-{id} Confirm — this point is ours confirm_notification
#registry-dispute-form-{id} placeholder Why is this wrong? (required); submit Dispute dispute_notification

Flash on confirm: Declaration confirmed — the Point of Delivery is now paired. Failure: Could not confirm that declaration.

Confirm is the neighbour signing. Dispute is “that tap is not ours” with a reason. Leaving it sitting is how settlement incidents are born.

9.3 Trading Units table

Card #registry-trading-units. Loading: #registry-trading-units-loading. Heading Trading Units — plus #registry-unit-count.

Empty: None registered yet. Trading Units says how many you need. (That planner is Units/Groups in the sidebar.)

Table #registry-trading-units-table. Columns (#registry-trading-units-col-*): TUID, Name, Zone, Status, Class, MCR, Standing data, Counterparty, Actions.

Each row #registry-unit-{tuid}. MCR as {n} MW. Counterparty — if none.

Control ID What
Completeness #tu-completeness-{tuid} Badge Complete {n}/{m} or Incomplete {n}/{m} — standing data. Link → /org/brp/standing-data/{tuid}
View #registry-tu-view-{tuid} view_trading_unit — opens the drawer
From site #registry-tu-from-site-{tuid} Link to the site, when a href exists

9.4 Points that cannot settle yet

Card #registry-exceptions. Loading: #registry-exceptions-loading. Heading Points that cannot settle yet.

Two subsections, always rendered:

ID Heading Empty
#registry-exceptions-counterparty No counterparty — count §12.3(1) None.
#registry-exceptions-reciprocity Awaiting a counterparty’s declaration — count §7.1(6) None.

Energy through an unpaired meter cannot be settled. The market does not stop the rest of the day for one tap; it reports the incident. Your job is to drive both lists to None.

9.5 Trading Unit drawer

Opens from View. Root #registry-tu-drawer-root.

ID Role
#registry-tu-drawer-backdrop Click / Escape → close_tu_drawer
#registry-tu-drawer Aside. Eyebrow Trading Unit. Title #registry-tu-drawer-title (site name or official name) plus TUID
#registry-tu-drawer-close aria Close
#registry-tu-tab-pods Points of Delivery (select_tu_drawer_tab pods)
#registry-tu-tab-modification Effective Modification (modification)

9.5.1 Points of Delivery tab

Section #tu-pod-pairing-{tuid}. Heading Points of Delivery plus §7.1(6) · §12.3(1).

ID When What
#tu-pod-pairing-{tuid}-empty No pods No Points of Delivery are paired. Clause 12.3(1): energy through an unpaired meter cannot be settled.
#tu-pod-pairing-{tuid}-{pod.id} Each pod Node; Meter {n}; unpaired Settlement incident — unpaired (§12.3(1))… or Paired — {status}
#tu-pod-pairing-{tuid}-repair-{pod.id} Unpaired Form: Counterparty prompt — name the other BRP —; submit Re-pair (repair_pod)
#tu-pod-pairing-{tuid}-remove-{pod.id} Each Remove (remove_pod with pod-id and tuid)
#tu-pod-pairing-{tuid}-add Always on tab Form below
#tu-pod-pairing-{tuid}-add-submit — Add Point of Delivery (add_pod)

Add fields: Electrical node, Meter device number, Meter remote access id, Site (location) prompt — pick a site for GPS —, Counterparty (optional) prompt — pair later —.

Flash on add: Point of Delivery added. or Point of Delivery added. Pairing is still pending.

9.5.2 Effective Modification tab

Section #tu-modification-{tuid}. Heading Effective-dated modification plus §7.1(5). Cutoff copy #tu-modification-cutoff-{tuid}: changes after 08:00 SAST on D−1 do not make tomorrow’s schedule.

Form #tu-modification-form-{tuid} (submit_modification):

Field Label
MCR MCR (MW)
Ramps Start-up ramp (MW/h), Loading ramp (MW/h), Deloading ramp (MW/h)
Zone Network zone
Date Effective from
Submit Schedule Modification #tu-modification-submit-{tuid}

Flash: Modification dated {ISO date} — a new row, not an in-place edit. A cutoff error returns the message from the domain. This is a new version, like issuing a new locker key dated next Monday — you do not engrave over yesterday’s key.

9.6 Registry — operational button index

Control Event Result
Confirm — this point is ours confirm_notification Paired
Dispute dispute_notification Dispute lodged
View view_trading_unit Drawer
Completeness badge navigate Standing Data for that TUID
From site navigate Site
Add Point of Delivery add_pod Pod row
Re-pair repair_pod Pairing retry
Remove remove_pod Withdrawn
Schedule Modification submit_modification New dated row
Close drawer close_tu_drawer Close

Balancing Groups are not on this page. They live on Units/Groups.

Where this is taught. Why a Trading Unit is not your book, and how Balancing Groups net, is V9 §3.3–§3.6. The Market Operator’s register board is V11 §22.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

10. Market · Standing Data

Screen: Market → Standing Data (/org/brp/standing-data). Tab #market-tab-standing-data. Icon: clipboard-document-check.

Page description: What each Trading Unit can physically do — and who has to answer for the parts nobody has.

This is the medical certificate for each player. About thirty facts per plant. Most of them are not in any database. The screen’s job is not to shout “invalid”. It is a work list: what is missing, which clause requires it, and who supplies it — plant engineer, System Operator, or finance. Those three work on different clocks. The System Operator’s is the longest.

A zero that is true and a zero that is a placeholder are different numbers. Every field shows its clause and its provenance so you can tell them apart.

Follow along. Seat: a generator BRP in full_demo. Path: Market → Standing Data. You should see metric cards, an IPPs table, Register generator site / Register off-taker site, Fleet CSV, and zone-gap desk.

10.1 No party

#standing-data-no-party: no BRP, so no standing data. Register.

10.2 Fleet list (no TUID selected)

Header actions:

ID Label Event
#standing-data-open-site-onboarding Register generator site open_site_onboarding
#standing-data-open-offtaker-onboarding Register off-taker site open_offtaker_onboarding

10.2.1 Metric cards #standing-data-metrics

Label Reading
Active IPP Sites How many generator sites are on the fleet
Total MCR Capacity Sum of registered MCR
Data Fields Completeness How much of the thirty-odd is filled with provenance
Provisional Zone Placement Sites the map cannot yet place

10.2.2 IPPs table #standing-data-ipps

Subtitle: Registered Independent Power Producer… Search #standing-data-ipps-search / #standing-data-ipps-search-input, placeholder Search site, TUID, BRP ref… (search_ipps).

Columns: IPP / Site, Organisation, BRP Ref, TUID, MCR, Fields, Actions.

Row action View #ipp-view-{unit.id} → /org/brp/standing-data/{tuid}.

10.2.3 Fleet CSV #standing-data-csv

Heading Fleet CSV · Batch Import/Export. Drop zone: Drag & drop fleet CSV file here, or browse.

ID Label What
#standing-data-csv-export Download fleet file Export the current fleet
#standing-data-csv-upload-submit Upload CSV Import (allow_upload :standing_csv, .csv, 5 MB)

Use this when the plant engineer lives in a spreadsheet. Provenance still has to be honest after the upload.

10.2.4 Zone gaps #org-zone-gap-desk

Heading Sites the provisional map cannot place. Clause § 3.3(4)(a). Empty: All sites placed successfully.

Control ID
Export CSV #org-zone-gap-export
Table Site / Kind / Nearest zone / Offset #org-zone-gap-table

A site the map cannot place is a unit the register cannot honestly zone. Fix GPS / site, or wait for the SO model to cover the gap.

10.3 Plant detail /org/brp/standing-data/:tuid

Section #standing-data-detail. Back #stand-data-back returns to the fleet. Title #standing-data-detail-title plus TUID chip and status (for example Grid Active).

Request Certification #request-certification-open (open_request_certification) — the System Operator must agree reserve capacity. Until certified, reserve is 0.000 and availability indicators in submissions are forced to U.

Completeness gate #standing-data-completeness / #standing-data-incomplete: {tuid} cannot be registered… until the work list is clear. This is the gate Bid Desk will feel.

Callout inside #standing-data-editor: Data Provenance Mandate · §7.2(q)–(t) Standard.

10.3.1 Detail tabs #stand-data-tabs

Query ?tab= on the TUID URL.

Label ID
Capacity #stand-data-tab-capacity
Start-up Profile #stand-data-tab-startup-profile
Runtime Limits #stand-data-tab-runtime-limits
Ramp Rates #stand-data-tab-ramp-rates
Certified Reserve Capability #stand-data-tab-certified-reserve
Settlement #stand-data-tab-settlement
Classification #stand-data-tab-classification

Group panels: #standing-data-group-{capacity|start_up|run_limits|ramp_rates|reserve|settlement|classification}.

Each field is a tile #standing-data-field-{key} with Record #…-record (supply_field). You supply a value and a provenance. The tile shows the clause. Recording flashes {label} recorded as {provenance label}.

That is the whole editor: not a red “invalid”, a work list you tick with honest provenance.

10.3.2 Certified reserve table

Rows #standing-data-reserve-{category}. Columns: Capability, Clause, Certified, Status, SO reference, Indicator.

Categories: Regulating, Instantaneous, Ten-Minute, Synchronous Condenser Operation (§7.2(q)–(t)). Not self-declared.

10.3.3 Request Certification modal

#request-certification-modal / form #reserve-cert-request. Title Request Certification Form.

ID Label
#reserve-cert-request-* Category, Requested MW, Effective from, Note
#request-certification-cancel Cancel (close_request_certification)
#reserve-cert-request-submit Request certification

The decision is made on the SO Registry queue (V12 §6). You see the result here as a certified MW and an SO reference.

10.3.4 Storage and energy-constrained profiles

When the unit is storage: #storage-profile-form, submit Record storage profile #storage-profile-submit.

When energy-constrained: #energy-constrained-profile-form, submit Record energy-constrained profile #energy-constrained-submit.

These are standing shapes, not a day’s bid. The bid still goes out through Bid Desk.

10.4 Generator onboarding wizard

Component #site-onboarding / #site-onboarding-wizard. Title Register generator site #site-onboarding-title.

Steps: Site · Identity · Zone · Delivery · Engineering · Finance. Click any step.

ID Label
#site-onboarding-back Back
#site-onboarding-cancel Cancel / Close
#site-onboarding-continue Continue
#site-onboarding-register Register

This files a generator site and the first cut of its Trading Unit into the register. Standing-data completeness is still the work list on the detail page.

10.5 Off-taker onboarding wizard

#offtaker-onboarding / #offtaker-onboarding-wizard. Title BRP Standing Data OffTaker Registration.

Steps: Identity · Zone · Delivery · Demand · Finance. Same button pattern: #offtaker-onboarding-{back|cancel|continue|register}, step tabs #offtaker-onboarding-tab-{step}.

10.6 Standing Data — operational button index

Control Event / action Result
Register generator site open_site_onboarding Wizard
Register (generator) wizard submit Site + unit
Register off-taker site open_offtaker_onboarding Wizard
Register (off-taker) wizard submit Site + unit
Search search_ipps Filter table
View navigate Plant detail
Download fleet file export CSV
Upload CSV import Fleet update
Export CSV (gaps) export Gap list
Back patch Fleet list
Record (field) supply_field Provenanced value
Request Certification open_request_certification Modal
Request certification submit SO queue
Record storage profile submit Profile stored
Record energy-constrained profile submit Profile stored

Where this is taught. Why thirty attributes, who supplies each, and the completeness gate as a work list is V9 §3.7–§3.8. This chapter is the controls as built.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

11. Market · API

Screen: Market → Info → API (/org/brp/api). Link #market-api-link on Info. There is no API tab. Icon: code-bracket.

Page description: Published SAWEM OpenAPI for System Operator dispatch and Market Operator trading, settlement and registry.

This is the letterbox for machines. The same published document the operators read at GET /api/v1/publication/openapi, split into two cards so you open the office you mean.

If your desk is a human on these screens, you may never press this link. If your balance-responsible system submits bids and acknowledges instructions without a browser, this is the map of what that system may call. The full contract is V13.

The six membership tabs stay on the page. None of them is highlighted. The sticky bar heading is API (#org-page-heading). Use a tab to go back to a desk.

Follow along. Seat: any organisation. Path: Market → Info, then API at the right of the tab bar. Two cards: SO APIs and MO APIs. Press Open API Swagger on either.

11.1 SO APIs card

Article #org-brp-api-so. Heading SO APIs. Navy accent.

Body: Dispatch instructions, acknowledgements, Instructed Energy, availability revisions and the constrained scheduling model (§11, §13.4.1, §3.3). Tags: Dispatch, Events, Network zones, Network model.

Button #org-brp-api-so-swagger (open_swagger surface=so):

11.2 MO APIs card

Article #org-brp-api-mo. Heading MO APIs. Gold accent.

Body: Party registry, standing data, day-ahead and intraday markets, metering, balancing and financial settlement (§6–§10, §12, §13, §15). Tags: Party registry, Standing data, Day-ahead market, Intraday market, Metering, Balancing, Financial settlement.

Button #org-brp-api-mo-swagger (open_swagger surface=mo): same Open / Hide API Swagger pattern. Opening MO while SO is open switches surface; pressing the open button again hides.

11.3 Swagger panel

Panel #org-brp-api-swagger-panel when a surface is open. Title #org-brp-api-swagger-title is SO APIs or MO APIs. Close #org-brp-api-swagger-close (close_swagger).

Operations are grouped by tag #org-brp-api-swagger-tag-{slug}. Each operation #org-brp-api-swagger-op-{id}:

Control ID What
Toggle #…-toggle (toggle_operation) Expand / collapse the body
Body #…-body Shown when this id is @expanded_op_id
Copy #…-copy Copy the path
Request #…-request Example request shape

This is in-place documentation, not a console that fires live calls with your session. Integrators still authenticate as in V13. Every write on the Market API still needs an idempotency key; every response still carries X-Sawem-Server-Time because your clock is not the gate.

11.4 API — operational button index

Control Event Result
Open API Swagger (SO) open_swagger so Panel, SO tags
Open API Swagger (MO) open_swagger mo Panel, MO tags
Hide API Swagger open_swagger same surface Panel closes
Close close_swagger Panel closes
Operation row toggle_operation One body open at a time

Section #org-brp-api is a two-column grid on large screens, stacked on small ones.

That is the last Market tab. The remaining chapters are the other four sidebar rooms, mapped tab by tab, with the arithmetic still taught in V7 and V13.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

12. Bid Desk — tomorrow’s ticket and today’s patch

Screen: Bid Desk (/org/brp/bid-desk). Sidebar icon: presentation-chart-line. You land on Daily.

This is the organisation’s Bid Desk — the trading floor. Everything you tell the Market Operator about tomorrow, and everything you patch while today is still running, happens in this room. You do not telephone anyone. You do not edit the country’s price. You send a sealed note, you wait for the auction, and — if the weather or the load has moved — you send a smaller note for the hours that have not yet started.

From Daily you walk into five rooms that share a Trading Day and a Trading Unit: Submissions, IDM, Forward, Settlement and Imbalance. The month wallet lives on Market Month (sidebar: After Delivery, §13). This desk talks to the Market Operator. The System Operator appears as current system context and instructions that overlap the selected day.

Where this is taught. How a net position becomes a ladder, how 168 periods are validated, how a missed gate rolls over, and how IDM money is priced: V9 §4 and V9 §5. This chapter is the organisation screen in ordinary English — what you are looking at, why Daily, Submissions, IDM, Forward, Settlement and Imbalance are separate rooms, and which button to press.

Follow along. Seat: an ACTIVE BRP with a book attached (Market → Info → Books balanced). Path: Bid Desk (/org/brp/bid-desk). You land on Daily. There is no tab strip. You should see a navy organisation header, a white Delivery date control, a four-stage lifecycle, three connected summaries, an hourly energy chart and a row per Trading Unit.

Subsection Room Grain Path
§12.2 Daily — the front door the organisation’s day /org/brp/bid-desk
§12.3 Submissions Trading Day + Trading Unit /org/brp/bid-desk/submissions
§12.4 IDM Trading Day + Trading Unit /org/brp/bid-desk/idm
§12.5 Forward Trading Day + Trading Unit /org/brp/bid-desk/forward
§12.6 Settlement Trading Day + Trading Unit /org/brp/after-delivery
§12.7 Imbalance Trading Day + Trading Unit /org/brp/after-delivery/imbalance

The month wallet and the monthly file-join are not this chapter — §13.

12.0 The problem this desk solves

Your organisation has plants, customers, or both. Strategy has already worked out, hour by hour, whether you will have leftover energy (long) or a gap you still need to fill (short). That leftover or that gap is your net position.

The rest of the country does not know your book. The Market Operator runs a shared marketplace so leftover energy can find a buyer, and so a gap can be filled, at one price for everyone that hour — the System Marginal Price (SMP).

Somebody has to tell the marketplace, before tomorrow starts, what each of your Trading Units can do. And somebody has to patch that story when the forecast was wrong and the hour has not yet begun. That somebody is you, on this desk.

Think of a produce market that writes tomorrow’s crate list the night before.

You are a farmer, a grocer, or a wholesaler. You do not shout a price in the hall. You write a sealed note: how many crates you can sell (or take) in each hour, and the worst price you will accept. At a fixed time the auctioneer opens every note, fills demand from cheapest supply, and announces one crate price for that hour. After that, the list is locked — except for five smaller windows during the day where you may change remaining hours only, and changing your own mind is charged differently from being moved by the traffic officer on the road.

That night-before auction is the Day-Ahead Market (DAM). Those five smaller windows are the Intraday Market (IDM). This desk is where you write both notes.

What this desk sits between — your book on the left, the Market Operator on the right
Your organisationone BRP membership
→balances
Bookstrategy run · net position
→writes
Bid DeskDaily · five destination rooms
→sends
Submission168 periods · one TUID
→clears
Market Operatorone SMP per hour

12.0.1 What the Bid Desk does — and what it does not

It does six jobs. Daily (/org/brp/bid-desk) is the front door. Submissions, IDM, Forward, Settlement and Imbalance are the next rooms — you walk into them from Daily (or, once you are in one of those rooms, from the tab strip). Each destination room is one Trading Day and one Trading Unit.

  1. Show you the day. Have your units spoken? Has the Market Operator published? Is the next IDM gate still open? That is Daily — a scoreboard. You do not type a bid here.
  2. Send tomorrow’s note. Rebuild the draft from the latest strategy run, check it against the same rules the Market Operator will run, and Submit a 168-period Submission for one Trading Unit. That is Submissions (/org/brp/bid-desk/submissions) — the desk itself.
  3. Patch remaining hours. Lodge a re-declaration, or change whether the Market Operator may move your day-ahead schedule in the five intraday auctions. That is IDM (/org/brp/bid-desk/idm).
  4. Read what you already promised. A physical contract that was registered as a forward schedule is already on the wires. This room shows that promise and whatever the night auction still added on top. That is Forward (/org/brp/bid-desk/forward) — a scoreboard, not a register. You register the schedule from Deals (§18).
  5. Read what last night’s auction did to you. After 14:00 the day before delivery, this room shows — hour by hour — how many crates cleared, at the one crate price, and which extra lines the wires or reserve added. That is Settlement (/org/brp/after-delivery). It is a receipt, not a bank transfer.
  6. Compare the ticket to the meter. After the hour has run, this room asks: what did you promise, what did the System Operator tell you to do, and what did the meters actually record? You are charged on the difference, and the charge depends on who caused it. That is Imbalance (/org/brp/after-delivery/imbalance). It is a weighbridge, not last night’s receipt.

It does not post cover, pay an invoice, or edit the register. Those rooms are Accounts, Billing, and Market. The month wallet and the monthly file-join (the old Recon tab) live on Market Month (§13). It does not talk to the System Operator except to show the stress banner — you acknowledge instructions on Market › Notices. An Instructed Energy dispute on Settlement talks to the System Operator / DRB.

Bid → Clear → IDM → Statement — the market-day path this desk feeds
1Bidthis desk, D−1
→
2ClearMO auction · 14:00
→
3IDMfive patches
→
4DaySettlement · Imbalance

12.0.2 The Day-Ahead Market — booking tomorrow tonight

The Day-Ahead Market is one auction for tomorrow, run today. People say “daily DAM” because it happens every calendar day, for the next Trading Day. It is not a rolling chat. It is a deadline.

A useful picture is a theatre. Tonight you book seats for tomorrow’s show. Every hour of tomorrow is one scene. You do not book a single seat. You book a week of scenes at once — 24 hours × 7 days = 168 Trading Periods. The market wants a horizon, not a one-night stub. A 24-period body is the most common mistake and is refused as a horizon fault, not as “144 hours missing”.

In the theatre On this desk
Tomorrow’s show The Trading Day you picked
One scene One hour (a Trading Period), in SAST
Your booking form A Submission for one Trading Unit
How many seats you can fill Declared Available Capacity (generation) or Declared Consumption (load)
The worst price you will take The price curve — five blocks
Box-office closing time The DAM gate: 10:00 SAST on D−1
The posted ticket price The SMP — one price for everyone who cleared
The printed ticket The published schedule, by 14:00 on D−1

You do not name the ticket price. Your curve says “I am willing to run this many megawatts at this cost.” The auctioneer stacks every offer from cheapest to dearest, fills demand, and the last offer needed sets the SMP. Everyone who cleared is paid (or pays) that SMP, not their own number. A cheap solar farm that offered R 0/MWh and a coal plant that offered R 900/MWh can both clear at R 900 in the same hour.

A worked picture — OffTaker C’s solar hour. A farm thinks it can produce 75 MW at 18:00 tomorrow. It sends that as Declared Available Capacity, with a cheap curve (renewables often offer at the floor). The market has enough demand. The unconstrained schedule gives the farm 75 MWh. The SMP that hour is R 900/MWh. The energy payment is 75 × 900 = R 67,500. That money is struck on the unconstrained number, even if the wires later cannot take it — the System Operator’s constraint is compensated separately. The arithmetic of that split is V9 §13. You need only this: Daily will later show that 75 MWh as Unconstrained, and a smaller number as DAM constrained if the wires were tight.

One DAM hour — you send a sealed note; the auctioneer posts one price
D−1 · 10:00DAM gate
Your note75 MW @ cheap curve
clears→
SMPR 900/MWh
+
Energy paymentR 67,500
D−1 · 14:00publication
Unconstrained75 MWh
wires→
Constrainedwhat can actually flow
=
If they differcompensated separately

The gate is a door, not a hint. After 10:00 SAST on the day before delivery, the DAM will not take a first submission for tomorrow. A unit that stays silent is not left with nothing: the Market Operator rolls over yesterday’s accepted horizon — shifts it forward a day — so the country still has a number. That is a safety net, not a strategy. A rolled-over profile is a week-old guess wearing today’s date. The Submissions page tells you so, in a banner you cannot miss.

The 03:00 SAST worker on D−1 will send a draft you left sitting, if Auto DAM is on for this BRP (the default). Turn that off on Market → Info when you Submit yourself or when your own system PUTs the DAM. You do not have to sit here at three in the morning when Auto DAM is on. Submit on the screen is the same write path, for when you rebuilt after 03:00 or want the payload on the wire before the worker.

The Bid Desk tells you which way the seat is set: chip #bid-desk-auto-dam (Auto DAM · on / off) on Daily, Submissions and IDM; a sentence #org-dam-auto-submit on Daily and on Submissions; and the draft banner when a DRAFT is sitting. The chip links back to Market → Info.

D−1 on this desk (SAST) — the DAM is a handful of fixed times, not a rolling window. full_demo · seed 42 · Market Code 2.3
00061218
  • 03:00 Worker sends the draft if Auto DAM is on, unless you already Submitted
  • 10:00 DAM gate — first submission for tomorrow closes
  • 14:00 Schedules and the SMP are published
  • 18:00 IDM iteration 1 — first patch window for tomorrow

12.0.3 The Intraday Market — five amendment windows, not a chat

Weather and load still move after 10:00. The Intraday Market is how you tell the marketplace that remaining hours will look different. It is not a second DAM. It does not rewrite last night’s bid, and it does not change the DAM price. It re-uses the day-ahead curve and changes volume.

A useful picture is a train timetable. Last night you published tomorrow’s trains (the DAM). During the day you may issue amendments, but only for trains that have not yet departed. A train that left at 11:00 cannot be un-run at 12:05. There is no rolling “change anything up to 60 minutes before”. There are five auctions, at times that do not move:

Iteration Gate (SAST) What it can still move
1 18:00 the day before every hour of the Trading Day
2 00:00 01:00 onwards
3 06:00 07:00 onwards
4 12:00 13:00 onwards
5 18:00 19:00 onwards

Iteration 5 closes at 18:00, so it can move 19:00 and cannot move 18:00 — the hour whose delivery is beginning as the gate shuts.

Five IDM gates — each iteration can still move only the hours that have not started
1 · 18:00 D−1
→all hours
2 · 00:00
→01:00+
3 · 06:00
→07:00+
4 · 12:00
→13:00+
5 · 18:00

A re-declaration is a patch, never a replacement. You cannot re-price mid-day. If you could, you could watch the stack form and then move the price you are about to be charged at.

Changing your own mind costs money; being moved does not. If the System Operator cuts you because the wires are full, you are compensated at your own offered price — which for a renewable that offered zero is R 0.00, and you keep the day-ahead energy payment. If you cut your own Declared Available Capacity because the cloud arrived, that reduction is charged flat at the Intra-Day Price. Your own cheap offer buys you nothing. That is the whole plot of the IDM page, in one sentence.

The same solar hour, continued. Heavy cloud at 11:30. Before the 12:00 gate (iteration 4) the farm re-declares 18:00 from 75 MW down to 20 MW — a 55 MWh story in the Code worked example is 60 → 20 after a network constraint, charged 40 × R 945 = R 37,800. The DAM ticket (R 67,500 on the unconstrained 75) is not torn up. The IDM adds a separate charge for the volume you took back. You read that charge later on Market Month, not on this desk. The money walk is V9 §5.2.

IDM does not rewrite the DAM ticket — it adds a patch charge for volume you took back. Illustrative 18:00 on the worked delivery day.
18:00after iteration 4
DAM ticketstill standsenergy payment on unconstrained
you re-declared→against instruction
IDM patchcharged at IDPnot at your own offer
What you keep from last nightthe DAM energy linenot torn up
What you pay for changing your mindIDP × MWh taken backflat
Netticket minus patchtwo lines, not one rewritten price

Consent is a separate door. Your day-ahead submission carries a flag: may the Market Operator move your schedule in those five auctions? Willing means yes. Non-willing means hold my DAM schedule unless the System Operator imposes a new network constraint. Changing consent does not silently change volume. Two forms, two buttons, on purpose.

12.0.4 Daily is the front door — there is no tab strip

/org/brp/bid-desk is Daily. The page does not have a Daily / Submissions / IDM tab bar. Mixing “how is my day?”, “write the 168-period note”, “patch hour 18”, and “read yesterday’s chalkboard” on one scroll would bury the gate, so those jobs live on separate URLs. You start here. Summary counts filter the unit list. A labelled unit action opens the workbench directly, with its date and TUID.

Room The question it answers How you get there from Daily
Daily How is this organisation’s day going? Sidebar Bid Desk. Scoreboard. No Submit.
Submissions What am I sending for tomorrow? Prepare bid or Review submission on the unit row, or Bidding in its details drawer.
IDM What am I doing about hours still left today? Review intraday on the unit row, or IDM in its details drawer.
Forward What did we already promise on a contract, and what did the night auction still add? Forward in the unit’s Details & destinations drawer.
Settlement What did yesterday’s auction do to this unit? Settlement in the unit’s Details & destinations drawer.
Imbalance What did the meters say against the ticket? Imbalance in the unit’s Details & destinations drawer.

You share one trading date and (when you pick one) one Trading Unit across those rooms. Changing the date on Daily is the same date on Submissions, IDM, Forward, Settlement and Imbalance. The white Trading date bar is the clock on the wall: so you do not bid the wrong day, or after the door has shut.

On those rooms a small Bid Desk link (#back-to-bid-desk) brings you home to Daily. A tab strip #bid-desk-tabs lets you walk to the other rooms without going back first. Daily itself still has no tab strip.

The Market Operator reads the same day on Bidding (/mo/bidding) — V11 §13.5. You never sit in that chair from this app.

12.1 Your trading day — choose the date, then follow its progress

You need to know which day you are preparing, what still needs attention, and where to act. Your trading day puts those questions in that order. The overview remains separate from the workbench where you build, validate and submit a bid.

When you have no BRP registration, No BRP registration yet links to Registration. When your registration has no Trading Units, the overview explains how to add one. While evidence is loading, the page says Loading your trading day…. A failed load offers Try again.

12.1.1 The organisation header

The usual organisation header and Trading sidebar stay in place. The page heading is Your trading day. On a narrow screen, use the menu button to open the sidebar; the overview and its drawers fit the window.

12.1.2 Current market context

The compact context line shows a currently effective System Operator condition for your registration, with its SAST start time. If there is none, it says so. This describes the system now, even when you are looking at another delivery date. Market notices opens Market → Notices at /org/brp/notices.

A general notice does not stop a bid or change a deadline. A formally published gate extension appears beside the day’s decisions, with its reason, authoriser and publication time. A named-unit extension appears in that unit’s drawer and changes only its action; the next deadline names the unit whose extended gate will close. An SO instruction whose effective window overlaps the selected day is listed with its reference and times. Open the notices page to inspect the instruction before acting.

12.1.3 Delivery date and market clock

Choose Delivery date, or use Today and Tomorrow. This is the day energy is delivered. The day-ahead submission gate normally falls on the preceding day, D−1. The date travels with every unit action.

The Market clock reads South African Standard Time (SAST) from the server. Beside it, the next deadline names the actual market: DAM submission closes, or IDM 1 closes, for example. A published gate extension is included. After the last intraday gate, the page says there is no remaining submission gate for this day. Evidence and timing refresh once a minute; the countdown advances between refreshes.

12.1.4 The day lifecycle

The four stops explain how the same delivery day progresses:

flowchart LR
  A["DAM submission · D−1"] --> B["Publication and energy results"]
  B --> C["Delivery and intraday · D"]
  C --> D["Metering and imbalance"]
  1. DAM submission. Read the closing date and time, then prepare or review each unit’s bid before the gate.
  2. Publication & energy results. A closed gate does not mean results have been published. The page keeps Awaiting publication until the stored published result arrives.
  3. Delivery & intraday. Read the selected day’s delivery hours and the next actual IDM gate. Review remaining-hour differences where the forecast and published position have a matching basis.
  4. Metering & imbalance. After delivery, review published results and metering coverage. Missing or incomplete metering remains visible.

The workbench retains its detailed gate, draft and validation controls. They belong to the unit you open from this overview.

12.2 Daily — understand the day, then choose the unit

Follow along. Seat: Trader 1 in the seeded demo. Path: Trading → Bid Desk → Tomorrow. You should see the lifecycle, three summaries, the hourly portfolio chart and a row for each registered Trading Unit. Counts and deadlines depend on the selected date and the current server time.

12.2.1 Readiness and automation

Start with the summaries, then read the sentence naming the next unit that needs attention. Missing submissions take priority over rolled-over ones and other evidence gaps. The unit list itself stays in TUID order when data refreshes, so rows do not move while you read them.

Auto DAM · on/off appears below the list. Trading controls opens the existing controls page. Reading this overview, changing a filter or opening a drawer never sends a bid.

12.2.2 Three connected summaries

Summary What you learn What clicking does
Submissions Participant submissions received out of expected units. Missing and rolled-over submissions are counted separately. Received, missing and rolled-over counts filter the unit list.
Needs attention Units with exceptions relevant to the day’s stage. One unit counts once even when it has several exceptions. Shows the affected units.
Market results Awaiting publication, or how many units have published schedule evidence and when publication occurred. Shows units with results, or units still awaiting them.

All units clears the filter. A count never opens an empty workbench without a Trading Unit. An empty filtered list says No units match this filter. It does not mean that the organisation has no units.

Before the DAM gate, attention includes missing submissions, rollover, forecast gaps and hours capped by bid limits. After the gate and before publication, review missing or rolled-over submissions. During delivery, review schedule gaps and comparable differences for hours a remaining IDM auction can still change. After delivery, attention turns to published schedule and complete metering coverage.

12.2.3 Your portfolio through the day

The 24-hour chart uses MWh on its vertical axis and SAST hours on its horizontal axis. The colour key sits centered under the plot. Green Long bars show forecast energy left over; amber Short bars sit below zero for forecast gaps. These are shown separately so surplus at one book cannot conceal a shortage at another. Each linked book is counted once, even when two Trading Units share it.

The coverage line states how many books are represented and how many units have no unique book or share one. Missing hours remain gaps. A stored zero remains zero. Partial coverage is not a complete portfolio forecast.

Use Chart scope to inspect one unit. Where a book maps uniquely to that unit and the registration has a single book, the chart can compare its residual forecast with the DAM schedule and Latest spot schedule. Shared books and registration-wide netting use a different basis; the page explains why it does not overlay them as a unit comparison.

Click a chart hour or use Inspect hour · SAST. The reading below gives the exact quantities and, for a unit, the forecast run and schedule’s publication time. Latest spot schedule starts at the published DAM quantity. Each published IDM update replaces only the hours it contains and is labelled with its iteration. It is not a relabelled DAM daily total.

A difference invites you to review the position. The overview does not claim that redeclaration is profitable or assign a financial penalty using assumed prices.

12.2.4 Comparable Trading Unit rows

Each row gives the official name, TUID, zone, class, latest submission sequence and its full horizon. A 168-period submission is a seven-day horizon, not 168 hours of the selected delivery day.

The exception appears beside that status. Details & destinations opens all exceptions in a right-hand drawer. The main action is labelled Prepare bid, Review submission, Review intraday or View settlement, according to the day’s stage. You can open it directly; there is no selection checkbox to unlock it.

Each small hourly profile uses the same vertical scale as the other unit rows. A larger shape therefore means a larger position. Its caption gives the number of forecast hours; a flat measured zero and a missing series remain different states.

The drawer contains Bidding, IDM and Forward, followed by Settlement and Imbalance under After delivery. All five links carry the selected delivery date and that row’s TUID. A linked book is also carried into the workbench. Close with the top-right X, the backdrop or Escape to return to the same list.

12.2.5 Hourly evidence and published energy results

The unit drawer’s hourly table keeps forecast, unconstrained schedule, DAM schedule, latest spot schedule and actual metering separate. It names the latest schedule’s source and each meter value’s vintage and completion state. Actual Energy is shown on its net-import basis; it is not silently subtracted from a book residual forecast. Where multiple vintages exist, the latest available revised, verified or provisional value is shown once.

Sources and submission evidence exposes the forecast run identifiers, publication times, book, submission and rollover parent, plus meter sources. The published DAM energy payment, Energy Payment (EPM), and any congestion adjustments are read separately. EPM is one energy settlement component. It is not portfolio profit or cash received.

Market context & benchmarks, beside the context line, opens a separate read-only drawer. It compares technology capture rates with a 100% baseload reference for the last 30 days. Each technology retains its benchmark date, coverage, metered-site count and evidence labels. Stale, profile-based and demo-price observations are labelled. Detailed benchmarks & provenance retains captured and baseload R/MWh, capture, cannibalisation and floor-share percentages, and the source and policy records. These historical observations are not forecasts for your selected delivery date.

Where this is taught. The meaning of technology capture rates is in V9 §21. Bid-building controls stay in §12.3; changing intraday positions stays in §12.4.

12.3 Submissions

Submissions (/org/brp/bid-desk/submissions) is the desk. This is the only Bid Desk page that writes a day-ahead Submission to the Market Operator. Daily is a scoreboard. This page is the booking office.

Think of Daily as the arrivals board at a station: who has spoken, is the timetable up yet, is the next train still boarding. Submissions is the ticket window. You come here to write the note for one Trading Unit, check it, and hand it over. A small Bid Desk link (#back-to-bid-desk) takes you back to the arrivals board.

Why its own page: Validate, Rebuild from latest run, and Submit are expensive buttons. They belong next to the 168-period grid and the book ladder, not next to a scoreboard. One Trading Unit at a time — a Submit that silently picked “the first unit on the register” would be the worst kind of helpful. There is no dropdown that defaults to unit A. If the Trading date bar still says Select a trading unit, Submit will refuse rather than guess.

Where this is taught. Field-by-field DAM bid: V9 §4. What a Submission is: V9 §4.8.

Two layers sit on this page, and they are easy to mix up. Picture a restaurant. The kitchen has already plated tonight’s leftover portions and stuck a cost on each plate. That is your work. The waiter then writes a ticket the dining room will honour. The market clears the ticket, not the kitchen plate.

Layer What it is Who sees it
Book ladder (WB.Brp.Bid) This platform’s kitchen: net position, opportunity-cost rungs, clips You, on this page. The market does not clear this.
Submission (WB.Sawem.Submission) The Market Code object: 168 periods, curves, limits, consent You and the Market Operator. This is what clears.

Submit turns the first into the second and PUTs it. If curve emission fails, Submit refuses and says why. There is one write path. The 03:00 worker uses that same path when Auto DAM is on.

Follow along. Seat: an ACTIVE BRP (for example OffTaker C) with a book attached. Path: Daily → TU-IPP-A-PV → Prepare bid or Review submission. You should land on /org/brp/bid-desk/submissions?date=…&tuid=TU-IPP-A-PV. A tab strip #bid-desk-tabs lets you walk to IDM, Forward, Settlement and Imbalance without going back to Daily. The Trading date bar still shows the unit as read-only.

12.3.1 How you get here

On Daily, choose Prepare bid or Review submission on the unit row. You can also open Details & destinations → Bidding. Each route carries date=YYYY-MM-DD&tuid=TU-… and the linked book where one exists. You arrive at the workbench for that unit and day, ready to review the draft and the last accepted submission.

The summary counts on Daily filter its list; they do not open an unscoped workbench. Existing bookmarked Submissions URLs still work. Without a valid owned TUID, the workbench asks you to choose a Trading Unit and does not silently select the first one.

12.3.2 Gate open, gate closed, and still unpublished

Two clocks are easy to mash into one. They are not the same event. The theatre picture from §12.0.2 helps:

In the theatre On this desk When (SAST, D−1) Where you read it
Box office closes The DAM gate — last moment a first submission for tomorrow is accepted 10:00 Chip #bid-desk-gate in the bar, and the green/rose clock #submission-gate-clock on the day-ahead panel
Printed tickets go up in the window Publication — schedules and the SMP are posted 14:00 (clause 9.10(1)) Daily’s Market results summary #bid-day-results. Not a card on Submissions.

Between 10:00 and 14:00 the box office is shut and the printed tickets are not up yet. That stretch is normal. It is not a fault. You are looking at the note you already handed in (or at the empty desk if you never did). You do not yet have a crate price. Daily will still say Unpublished. The kitchen ladder’s SMP / Accepted / Result columns stay — / Pending until publication fills them.

Same Trading Date, two different mornings — the door and the results board are not the same light
D−1 · 09:40gate still open · unpublished
Box officestill taking notes
you may Submit→
Results boardblank
=
No SMP yetthat is honest
D−1 · 11:30gate closed · still unpublished
Box officedoor shut
note already in→
Results boardstill blank
=
You read your ticketnot the crate price

What “open and not published” looks like on this page

Typical: 09:40 on D−1. You selected TU-IPP-A-PV. You have a DRAFT in the kitchen, or nothing yet. The auction has not run.

Place What you see What it means in plain words
Bar chip #bid-desk-gate-state Clock icon, Open (amber), closes {countdown} to go The door is still open. The dots fill from the server, not your laptop.
Day-ahead clock #submission-gate-clock Emerald card. Gate open. Line #submission-gate-countdown reads {Nh Nm} left (for example 2h 20m left). Then closes {ISO time}, server time {ISO time} Same door, written out. If the Market Operator stretched it, a sky line says extended under §9.3(3). If your laptop disagrees, amber #submission-gate-skew names the seconds.
Draft banner #bid-desk-draft-banner Amber, if the book bid is still DRAFT A warning, not a button. Auto DAM on: the 03:00 worker will send it unless you Submit. Auto DAM off: you must Submit yourself before 10:00 or the Market Operator will roll over.
Pre-flight #submission-preflight Present. Validate #submission-validate You may run the Market Operator’s full rule set without lodging. Idle copy: A rejection at 09:59 on a gate day costs a trading day; the same rejection here costs a minute.
Last accepted #submission-desk-accepted Often empty: No accepted Submission for this Trading Unit. This pane is empty — it is not a copy of the draft. Empty is honest. The kitchen plate is not secretly copied into the ticket pane.
Period grid No submission for this Trading Date yet. (#submission-grid-empty) You have not handed a ticket in for this unit and date. Looking at empty hours is not a bug.
Submit (above the net-position chart) Shown while the book bid is DRAFT and the date is not in the past Confirm: Submit this bid to the Market Operator? Prices are anchored to the strategy’s opportunity costs. This is the hand-over.
Kitchen SMP / Accepted / Result — / — / Pending (or —) Publication has not happened. Do not wait here for a crate price. That light lives on Daily.

What “closed and not published” looks like on this page

Typical: 11:30 on D−1. Same unit, same date. The door shut at 10:00. The results board is still blank until about 14:00.

Place What you see What it means in plain words
Bar chip #bid-desk-gate-state Clock icon, Closed (rose) The box office will not take a first note for tomorrow.
Day-ahead clock #submission-gate-clock Rose card. Gate closed. Countdown reads closed {duration} ago (for example closed 1h 30m ago) You are looking at how long the door has been shut, not at leftover minutes.
Pre-flight Absent Validate lives on that banner. When the gate is closed the banner is not drawn. Closing the door does not reopen it, and the page does not pretend you still have a pre-flight minute.
Submit Still on the kitchen ladder if a DRAFT exists and the date is not in the past. The write will refuse after 10:00. Yesterday hides the button. After 10:00 the DAM will not take a first submission for tomorrow. Clicking Submit then is a refused hand-over, not a second chance. Rollover §9.3(2) is the country’s plan unless you already had an accepted horizon.
If you did Submit before 10:00 Log: Participant, a Seq, Horizon 168. Last accepted pane filled (seq N · Participant). Period grid: 24 rows of DAC / DC / badges You are reading the ticket you handed in. Still no SMP. That is the 10:00–14:00 stretch.
If you did not speak Log: Rolled over (sky pill) or — if nothing has been stored yet. Rollover banner #submission-rollover-banner when the stored object is a rollover The safety net copied yesterday forward. It is a week-old guess wearing today’s date — a strategy only by accident.

Rollover, in one picture. You missed the box office. The theatre does not cancel the show. It reprints yesterday’s seating plan, shifted one day. Day 7 of a long rollover repeats the source’s day 7, because there is no day 8 to shift from — the horizon is collapsing onto a single old day. The rose escalation line on the banner says so. Submit before the next gate.

Publication is the other light. When Daily’s Market results summary shows its publication time, then — and only then — the kitchen ladder can fill SMP and Accepted, the unit evidence drawer can fill Unconstrained / DAM, and energy money exists to read. Until that flip, Submissions is a ticket window, not a results board.

12.3.3 What you see from the top — chrome, banners, pre-flight

Read the page in the order it is drawn. The organisation header remains familiar. This workbench retains its detailed market notices, date bar and banners. Then:

The Trading date bar is the same clock on the wall, with two Submissions-only facts:

Then the workbench’s system condition and draft banners. Then #back-to-bid-desk. Then the body.

Pre-flight #submission-preflight sits at the top of the body, not inside the day-ahead table. Shown while the DAM gate is open. Navy left hairline. Heading Pre-flight. Button Validate #submission-validate (event validate_submission). Hover: Runs the Market Operator’s full validation set on this Trading Unit’s submission for this Trading Date — the same rules as a real submit. Does not lodge the bid.

This is the same function the real PUT calls (WB.Sawem.Submission.Validation). A pretty checklist that reimplemented the rules would drift, and the drift shows up as a participant told it is clean and then rejected at 09:59.

State ID What you see
Idle #submission-preflight-idle Run the full validation set before you commit. A rejection at 09:59 on a gate day costs a trading day; the same rejection here costs a minute.
Clean #submission-preflight-clean Clean — every rule in the Market Operator’s set passes. This is the same validator the submission itself runs, so this result is the one you will get.
Faults #submission-fault-{code} Code, clause, pointer, constraint, detail, remedy — one rose card per fault

Validate does not lodge the bid. It does not reopen a closed gate. When the gate is closed, this whole banner is gone.

Until the panel has loaded, grey placeholders sit where pre-flight, the three cards, the curve, the ladder, and the day-ahead table will be. Wait. Do not re-click.

The rest of the page, top to bottom (wide screen):

  1. Three cards in one row #org-dam-submissions-row — log, draft ladder, last accepted Submission.
  2. Five price curve cards #submission-curve-editor (only once a Trading Unit is selected).
  3. Attach-a-book empty state, if needed.
  4. Book ladder — Rebuild, Submit, net-position chart, clips, certainty-equivalent card, hourly table.
  5. Day-ahead submission (§9.3) — gate clock, rollover banner, seven-day selector, 24-row period table.
  6. View payload modal, only after you click that action.

On a phone the three cards stack. Nothing is hidden in a side drawer. There is no #org-submission-drawer.

12.3.4 The three top cards

Row #org-dam-submissions-row. On a wide screen it is twelve columns: the log takes five, the draft ladder three, last accepted four. They are three different objects on purpose. Putting them in one row is the whole lesson: do not mistake the kitchen for the ticket, and do not mistake “we have a draft” for “the Market Operator has a Submission”.

The three top cards — a diary, a kitchen plate, and the ticket the dining room will honour
Participant submissions log#org-dam-submissions-log · who spoke
≠not a plate
Draft ladder#submission-desk-draft · kitchen leftovers
≠not what clears
Last accepted Submission#submission-desk-accepted · the 168-period ticket

Worked picture — 09:40, nothing sent yet. The log still lists TU-IPP-A-PV with — in Source / Seq / Consent / Horizon. The draft card may already say DRAFT · 24 kitchen line(s) because Strategy plated leftovers. Last accepted is empty on purpose. That empty pane is the sentence “we have not handed a ticket in.” If the draft numbers leaked into last accepted, you would think the market already had them.

Card 1 — Participant submissions log

White card #org-dam-submissions-log. Heading Participant submissions log.

Under the heading, sentence #org-dam-auto-submit (the same switch as the bar chip, written out so you do not miss it):

Caption under that: Historical sequence of bids and availability updates. This table is a diary of what was stored for this Trading Date, not an editor.

Table #org-dam-submissions-table. One row per owned Trading Unit — except when a tuid is in the URL, the list is filtered to that unit only. Row id org-dam-unit-{tuid}. There is no TUID column. There is no Open. The action is View payload.

Empty What you see
This organisation owns no Trading Units One row spanning the table: No Trading Units are registered on this organization.
Units exist, but nothing has been stored for this date A handbook sentence No submissions were stored for this Trading Date. and the unit rows still list underneath, with — in the live columns. The sentence is the headline; the rows are the names of who has not spoken.
Column What you see What it is, slowly
Class The registered class (GENERATING, DEMAND_SIDE, STORAGE, …) So you know whether you are looking at a farm that offers megawatts or a load that takes them. A battery may be both.
Source Pill Participant (emerald), Rolled over (sky), or — Participant = a human (or Auto DAM) actually sent this. Rolled over = the gate-miss safety net copied an old horizon forward. — = nothing stored yet.
Seq A number, or — Version. Higher means later. Seq 1 is the first accepted note for this unit and date; seq 2 replaced it. Grouped like 1 or 1,000.
Consent yes / no / — The IDM rescheduling flag on this stored Submission. yes = the Market Operator may move this unit in the five intraday auctions. no = hold the DAM schedule unless the System Operator imposes a new network constraint. — = nothing stored. Changing consent later is a different button, on IDM.
Horizon 168, —, or refused 168 Trading Periods is healthy (24 hours × 7 days). — = nothing stored. Anything else is refused: the body did not satisfy §9.3(1). A 24-period “just tomorrow” body is the usual way to earn refused.
Book bid Chip DRAFT (amber), SUBMITTED (emerald), another status in slate, or — Status of this platform’s kitchen Bid for the date — not the Market Operator object. Every row currently shows the same chip, because there is one book Bid on the page, not one Bid per unit. Do not read it as “this row’s MO status”. Source / Seq / Horizon are the MO facts.
Actions View payload #org-dam-view-payload-{tuid} Opens the JSON modal (§12.3.11). If that unit was not already selected, the click also puts tuid in the URL so the rest of the page follows.

Worked row. TU-IPP-A-PV, you Submitted at 09:12. Class GENERATING. Source Participant. Seq 1. Consent yes. Horizon 168. Book bid SUBMITTED. View payload opens the note as JSON — useful when a colleague asks “what exactly went on the wire?”

Card 2 — Draft ladder

White card #submission-desk-draft. Heading DRAFT LADDER (uppercase). Caption: Kitchen leftovers — what the book priced. This is not what the market clears.

This pane is about the book, not about one unit’s MO ticket. Strategy ran. Some hours were leftover energy (long — you can offer). Some hours were a gap (short — you still need to buy). Those leftovers were priced into rungs. That plate sits here.

State ID What you see
Nothing plated #submission-desk-draft-empty Folder icon. No draft ladder for this Trading Date.
A Bid exists (the filled inner card) A mono line {STATUS} · {n} kitchen line(s) — for example DRAFT · 24 kitchen line(s) or SUBMITTED · 24 kitchen line(s). Under it: Auto DAM on — Rebuild from the latest run, then Submit to lodge the 168-period Submission. If you leave a draft sitting, the 03:00 worker will send it. Auto DAM off — Rebuild from the latest run, then Submit yourself — automatic send is off for this BRP.

Rebuild and Submit are not on this card. They live on the book ladder further down (§12.3.7). This card is the reminder: leftovers are not a ticket until Submit turns them into one.

Card 3 — Last accepted Submission

White card #submission-desk-accepted. Heading LAST ACCEPTED SUBMISSION (uppercase). This is the ticket — the 168-period object the Market Operator will clear — for the selected Trading Unit and Trading Date.

State What you see What it means
A unit is selected and the MO has an accepted Submission seq {N} · Participant or seq {N} · Rolled over, then 168-period Elixir.WB.Sawem.Submission — the object the MO will clear. The type line is the system’s name for that object. The useful words are 168-period and the object the MO will clear. Seq and source tell you which version and whether a human sent it.
No unit, or the unit has never had an accepted note for this date #submission-desk-accepted-empty: No accepted Submission for this Trading Unit. This pane is empty — it is not a copy of the draft. Empty on purpose. A full draft card plus an empty ticket card means “we plated, we have not handed over.”

History (only when a declaration is loaded). A small HISTORY list: each previous version as seq {N} · {source} plus an eight-character id chip. That is the paper trail — seq 2 replaced seq 1; you can still see that seq 1 existed. If this version was rolled over, the parent lives on that trail.

The three-card test. If the draft says DRAFT and last accepted is empty, you have not spoken to the market yet. If last accepted says seq 1 · Participant and the log Horizon is 168, the ticket is in. Publication can still be hours away.

12.3.5 Price curve — the five stat cards

Block #submission-curve-editor. Drawn under the three top cards and above the book ladder. It appears only once a Trading Unit is selected (no unit: these five cards are absent). It is not an editor sitting under the period grid, and it is not five boxes you save from. It is five readout cards with a coloured hairline along the top.

Heading Price curve (§9.3(4)(c)). Explainer: Five blocks. The first is what you must run at; the last is emergency capacity. The market pays everyone the same hourly price regardless of which block cleared.

Picture a staircase of how hard the plant is willing to work. The bottom step is “I must run at least this much” (a coal station that cannot go to zero). The top step is “only if the lights are going out” (emergency). The three middle steps are the ordinary climb. You are not naming the crate price. You are naming megawatts at each step. The auctioneer still posts one SMP for the hour. A cheap step and an expensive step that both clear are paid the same SMP. Your steps decide whether you clear and how far up the plant is asked to go — not the number on the invoice.

Five blocks, left to right — must-run up to emergency. Illustrative 100 MW farm, not a live screenshot.
Mingenmust-run · locked
→then
Elbow 1first climb
→then
Elbow 2second climb
→then
Elbow 3 / MCRfull output · locked
→then
EL1emergency

Five cards in a row on a wide screen (lg:grid-cols-5), two columns on a tablet, stacked on a phone. Each card is a white tile with a 4 px coloured top border, a tiny uppercase label, and a large mono megawatt figure.

Card ID Top border Locked? Where the number comes from What it means in the plant
Mingen (MW) #submission-curve-mingen Amber Yes — readonly, note Locked to the registry — §9.3(4)(c)(ii) The unit registry, always. A stale submitted curve does not win. Minimum generation. The plant cannot honestly offer below this. Locking it here makes the most common authoring error (typing a different number) impossible. The API still validates — a caller has no locks.
Elbow 1 (MW) (no stable id) Yellow No Stored curve if one exists; otherwise falls back toward Mingen The first step up from must-run.
Elbow 2 (MW) (no stable id) Emerald No Stored curve, or the same fallback The second step.
Elbow 3 / MCR (MW) #submission-curve-elbow3 Sky Yes — Locked to the registry — §9.3(4)(c)(v)(a) The registry MCR (maximum continuous rating), always Full ordinary output. Same reason as Mingen: typing a different MCR is the other common rejection.
EL1 (MW) (no stable id) Rose No Stored curve, or registry EL1, or MCR Emergency block. The last step, for when the system is desperate.

Note #submission-curve-lock-note under the row: Mingen and Elbow 3 come from the registry and cannot be edited here — they are the two most common rejections, and both are authoring errors. To change them, modify the registry under §7.1(5) before the 08:00 D−1 cutoff.

Worked picture. Registry Mingen 20 MW, MCR 100 MW. Elbow 1 might read 40, Elbow 2 70, EL1 110. You cannot type 18 into Mingen on this page. If 18 is what the plant can really do now, that is a registry change before 08:00 D−1, not a clever edit at 09:50.

The three unlocked fields are text inputs in the markup so the values can sit in a form-shaped card. There is no Save on this row. Treat them as figures. The period table’s Curve column is the per-hour pointer into this staircase (set, or to R {cost} when a cost increment is stored).

12.3.6 Attach a book / no run

#bid-desk-need-book when units exist but no book is attached: To build a DAM bid from a strategy forecast, attach a book to this registration. Link Attach a book → Info.

Inside the ladder, #org-dam-book-ladder shows a dashed empty state when there is no completed strategy run and no net position: No completed strategy run for this book yet — run a forecast to build a bid. Strategy is the kitchen. This desk does not invent megawatts.

12.3.7 Book ladder — the kitchen panel

Component #org-dam-book-ladder. This is your residual, priced the way the book already values spill and shortfall. The Market Operator never sees these rungs. Rebuild and Submit live here — not on the three top cards.

Stale-run banner. Amber: A newer strategy run exists — rebuild to bid on the latest position. Shown when the Bid’s strategy_run_id is behind the net position’s. Why: submitting last night’s leftover after this morning’s re-forecast is how you sell energy you no longer have.

Submit sits in a strip above the chart (phx-click="submit"), only while the Bid is DRAFT and the date is not in the past. Paper-plane icon. Confirm: Submit this bid to the Market Operator? Prices are anchored to the strategy’s opportunity costs. Writes the 168-period Submission through the same door the 03:00 worker uses. Flash names the TUID. Refuses if there is no draft, no TUID, validation fails, curve emission fails, or the gate/horizon is wrong. Past dates hide Submit. You cannot bid yesterday.

After a successful send, the button is replaced by an emerald chip: Submitted · MO ref … — the market’s reference. The ladder is now a receipt, not an editor.

Rebuild from latest run #bid-desk-rebuild sits in the chart header (event build), once a book exists. Pulls the latest completed strategy run into a DRAFT Bid. Flash: Draft bid built from the latest run. or The latest run is balanced — nothing to bid. It does not send anything to the Market Operator.

12.3.8 Chart — Net position (MWh by SAST hour)

Card heading Net position (MWh by SAST hour). Chart id #dam-net-position. It is a stacked area: two series, Long (offer) in one colour and Short (buy) in the other, one point per SAST hour 0–23.

How to read it. A bar (or stacked area) above the axis in the long series means “this hour we have leftover energy we can offer.” The short series means “this hour we still need to buy.” They are drawn as positive heights so a 6 MWh short does not hide under the axis. A flat night on a solar book is normal. A spike at 18:00 on an off-taker book is the evening gap.

Netting badge. When the registration balances more than one book, a pill shows gross → net MW netted. The market settles the registration, not each book. Long and short books in the same hour cancel; only the residual is bid. Caption #bid-netting-scope: Scope: registration fixture · cross-book netting or Scope: book. Expand an hour in the table to see per-book contributions. Time zone chip: SAST (UTC+2).

Price ribbon. When a System Operator reference-hour forecast exists: P10 / P50 / P90 in R/MWh. This is a weather-map of price, not a bid. P50 is the middle guess; P10 is the cheap tail; P90 is the expensive tail.

How to read the net-position chart — leftover vs gap, by SAST hour. Illustrative trader book, not a live screenshot.
Long (offer)Short (buy)

  1. Midday leftover

12:00 · long 00h23h

Read it: solar leftover peaks at noon. That is the energy the DAM can sell.

  1. Evening gap

18:00 · short 00h23h

Read it: the short series rises at the evening peak. That is the energy the DAM must buy.

12.3.9 Bilateral vs market, clips, and the ladder table

The same leftover megawatt-hours you are about to bid into the DAM are the megawatt-hours a counterparty might still take at a fixed price. This block is the desk’s last look at that fork: keep the energy for the auction, or sign it away bilaterally. It sits under the net-position chart. It is a decision aid, not a send button. Dragging the slider never rewrites a rung, never changes the 168-period Submission, and never talks to the Market Operator.

The card headed Bilateral vs market renders only when a DAM price forecast band exists (P10 / P50 / P90). The Offer figure is the fixed bilateral price laid against that band. If the book has not stored a comparison offer, the card uses the forecast P50 so the five figures still render. A missing band hides the whole card; the ladder table then sits on its own under the chart.

The five figures

Five values in a row, all in R/MWh. Hover the information-circle on each label for the same sentence the card uses.

Figure What it is How to read it
Offer A fixed bilateral price — a PPA strike, a trader quote, any crate price that does not move with the DAM. Certainty. You get this number if you sign. You do not get this number if you hold for the market.
P10 The cheap tail of the DAM forecast. Only about one in ten comparable recent hours cleared at or below this. A seller’s bad case. If you are long and the market prints the cheap tail, this is what you realise.
CE (λ …) The certainty equivalent of selling into the DAM: P50 − λ × (P50 − P10). Highlighted in navy. What the risky market is worth to this book, after you have named how much cheap-tail pain you will discount. This is the number compared with Offer.
P50 The median of the forecast — the market’s central case. A coin flip, not a promise. Half the comparable hours cleared below it, half above.
P90 The expensive tail. Only about one in ten comparable hours cleared at or above this. A buyer’s bad case. Shown for context on the band. The CE formula on this card uses P10 and P50, not P90. P90 matters when you are short (you pay the expensive tail in the adverse case) and on the Daily price ribbon, not in the Offer vs CE comparison.

P10 / P50 / P90 here are price bands, not generation grades. They come from the System Operator’s trailing DAM history (28 days, bucketed by market × month × day-type × hour), refreshed at 12:30. The ribbon above the chart is the same family of numbers. A flat demo history can read 980 / 980 / 980; a real noisy history spreads them. Full clocks: V9 §9.5.

Careful. These figures never become bid prices. Ladder rungs stay opportunity-cost truthful (V9 §4.2). The forecast changes whether you still want the energy on the market, not the price the kitchen wrote on the rung.

Risk aversion λ — what the slider does

The Risk aversion λ range (set_lambda, 0.00–1.00 in steps of 0.05, default 0.50) is the book’s appetite dial. It is the λ in the CE formula. Moving it recomputes CE and the verdict badge on this card only. It does not persist onto the Bid, does not change Rebuild, and does not change Submit.

Write the formula once:

CE = P50 − λ × (P50 − P10)

(P50 − P10) is the cheap-tail gap — how far the bad DAM outcome sits below the middle guess. λ is how much of that gap you subtract from P50 before you will call the market “worth it.”

λ What you are saying What CE becomes
0.00 Risk-neutral. A coin flip at P50 is as good as a fixed price at P50. CE = P50. The cheap tail is ignored.
0.50 (default) Split the difference. You will not plan on P50, and you will not hide in P10. Halfway from P50 down toward P10.
1.00 Fully averse. Plan on the pessimist’s price. CE = P10. You treat the market as the cheap tail.

What sliding it achieves. Drag left (toward 0) and CE rises toward P50 — the market looks more attractive, so the badge is more willing to say Hold for market. Drag right (toward 1) and CE falls toward P10 — the market looks worse, so a middling Offer that lost at λ = 0 can win at λ = 1 (Sign bilateral). You are not changing the forecast. You are changing how much cheap-tail pain this desk will discount before it prefers a fixed crate.

The slider is a preview of appetite, not a new number the auction will see. If two desks disagree on a PPA vs DAM, they are usually disagreeing on λ, not on P50.

The verdict badge

The badge compares CE to Offer. Let diff = CE − Offer.

Badge Icon tone When it fires Plain reading
Hold for market Emerald, hand-raised CE is more than 5% above the Offer The risk-adjusted DAM is comfortably better than the fixed price. Keep the energy for the auction (and for the ladder / Submission below).
Marginal Amber, scale CE is at or above Offer, but within 5% of it A thin hold. Signing or bidding will not move the needle much. Slow down.
Sign bilateral Indigo, pencil-square CE is below Offer At this λ the fixed price beats the risk-adjusted market. Do not Submit a DAM offer you have just decided to replace with a PPA — take the deal instead (or change λ and own the appetite).

The 5% band is why Marginal exists: a CE of R 841 against an Offer of R 820 is not a ringing endorsement of the DAM. It is “almost a coin flip.” The BRP seat computes the verdict; the card is pure presentation of that decision. Strategy never reads the forecast to mint a rung.

Worked arithmetic

Take a noon band with spread — the numbers V9 §9.5 already uses: P10 R 700 / P50 R 980 / P90 R 1,400. Cheap-tail gap = 980 − 700 = R 280/MWh.

λ CE = 980 − λ × 280 Against Offer R 900 Against Offer R 820
0.00 R 980 Hold (980 − 900 = 80, and 80 > 5% of 900) Hold
0.50 R 840 Sign bilateral (840 < 900) Marginal (840 − 820 = 20, and 20 ≤ 5% of 820)
1.00 R 700 Sign bilateral Sign bilateral

Read the middle row aloud: at the default λ, a R 900 fixed offer beats a market whose risk-adjusted value is R 840, even though the median forecast is R 980. That is the point of CE. P50 is a coin flip; the offer is a certainty. People who “know P50 is above the strike” and still see Sign bilateral are not looking at a broken card — they have not named their λ yet.

On flat demo history (P10 = P50 = P90) the gap is zero, CE equals P50 at every λ, and the slider does not move the badge. Drag it anyway to see the control; the arithmetic only bites when the band has spread.

Follow along. Seat: an org Bid Desk with a DAM band (trader_1@webill.net on the demo). Path: /org/brp/bid-desk/submissions. Under the chart, read Offer / P10 / CE / P50 / P90, then drag Risk aversion λ. Watch CE and the badge, and confirm the ladder rungs beside them do not change.

Open-position clamps

Rose card, heading Open-position clamps, when any hour was cut to the book’s OPEN_POSITION_MW risk limit. Each chip: {hour}h {direction}: clamped {from} → {to} MW. Why: the book promised risk it will not take. The cheapest rungs are kept; the rest is dropped and logged, so you can see the cut rather than wonder why the ladder is smaller than the chart. Daily’s Clips count is this list’s length.

What the ladder table is for

#org-dam-ladder-table. One row per SAST hour 00–23, under the chart — nested inside the Bilateral vs market card when that card is showing, otherwise on its own. Scroll inside the table for hours 13–23; the Hour column stays sticky.

This table is the kitchen receipt for the residual, hour by hour. Strategy already decided what is leftover (long) and what is still a gap (short). Rebuild turned that residual into price steps — opportunity-cost rungs, cheapest first on an offer, a single limit on a buy (V9 §4.2). The table is how you inspect that kitchen work before (and after) you encode it as a 168-period Submission.

It is not:

Why it lives on Submissions. Daily tells you whether tickets went in. Submissions is where you write tomorrow. You need to see, for each hour: how much residual, which way it faces, what the book thinks that energy is already worth, and — once the auction has printed — whether the market took it and at what SMP. Without this table you would Submit a curve and hope the kitchen leftover matched. With it you can catch a stale run, a clip, or a netting surprise before 10:00.

How an hour is meant to be read. Pick 12:00. Net MWh is the signed leftover from the latest run (green long, rose short). Dir says whether the rungs are an OFFER or a BID. Ladder (R/MWh) is the kitchen’s steps for that hour — what you will offer or the most you will pay — not the crate price the market will pay everyone. Until publication, SMP, Accepted, and often Result stay — / Pending. That is the unpublished stretch from §12.3.2, not a missing column. After clearing, SMP is the uniform price; Accepted is how many MW the auction took; Result is Cleared / Pending / —. SAWEM pays SMP, not your rung (V9 §4.3).

Click a row (toggle_row) to expand provenance: which strategy run minted the residual, and which components (kind, MWh, c/kWh) stacked into the rungs. That is “why this hour costs what it costs.” When the registration balances more than one book, the Netting stack shows gross, net, and per-book MWh — the market settles the registration, not each book. Empty: No provenance for this hour.

Column Hover tip (information-circle) What it is
Hour Trading hour in SAST (00–23). Hours 13–23 are below — scroll to see them. The grain. Sticky.
Net MWh Book net position this hour (MWh). Positive is long (offer); negative is short (buy). Green leftover, rose gap. The volume the kitchen is pricing.
Dir Direction of the book this hour — OFFER when long, BID when short. Which way the rungs face.
Ladder (R/MWh) Price steps (R/MWh) the book will offer or bid this hour. Opportunity-cost steps. Not the SMP. Several steps on a long hour (cheapest first); usually one limit on a short hour.
SMP System Marginal Price (R/MWh) if the hour has cleared; otherwise the forecast SMP. Published crate price, or —. Everyone who cleared is paid this, not their own rung.
Accepted Volume the Market Operator accepted this hour after clearing (MW). Capture, once known.
Result Clearing outcome for this hour — accepted, partial, or none. Cleared / Pending / —.

Worked feel — hour 12. Net +6.71 MWh long, Dir OFFER, Ladder 10.00 / 410.00 (firm spill at the floor-plus-margin, wind at 40 c/kWh × 10 + margin). SMP — before publication; after a R 980 print both rungs would clear and Accepted would read 6.71. Provenance names the run and the two components. Same numbers as V9 §4.1.

If Open-position clamps cut that hour 6.71 → 3.00 MW, the chart still shows the unconstrained leftover and the ladder shows the clipped volume. That mismatch is the point of the rose chips.

12.3.10 Day-ahead submission table

Section #submission-desk. This is the ticket, opened flat. Heading Day-ahead submission (§9.3). Explainer: What you submit is not a price and a volume. It is how much you can produce each hour and a price ladder for it, for the next seven days — 168 Trading Periods.

If you arrived without a unit, #submission-desk-empty: No Trading Unit selected. The gate clock may still render beside the heading; the grid does not. Pick a unit on Daily (or put tuid= in the URL) and come back.

Gate clock #submission-gate-clock sits top-right of this card. Green when open, rose when closed. This is the detailed twin of the bar chip — §12.3.2 walks both states.

Rollover banner #submission-rollover-banner. Only when the stored Submission’s source is not Participant. Amber, or rose when staleness has started to bite. This submission was rolled over under §9.3(2) — you did not send it. Names the source trading date (#submission-rollover-source) and consecutive missed gates (#submission-rollover-staleness). When it escalates: Day 7 of a rollover repeats the source’s day 7, because there is no day 8 to shift from — so your horizon is converging on a single old day. Submit before the next gate.

Day selector #submission-day-selector. Heading The seven-day horizon (§9.3(1)). Caption: 168 periods submitted together — the day below is a view, not a separate submission. Seven buttons #submission-day-{1–7}, event select_submission_day. Labels look like Thursday 16 Jul '26. The selected day is navy; the others are white.

Why seven buttons: 168 rows on one grid is unreadable. You page through the week the way you flip a wall calendar. Looking at Day 3 does not send a 24-period body. There is still one Submission. There are not seven tickets.

Worked picture. You Submit once. The market receives 168 hours: tomorrow, the day after, … through day 7. You click Day 3 because you want to check Saturday’s 18:00 DAC. You have not created a Saturday-only bid. You have turned the page.

Period grid #submission-period-grid. Heading Trading Periods — {ISO date} (the day you selected). Scroll #submission-period-grid-scroll when 24 rows do not fit.

Empty #submission-grid-empty: No submission for this Trading Date yet. That is the open-and-unpublished morning with nothing stored — and also any date you have not spoken for. The five curve cards can still show registry Mingen / MCR above; the grid stays empty until a Submission exists.

When stored, 24 rows #submission-period-{hour} (00–23). Hover a row: warm highlight. Every column header has an information-circle; hover it for the sentence in the last column below.

Column Header hover What each cell is
Period Trading Period start in SAST (hour 00–23). 24 hours per horizon day. Sticky. 00:00 … 23:00.
DAC (MW) DAC — Declared Available Capacity (MW). How much the unit can produce in this period (§9.3(4)(b)). The farm’s “how many seats I can fill this hour.” — if none.
DC (MW) DC — Declared Consumption (MW). Demand-side offtake declared for this period. How many you will draw. A battery may send both DAC and DC. — if none.
Flexible F — Flexible: scheduled between Mingen and declared capacity; offer can set SMP. I — Inflexible: scheduled at exactly declared capacity; cannot set SMP (§9.7.2(2)). Badge F (sky) or I (amber). Hover the badge for the short title.
Inst. Instantaneous reserve. A — available (certified). U — unavailable. Badge A (emerald) or U (slate).
Reg. Regulating reserve. A — available (certified). U — unavailable. Same A / U idea, different reserve product.
10-min Ten-minute reserve. A — available (certified). U — unavailable. Same again, ten-minute product.
Curve Price-curve block applied this hour (must-run through emergency). set, to R {cost_increment_3}, or —. The pointer into the five cards above.

Footer legend under the table (always, once the desk is showing):

Worked row — 18:00 on the selected day, OffTaker C solar. Period 18:00. DAC 75. DC —. Flexible F. Inst. U, Reg. U, 10-min U (this farm is not offering reserve). Curve set. That is the 75 MW hour from §12.0.2, as the ticket records it — still not the SMP. The SMP arrives on Daily after publication.

This table does not have a Submit button. Submit is on the kitchen ladder. This table is how you read the 168-period note, one day at a time.

12.3.11 View payload

View payload on a log row opens modal #org-dam-payload-modal (backdrop #org-dam-payload-backdrop). Heading Submission payload details. Subtitle: Sequence {n} · Horizon {n}h · {source}, or No stored submission for this Trading Unit. if you opened a silent row.

Body #org-dam-payload-json is the note as pretty-printed JSON (dark panel, green type): identity, sequence, source, horizon, consent, trading date, received-at, the five curve blocks, and each period’s DAC / DC / flexible / reserves / curves. Copy JSON #org-dam-payload-copy puts that text on the clipboard. Close #org-dam-payload-dismiss (or the X #org-dam-payload-close, or the backdrop) dismisses it.

Use this when someone asks “what exactly did we send?” It is a receipt, not a second editor.

12.4 IDM

IDM (/org/brp/bid-desk/idm) is the patch desk for today. You open it when the forecast has moved and the hour has not yet started. Five smaller auctions that only move hours still left. A Bid Desk link (#back-to-bid-desk) returns you to Daily.

Redeclare #idm-open-redeclare and Consent #idm-open-consent sit on the right of the iteration chips (#org-idm-actions). They open branded modals (#idm-redeclare-modal, #idm-consent-modal). Both buttons are hidden when the IDM gate is closed. While the board is fetching, #org-idm-loading is a spinner over the actions and the desk. What each button is for, when to press it, and what happens after you click: §12.4.5.

Why its own page: the DAM submission is a week-shaped object with a 10:00 door. The IDM is five smaller doors, a carry-or-redeclare decision, and two forms that must not share a button. Mixing them with Submit is how a participant re-prices mid-day by accident. The IDM does not rewrite the DAM bid. It re-uses the day-ahead curve and changes volume.

Where this is taught. On-instruction vs against-instruction pricing, collars, and reversals: V9 §5.

The Trading date bar still shows the selected unit as read-only (#bid-desk-selected-tuid). Pick the unit on Daily (or arrive with tuid in the URL from a unit-card icon). The Redeclare and Consent buttons appear whenever the gate is open; both submits stay disabled until a TUID is selected. Lodgements then filter to that unit.

12.4.1 Iteration chips

Row #org-idm-iterations. Five pills #org-idm-iteration-{n}: Iteration N plus the gate time (for example Wed 12:00). An OPEN iteration also shows a green dot. The selected chip is navy; the others are white. Each chip is a patch with iteration= in the URL.

To the right of the chips, when the selected iteration is open: Redeclare #idm-open-redeclare and Consent #idm-open-consent (event open_idm_modal). Those two buttons are hidden while the gate is closed.

Why the chips are not cosmetic: selecting an iteration loads that iteration’s lodgements, the hours it can still move, and the carry / re-declare advice for those hours. Clicking iteration 4 at 11:50 is how you work the 12:00 gate. There is no rolling T−60 window.

12.4.2 Intraday market card

Section #intraday-desk. Heading Intraday Market. Gate badge #org-idm-gate-state sits next to the heading: GATE OPEN (green, pulsing) or GATE CLOSED (rose). Empty #intraday-desk-empty: No intraday auctions for this Trading Day. Subtitle #org-idm-subtitle: Five auctions at fixed times — non-rolling window (clause 10(1)). Countdowns relative to server time.

Auction table #idm-gates (ids #idm-gates-col-*). This is the table on the card — five rows, one per iteration, #idm-gate-{n}. It is a clock, not a price list. There is no SMP column and no Collar column here. Those belong on a later card after an auction has published (below).

Column ID What it is
Iteration #idm-gates-col-iteration Which of the five auctions (1–5)
Gate #idm-gates-col-gate Weekday and time, SAST — when this door shuts
Closes in #idm-gates-col-closes h:mm:ss until that door shuts, or — once it has. From our clock, not your laptop’s
Hours rem. #idm-gates-col-hours How many hours this auction is still allowed to move
State #idm-gates-col-state OPEN / CLEARING / CLOSED — whether you may still lodge

Hours rem. is not the countdown. Closes in is how long you have. Hours rem. is how much of the day this auction can still touch. A re-declaration only applies to hours that have not started. Iteration 1 (gate 18:00 the day before) still has the whole Trading Day — 24. Iteration 4 (gate 12:00) has 13:00 onwards — the morning is already being delivered and cannot be patched. Iteration 5 (gate 18:00) has 19:00 onwards — five hours. The number is a property of that iteration, not a live drop as the clock ticks toward the gate. At 11:00, iteration 4 still shows the afternoon. At 12:01 that row is CLOSED: those hours are gone for this door. They do not come back on this iteration.

State is whether this door will still take a lodge.

The open row is highlighted so you can see which auction you are working. Selecting a chip loads that iteration’s lodgements and the hours it can still move. Clicking iteration 4 at 11:50 is how you work the 12:00 gate.

Classification preview #idm-classification-preview (amber alert) when a re-declare is in view. Heading: the classification and clause. Body: the sentence that says whether this will be against instruction (charged/paid flat at the Intra-Day Price) or on instruction (you keep the better of your offer and that price). Footer: The classification is certain; the price is an estimate until the auction clears. Why this is the most useful thing on this page: §10(6)–(9) is deterministic from the declaration. You can know you will be charged flat before you press Lodge, while you can still change your mind.

The lodgements table and this platform’s ledger sit further down the page — §12.4.6 and §12.4.7. Carry / re-declare is the timeline in §12.4.4.

After an auction publishes

A second card, Intraday prices #idm-prices, appears under the capacity chart only when an iteration has already published a price. It is not the five-row table on this card. Until then the card above is the whole clock: Iteration, Gate, Closes in, Hours rem., State.

When that later card is present it shows both prices, always — the raw Intra-Day Price and the one the collar left. The arithmetic is V9 §5.4.

12.4.3 Capacity profile

When the selected iteration has hourly positions, a Hourly Capacity Profile card sits under the classification preview. The chart #idm-capacity-chart is a stacked area: redeclared MWh on top of baseline MWh, one column per hour still in this iteration.

Read it like a horizon line. The baseline is what the DAM left you with. The redeclared band is the patch you have already lodged. Hours you have not touched stay baseline-only. The mono chip on the right names the window (for example 13:00–24:00).

12.4.4 Carry or Re-declare Schedule

Card Carry or Re-declare Schedule #idm-positions. Subtitle: Manage hourly MW volumes and carry forward rules for Iteration N. A chip names how many hours are on the spine. This is the hour-by-hour board for the selected iteration: for each remaining hour, should you leave the DAM schedule alone or patch volume before the gate?

It is a vertical timeline #idm-positions-timeline, not a table. Amber line down the middle. One node #idm-position-{n} per hour the desk has a decision for. Read each node left → spine → right.

An empty iteration renders #idm-positions-empty: No carry or re-declare positions for this iteration. Nothing to decide.

The left of the node — time and Target Baseline

On the left of the amber spine:

Target Baseline is the promise still on the books. It is this unit’s Contracted Energy for the hour: the latest intraday schedule if an earlier iteration already moved you, otherwise the day-ahead constrained schedule. Balancing will measure you against this number if you do nothing. It is not the forecast, not Declared Available Capacity, and not a price.

If the farm was scheduled for 75 MWh at 18:00 and nothing has been re-declared yet, Target Baseline is 75 MWh. After iteration 4 patches you to 20, a later iteration’s Target Baseline for that hour is 20 MWh. The left side does not change when you hover. It is the reference the right-hand card is arguing against.

The information card on the right

To the right of the spine sits a slate card. That card is the decision for this hour. From the top:

On the right edge of that card:

The footer of the card is #idm-positions-total: the sum of absolute deviations on the spine. It is a scan figure, not a charge.

What the icon button does

The icon does not lodge. It does not change Target Baseline. It opens the Re-declare modal (§12.4.5) with this node’s hour already filled in. That is the fastest path when you already know which hour you mean — “have I already touched 18:00?” and “open the form for 18:00” in one click.

Hover the icon: tooltip #idm-position-{n}-redeclare-tip — Re-declare this hour. Opens the form with this period filled in. Volume, not price. The tooltip is the button’s job in one breath. Clicking still needs a selected Trading Unit and an IdmDecision on screen before Lodge will enable.

Use the icon when the badge says redeclare and you agree. Do not use it to “correct” a carry hour because the forecast moved a little — that is how a free or cheap deviation becomes a flat Intra-Day Price charge. Closing the modal without lodging leaves the timeline as it was.

What redeclaring is

Think of last night’s day-ahead market as a restaurant booking. You reserved a table for eighteen people at 18:00. The kitchen planned for eighteen. This morning the dining room is smaller (the System Operator cut the wires) so the booking is now sixteen. At 11:30 the weather turns and you will only bring four. If you say nothing, eighteen (then sixteen) still sit on the reservation book, and at 18:00 the empty chairs are a problem you pay for later.

Redeclaring is ringing the restaurant before dinner and saying: I am only bringing four. You have not cancelled the booking. You have not changed the menu price. You have patched the head-count. The kitchen can still sell the empty chairs to someone else in the lunchtime (intraday) sitting.

In market words: a re-declaration is a volume patch on one hour that has not started. You send a new Declared Available Capacity. The day-ahead price curve stays. The DAM energy ticket is not torn up. The intraday market adds a separate charge (or payment) for the megawatt-hours you took back or added. You cannot re-price mid-day. If you could, you could watch the stack form and then move the price you are about to be charged at.

It is not a new bid. It is not Consent (that is a yes or no for the day). It is not typing in the read-only MWh box on the timeline. It is not free just because your day-ahead offer was R 0.00. Changing your own mind is charged flat at the Intra-Day Price. Being moved by the System Operator is not. That difference is the whole plot.

The arithmetic home is V9 §5. This section is the same hour in ordinary English, on this timeline and this form.

What the Re-declare form does

The form #idm-redeclare-form lives in modal #idm-redeclare-modal. It does one job: send the Market Operator a patch for one hour, one unit, one iteration. It does not rewrite last night’s 168-period note.

Open it from the chip-strip Redeclare button or from the node icon (the icon fills the hour for you). The page behind stays put. Three fields, then a lodge.

You fill ID In plain words In the worked hour
Trading period #idm-redeclare-period Which dinner seating you are changing. Must still be in this auction’s Hours rem. A started hour is refused. 2026-07-15T16:00:00Z — 18:00 SAST
Declared available capacity (MW) #idm-redeclare-dac The new head-count. Pre-filled from this hour’s forecast when the desk has one. Not a price. 20
Reason #idm-redeclare-reason-code A desk token — forecast, outage, derate, fuel, SoC, load, or own. Forecast revision
Your note #idm-redeclare-reason Always yours. The list does not lock the box. Convective cloud, 11:30 nowcast
Lodge re-declaration #idm-redeclare-submit Send it. Disabled until a unit is selected and an IdmDecision is on screen. Flash: Re-declaration lodged for TU-IPP-A-PV.

Justification #idm-redeclare-justification repeats the timeline badge so you can see why the desk asked. Without that decision, amber: No IdmDecision is on screen for this unit. Lodge stays off. A patch without a reason is how someone “corrects” an hour the desk said to carry.

What the form does, in order — nothing is written until Lodge
1Openicon or Redeclare button
→
2Readjustification · unit · gate
→
3Typehour · 20 MW · reason
→
4Lodgewrites the receipt
→
5Afterlodgements · chart · later money

Close without Lodge and the books are unchanged. A second lodge for the same unit, date, iteration, and hour replaces the first.

A worked hour — 18:00, start to finish

Same solar hour the chapter already opened (§12.0.3). OffTaker C. Unit TU-IPP-A-PV. Trading date 15 July 2026. Iteration 4, gate 12:00. You are at the desk at 11:30.

Fact Number What it is
Last night’s unconstrained DAM 75 MWh The original booking. Energy payment is struck on this.
Day-ahead SMP R 900/MWh One price for everyone who cleared.
DAM energy payment 75 × 900 = R 67,500 This line stays. Redeclare does not rewrite it.
After the System Operator cut the wires 60 MWh Target Baseline on the left of the node. The 15 MWh cut is free (you offered R 0).
Forecast at 11:30 (cloud) 20 MWh What the farm will actually make.
Gap the right-hand card shows 20 − 60 = −40 MWh against 60. Short 40.
New DAC you type 20 MW The patched head-count.
Applied Intra-Day Price R 945/MWh Indicative was higher; the ±5 % collar of R 900 pulled it to 945.
Charge for the 40 MWh you took back 40 × 945 = −R 37,800 Against instruction. Your R 0 offer buys you nothing.
What you keep 67,500 − 37,800 = R 29,700 Two lines, not one rewritten price.

Step 1 — last night. You told the market this farm would be there for 75 MWh at 18:00. The market cleared. You are paid R 67,500 on that unconstrained 75, at R 900. That is the restaurant taking the deposit for eighteen seats.

Step 2 — this morning, the room shrinks. The System Operator constrains the hour. The books now expect 60 MWh. Target Baseline on the left of the 18:00 node is 60, not 75. Those 15 MWh were taken from you. You keep the R 67,500. The cut is free. You did not redeclare yet.

Step 3 — 11:30, the cloud. The nowcast says 20 MWh, not 60. If you do nothing, 18:00 still starts at 60 on the market books. After the meter, the missing 40 MWh is imbalance — often dearer than the IDM. The desk compares that path to a patch (V9 §5.5).

Step 4 — what the timeline is saying. Left: 18:00 SAST, Target Baseline 60 MWh. Right: −40 MWh against 60, badge redeclare, advice that the intraday charge is the cheaper path. The read-only box shows 40. The circular-arrow is visible because iteration 4 is still OPEN (Closes in is counting down to 12:00; Hours rem. still includes 18:00).

18:00 at 11:30 — do nothing, or patch, before the 12:00 gate. full_demo · seed 42 · worked delivery day
Do nothingcarry the 40
Books still say60 MWh
meter at 20→
Imbalance40 MWh later
Redeclarebefore 12:00
You type20 MW
40 taken back→
IDM charge40 × R 945

Step 5 — you open the form. Click the node icon. Period is pre-filled. Justification repeats redeclare. You type 20 in Declared available capacity and the cloud sentence in Reason. You have not changed a price. Lodge is enabled because the unit is selected and the decision is on screen.

Re-declare form this hour filled in

Field 1 You type 2 Why 3
Trading period 2026-07-15T16:00:00Z 18:00 SAST — still in Hours rem.
Declared available capacity 20 The new head-count, not the −40 gap
Reason Convective cloud, 11:30 nowcast What a later query will read
  1. 1Period is the seating. A 12:00 period would be refused: that hour has started.
  2. 220 is what you can still do. Do not type 40 (that is the gap) and do not type 75 (that is last night).
  3. 3Reason is a human sentence, not a price.

Step 6 — you press Lodge. The modal closes. Flash: Re-declaration lodged for TU-IPP-A-PV. Lodgements shows 18:00 / REDECLARE / 20 MW / Logged. The capacity chart grows a redeclared band on 18:00. Classification preview says this 40 MWh is against instruction — charged flat at the Intra-Day Price, not at your offer. The classification is certain; R 945 is the estimate until the 12:00 auction clears. Target Baseline on the left does not flip to 20 until a later iteration reads the new schedule. The DAM ticket is still R 67,500.

Step 7 — the money, after the gate. The IDM adds a separate charge for the 40 MWh you took back. You read it on Market Month, not on this desk.

18:00 after the constraint — 60 MWh on the books, 20 you will make, 40 you took back. Worked delivery day · SMP R 900 · IDP R 945
Target Baseline60 MWh still promised
You keep producing20 MWh
20 MWh at the farm
You redeclared away40 MWh
40 × R 945 = R 37,800
Still deliveredTaken back · charged
Same 18:00 — last night’s ticket stands; the IDM bills only the 40 MWh you took back. 75 × R 900 − 40 × R 945 = R 29,700
18:0015 Jul 2026
DAM ticket+ R 67,50075 × R 900 · unconstrained
SO cut 15→free
You redeclared 40− R 37,80040 × R 945 · flat
Keep from last night+ R 67,500not torn up
SO’s 15 MWhR 0.00own offer was zero
Your 40 MWh patch− R 37,800against instruction
Net+ R 29,700Σ = 67,500 − 37,800

Σ check: 67,500 − 0 − 37,800 = 29,700 ✓. The 15 MWh the System Operator took is not in the charge. The 40 MWh you took back is. Had you redeclared the first 15 as well, you would have paid for a cut that was going to be free. That is why a carry badge on an instructed hour is not laziness.

Had the badge said carry because a further constraint was coming, the same Lodge would have been the expensive click: you would have converted a free instructed deviation into a flat R 945 bill.

Data. full_demo · seed 42 · worked delivery day 2026-07-15 · 18:00 SAST · iteration 4 · unit TU-IPP-A-PV · SMP R 900 · applied IDP R 945. The 60 → 20 / 40 MWh charge is the Code picture; the 75 is last night’s unconstrained ticket.

Follow along. Seat: OffTaker C, TU-IPP-A-PV selected. Path: Bid Desk → the bolt IDM icon. Pick an OPEN iteration. On Carry or Re-declare Schedule, read one node: SAST chip and Target Baseline on the left; on the right, deviation against that baseline, the carry / redeclare badge, and the advice. Hover the circular-arrow icon — the tooltip should say the form will open with this period filled in. Click it. The Re-declare modal opens with that hour in Trading period. Close without lodging.

Two buttons sit on the right of the iteration chips. They look alike. They are not.

Redeclare tells the Market Operator: for this hour, I can no longer do what last night’s schedule said. You change volume — how many megawatts this unit will produce (or draw). You do not change the day-ahead price. The DAM ticket still stands. The IDM adds a separate patch for the megawatt-hours you took back, or added.

Consent tells the Market Operator: for the rest of today, may you move this unit in the remaining auctions? You change a permission, not a megawatt. Willing means yes. Non-willing means hold the DAM schedule unless the System Operator imposes a new network constraint. Changing consent does not silently change volume. Two forms, two buttons, on purpose.

The two forms no longer sit on the page. They open as modals so the chips, the capacity chart, and the positions timeline stay in view while you type.

Close either modal with #idm-redeclare-modal-close / #idm-consent-modal-close (or the backdrop #idm-redeclare-modal-backdrop / #idm-consent-modal-backdrop). Event: close_idm_modal. Completing the submit also closes it. Closing without submitting writes nothing.

The buttons on the chip strip are hidden when the selected iteration is closed. The closed banner is then the only action. You cannot lodge a patch through a shut door.

You still pick a Trading Unit in the chrome. The modal will open without one, but both submits stay disabled until a TUID is selected. Amber copy: Pick a Trading Unit before you re-declare / Pick a Trading Unit before you change consent. Lodgements then filter to that unit; with All units they list every owned unit’s patches for the selected iteration.

What Redeclare does

Think of last night’s DAM as a promise: this unit will be there for 75 MW at 18:00. Cloud arrives. The plant will not make 75. If you do nothing, the hour still starts at 75 on the market books, and the difference becomes imbalance after the meter.

Redeclare is how you correct that promise before the hour starts, while this iteration’s gate is still open. You send a new Declared Available Capacity for one remaining hour. Everything else on the DAM submission — the price curve, reserves, energy limits — is left alone. A re-declaration is a patch, never a replacement. You cannot re-price mid-day.

That patch costs money when you took the volume back. Being moved by the System Operator does not. The arithmetic lives in V9 §5. This page’s job is to let you see the classification before you lodge, and to refuse a lodge that cannot show why the desk asked for it.

When you should press Redeclare

Press it when all of these are true:

  1. A Trading Unit is selected.
  2. This iteration’s gate is OPEN.
  3. The hour has not started. Iteration 4 (12:00) can still move 13:00 onwards; it cannot move 12:00.
  4. The positions timeline badges the hour redeclare, and the justification on the form repeats that advice. That badge is an IdmDecision: the desk has compared an expected System Operator instruction, your Metering Accuracy Band, and the likely Intra-Day Price against imbalance, and concluded that a patch is the cheaper path (V9 §5.5).
  5. You have a human reason you can write down — forecast, outage, derate — because a later query will read that sentence.

Do not press it when the badge says carry. Carry means the drift is inside the band, or an instruction is expected, or imbalance is cheaper than the IDM. Patching then converts a cheap (or free) deviation into a flat Intra-Day Price charge. If a constraint is coming anyway, re-declaring first transfers value away from you.

Do not press it to “fix” a price. There is no price field. Do not press it for an hour that has already started. That is a re-declaration of the past, and it is refused.

What happens when you click Redeclare
  1. The button #idm-open-redeclare opens modal #idm-redeclare-modal. Heading Re-declare. Caption: PUTs a TUID re-declaration. A submit that cannot show the IdmDecision that justified it is refused. The page behind stays put — chips, chart, timeline.
  2. Opening from a timeline node #idm-position-{n}-redeclare does the same, and pre-fills the trading period for that hour. That is the fastest path when you already know which hour you mean.
  3. If no unit is selected, amber: Pick a Trading Unit before you re-declare. Lodge re-declaration stays disabled.
  4. Justification #idm-redeclare-justification repeats the carry/redeclare advice. Without a decision, amber: No IdmDecision is on screen for this unit. Submit is refused until one is. The lodge button stays disabled. A patch without a reason is how a participant “corrects” an hour the desk did not ask it to touch.
  5. You fill the form #idm-redeclare-form (fields below) and press Lodge re-declaration #idm-redeclare-submit (event idm_redeclare).
  6. On success the modal closes. Flash: Re-declaration lodged for {tuid}. The page reloads that iteration. The hour appears on the Lodgements table as kind REDECLARE, status Logged. The capacity chart grows a redeclared band on that hour. Classification preview #idm-classification-preview states whether this will be charged flat at the Intra-Day Price (against instruction) or kept at the better of your offer and that price (on instruction). The classification is certain; the price is an estimate until the auction clears.
  7. The DAM ticket is not torn up. Money for the patch arrives later on Market Month, not on this desk.
  8. On refusal you stay in the modal. Flash names why: no TUID, no decision, a bad period, or Re-declaration refused: … with the server’s reason. A closed hour is refused with a sentence that names the gate that already shut.

A second lodge for the same unit, date, iteration, and hour replaces the first. Two rows for one hour would leave the clearing choosing between them.

The same 18:00 hour — 75 last night, Target Baseline 60, type 20, charge 40 × R 945 — is walked number-by-number in §12.4.4.

The form #idm-redeclare-form lives inside the modal.

Field ID What you type Why
Trading period (ISO-8601) #idm-redeclare-period The hour you are patching Only hours this iteration may still move. A closed hour is refused with a sentence that names the gate that already shut. Pre-filled when you open from a timeline node.
Declared available capacity (MW) #idm-redeclare-dac The new DAC Pre-filled with this hour’s forecast when the desk has one (#idm-redeclare-dac-suggest). Volume, not price. Edit if you disagree.
Reason #idm-redeclare-reason-code A desk token Forecast revision, forced outage, derate, fuel, SoC, load, or Own reason.
Your note #idm-redeclare-reason A human sentence Always yours. The list does not lock the box.
Lodge re-declaration #idm-redeclare-submit Event idm_redeclare Writes the lodgement. Flash: Re-declaration lodged for {tuid}. Refuses without a TUID, without a decision, or with a bad period.

There is also a declared-consumption path in the payload when the unit is a load or a battery; the visible field on this form is capacity, because that is the common renewable correction.

Consent is a flag for the day, not a number for an hour. It has no Trading Period. Your DAM submission already carried one: may the Market Operator move this unit in the five intraday auctions? Consent on IDM restates that flag for today.

Non-willing is not a force field. A new System Operator network constraint still moves you. You opted out of a market re-clear, not out of the wires.

Consent does not change Declared Available Capacity. It does not lodge a re-declaration. It does not appear as a REDECLARE row on the lodgements table. The flash says so on purpose: Volume was not re-declared.

Press Willing when you want the remaining auctions to be allowed to move this unit — you are flexible, or you want the Market Operator to be able to pick you up if the stack needs you.

Press Non-willing when you need the DAM schedule to hold: fuel already committed, a must-run hour, a bilateral that assumes the night-time shape. You are saying do not volunteer me. You are not saying ignore the System Operator.

Do not press Consent because the forecast moved. That is Redeclare. Do not press it hoping to cancel a lodge you already sent. Consent does not unwind volume.

You still need a selected Trading Unit and an OPEN gate. The button is hidden when the iteration is closed.

  1. The button #idm-open-consent opens modal #idm-consent-modal. Heading Rescheduling consent. Caption: A separate control. Changing consent does not silently re-declare volume.
  2. If no unit is selected, amber: Pick a Trading Unit before you change consent. Update consent stays disabled.
  3. You set #idm-consent-flag to Willing or Non-willing and press Update consent #idm-consent-submit (event idm_consent).
  4. On success the modal closes. Flash: Rescheduling consent updated for {tuid}. Volume was not re-declared. The page reloads. No new REDECLARE row appears. The capacity chart does not grow a band. Hours you have not patched stay on the DAM volume.
  5. Closing without submitting leaves yesterday’s (or this morning’s) flag as it was.

The form #idm-consent-form lives inside the modal.

Field ID What it is
Consent #idm-consent-flag Willing (WILLING) or Non-willing (NON_WILLING)
Update consent #idm-consent-submit Event idm_consent

Follow along. Seat: OffTaker C, unit TU-IPP-A-PV selected. Path: Bid Desk → the bolt IDM icon (or /org/brp/bid-desk/idm?tuid=TU-IPP-A-PV). Pick an OPEN iteration. Press Redeclare. You should see the justification, the period / DAC / Reason fields, and Lodge re-declaration enabled only when an IdmDecision is on screen. Close it. Press Consent. Change nothing yet — read the caption. Willing / Non-willing does not mention megawatts. After Update consent, the flash tells you volume was not re-declared, and Lodgements is unchanged.

12.4.6 Lodgements table

Section heading Lodgements · Iteration N. Subtitle: Logged gate entries and re-declaration triggers. Body #org-idm-lodgements-table. Empty: No re-declaration was lodged.

What a lodgement is

A lodgement is the receipt for what you handed in before this auction’s door shut. You filled the Re-declare form and pressed Lodge. The platform kept a copy. That copy is the lodgement.

Think of a registered letter. You wrote a patch: this unit, this hour, this many megawatts, this reason. You handed it over the counter. The clerk stamped it Logged and gave you the slip. The letter has not been opened by the market yet. The slip is not the reply. It is proof you sent something, at this iteration, for this hour.

On this platform that receipt is a WB.Sawem.Mo.IdmLodgement of kind REDECLARATION. It is a participant input, not a market output. Iteration 4 clears from what you lodged at 11:47. Until that gate runs, the row is only your word, kept.

It is not:

It is the patch the Market Operator will read when this iteration’s gate shuts: one Trading Unit, one Trading Period, one new Declared Available Capacity (or declared consumption), a reason code, and your note.

A second lodge for the same unit, date, iteration, and hour replaces the first. Two slips for one letter would leave the clerk choosing. Last one in is the one that clears.

Selecting a Trading Unit filters the table to that unit. All units lists every owned unit’s patches for the selected iteration. Switching the iteration chip reloads that auction’s slips — iteration 3’s 06:00 lodgements do not appear on iteration 4.

A lodgement is the slip, not the reply — what you sent, kept, until the gate reads it
1Formhour · MW · reason
→
2Lodgethe slip is written
→
3This tableLogged — not the result
→
4Gatethe auction reads the slip
→
5Laterprice · schedule · Market Month
How to read a row
Column What it is How to read it
Hour SAST Which Trading Period you patched. 18:00 is the 18:00 hour.
Kind REDECLARE (amber pill) This table is volume patches. Consent does not appear here.
Volume (MW) The DAC (or DC) you sent The new head-count — 20, not the −40 gap, not last night’s 75.
Trigger The reason code FORECAST_REVISION, FORCED_OUTAGE, DERATE, and the rest from the form. Why you moved, as a stable token.
Pricing basis intra_day_price This patch will settle at the Intra-Day Price, not at your own offer. The classification is certain; the rands wait for the gate.
Status Logged (green) We have the slip. The auction has not answered. Logged is not cleared and not paid.
A worked slip — the same 18:00 hour

You already walked the form in §12.4.4. OffTaker C, TU-IPP-A-PV, 15 July 2026, iteration 4. At 11:47 you lodged 20 MW for 18:00, reason Forecast revision, note Convective cloud, 11:30 nowcast.

After Lodge, this table is no longer empty. One row:

Lodgements · Iteration 4 after you pressed Lodge

Hour 1 Kind 2 Volume 3 Trigger 4 Pricing basis 5 Status 6
18:00 REDECLARE 20.000 FORECAST_REVISION intra_day_price Logged
  1. 118:00 is the hour you patched — still in iteration 4’s Hours rem. when you sent it.
  2. 2REDECLARE means a volume patch. Your Consent click did not add a row here.
  3. 320.000 is what you typed. Not 40 (the gap) and not 60 (Target Baseline).
  4. 4FORECAST_REVISION is the desk token. The cloud sentence lives on the lodgement as the note a later query reads; this column shows the token.
  5. 5intra_day_price — the 40 MWh you took back will be charged flat at the IDP (R 945 once the collar is applied), not at your R 0 offer.
  6. 6Logged — the slip exists. At 12:00 the auction reads it. Money arrives on Market Month.

If at 11:55 you lodge again for the same 18:00 — say 18 MW because the nowcast darkened — this row updates. You still see one line, not two. The clerk kept the latest letter.

At 12:01 iteration 4 is CLOSED. The row stays. You cannot add another slip on this door. Iteration 5 is a different table.

Empty #org-idm-lodgements-table with No re-declaration was lodged. means this iteration has no slip yet — not that the forecast matches the baseline, and not that you chose carry. Carry writes nothing here. Only Lodge does.

Follow along. After you lodge the 18:00 patch on TU-IPP-A-PV (password supersecret), stay on IDM, iteration 4. You should see one row: 18:00 · REDECLARE · 20 · FORECAST_REVISION · intra_day_price · Logged. Consent, then check again — still one row.

Data. full_demo · seed 42 · 2026-07-15 · iteration 4 · TU-IPP-A-PV. The 20 MW / 40 MWh / R 945 picture is §12.4.4.

12.4.7 This platform’s ledger

Paragraph #org-idm-book-ledger under the table, not a separate card. Body: The table above is this platform’s book-level IDM ladder — not the market stack. The Market Operator clears a re-declaration on a Trading Unit, not this ledger.

Why the warning exists: the kitchen Bid and the Code lodgement are different objects, the same way the book ladder is not the Submission. If you come here looking for “our IDM bid”, you are holding the leftover. The market cleared the TUID patch.

12.5 Forward

Forward (/org/brp/bid-desk/forward) is the contract scoreboard. You open it when you already have a physical power purchase agreement that was registered as a forward schedule, and you need to see — hour by hour — how much of tonight’s plant is already spoken for, and how much the night auction still put on top.

A Bid Desk link (#back-to-bid-desk) returns you to Daily. The tab strip #bid-desk-tabs walks you to Submission, IDM, Settlement and Imbalance without going home first.

This page does not write. You cannot register a schedule here, cannot bid, cannot patch. The write sits on Deals → Contracts (§18.1). This page only reads.

Where this is taught. What a forward schedule is, when the registration gate closes, and why the night auction only clears the leftover: V9 §20. What the Market Operator sees: V11 §27.

Follow along. Seat: an ACTIVE BRP with a Trading Unit that holds a REGISTERED forward schedule. Path: Daily → the unit’s Details & destinations → Forward. You should land on /org/brp/bid-desk/forward?date=…&tuid=…. You should see a navy Bid Desk header, a white Trading date bar, a back link, a tab strip with Forward highlighted, and a table of 24 hours.

12.5.1 What “forward” means here

Think of a greengrocer who already has a standing order with a farm: twelve crates every Wednesday at 08:00, written into a contract months ago. Tonight the produce market still runs an auction for whatever crates are left. The standing order is not in that auction. The auctioneer cannot take those twelve crates away to sell them to someone else. What the auctioneer can do is sell extra crates on top, if the farm grew more than twelve.

On this desk:

Two numbers, always. Adding them is what the country will actually try to deliver. That sum is Contracted Energy — the baseline imbalance is measured against later. Collapsing the two numbers into one would hide a fact you need: sometimes the auction left nothing extra, and that zero is information, not an empty cell.

A standing order first, then the night auction only sells what is left
Physical PPAACTIVE agreement
→register
Forward scheduleREGISTERED · per hour
→taken off first
Night auctionclears the leftover
→publishes
Day-ahead MWthe residual
How one hour’s two figures become what you are measured on
1Forward basealready promised
+
2Day-ahead MWauction leftover
=
3Contracted Energythe balancing stick

The Market Operator does not rank a bilateral “above” a spot trade with a special flag. The arithmetic does it: the standing order is a constant. The solver is not allowed to turn it down. That is the whole of the priority rule (V9 §20.5).

12.5.2 How you get here

There is no Forward item in the sidebar. Daily is the front door.

Door What you click What arrives in the URL
This unit’s standing order Details & destinations → Forward on the Trading Unit row ?date=YYYY-MM-DD&tuid=TU-…
The tab strip Forward on #bid-desk-tabs while you are already on Submission, IDM, Settlement or Imbalance Same date and TUID you were holding
The typed address Paste or bookmark Same as above

The drawer link is immediately available and explicitly names the unit in the destination URL. No selection checkbox is required.

If you arrive without a tuid, the table adds up every Trading Unit this BRP owns. The Trading date bar then reads Select a trading unit. That total is honest, but it is not one plant’s standing order. Pick a unit on Daily when you want one card’s numbers.

12.5.3 Everything on the page, top to bottom

Shell #bid-desk-shell / #bid-desk-page. The organisation header still says Bid Desk. Description under the title: Day-ahead and intraday bids for the books this BRP balances. The sidebar keeps Bid Desk highlighted — this is not Market Month.

When there is no BRP registration, the body is the same dashed empty card as Daily. There is nothing to show.

When there is a registration, read down in this order.

1. Market Notices strip (#bid-desk-market-notices) — the same amber strip as Daily, when notices are active. Not Forward-specific.

2. Trading date bar — white card, same chrome as Submissions and IDM (Chrome.bar, tab = :forward).

Piece ID What you see What it means
Trading date #bid-desk-date A calendar, e.g. 2026-09-01 Which day’s 24 hours this table is about. Changing it patches the URL (date=).
Trading Unit #bid-desk-selected-tuid Name / TUID in bold, or Select a trading unit Read-only. There is no dropdown on this page. You picked the unit on Daily (or in the URL).
Gate chip #bid-desk-gate DAM gate open / closed The day-ahead door for this date — context, not a Forward registration countdown. Forward registration has its own earlier gate, taught in V9 §20.3.
Market Code (right of the bar) e.g. Market Code 2.3 Which edition of the rules this desk is running.

There is no Auto DAM chip here. Auto DAM is about sending tomorrow’s note; this page does not send. There is no Book dropdown. The system condition and draft banners are the same shared chrome as Daily: they appear when they apply, they are not Forward-specific.

3. Back link and tab strip (#bid-desk-destination-header).

Piece ID What it does
← Bid Desk #back-to-bid-desk Returns to Daily, keeping date and tuid.
Tab strip #bid-desk-tabs Five rooms: Submission, IDM, Forward, Settlement, Imbalance.
Forward tab #bid-desk-tab-forward Highlighted (tab-active) while you are here.

The other four tabs keep the same date and TUID. They are the same icons as the Trading Unit card, now as words.

4. The Forward position card (#bid-desk-forward) — the whole body of the room. Heading Forward position. Subtitle: Day-ahead volume sits on top of the registered forward base — two figures, even when one is zero.

While the numbers are fetching: centred copy Loading the forward base…. Wait. Do not re-click.

Then the table. That is the rest of the page. There is no Submit, no Lodge, no Register, no chart.

12.5.4 The table

Wrap #bid-desk-forward-table-wrap. Twenty-four rows, one per Trading Period of the selected date. The column headers (#bid-desk-forward-head) stick as you scroll, so you do not lose the labels halfway down the evening hours.

Each header has a small information-circle. Hover it for the sentence in the last column.

Column Header ID Tip ID What the number is Hover tip
Trading Period #bid-desk-forward-col-period #bid-desk-forward-col-period-info The hour, in South African time, written as 1 Sept '26 00:00 The hour this row is about, in South African time. 1 Sept ’26 00:00 is midnight at the start of that day; 1 Sept ’26 18:00 is six in the evening.
Forward base MW #bid-desk-forward-col-base #bid-desk-forward-col-base-info REGISTERED schedule for this unit in that hour. Cell #bid-desk-forward-base-{hour} Megawatts already promised on a registered physical contract for this hour. The night auction cannot take these away.
Day-ahead MW #bid-desk-forward-col-dam #bid-desk-forward-col-dam-info Published constrained leftover, or 0 if nothing has published. Cell #bid-desk-forward-dam-{hour} Megawatts the night auction still chose for this hour, after the contract volume was taken off. Zero means the auction left nothing extra — not that the row is empty.

Trading Period is not 00:00–23:00 on its own, and it is not an ISO stamp. It names the calendar hour so a Wednesday 18:00 and a Thursday 18:00 cannot be mixed up: 1 Sept '26 18:00 is 1 September 2026 at six in the evening, SAST. Midnight of that day is 1 Sept '26 00:00. Hour 8 on the same day is 1 Sept '26 08:00. The {hour} in the row id is still 0–23 (#bid-desk-forward-period-8 is that 08:00 row).

A period with a forward base and no day-ahead leftover still renders both columns. There is no #bid-desk-forward-collapsed. Hiding the zero would make you think the row was blank.

If this unit has no registered forward schedule for the date, every Forward base MW cell is 0. That is also information: nothing was promised ahead, so the night auction had the whole hour to play with. If the night auction has not published yet, every Day-ahead MW cell is 0 even when a base exists.

12.5.5 Worked hour — 1 September 2026, 18:00

Data. Same identity as V9 §20.5. The numbers below are that worked Trading Period, written the way this table shows them.

A seller unit is cleared unconstrained at 80 MW for the 18:00 hour. It already has a registered forward schedule of 20 MW for the same hour. The night auction therefore only had 60 MW of headroom left to award.

What you asked MW Where it sits on this page
Standing order (registered forward) 20 Forward base MW #bid-desk-forward-base-18 → 20.000
What the night auction still chose 60 Day-ahead MW #bid-desk-forward-dam-18 → 60.000
What you are measured on 80 Not a third column. 20 + 60 = 80. That sum is Contracted Energy, used later on Imbalance.

The row’s Trading Period reads 1 Sept '26 18:00.

Conservation: 20 + 60 = 80 ✓. The 80 you started from did not vanish; 20 of it was already promised, 60 of it went through the auction. If publication has not happened yet, the same row would read 20.000 and 0 — the standing order is already on the register; the leftover has not been announced.

On a constrained hour the same identity is remaining headroom. A zone that may export 40 MW with 30 MW already registered leaves 10 MW for the auction. The standing order is delivered in full; the spot trade takes what is left. This page still shows two figures, not the corridor maths. Corridor remaining-transfer capability is a System Operator / Market Operator number (V9 §20.6).

12.5.6 What this room does not do

12.6 Settlement

Settlement (/org/brp/after-delivery) is the receipt after the night auction — for one Trading Day and one Trading Unit. You open it from Daily: open the unit’s Details & destinations, then Settlement icon. A Bid Desk link (#back-to-bid-desk) returns you to Daily. The tab strip #bid-desk-tabs walks you to Submission, IDM, Forward and Imbalance without going home first. The sidebar stays on Bid Desk. This is a market-day room, not the month wallet.

Follow along. Path: Daily → Details & destinations → Settlement. You should see four pot tiles, Your day-ahead schedule, the hour timeline, and Instructed Energy on the side. The tab strip is Submission · IDM · Forward · Settlement · Imbalance. Bid Desk is highlighted in the sidebar.

The rest of this section first answers what this room is for, then walks the screen tile by tile.

12.6.0 What it is for — and how it fits the bid day

The trader’s problem is simple. Last night you sent a sealed note. This morning (or yesterday afternoon) the Market Operator published one crate price per hour and a schedule. You now need a page that answers, without opening the month:

Settlement is that page. It turns the published auction into hour-by-hour money lines you can read and argue about. It does not wait for meters. It does not wait for the month. It does not move cash.

Think of the produce market from §12.0 again. Last night you booked crates. At 14:00 the auctioneer posted one crate price for 18:00 on the hall board. Settlement is the docket pinned to your stall — not the bank transfer, not the weighbridge at the gate, and not the monthly invoice that arrives weeks later.

Each hour is one line on that docket: crates accepted × the posted crate price. If the road later said “only sixty crates may leave the farm”, that cut is a second line. It does not rub out the crate price. Buyers still paid the posted price for the original booking. The road’s cut is settled separately, at the price you yourself offered.

That is why this room exists on the Bid Desk, beside Submissions and IDM, and not only on the month wallet. An energy payment is struck per hour. A constrained-off, a reserve band, a missing notice — all live on the hour. Month can wait.

Where Settlement sits in one bidding day — from sealed note to cash. Teaching day 2026-07-15 · full_demo · seed 42
Submissions
→10:00 D−1 gate
Auction
→14:00 publish
Settlement
→chalkboard
IDM
→five patches
Delivery
→plants run
Imbalance
→weighbridge
Month / Billing

Settlement fills when the Market Operator publishes (by 14:00 SAST the day before delivery). Meters have not run yet. Cash still leaves bank accounts on the Settlement Calendar, weeks later.

How it fits the daily bidding scenario, in order:

  1. Submissions — you write tomorrow’s note (168 hours) and send it before the 10:00 SAST gate on D−1. That is the bid.
  2. Daily — after 14:00 SAST on D−1 the scoreboard should say Published. Your energy subtotal appears as one number. That number is a pulse, not a proof.
  3. Settlement — you open the unit and read the docket behind that pulse. Every hour that cleared has a line: volume × the SMP (the crate price). Extra lines sit under it (wires, reserve, fees) with a sentence, so a zero is never silent.
  4. IDM — five later windows may still move remaining hours. They do not rewrite last night’s crate price, and they do not rewrite the day-ahead energy line you are reading here.
  5. Delivery day — the plant runs. Settlement does not wait for that. The chalkboard was already official yesterday afternoon.
  6. Imbalance — the next morning, the weighbridge: what the meters recorded against the ticket (and against what the System Operator instructed). That is a different till.
  7. Market Month and Billing — the wallet and the PDF. Cash moves on the Settlement Calendar, not when you open this room.

You typically open Settlement twice:

When What you are asking
14:00 on D−1, just after Daily says Published What did we get for tomorrow?
The morning after delivery What did yesterday do to this unit? Same chalkboard. The meters, if they look wrong, are the next tab.

Until Daily says Published, the pot tiles here read —. There is nothing to settle against. A solved-but-unpublished run on the Market Operator’s console is not your chalkboard yet.

Board #bid-desk-settlement (legacy id). Status line #org-dam-settlement-status repeats the publication sentence — This day has not been published. or Published at HH:MM.

What Settlement does

It writes the commercial result of the day-ahead auction onto a page you can audit.

It does In plain words
Prices each cleared hour Your scheduled megawatt-hours × that hour’s SMP. Same price for everyone who cleared. Your offer decided whether you cleared, not what you are paid.
Keeps the energy line on the unconstrained booking If the wires later take less, that cut is a separate line. The original energy payment stays.
Names every extra line Constrained-off, constrained-on, reserve, Market Operator fees. A zero still carries a sentence.
Shows two different “totals” Your energy pot (this organisation’s slice — it will not be R 0.00). The market’s energy account (the closed loop — it must be R 0.00, or the auction was wrong).
Keeps the instructed path in reach Instructed Energy is previewed here so you can dispute the measuring stick before Imbalance prices the gap.
Confirms the notice arrived A day that cleared but whose schedule-published event never reached you is how a desk bids the next day on a guess.

It does not pay anyone. There is no Pay button. It does not rewrite a bid. It does not price the meter gap — that is Imbalance. It does not hold the month’s wallet — that is Market Month. It does not issue the PDF — that is Billing.

Room Everyday picture What you read
Daily The hall’s scoreboard Have we published? What is our slice, as one number?
Settlement The docket on your stall Hour by hour: crates × crate price, plus extra lines
Imbalance The weighbridge at the gate Ticket vs instruction vs meter
Market Month The wallet The Billing Period, after the tickets
Billing The filing cabinet The PDF. Cash follows the Settlement Calendar

Where this is taught. Why everyone is paid the SMP, why a wire-cut is a different line, and why three pots must not be added into one total: V9 §13. Why energy across the whole market prints R 0.00: V8 §8.5. This section is the organisation screen — what you are looking at, and when to open it.

A worked hour — 18:00 on the teaching day

Data. full_demo · seed 42 · Trading Day 2026-07-15 · hour 18:00 · solar unit TU-PV1. Same hour as Daily and V9 §13.4.

The farm offered its energy at R 0/MWh (no fuel cost — it wanted to clear). The auction filled demand up to a last accepted offer of R 900/MWh. That R 900 is the SMP — the crate price — for everyone who cleared that hour, including this farm.

The auction’s cheapest schedule wanted 75 MWh from the farm. The wires could only take 60 MWh. Two facts, two lines:

Line Quantity Price Amount Why
Energy payment 75 MWh unconstrained SMP R 900/MWh +R 67,500 75 × 900 = 67,500. Struck on the booking, not on what later flowed.
Constrained-sales charge 15 MWh cut (75 − 60) the farm’s own offer R 0/MWh R 0.00 15 × 0 = 0. The road buys the cut back at your price, not at the crate price.
Net that hour 60 MWh actually generated +R 67,500 You keep the original energy payment.

Σ check: 67,500 − 0 = 67,500 ✓ — R 13,500 for fifteen megawatt-hours the farm never produced. That is not a bug. A renewable that offered zero is bought back at zero. A plant with a real fuel cost that offered below cost would be curtailed at a loss it cannot recover — which is why the offer is not only about clearing.

One hour on Settlement — TU-PV1 · 18:00 SAST · 2026-07-15 · full_demo · seed 42
18:00SAST
Unconstrained booking75 MWhwhat the auction priced
SMP×R 900 / MWh
Energy paymentR 67,500stays on the docket
Energy (Pot 1)+R 67,50075 × 900
Wire cut (Pot 2)R 0.0015 × own offer R 0
Net this hour+R 67,500for 60 MWh generated
Two schedules, two jobs — the energy line never uses the smaller number
Energy linePot 1 · other participants
Unconstrained75 MWh
SMP R 900×
PaidR 67,500
Wire cutPot 2 · System Operator
Constrained60 MWh
15 MWh bought back→
At own offerR 0.00

A buyer on the other side of the same hour is the mirror. If a load was scheduled to take 75 MWh at the same SMP, it is charged 75 × 900 = R 67,500. That charge is part of what pays this farm. Across the whole market, energy credits and energy debits cancel. That is the closed loop on the Market energy account tile — it must read R 0.00. Your energy pot is only your side of that loop. Adding your pot to Market Balancing and to MO Charge would be a number about nothing: three counterparties, three obligations.

The screen below is that docket: four pot tiles, the two schedules, then a vertical hour timeline instead of a spreadsheet. The 18:00 node is the row you just walked.

12.6.1 The four pot tiles

These four numbers are the header of the docket — not a bill, and not one total. Strip #org-dam-settlement-tiles. Each card now prints a short sentence under its title, then the number (#org-dam-settlement-energy-hint and the same -hint suffix on each tile). A single number across the four would be a number about nothing.

Tile ID What it represents What the number displays
Your energy pot #org-dam-settlement-energy This organisation’s day-ahead energy obligation to other participants Σ EPM for your units: unconstrained scheduled MWh × that hour’s SMP, summed for the day. Your slice. It will not be R 0.00.
Market energy account #org-energy-account-net The closed loop for the whole market that published day (clause 9.8.1) Must read R 0.00. A proof the auction balanced — generators were paid what loads were charged. If it is not R 0.00, the market cleared wrongly. It is not your bill.
Market Balancing #org-dam-settlement-mba Wire cuts, reserve, and above-cap for your units, recovered by the System Operator Ancillary-service recovery for this day. Does not have to net to zero. A R 0.00 constrained-off still belongs here.
MO Charge #org-dam-settlement-mo The Market Operator’s own fees Usually — or R 0.00 until the month. Ring-fenced: this money never reaches a shortfall or a bad debt.

Until the day is Published, every number reads —. The sentences still sit under the titles so the empty chalkboard is readable.

Where this is taught. Why three pots exist: V9 §13.2 and V8 §8.5.

Three pots, three counterparties — do not add them into one “settlement total”
One Trading Day
Energyother participants · Σ = R 0.00
Market BalancingSystem Operator recovers
MO Chargering-fenced fees

12.6.2 Your day-ahead schedule

Card #schedule-view. Heading Your day-ahead schedule. Caption: Clause 9.10(1) requires the day-ahead schedules and prices by 14:00 on the day before delivery.

This is the same timetable Bid Desk › Daily shows. It is repeated here because Settlement is where you read the money against the timetable. Empty: Nothing has been published for this Trading Day…

When a notice sits on the artefact (a provisional network model, an assumed constraint), amber #schedule-view-notice says so on the artefact. A constrained schedule that merely copied the unconstrained one because nothing bound it, shown as though the network had been checked, is the failure that notice exists to prevent.

Column What it is Why
Period The hour, SAST The grain
Trading Unit TUID Whose row
Unconstrained MWh the energy market priced Your EPM quantity
Constrained MWh the wires will actually take Highlighted when it differs
SMP R/MWh for that hour The crate price
Reserve Badges per category, or — Capacity you were scheduled to hold
Why Plain-language sentences from the clearing engine So you do not open a query about a ramp bound you can already read

A profile switch (when rows exist) lets you flip the silhouette of the day without leaving the card.

12.6.3 Your day-ahead settlement

Card #settlement-view. Heading Your day-ahead settlement. Lede #settlement-view-lede: Four pots for this organisation on this Trading Day. The timeline below is those pots, hour by hour — not one added-up total.

Empty #settlement-view-empty: Nothing has been published and settled for this Trading Day.

When published, four tiles #settlement-totals are the legend for the timeline — the same three pots as the header, with their long names, plus a fourth that the header does not show. Each tile prints its sentence under the title, then the rand amount (#settlement-total-{ENERGY|MARKET_BALANCING|MO_CHARGE|BAD_DEBT}-hint).

They are not a second bill. They are this organisation’s day totals for each pot, so you can read the hour timeline without guessing which bucket a line fell into. Do not add the four numbers together.

How they map to the header:

Header tile (§12.6.1) This row Same money?
Your energy pot Energy market Yes — your slice of day-ahead energy
Market energy account (not repeated) That tile is the whole market’s closed loop. It is a proof, not your pot.
Market Balancing Ancillary service recovery Yes — the System Operator’s pot, your units
MO Charge Market Operator charges Yes — the MO’s own fees
(not on the header) Unsecured bad debt Your share if another participant fails to pay
Energy market

Tile #settlement-total-ENERGY. This is your day-ahead energy payment.

What it represents. Every hour you cleared, the market booked a quantity (the unconstrained schedule) at one crate price for the country that hour — the SMP. This pot is that booking, for your units, summed over the Trading Day. You settle it with other participants, not with the System Operator and not with the Market Operator.

What the number displays. Σ (unconstrained scheduled MWh × SMP) for this organisation. A generator that cleared is owed; a load that cleared owes. The sign follows the energy. On the teaching hour the solar farm’s 18:00 line is 75 × 900 = R 67,500 — that hour’s contribution. The tile is the day’s sum of those lines.

It is not the market’s R 0.00. Across everyone, energy credits and energy debits cancel (that proof lives on Market energy account above). Your card is only your side. It is also not rewritten when the wires later take less — that cut is the next tile.

The hour timeline under this card is mostly this pot, broken by period: Quantity, Price, Amount.

Ancillary service recovery

Tile #settlement-total-MARKET_BALANCING. This is the System Operator’s pot for your units.

What it represents. After the auction posted the crate price, the wires, reserve, or an above-cap rule may still move you. Those moves are not a smaller energy payment. They are separate lines, struck at your own offer, and they accrue to the System Operator, who recovers them as an ancillary service. The pot does not have to net to zero — the SO is carrying a real cost.

What the number displays. The day’s sum of:

On the teaching hour the CSC is R 0.00 for a 15 MWh cut. The tile may still read R 0.00 for the day if nothing else landed. That is a fact, not an empty card.

Market Operator charges

Tile #settlement-total-MO_CHARGE. This is the Market Operator’s own fee pot.

What it represents. The MO’s fixed and variable charges for running the market. They are ring-fenced: this money never reaches a shortfall or a bad debt. You do not hold a card for this pot on Accounts the way you hold Trading Clearing.

What the number displays. Fees attributed to this organisation on this Trading Day. On the day-ahead chalkboard it is usually empty until the month — the day view is allowed to read R 0.00 or — without that being an error. When a line does appear, it is an MO charge, not energy and not a wire cut.

Unsecured bad debt

Tile #settlement-total-BAD_DEBT. This is the fourth pot, and it is not on the header.

What it represents. When a participant fails to pay, the shortfall that cannot be covered is allocated. This card is your share of that allocation (or a recovery later). It is a different counterparty-problem from energy, from the SO, and from MO fees.

What the number displays. Allocations and recoveries for this organisation on this Trading Day. On a normal published day it is R 0.00 or absent from the hour timeline. A non-zero here is not your energy bill going wrong — it is someone else’s unpaid ticket landing, in part, on you.

The hour timeline

The body is a vertical hour timeline #settlement-timeline / #settlement-hours-timeline, not a spreadsheet. Each node #settlement-hour-{HH:MM} is one hour that has a line:

Piece What you see Why
Amber chip {HH:MM} SAST The grain
SMP SMP R …/MWh The crate price that hour
Clause Usually §9.8.1 Which rule wrote the energy line
Title Energy payment The simple line: volume × SMP
Quantity MWh Unconstrained scheduled volume
Price R/MWh The SMP, not your offer
Amount Rands What this hour’s energy line is
Other lines Kind, clause, amount, and a sentence CSC / CPP / reserve / bad debt — with the sentence that stops a silent zero

Two zeros that must not read as errors, and the screen writes a sentence for each:

A worked picture — the same solar hour as Bid Desk. The farm was scheduled 75 MWh unconstrained at R 900/MWh. Energy payment 75 × 900 = R 67,500. The wires later took less. The CSC line is R 0.00 because the farm offered R 0/MWh. The R 67,500 stays. That is why Month’s Windfall MWh is counted separately.

One hour on the timeline sample view

Hour 1 Quantity 2 Price 3 Amount 4
18:00 SAST 75.000 MWh R 900/MWh R 67,500.00
  1. 1Hour is the SAST settlement interval — 18:00 means 18:00–19:00.
  2. 2Quantity is unconstrained scheduled volume, the EPM quantity.
  3. 3Price is that hour’s SMP, the same for everyone who cleared.
  4. 4Amount is quantity × price. A CSC of R 0.00 would appear under this, with a sentence.

12.6.4 Notifications

Aside #org-dam-settlement-notifications. Heading Notifications. Bell icon.

This is the event-delivery ledger for the Trading Day — did the schedule-published or submission-rolled-over event actually reach you?

State ID What you see
Empty #event-delivery-empty No event-delivery events are projected for this Trading Day.
Rows #event-delivery-ledger · #ledger-{id} Event id, type, clause; failed in rose when delivery failed

Why it is here: a day that cleared but whose notice never arrived is how a desk bids the next day on a guess. The chalkboard is not the inbox; this strip is the receipt that the inbox was written.

12.6.5 Instructed Energy

Aside #settlement-hour-drilldown. Heading Instructed Energy. Description #instructed-energy-description: The megawatt-hours you would have delivered had you followed the System Operator’s instructions exactly, ramps included. Balancing is measured against this figure, not against yesterday’s schedule.

That sentence is the whole plot of the next tab, previewed here.

Dispute this value (clause 13.4.1(3)) #dispute-instructed-energy — disabled until you pick an hour that has a published trace. Event dispute_instructed_energy. Flash: Instructed Energy dispute {id} filed (clause 13.4.1(3)). Why a button on the chalkboard: §13.4.1(3) anticipates arguments over this number and gives the Dispute Resolution Board power to adjudicate it. A participant that only sees 475.234 can only argue; a participant that can open the segments can reconcile it.

Hour buttons #settlement-ie-hours / #settlement-ie-hour-{HH:MM} — event inspect_hour. Daylight hours (07:00–17:00) are amber; night hours are indigo. The selected hour is navy. Clicking loads the embedded #instructed-energy-view: total megawatt-hours, every segment (minute bounds, height, megawatt-minutes), and the running total that must sum to the published figure.

When the unit is so_controlled, an exposure warning says the 5 % metering allowance is gone for every instructed period. That is a material change in risk, and it happens without you pressing anything.

12.7 Imbalance

Imbalance (/org/brp/after-delivery/imbalance) is the weighbridge after the market — for one Trading Day and one Trading Unit. You open it from Daily: open the unit’s Details & destinations, then Imbalance icon — or when Notices said View lines. A Bid Desk link (#back-to-bid-desk) returns you to Daily. The tab strip #bid-desk-tabs walks you to Submission, IDM, Forward and Settlement without going home first. The sidebar stays on Bid Desk.

Follow along. Path: Daily → Details & destinations → Imbalance. You should see Balancing settlement, Metered energy, and (when a book is attached) this platform’s book figure underneath, labelled as such.

The rest of this section first answers what this room is for, then walks the screen.

12.7.0 What it is for — and how it fits the bid day

Settlement told you what last night’s auction booked. That chalkboard filled at 14:00 the day before delivery. The plant then ran. Meters spoke. Imbalance is the page that asks, hour by hour:

Imbalance turns those answers into money. It does not rewrite last night’s crate price. It does not wait for the month’s invoice. It does wait for the hour to have happened — unlike Settlement, which was official yesterday afternoon.

Think of the produce market again. Last night you booked 75 crates at one posted crate price. The road later said “only sixty may leave the farm.” Settlement already wrote both of those facts (§12.6). This morning the weighbridge counts what actually left the gate. You are charged on the difference between the ticket and the scale, and the charge depends on who caused it.

That is why this room exists on the Bid Desk, beside Settlement, and not only on the month wallet. A miss is priced per hour. A System Operator instruction, a 5 % metering band, an unpaired meter — all live on the hour. Month can wait.

Where Imbalance sits in one bidding day — after the hour has run. Teaching day 2026-07-15 · full_demo · seed 42
Submissions
→10:00 D−1 gate
Auction
→14:00 publish
Settlement
→chalkboard
IDM
→five patches
Delivery
→plants run
Imbalance
→weighbridge
Month / Billing

Settlement fills at 14:00 on D−1, before a single megawatt-hour has been delivered. Imbalance fills after the hour — meters, instructions, then money on the gap.

How it fits the daily bidding scenario, in order:

  1. Submissions — you write tomorrow’s note and send it before 10:00 SAST on D−1.
  2. Daily / Settlement — after 14:00 the auction is official. You already know the crate price and the booked quantity. That money does not wait for meters.
  3. IDM — five windows may still change remaining hours. If 12:00 moved you from 60 MWh to 40 MWh, the weighbridge ticket for that hour is 40, not last night’s 60. Last night’s energy payment on Settlement is not recalculated.
  4. Delivery — the plant runs. The System Operator may instruct you mid-hour. You acknowledge that on Market › Notices, not here.
  5. Imbalance — the morning after (or as soon as meters and a statement exist): ticket vs instruction vs scale. That is this room.
  6. Market Month / Billing — the wallet and the PDF. Official balancing prices are struck ex post (clause 13.6(1), day n+7). A preliminary figure on this screen is not the invoice.

You typically open Imbalance once the hour is over — every morning after delivery, and whenever Notices said the meters or an instruction look wrong. Opening it at 14:00 on D−1 is too early: there is nothing on the scale yet.

Room Everyday picture What you read When it fills
Settlement The docket on your stall What the auction booked, at the crate price 14:00 on D−1
Imbalance The weighbridge at the gate Ticket vs instruction vs meter After the hour
Market Month The wallet The Billing Period After the tickets
Billing The filing cabinet The PDF On the Settlement Calendar

Where this is taught. The eleven legs, the two balancing prices, the 5 % band, and Balancing Groups: V9 §6. Metering vintages: V9 §14. This section is the organisation screen — what you are looking at, and when to open it.

Three numbers, one hour

Everything on this page is written over three quantities. Learn these three and the rest of the screen is a legend.

Symbol Plain name Where it comes from In the produce market
SE Contracted Energy — the ticket Your most recent IDM schedule, else the DAM constrained schedule, plus any registered forward volume How many crates you were still booked to send after the last amendment
IE Instructed Energy What you would have delivered had you followed the System Operator, ramps included. If nobody instructed you, IE = SE What the traffic officer told you to load
AE Actual Energy What your meters recorded, allocated to this Trading Unit What the weighbridge counted

All three are signed: positive is produced, negative is consumed. A factory that was booked to take 65 MWh and took 66 is short — in exactly the same direction as a generator that under-produced by 1 MWh.

SE is the one that surprises people. Settlement’s energy line used the unconstrained booking (75 MWh in the teaching hour). The weighbridge ticket is the constrained leftover — 60 MWh — unless IDM later moved it. If you delivered 60, imbalance on that hour is zero. The R 67,500 on Settlement is not charged again here. Missing that distinction is how a desk queries a windfall that was never an imbalance.

The measuring stick — last night’s constrained leftover becomes today’s ticket, unless IDM moved it. Teaching hour 18:00 · 2026-07-15 · full_demo · seed 42
1DAM SGconstrained 60 MWh
→
2IDM SElast iteration · the ticket
→
3meters AEwhat left the gate

An unpaired Point of Delivery does not rewrite SE, and it does not rewrite last night’s energy payment. It stops AE. That is why Unpaired is amber on Registry, and why this room’s Metered energy card names the fault instead of guessing a meter.

Who caused the gap

There is no single imbalance price. The Code asks a short series of questions about each hour. The answers pick both the volume you are charged on and the price it is struck at.

Ask them in this order:

  1. Did the System Operator tell you to do something this hour?
    • Yes — the part that follows the instruction is settled at your own offer, floored or capped at the SMP. The 5 % metering allowance is gone for the whole hour, instructed or not. You were not missing a promise. You were following the tower.
    • No — go to 2.
  2. Are you within 5 % of the ticket?
    • Yes — you settle the small miss at the crate price (the SMP). No penalty. That 5 % is the Metering Accuracy Band. It exists for meter error on a position you scheduled.
    • No — the whole deviation, not just the part beyond 5 %, is priced at the balancing price. Missing the band is a cliff, not a slope.
Who caused it — the same hour, two different stories
You missednobody instructed
Ticket SE20 MWh
you loaded→
Scale AE18.5 MWh
=
Outside 5 %whole gap at balancing price
The officer moved youinstruction applied
Ticket SE20 MWh
SO said→
Instructed IE18 MWh
=
At your offerband gone this hour

Do not re-declare an hour the System Operator already owns, then argue the band on this screen. The same instruction that made IDM say carry is the instruction that removes the band here.

A worked hour — the cliff

Data. full_demo teaching hour · 18:00 SAST · ticket 20 MWh · nobody instructed · SMP R 900/MWh · balancing price (buying) R 2,742.86/MWh. Same arithmetic as V9 §6.3.

You promised 20 MWh. Nobody told you to do otherwise. Five percent of 20 is 1 MWh, so anything from 19.000 to 21.000 MWh is inside the band.

You delivered Inside the band? What you pay Why
19.100 MWh yes, by 0.1 MWh 0.9 × R 900 = R 810.00 A small miss at the crate price. No penalty.
18.500 MWh no, by 0.5 MWh 1.5 × R 2,742.86 = R 4,114.29 The whole 1.5 MWh moves onto the balancing price — including the 0.9 that used to be cheap.

Six hundred kilowatt-hours more shortfall costs R 3,304.29 more. It did not merely add volume. It moved the price basis. That is the cliff.

The band cliff — 0.6 MWh more shortfall, five times the charge. 18:00 SAST · ticket 20 MWh · nobody instructed
18:00SAST
Inside the band19.100 MWh0.9 MWh at R 900
0.6 MWh further→price basis moves
Outside the band18.500 MWh1.5 MWh at R 2,742.86
Charge insideR 810.00at the crate price
Charge outsideR 4,114.29whole gap at balancing price

The balancing price is not a multiple of the crate price. It is a market-wide average of what it cost to replace the energy the country was short that hour. In a tight evening it can be three times the SMP. In a comfortable hour the rule that floors it at the SMP can make the “penalty” vanish — and the screen then says why, rather than showing BPB = SMP as a silent coincidence.

The Imbalance screen prints a counterfactual whenever you step off the cliff: what the same miss would have cost inside the band, and the difference. If you are routinely a few hundred kilowatt-hours outside, that panel is the cheapest thing on the screen to act on.

And the solar farm from Settlement, so the two rooms stay distinct:

Settlement (§12.6) Imbalance (this room)
Teaching hour 18:00 Unconstrained 75 MWh × R 900 = R 67,500 Ticket is constrained 60 MWh (unless IDM moved it)
Wire cut of 15 MWh Separate line at own offer R 0 Not an imbalance. The ticket already shrank.
If the farm then delivered 60 MWh Unchanged Deviation 0 — weighbridge matches the ticket
If it delivered 58.5 and nobody instructed Unchanged 1.5 MWh short of 60. Band is 3 MWh (5 % of 60), so this miss is inside the band and settles at the SMP

The screen below is that weighbridge: a balancing statement of eleven Code legs per hour, then metered energy, then — labelled as such — this platform’s book figure. The Code bill is the headline. The book is a comparison.

12.7.1 Balancing settlement

The rest of this section is that weighbridge, card by card. The Code bill is the headline. This platform’s leftover is a comparison, labelled as such.

Four header tiles #imbalance-summary-tiles print a short sentence under each title, then the number (#imbalance-stat-settlement-hint and the same -hint suffix on each tile).

Tile ID What the sentence says
Total Settlement #imbalance-stat-settlement Every §13 balancing leg for this unit today — the Code bill, not the book
Actual Energy #imbalance-stat-energy Metered MWh allocated today. Only a verified or revised vintage is invoiced
Price notices #imbalance-stat-notes Hours where BPB equals the SMP because the out-of-merit stack was fully excluded (clause 13.7(2))
Imbalance MTD #imbalance-stat-mtd Month-to-date book charge (actual − scheduled). A comparison, not the Code bill

Card #balancing-statement. Heading Unified Energy & Financial Timeline.

Empty #balancing-empty: No balancing settlement has been produced for this Trading Day.

When a statement exists, #balancing-stage shows a status badge (for example PRELIMINARY) and a vintage badge. A preliminary figure is not the invoice. Clause 13.6(1) makes official balancing prices ex post on day n+7; the official figure is what you are invoiced on.

The hours sit on a vertical timeline #imbalance-timeline-scroll / #imbalance-timeline-cards — the same DaisyUI rail as Settlement (§12.6.3). Each node #balancing-period-{HHMM} is one hour:

Piece What you see Why
Amber numbered node 1, 2, 3… Order on this Trading Day
Left badge {HH:MM} SAST The grain
SMP SMP R …/MWh The crate price that hour
Instruction applied or none Whether the SO path moved you
Title Metered energy What this node is about
Right card Metered Energy Entry Source Point and Recorded Actual Net

The five Code blocks still sit on that row, under the metered card.

Split Table (#imbalance-layout-table) is the same hours as a spreadsheet #imbalance-split-table. Column headers stay sticky while you scroll (#imbalance-split-head). Vintage uses the same emerald badge as the timeline’s Metered Energy Entry. SE, IE, AE, SMP, and Settlement Amount sit centred in their cells.

Quantities #quantities-{period}

Column What it is
Contracted (SE) The ticket, after IDM
Instructed (IE) The SO path, or the same as SE if nobody instructed
Actual (AE) The meter, allocated to this unit
Deviation The signed gap this hour will price
Instruction applied or none

Metering Accuracy Band #band-{period} — a 5 % allowance that turns a small miss into no balancing charge. Badges: within the Metering Accuracy Band (green), outside (rose), or band negated (amber) plus who negated it (an instruction is the usual reason). When the band applies, the allowance in MWh is printed.

What the band cost you #counterfactual-{period} — amber, only when you missed the cliff. You were X MWh outside the allowance of Y. Inside the band this deviation would have settled at R A. It settled at R B — a difference of R C. Why this is here: the band is a cliff. The 0.6 MWh on the wrong side is often the largest lever you have over your own balancing cost.

Prices #prices-{period} — three numbers, always: SMP, BPB (Balancing Price Buying), BPS (Balancing Price Selling). When BPB equals the SMP, an info alert explains why — usually the buying stack had nothing left to average after Out-of-Merit was excluded (clause 13.7(2)). A silent BPB = SMP reads as a bug; this sentence stops that query. When a slice of deviation is unpriced (the gap between an instruction and the schedule that no clause reaches — D-10), that megawatt-hour count is printed, not blanked.

Legs table #legs-{period}

Column What it is
Leg The Code name of this payment
Clause Which rule wrote it
Volume MWh this leg is struck on
Priced at Which price, plus a volume-basis badge
Amount Rands

Empty legs: No balancing settlement for this period. Footer #balancing-total: Total balancing settlement for the day.

12.7.2 Balancing Group on the same card

Block #balancing-group-view when a group is in force.

#group-netting prints Contracted · Actual · Instructed, then Residual against a band. If the group netted inside the band, #group-no-penalty: every member settles its own difference at the SMP and no penalty applies — however far an individual unit deviated (clause 13.10(3)(a)). Beyond the band, #group-response shows direction, instructed response, and a per-TUID allocation table #group-allocation. Exclusions #group-exclusions name units the group may not carry that hour (a zone constraint is the usual reason).

12.7.3 Metered energy

Card #allocation-exceptions-view. Heading Metered energy.

Two questions on one card, because they are one question: what is my Actual Energy, and what is stopping it.

Amber #official-ae-refused when Official Actual Energy is refused because the vintage is still provisional — the clause and the message. A provisional figure feeds preliminary prices and is never invoiced.

Empty #allocation-empty: No metering has been allocated for this Trading Day.

Actual Energy table #actual-energy

Column What it is
Period The hour, SAST
Actual Energy Net MWh at every Point of Delivery allocated to this unit (clause 12.3(2))
Vintage PROVISIONAL / VERIFIED / REVISED; partial if the hour is incomplete
From Which points contributed

Allocation exceptions #exception-inbox — shown rather than estimated around. An estimate settles, and then nobody can see the fault. Heading: N exception(s), X MWh at risk.

Each class #exception-class-{reason}: reason, MWh at risk, owner badge (whose desk resolves it), clause, count, remediation. The hardest sentence, when the reason is single_brp_at_point: if your counterparty has not registered, your settlement stalls too — clause 12.3(1) needs one exporter and one importer at the point.

Raise a Data Query (clause 15.4.1) #raise-query-{reason} — event raise_data_query. The evidence pack (trading date, TUID, vintage) is attached for you. Flash: Data Query {id} raised (clause 15.4.1).

12.7.4 This platform’s book figure

Strip #book-imbalance-strip. Amber label #book-imbalance-label: Secondary — book actual − scheduled. This platform’s book figure is not §13. The headline above is the eleven legs per Trading Unit.

Rose #book-mo-variance only when the two numbers differ: Variance — book actual − scheduled is X MWh; the §13 statement deviation is Y MWh. The book is a comparison, not the bill.

Empty book: No registered book. Link Register a BRP. Empty day: No imbalance settled for this day yet.

When more than one book is attached, a Book select (select_book) sits on the left. On the right: Imbalance MTD in rose — this platform’s month-to-date charge for the selected book, not the Code total.

Scheduled vs actual (MWh by SAST hour) chart #imbalance-sched-actual. Two lines, hours 0–23. Read it like a horizon: the scheduled line is the ticket; the actual line is the meter. Where they part, that hour has a story. Click the table row to open it.

Hour table

Column What it is Why
Hour SAST The grain
Scheduled Book scheduled MWh The leftover this platform planned
Actual Book actual MWh What the book thinks the meter did
Imbalance MWh Signed gap; green long / rose short The book deviation
Instructed SO-excused MWh; green excused pill with the counterfactual cost What the SO moved, so it carries no charge
Uninstructed The rest What you missed
Charge R This platform’s hour charge Not the §13 total above

Click a row (attribute) to open the Forecast-error attribution drawer #attribution-drawer. Heading: which member of the book drove the hour, largest first. Empty: No strategy-run components for this hour — attribution needs a completed run. Close: close_attribution.

A simulated ribbon appears when a lab run owns the positions — so you do not treat a rehearsal hour as live.

12.8 Bid Desk — button pocket card

The whole desk, as a cheat-sheet. Daily is the front door. Submissions writes the DAM. IDM writes the patch. Forward reads the standing order. Settlement is the day’s chalkboard. Imbalance is the weighbridge. Every write talks to the Market Operator. The System Operator is a banner, except an Instructed Energy dispute.

Tab Press Talks to What it is for
Daily Summary filters; Chart scope; Inspect hour; unit actions; Details & destinations Published schedules, forecasts, metering and current market context Understand the delivery day, inspect the evidence, then open the correct unit workbench.
Submissions Validate, Rebuild from latest run, Submit, View payload, day buttons, row expand, λ slider Market Operator (Submit / Validate) Build, check, and send the 168-period note.
IDM Redeclare, Consent (modal openers), Lodge re-declaration, Update consent, iteration chips Market Operator Patch remaining hours, or change whether those hours may be moved.
Forward (read; date and TUID only) Registered forward schedules; MO publication See the standing order and the night-auction leftover, two figures, never collapsed.
Settlement Hour buttons; Dispute this value MO statement; SO trace / DRB Read what last night’s auction did to this unit, hour by hour — before anyone pays.
Imbalance Raise a Data Query; row → attribution drawer MO balancing; SO instructed energy Compare ticket to meter after the hour. Who caused the gap decides the price.

Do not open Bid Desk expecting a submit that will stick if Info is not ACTIVE, the book is not attached, standing data is incomplete, or the DAM gate has passed. Those four lights are taught on Market › Info. This desk assumes they are green.

Every D−1: Submissions by 10:00. Then watch Daily for publication at 14:00. Every Trading Day: IDM for the hours that have moved. After the last hour: Settlement, then Imbalance if the hour looks wrong. The Billing Period wallet is Market Month (§13).

Trading controls

Open Bid Desk → Controls to review the effective automation level, policy history, six thresholds and recent check attempts. New customers start at PROPOSE. Enter the customer’s daily Rand notional cap during onboarding and review a clean first fortnight before requesting automatic operation. Derived thresholds are labelled; changes write dated records.

Lowering a level takes effect immediately. Raising a level or loosening a threshold opens a request in the Approvals inbox. Sign in as an active organisation member to change controls or submit a draft. An organisation-only session can read these screens but cannot perform actor actions.

Use Arm kill switch with a reason during an incident. The red banner appears across Bid Desk and Account & Cover. DAM submissions and IDM re-declarations are blocked at execution; cancellation of queued jobs is additional housekeeping. Run drill exercises a rollback-only stop and records its result. Request disarm needs a different member’s approval. Disarming leaves automation at MANUAL, so restoring automatic operation is a separate reviewed decision.

A refused draft remains available for correction. Soft warnings appear inline; Submit anyway records explicit acceptance. The expanded ladder shows builder, forecast and automation provenance. The prior-year self-assessment download appears after a snapshot has been produced.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

13. Market Month — the month after the tickets

Screen: After Delivery (/org/brp/after-delivery/month). Sidebar icon: scale. Browser title follows the page. You land on the Billing Period wallet.

This room used to be called After Delivery, and the sidebar still says that. The job of the room is the Market Month — one Billing Period of market work, opened as a wallet, then joined to the Market Operator’s monthly file. Settlement and Imbalance are Bid Desk rooms now: they deal with one Trading Day and one Trading Unit (§12.6, §12.7). Old Recon bookmarks still land here.

Think of a monthly bank statement after a month of produce-market days.

Every night you sent a sealed note (the Bid Desk). Every afternoon the auctioneer posted one crate price. During the day you patched remaining hours, and the traffic officer sometimes moved your truck. This room is not another auction. It is the statement of what that month did to you: how many days were published, what your energy pot added up to, what the wires cut, what you patched, what the meters said, and which lines you still disagree with.

You do not telephone anyone. The Market Operator writes the numbers. Cash still moves later, on Accounts and Billing.

Where this is taught. Day-ahead money, imbalance, metering and reconciliation are V9 §6, V9 §8, V9 §13–§15. This chapter is the organisation month screen in ordinary English — the wallet and the file-join. The day chalkboard and the weighbridge are §12.6 and §12.7.

Follow along. Seat: an ACTIVE BRP after at least one traded day. Path: sidebar After Delivery. You should see a month picker, six wallet tiles, the till, and (when a run exists) the monthly file-join.

13.0 The problem this room solves

Yesterday you bid. Today the energy flowed. The Bid Desk is finished with that day. Finance will later ask questions that a Trading Day screen cannot answer:

  1. How is this Billing Period adding up? — published days, energy net, IDM, balancing, the till.
  2. Does our copy match the Market Operator’s file? — and if not, which line do we accept, and which do we query?

Those two questions are one month of work. The hour chalkboard and the meter-against-the-ticket live on Bid Desk, because they share a Trading Day and a Trading Unit with Submissions, IDM and Forward.

What this room sits between — last night’s ticket on the left, cash on the right
Bid DeskDAM · IDM · Settlement · Imbalance
→rolls up
Market Monthwallet · file-join
→cashes
Accounts + Billingcover · EFT · PDF

13.0.1 What Market Month does — and what it does not

It does two jobs, and only two:

  1. Show the month as a wallet. How many days are published? What is your energy net? What did IDM and balancing add? That is the Month board.
  2. Join your copy to the Market Operator’s file. Flag a line, accept it, or raise a query with the evidence already attached. The old Recon tab lives here now.

It does not send a bid, post cover, pay an invoice, or edit the register. Those rooms are Bid Desk, Accounts, Billing, and Market. It does not invent a megawatt. The Market Operator writes the statement; this room reads it. It does not hide the hour — Bid Desk › Settlement and Imbalance still own the Trading Day.

Positive still means the Market Operator pays you. Negative means you pay the Market Operator. Energy sign: positive is produced, negative is consumed.

Bid → Clear → Deliver → Market Month — this room starts after the last hour
1BidBid Desk, D−1
→
2ClearMO · 14:00
→
3Delivermeters · SO
→
4Monththis room

13.1 Shared chrome

Page #after-delivery-page inside the organisation shell. Header title After Delivery. Description: Billing-period wallet, settlement statement, query clocks, and the monthly file-join against the Market Operator.

When there is no BRP registration, the page shows the same dashed empty state as Bid Desk: No BRP registration yet, with Register as a BRP → Market › Info. There is nothing to settle.

There is no Month / Settlement / Imbalance / Recon tab bar on this room. Settlement and Imbalance keep After Delivery URLs but they are Bid Desk destinations (§12.0.4). Redirects still work:

Old path Lands on
/org/brp/bid-desk/month this page
/org/brp/after-delivery/reconciliation this page
/org/brp/reconciliation this page
/org/brp/bid-desk/settlement Bid Desk › Settlement
/org/brp/imbalance Bid Desk › Imbalance

13.1.1 The filter bar

The same chrome family as Bid Desk (Chrome.bar). Left: pickers. Right: Market Code version (today 2.3).

Control ID Event What it is and why
Billing period #bid-desk-month in #bid-desk-month-form set_month The calendar month. A Billing Period is not a Trading Day.
Open a Trading Day #recon-day-date / #recon-open-day set_date then navigate Jumps to Bid Desk › Settlement for that date. The chalkboard is not this page.

13.2 Month

Month is the wallet for one Billing Period. You open it to see whether this organisation’s month is healthy, not to type a rand.

Why this page is not Bid Desk: a trader at month-end needs “how many days are still unpublished?” in one glance. An hour timeline on the same page would slow that glance. The chalkboard for one Trading Day is Bid Desk › Settlement. The only action on this wallet is Open Market Accounts — the till, not the chalkboard.

Board #bid-desk-month-board (legacy id — the board moved off Bid Desk, the DOM id did not).

Empty units: No Trading Units on this registration. Empty balancing group: No Balancing Group is in force. A group never totals EPM.

13.2.1 The six month tiles

Each tile is a coloured card with a label, a big number, and (where it helps) a one-line hint.

Tile ID What the number is Hint / why we show it
Published days #org-dam-month-published N / D — published Trading Days over days in the month The denominator. “Energy net R 80,000” means nothing until you know it is 12 of 31 days. Unpublished days are not zero; they are not yet written.
Your energy net #org-dam-month-epm-net Whole rands This organization’s month Σ EPM — not the market’s R 0.00. Your slice of the energy pot across the published days. The market’s energy account still sums to R 0.00 across everyone; this tile is your side.
Windfall MWh #org-dam-month-windfall Megawatt-hours Constrained-off at own-offer R 0. Counted separately — not added into Energy. Hours the wires cut you, and your own offer was R 0/MWh, so the constrained-sales charge is R 0.00. You keep the energy payment on the unconstrained volume. Counting those megawatt-hours inside Energy would hide the most valuable zero on the statement.
IDM net #org-dam-month-idm-net Whole rands The month’s patch charges and payments from the five intraday auctions. The DAM ticket is not torn up; this is the extra line.
Balancing net #org-dam-month-balancing-net Whole rands, or no statement The sentence on the tile names the basis. no statement is honesty: there is no balancing money until there is a published §13 statement. Month › Balancing equals the sum of published §13 statements for that unit, or “no statement” — it does not invent a book figure.
Document #org-dam-month-document Label of the month’s market document Whether finance already has a thing to file. The PDF itself is Billing.

EPM is Energy Payment (EPM) — scheduled volume × SMP, on the unconstrained schedule. A month of those lines is this tile.

How to read the month wallet — three pots plus two extras, not one total. Illustrative July.
JulyBilling Period
Energy netyour Σ EPMclosed loop across the market
wires + patches+not inside Energy
IDM + Balancingown linesplus Windfall MWh at R 0
Do not addWindfall MWhalready paid inside EPM
Do add, separatelyIDM netvolume you took back
Invoice laterBillingthis page is a preview

13.2.2 Till

Card #org-dam-month-till. Heading Till.

Three numbers in one sentence: Due · paid · shortfall. Those are the month’s market document as cash, not as energy.

Link Open Market Accounts → /org/market-accounts (§14). Why a link and not a Pay button: this room does not move cash. The till is a preview so you do not open Billing to discover a shortfall you could have seen here.

13.2.3 Trading Units table

Card #org-dam-month-units. Heading Trading Units. One row per owned unit.

Column What it is Why
TUID The name the market uses, monospace Whose row
EPM That unit’s month energy payment The energy pot, split
CSC/CPP Constrained-sales / constrained-purchase adjustments The wires line. Often R 0.00 on a renewable that offered zero — that zero is the point
IDC Intraday charges and payments The patch pot for this unit
Balancing §13 month total, or no statement Never a book leftover

A Balancing Group never totals EPM. Energy is per Trading Unit. The group only nets balancing. That is why the next card exists.

13.2.4 Balancing Group table

Card #org-dam-month-bg. Heading Balancing Group.

Column What it is
Group The group’s name
Balancing The group’s month balancing, or no statement

Why a second table: if two of your own units offset each other, the penalty can fall to zero even when each unit, looked at alone, missed. The energy pot is unchanged. V9 §3.6 owns the rule.

13.3 Against the Market Operator’s file

The old Recon tab is gone. The join against the Market Operator’s file now lives on this month page — same Billing Period as the wallet. Old bookmarks /org/brp/after-delivery/reconciliation and /org/brp/reconciliation still land here.

Page description: Settlement statement, query clocks, and the monthly file-join against the Market Operator.

A query is how you talk to the Market Operator about a statement line. Pay now, argue later still applies (§5.5 #org-compliance-pay-now). Tolerance and clocks: V9 §8.

Think of two clerks comparing two copies of the same month. Your copy is this platform. Their copy is the Market Operator’s settlement file. A line that matches is boring. A line that does not is flagged. You either Accept (we agree, close it) or Raise query (we do not, and here is the evidence).

A query is a clock, not a chat — each tier has a door and a next door
Data Query
→MO deadline
Settlement Query
→again
Settlement Dispute

Payment is due notwithstanding the query (clause 15.5(1)). If you are right, the correction is settled on a rerun and you are paid back with interest. If you do not pay, the balance is a Shortfall and cover is called the same day.

13.3.1 Open a Trading Day

Form #recon-day-form above the statement. Label Open a Trading Day. Date #recon-day-date (set_date). Button Open Settlement for this day #recon-open-day — navigates to Bid Desk › Settlement (§12.6) for that date / TUID. Why: this page is the month join; the chalkboard for one day is Settlement.

13.3.2 Settlement statement

Card #settlement-statement. Heading Settlement statement.

Empty #statement-empty: No Settlement Statement has been issued for this Billing Period.

When a statement exists, #statement-type shows the type badge:

Type Extra badge What it means
INDICATIVE not billable So you can check the data before it becomes billable (clause 2.1(102)). Raise a Data Query on anything wrong with it.
RERUN — Must show both the previous and the revised values (clause 15.3.5(4)).

Settlement item table #statement-totals — the five items clause 15.1 requires, plus the net:

Row ID What it is
Trading Payments #total-trading-payments Money the market owes you for energy and related trading
Trading Charges #total-trading-charges Money you owe the market for energy and related trading
Unsecured Bad Debt charges #total-bad-debt Your share when somebody else did not pay
Fixed Market Operator Charges #total-mo-fixed The membership-shaped fee
Variable Market Operator Charges #total-mo-variable The volume-shaped fee
Net (excluding VAT) #total-net Clause 15.1(2)
VAT #total-vat At the printed rate
Gross #total-gross The number finance will recognise

A rerun adds What changed #statement-diff: Period, Line, Clause, Previously, Revised, Difference. Unchanged lines are counted once, not re-listed. That is what a rerun is — “what moved”, not a fresh snapshot.

If an invoice is already attached, #invoice-panel prints Net · VAT · Gross, the due clock (three business days into Trading Clearing without set-off for an invoice; four business days out for a self-billing invoice — the Market Operator collects before it distributes), and the amber rule #due-notwithstanding-dispute: This is due even if you are disputing it.

13.3.3 Queries and disputes

Card #query-workflow. Heading Queries and disputes.

State ID What you see
Empty #query-empty No query is open. Raise one from a statement line or a metering exception — the evidence is attached for you.
Refused #query-refused This cannot be raised ({clause}) plus the message
Open #query-detail Tier badge, status badge, clause

Clock #query-clock

Row ID What it is
Market Operator’s deadline #query-mo-deadline When they must answer
Reasonable-endeavours target #query-endeavour The earlier target, when present
If that passes, this becomes #query-escalation The next tier and its clause
Window closes #query-window When you may no longer raise this ground

Evidence pack #query-evidence-pack — Bid / submission, Meter, Schedule. Not a JSON stub. Those three references are what a later hearing will read.

Escalate to Settlement Query #escalate-to-settlement-query or Escalate to Settlement Dispute #escalate-to-settlement-dispute — event escalate_query. Shown for the matching tier. Flash: Escalated to {tier}.

Note #query-extension: you may grant the Market Operator up to 10 further business days (clause 15.4.2(5)); granted-so-far is printed. Some grounds need no prior Data Query (#query-no-prior-needed) — a difference between the Indicative and the Initial Statement is the usual one (clause 15.4.3(3)).

If this query is upheld #query-if-upheld — shown before you submit, so you know the outcome class:

Row What it tells you
Materiality HIGH or LOW, plus the clause
Settled on Which rerun will carry the correction
Prices and market schedules recalculated yes / no, plus why
Applies to Every participant, not only you (clause 15.5(3))

Telling a desk that a Low Materiality correction will land on the next timetabled rerun, rather than as a Friday refund, is what stops most pointless escalations.

13.3.4 Monthly file-join

When no run exists: No reconciliation run yet — the monthly cycle publishes one after the MO settlement file.

When a run exists:

Toolbar #reconciliation-controls

Control ID What it does
Reconciliation month #reconciliation-month-form Select of published run months (select_month)
Value #variance-heatmap-value Heatmap cells are rand variance
Count #variance-heatmap-count Heatmap cells are flagged-line counts

Summary tiles — Month (%b %Y), Matched (percent), Net variance (rands), Open disputes (count).

Variance heatmap #variance-heatmap. Heading names the mode (R value or line count). Chart #reconciliation-variance-heatmap: classifications on one axis, day/hour slots on the other. Darker is more. Accessible table #reconciliation-heatmap-table under the chart (Classification, Day/hour, Variance R or Count). Empty: No reconciliation variances for this month.

Flagged lines table. Heading: Flagged lines (N). Empty: No flagged lines — all matched or within tolerance. Classifications that flag: VARIANCE, MISSING_MO, MISSING_INTERNAL.

Column What it is Why
Period Day and hour Which slot
Type Classification badge Variance vs a missing side
Internal This platform’s rands Your copy
MO Their rands Their copy
Δ The difference The argument
Hint Root-cause hint badge Where to look first
Action Accept / Raise query, or the resolution The only writes on this tab

Click a row (toggle_row) to expand the re-derivation — internal vs MO vs variance, charge type, hint. Accept (accept) flash: Line accepted. Raise query #raise-query-{id} (raise_query) opens a Mo.Settlement.Query with the evidence pack and marks the line DISPUTED. Flash: Query {id} raised on Mo.Settlement.Query. An old Open dispute path is no longer the primary action — the Code path is Raise query.

Internal case file — only when internal cases exist. Caption: Not the Code path. Escalation writes Mo.Settlement.Query above. Each row: status badge, tier, status, resolution or evidence summary. Mark submitted on an OPEN case is a local tick, not the Market Operator write.

A simulated ribbon appears when a lab run owns the reconciliation.

13.4 Market Month — button pocket card

The whole room, as a cheat-sheet. The wallet is the month. The file-join is the two clerks. Settlement and Imbalance are Bid Desk rooms for one Trading Day. Every write talks to the Market Operator.

Press Talks to What it is for
Open Market Accounts — (navigates) Scan the Billing Period. Jump to the till.
Open Settlement for this day Bid Desk › Settlement Read one day’s pots.
Accept, Raise query, Escalate…, month / heatmap Market Operator Join the file. Pay now, argue later.

Every morning after delivery: Bid Desk › Settlement for yesterday. Imbalance if the hour looks wrong. This room as the days accumulate, and when the monthly file arrives. Cash: Accounts, not this room.

13.5 Vesting in the published results

You need to understand how a determined hedge changed this month’s settlement. On Trading → Month → Published results, Vesting in this month’s results appears when your seat has a relevant vesting determination or historical vesting lines. Choose Explain vesting to open the right-side drawer. The selected month remains visible in its header.

flowchart LR
  A[Select the trading month] --> B[Open Published results]
  B --> C[Explain vesting]
  C --> D[Read energy split and signed adjustment]
  D --> E[Inspect determination and settlement evidence]
  1. Choose the month. A seat without relevant vesting records has no extra card in its normal results.
  2. Open Explain vesting. The hedged versus merchant bar appears only when matching generator metering is complete and consistent with the statement’s data vintage. Provisional and verified readings are not added together. It covers the unit-periods with vesting generator settlement lines, not all portfolio generation.
  3. Read Signed vesting adjustment. Positive adds to your settlement position; negative reduces it. This is a sum of persisted lines, not a new valuation and not a bank receipt.
  4. Read each named unit and determination. Its step chart shows peak, standard and off-peak scheduled MW; the table supplies exact effective dates and prices. Steps have equal visual width, rather than representing equal elapsed time. Dormant and outside-effective-date determinations are labelled at the start of the selected month.
  5. Read Settlement evidence. Each line names its source date, statement type, signed amount, quantity and whether it has been issued. Expand Source statement & unit for the identifiers and trading period. The latest monthly statement takes precedence over daily statements; superseded versions are excluded.

No settlement lines produces an explicit message, without presenting scheduled MW as settled MWh or a cash payment. Missing or inconsistent metering suppresses the energy split but leaves recorded money evidence visible. A counterparty can read its adjustment without a generator energy chart. A failed read says evidence could not be loaded and asks you to refresh; it does not pretend the seat is unvested.

The close button, backdrop or Escape dismisses the drawer. Trace money in Accounts → Statements opens the same month’s cash audit. Old /org/market-accounts/vesting?period=YYYY-MM-DD links open this drawer. An unvested seat reaching it through a saved link sees an explanation, without zero-valued vesting tiles.

Where this is taught. The regulated instrument, arithmetic and activation belong to V9 §19. The Market Operator’s determination book remains in V11 §21.13.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

14. Accounts — the counter where cash moves

You need to know what needs paying, what is coming in and where your money is held. Open Trading → Accounts (/org/market-accounts). The page is headed Your money and follows that order.

Tab Path Your question
Overview /org/market-accounts What needs my attention now?
Payments & receipts /org/market-accounts/payments What must I pay, and what has arrived?
Balances /org/market-accounts/balances Where is my money and what can I do with it?
Statements /org/market-accounts/statements How did this account get from opening to closing?

Follow along. Seat: an organisation with an ACTIVE Balance Responsible Party (BRP) registration. Path: Trading → Accounts. You should see four tabs, a due-date timeline, a dated published-cover summary and three separate balances. Your amounts depend on the selected seat and recorded transactions.

14.0 The problem this page solves

Treat Accounts as the cash counter. Start with Overview, then follow an action into payments or balances. Open Statements when you need the evidence behind an amount. A self-billing invoice records money the market owes you; an ordinary invoice records money you must pay.

flowchart LR
  A[Review what needs attention] --> B[Pay invoices or manage balances]
  B --> C[Check recorded movements]
  C --> D[File the monthly statement]
  1. Review To pay, Still to receive, Transfers pending and Overdue invoices. These cover all months.
  2. Follow Review payments & receipts to outstanding documents, or Manage balances to the three accounts.
  3. Open the relevant account history in Statements and choose its month.
  4. Read the balance bridge, inspect the audit rows and open the formal PDF or CSV.

14.0.1 What Accounts does — and what it does not

Accounts records deposits, invoice payments, collateral posting and withdrawal requests through the existing Treasury rules. Its bank ledger is the platform’s record of transfers; it is not a live bank feed. Deposit simulates funding from your business and does not send a bank transfer.

The full cover assessment, notices and replenishment arrangements live in Market → Account & cover. Vesting analysis lives in Month → Published results. These screens link back to Accounts when you need to trace cash.

If you have no registration, No market accounts yet explains that you must file a BRP seat in Market. The loading card remains while the account data is being fetched.

The Statement month picker appears in Payments & receipts and Statements. The URL preserves it as ?period=YYYY-MM-DD. It controls the receipt chart, cascade explanation and formal statement. It does not turn current bank balances or the latest published cover assessment into historical figures.

Old /bank, /clearing and /collateral bookmarks still open Balances. Old /vesting bookmarks open Month’s vesting drawer and preserve the selected period.

14.0.2 Three pots, in ordinary English

Account Purpose Available action
Own bank Your platform bank ledger, used for invoices and collateral funding Deposit; set automatic payment of the monthly Market Operator fee
Trading Clearing Your designation in the market’s account, held on trust Request withdrawal
Collateral Reserve Your cash credit cover, locked as market security Post collateral; no withdrawal on request

These balances have different restrictions. Do not add them together as available cash. The How money moves diagram in Balances distinguishes bank transfers from designation movements. Market Operator fees remain visible in the bank audit history; there is no participant balance card for the Market Operator’s own fee account.

14.1 Credit cover

Overview contains a compact Published cover summary. Its date and 17:00 SAST assessment label identify the snapshot you are reading. A subsequent payment does not rewrite that published assessment.

14.1.1 The three headline cards

The compact summary lists Required, Posted at assessment and Headroom. Required is the exposure to secure; headroom is posted less required. The current Collateral Reserve balance appears separately under Where your money sits.

14.1.2 How Required is built

Open Full assessment & notices for the components, calculation method and warning limit.

Where this is taught. The published assessment and its calculation belong to §6.2.

14.1.3 Notices on the assessment

The summary shows the number of notices in that dated assessment. Full assessment & notices opens their full detail. No published assessment yet means cover sufficiency has not been confirmed; it is not a zero requirement.

14.2 How a cover call is satisfied

Post collateral opens the transfer form directly. Pay early opens Payments & receipts so you can select an outstanding invoice. A successful transfer updates the current ledger; the next assessment reflects the changed inputs. The full notice and its deadline remain in Account & cover.

14.3 Open a replenishment window

This action has moved to Market → Account & cover → Replenishment arrangements. A window records permitted dates; it does not move money or post cover.

Where this is taught. Fields, refusal states and completion are in §6.3.3.

14.4 Your money

Overview prioritises overdue invoices, funding gaps and the next six outstanding documents in due-date order. The timeline states whether each document is a payment or expected receipt, its deadline in South African Standard Time (SAST), reference and remaining amount. With no outstanding payments, the page says so.

14.4.1 Your own bank account

Open Balances. Own bank, Trading Clearing and Collateral Reserve appear together, with an action beside each purpose. The current-ledger date is shown above the tabs. Transfers pending means instructed but not yet settled; it is not an additional bank balance.

The Automatic EFT for the monthly Market Operator fee checkbox belongs to Own bank. Electronic funds transfer (EFT) is the payment method. The current fee is shown beside the setting; automatic payment runs only when the bank balance covers it.

14.4.2 Add funds modal

Choose Deposit. The branded dialog states the current bank balance and explains that funding is simulated. Enter Amount in rand, then Deposit. On success, a confirmation shows the amount added and new balance. Cancel, the close button or Escape dismisses the form. Invalid or non-positive amounts are refused.

14.4.3 Pay (post cover) modal

Choose Post collateral in the Collateral Reserve section, or in Overview’s cover summary. Enter Amount in rand. The form shows the own-bank balance as its maximum and explains that posted collateral cannot be withdrawn on request. On success, the current bank and collateral balances update. An amount above the own-bank balance is refused and the form stays open.

14.5 Invoices and payments due

Open Payments & receipts. Each document shows its type, reference, billing month, status, due date, document amount, recorded amount and remaining amount. Only an ordinary invoice with a positive remaining amount has Pay by EFT. A cancelled document says no payment is due.

Documents filter Scope
Outstanding All months, with a positive remaining amount; the default
This month The chosen statement month, including its paid and cancelled documents
Paid Paid documents across all months
Cancelled Cancelled documents across all months
All documents Every recorded document for your seat

An empty result says No documents match this view. Changing the statement month changes the receipt chart and cascade explanation. Use This month when you want the document list to have the same scope.

14.5.1 Pay by EFT modal

Select an invoice’s Pay by EFT. The dialog identifies that invoice and shows what is outstanding and what the own bank can cover. Enter Amount in rand and submit. The same Treasury checks apply: an invoice owned by another participant cannot be paid from this screen, and an amount exceeding the bank balance is refused. A short payment retains the existing shortfall handling; it does not silently mark the invoice paid in full.

14.5.2 Self-billing detail

The Receipts for [month] bar compares expected and recorded received amounts for the selected month’s non-cancelled self-billing invoices. Exact Rand values sit above the bar. No documents produces No self-billing invoices for this month, rather than an invented percentage. The rows below retain each document’s reference and recorded amount.

14.6 Your slices of the market’s accounts

In Balances, Trading Clearing and Collateral Reserve sit beside Own bank, with their different restrictions written in the card. Inspect clearing history and Inspect collateral history open the matching account in Statements.

14.6.1 Request withdrawal modal

Choose Request withdrawal beside Trading Clearing. Enter Amount in rand and choose Record request. The confirmation means a request was recorded, not that an EFT has settled. Collateral Reserve has no withdrawal action; a submitted collateral request is still refused by the underlying rule and keeps its audit record.

14.7 Debit-note cascade

Card #cascade-explainer. On Payments & receipts, heading Debit / credit calculation. The selected statement month controls this explanation.

This is the highest-value card on the page when it is not empty, and the reason is narrow: it is the only line on a statement a participant cannot work out for itself. “You were paid R 862,500 against an invoice for R 900,000” with no explanation is a phone call. The same line with “the market collected less than it owed and you were 75 % of the creditors that cycle” is an answer.

Empty #cascade-explainer-empty: No debit-note cascade in this billing period. If somebody else pays short, this board is where you will see what you expected, what you received, your share of creditors, and whether you became an Excess Participant.

When a cascade ran #cascade-explainer-board:

Fact ID What it is
Expected #cascade-expected What you were owed this cycle
Received #cascade-received What actually arrived
Shortfall that caused the note #cascade-shortfall The unsecured bad debt that started the cascade
Your share of creditors #cascade-share Your percent of the creditor pool

The shipped reading of [D-13] is sequential: the Excess Participant pays cash; nobody else is reduced a second time. If this run used the cumulative switch, an amber sentence flags over-recovery.

You are an Excess Participant #cascade-excess — the debit note exceeded your Self-Billing Invoice; the balance is due in cash within two business days (§15.3.4(11), §2.1(86)). Otherwise #cascade-not-excess: You are not an Excess Participant this period.

Where this is taught. The cascade arithmetic: V9 §15.3.

14.8 Formal period statement

Open Statements, choose Statement month and Account to trace. The bridge explains opening balance, money in, money out and closing balance. For a month still open, it says Balance so far. Exact figures below the chart make the relationship checkable: opening + money in − money out = closing or balance so far.

The Formal period statement below covers the two market designations. PDF opens a branded viewer; CSV downloads the selected month’s designation movements and balances. Own bank is a separate ledger and is not included in those designation exports.

14.9 Statement — every movement

The chosen account’s audit table shows date, narrative, signed amount and running balance. Its From and To fields default to the statement month through today or month-end. Choose Show to inspect another date range. The bridge remains tied to the statement month, with its dates printed above the table, so a wider audit search does not change the formal statement.

No rows produces No movements in this date range. Headers stay visible while you scroll. The link Explain vesting settlement amounts in Month opens the selected month’s vesting evidence.

14.10 Your own bank statement

Choose Own bank under Account to trace, or follow Inspect bank history from Balances. These rows come from bank transactions, not the market designation ledger. Their bridge uses the same bank source. Read the narrative to distinguish business funding, invoice payments, fees, interest and cover transfers.

14.11 Vesting

Vesting now belongs to Trading → Month → Published results → Explain vesting. Its signed adjustment is supported by persisted settlement lines and a named determination. The old Accounts URL redirects there; this chapter’s anchor remains for saved links.

Where this is taught. Read §13.5 for the drawer and missing-data states, and V9 §19 for the instrument.

14.12 Accounts — button pocket card

Action Where Completion
Review payments & receipts Overview Outstanding documents open
Deposit Balances → Own bank Simulated funding recorded in the bank ledger
Post collateral Overview or Balances → Collateral Reserve Current posted cash updates; published assessment stays dated
Pay by EFT Payments & receipts → invoice Recorded result or a specific refusal
Request withdrawal Balances → Trading Clearing Request recorded; not a settled transfer
Statement month / Account to trace Statements Monthly bridge and chosen account’s evidence
PDF / CSV Statements → Formal period statement Market designation statement opens or downloads
Full assessment & notices Overview Market → Account & cover

Last verified: 2026-09-24 · Accounts workspace redesign.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

15. Billing

Screen: Billing (/org/billing). Sidebar icon: receipt-percent. Page #org-billing-page.

This chapter is a map. Who issues, how VAT is computed, registers, site view, market documents and monthly close are V15. What follows is the organisation Billing Hub tab by tab — including the Market tab, which is how you see the Market Operator’s documents without sitting in /mo/billing.

Think of Billing as the filing cabinet. Bid Desk › Settlement is the day’s chalkboard. Market Month is the wallet. Accounts is the till. Billing is the PDF finance will keep.

Follow along. Seat: ACTIVE org with at least one billed month. Path: Billing. Month picker, Export CSV, six tabs.

15.1 Chrome

Control ID
Previous month #billing-month-prev
Next month #billing-month-next
Month input #billing-month
Period status #billing-period-status
Export CSV #billing-export-{tab} — current tab’s register

15.2 Tabs #billing-tabs

Tab ID Panel
Received #billing-tab-received #billing-received
Issued #billing-tab-issued #billing-issued
Sites #billing-tab-sites #billing-sites
Market #billing-tab-market #billing-market
Overview #billing-tab-overview #billing-overview
Analyze #billing-tab-analyze #billing-analyze

Received may show an unacked badge — documents addressed to you that you have not acknowledged yet.

15.3 Received

Table #received-table. Actions: Open (eye / modal #billing-document-modal), Settlement (period), Acknowledge, Record payment.

These are copies of documents addressed to you — including Market Operator invoices and self-billing invoices when the market owes you.

15.4 Issued

Table #issued-table. Columns include Number, Kind, Recipient, Net. What you put out as an issuer (for example an IPP invoicing an off-taker). Not the MO’s register.

15.5 Sites

Per-site cards #site-view-{id}. Issuer toggles, savings, conservation footer. This is the wheeling half of the filing cabinet — V15 site view.

15.6 Market

Market roll-up #market-rollup. Every Registration’s party document for the month — the Market Operator’s invoices, remittances (self-billing), debit notes. Same tax numbers and PDFs as /mo/billing, from your chair.

This is how an organisation deals with the Market Operator on paper after delivery. Queries still start on Market Month (§13.3). Payment still starts on Accounts.

15.7 Overview and Analyze

Overview: Master Statement #master-statement — Wheeling / Market / Payable / Receivable / Position. Level 5: both halves. Never itself a tax invoice.

Analyze: month-over-month #analyze-table, chart #analyze-chart-mom Month-over-month from documents.

15.8 Billing — button pocket card

Press Talks to
Acknowledge (Received) Your copy of a document (including MO)
Record receipt / Record payment Your records; the till is Accounts
Reverse receipt / Reverse payment Your record, kept and marked reversed; the documents it paid reopen
Open Stored PDF #billing-document-modal (/org/billing/documents/{id})
Export CSV Download of the visible register
Month pack /org/billing/month-pack.zip

Where this is taught. The whole billing volume is V15. Market Operator billing console: V11 §19.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

16. Common questions

Who do I call? You do not. The Market Operator is Market, Bid Desk, Market Month, Accounts and Billing. The System Operator is Market › SO and the instruction table on Notices. There is no telephone button.

Why can I not Submit on Bid Desk? The seat is not ACTIVE, or no book is attached, or standing data is incomplete, or the DAM gate has passed. Read Info’s MAY SUBMIT, Books balanced, Standing Data completeness, then the gate chip.

Will the 03:00 worker send my DAM? Only if Auto DAM is on for this BRP. That is the default. The switch is on Market → Info (#brp-auto-submit-dam). Bid Desk shows Auto DAM · on or off (#bid-desk-auto-dam) and a sentence on Daily and Submissions (#org-dam-auto-submit). Turn it off when your own system submits, or when you want silence to roll over. Submit on the desk still works either way.

Why is Activate missing? It is not yours. The Market Operator presses it on V11 Participants after approval and the three-business-day wait.

I pressed Acknowledge and it failed. Retry. The local tick is only a projection of a round-trip to the System Operator. An archived instruction cannot be acked.

Unpaired PoD is amber. Open Registry → View the unit → name the counterparty or ask them to Confirm — this point is ours. Energy through an unpaired meter cannot settle.

Credit Cover Increase Notice has no button. Correct. Post cash or pay an invoice early on Accounts. The notice is the clock, not the counter.

Account/Cover vs Accounts? Account/Cover: notify the MO, read the 17:00 assessment. Accounts: move money.

Settlement vs Imbalance? Settlement is last night’s receipt — what the auction booked, from 14:00 on D−1, before meters (§12.6). Imbalance is the morning-after weighbridge — ticket vs instruction vs meter (§12.7). The crate price does not change. The ticket for the scale is the constrained leftover, after IDM.

Settlement vs Billing? Settlement (Bid Desk) is the receipt after the night auction. Imbalance is the weighbridge. Month is the wallet for the Billing Period. Billing is the PDF. Clearing is not paying.

Did the IDM change my DAM price? No. Volume for remaining hours may move. The crate price stays.

Did a curtailment change my DAM price? No. It changed what good delivery means. Imbalance uses Instructed Energy.

May I withdraw Collateral Reserve? Not as spending money (clause 15.2.1(5)). Trading Clearing surplus is the withdrawal path, and it is a request.

Pay now, argue later? Yes. Compliance says so. Raise the query on Market Month (§13.3); still pay.

Where is Units/Groups? Sidebar, between Market and Bid Desk. Not this volume’s deep teach — V9 §3.3.

Where is the MO / SO console? You are on the organisation seat. MO: V11. SO: V12. Sign in as mo@webill.net / so@webill.net from / (demo password supersecret).

17. Terms used in this volume

Term Meaning here
Market Operator (MO) Auction, register, till. Never throws a switch.
System Operator (SO) Map, dispatch, reserve certification. Never writes your invoice.
BRP / membership card One registration per organisation.
MPID Permanent party number the MO issues. Not the BRP code.
Application state Where the paperwork is (fifteen values).
Status May this seat bid today? PENDING / ACTIVE / SUSPENDED / REVOKED.
Trading Unit What the market schedules. Must not span two zones.
Book How you plan. Attach it on Info or Bid Desk stays empty.
Point of Delivery A meter on a unit. Unpaired → cannot settle.
Standing data What the plant can physically do, with provenance.
Credit cover Cash the MO holds so your debts do not land on others.
Collateral Reserve Where posted cover sits. Not spending money.
Trading Clearing Trust account for market cash. Interest accrues to you.
Bid Desk The organisation trading floor: Daily, then Submissions, IDM, Forward, Settlement, Imbalance.
Settlement (Bid Desk) The receipt after the night auction: one Trading Day, one Trading Unit, hour × SMP. Not the invoice, not the meter till.
Imbalance (Bid Desk) The weighbridge after the hour: ticket vs instruction vs meter. Who caused the gap decides the price.
Market Month The Billing Period wallet after the tickets (sidebar After Delivery). Settlement and Imbalance open from Bid Desk. The old Recon tab is the file-join on this page.
DAM / IDM Night-before auction for tomorrow (168 periods, 10:00 D−1); five smaller auctions that only move remaining hours.
SMP One crate price per hour for the country.
Instructed Energy The path the SO published. Imbalance’s measuring stick once instructed.
Acknowledge Round-trip: the tower knows the cockpit heard.
Notify Market Operator §6.2(11) written notice that an account exists.
Clearing vs paying Prices at 14:00 D−1; cash on the Settlement Calendar.

Master definitions: hub glossary.

You are here
1Setup
→
2Deal
→
3Strategy
→
4Nominate
→
5Market day
→
6Settle
→
7Statement

18. The forward position

You hold an active physical power purchase agreement. The day-ahead market used to treat those megawatts as still up for grabs. The Forward Physical Market is how you commit them before D−1, so the night auction clears only the residual.

This chapter is the organisation seat: the register this schedule action on a contract, and the Bid Desk panel that shows the day-ahead position sitting on top of the forward base. The instrument itself, the gate, remaining transfer capability and the participant API are V9 §20. What the Market Operator sees is V11 §27.

Follow along. Seat: an organisation with an ACTIVE physical agreement and a Trading Unit on the register. Path: Deals → Contracts, then the calendar-days action on a physical row (#view-forward-…), or Bid Desk → Forward (/org/brp/bid-desk/forward).

18.1 Register this schedule

Screen: /org/deals/contracts/:ppa_id/forward (#contract-forward).

The action is offered on an ACTIVE agreement. Anything else — AGREED, SIGNED, NEGOTIATING — is refused on the face of the screen (#contract-forward-refused) and the refusal names the status. You cannot sneak a draft contract onto the transmission system.

On an ACTIVE row you see the generated profile before you submit (#contract-forward-preview). Period-sum equals the contract’s allocated energy for the horizon, split across time-of-use the way the contract already splits it. A trader registers a schedule it has read.

Pick the seller Trading Unit, the buyer party, and the horizon start (a week, starting far enough ahead that the registration gate is still open). Register this schedule writes a SUBMITTED row linked to that agreement (source_contract_id). The Market Operator validates and registers it; you do not skip those steps from this seat.

18.2 The Bid Desk panel

Screen: Bid Desk → Forward (/org/brp/bid-desk/forward, #bid-desk-forward). From Daily, each Trading Unit card has a Forward shortcut in the Bidding group. Once you are on Submission, IDM, Settlement or Imbalance, the tab strip walks you here without going home.

The panel’s whole job is one thing: you see the day-ahead position on top of the registered forward base, not instead of it. Two figures, always. The room-by-room walkthrough — every chrome item, the sticky table, the 1 Sept '26 00:00 clock, and a worked hour — is V8 §12.5.

Column What it is DOM
Trading Period The hour in South African time, e.g. 1 Sept '26 18:00 #bid-desk-forward-period-{hour}
Forward base MW REGISTERED schedule for this unit in that Trading Period #bid-desk-forward-base-{hour}
Day-ahead MW Published constrained residual, or 0 if nothing has published #bid-desk-forward-dam-{hour}

A period with a forward base and no day-ahead position still renders both. Collapsing to one number would hide that the residual is zero, which is a fact a trader needs.

The day-ahead figure is the residual the night auction chose after the register took its share — V9 §20.5.

18.3 What this seat does not do

You cannot validate or register from here. Those are Market Operator acts. You cannot supersede after the first delivery period has started — use the intraday market to move volume mid-horizon. You cannot invent remaining transfer capability; that number lives on the System Operator’s network model and is shown to the Market Operator on /mo/forward/capacity.

19. The Regional desk beside the Bid Desk

The Trading sidebar does not list a Regional room in this release. The domestic desk is Bid Desk. The pool desk at /org/regional is not part of the menu you work from:

Desk Path Market Gate you must not miss
Bid Desk /org/brp/bid-desk Domestic SAWEM The Market Code day-ahead gate
Regional /org/regional SAPP Coordination Centre 09:30 CAT the day before delivery

They are not two views of the same book. A position on the Bid Desk is a South African Trading Period. A position on the Regional desk is a pool product, often in dollars, delivered across a border.

CAT equals SAST, so the clocks agree; the times do not. Missing the domestic gate and missing the pool gate are two different expired submissions.

The Regional desk measures exposure. It does not hedge, and it does not recommend a bid. How membership, rates, paths and the monthly shadow work is V18.

Follow along. Organisation seat. Open TRADING. You should see Market, Bid Desk, Month and Accounts. You should not see Regional.

20. FX publications and the BRP scorecard

The BRP panel calls accepted volume divided by offered volume Acceptance rate. It measures how much of the bid cleared. It is separate from a generator’s price capture benchmark and from the book’s retained-margin ratio. An empty denominator stays unavailable.

FX adapters preserve the published day, publisher and retrieval channel. SARB is the direct reference feed; ECB rates can be fetched through Frankfurter when the source policy permits. The history task labels SARB mirror rates as SARB / Frankfurter. A provider returning the previous business day’s publication does not supply a rate for today.

The application still defaults to mocks. Operations must configure live access and the desk must settle the valuation-date policy before live trading uses these feeds. See V18 currency risk and V21 health.

21. Approvals

Open /org/approvals to review pending decisions and their history. Each request identifies its subject, maker, immutable proposed values and expiry. The checker must be a different active member of the organisation. Approving a changed subject is refused; request a fresh review against the current state. Rejection requires a note. Expired requests cannot be approved.

Automation raises, threshold loosening and kill-switch disarm always require review. A disarm checker cannot be the arming or disarming actor. Manual bids exceeding an organisation’s MW or Rand approval threshold require review before submission. Risk-limit edits follow the organisation’s approval rule. Curve-mark and discount-policy request kinds are reserved for later stages and cannot yet be applied here.

Approval and application occur together. The history records the checker, decision time and application time. Never interpret a pending request as permission to trade.