MAS_CP_CHANGE
MAS_CP_CHANGE records pending changes to the current MAS configuration.
Deprecation Warning
This table is in the HISTORICAL TABLES package, so is likely deprecated.
Obsolete; Replaced by MSATS
Source
MAS_CP_CHANGE updates daily with each MAS export.
Note
Expiry date: When the Expiry date on a change record is reached, the change record is deleted.
Meter Read Date: only used in specific circumstances. For more details, refer to MAS documentation. The meter read date is not cleared if it becomes unusable (e.g. due to change of Metering Type or the passage of time).
Column Schema
NMI
National Metering Identifier
SQL Type: VARCHAR2(10)
Polars Type: str
This column is mandatory, and a primary key.
AGGREGATE_DATA
Aggregate data Flag (YIN)
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
AVERAGE_DAILY_LOAD_KWH
Average Daily load in KWh
SQL Type: NUMBER(8,0)
Polars Type: pl.Int32
This column is not mandatory.
CITY_SUBURB
Connection point City/Suburb
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
CP_DETAIL_1
Connection point detail 1
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
CP_DETAIL_2
Connection point detail 2
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
CP_NAME
Connection point name
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
CP_NEW_SECURITY_CODE
New Security Code
SQL Type: VARCHAR2(4)
Polars Type: str
This column is not mandatory.
CP_OLD_SECURITY_CODE
Old Security Code
SQL Type: VARCHAR2(4)
Polars Type: str
This column is not mandatory.
CREATE_DATE
Set by the system with today's date when the change record is created.
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/01/20 00:05:00
CURRENT_CHANGE_DATE
Current change 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/01/20 00:05:00
DISTRIBUTION_LOSS
Distribution loss factors
SQL Type: NUMBER(5,4)
Polars Type: pl.Float64
This column is not mandatory.
EXPIRY_DATE
Set by the system (and cannot be changed).
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/01/20 00:05:00
INITIAL_CHANGE_DATE
Initial change 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/01/20 00:05:00
JURISDICTION
Area; for application of rules
SQL Type: VARCHAR2(3)
Polars Type: str
This column is not mandatory.
LASTCHANGED
Last changed date.
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
METER_READ_DATE
Date of meter reading
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/01/20 00:05:00
METERING_TYPE
Type of metering installation (e.g. BASIC, MRIM, COMMS)
SQL Type: VARCHAR2(9)
Polars Type: pl.Categorical
This column is not mandatory.
NEW_FINANCIAL_PARTICIPANT
New FRMP
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_FRMP_OK
New FRMP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_FRMP_TEXT
New FRMP text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NEW_LNSP_OK
New LNSP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_LOCAL_NETWORK_PROVIDER
New Local Network Provider
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_LOCAL_RETAILER
New Local Retailer
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_LR_OK
New LR approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_LR_TEXT
New LR text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NEW_LSNP_TEXT
New LNSP text field (LNSP misspelt in name)
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NEW_MDA_OK
New MDA approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_MDA_TEXT
New MDA text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NEW_METERING_DATA_AGENT
New Metering Data Agent
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_RESPONSIBLE_PERSON
New Responsible Person
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_RETAILER_OF_LAST_RESORT
New Retailer of Last Resort
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
NEW_ROLR_OK
New ROLR approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_ROLR_TEXT
New ROLR text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NEW_RP_OK
New RP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
NEW_RP_TEXT
New RP text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
NMI_CLASS
Class of National Metering Identifier to allow for different business rules to apply
SQL Type: VARCHAR2(9)
Polars Type: str
This column is not mandatory.
OLD_FINANCIAL_PARTICIPANT
Old FRMP
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_FRMP_OK
Old FRMP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_FRMP_TEXT
Old FRMP text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
OLD_LNSP_OK
Old LNSP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_LOCAL_NETWORK_PROVIDER
Old Local Network Provider
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_LOCAL_RETAILER
Old Local Retailer
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_LR_OK
Old LR approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_LR_TEXT
Old LR text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
OLD_LSNP_TEXT
Old LNSP text field (LNSP misspelt in name)
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
OLD_MDA_OK
Old MDA approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_MDA_TEXT
Old MDA text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
OLD_METERING_DATA_AGENT
Old Metering Data Agent
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_RESPONSIBLE_PERSON
Old Responsible Person
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_RETAILER_OF_LAST_RESORT
Old Retailer of Last Resort
SQL Type: VARCHAR2(10)
Polars Type: str
This column is not mandatory.
OLD_ROLR_OK
Old ROLR approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_ROLR_TEXT
Old ROLR text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
OLD_RP_OK
Old RP approval flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
OLD_RP_TEXT
Old RP text field
SQL Type: VARCHAR2(30)
Polars Type: str
This column is not mandatory.
POST_CODE
Connection point postcode
SQL Type: VARCHAR2(4)
Polars Type: str
This column is not mandatory.
PRUDENTIAL_OK
Prudential check flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
STATE
State of Australia
SQL Type: VARCHAR2(3)
Polars Type: str
This column is not mandatory.
STATUS_FLAG
Active/Inactive flag
SQL Type: VARCHAR2(1)
Polars Type: pl.Boolean
This column is not mandatory.
TX_NODE
Connection point TNI
SQL Type: VARCHAR2(4)
Polars Type: str
This column is not mandatory.
New Data Timing
Daily
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(
"CREATE_DATE",
"CURRENT_CHANGE_DATE",
"EXPIRY_DATE",
"INITIAL_CHANGE_DATE",
"LASTCHANGED",
"METER_READ_DATE",
).str.strptime(pl.Datetime, dt_s_fmt),
)
# Polars can't cast string straight to bool. Need to go via something else.
.cast(
{
"AGGREGATE_DATA": pl.UInt8,
"NEW_FRMP_OK": pl.UInt8,
"NEW_LNSP_OK": pl.UInt8,
"NEW_LR_OK": pl.UInt8,
"NEW_MDA_OK": pl.UInt8,
"NEW_ROLR_OK": pl.UInt8,
"NEW_RP_OK": pl.UInt8,
"OLD_FRMP_OK": pl.UInt8,
"OLD_LNSP_OK": pl.UInt8,
"OLD_LR_OK": pl.UInt8,
"OLD_MDA_OK": pl.UInt8,
"OLD_ROLR_OK": pl.UInt8,
"OLD_RP_OK": pl.UInt8,
"PRUDENTIAL_OK": pl.UInt8,
"STATUS_FLAG": pl.UInt8,
}
)
.cast(
{
"NMI": str,
"AGGREGATE_DATA": pl.Boolean,
"AVERAGE_DAILY_LOAD_KWH": int, # or pl.Int32
"CITY_SUBURB": str,
"CP_DETAIL_1": str,
"CP_DETAIL_2": str,
"CP_NAME": str,
"CP_NEW_SECURITY_CODE": str,
"CP_OLD_SECURITY_CODE": str,
"DISTRIBUTION_LOSS": pl.Float64,
"JURISDICTION": str,
"METERING_TYPE": pl.Categorical,
"NEW_FINANCIAL_PARTICIPANT": str,
"NEW_FRMP_OK": pl.Boolean,
"NEW_FRMP_TEXT": str,
"NEW_LNSP_OK": pl.Boolean,
"NEW_LOCAL_NETWORK_PROVIDER": str,
"NEW_LOCAL_RETAILER": str,
"NEW_LR_OK": pl.Boolean,
"NEW_LR_TEXT": str,
"NEW_LSNP_TEXT": str,
"NEW_MDA_OK": pl.Boolean,
"NEW_MDA_TEXT": str,
"NEW_METERING_DATA_AGENT": str,
"NEW_RESPONSIBLE_PERSON": str,
"NEW_RETAILER_OF_LAST_RESORT": str,
"NEW_ROLR_OK": pl.Boolean,
"NEW_ROLR_TEXT": str,
"NEW_RP_OK": pl.Boolean,
"NEW_RP_TEXT": str,
"NMI_CLASS": str,
"OLD_FINANCIAL_PARTICIPANT": str,
"OLD_FRMP_OK": pl.Boolean,
"OLD_FRMP_TEXT": str,
"OLD_LNSP_OK": pl.Boolean,
"OLD_LOCAL_NETWORK_PROVIDER": str,
"OLD_LOCAL_RETAILER": str,
"OLD_LR_OK": pl.Boolean,
"OLD_LR_TEXT": str,
"OLD_LSNP_TEXT": str,
"OLD_MDA_OK": pl.Boolean,
"OLD_MDA_TEXT": str,
"OLD_METERING_DATA_AGENT": str,
"OLD_RESPONSIBLE_PERSON": str,
"OLD_RETAILER_OF_LAST_RESORT": str,
"OLD_ROLR_OK": pl.Boolean,
"OLD_ROLR_TEXT": str,
"OLD_RP_OK": pl.Boolean,
"OLD_RP_TEXT": str,
"POST_CODE": str,
"PRUDENTIAL_OK": pl.Boolean,
"STATE": str,
"STATUS_FLAG": pl.Boolean,
"TX_NODE": str,
}
)
# Deduplicate
# We want one row per ['NMI']
# Tie-breaker: greatest value of ['LASTCHANGED']
.sort(["LASTCHANGED"], descending=False)
.unique(subset=["NMI"], keep="last")
)
Nemosis
This table is not yet available in Nemosis.
Availability
Visibility: Private
This table is not available in the public monthly MMSDM archive. Is is only available to registered market participants over FTP inside a VPN.
Deduplication and PDR Loader Configuration
The primary keys are:
PDR Loader configuration does not mention this table, so it is unclear how to choose which row to keep when there are multiple rows for a given set of primary keys.
You should probably take the row with the maximum 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 (multi-page):
Other Information
Package: HISTORICAL TABLES