-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added concepts for seasonal, conditional ratings (#137)
* Added concepts for seasonal, conditional ratings * Cleaned up spelling errors * Update docs/concepts.md Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com> Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> * Update cspell.json Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com> Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> * Update docs/decision-log/conditional-ratings.md Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com> Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> * Update docs/decision-log/conditional-ratings.md Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com> Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> * Filled in gaps * Re-orged concepts * Update docs/decision-log/seasonal-ratings-schedule.md Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com> Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> --------- Signed-off-by: Tory McKeag <143734462+getorymckeag@users.noreply.github.com> Co-authored-by: Christopher Atkins <57670484+catkins-miso@users.noreply.github.com>
- Loading branch information
1 parent
96f2804
commit da622cc
Showing
7 changed files
with
476 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
--- | ||
title: Conditional Seasonal Ratings | ||
parent: Decision Records | ||
--- | ||
|
||
## Status | ||
|
||
* Status: `accepted` | ||
* Issue Link: [GitHub Issue](https://github.com/trolie/spec/issues/129) | ||
|
||
## Context | ||
|
||
There are certain transmission lines that can have different ratings depending on their | ||
configuration. A commonly cited example is underwater lines with cables packed tightly in | ||
trays, where certain combinations of the conductors may be turned on and off. Switching | ||
conductors on and off obviously changes the amount of copper that can carry | ||
electrons. However, to add additional complexity, the wires are close enough together | ||
that they can heat each other up as well, and the overall rating must take this into | ||
account. Therefore, each possible combination will have a unique rating. | ||
|
||
When computing AARs however, it is necessary to take the configuration into account | ||
so that the AAR accounts for the actual or forecasted configuration of the line. Therefore, | ||
no special accommodation needs to be considered for AAR exchange in TROLIE. | ||
|
||
However, for seasonal ratings, the configuration of the line cannot be | ||
forecasted accurately for use as a recourse rating. A separate rating must be | ||
provided for each configuration, so that the right rating may be used based on the | ||
configuration of the line. | ||
|
||
This decision records a strategy for these "conditional" ratings in TROLIE. | ||
|
||
## Decision | ||
|
||
TROLIE will contain no specific schema elements to represent conditional ratings. | ||
For lines that require conditional ratings, TROLIE servers must expose unique | ||
resource identifiers representing each condition / permutation of the configuration. | ||
|
||
This follows from the similar precedent set by the decision | ||
for [directional ratings](directional-ratings.md). | ||
|
||
### Conditional-Resource Naming | ||
Much like the problem in naming directional ratings, there is currently no consistent | ||
approach as to how these "conditions" are represented. TROLIE implementations will | ||
be left on their own to implement a convention for these names, likely concatenating | ||
the facility ID with an ID for each possible condition. | ||
|
||
|
||
## Consequences | ||
|
||
An example is provided in [the seasonal ratings examples](../example-narratives/seasonal-ratings.md). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
--- | ||
title: Seasonal Ratings | ||
parent: Decision Records | ||
--- | ||
|
||
## Status | ||
|
||
* Status: `accepted` | ||
* Issue Link: [GitHub Issue](https://github.com/trolie/spec/issues/14) | ||
|
||
## Context | ||
|
||
While the primary focus of FERC 881 is AARs, the [seasonal ratings](../concepts.md#seasonal-ratings) | ||
still play an important role. In practice, these are used in planning and other non-operational studies | ||
in addition to their role as recourse ratings in operations. | ||
|
||
Today, seasonal ratings are managed using various tools, and often tied to network model update processes. For various | ||
reasons, many of these tools and processes will need to continue to be supported as they are today. However, | ||
FERC 881 creates a practical need to be able to share these ratings in a more structured way, implying that | ||
some support for seasonal ratings makes sense in TROLIE, even if it is optional. | ||
|
||
However seasonal rating interop is challenging, because the definition and meaning of each season differs | ||
between grid operators. The definition for [seasons](../concepts.md#seasons) in the FERC 881 context is | ||
quite flexible. While internally, grid operators may assign seasonal ratings to well-known named seasons | ||
such as `Fall`, the practices around `Fall` ratings can differ significantly between grid operators: | ||
|
||
* Assumed start and end dates can be different. | ||
* The FERC order specifies only that they must be updated _at least_ annually. In practice, the times they may be changed can be different. | ||
|
||
The diagram below illustrates an example of rating providers with different season definitions. Consider the challenges | ||
for `Transmission Provider 1` to exchange seasonal ratings with `Ratings Provider A` and `Transmission Provider 2`: | ||
 | ||
|
||
This decision record describes seasonal rating support in TROLIE. | ||
|
||
## Decision | ||
|
||
TROLIE will add support for a seasonal clearinghouse, using the same pattern as used by forecasted and | ||
real-time ratings. Support for either accepting proposals or querying snapshots is technically optional, | ||
although it is likely most Transmission Providers must support at least sharing | ||
their snapshots of in-use seasonal ratings. In practice, clearinghouse implementations may take seasonal proposals, | ||
seasonal ratings from modeling systems, seasonal ratings from other systems, or any combination of these into account. | ||
|
||
The familiar TROLIE concepts of proposals, | ||
snapshots and a clearinghouse have multiple benefits for seasonal ratings: | ||
|
||
* While there are no EMS operator overrides or topology conditions to consider like there would be with AARs, there are still jointly-owned facilities and tie lines where multiple ratings may be submitted by different Ratings Providers. | ||
* Some Transmission Providers may elect to manually validate proposed seasonal ratings before using them, as is common in existing practices. The distinction between proposal and in-use snapshot provides a discrete step in the overall data flow where such manual validation may be inserted if desired. | ||
|
||
|
||
### Defining Seasonal Ratings by Date Instead of Season Names | ||
|
||
Seasonal ratings in TROLIE will always be defined via start and end dates, rather than named seasons such | ||
as `Fall` or `Summer`. This way, the definition of what a rating provider is | ||
submitting or a transmission provider is presenting | ||
can be more transparent and precise, and is not explicitly coupled to any one entity's | ||
choices as to their season definitions. | ||
|
||
The pre-defined "named" seasons that are included in proposal and snapshot definitions are included in headers, | ||
but only provided as interop debugging hints. | ||
|
||
### Alignment of Seasons and Flexibility of TROLIE Server Implementations | ||
Defining seasonal ratings in terms of start and end dates creates great flexibility in the shape of seasonal ratings that may be exchanged. | ||
|
||
However, the specification explicitly **does not** imply that TROLIE servers **must** accept | ||
seasonal ratings of any arbitrary start and end date at any time. Transmission Providers | ||
implementing TROLIE are ultimately free to decide how flexible they want to be. | ||
|
||
For example, a Transmission Provider may choose only to accept seasonal ratings that | ||
match that Transmission Provider's pre-defined season start and end dates. Proposals | ||
for these seasons may then need to submitted before some cut-off time determined by | ||
the implementer. Such proposals may be rejected using an HTTP 422 response, in | ||
much the same fashion to forecasts. | ||
|
||
TROLIE server implementations may reject proposals that do not adhere to the Transmission | ||
Provider's business rules and practices. | ||
|
||
|
||
## Consequences | ||
|
||
Seasonal rating support is implemented in the TROLIE [specification](../spec#tag/Seasonal). |
175 changes: 175 additions & 0 deletions
175
docs/example-narratives/examples/seasonal-ratings-proposals-conditional.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
{ | ||
"proposal-header": { | ||
"source": { | ||
"last-updated": "2025-10-31T15:05:43.044267100-07:00", | ||
"provider": "UTILITY-A", | ||
"origin-id": "5aeacb25-9b65-4738-8a00-ac10afa63640" | ||
}, | ||
"default-emergency-durations": [ | ||
{ | ||
"name": "emergency", | ||
"duration-minutes": 240 | ||
} | ||
], | ||
"power-system-resources": [ | ||
{ | ||
"resource-id": "8badf00d-145-in-service", | ||
"alternate-identifiers": [ | ||
{ | ||
"name": "EMS.Name.145-in-service", | ||
"authority": "TO-NERC-ID" | ||
} | ||
] | ||
}, | ||
{ | ||
"resource-id": "8badf00d-145-out-of-service", | ||
"alternate-identifiers": [ | ||
{ | ||
"name": "EMS.Name.145-out-of-service", | ||
"authority": "TO-NERC-ID" | ||
} | ||
] | ||
} | ||
] | ||
}, | ||
"ratings": [ | ||
{ | ||
"resource-id": "8badf00d-145-in-service", | ||
"periods": [ | ||
{ | ||
"season-name": "WINTER", | ||
"period-start": "2024-11-15T00:00:00-05:00", | ||
"period-end": "2025-03-01T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "emergency", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "SPRING", | ||
"period-start": "2025-03-01T00:00:00-05:00", | ||
"period-end": "2025-06-15T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "SUMMER", | ||
"period-start": "2025-06-15T00:00:00-05:00", | ||
"period-end": "2025-09-01T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "FALL", | ||
"period-start": "2025-09-01T00:00:00-05:00", | ||
"period-end": "2025-11-15T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
} | ||
] | ||
}, | ||
{ | ||
"resource-id": "8badf00d-145-out-of-service", | ||
"periods": [ | ||
{ | ||
"season-name": "WINTER", | ||
"period-start": "2024-11-15T00:00:00-05:00", | ||
"period-end": "2025-03-01T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "emergency", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "SPRING", | ||
"period-start": "2025-03-01T00:00:00-05:00", | ||
"period-end": "2025-06-15T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "SUMMER", | ||
"period-start": "2025-06-15T00:00:00-05:00", | ||
"period-end": "2025-09-01T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"season-name": "FALL", | ||
"period-start": "2025-09-01T00:00:00-05:00", | ||
"period-end": "2025-11-15T00:00:00-05:00", | ||
"continuous-operating-limit": { | ||
"mva": 160 | ||
}, | ||
"emergency-operating-limits": [ | ||
{ | ||
"duration-name": "lte", | ||
"limit": { | ||
"mva": 165 | ||
} | ||
} | ||
] | ||
} | ||
] | ||
} | ||
] | ||
} |
Oops, something went wrong.