DISPATCHLOAD_BNC
DISPATCHLOAD_BNC was discontinued on 30 September 2009. Prior: DISPATCHLOAD_BNC gives binding intra-regional network constraints (BNC) re-run dispatch results for all scheduled generating units. DISPATCHLOAD_BNC has a similar structure to
DISPATCHLOADbut does not repeat input type data (e.g. InitialMW, AGCStatus) since these values are available fromDISPATCHLOAD.
Deprecation Warning
This table is in the HISTORICAL TABLES package, so is likely deprecated.
DISPATCHLOAD_BNC was discontinued on 30 September 2009.
In accordance with the "Arrangements for Managing Risks Associated with Transmission Network Congestion" set of rule changes the Dispatch Binding Network Constraints re-run was discontinued on September 30, 2009.
Source
The occurrences of Over-constrained dispatch (OCD) or binding intra-regional network constraints (BNC) re-runs are ad hoc, with significant dependencies on the configuration or events in the physical power system. Potentially updated every 5 minutes.
DISPATCHLOAD_BNC shows data produced every 5 minutes for all units when they have over-constrained dispatch, with own data being confidential until the next day.
Volume
Rows per day: ~14000
Mb per month: 25% of
DISPATCHLOADThe basis of estimation on the number of rows is on a 25% occurrence rate for BNC runs
Note
A flag exists for each ancillary service type such that a unit trapped or stranded in one or more service type can be immediately identified. The flag is defined as follows:
Flag Name Bit Description Field value Enabled 0 The unit is enabled to provide this ancillary service type. >1 Trapped 1 The unit is enabled to provide this ancillary service type, however the profile for this service type is causing the unit to be trapped in the energy market. 3 Stranded 2 The unit is bid available to provide this ancillary service type, however, the unit is operating in the energy market outside of the profile for this service type and is stranded from providing this service. 4
Tip
1 second, 6 second, 5 minute, 60 second and regulation refer to types of FCAS markets.
Column Schema
DUID
Dispatchable unit identifier
Warning
This column may contain funny characters such as / (slash) or # (hash). This may break hive-style partitioning.
For more information, see the dedicated documentation page.
SQL Type: VARCHAR2(10)
Polars Type: pl.Categorical
This column is mandatory, and a primary key.
Example: W/HOE#2
INTERVENTION
Intervention flag if intervention run
For more information, see the dedicated documentation page.
SQL Type: NUMBER(2,0)
Polars Type: pl.Boolean
This column is mandatory, and a primary key.
SETTLEMENTDATE
End date and time of the dispatch interval
Warning
Despite what the name suggests, this is a datetime, not a date.
SQL Type: DATE
Polars Type: pl.Datetime()
This column is mandatory, and a primary key.
Example: 2026/01/20 00:05:00
RUNNO
Dispatch run no; always 1
This column only ever takes one value: 1
(The SQL type is NUMBER(3,0).)
AEMO marked this column as mandatory, and a primary key. However, since it only ever takes one value, you can ignore it.
CONNECTIONPOINTID
Connection point identifier for DUID
SQL Type: VARCHAR2(12)
Polars Type: pl.Categorical
This column is not mandatory.
DISPATCHMODE
Dispatch mode for fast start plant (0 to 4).
SQL Type: NUMBER(2,0)
Polars Type: pl.Int8
This column is not mandatory.
LASTCHANGED
Last date and time record changed
For more information, see the dedicated documentation page.
SQL Type: DATE
Polars Type: pl.Datetime()
This column is not mandatory.
Example: 2026/01/20 00:05:00
LOWER5MIN
Lower 5 min reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
LOWER5MINFLAGS
Lower 5min status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
LOWER6SEC
Lower 6 sec reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
LOWER6SECFLAGS
Lower 6sec status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
LOWER60SEC
Lower 60 sec reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
LOWER60SECFLAGS
Lower 60sec status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
LOWERREG
Lower Regulation reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
LOWERREGFLAGS
Lower Reg status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
RAISE5MIN
Raise 5 min reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
RAISE5MINFLAGS
Raise 5min status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
RAISE6SEC
Raise 6 sec reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
RAISE6SECFLAGS
Raise 6sec status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
RAISE60SEC
Raise 60 sec reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
RAISE60SECFLAGS
Raise 60sec status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
RAISEREG
Raise Regulation reserve target
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
RAISEREGFLAGS
Raise Reg status flag
SQL Type: NUMBER(3,0)
Polars Type: pl.Boolean
This column is not mandatory.
TOTALCLEARED
Target MW for end of period
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
Code Examples
Polars
Casting is enums, categoricals etc is not essential, but may speed up parsing.
Swapping int for pl.UInt16, pl.Int32 would also speed up parsing. However some of the datatypes are inferred, so they may be wrong.
This code deduplicates for you. Deduplication is normally only required across multiple months.
This code assumes that all columns are present, which may not be true for older files.
import polars as pl
import polars.selectors as cs
# e.g. "2029/03/15 00:05:00"
dt_s_fmt = "%Y/%m/%d %H:%M:%S"
csv_paths = ["SOMEFILE.CSV", "OTHERFILE.CSV"]
lf = (
pl.concat(
[
pl.scan_csv(
csv_path, # must be unzipped beforehand
skip_rows=1, # skip the header
infer_schema=False, # much faster
)
.filter(cs.by_index(0) == "D") # drop the footer
.select(~cs.by_index(range(4))) # drop metadata columns
for csv_path in csv_paths
],
how="diagonal_relaxed",
)
.with_columns(
pl.col("SETTLEMENTDATE", "LASTCHANGED").str.strptime(pl.Datetime, dt_s_fmt),
)
# Polars can't cast string straight to bool. Need to go via something else.
.cast(
{
"INTERVENTION": pl.UInt8,
"LOWER5MINFLAGS": pl.UInt8,
"LOWER6SECFLAGS": pl.UInt8,
"LOWER60SECFLAGS": pl.UInt8,
"LOWERREGFLAGS": pl.UInt8,
"RAISE5MINFLAGS": pl.UInt8,
"RAISE6SECFLAGS": pl.UInt8,
"RAISE60SECFLAGS": pl.UInt8,
"RAISEREGFLAGS": pl.UInt8,
}
)
.cast(
{
"DUID": pl.Categorical,
"INTERVENTION": pl.Boolean,
"RUNNO": pl.Enum(["1"]),
"CONNECTIONPOINTID": pl.Categorical,
"DISPATCHMODE": int, # or pl.Int8
"LOWER5MIN": pl.Float64,
"LOWER5MINFLAGS": pl.Boolean,
"LOWER6SEC": pl.Float64,
"LOWER6SECFLAGS": pl.Boolean,
"LOWER60SEC": pl.Float64,
"LOWER60SECFLAGS": pl.Boolean,
"LOWERREG": pl.Float64,
"LOWERREGFLAGS": pl.Boolean,
"RAISE5MIN": pl.Float64,
"RAISE5MINFLAGS": pl.Boolean,
"RAISE6SEC": pl.Float64,
"RAISE6SECFLAGS": pl.Boolean,
"RAISE60SEC": pl.Float64,
"RAISE60SECFLAGS": pl.Boolean,
"RAISEREG": pl.Float64,
"RAISEREGFLAGS": pl.Boolean,
"TOTALCLEARED": pl.Float64,
}
)
# Drop deprecated/unused columns
.drop("RUNNO")
# Deduplicate
# We want one row per ['DUID', 'INTERVENTION', 'RUNNO', 'SETTLEMENTDATE']
# Tie-breaker: greatest value of ['LASTCHANGED']
.sort(["LASTCHANGED"], descending=False)
.unique(subset=["DUID", "INTERVENTION", "RUNNO", "SETTLEMENTDATE"], keep="last")
)
Nemosis
This table is not yet available in Nemosis.
Availability
AEMO's documentation states that this table's visibility is "Private & Public Next-Day". However, it is not available in the public monthly MMSDM archive. AEMO probably call this public because it is available to all market participants over private FTP.
There is a chance that is is still public to non-participants. It may only be available for some months; or (rarely) it may be available in a non-standard location.
Deduplication and PDR Loader Configuration
The primary keys are:
The transaction type is "insert", which means that you will usually not see duplicate data. If you do, you can deduplicate based on the primary keys, without sorting first. Rows from different files with the same primary keys should have the same values.
| Report Name | Report Subtype | Version |
|---|---|---|
| DISPATCHBNC | UNITSOLUTION | 1 |
| DISPATCHBNC | UNIT_SOLUTION | 1 |
This means that the CSV files start with metadata columns:
or
Indexes
There is more than one index.
Index 1:
Index 2:
Links
This page as JSON (schema documented here, but may change)
Download a JSON Schema specification for this table.
Official AEMO schema documentation
Other Information
Package: HISTORICAL TABLES