GENUNITS
GENUNITS shows Genset details for each physical unit with the relevant station.
GENUNITS is a public table, and is available to all participants.
Source
GENUNITS updates whenever plant details change.
Column Schema
GENSETID
Physical Unit identifier
SQL Type: VARCHAR2(20)
Polars Type: pl.Categorical
This column is mandatory, and a primary key.
Examples:
ADPBA1ADPBA1GADPBA1LADPMH1ADPPV1ADPPV2ADPPV3AGLHALAGLNOW1AGLSITA1
AGCFLAG
AGC Available flag
SQL Type: VARCHAR2(2)
Polars Type: pl.Boolean
This column is not mandatory.
AEMO's documentation says this is a string type,
even though it is logically a binary value.
You may want to map letters to a boolean with {'Y': 1, 'N': 0}.
CDINDICATOR
Centrally dispatched Indicator
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
Examples:
NY
CO2E_DATA_SOURCE
An indicator as to the source of the emission factor used in the calculation of the index. The applicable values for this field would be NTNDP which indicates the emission factor is quoted from the National Transmission Network Development Plan or Estimated to indicate the emission factor has been calculated using an internal AEMO procedure based upon the Department of Climate Change and Energy Efficiency NGA factors
SQL Type: VARCHAR2(20)
Polars Type: str
This column is not mandatory.
Examples:
Estimate - NGA 2011Estimate - NGA 2012Estimate - NGA 2014Estimate - NGA 2015Estimate - NGA 2016Estimate - OtherExcluded NMNSISP 2018ISP 2020ISP2020
CO2E_EMISSIONS_FACTOR
The emissions factor for the generating unit, as calculated by Settlements staff members
SQL Type: NUMBER(18,8)
Polars Type: pl.Float64
This column is not mandatory.
Examples:
0.01561827, 0, 1.64871738
CO2E_ENERGY_SOURCE
The energy source for the generating unit, as used in the calculation of the CO2-e emissions factor. Distinct from the Energy Source for a generating unit published as part of the Registration Master List
SQL Type: VARCHAR2(100)
Polars Type: str
This column is not mandatory.
Examples:
BagasseBattery StorageBiomass and industrial materialsBlack coalBrown coalCoal Seam MethaneCoal mine waste gasCoal seam methaneDiesel oilEthane
DISPATCHTYPE
Type NET/NET identifies if DUID is a Scheduled and GROSS/NET identifies if DUID is either Semi-Scheduled or Non-Scheduled.
Warning
The values here differ from the same column in other tables.
The SQL type is VARCHAR2(20).
This is actually a factor/enum, with values:
-
GROSS/NET -
NET/NET
This column is not mandatory.
GENSETNAME
Genset name
SQL Type: VARCHAR2(40)
Polars Type: str
This column is not mandatory.
GENSETTYPE
Identifies LOAD, GENERATOR or BIDIRECTIONAL. This will likely expand to more generic models as new technology types are integrated into the NEM.
SQL Type: VARCHAR2(15)
Polars Type: pl.Categorical
This column is not mandatory.
Examples:
BIDIRECTIONALGENERATORLOAD
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: 2005/11/23 09:55:53
MAXCAPACITY
Maximum capacity
SQL Type: NUMBER(6,0)
Polars Type: pl.Int32
This column is not mandatory.
Examples:
1, 3756
MAXSTORAGECAPACITY
The rated storage capacity (MWh), information only
SQL Type: NUMBER(15,5)
Polars Type: pl.Float64
This column is not mandatory.
Examples:
4.8, 2, 1997
MINCAPACITY
Minimum capacity only for load side of BDU, otherwise 0 (MW)
SQL Type: NUMBER(6,0)
Polars Type: pl.Int32
This column is not mandatory.
Examples:
2, 500
MKTGENERATORIND
Market Generator Indicator Flag
SQL Type: VARCHAR2(10)
Polars Type: pl.Boolean
This column is not mandatory.
AEMO's documentation says this is a string type,
even though it is logically a binary value.
You may want to map letters to a boolean with {'Y': 1, 'N': 0}.
NORMALSTATUS
On / Off for load
Warning
Despite AEMO's description of On/Off, this actually takes values Y and N. This differs from columns with the same name in other tables (which use ON and OFF).
SQL Type: VARCHAR2(10)
Polars Type: pl.Boolean
This column is not mandatory.
AEMO's documentation says this is a string type,
even though it is logically a binary value.
You may want to map letters to a boolean with {'Y': 1, 'N': 0}.
REGISTEREDCAPACITY
Registered capacity
SQL Type: NUMBER(6,0)
Polars Type: pl.Int32
This column is not mandatory.
Examples:
1, 3756
REGISTEREDMINCAPACITY
Registered minimum capacity only for load side of BDU, otherwise 0 (MW)
SQL Type: NUMBER(6,0)
Polars Type: pl.Int32
This column is not mandatory.
Examples:
2, 755
STARTTYPE
Fast / Slow / Not Dispatched
SQL Type: VARCHAR2(20)
Polars Type: pl.Categorical
This column is not mandatory.
Examples:
FASTSLOW
STATIONID
Station Identifier
For more information, see the dedicated documentation page.
SQL Type: VARCHAR2(10)
Polars Type: pl.Categorical
This column is not mandatory.
VOLTLEVEL
Voltage level
SQL Type: NUMBER(6,0)
Polars Type: pl.Int32
This column is not mandatory.
Examples:
1, 500
SETLOSSFACTOR
Not used
SQL Type: NUMBER(16,6)
Polars Type: pl.Float64
This column is unused.
SPINNINGFLAG
Not used
SQL Type: VARCHAR2(2)
Polars Type: pl.Categorical
This column is unused.
Examples:
NY
New Data Timing
When plant details change
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("AGCFLAG").replace({"Y": 1, "N": 0}),
pl.col("MKTGENERATORIND").replace({"Y": 1, "N": 0}),
pl.col("NORMALSTATUS").replace({"Y": 1, "N": 0}),
)
.with_columns(
pl.col("LASTCHANGED").str.strptime(pl.Datetime, dt_s_fmt),
)
# Polars can't cast string straight to bool. Need to go via something else.
.cast({"AGCFLAG": pl.UInt8, "MKTGENERATORIND": pl.UInt8, "NORMALSTATUS": pl.UInt8})
.cast(
{
"GENSETID": pl.Categorical,
"AGCFLAG": pl.Boolean,
"CDINDICATOR": str,
"CO2E_DATA_SOURCE": str,
"CO2E_EMISSIONS_FACTOR": pl.Float64,
"CO2E_ENERGY_SOURCE": str,
"DISPATCHTYPE": pl.Enum(["GROSS/NET", "NET/NET"]),
"GENSETNAME": str,
"GENSETTYPE": pl.Categorical,
"MAXCAPACITY": int, # or pl.Int32
"MAXSTORAGECAPACITY": pl.Float64,
"MINCAPACITY": int, # or pl.Int32
"MKTGENERATORIND": pl.Boolean,
"NORMALSTATUS": pl.Boolean,
"REGISTEREDCAPACITY": int, # or pl.Int32
"REGISTEREDMINCAPACITY": int, # or pl.Int32
"STARTTYPE": pl.Categorical,
"STATIONID": pl.Categorical,
"VOLTLEVEL": int, # or pl.Int32
"SETLOSSFACTOR": pl.Float64,
"SPINNINGFLAG": pl.Categorical,
}
)
# Drop deprecated/unused columns
.drop("SETLOSSFACTOR", "SPINNINGFLAG")
# Deduplicate
# We want one row per ['GENSETID']
# Tie-breaker: greatest value of ['LASTCHANGED']
.sort(["LASTCHANGED"], descending=False)
.unique(subset=["GENSETID"], keep="last")
)
Nemosis
This table is not yet available in Nemosis.
Example File
From PUBLIC_ARCHIVE_GENUNITS_FILE01_202609010000.zip
| GENSETID | STATIONID | SETLOSSFACTOR | CDINDICATOR | AGCFLAG | SPINNINGFLAG | VOLTLEVEL | REGISTEREDCAPACITY | DISPATCHTYPE | STARTTYPE | MKTGENERATORIND | NORMALSTATUS | MAXCAPACITY | GENSETTYPE | GENSETNAME | LASTCHANGED | CO2E_EMISSIONS_FACTOR | CO2E_ENERGY_SOURCE | CO2E_DATA_SOURCE | MINCAPACITY | REGISTEREDMINCAPACITY | MAXSTORAGECAPACITY |
| CALL_A_1 | Y | N | Y | 132 | 30 | GROSS/NET | SLOW | Y | N | 30 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| CALL_A_3 | Y | N | Y | 132 | 30 | GROSS/NET | SLOW | Y | N | 30 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| MRIDGE | Y | N | N | 275 | 56 | GROSS/NET | FAST | Y | N | 56 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_1 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_2 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_3 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_4 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_5 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_A_6 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| SWAN_B_1 | Y | Y | Y | 275 | 125 | GROSS/NET | SLOW | Y | N | 125 | GENERATOR | 2012/06/08 12:35:44 | 1.091 | Black coal | NTNDP 2011 | ||||||
| SWAN_B_2 | Y | Y | Y | 275 | 125 | GROSS/NET | SLOW | Y | N | 125 | GENERATOR | 2012/06/08 12:35:44 | 1.091 | Black coal | NTNDP 2011 | ||||||
| ... |
| C | SETP.WORLD | DVD_GENUNITS | AEMO | PUBLIC | 2026/10/09 | 15:36:59 | 001791524219360 | MONTHLY_ARCHIVE | 001791524219360 | ||||||||||||||||
| I | PARTICIPANT_REGISTRATION | GENUNITS | 3 | GENSETID | STATIONID | SETLOSSFACTOR | CDINDICATOR | AGCFLAG | SPINNINGFLAG | VOLTLEVEL | REGISTEREDCAPACITY | DISPATCHTYPE | STARTTYPE | MKTGENERATORIND | NORMALSTATUS | MAXCAPACITY | GENSETTYPE | GENSETNAME | LASTCHANGED | CO2E_EMISSIONS_FACTOR | CO2E_ENERGY_SOURCE | CO2E_DATA_SOURCE | MINCAPACITY | REGISTEREDMINCAPACITY | MAXSTORAGECAPACITY |
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | CALL_A_1 | Y | N | Y | 132 | 30 | GROSS/NET | SLOW | Y | N | 30 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | CALL_A_3 | Y | N | Y | 132 | 30 | GROSS/NET | SLOW | Y | N | 30 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | MRIDGE | Y | N | N | 275 | 56 | GROSS/NET | FAST | Y | N | 56 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_1 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_2 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_3 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_4 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_5 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_A_6 | Y | Y | Y | 110 | 68 | GROSS/NET | SLOW | Y | N | 68 | GENERATOR | 2008/12/10 09:32:21 | |||||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_B_1 | Y | Y | Y | 275 | 125 | GROSS/NET | SLOW | Y | N | 125 | GENERATOR | 2012/06/08 12:35:44 | 1.091 | Black coal | NTNDP 2011 | ||||||
| D | PARTICIPANT_REGISTRATION | GENUNITS | 3 | SWAN_B_2 | Y | Y | Y | 275 | 125 | GROSS/NET | SLOW | Y | N | 125 | GENERATOR | 2012/06/08 12:35:44 | 1.091 | Black coal | NTNDP 2011 | ||||||
| ... | |||||||||||||||||||||||||
| C | END OF REPORT | 985 |
GENSETID,STATIONID,SETLOSSFACTOR,CDINDICATOR,AGCFLAG,SPINNINGFLAG,VOLTLEVEL,REGISTEREDCAPACITY,DISPATCHTYPE,STARTTYPE,MKTGENERATORIND,NORMALSTATUS,MAXCAPACITY,GENSETTYPE,GENSETNAME,LASTCHANGED,CO2E_EMISSIONS_FACTOR,CO2E_ENERGY_SOURCE,CO2E_DATA_SOURCE,MINCAPACITY,REGISTEREDMINCAPACITY,MAXSTORAGECAPACITY
CALL_A_1,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
CALL_A_3,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
MRIDGE,,,Y,N,N,275,56,GROSS/NET,FAST,Y,N,56,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_1,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_2,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_3,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_4,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_5,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_6,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_B_1,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
SWAN_B_2,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
...
C,SETP.WORLD,DVD_GENUNITS,AEMO,PUBLIC,2026/10/09,15:36:59,001791524219360,MONTHLY_ARCHIVE,001791524219360
I,PARTICIPANT_REGISTRATION,GENUNITS,3,GENSETID,STATIONID,SETLOSSFACTOR,CDINDICATOR,AGCFLAG,SPINNINGFLAG,VOLTLEVEL,REGISTEREDCAPACITY,DISPATCHTYPE,STARTTYPE,MKTGENERATORIND,NORMALSTATUS,MAXCAPACITY,GENSETTYPE,GENSETNAME,LASTCHANGED,CO2E_EMISSIONS_FACTOR,CO2E_ENERGY_SOURCE,CO2E_DATA_SOURCE,MINCAPACITY,REGISTEREDMINCAPACITY,MAXSTORAGECAPACITY
D,PARTICIPANT_REGISTRATION,GENUNITS,3,CALL_A_1,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,CALL_A_3,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,MRIDGE,,,Y,N,N,275,56,GROSS/NET,FAST,Y,N,56,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_1,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_2,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_3,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_4,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_5,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_6,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_B_1,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_B_2,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
...
C,"END OF REPORT",985
Availability
Visibility: Public
This table is in the public monthly MMSDM archive.
I have collated the list of all those files into one place, in this CSV metadata file. (Columns year, month, url, compressed_size in bytes).
The earliest available data is month 1 of 2015. The most recent available data is month 9 of 2026.
Every month in between has a file. (No gaps.)
Data Size
Each year of data is approximately 183 KB when zipped, 2 MB as unzipped CSV.
Deduplication and PDR Loader Configuration
The primary keys are:
The transaction type is "INSERT-UPDATE", which means that you will likely see duplicate data with different values.
You should deduplicate by sorting based on LASTCHANGED, within each group of primary keys.
| Report Name | Report Subtype | Version |
|---|---|---|
| PARTICIPANT_REGISTRATION | GENUNITS | 2 |
| PARTICIPANT_REGISTRATION | GENUNITS | 3 |
This means that the CSV files start with metadata columns:
or
ROW_FILTER_TYPE is LASTCHANGED
Indexes
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: PARTICIPANT_REGISTRATION