Skip to contents

On 1 July 2023 the Safeguard Mechanism shifted from production-adjusted facility-specific baselines to industry-average default baselines declining 4.9 per cent per annum (nominal) to 2030. The Safeguard Mechanism (Crediting) Amendment Act 2023 also introduced Safeguard Mechanism Credits (SMCs), a new crediting instrument. Time-series analysis across the reform without flagging the regime break is a common analytical error.

The regime flag

library(cer)
cer_snapshot("2026-04-24")

fac_22_23 <- cer_safeguard_facilities(year = 2023)
fac_23_24 <- cer_safeguard_facilities(year = 2024)

unique(fac_22_23$regime)
unique(fac_23_24$regime)

The regime column is "pre_reform" for FY ending in 2023 or earlier; "post_reform" from FY 2023-24 onward.

Declining baseline trajectory

traj <- cer_safeguard_baseline_trajectory("Aluminium smelting",
                                            from_year = 2023,
                                            to_year = 2030)
traj

In 2029-30, the aluminium smelting default baseline is ~27 per cent below its 2023-24 value ((1 - 0.049)^6 ~= 0.738). This is the key number for emissions-intensity reform analysis.

TEBA facilities

teba <- cer_safeguard_teba_facilities()
head(teba)

# Safeguard data merged with TEBA declaration status
sum(fac_23_24$teba_declared, na.rm = TRUE)

Trade-Exposed Baseline-Adjusted (TEBA) facilities are eligible for softer baseline treatment where international competition would otherwise lead to emissions-leakage.

Analytical pitfall: summing across regimes

# DO NOT do this without a regime-specific annotation:
all_years <- rbind(fac_22_23, fac_23_24)
# If you sum covered_emissions across all_years you are combining
# two different accounting regimes. Split by regime first:
aggregate(covered_emissions ~ regime, data = all_years, FUN = sum,
          na.rm = TRUE)

SMCs post-reform

SMCs did not exist pre-reform. In post-reform data, the SMC columns count issuances and surrenders for facilities operating below their baseline.

# Post-reform SMC issuances (approximation; column names may drift)
sum(fac_23_24[, grep("smc", names(fac_23_24))], na.rm = TRUE)

Reconciling against the QCMR

total_23_24 <- sum(fac_23_24$covered_emissions, na.rm = TRUE)
cer_reconcile(
  value   = total_23_24 / 1e6,  # convert t to Mt
  quarter = "2023-24",
  measure = "safeguard_covered_emissions_mt"
)

If the reconciliation gap exceeds 2 per cent, a CER restatement has likely occurred between your snapshot date and the bundled QCMR reference.