From 6b964d1c96cc3ddd022dd92a0e089558a7d1a014 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Mon, 12 Feb 2024 20:00:31 +0000 Subject: [PATCH 1/7] add snapshot-header element for forecast limits snapshot --- .../schemas/array-max-monitored-elements.yaml | 13 +++- docs/_data/components/schemas/headers.yaml | 48 ++++++++++++ .../schemas/rating-proposal-header.yaml | 32 -------- .../_data/paths/limits_forecast-snapshot.yaml | 6 +- ...recast-snapshot_period_{period-start}.yaml | 2 +- .../examples/forecast-limits-slim.json | 76 ++++++++++++++----- 6 files changed, 120 insertions(+), 57 deletions(-) create mode 100644 docs/_data/components/schemas/headers.yaml delete mode 100644 docs/_data/components/schemas/rating-proposal-header.yaml diff --git a/docs/_data/components/schemas/array-max-monitored-elements.yaml b/docs/_data/components/schemas/array-max-monitored-elements.yaml index 6fd7c19..08e29e5 100644 --- a/docs/_data/components/schemas/array-max-monitored-elements.yaml +++ b/docs/_data/components/schemas/array-max-monitored-elements.yaml @@ -6,6 +6,15 @@ forecast-limit-set: &max items: $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item' +forecast-limits-snapshot: + type: object + description: A snapshot of the forecast for a monitoring set. + properties: + snapshot-header: + $ref: ./headers.yaml#/snapshot-header + limits: + $ref: '#/forecast-limit-set' + forecast-limit-set-detailed: <<: *max description: Forecast including provenance information. @@ -22,7 +31,7 @@ forecast-proposal: type: object properties: proposal-header: - $ref: ./rating-proposal-header.yaml + $ref: ./headers.yaml#/proposal-header ratings: <<: *max description: Forecasted Ratings @@ -54,7 +63,7 @@ realtime-proposal: type: object properties: proposal-header: - $ref: ./rating-proposal-header.yaml + $ref: ./headers.yaml#/proposal-header ratings: <<: *max description: Real-Time Ratings Proposals diff --git a/docs/_data/components/schemas/headers.yaml b/docs/_data/components/schemas/headers.yaml new file mode 100644 index 0000000..0fc698a --- /dev/null +++ b/docs/_data/components/schemas/headers.yaml @@ -0,0 +1,48 @@ +proposal-header: + type: object + description: > + General type for ratings proposal that is mutable over time, such as forecasts + and seasonal ratings. + + Like the immutable proposal, it includes general fields created by the + system. + + Filling in these fields before posting may be ignored, or result in a 400 + error from TROLIE. + + Properties include: + + * The time the proposal was last updated. + + * The ratings provider that owns the proposal. For mutable proposals such as + those for forecasts or seasonal + ratings, the ID of the owning ratings provider is the ID of the proposal itself. + properties: + last-updated: + $ref: ./timestamp.yaml + ratings-provider: + $ref: ./entity-id.yaml + default-emergency-durations: + $ref: ./array-max-emergency-durations.yaml#/emergency-durations + power-system-objects: + $ref: ./array-max-monitored-elements.yaml#/named-power-system-objects + + required: + - default-emergency-durations + - power-system-objects + additionalProperties: false + +snapshot-header: + properties: + last-updated: + $ref: ./timestamp.yaml + snapshot-provider: + $ref: ./entity-id.yaml + power-system-objects: + $ref: ./array-max-monitored-elements.yaml#/named-power-system-objects + default-emergency-durations: + $ref: ./array-max-emergency-durations.yaml#/emergency-durations + required: + - last-updated + - snapshot-provider + - power-system-objects diff --git a/docs/_data/components/schemas/rating-proposal-header.yaml b/docs/_data/components/schemas/rating-proposal-header.yaml deleted file mode 100644 index 0768065..0000000 --- a/docs/_data/components/schemas/rating-proposal-header.yaml +++ /dev/null @@ -1,32 +0,0 @@ -type: object -description: > - General type for ratings proposal that is mutable over time, such as forecasts - and seasonal ratings. - - Like the immutable proposal, it includes general fields created by the - system. - - Filling in these fields before posting may be ignored, or result in a 400 - error from TROLIE. - - Properties include: - - * The time the proposal was last updated. - - * The ratings provider that owns the proposal. For mutable proposals such as - those for forecasts or seasonal - ratings, the ID of the owning ratings provider is the ID of the proposal itself. -properties: - last-updated: - $ref: ./timestamp.yaml - ratings-provider: - $ref: ./entity-id.yaml - default-emergency-durations: - $ref: ./array-max-emergency-durations.yaml#/emergency-durations - power-system-objects: - $ref: ./array-max-monitored-elements.yaml#/named-power-system-objects - -required: - - default-emergency-durations - - power-system-objects -additionalProperties: false diff --git a/docs/_data/paths/limits_forecast-snapshot.yaml b/docs/_data/paths/limits_forecast-snapshot.yaml index d3861b7..23a69dc 100644 --- a/docs/_data/paths/limits_forecast-snapshot.yaml +++ b/docs/_data/paths/limits_forecast-snapshot.yaml @@ -28,7 +28,7 @@ get: Conditional `GET` using the `If-None-Match` header and the `ETag` of a previous `GET` response. This operation uses media types to control verbosity of the data fetched. The default media type - (application/vnd.trolie.forecast-limit-set-slim.v1+json) simply includes + (application/vnd.trolie.forecast-limits-snapshot-slim.v1+json) simply includes the rating data. For applications that need it, the media type application/vnd.trolie.forecast-limit-set-detailed.v1+json may be requested, which also references the source proposals used to generate the snapshot, as @@ -38,9 +38,9 @@ get: '200': description: The requested operating forecast snapshot is returned. content: - application/vnd.trolie.forecast-limit-set-slim.v1+json: + application/vnd.trolie.forecast-limits-snapshot-slim.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-snapshot" example: $ref: '../../example-narratives/examples/forecast-limits-slim.json' application/vnd.trolie.forecast-limit-set-detailed.v1+json: diff --git a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml index 00e2bf3..fa56fab 100644 --- a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml +++ b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml @@ -30,7 +30,7 @@ get: content: application/vnd.trolie.forecast-limit-set-slim.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-snapshot" example: $ref: "../../example-narratives/examples/forecast-limits-slim.json" application/vnd.trolie.forecast-limit-set-detailed.v1+json: diff --git a/docs/example-narratives/examples/forecast-limits-slim.json b/docs/example-narratives/examples/forecast-limits-slim.json index 48e3953..2a0445a 100644 --- a/docs/example-narratives/examples/forecast-limits-slim.json +++ b/docs/example-narratives/examples/forecast-limits-slim.json @@ -1,27 +1,65 @@ -[ - { - "transmission-facility-id": "line2", - "periods": [ +{ + "snapshot-header": { + "last-updated": "2023-07-12T16:00:00-07:00", + "snapshot-provider": "X-RC", + "default-emergency-durations": [ { - "period-start": "2023-07-12T16:00:00-07:00", - "period-end": "2023-07-12T17:00:00-07:00", - "updated-time": "2023-07-12T13:05:43.044267100-07:00", - "continuous-operating-limit": { "mva": 160 }, - "emergency-operating-limits": [ + "name": "lte", + "duration-minutes": 240 + }, + { + "name": "ste", + "duration-minutes": 30 + }, + { + "name": "dal", + "duration-minutes": 15 + } + ], + "power-system-objects": [ + { + "resource-id": "8badf00d", + "alternate-identifiers": [ { - "duration-name": "emergency", - "limit": { - "mva": 165 - } + "name": "segmentX", + "authority": "TO-NERC-ID" }, { - "duration-name": "load-shed", - "limit": { - "mva": 170 - } + "name": "LINE1 SEG-X", + "authority": "RC-NERC-ID", + "mrid": "8badf00d" } ] } ] - } -] + }, + "limits": [ + { + "transmission-facility-id": "8badf00d", + "periods": [ + { + "period-start": "2023-07-12T16:00:00-07:00", + "period-end": "2023-07-12T17:00:00-07:00", + "updated-time": "2023-07-12T13:05:43.044267100-07:00", + "continuous-operating-limit": { + "mva": 160 + }, + "emergency-operating-limits": [ + { + "duration-name": "emergency", + "limit": { + "mva": 165 + } + }, + { + "duration-name": "load-shed", + "limit": { + "mva": 170 + } + } + ] + } + ] + } + ] +} \ No newline at end of file From 9d5ec3d7344d52fb90d76041034b0532c5bec416 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Mon, 12 Feb 2024 20:56:47 +0000 Subject: [PATCH 2/7] require proactive conneg to obtain snapshots --- docs/_data/openapi-split.yaml | 5 ++++- docs/_data/paths/limits_forecast-snapshot.yaml | 3 --- .../limits_forecast-snapshot_period_{period-start}.yaml | 5 +---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/_data/openapi-split.yaml b/docs/_data/openapi-split.yaml index df76774..ab259b2 100644 --- a/docs/_data/openapi-split.yaml +++ b/docs/_data/openapi-split.yaml @@ -320,6 +320,9 @@ components: "application/problem+json": schema: $ref: '#/components/schemas/problem' + "application/json": # helpful errors when the request doesn't specify a TROLIE media type + schema: + $ref: '#/components/schemas/problem' '401-empty': <<: *unauthorized content: &empty @@ -334,7 +337,7 @@ components: content: *empty '406-empty': <<: *not-acceptable - content: *empty + content: *problem '410-empty': <<: *gone content: *empty diff --git a/docs/_data/paths/limits_forecast-snapshot.yaml b/docs/_data/paths/limits_forecast-snapshot.yaml index 23a69dc..cda66f1 100644 --- a/docs/_data/paths/limits_forecast-snapshot.yaml +++ b/docs/_data/paths/limits_forecast-snapshot.yaml @@ -48,9 +48,6 @@ get: $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set-detailed" example: $ref: "../../example-narratives/examples/forecast-limits-detailed.json" - application/json: - schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set" headers: $ref: '../openapi-split.yaml#/components/responses/200/headers' '304': diff --git a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml index fa56fab..9f877ba 100644 --- a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml +++ b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml @@ -28,7 +28,7 @@ get: '200': description: The requested operating forecast snapshot is returned. content: - application/vnd.trolie.forecast-limit-set-slim.v1+json: + application/vnd.trolie.forecast-limits-snapshot-slim.v1+json: schema: $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-snapshot" example: @@ -59,9 +59,6 @@ get: - duration-name: load-shed limit: mva: 170 - application/json: - schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set" headers: $ref: '../openapi-split.yaml#/components/responses/200/headers' From 65c8d0cbb38186aee75da57c37401b79f3c4a910 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Mon, 12 Feb 2024 21:18:17 +0000 Subject: [PATCH 3/7] add snapshot-header to forecast limits detailed snapshot --- .../schemas/array-max-monitored-elements.yaml | 9 ++ .../_data/paths/limits_forecast-snapshot.yaml | 10 +-- ...recast-snapshot_period_{period-start}.yaml | 29 +----- .../examples/forecast-limits-detailed.json | 90 +++++++++++++------ 4 files changed, 82 insertions(+), 56 deletions(-) diff --git a/docs/_data/components/schemas/array-max-monitored-elements.yaml b/docs/_data/components/schemas/array-max-monitored-elements.yaml index 08e29e5..22b68a2 100644 --- a/docs/_data/components/schemas/array-max-monitored-elements.yaml +++ b/docs/_data/components/schemas/array-max-monitored-elements.yaml @@ -21,6 +21,15 @@ forecast-limit-set-detailed: items: $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item-detailed' +forecast-limits-detailed-snapshot: + type: object + description: A snapshot of the forecast for a monitoring set. + properties: + snapshot-header: + $ref: ./headers.yaml#/snapshot-header + limits: + $ref: '#/forecast-limit-set-detailed' + named-power-system-objects: <<: *max description: Collection of power system object names diff --git a/docs/_data/paths/limits_forecast-snapshot.yaml b/docs/_data/paths/limits_forecast-snapshot.yaml index cda66f1..603ffa4 100644 --- a/docs/_data/paths/limits_forecast-snapshot.yaml +++ b/docs/_data/paths/limits_forecast-snapshot.yaml @@ -28,9 +28,9 @@ get: Conditional `GET` using the `If-None-Match` header and the `ETag` of a previous `GET` response. This operation uses media types to control verbosity of the data fetched. The default media type - (application/vnd.trolie.forecast-limits-snapshot-slim.v1+json) simply includes + (application/vnd.trolie.forecast-limits-snapshot.v1+json) simply includes the rating data. For applications that need it, the media type - application/vnd.trolie.forecast-limit-set-detailed.v1+json may be requested, + application/vnd.trolie.forecast-limit-detailed-snapshot.v1+json may be requested, which also references the source proposals used to generate the snapshot, as well as reporting data from the ratings clearing process. @@ -38,14 +38,14 @@ get: '200': description: The requested operating forecast snapshot is returned. content: - application/vnd.trolie.forecast-limits-snapshot-slim.v1+json: + application/vnd.trolie.forecast-limits-snapshot.v1+json: schema: $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-snapshot" example: $ref: '../../example-narratives/examples/forecast-limits-slim.json' - application/vnd.trolie.forecast-limit-set-detailed.v1+json: + application/vnd.trolie.forecast-limits-detailed-snapshot.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set-detailed" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-detailed-snapshot" example: $ref: "../../example-narratives/examples/forecast-limits-detailed.json" headers: diff --git a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml index 9f877ba..886984e 100644 --- a/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml +++ b/docs/_data/paths/limits_forecast-snapshot_period_{period-start}.yaml @@ -28,37 +28,16 @@ get: '200': description: The requested operating forecast snapshot is returned. content: - application/vnd.trolie.forecast-limits-snapshot-slim.v1+json: + application/vnd.trolie.forecast-limits-snapshot.v1+json: schema: $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-snapshot" example: $ref: "../../example-narratives/examples/forecast-limits-slim.json" - application/vnd.trolie.forecast-limit-set-detailed.v1+json: + application/vnd.trolie.forecast-limits-detailed-snapshot.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limit-set-detailed" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/forecast-limits-detailed-snapshot" example: - - transmission-facility-id: line2 - periods: - - period-start: '2023-07-12T16:00:00-07:00' - period-end: '2023-07-12T17:00:00-07:00' - updated-time: '2023-07-12T13:05:43.044267100-07:00' - proposals-considered: - - c386503e-ae8f-46e7-8fcf-bdee30f4f56b - temporary-aar-exceptions: - - 2d8c80e8-f533-4be9-85bf-f7f81eb73d67 - limiting-segment: segmentX - override-reason: Any reason entered by the operator for an override. - additional-data: - vendor-specific-data: {} - continuous-operating-limit: - mva: 160 - emergency-operating-limits: - - duration-name: emergency - limit: - mva: 165 - - duration-name: load-shed - limit: - mva: 170 + $ref: "../../example-narratives/examples/forecast-limits-detailed.json" headers: $ref: '../openapi-split.yaml#/components/responses/200/headers' diff --git a/docs/example-narratives/examples/forecast-limits-detailed.json b/docs/example-narratives/examples/forecast-limits-detailed.json index 2f6037a..77bfc7b 100644 --- a/docs/example-narratives/examples/forecast-limits-detailed.json +++ b/docs/example-narratives/examples/forecast-limits-detailed.json @@ -1,34 +1,72 @@ -[ - { - "transmission-facility-id": "line2", - "periods": [ +{ + "snapshot-header": { + "last-updated": "2023-07-12T16:00:00-07:00", + "snapshot-provider": "X-RC", + "default-emergency-durations": [ { - "period-start": "2023-07-12T16:00:00-07:00", - "period-end": "2023-07-12T17:00:00-07:00", - "updated-time": "2023-07-12T13:05:43.044267100-07:00", - "proposals-considered":["c386503e-ae8f-46e7-8fcf-bdee30f4f56b"], - "temporary-aar-exceptions": ["2d8c80e8-f533-4be9-85bf-f7f81eb73d67"], - "limiting-segment": "segmentX", - "override-reason": "Any reason entered by the operator for an override.", - "additional-data": { - "vendor-specific-data": {} - }, - "continuous-operating-limit": { "mva": 160 }, - "emergency-operating-limits": [ + "name": "lte", + "duration-minutes": 240 + }, + { + "name": "ste", + "duration-minutes": 30 + }, + { + "name": "dal", + "duration-minutes": 15 + } + ], + "power-system-objects": [ + { + "resource-id": "8badf00d", + "alternate-identifiers": [ { - "duration-name": "emergency", - "limit": { - "mva": 165 - } + "name": "segmentX", + "authority": "TO-NERC-ID" }, { - "duration-name": "load-shed", - "limit": { - "mva": 170 - } + "name": "LINE1 SEG-X", + "authority": "RC-NERC-ID", + "mrid": "8badf00d" } ] } ] - } -] + }, + "limits": [ + { + "transmission-facility-id": "8badf00d", + "periods": [ + { + "period-start": "2023-07-12T16:00:00-07:00", + "period-end": "2023-07-12T17:00:00-07:00", + "updated-time": "2023-07-12T13:05:43.044267100-07:00", + "proposals-considered":["c386503e-ae8f-46e7-8fcf-bdee30f4f56b"], + "temporary-aar-exceptions": ["2d8c80e8-f533-4be9-85bf-f7f81eb73d67"], + "limiting-segment": "segmentX", + "override-reason": "Any reason entered by the operator for an override.", + "additional-data": { + "vendor-specific-data": {} + }, + "continuous-operating-limit": { + "mva": 160 + }, + "emergency-operating-limits": [ + { + "duration-name": "emergency", + "limit": { + "mva": 165 + } + }, + { + "duration-name": "load-shed", + "limit": { + "mva": 170 + } + } + ] + } + ] + } + ] +} From 882249cd7575beced895da40bf4c90f279f49115 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Tue, 13 Feb 2024 13:28:42 +0000 Subject: [PATCH 4/7] formatting / typo --- docs/_data/paths/limits_forecast-snapshot.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/_data/paths/limits_forecast-snapshot.yaml b/docs/_data/paths/limits_forecast-snapshot.yaml index 603ffa4..1617dc0 100644 --- a/docs/_data/paths/limits_forecast-snapshot.yaml +++ b/docs/_data/paths/limits_forecast-snapshot.yaml @@ -24,15 +24,15 @@ get: description: > Obtain the Limits Forecast the Transmission Provider is currently using in - Operations, relative to the current time. Clients SHOULD perform - Conditional `GET` using the `If-None-Match` header and the `ETag` of a - previous `GET` response. This operation uses media types to control - verbosity of the data fetched. The default media type - (application/vnd.trolie.forecast-limits-snapshot.v1+json) simply includes + Operations, relative to the current time. Clients SHOULD perform Conditional + `GET` using the `If-None-Match` header and the `ETag` of a previous `GET` + response. This operation uses media types to control verbosity of the data + fetched. The default media type, + `application/vnd.trolie.forecast-limits-snapshot.v1+json`, simply includes the rating data. For applications that need it, the media type - application/vnd.trolie.forecast-limit-detailed-snapshot.v1+json may be requested, - which also references the source proposals used to generate the snapshot, as - well as reporting data from the ratings clearing process. + `application/vnd.trolie.forecast-limits-detailed-snapshot.v1+json` may be + requested, which also references the source proposals used to generate the + snapshot, as well as reporting data from the ratings clearing process. responses: '200': From 454b647a4a439f28e8472ea1c893a9447b2e9c29 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Tue, 13 Feb 2024 14:30:42 +0000 Subject: [PATCH 5/7] add header to rt snapshot --- .../schemas/array-max-monitored-elements.yaml | 60 ++++++------ .../_data/paths/limits_realtime-snapshot.yaml | 11 +-- .../examples/realtime-limit-set-detailed.json | 92 +++++++++++++------ .../examples/realtime-limit-set-slim.json | 72 +++++++++++---- 4 files changed, 157 insertions(+), 78 deletions(-) diff --git a/docs/_data/components/schemas/array-max-monitored-elements.yaml b/docs/_data/components/schemas/array-max-monitored-elements.yaml index 22b68a2..ebc9a0b 100644 --- a/docs/_data/components/schemas/array-max-monitored-elements.yaml +++ b/docs/_data/components/schemas/array-max-monitored-elements.yaml @@ -1,25 +1,16 @@ -forecast-limit-set: &max - type: array - minItems: 0 - maxItems: 50000 - description: Set of forecast limits - items: - $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item' - forecast-limits-snapshot: type: object description: A snapshot of the forecast for a monitoring set. properties: snapshot-header: $ref: ./headers.yaml#/snapshot-header - limits: - $ref: '#/forecast-limit-set' - -forecast-limit-set-detailed: - <<: *max - description: Forecast including provenance information. - items: - $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item-detailed' + limits: &max + type: array + minItems: 0 + maxItems: 50000 + description: Set of forecast limits + items: + $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item' forecast-limits-detailed-snapshot: type: object @@ -28,7 +19,10 @@ forecast-limits-detailed-snapshot: snapshot-header: $ref: ./headers.yaml#/snapshot-header limits: - $ref: '#/forecast-limit-set-detailed' + <<: *max + description: Forecast including provenance information. + items: + $ref: 'array-max-forecast-periods.yaml#/forecast-limit-item-detailed' named-power-system-objects: <<: *max @@ -56,17 +50,29 @@ missing-forecast-rating-set: items: $ref: 'array-max-forecast-periods.yaml#/missing-forecast' -realtime-limit-set: - <<: *max - description: Real-time limits - items: - $ref: ./realtime-limit-item.yaml +realtime-limits-snapshot: + type: object + description: A snapshot of the realtime limits for a monitoring set. + properties: + snapshot-header: + $ref: ./headers.yaml#/snapshot-header + limits: + <<: *max + description: Real-time limits + items: + $ref: ./realtime-limit-item.yaml -realtime-limit-set-detailed: - <<: *max - description: Real-time limits including provenance. - items: - $ref: ./realtime-limit-item-detailed.yaml +realtime-limits-detailed-snapshot: + type: object + description: A snapshot of the realtime limits for a monitoring set. + properties: + snapshot-header: + $ref: ./headers.yaml#/snapshot-header + limits: + <<: *max + description: Real-time limits including provenance. + items: + $ref: ./realtime-limit-item-detailed.yaml realtime-proposal: type: object diff --git a/docs/_data/paths/limits_realtime-snapshot.yaml b/docs/_data/paths/limits_realtime-snapshot.yaml index ef33898..9e94ad5 100644 --- a/docs/_data/paths/limits_realtime-snapshot.yaml +++ b/docs/_data/paths/limits_realtime-snapshot.yaml @@ -27,19 +27,16 @@ get: '200': description: The System Operating Limits snapshot is returned. content: - application/vnd.trolie.realtime-limit-set-slim.v1+json: + application/vnd.trolie.realtime-limits-snapshot.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/realtime-limit-set" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/realtime-limits-snapshot" example: $ref: '../../example-narratives/examples/realtime-limit-set-slim.json' - application/vnd.trolie.realtime-limit-set-detailed.v1+json: + application/vnd.trolie.realtime-limits-detailed-snapshot.v1+json: schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/realtime-limit-set-detailed" + $ref: "../components/schemas/array-max-monitored-elements.yaml#/realtime-limits-detailed-snapshot" example: $ref: '../../example-narratives/examples/realtime-limit-set-detailed.json' - application/json: - schema: - $ref: "../components/schemas/array-max-monitored-elements.yaml#/realtime-limit-set" headers: $ref: '../openapi-split.yaml#/components/responses/200/headers' '304': diff --git a/docs/example-narratives/examples/realtime-limit-set-detailed.json b/docs/example-narratives/examples/realtime-limit-set-detailed.json index 1c67225..8e0f0ba 100644 --- a/docs/example-narratives/examples/realtime-limit-set-detailed.json +++ b/docs/example-narratives/examples/realtime-limit-set-detailed.json @@ -1,32 +1,70 @@ -[ - { - "transmission-facility-id": "line2", - "proposals-considered": [ - "c386503e-ae8f-46e7-8fcf-bdee30f4f56b" +{ + "snapshot-header": { + "last-updated": "2023-07-12T16:00:00-07:00", + "snapshot-provider": "X-RC", + "default-emergency-durations": [ + { + "name": "lte", + "duration-minutes": 240 + }, + { + "name": "ste", + "duration-minutes": 30 + }, + { + "name": "dal", + "duration-minutes": 15 + } ], - "temporary-aar-exceptions": [ - "2d8c80e8-f533-4be9-85bf-f7f81eb73d67" - ], - "limiting-segment": "segmentX", - "override-reason": "Any reason entered by the operator for an override.", - "additional-data": { - "vendor-specific-data": {} - }, - "updated-time": "2023-07-12T13:05:43.044267100-07:00", - "continuous-operating-limit": { "mva": 160 }, - "emergency-operating-limits": [ + "power-system-objects": [ + { + "resource-id": "8badf00d", + "alternate-identifiers": [ + { + "name": "segmentX", + "authority": "TO-NERC-ID" + }, + { + "name": "LINE1 SEG-X", + "authority": "RC-NERC-ID", + "mrid": "8badf00d" + } + ] + } + ] + }, + "limits": [ + { + "transmission-facility-id": "line2", + "proposals-considered": [ + "c386503e-ae8f-46e7-8fcf-bdee30f4f56b" + ], + "temporary-aar-exceptions": [ + "2d8c80e8-f533-4be9-85bf-f7f81eb73d67" + ], + "limiting-segment": "segmentX", + "override-reason": "Any reason entered by the operator for an override.", + "additional-data": { + "vendor-specific-data": {} + }, + "updated-time": "2023-07-12T13:05:43.044267100-07:00", + "continuous-operating-limit": { + "mva": 160 + }, + "emergency-operating-limits": [ { - "duration-name": "emergency", - "limit": { - "mva": 165 - } + "duration-name": "emergency", + "limit": { + "mva": 165 + } }, { - "duration-name": "load-shed", - "limit": { - "mva": 170 - } + "duration-name": "load-shed", + "limit": { + "mva": 170 + } } - ] - } -] + ] + } + ] +} \ No newline at end of file diff --git a/docs/example-narratives/examples/realtime-limit-set-slim.json b/docs/example-narratives/examples/realtime-limit-set-slim.json index d08ae0b..65759c5 100644 --- a/docs/example-narratives/examples/realtime-limit-set-slim.json +++ b/docs/example-narratives/examples/realtime-limit-set-slim.json @@ -1,21 +1,59 @@ -[ - { - "transmission-facility-id": "line2", - "updated-time": "2023-07-12T13:05:43.044267100-07:00", - "continuous-operating-limit": { "mva": 160 }, - "emergency-operating-limits": [ - { - "duration-name": "emergency", - "limit": { - "mva": 165 +{ + "snapshot-header": { + "last-updated": "2023-07-12T16:00:00-07:00", + "snapshot-provider": "X-RC", + "default-emergency-durations": [ + { + "name": "lte", + "duration-minutes": 240 + }, + { + "name": "ste", + "duration-minutes": 30 + }, + { + "name": "dal", + "duration-minutes": 15 } - }, - { - "duration-name": "load-shed", - "limit": { - "mva": 170 + ], + "power-system-objects": [ + { + "resource-id": "8badf00d", + "alternate-identifiers": [ + { + "name": "segmentX", + "authority": "TO-NERC-ID" + }, + { + "name": "LINE1 SEG-X", + "authority": "RC-NERC-ID", + "mrid": "8badf00d" + } + ] } + ] + }, + "limits": [ + { + "transmission-facility-id": "8badf00d", + "updated-time": "2023-07-12T13:05:43.044267100-07:00", + "continuous-operating-limit": { + "mva": 160 + }, + "emergency-operating-limits": [ + { + "duration-name": "emergency", + "limit": { + "mva": 165 + } + }, + { + "duration-name": "load-shed", + "limit": { + "mva": 170 + } + } + ] } ] - } -] \ No newline at end of file +} \ No newline at end of file From 8e4eeeddb5a8bfdf1c9d3353580f61a6f77db758 Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Tue, 13 Feb 2024 15:26:24 +0000 Subject: [PATCH 6/7] add concept model sketch --- docs/concepts.md | 2 ++ docs/images/data model.excalidraw.png | Bin 0 -> 95802 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/images/data model.excalidraw.png diff --git a/docs/concepts.md b/docs/concepts.md index 10232d6..f16b05e 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -7,6 +7,8 @@ nav_order: 2 Before reviewing examples, users may benefit from a basic understanding of the key constructs used by the TROLIE APIs. Definitions of these concepts are included here. +![UML concept model]() + ## Transmission Facilities A Transmission Facility is a logical part of the electrical network that may have a rating, whether simply seasonal or an AAR. This most often represents a transmission line, but could also include transformers and other large pieces of equipment, or perhaps even logical points on the network such as interfaces. Most importantly, these are points at which transmission providers need rating values to operate against. diff --git a/docs/images/data model.excalidraw.png b/docs/images/data model.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe6215a94d4d97e1591f61955a7ec0b9ebd65cb GIT binary patch literal 95802 zcmZsD1yqzx`#!9o3y9JnAq@fx3Q7nP(k&pdG%P9IA>AEl&ieROJZqsqwL}um~08r8TgyF4$sWL7Jf# z!N2U;Ytezfuw6CeB(X{cXun}$F<>c3-`DgqT7Pk=l1yeYoPas!hNT)&1*}e1TUz?o zN~rXOXk8puyf4r1tB)BP>geEJP{&p8C&uZ&R>8#3$)Cd%{#pFNcmF-da2htZK{v0p z=RRL%pKYubzI}W+s&AbCIEI2-Z&_1X0_T4|2$`I$c0FXLR2(rjG0}g09!MZm1cRZG zf&cYsPYi6=yL?GTh2+1!44#eRpSi%q0Qs*Ekraf)mY0@{U*UgW%rfeB^?!zrl(>v1 zkL++#8)o^RsSqc^KZ*V|Gza4?s{z`%WXty%T07md6@r$7S&eWPMeCV?I{fPvIL}gvui=OcF5tL#BeRHb4!_$N~m3? z6)Mx?%21g_vyD>f8nxybU*S#TO8=fwTk`WL_S)^~ag-V5TDr7;?GkOxB+KZc0FzC^ z`OaucVR?3K%+%l9RX966IhiXjF<(i&Ul~UuI1p2v6DVC7cU`n@)T?n_P4U44*3qHc zsjE@HpO#R>!wJiPad6NrL+UMZxxZfNYvgrb9fsHrEjY7**{*z4pZeoBd=D6I3|G(j z`#6fK6Js;KJK?qdki*GE<80R!PDq;blqeCd)FV+y^T(*)m;-lS8`gU?nU!a}cJysq zRsSLOQnj5rSB3Qehh;QLJbX3iuc^4LjTUo0>&{ny_4E!)-V&{BO{8gCtLzh8fy=pD z`BDh(>q|M>=brNpffKxuz(S%>SV2-{EcB{;Nd z|2h|nVh*L=cWwzq2C4v-B0X8hV5WMy%93xh93+TX)ns_gN0WSxKkH}0!mfz#PEpyD z;>GFbEUK+SeC=4HjjHmBi_l~KJvj!5n4vfY30h*+@u{zEks9hCnwD2|^k3?jDK!Yk$8xMki*;NVoZ9H}mLon(=frSIO7a zk)pTQF&x;W$IcBAh-g^#`y_bG_Ye7|f1cB2AsX|lq7OL!_`?72+eQ?7mQ(#kUD1?t z7v0Pik@fkEJC7Dq4Lv60!&mD!n_Ls_{fu1u@G?Z-wz!H3ElbVCk9rfE*h6m^RkfV( z^6{UOo5%!V8(pL*-Q5{8t{3w=6bh9nLzcDT8`T1L>v3Nn|2R@=EMEE1Ypa8DhB1P6 zu~fw59ahb+A*Bdy&kU~e*hCWB9(s%aJ8G(d`RZ^%e2<4g@04Tn_obZbDF>07gD;u& zpHuY*80XnkGM29g96RrQdLWK=AJy#wr*Y7IV|s$SYFL9+aHf3{)pdQX_%WKI!8qV# z#L(w^)ke^z>rP{ao-d{lG2DtxmeibTho^U97XywMP^noc%?E${Kttl)P)QdDx_fUf zU{i*QCsATH3 zV1KdPbhyg3w;6CYH5SG1*hVPmMrq{rvi@kJ-VhvyMyHtMciaWrtXZ^ONBQkM7C+sh zs+6zP3v>T=9wHrxKu>(K1tGy`UYgOWL*tIN=fK?+A(-Jviud*x^zFfWpJM8`N*jir zNH!(@%sxBrY6OFCfL-vcup0EZ+3+Jc6Kn^GmR(uP#o6yaYnS4;DH>L?d{l z_wj7Zhg{`ZPAU-9MsU+faiLPb<~JZJN>Jp6|_P zrw&yk+C@zCWVW=P%TMGe?r@ei{EQY^FKcU1vM4+L_8{PANy?N%eX&%2apjPr#h`4I z`_{L&*&YdEhxtC+?*(UC!w4D!SygYw%OJSpUuk${vW((ey}AA8<c=ui{dP zeA?fcK6|xZHD)wx)0t%&$q#dnqvkJ6KFXDenfBRiTuC+d_l_{pEi(zC5q8U`5q(@q z!)G43Hc_#Hki2R;%bxAKxU}h1bh-Ljo#nvuZ!<7<)#qQkRUd`5bB>JYSY7CI3Pgg=;_(6mgM~xl&bE;T%?C>cI1M26`zMDS8;XhjV zWDO<;#n0A9jeP7qcPFgI(o^Y)W!SpEyw4oFG3tMI;@8~fXQ_sUI;>S)mRS*20 zS)}$@330i^w(H51$+@UURmqnXYMh6~8}WfrRqC%~(I5*_=qPksp{@x8M=UcPuQzND z%$9p}kn4D*bzB#H?8Wtovj|z!-Zqe6&_EBaIvfRW_{`( zh@T7-2(M=FSw!2;H8oPYj2QV!aA)*nQYb0&Ji+IncRo+Y!dJ^lSngarE zQrQOx!CawrJ{#z+>@F)>xi>v4*#WaPl+FI@;I{?!{M-84%r@W)&D_8~Fb8p{jGh@m9pqn(^5xx8AXs$2y!|Tvk9H=^x2y zz!i8N~S;)N9Fe(_UvEUl1b@K@3o8d z4hD&W;0xoQz8jw%rZtP{xJfoc)Nb&eW|+bwIRk^DF*8$kc~E92f^!0D&P z?E#Su;JB`hk9VTuOp@VB1AC1nsfx%E8Tss(KUJ^9HN18$#0BCGkY8aiyjk@yvHY33#>@JU@j zYbf4qUBpgowG&||i?+Bl)inlUTNYY8y@UJ&FA-SidXKCfwSC^~w4^VcvkiQj$Pd0q zpA2hu-aKz^X*M$>XvH3fd>5gB|_@utC0`a&0zB^ND%7qXm0WA{4xIw z&bWNWdbo3@dGhlMdlI1}M@3pIyIo%*YrxWoEJm84&FsnZnVHs7l%BTJ-RosE- zlG|2cv!E|&bMx_*t9xjEjuV{yq08<3>fX<8=2vyf%R7olnfO{eN)W4QYz*ap+fxE( z71YAog0J%9y+90}3Bo2NPCL&^WY55^Lcpk4xs* zj+LM$=If}a@1r_9XHO1yxZY5|AiaQT>!@(}@1I*I7OcX16PHg#Y;W3i1B5A$?^89N z?9ZKANv1B54du$w`whR(6dZKloNeUX31D1_a7MQ4QIRdFN3`qR>%3q5SN928Pwojp z2u+|k$PVOjKHzNbijvtiw(C9a)DZpSGxFHLPUcsc5cbR6PsECrL1D8J?Iw#TW*TQk z=eO&zz_kj_%|j-a1B!t7Wy)8waW3{#)!Zc{FSK~ULdd1EdkK_~c`on~j^E}8dQB1; z0?!n3&aDU0*!P$MrK2zq3*R_ma6rU~j*i=^us*{yFLxbms(!x$^ii66NR;j!2e)JR zgh>dYLBtihX%L;)swZu@YC!aU^VI*_j3iR@bbo2%aIMr6*yCnnE0Ybh?!F?D9Q&5+ zThNMF-x?K){7SePj@aQ>X3sCrtm+d$~{wx0q0=>-w6&hD&cp|3tFau@bcHlQ)}>7kL_fNP5os?VifTg z%6DVNbIv_MbT_>oIL!1k+VwW;iZ_>6D-F$Ykc|}m3t5#tkOLU5mPI#Dj%46EO z3*8cONvZ7aiZb#E!xzwxIDv!{_sgiDz{Mg23Eh?F;Y3m3X=`!*E^iqi9mHTWj=p3% zHjLP%XlZXb_@VJ+iR?BT_p(I3SALqlMDIKAfc{L8js96w+T=23o&rxW*K0*S08g;GP7mAs-kzYRB-S5u!!~tUAMRl)g%Z!r+4yQ& z|NRBAm))DqXB&o$&RbIR4WRaEdeL6`!f$utbno_nP@CxSk2a;){w$x3Zy;$K&@b(7 z4~ic(VcPXE(;lTdkMFA;8Xzwf4#?dpH=e*0LztFp%B7nzqBfk6hQ}k$cl8)#v8Akl zQ*Y0e7oLYW43P?4?F)vW0(YpH@z6&ah0gRpyFK$-A^CXCGSmKxUbWq~-AUVl z>TH+`Xj6VU1VsuOa0t$NnR)(bx#ZJFvyt+&xMp^;IVmwj@|b2+c(v^?Y~Ke{_uF1v zjE{}66N*b`!oweJu3ME3)Hq8s_WvfcKrBbQ&@n-6i(E+6vngP$ix!d@Ul@oidsWO; zT$uzgn=C6=Fa(b&_Z?KV(}E=Zww!@6Yc$L@CFlBke%8_4g+jga`RCk#I1||}btQOS zxOn-;qr<5h$IY^PTOts<&nY@alGAVs>8WhOzK3NdBdttwc2hKt4GYDO*t5KHDINQ` zYo0%V2jhMRu2vEqM8k^+om-0wt`%N+?mGQ8+kbU#$x)ganuA%{{LZW2A z`9rOq38QV8De+Dn@_F&{FZ=8PRF92IrHmF=oZ4sQ8O` z#U5$^)BK4I5N_FY97d9>BZ>#6WG^k>2l4r;ys-3n^zW5<*FHI1@Q|xKL6`U2N{A$q z2ek{{t(`e~-In4S8?kjHuk;k?zQ4<8mZ`SSV!GaH;H8cyZCZTU!l+QjvKt05UUy-U z2A2fo7FWYBUt27WfQp1ttyBWwEnCWfwj>V3EYFeRz|V2Z9L^NBDRl|GJAMjB?kuB2 zVy&y$f5LDsltmZW2%7(mQGLf9T?SVIL<9>n^cK>rR!i?b!z^g&W;>ig@Yvmmsufku z7Mr0Ts&O>VenFDfLuu^$vHq6F*AFd*PA#~zRlHzsiTu_d-YpbT#XfASA|8{UJOR zjb8`4y(2Gvjj!8^i&v&;Fr{&YdeULm9O{kpF-Rtx*L{E7-vhO>R}8g7qPa)^TU8ut z$ppKkUwEeSmU2lkiTOB`azit&w53q~5*k<+eL#cA!E$or8nZ)2Wl)oeGqXP-V`R}v zY4ho7am27z6cb7tZ}p?WLj*TA-YZmfmH^GLah4ptAgaeUvjon$oR)d=*iXHIa%nWnc4R zaJ6==r2f!syEs|QM5b*~M#Pr0R*FQVOU$MA{*dbA{ayKbwiOpc1193PvDYXB+F2-s z5U28q!8@fIc|&{Zd515m*A$U?_R=Htf8w$VUZ#`W56Q(qz8K`VEIRv|f=8*&C6cHY*d4w%0DAv&=KAVvmVDkS? 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 literal 0 HcmV?d00001 From 77ed7f5f5e47239c8bbd528d9e3ac0434a73762a Mon Sep 17 00:00:00 2001 From: Christopher Atkins Date: Tue, 13 Feb 2024 16:09:57 +0000 Subject: [PATCH 7/7] add header to seasonal snapshot --- .../schemas/array-max-monitored-elements.yaml | 15 ++-- .../components/schemas/array-max-seasons.yaml | 4 +- .../paths/seasonal-ratings_snapshot.yaml | 14 +--- .../examples/seasonal-limits-snapshot.json | 70 +++++++++++++++++++ 4 files changed, 84 insertions(+), 19 deletions(-) create mode 100644 docs/example-narratives/examples/seasonal-limits-snapshot.json diff --git a/docs/_data/components/schemas/array-max-monitored-elements.yaml b/docs/_data/components/schemas/array-max-monitored-elements.yaml index ebc9a0b..6e25f62 100644 --- a/docs/_data/components/schemas/array-max-monitored-elements.yaml +++ b/docs/_data/components/schemas/array-max-monitored-elements.yaml @@ -95,8 +95,15 @@ seasonal-rating-proposal: <<: *max items: $ref: 'array-max-seasons.yaml#/seasonal-proposals' + seasonal-rating-snapshot: - <<: *max - description: Seasonal rating snapshot - items: - $ref: ./array-max-seasons.yaml#/seasonal-rating-snapshot-item + type: object + description: A snapshot of the realtime limits for a monitoring set. + properties: + snapshot-header: + $ref: ./headers.yaml#/snapshot-header + limits: + <<: *max + description: Seasonal rating snapshot + items: + $ref: ./array-max-seasons.yaml#/seasonal-rating-snapshot-item diff --git a/docs/_data/components/schemas/array-max-seasons.yaml b/docs/_data/components/schemas/array-max-seasons.yaml index a56964d..b2161cb 100644 --- a/docs/_data/components/schemas/array-max-seasons.yaml +++ b/docs/_data/components/schemas/array-max-seasons.yaml @@ -14,9 +14,9 @@ seasonal-rating-snapshot-item: type: object additionalProperties: false properties: - transmission-facility-id: + resource-id: $ref: ./generic-identifier.yaml seasons: <<: *max items: - $ref: ./seasonal-rating-snapshot-value.yaml \ No newline at end of file + $ref: ./seasonal-rating-snapshot-value.yaml diff --git a/docs/_data/paths/seasonal-ratings_snapshot.yaml b/docs/_data/paths/seasonal-ratings_snapshot.yaml index 9cfd4ca..75eb9e6 100644 --- a/docs/_data/paths/seasonal-ratings_snapshot.yaml +++ b/docs/_data/paths/seasonal-ratings_snapshot.yaml @@ -29,19 +29,7 @@ get: schema: &seasonal-rating-snapshot $ref: ../components/schemas/array-max-monitored-elements.yaml#/seasonal-rating-snapshot example: - - transmission-facility-id: line2 - seasons: - - season-instance: fall-2023 - effective-date: '2023-09-01T00:00:00-07:00' - continuous-operating-limit: - mva: 160 - emergency-operating-limits: - - duration-name: emergency - limit: - mva: 165 - - duration-name: load-shed - limit: - mva: 170 + $ref: '../../example-narratives/examples/seasonal-limits-snapshot.json' application/json: schema: *seasonal-rating-snapshot headers: diff --git a/docs/example-narratives/examples/seasonal-limits-snapshot.json b/docs/example-narratives/examples/seasonal-limits-snapshot.json new file mode 100644 index 0000000..9b54390 --- /dev/null +++ b/docs/example-narratives/examples/seasonal-limits-snapshot.json @@ -0,0 +1,70 @@ +{ + "snapshot-header": { + "last-updated": "2023-07-12T16:00:00-07:00", + "snapshot-provider": "X-RC", + "default-emergency-durations": [ + { + "name": "lte", + "duration-minutes": 240 + }, + { + "name": "ste", + "duration-minutes": 30 + }, + { + "name": "dal", + "duration-minutes": 15 + } + ], + "power-system-objects": [ + { + "resource-id": "8badf00d", + "alternate-identifiers": [ + { + "name": "segmentX", + "authority": "TO-NERC-ID" + }, + { + "name": "LINE1 SEG-X", + "authority": "RC-NERC-ID", + "mrid": "8badf00d" + } + ] + } + ] + }, + "limits": [ + { + "resource-id": "segmentX", + "seasons": [ + { + "season-instance": "fall", + "effective-date": "2024-04-04T01:00:00Z", + "continuous-operating-limit": { + "mva": 160 + }, + "emergency-operating-limits": [ + { + "duration-name": "ste", + "limit": { + "mva": 165 + } + }, + { + "duration-name": "lte", + "limit": { + "mva": 170 + } + }, + { + "duration-name": "dal", + "limit": { + "mva": 170 + } + } + ] + } + ] + } + ] +}