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_cis the Organisation door on/; traders such astrader_1@webill.network 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:
- You join. You file an accession application. They issue an MPID, two agreements, and an effective date. Until they Activate, you cannot bid.
- You declare what you own. Trading Units, Points of Delivery, standing data. They keep the register the whole market can trust.
- 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.
- 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:
- You read the map. Zones, corridors, how much can actually flow.
- You acknowledge instructions. Dispatch, curtailment, outage, reserve. An instruction you ignore is not “pending” — it is a missed operational order.
- You tell them when the plant changed. Availability revisions and constraint declarations, so they do not dispatch a machine that is already down.
- 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.
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.
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
/moroom — 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
- the accession application and any further information they ask for
- signed Market Participation Agreement and Balancing Agreement
- written notice that the two settlement accounts exist
- Trading Units, Points of Delivery, standing data
- day-ahead submissions and intraday re-declarations
- credit cover (cash into Collateral Reserve, in this console)
- queries against a statement
From the Market Operator you receive
- an MPID and an effective date
- the two agreements, signed by them first
- published prices, schedules, notices
- Default Notices, Credit Cover Increase Notices, Warning Notices
- statements, invoices, self-billing invoices
- accession on the public register (so counterparties can see you exist)
To the System Operator you send
- acknowledgements of instructions
- availability revisions (“the plant is down from 14:00”)
- constraint declarations (“do not dispatch me above X MW”)
- reserve certification requests
- Instructed Energy disputes
- optional event-subscription callback
From the System Operator you receive
- the constrained scheduling model (zones, corridors, headroom)
- dispatch, curtailment, outage, reserve, system-condition instructions
- Instructed Energy traces
- certification decisions (on the SO Registry; you see the result on Standing Data)
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
- 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.
- 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.
- 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.
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.
- Market — may you be here at all? Membership, cover, inbox, register.
- Bid Desk — what are you doing about tomorrow and today?
- Month (the Market Month; the room is titled After Delivery) — what actually happened this month?
- 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).
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.
- 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.
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.
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 |
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}:
- Title: Market Participation Agreement or Balancing Agreement
- Reference · clause
- Signed-by copy when present
- Status badge ISSUED / SIGNED
- Eye button
#brp-agreement-view-{id}— view (view_participation_agreement)
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:
- You cannot Activate yourself.
- You cannot lift a SUSPENDED seat.
- You cannot edit the filed wizard answers (view is read-only). Change standing data and units on their own tabs; change cover on Account/Cover and Accounts.
- You cannot notify the two settlement accounts from this tab.
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 |
- 1Step is a room you can enter in any order.
-
2Name is the label on
#brp-wizard-step-N. - 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:
- Market participant (§2.1(135) — trades in DAM / IDM)
- Balance responsible (§2.1(14) — accountable through balancing)
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.
- Safety margin (R/MWh) — a cushion on your reservation prices
- Price taker (offers at the floor / accept the clearing price)
5.8.4 Step 4 — Security
Panel #brp-wizard-panel-security.
- Guarantee type — required if you are a market participant. Bank guarantee / Letter of credit / Cash (and None if you are not a market participant)
- Guarantee amount (R)
- Use recommended (R …)
(
use_recommended_guarantee) - Warning Limit (R) (§2.1(225))
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.
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:
- Warning Notice — headroom {amount}
{notice.note}- Warning Limit {amount} ({clause}).
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]
- Choose Open replenishment window. The branded dialog opens over the page.
- 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.
- 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.
- 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.
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.
- Heading No BRP registration
- Body: Register as a Balance Responsible Party to receive market notices.
- Link Register →
/org/brp
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 |
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.
8.2.2 Zone tabs and the featured card
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}:
- Zone name; badges Your zone and Provisional when they apply
- Tiles: Export Capability, Import Capability, Net Trading Headroom, Corridors Active
- Sections Corridors / SAPP Interconnectors
- Empties: No active corridors for this zone. / No interconnectors present.
- Isolated: Not represented in any corridor in this model…
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.
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}:
- Electrical node
- Badge added or removed
- … names you as the counterparty, effective {date}.
| 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.
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.
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):
- Idle: Open API Swagger (navy)
- Open: Hide API Swagger (gold)
aria-expanded/aria-controls="org-brp-api-swagger-panel"
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.
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.
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.
- 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.
- 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. - 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). - 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). - 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. - 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.
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.
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.
- 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.
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.
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"]
- DAM submission. Read the closing date and time, then prepare or review each unit’s bid before the gate.
- Publication & energy results. A closed gate does not mean results have been published. The page keeps Awaiting publication until the stored published result arrives.
- 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.
- 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-tabslets 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.
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:
- Trading Unit is still read-only
(
#bid-desk-selected-tuid). There is no form#submission-desk-tuidand no dropdown on this page. You picked the unit on Daily (or in the URL). If you did not, it reads Select a trading unit. - Book dropdown
#bid-desk-book-form/#bid-desk-bookappears only if this BRP balances more than one strategy book. It chooses which kitchen the ladder is built from. It is not on Daily. One book: the control is absent, because there is nothing to choose.
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):
- Three cards in one row
#org-dam-submissions-row— log, draft ladder, last accepted Submission. - Five price curve cards
#submission-curve-editor(only once a Trading Unit is selected). - Attach-a-book empty state, if needed.
- Book ladder — Rebuild, Submit, net-position chart, clips, certainty-equivalent card, hourly table.
- Day-ahead submission (§9.3) — gate clock, rollover banner, seven-day selector, 24-row period table.
- 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”.
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):
- Auto DAM on (the word on is emerald): Auto DAM is on for this BRP — the 03:00 worker will send a draft unless you Submit first. Then Change on Market → Info.
- Auto DAM off (the word off is amber): Auto DAM is off for this BRP — the 03:00 worker will not send. Submit yourself before 10:00, or the Market Operator will roll over. Then the same link.
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 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.
- Midday leftover
Read it: solar leftover peaks at noon. That is the energy the DAM can sell.
- Evening gap
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.neton 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:
- the five-block price curve the Market Operator clears (§12.3.5)
- the day-ahead period grid (§12.3.10)
- a place to type a bid price
- the Bilateral vs market verdict (that card sits around this table when the band exists, and does not edit these rungs)
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):
- F (sky) means the market may move you between Mingen and your declared capacity, and your offer can set the price.
- I (amber) means you will be scheduled at exactly your declared capacity — a commitment, not a ceiling — and you cannot set the price (§9.7.2(2)).
- A / U are reserve available / unavailable.
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.
- OPEN (amber row, amber pill) — the gate is still in the future. Redeclare and Consent are on the chip strip. You may lodge for any hour in Hours rem.
- CLEARING (pale amber pill) — the gate has shut and the result is not published yet. The door will not take another lodge. Wait.
- CLOSED (slate pill) — published, or the publication deadline has passed. This iteration is finished. Pick a later chip if one is still OPEN.
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:
- A mono chip with the hour in SAST — 18:00 SAST. That is the Trading Period this node is about.
- Target Baseline — the contracted megawatt-hours for that hour.
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:
- Deviation MWh against the baseline. A large mono figure (how far the freshest forecast sits from Target Baseline), the word against, then the same contracted MWh again so you can read the gap without looking left. Signed: short is the plant will not make the baseline; long is it will overshoot.
- A carry or redeclare badge.
Carry (slate) — do not patch this hour.
Redeclare (amber) — the desk has an
IdmDecisionthat says a lodge is the cheaper path. Daily’s chip is this same decision, summarised. The three reasons carry can mean, and when redeclare wins, are V9 §5.5. - A short advice sentence
#idm-position-{n}-tip. Hover the sentence (or the figures above it) for the full reason — instruction expected, inside the metering band, or imbalance cheaper than the IDM. “Carry” is one badge and three different facts; the sentence says which.
On the right edge of that card:
- A read-only MWh box
#idm-position-{n}-mwh. You cannot type a new volume here. This is the deviation the decision used, not an editor. Volume is typed in the Re-declare modal. - When the selected iteration is OPEN, a
clickable icon
#idm-position-{n}-redeclare(circular-arrow). When the gate is closed the icon is hidden — you cannot lodge through a shut door.
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.
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).
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 |
- 1Period is the seating. A 12:00 period would be refused: that hour has started.
- 220 is what you can still do. Do not type 40 (that is the gap) and do not type 75 (that is last night).
- 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.
Σ 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-PVselected. 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.
12.4.5 Re-declare and consent
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:
- A Trading Unit is selected.
- This iteration’s gate is OPEN.
- The hour has not started. Iteration 4 (12:00) can still move 13:00 onwards; it cannot move 12:00.
- 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). - 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
- The button
#idm-open-redeclareopens 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. - Opening from a timeline node
#idm-position-{n}-redeclaredoes the same, and pre-fills the trading period for that hour. That is the fastest path when you already know which hour you mean. - If no unit is selected, amber: Pick a Trading Unit before you re-declare. Lodge re-declaration stays disabled.
- Justification
#idm-redeclare-justificationrepeats 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. - You fill the form
#idm-redeclare-form(fields below) and press Lodge re-declaration#idm-redeclare-submit(eventidm_redeclare). - 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-previewstates 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. - The DAM ticket is not torn up. Money for the patch arrives later on Market Month, not on this desk.
- 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.
What Consent does
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.
- Willing (
WILLING) — yes. The Market Operator may reschedule this unit in the remaining auctions. That is the usual setting for a plant that can still move. - Non-willing (
NON_WILLING) — hold my DAM schedule. Stay out of an ordinary re-clear.
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.
When you should press Consent
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.
What happens when you click Consent
- The button
#idm-open-consentopens modal#idm-consent-modal. Heading Rescheduling consent. Caption: A separate control. Changing consent does not silently re-declare volume. - If no unit is selected, amber: Pick a Trading Unit before you change consent. Update consent stays disabled.
- You set
#idm-consent-flagto Willing or Non-willing and press Update consent#idm-consent-submit(eventidm_consent). - 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.
- 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-PVselected. 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 anIdmDecisionis 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:
- the Intra-Day Price (that arrives after the auction)
- the new Target Baseline on a later iteration (that is the revised schedule)
- a kitchen Bid (the book ladder is a different object — §12.4.7)
- Consent (that is a yes/no for the day, with no hour; this table does not list it)
- last night’s DAM Submission (that ticket still stands)
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.
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 |
- 118:00 is the hour you patched — still in iteration 4’s Hours rem. when you sent it.
- 2REDECLARE means a volume patch. Your Consent click did not add a row here.
- 320.000 is what you typed. Not 40 (the gap) and not 60 (Target Baseline).
- 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.
- 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.
- 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(passwordsupersecret), 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:
- The standing order is the forward base — megawatts already promised on a registered physical contract for that hour.
- The extra crates are the day-ahead figure — megawatts the night auction still chose for that hour, after the standing order was taken off.
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.
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
- Register a schedule. That is Deals → Contracts → Register this schedule (§18.1). This page only shows a schedule that is already REGISTERED.
- Validate or skip the Market Operator. You cannot jump a SUBMITTED row to REGISTERED from here.
- Supersede after the first delivery hour has started. Use IDM to move leftover volume mid-horizon. The standing order stays.
- 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. - Rewrite tomorrow’s bid. Submissions still writes the 168-period note. Forward is the layer under that note.
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:
- Did this unit clear?
- How many megawatt-hours, in which hours?
- At what price — yours, or the country’s?
- If the wires then cut you back, does that rewrite the payment?
- Who owes whom — today — before anyone pays a rand?
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.
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:
- Submissions — you write tomorrow’s note (168 hours) and send it before the 10:00 SAST gate on D−1. That is the bid.
- 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.
- 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.
- 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.
- Delivery day — the plant runs. Settlement does not wait for that. The chalkboard was already official yesterday afternoon.
- 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.
- 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.
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.
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:
- Constrained-sales charge (CSC) — you were cut back. Charged at your offer for the megawatt-hours between unconstrained and constrained. A renewable that offered R 0/MWh shows R 0.00 and a sentence, not a silent zero. You keep the energy payment on the original booking.
- Constrained-purchase payment (CPP) — you were lifted. Paid at your offer for the extra megawatt-hours.
- Reserve capacity — standing ready (regulating, instantaneous, ten-minute). A zero still names its cause (nothing contracted, a failed band, a floor price, a performance factor).
- Above-cap — when the price cap bound.
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 constrained-sales charge of R 0.00 against a 15 MWh cut — you were constrained off 15 MWh and charged nothing for it, because the charge is struck at your own offer price. You keep the energy payment on the original 15.
- A reserve payment of zero has four possible causes (nothing contracted, a failed band, a floor price, a performance factor). The line names which.
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 |
- 1Hour is the SAST settlement interval — 18:00 means 18:00–19:00.
- 2Quantity is unconstrained scheduled volume, the EPM quantity.
- 3Price is that hour’s SMP, the same for everyone who cleared.
- 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:
- What did we promise for this hour? (the ticket)
- Did the System Operator tell us to do something else?
- What did the meters actually record?
- Who caused the gap — us, or the traffic officer?
- What do we owe or get paid on that gap?
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.
- If you loaded too few, or too many, that is your forecast.
- If the traffic officer told you to take a different number, that part is their move — priced at your own offer, not as a penalty for missing a promise you were not allowed to keep.
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.
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:
- Submissions — you write tomorrow’s note and send it before 10:00 SAST on D−1.
- 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.
- 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.
- Delivery — the plant runs. The System Operator may instruct you mid-hour. You acknowledge that on Market › Notices, not here.
- Imbalance — the morning after (or as soon as meters and a statement exist): ticket vs instruction vs scale. That is this room.
- 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.
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:
- 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.
- 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.
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 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.
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:
- How is this Billing Period adding up? — published days, energy net, IDM, balancing, the till.
- 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.
13.0.1 What Market Month does — and what it does not
It does two jobs, and only two:
- 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.
- 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.
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.
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).
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]
- Choose the month. A seat without relevant vesting records has no extra card in its normal results.
- 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.
- 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.
- 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.
- 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.
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]
- Review To pay, Still to receive, Transfers pending and Overdue invoices. These cover all months.
- Follow Review payments & receipts to outstanding documents, or Manage balances to the three accounts.
- Open the relevant account history in Statements and choose its month.
- 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.
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.
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.
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.
