Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions src/ispypsa/validation/schemas/costs_connection.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
table: costs_connection
required: false
unique:
- [geo_id, technology, year]
description: >
Connection costs and system security costs for new entrant generators and storage.

Contains additional costs for grid connection and, where applicable, system
strength requirements for inverter-based resources.

Source tables:
- `connection_cost_forecast_wind_and_solar`
- `connection_cost_forecast_other`
- `connection_costs_for_wind_and_solar`
- `connection_costs_other`
- `efficient_level_of_system_strength_cost`

If absent:
No additional connection or system security costs apply to new entrant build costs.
columns:
geo_id:
type: string
required: true
allowed_values_from:
- network_geography: geo_id
description: >
Network geography identifier where the connection cost applies.

Source notes:
If costs are given by region in source data, separate rows for each geo_id in
the region are created by the `templater` with the same cost applied across each.
technology:
type: string
required: false
allowed_values_from:
- costs_new_entrant_build: technology
description: >
Standardised technology name mapping to new entrant technologies.

If absent (or empty):
The connection cost applies to all new entrant technologies in `geo_id` that
have no technology-specific connection cost for the applicable year.
year:
type: int
required: true
description: Year in which this cost applies.
connection_cost:
type: float
required: false
units: $/MW
gte: 0.0
nan_fill: 0.0
description: >
Additional cost in AUD for new build reflecting transmission infrastructure required
for grid connection.

Used in calculating the total capital cost of new entrant technologies.

If absent (or empty):
No additional connection cost applies for the corresponding technology, geo_id
and build year.
system_strength_cost:
type: float
required: false
units: $/MW
gte: 0.0
nan_fill: 0.0
description: >
Additional cost in AUD for inverter-based resources to meet efficient levels of
system strength.

Used in calculating the total capital cost for some new entrant technologies.
Per IASR, "This cost is a blend of remediation with synchronous condenser
and grid forming batteries" (IASR workbook v7.5, 'Power System Security' sheet).

If absent (or empty):
Only the `connection_cost` value is added to new entrant build costs.
67 changes: 67 additions & 0 deletions src/ispypsa/validation/schemas/costs_fuel_prices.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
table: costs_fuel_prices
# note: this table is required to calculate SRMC. Possible to make this optional in
# future and/or design in more flexibility around dynamic vs. static SRMC calculation
# - but I'm getting blocked on how to implement this at the moment with some
# complexity around VRE vs non-VRE data requirements and how validation will
# be applied (to make some decisions around how conditional requirements can
# work) - basically needs more thought/discussion so for now I'm making all
# columns/tables needed to calculate SRMC (dynamic) required.
required: true
unique:
- [fuel_type, fuel_price_mapping, year]
description: >
Fuel prices by year for generation and storage units.

Contains fuel prices used to calculate dynamic marginal costs for thermal generators.

Source tables:
- `coal_fuel_price`
- `biomass_fuel_price`
- `gas_and_liquid_fuel_prices_consultant_scenario_mapping`
- `gas_prices_existing_generators`
- `gas_prices_new_entrants`
- `liquid_fuel_prices`
- `gpg_secondary_fuel_prices` # maybe
- `hydrogen_prices`
- `biomethane_prices`

Source notes:
The consultant scenario mapping table is used to map between specified ISP
scenario names and the gas, liquid fuel, hydrogen and biomenthane price scenario
names. This is new in the 2026 ISP (IASR v7.5).

Rows are also added by the `templater` for VRE fuels (Wind, Solar) with a price
of $0.0 for all years.
columns:
fuel_type:
type: string
required: true
description: >
Fuel type for which the price applies.

There are some fuel types (e.g., Biomethane) that are not used directly by any
generators in the model, but are used to blend with other fuels to calculate
final fuel costs.
fuel_price_mapping:
type: string
required: true
description: >
Identifier mapping to specific assets or sets of new entrant assets.

For most existing and planned generation, maps to specific power stations.
For new entrants, maps to technology/location groups.

Source notes:
For purely 'blending' fuels (e.g. Biomethane) and VRE fuel types (Wind, Solar),
that don't map to a specific generator, technology, or location this column is
filled by the `templater` with the corresponding `fuel_type` value.
year:
type: int
required: true
description: Year for which the price applies.
price:
type: float
required: true
units: $/GJ
gte: 0.0
description: Fuel price in AUD per gigajoule.
41 changes: 41 additions & 0 deletions src/ispypsa/validation/schemas/costs_new_entrant_build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
table: costs_new_entrant_build
required: false
unique:
- [technology, year]
description: >
New entrant generation and storage unit build costs.

Contains upfront capital costs for new entrant technologies. For offshore wind,
build costs include connection costs if sourced from the IASR workbook.

Source tables:
- `build_costs`

This table is required if new entrant generation or storage asset tables are
present and non-empty.
columns:
technology:
type: string
required: true
Comment thread
EllieKallmier marked this conversation as resolved.
description: >
Standardised technology name for the new entrant technology.

