@@ -49,10 +49,6 @@ import "google/protobuf/timestamp.proto";
4949// planned microgrids, including electrical components, sensors, and the
5050// directed electrical component graph.
5151//
52- // Platform asset and market-topology metadata is used by reporting,
53- // forecasting, monitoring, trading, optimization, data science, deployment
54- // validation, and operational tooling.
55- //
5652// !!! important "Authentication"
5753// All requests to PlatformAssetsService must be signed. The key identifier
5854// and signature must be included in the request metadata (gRPC metadata /
@@ -120,7 +116,7 @@ enum MarketParticipationType {
120116
121117 // ANCILLARY_SERVICES: The relation participates in ancillary services or
122118 // flex-market services, such as FCR, aFRR, or other grid-operator services.
123- MARKET_PARTICIPATION_TYPE_ANCILLARY_SERVICES = 2 ;
119+ MARKET_PARTICIPATION_TYPE_FLEX_MARKETS = 2 ;
124120}
125121
126122// Describes the participation of a market-topology relation in a specific use
@@ -138,13 +134,10 @@ message MarketParticipation {
138134 // If set, the interval describes when this relation is valid for the given
139135 // use case. The interval is inclusive at `start_time` and exclusive at
140136 // `end_time`.
141- frequenz.api.common.v1alpha8.types.Interval validity_period = 2 ;
142-
143- // Optional. Timestamp at which this participation was cancelled.
144137 //
145- // If set, this participation should no longer be considered effective from
146- // this timestamp onward, even if `validity_period.end_time` is later .
147- optional google.protobuf.Timestamp cancel_time = 3 ;
138+ // Updating `end_time` can be used to end a participation. Updating
139+ // `start_time` can be used to move a participation into the future .
140+ frequenz.api.common.v1alpha8.types.Interval validity_period = 2 ;
148141}
149142
150143// Describes a market-topology relation between a Gridpool, Microgrid, and
@@ -189,12 +182,16 @@ message MarketParticipation {
189182//
190183// If `gridpool_id` is unset, both `microgrid_id` and
191184// `market_location_selector` must be set. In that case, the relation does
192- // not represent market participation.
193- //
194- // If `gridpool_id` is set, `delivery_area` is required.
185+ // not represent market participation, but the relation can remain as
186+ // a Microgrid-to-Market-Location relation without Gridpool participation.
187+ // Gridpool-specific fields, such as `delivery_area` and `participations`,
188+ // no longer apply once `gridpool_id` is unset. If `gridpool_id` is set,
189+ // `delivery_area` is required.
195190//
196191// `participations` are only valid when `gridpool_id` is set.
197192//
193+ // If removing `gridpool_id` would leave only `microgrid_id` or only
194+ // `market_location_selector`, no valid relation remains.
198195//
199196message MarketTopologyRelation {
200197 // Optional. The Microgrid associated with this relation.
@@ -214,8 +211,7 @@ message MarketTopologyRelation {
214211 //
215212 // If `gridpool_id` is unset, this field links the Market Location to the
216213 // Microgrid without market participation.
217- frequenz.api.common.v1alpha8.grid.MarketLocationSelector
218- market_location_selector = 2;
214+ frequenz.api.common.v1alpha8.grid.MarketLocation market_location = 2 ;
219215
220216 // Optional. The Gridpool associated with this relation.
221217 //
@@ -239,7 +235,8 @@ message MarketTopologyRelation {
239235 // energy trading may start before ancillary services, or ancillary services
240236 // may end while the Market Location remains associated for energy trading.
241237 //
242- // Participations are only valid when `gridpool_id` is set.
238+ // Participations are only valid when `gridpool_id` is set. If `gridpool_id` is
239+ // unset, this field must be empty.
243240 repeated MarketParticipation participations = 5 ;
244241}
245242
@@ -283,18 +280,21 @@ message GridpoolEnergyScheduleTimeSeriesEntry {
283280// the counterparty balancing group.
284281//
285282// !!! note "Delivery areas"
286- // `gridpool_delivery_area ` describes the delivery area of the
287- // Frequenz/Gridpool side of the scheduled exchange.
283+ // `frequenz_delivery_area ` describes the delivery area of the Frequenz
284+ // side of the scheduled exchange.
288285//
289286// `counterparty_delivery_area` describes the delivery area of the
290- // counterparty balancing group.
287+ // counterparty side of the scheduled exchange.
288+ //
289+ // These fields describe the schedule context. They do not imply that the
290+ // Gridpool itself is assigned to a single delivery area.
291291//
292- // If both delivery areas are the same, the schedule represents an internal
293- // schedule within one delivery area.
292+ // If both delivery areas are the same, the schedule represents an exchange
293+ // within one delivery area.
294294//
295- // If they differ, the schedule represents an external schedule across
296- // delivery areas and may be subject to additional matching, nomination, and
297- // capacity-right validation.
295+ // If they differ, the schedule represents an exchange across delivery areas
296+ // and may be subject to additional matching, nomination, and capacity-right
297+ // validation.
298298//
299299// !!! note "Effective validity"
300300// `validity_period` describes the originally configured schedule period.
@@ -305,8 +305,9 @@ message GridpoolEnergyScheduleTimeSeriesEntry {
305305// `validity_period`.
306306//
307307// The API does not expose an active/inactive status because such a status
308- // is derived from `validity_period`, `cancel_time`, and the client's
309- // evaluation time.
308+ // is time-dependent. Consumers can derive it by comparing the schedule's
309+ // effective validity period with the timestamp at which they evaluate the
310+ // schedule.
310311//
311312message GridpoolEnergySchedule {
312313 // Unique identifier of the Gridpool the energy schedule belongs to.
@@ -324,19 +325,23 @@ message GridpoolEnergySchedule {
324325
325326 // Delivery area of the counterparty side of the scheduled exchange.
326327 //
327- // If this is the same as `gridpool_delivery_area `, the schedule represents
328- // an internal schedule within one delivery area.
328+ // If this is the same as `frequenz_delivery_area `, the schedule represents an
329+ // exchange within one delivery area.
329330 //
330- // If this differs from `gridpool_delivery_area `, the schedule represents an
331- // external schedule across delivery areas and may be subject to additional
332- // matching, nomination, and capacity-right validation.
331+ // If this differs from `frequenz_delivery_area `, the schedule represents an
332+ // exchange across delivery areas and may be subject to additional matching,
333+ // nomination, and capacity-right validation.
333334 frequenz.api.common.v1alpha8.grid.DeliveryArea counterparty_delivery_area = 5 ;
334335
335- // Delivery area of the Frequenz/Gridpool side of the scheduled exchange.
336+ // Delivery area of the Frequenz side of the scheduled exchange.
337+ //
338+ // This is the delivery area in which the Frequenz balancing group participates
339+ // for this schedule.
336340 //
337- // This is the delivery area in which the Frequenz balancing group
338- // participates for this schedule.
339- frequenz.api.common.v1alpha8.grid.DeliveryArea gridpool_delivery_area = 6 ;
341+ // This field does not imply that the Gridpool itself belongs to only one
342+ // delivery area. A Gridpool can have relations or schedules in different
343+ // delivery areas.
344+ frequenz.api.common.v1alpha8.grid.DeliveryArea frequenz_delivery_area = 6 ;
340345
341346 // Direction of the scheduled energy exchange from the perspective of the
342347 // Frequenz balancing group.
@@ -422,13 +427,22 @@ message ListGridpoolEnergySchedulesRequest {
422427 // If empty, no direction filtering is applied.
423428 repeated GridpoolEnergyScheduleDirection directions = 2 ;
424429
425- // Optional. Return only schedule entries whose `start_time` falls within
426- // this interval.
427- //
428- // The interval is inclusive at `start_time` and exclusive at `end_time`.
429- //
430- // If omitted, no delivery-time filtering is applied.
431- frequenz.api.common.v1alpha8.types.Interval delivery_time_interval = 3 ;
430+ // Optional. Restrict returned `time_series` entries to delivery periods that
431+ // overlap this interval.
432+ //
433+ // A time-series entry matches if its delivery period overlaps the requested
434+ // interval:
435+ //
436+ // ```text
437+ // entry.start_time < time_series_interval.end_time
438+ // AND
439+ // entry.start_time + schedule.delivery_duration >
440+ // time_series_interval.start_time
441+ // ```
442+ //
443+ // The returned schedules contain only matching `time_series` entries. If
444+ // omitted, no time-series filtering is applied.
445+ frequenz.api.common.v1alpha8.types.Interval time_series_interval = 3 ;
432446
433447 // Optional. Return only schedules whose effective validity period overlaps
434448 // this interval.
@@ -497,11 +511,16 @@ message ListMarketTopologyRelationsRequest {
497511 // If empty, no Microgrid-ID filtering is applied.
498512 repeated uint64 microgrid_ids = 2 ;
499513
500- // Optional. Return only relations involving any of these Market Locations.
514+ // Optional. Return only relations involving Market Locations whose ID values
515+ // match any of these filters.
516+ //
517+ // This filter does not require callers to provide the Market Area. It is useful
518+ // when the Market Location identifier is known, but the Market Area has not
519+ // been resolved yet.
501520 //
502- // If empty, no Market Location filtering is applied.
503- repeated frequenz.api.common.v1alpha8.grid.MarketLocationSelector
504- market_location_selectors = 3;
521+ // If empty, no Market Location-ID filtering is applied.
522+ repeated frequenz.api.common.v1alpha8.grid.MarketLocationIdValue
523+ market_location_id_values = 3;
505524
506525 // Optional. Return only relations applying to any of these delivery areas.
507526 //
@@ -562,8 +581,9 @@ message ListMicrogridsRequest {
562581 // If empty, no microgrid-ID filtering is applied.
563582 repeated uint64 microgrid_ids = 1 ;
564583
565- // Optional. Return only microgrids assigned to any of these Gridpools
566- // within the current enterprise scope.
584+ // Optional. Return only microgrids that are part of a market-topology
585+ // relation involving any of these Gridpools within the current enterprise
586+ // scope.
567587 //
568588 // If empty, no Gridpool-ID filtering is applied.
569589 repeated uint64 gridpool_ids = 2 ;
0 commit comments