Skip to content

GDINSTRUCT

GDINSTRUCT shows all manually issued dispatch instructions for a dispatchable unit. Ancillary Service instructions are to enable and to disable (i.e. 2 separate instructions) a service. Non-conforming units are also instructed via this facility. However, this facility is not the same as the market notice.

Source

GDINSTRUCT updates on issue of an instruction by AEMO, with visibility restricted on the day of issue to the relevant participant. All participants have previous days' data available.

Column Schema

ID

Instruction ID (sequential number)

SQL Type: NUMBER(22,0) Polars Type: pl.Int128

This column is mandatory, and a primary key.

Examples: 786809, 786811

AUTHORISEDBY

User authorised by

SQL Type: VARCHAR2(15) Polars Type: str

This column is not mandatory.

Example: JDUQUE

AUTHORISEDDATE

Authorised date

Warning

Despite what the name suggests, this is a datetime, not a date.

SQL Type: DATE Polars Type: pl.Datetime()

This column is not mandatory.

Example: 2026/07/01 03:05:00

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 not mandatory.

Examples:

  • PPCCGT
  • W/HOE#2

INSTLEVEL

Instruction target level

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 0, 42

INSTRUCTIONCLASSID

Instruction class

SQL Type: VARCHAR2(10) Polars Type: str

This column is not mandatory.

Example: NEMMCO

INSTRUCTIONSUBTYPEID

Instruction sub type

SQL Type: VARCHAR2(10) Polars Type: str

This column is not mandatory.

Examples:

  • OFFSYNCOMP
  • ONSYNCOMP

INSTRUCTIONTYPEID

Instruction type

SQL Type: VARCHAR2(10) Polars Type: str

This column is not mandatory.

Example: AS_RP

ISSUEDTIME

Date / time issued

SQL Type: DATE Polars Type: pl.Datetime()

This column is not mandatory.

Example: 2026/07/01 03:05:00

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/07/01 02:56:48

PARTICIPANTID

Unique participant identifier

For more information, see the dedicated documentation page.

SQL Type: VARCHAR2(10) Polars Type: pl.Categorical

This column is not mandatory.

Example: NPSAIL

REASON

Reason

SQL Type: VARCHAR2(64) Polars Type: str

This column is not mandatory.

Example: Required for AS_RP_Voltage Control

REGIONID

Region Identifier

For more information, see the dedicated documentation page.

The SQL type is VARCHAR2(10). This is actually a factor/enum, with values:

  • QLD1

  • VIC1

  • TAS1

  • NSW1

  • SA1

  • SNOWY1

This column is not mandatory.

STATIONID

Station Identifier

For more information, see the dedicated documentation page.

SQL Type: VARCHAR2(10) Polars Type: pl.Categorical

This column is not mandatory.

Example: NPPPPS

TARGETTIME

Date / time instruction to apply

SQL Type: DATE Polars Type: pl.Datetime()

This column is not mandatory.

Example: 2026/06/30 22:35:00

New Data Timing

On instruction issued by AEMO

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(
            "AUTHORISEDDATE", "ISSUEDTIME", "LASTCHANGED", "TARGETTIME"
        ).str.strptime(pl.Datetime, dt_s_fmt),
    )
    .cast(
        {
            "ID": int,  # or pl.Int128
            "AUTHORISEDBY": str,
            "DUID": pl.Categorical,
            "INSTLEVEL": int,  # or pl.Int32
            "INSTRUCTIONCLASSID": str,
            "INSTRUCTIONSUBTYPEID": str,
            "INSTRUCTIONTYPEID": str,
            "PARTICIPANTID": pl.Categorical,
            "REASON": str,
            "REGIONID": pl.Enum(["QLD1", "VIC1", "TAS1", "NSW1", "SA1", "SNOWY1"]),
            "STATIONID": pl.Categorical,
        }
    )
    # Deduplicate
    # We want one row per ['ID']
    # Tie-breaker: greatest value of ['LASTCHANGED']
    .sort(["LASTCHANGED"], descending=False)
    .unique(subset=["ID"], keep="last")
)

Nemosis

This table is not yet available in Nemosis.

Example File

From PUBLIC_ARCHIVE_GDINSTRUCT_FILE01_202607010000.zip

DUIDSTATIONIDREGIONIDIDINSTRUCTIONTYPEIDINSTRUCTIONSUBTYPEIDINSTRUCTIONCLASSIDREASONINSTLEVELAUTHORISEDDATEAUTHORISEDBYPARTICIPANTIDISSUEDTIMETARGETTIMELASTCHANGED
PPCCGTNPPPPSSA1786809AS_RPONSYNCOMPNEMMCORequired for AS_RP_Voltage Control422026/07/01 03:05:00JDUQUENPSAIL2026/07/01 03:05:002026/06/30 22:35:002026/07/01 02:56:48
PPCCGTNPPPPSSA1786811AS_RPOFFSYNCOMPNEMMCORequired for AS_RP_Voltage Control02026/07/01 03:05:00JDUQUENPSAIL2026/07/01 03:05:002026/06/30 23:59:002026/07/01 02:57:20