Should match technology values in `generators_new_entrant` or `storage_new_entrant`
tables; any new entrant technology defined there must also have a build cost
in this table.
year:
type: int
required: true
description: Year in which the build cost applies.
cost:
type: float
required: true
gte: 0.0
units: $/MW
description: >
Upfront capital cost in AUD to build the new entrant technology.

Does not include connection costs (except for offshore wind) or additional
costs for required REZ expansion, which are applied as penalties based on
build limits. Does not include locational cost factor scaling or first-of-a-kind
premium.
41 changes: 41 additions & 0 deletions src/ispypsa/validation/schemas/emissions_reduction.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
table: emissions_reduction
required: false
unique:
- [fuel_type, name, year]
description: >
Emissions intensity factors from fuel blending for gas-fired generators.

Contains estimated emissions factors reached through blending biomethane or
alternative fuels into the gas network, applied to individual gas-fired generators.

Source tables:
- `gpg_emissions_reduction_biomethane`

If absent:
No fuel blending assumed, so no adjustments to fuel price or emissions intensity
for gas generators are considered in the model.
columns:
fuel_type:
type: string
required: true
allowed_values_from:
- costs_fuel_prices: fuel_type
description: >
Fuel type blended into the base "Gas" fuel.
year:
type: int
required: true
description: Year in which this blend rate applies.
gpg_emissions_factor:
type: float
required: true
units: '%'
gte: 0.0
lte: 100.0
description: >
Emissions factor of gas-powered generation reached through fuel blending (%).

Used to calculate blended fuel prices and emissions intensity for GPG. Note:
simplified calculation assumes this factor applies directly to fuel price,
though biomethane has a small emissions contribution (0.13 kgCO2e/GJ). The
difference is negligible (<0.01%).
129 changes: 129 additions & 0 deletions src/ispypsa/validation/schemas/generators_existing_planned.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
table: generators_existing_planned
required: false
unique:
- [name]
description: >
Existing and planned-build generator characteristic data by generating unit.

Summary data for all existing and planned-build (in ISP terminology, this includes
committed, anticipated and additional policy-supported) generators, with each row
containing information to represent a single generating unit.

Source tables:
- `existing_committed_anticipated_additional_generator_summary`
- `renewable_energy_zones`
- `variable_opex_existing_committed_anticipated_additional_generators`
- `heat_rates_existing_committed_anticipated_additional_generators`
- `maximum_capacity_existing_committed_anticipated_additional_generators`
- `expected_closure_years`
- `gpg_min_stable_level_existing_generators`
- `coal_minimum_stable_level`

If absent:
A greenfield model will be run — no existing generators will be modelled.
columns:
name:
type: string
required: true
description: The name of the generating unit, e.g. DUID or full name. Must be unique.
power_station:
type: string
required: true
description: >
The name of the power station to which the generating unit belongs.

This should be the full proper name of the power station. In cases where only
one generating unit falls into a power station, this may have the same value
as the `name` column. This value is used to group units of generators in results
and charts, and map to station-level data, e.g. fuel costs.
technology:
type: string
required: true
description: >
The full proper name of the technology type as given in the IASR workbook.

Values in this column are used as 'canon' technology types across the model -
i.e. used to correct typos or map different spellings to a single canonical value.
This column is also used to group results by technology type, and maps directly to
the 'Retirement Costs' table in the IASR workbook (not currently implemented).
geo_id:
type: string
required: true
allowed_values_from:
- network_geography: geo_id
description: The geography identifier to which the generating unit is connected.
fuel_type:
type: string
required: true
allowed_values_from:
- costs_fuel_prices: fuel_type
description: >
The name of the type of fuel used by the generating unit.

This column is used to define the `carrier` for the generating unit in the
PyPSA model, and to map to fuel prices.
fuel_price_mapping:
type: string
required: true
allowed_values_from:
- costs_fuel_prices: fuel_price_mapping
description: >
The power station name or other identifier used to map fuel prices to the generator.

Note: for all power stations except for Kogan Gas, this should exactly match
the `power_station` column.
capacity:
type: float
required: true
units: MW
gt: 0.0
description: The nameplate capacity of the generating unit in MW.
vom:
type: float
required: true
units: $/MWh
gte: 0.0
description: >
Variable operation and maintenance cost per unit of energy produced, not including fuel cost.

These values are used to calculate the short-run marginal cost of generation
for a given unit.
heat_rate:
type: float
required: true
units: GJ/MWh
gte: 0.0
description: >
The heat rate of the generating unit, used to calculate the fuel cost per unit
of energy produced.

These values are used to calculate the short-run marginal cost of generation
for a given unit.
commissioning_date:
type: date
required: false
format: "%d/%m/%Y"
description: >
The full date on which the generating unit is expected to begin operation.

If absent:
The unit is assumed operational from the start of the modelling horizon.
closure_year:
type: int
required: false
description: >
The integer year in which the generating unit is expected to be retired.

If absent:
The unit is not retired during the modelling horizon.
minimum_load:
type: float
required: false
units: MW
gte: 0.0
nan_fill: 0.0
description: >
The minimum stable operational level of the generating unit in MW.

If absent:
No minimum operational load is applied to this generating unit.
Loading
Loading