CSETP.WORLDDVD_GDINSTRUCTAEMOPUBLIC2026/08/0812:15:59001786155359802MONTHLY_ARCHIVE001786155359802
IGD_INSTRUCTGDINSTRUCT1DUIDSTATIONIDREGIONIDIDINSTRUCTIONTYPEIDINSTRUCTIONSUBTYPEIDINSTRUCTIONCLASSIDREASONINSTLEVELAUTHORISEDDATEAUTHORISEDBYPARTICIPANTIDISSUEDTIMETARGETTIMELASTCHANGED
DGD_INSTRUCTGDINSTRUCT1PPCCGTNPPPPSSA1786809AS_RPONSYNCOMPNEMMCORequired for AS_RP_Voltage Control422026/07/01 03:05:00JDUQUENPSAIL2026/07/01 03:05:002026/06/30 22:35:002026/07/01 02:56:48
DGD_INSTRUCTGDINSTRUCT1PPCCGTNPPPPSSA1786811AS_RPOFFSYNCOMPNEMMCORequired for AS_RP_Voltage Control02026/07/01 03:05:00JDUQUENPSAIL2026/07/01 03:05:002026/06/30 23:59:002026/07/01 02:57:20
CEND OF REPORT5

DUID,STATIONID,REGIONID,ID,INSTRUCTIONTYPEID,INSTRUCTIONSUBTYPEID,INSTRUCTIONCLASSID,REASON,INSTLEVEL,AUTHORISEDDATE,AUTHORISEDBY,PARTICIPANTID,ISSUEDTIME,TARGETTIME,LASTCHANGED
PPCCGT,NPPPPS,SA1,786809,AS_RP,ONSYNCOMP,NEMMCO,"Required for AS_RP_Voltage Control",42,"2026/07/01 03:05:00",JDUQUE,NPSAIL,"2026/07/01 03:05:00","2026/06/30 22:35:00","2026/07/01 02:56:48"
PPCCGT,NPPPPS,SA1,786811,AS_RP,OFFSYNCOMP,NEMMCO,"Required for AS_RP_Voltage Control",0,"2026/07/01 03:05:00",JDUQUE,NPSAIL,"2026/07/01 03:05:00","2026/06/30 23:59:00","2026/07/01 02:57:20"
C,SETP.WORLD,DVD_GDINSTRUCT,AEMO,PUBLIC,2026/08/08,12:15:59,001786155359802,MONTHLY_ARCHIVE,001786155359802
I,GD_INSTRUCT,GDINSTRUCT,1,DUID,STATIONID,REGIONID,ID,INSTRUCTIONTYPEID,INSTRUCTIONSUBTYPEID,INSTRUCTIONCLASSID,REASON,INSTLEVEL,AUTHORISEDDATE,AUTHORISEDBY,PARTICIPANTID,ISSUEDTIME,TARGETTIME,LASTCHANGED
D,GD_INSTRUCT,GDINSTRUCT,1,PPCCGT,NPPPPS,SA1,786809,AS_RP,ONSYNCOMP,NEMMCO,"Required for AS_RP_Voltage Control",42,"2026/07/01 03:05:00",JDUQUE,NPSAIL,"2026/07/01 03:05:00","2026/06/30 22:35:00","2026/07/01 02:56:48"
D,GD_INSTRUCT,GDINSTRUCT,1,PPCCGT,NPPPPS,SA1,786811,AS_RP,OFFSYNCOMP,NEMMCO,"Required for AS_RP_Voltage Control",0,"2026/07/01 03:05:00",JDUQUE,NPSAIL,"2026/07/01 03:05:00","2026/06/30 23:59:00","2026/07/01 02:57:20"
C,"END OF REPORT",5

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 7 of 2026.

Warning

There are some months with no files.

Data Size

Each year of data is approximately 7 KB when zipped, 67 KB 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.

PDR Loader configuration is:

Report Name Report Subtype Version
GD_INSTRUCT GDINSTRUCT 1

This means that the CSV files start with metadata columns:

I,GD_INSTRUCT,GDINSTRUCT,1,...
D,GD_INSTRUCT,GDINSTRUCT,1,...

ROW_FILTER_TYPE is LASTCHANGED

Indexes

There is more than one index.

Index 1:

Index 2:

Index 3:

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: GD_INSTRUCT