mms-client 1.0.5__py3-none-any.whl → 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1064 @@
1
+ """Contains objects for MMS resources."""
2
+
3
+ # pylint: disable=too-many-lines
4
+
5
+ from datetime import date as Date
6
+ from decimal import Decimal
7
+ from enum import Enum
8
+ from typing import Annotated
9
+ from typing import List
10
+ from typing import Optional
11
+
12
+ from pydantic_core import PydanticUndefined
13
+ from pydantic_xml import attr
14
+ from pydantic_xml import element
15
+ from pydantic_xml import wrapped
16
+
17
+ from mms_client.types.base import Payload
18
+ from mms_client.types.enums import AreaCode
19
+ from mms_client.types.enums import Frequency
20
+ from mms_client.types.fields import ASCII_TEXT
21
+ from mms_client.types.fields import JAPANESE_ASCII_TEXT
22
+ from mms_client.types.fields import JAPANESE_TEXT
23
+ from mms_client.types.fields import address
24
+ from mms_client.types.fields import capacity
25
+ from mms_client.types.fields import hour
26
+ from mms_client.types.fields import minute
27
+ from mms_client.types.fields import participant as participant_name
28
+ from mms_client.types.fields import pattern_name
29
+ from mms_client.types.fields import percentage
30
+ from mms_client.types.fields import phone
31
+ from mms_client.types.fields import price
32
+ from mms_client.types.fields import resource_name
33
+ from mms_client.types.fields import resource_short_name
34
+ from mms_client.types.fields import system_code
35
+ from mms_client.types.fields import transaction_id
36
+
37
+
38
+ def output(alias: str, optional: bool = False):
39
+ """Create a field for an output value.
40
+
41
+ Arguments:
42
+ alias (str): The name of the alias to assign to the Pydanitc field. This value will be used to map the field
43
+ to the JSON/XML key.
44
+ optional (bool): If True, the field will be optional with a default of None. If False, the field will be
45
+ required, with no default.
46
+
47
+ Returns: A Pydantic Field object for the output value.
48
+ """
49
+ return attr(
50
+ default=None if optional else PydanticUndefined,
51
+ name=alias,
52
+ gt=-10000000,
53
+ lt=10000000,
54
+ )
55
+
56
+
57
+ def time(alias: str, optional: bool = False):
58
+ """Create a field for a time value.
59
+
60
+ Arguments:
61
+ alias (str): The name of the alias to assign to the Pydanitc field. This value will be used to map the field
62
+ to the JSON/XML key.
63
+ optional (bool): If True, the field will be optional with a default of None. If False, the field will be
64
+ required, with no default.
65
+
66
+ Returns: A Pydantic Field object for the time value.
67
+ """
68
+ return attr(
69
+ default=None if optional else PydanticUndefined,
70
+ name=alias,
71
+ min_length=8,
72
+ max_length=8,
73
+ pattern=r"^[0-9]{2}:[0-5][0-9]:[0-5][0-9]$",
74
+ )
75
+
76
+
77
+ def power_supply(alias: str, optional: bool = False):
78
+ """Create a field for a power supply value.
79
+
80
+ Arguments:
81
+ alias (str): The name of the alias to assign to the Pydanitc field. This value will be used to map the field
82
+ to the JSON/XML key.
83
+ optional (bool): If True, the field will be optional with a default of None. If False, the field will be
84
+ required, with no default.
85
+
86
+ Returns: A Pydantic Field object for the power supply value.
87
+ """
88
+ return attr(
89
+ default=None if optional else PydanticUndefined,
90
+ name=alias,
91
+ ge=0,
92
+ lt=10000000,
93
+ )
94
+
95
+
96
+ def continuous_operation_frequency(alias: str, optional: bool = False):
97
+ """Create a field for a continuous operation frequency value.
98
+
99
+ Arguments:
100
+ alias (str): The name of the alias to assign to the Pydanitc field. This value will be used to map the field
101
+ to the JSON/XML key.
102
+ optional (bool): If True, the field will be optional with a default of None. If False, the field will be
103
+ required, with no default.
104
+
105
+ Returns: A Pydantic Field object for the continuous operation frequency value.
106
+ """
107
+ return attr(
108
+ default=None if optional else PydanticUndefined,
109
+ name=alias,
110
+ ge=40.0,
111
+ le=70.0,
112
+ decimal_places=1,
113
+ )
114
+
115
+
116
+ class StartupEventType(Enum):
117
+ """Represents the type of event in the startup pattern."""
118
+
119
+ STARTUP_OPERATION = "1"
120
+ BOILER_IGNITION = "2"
121
+ TURBINE_STARTUP = "3"
122
+ CONNECTION = "4"
123
+ OUTPUT_SETPOINT1 = "5"
124
+ OUTPUT_SETPOINT2 = "6"
125
+ OUTPUT_SETPOINT3 = "7"
126
+ OUTPUT_SETPOINT4 = "8"
127
+ OUTPUT_SETPOINT5 = "9"
128
+ OUTPUT_SETPOINT6 = "10"
129
+ OUTPUT_SETPOINT7 = "11"
130
+ OUTPUT_SETPOINT8 = "12"
131
+ OUTPUT_SETPOINT9 = "13"
132
+ OUTPUT_SETPOINT10 = "14"
133
+ OUTPUT_SETPOINT11 = "15"
134
+ OUTPUT_SETPOINT12 = "16"
135
+ OUTPUT_SETPOINT13 = "17"
136
+ OUTPUT_SETPOINT14 = "18"
137
+ OUTPUT_SETPOINT15 = "19"
138
+ OUTPUT_SETPOINT16 = "20"
139
+ OUTPUT_SETPOINT17 = "21"
140
+ OUTPUT_SETPOINT18 = "22"
141
+ OUTPUT_SETPOINT19 = "23"
142
+ OUTPUT_SETPOINT20 = "24"
143
+ POWER_SUPPLY_OPERATION = "25"
144
+
145
+
146
+ class StopEventType(Enum):
147
+ """Represents the type of event in the stop pattern."""
148
+
149
+ OUTPUT_SETPOINT1 = "1"
150
+ OUTPUT_SETPOINT2 = "2"
151
+ OUTPUT_SETPOINT3 = "3"
152
+ OUTPUT_SETPOINT4 = "4"
153
+ OUTPUT_SETPOINT5 = "5"
154
+ OUTPUT_SETPOINT6 = "6"
155
+ OUTPUT_SETPOINT7 = "7"
156
+ OUTPUT_SETPOINT8 = "8"
157
+ OUTPUT_SETPOINT9 = "9"
158
+ OUTPUT_SETPOINT10 = "10"
159
+ OUTPUT_SETPOINT11 = "11"
160
+ OUTPUT_SETPOINT12 = "12"
161
+ OUTPUT_SETPOINT13 = "13"
162
+ OUTPUT_SETPOINT14 = "14"
163
+ OUTPUT_SETPOINT15 = "15"
164
+ OUTPUT_SETPOINT16 = "16"
165
+ OUTPUT_SETPOINT17 = "17"
166
+ OUTPUT_SETPOINT18 = "18"
167
+ OUTPUT_SETPOINT19 = "19"
168
+ OUTPUT_SETPOINT20 = "20"
169
+ DISCONNECTION = "21"
170
+
171
+
172
+ class ContractType(Enum):
173
+ """Describes the type of contract for a power generation unit."""
174
+
175
+ MARKET = "1"
176
+ MARKET_AND_POWER_SUPPLY_2 = "2"
177
+ POWER_SUPPLY_2 = "3"
178
+ ONLY_POWER_SUPPLY_1 = "4"
179
+ MARKET_AND_REMAINING_RESERVE_UTILIZATION = "5"
180
+ REMAINING_RESERVE_UTILIZATION = "6"
181
+
182
+
183
+ class ResourceType(Enum):
184
+ """How the power generation unit produces electricity."""
185
+
186
+ THERMAL = "01"
187
+ HYDRO = "02"
188
+ PUMP = "03"
189
+ BATTERY = "04"
190
+ VPP_GEN = "05"
191
+ VPP_GEN_AND_DEM = "06"
192
+ VPP_DEM = "07"
193
+
194
+
195
+ class RemainingReserveAvailability(Enum):
196
+ """Describes the availability of remaining reserves for a power generation unit."""
197
+
198
+ NOT_AVAILABLE = "0"
199
+ AVAILABLE_FOR_UP_ONLY = "1"
200
+ AVAILABLE_FOR_DOWN_ONLY = "2"
201
+ AVAILABLE_FOR_UP_AND_DOWN = "3"
202
+
203
+
204
+ class CommandMonitorMethod(Enum):
205
+ """Describes how the power generation unit is monitored and commanded."""
206
+
207
+ DEDICATED_LINE = "1"
208
+ SIMPLE_COMMAND = "2"
209
+ OFFLINE = "3"
210
+
211
+
212
+ class SignalType(Enum):
213
+ """Describes the type of signal used to monitor and command a power generation unit."""
214
+
215
+ ACTUAL_OUTPUT_ORDER = "1"
216
+ DIFFERENTIAL_OUTPUT_ORDER = "2"
217
+
218
+
219
+ class BaseLineSettingMethod(Enum):
220
+ """Describe how the baseline is set for a power generation unit."""
221
+
222
+ PREDICTION_BASE = "1"
223
+ MEASUREMENT_BASE = "2"
224
+
225
+
226
+ class ThermalType(Enum):
227
+ """Describes the type of thermal power generation unit."""
228
+
229
+ GT = "1"
230
+ GTCC = "2"
231
+ OTHER = "9"
232
+
233
+
234
+ class BooleanFlag(Enum):
235
+ """Describes a boolean flag.
236
+
237
+ This could literally be a Boolean value but it's coded in the reference as an enum and I don't want to create a
238
+ custom serializer for it.
239
+ """
240
+
241
+ YES = "1"
242
+ NO = "0"
243
+
244
+
245
+ class OverrideOption(Enum):
246
+ """Describes the override option for a power generation unit."""
247
+
248
+ VIOLATION = "VIOLATION"
249
+ OVERRIDE = "OVERRIDE"
250
+
251
+
252
+ class Status(Enum):
253
+ """Describes the status of a power generation unit submission."""
254
+
255
+ IN_PROGRESS = "WORKING"
256
+ SUBMITTED = "SUBMITTED"
257
+ APPROVED = "APPROVED"
258
+ DENIED = "DECLINED"
259
+
260
+
261
+ class OutputBand(Payload, tag="OutputBandInfo"):
262
+ """Output band contract.
263
+
264
+ The contract type is mandatory for THERMAL (thermal power generation), HYDRO (hydroelectric power generation), and
265
+ PUMP (pumped storage power generation) power sources, except for ONLY_POWER_SUPPLY_1. It cannot be set for other
266
+ power sources.
267
+ """
268
+
269
+ # The output of the band, in kW
270
+ output_kW: int = output("Output")
271
+
272
+ # The bandwidth of the gas fuel turbine, in kW. It represents the range of power outputs that the turbine can
273
+ # efficiently produce while maintaining stable operation. This parameter is important for determining the
274
+ # flexibility and versatility of the turbine in responding to varying demands on the electrical grid. A wider GF
275
+ # width allows the turbine to adjust its output more effectively to match fluctuations in electricity demand.
276
+ gf_bandwidth_kW: int = capacity("GfWidth", 0)
277
+
278
+ # The bandwidth of the load-frequency control, in kW. It represents the range over which a power generation system
279
+ # can adjust its output in response to changes in load demand or frequency deviations on the electrical grid. A
280
+ # wider LFC bandwidth indicates that the power generation system can respond more quickly and effectively to
281
+ # fluctuations in electricity demand or frequency variations, thereby helping to maintain grid stability.
282
+ lfc_bandwidth_kW: int = capacity("AfcWidth", 0)
283
+
284
+ # The variation speed of the LFC, in kW/min. It represents the speed of the Load-Frequency Control (LFC) function,
285
+ # which ensures the stability of the power system in response to rapid fluctuations such as frequency changes. A
286
+ # higher LFC change rate indicates that the power system can respond quickly to frequency and load changes, thereby
287
+ # maintaining stability.
288
+ lfc_variation_speed_kW_min: int = capacity("AfcVariationSpeed", 0)
289
+
290
+ # The Energy Discharge Curve change rate, in kW/min. It refers to the rate at which the energy discharge curve
291
+ # changes in response to fluctuations in power demand or supply. A higher EDC change rate indicates that the
292
+ # energy discharge curve can adjust more rapidly to changes in demand or supply conditions. This parameter is
293
+ # important for ensuring the stability and reliability of the power system.
294
+ edc_change_rate_kW_min: int = capacity("OtmVariationSpeed", 0)
295
+
296
+ # The EDC + LFC variation rate. It refers to the rate of change in both the Energy Discharge Curve (EDC) and the
297
+ # Load Frequency Control (LFC) parameters within a power system, combining both aspects to provide a comprehensive
298
+ # understanding of how quickly the power system can adapt to changes in energy discharge capability and frequency
299
+ # control requirements. This parameter is crucial for assessing the dynamic performance and stability of the power
300
+ # grid under varying operating conditions.
301
+ edc_lfc_change_rate_kW_min: int = capacity("AfcOtmVariationSpeed", 0)
302
+
303
+
304
+ class SwitchOutput(Payload, tag="SwitchOutputInfo"):
305
+ """Switching contract.
306
+
307
+ Switching output refers to the amount of electrical power generated when switching power supply between different
308
+ generating facilities or power sources in an electrical system. It indicates the minimum amount of power that the
309
+ system generates or receives when shifting loads from one generating facility to another. The reasons for switching
310
+ may include routine maintenance, abnormal operation of generating facilities, or fluctuations in demand.
311
+
312
+ The contract type is mandatory for THERMAL (thermal power generation) power sources, except ONLY_POWER_SUPPLY_1.
313
+ It cannot be set for other power sources.
314
+ """
315
+
316
+ # The switching output, in kW
317
+ output_kW: int = capacity("Output", 0)
318
+
319
+ # Required switching time for EDC/LFC operable output band
320
+ switch_time_min: int = minute("SwitchTime")
321
+
322
+
323
+ class AfcMinimumOutput(Payload, tag="OutputRangeBelowAfcInfo"):
324
+ """Minimum Output - EDC/LFC Operable Minimum Output contract.
325
+
326
+ Contains data related to the minimum power output capability of a power generation unit, specifically concerning
327
+ the operation of EDC (Economic Dispatch Control) and LFC (Load Frequency Control). It provides data related to the
328
+ lowest power output of a generating unit, including how this minimum output affects its participation in economic
329
+ dispatch and load frequency control operations within the power system.
330
+
331
+ The contract type is mandatory for THERMAL (thermal power generation) power sources, except for ONLY_POWER_SUPPLY_1.
332
+ It cannot be set for other power sources.
333
+ """
334
+
335
+ # The minimum output, in kW
336
+ output_kW: int = capacity("Output", 0)
337
+
338
+ # Operation continuity time, in hours. Refers to the duration for which a power generation unit needs to remain
339
+ # operational. In other words, it represents the amount of time that a power generation unit must operate at a
340
+ # steady load. This is necessary to ensure stability in situations such as rapid changes in power demand or under
341
+ # specific conditions. The operational continuity time is determined based on operational requirements, constraints,
342
+ # and the characteristics of the power generation unit.
343
+ operation_time_hr: Decimal = hour("OperationTime")
344
+
345
+ # The minimum output variation speed, in kW/min. It refers to the rate at which the power output of a generating
346
+ # unit can change over time. It measures how quickly the power output can increase or decrease in response to
347
+ # changes in demand or other factors. Faster output variation speeds indicate that the unit can adjust its output
348
+ # more rapidly, providing greater flexibility to match fluctuations in demand and maintain system stability. This
349
+ # parameter is important for ensuring grid reliability and efficiency in managing power generation resources.
350
+ variation_speed_kW_min: int = capacity("OutputVariationSpeed", 0)
351
+
352
+
353
+ class StartupEvent(Payload):
354
+ """Describes a single event in the startup pattern of a power generation unit."""
355
+
356
+ # The name of the event. Each startup pattern must have a unique name. The STARTUP_OPERATION, BOILER_IGNITION,
357
+ # TURBINE_STARTUP, CONNECTION, and POWER_SUPPLY_OPERATION events are mandatory. At least one of the output set
358
+ # points 1-20 is required.
359
+ name: StartupEventType = attr(name="EventName")
360
+
361
+ # the time required to complete the event, within -99:59 to 99:59. The time is in the format "HH:MM" or "-HH:MM".
362
+ change_time: str = attr(
363
+ name="ChangeTime",
364
+ pattern=r"^([0-9]{2}:[0-5][0-9])|(-00:(([0-5][1-9])|([1-5][0-9])))|(-(([0-9][1-9])|([1-9][0-9])):[0-5][0-9])$",
365
+ )
366
+
367
+ # The output of the event, in kW
368
+ output_kw: int = capacity("Output", 0)
369
+
370
+
371
+ class StartupPattern(Payload, tag="StartupPatternInfo"):
372
+ """Describes the startup pattern of a power generation unit.
373
+
374
+ Refers to the specific parameters or configurations associated with the process of starting up the unit for power
375
+ generation. This data type includes information such as the time duration, sequence of operations, and energy
376
+ consumption associated with starting up the unit from a standby or offline state to full operational capacity. The
377
+ startup pattern data provides insights into the efficiency, reliability, and cost implications of initiating power
378
+ generation from the unit, which are crucial for economic analysis, optimization, and decision-making in the energy
379
+ sector.
380
+
381
+ The contract type is mandatory for THERMAL (thermal power generation) power sources, except for ONLY_POWER_SUPPLY_1.
382
+ It cannot be set for other power sources.
383
+ """
384
+
385
+ # The name of the startup pattern. These must be unique with respect to the power generation unit.
386
+ pattern_name: str = pattern_name("PatternName")
387
+
388
+ # The events associated with this startup pattern
389
+ events: List[StartupEvent] = element(tag="StartupPatternEvent", min_length=6, max_length=25)
390
+
391
+
392
+ class ShutdownEvent(Payload):
393
+ """Describes a single event in the stop pattern of a power generation unit."""
394
+
395
+ # The name of the event. Each shutdown pattern must have a unique name. The DISCONNECTION event is mandatory. At
396
+ # least one of the output change points 1-20 is required.
397
+ name: StopEventType = attr(name="EventName")
398
+
399
+ # The time required to complete the event, within -99:59 to 00:00. The time is in the format "-HH:MM".
400
+ change_time: str = attr(
401
+ name="ChangeTime",
402
+ pattern=r"^00:00|(-00:(([0-5][1-9])|([1-5][0-9])))|(-(([0-9][1-9])|([1-9][0-9])):[0-5][0-9])$",
403
+ )
404
+
405
+ # The output of the event, in kW
406
+ output_kw: int = capacity("Output", 0)
407
+
408
+
409
+ class ShutdownPattern(Payload, tag="StopPatternInfo"):
410
+ """Describes the stop pattern of a power generation unit.
411
+
412
+ Refers to the specific parameters or configurations associated with the process of shutting down the unit for power
413
+ generation. This data type includes information such as the time duration, sequence of operations, and energy
414
+ consumption associated with shutting down the unit from a standby or offline state to full operational capacity. The
415
+ shutdown pattern data provides insights into the efficiency, reliability, and cost implications of disconnecting
416
+ power generation from the unit, which are crucial for economic analysis, optimization, and decision-making in the
417
+ energy sector.
418
+
419
+ The contract type is mandatory for THERMAL (thermal power generation) power sources, except for ONLY_POWER_SUPPLY_1.
420
+ It cannot be set for other power sources.
421
+ """
422
+
423
+ # The name of the stop pattern. These must be unique with respect to the power generation unit.
424
+ pattern_name: str = pattern_name("PatternName")
425
+
426
+ # The events associated with this stop pattern
427
+ events: List[ShutdownEvent] = element(tag="StopPatternEvent", min_length=2, max_length=21)
428
+
429
+
430
+ class ResourceData(Payload, tag="Resource"):
431
+ """Contains the data common to both resource requests and responses."""
432
+
433
+ # The output bands associated with this resource
434
+ output_bands: Optional[List[OutputBand]] = wrapped(default=None, path="OutputBand", min_length=1, max_length=20)
435
+
436
+ # The switching outputs associated with this resource
437
+ switch_outputs: Optional[List[SwitchOutput]] = wrapped(
438
+ default=None, path="SwitchOutput", min_length=1, max_length=20
439
+ )
440
+
441
+ # The minimum EDC/LFC outputs associated with this resource
442
+ afc_minimum_outputs: Optional[List[AfcMinimumOutput]] = wrapped(
443
+ default=None, path="OutputRangeBelowAfc", min_length=1, max_length=20
444
+ )
445
+
446
+ # The startup patterns associated with this resource
447
+ startup_patterns: Optional[List[StartupPattern]] = wrapped(
448
+ default=None, path="StartupPattern", min_length=1, max_length=20
449
+ )
450
+
451
+ # The stop patterns associated with this resource
452
+ shutdown_patterns: Optional[List[ShutdownPattern]] = wrapped(
453
+ default=None, path="StopPattern", min_length=1, max_length=20
454
+ )
455
+
456
+ # Any comments attached to the resource
457
+ comments: Optional[str] = element(
458
+ default=None, tag="Comments", min_length=1, max_length=128, pattern=JAPANESE_ASCII_TEXT
459
+ )
460
+
461
+ # The MMS code of the business entity to which the registration applies
462
+ participant: str = participant_name("ParticipantName")
463
+
464
+ # A code that uniquely identifies the power generation unit
465
+ name: str = resource_name("ResourceName")
466
+
467
+ # How the power generation unit is used in the market
468
+ contract_type: ContractType = attr(name="ContractType")
469
+
470
+ # How the power generation unit produces electricity
471
+ resource_type: ResourceType = attr(name="ResourceType")
472
+
473
+ # The region in which the power generation unit is located and in which its energy will be traded
474
+ area: AreaCode = attr(name="Area")
475
+
476
+ # The date from which the power generation unit is available to trade
477
+ start: Date = attr(name="StartDate")
478
+
479
+ # The date until which the power generation unit is available to trade
480
+ end: Optional[Date] = attr(default=None, name="EndDate")
481
+
482
+ # The grid code of the power generation unit
483
+ system_code: str = system_code("SystemCode")
484
+
485
+ # An abbreviated name for the power generation unit
486
+ short_name: str = resource_short_name("ResourceShortName")
487
+
488
+ # The full name for the power generation unit
489
+ full_name: str = attr("ResourceLongName", min_length=1, max_length=50, pattern=JAPANESE_TEXT)
490
+
491
+ # The balancing group code. For non-VPP resources, it is required; for VPP resources, it is optional.
492
+ balancing_group: Optional[str] = attr(
493
+ default=None, name="BgCode", min_length=5, max_length=5, pattern=r"^[a-zA-Z0-9]{5}$"
494
+ )
495
+
496
+ # Whether or not the resource is primary control power. Refers to the ability of a power generation unit or system
497
+ # to rapidly adjust its output in response to fluctuations in demand or supply within the electrical grid. This
498
+ # primary control power is essential for maintaining the stability and frequency of the grid, especially during
499
+ # sudden changes in load or generation. Typically, primary control power is provided by resources such as
500
+ # hydroelectric plants, natural gas turbines, or other fast-responding power generation assets. If you want to
501
+ # allow market participation for the specified product category, you should set this to True.
502
+ has_primary: Optional[bool] = attr(default=None, name="Pri")
503
+
504
+ # The primary control power response time, in the format "HH:MM:SS". It refers to the time required for a power
505
+ # generation unit to adjust its output in response to changes in demand or supply within the electrical grid. A
506
+ # faster primary control power response time indicates that the unit can respond more quickly to fluctuations in
507
+ # frequency or load, thereby helping to maintain grid stability. This parameter is important for assessing the
508
+ # dynamic performance and reliability of the power system under varying operating conditions. Not applicable for
509
+ # power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_primary is True.
510
+ primary_response_time: Optional[str] = time("PriResponseTime", True)
511
+
512
+ # The primary control power continuous time, in the format "HH:MM:SS". It refers to the duration for which a
513
+ # primary control (such as frequency control) is continuously applied by a power generation unit. It represents the
514
+ # period during which the power plant or generating unit can sustain a continuous adjustment to its output to
515
+ # maintain system frequency within acceptable limits. This parameter is essential for ensuring grid stability and
516
+ # reliability by providing continuous support to the power system during frequency disturbances or fluctuations.
517
+ # Not applicable for power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_primary is True.
518
+ primary_continuous_time: Optional[str] = time("PriContinuousTime", True)
519
+
520
+ # The amount of electricity that a power provider can supply. It represents the quantity of electricity that can be
521
+ # reliably supplied by generating facilities or power supply equipment within a specific time frame. The value can
522
+ # be either 0 or within the range of 1000 to 9999999. It is mandatory if contract_type is not ONLY_POWER_SUPPLY_1
523
+ # and the power source type is not VPP. For other power source types, it must not be set. If resource_type is HYDRO
524
+ # or BATTERY, the value of this field must be less than or equal to the maximum of "rated output + GF width
525
+ # (outside rated output) - minimum output" or "(pumping/charging - output) - minimum output." If resource_type is
526
+ # THERMAL or HYDRO, the value of this field must be less than or equal to "rated output + GF width (outside rated
527
+ # output) - minimum output." If has_primary is "false," the value of this field must be 0.
528
+ primary_available_capacity_kW: Optional[int] = power_supply("PriMaximumSupplyQuantity", True)
529
+
530
+ # How the surplus capacity of a power generation unit can be utilized. For contract_type MARKET, POWER_SUPPLY_2,
531
+ # and ONLY_POWER_SUPPLY_1, this field must be set to NOT_AVAILABLE.
532
+ primary_remaining_reserve_utilization: RemainingReserveAvailability = attr(name="PriRemResvUtilization")
533
+
534
+ # The amount of surplus power that can be supplied for utilization, in kW. If primary_remaining_reserve_utilization
535
+ # is set to AVAILABLE_FOR_UP_ONLY, AVAILABLE_FOR_DOWN_ONLY, or AVAILABLE_FOR_UP_AND_DOWN, this field must be set.
536
+ # If primary_remaining_reserve_utilization is set to NOT_AVAILABLE, this field must not be set.
537
+ primary_remaining_reserve_capacity_kW: Optional[int] = capacity("PriRemResvMaximumSupplyQuantity", 0, True)
538
+
539
+ # Whether or not the resource is secondary 1 control power. Secondary control power, also known as secondary reserve
540
+ # or frequency containment reserve, refers to a type of reserve power that is used to stabilize the grid frequency
541
+ # in the event of sudden changes in supply or demand. It is one of the mechanisms used in the regulation of grid
542
+ # frequency and is typically provided by power plants or other sources that can quickly adjust their output in
543
+ # response to frequency deviations. The secondary control power is activated automatically and rapidly in response
544
+ # to frequency deviations detected by the grid's control system. If you want to allow market participation for the
545
+ # specified product category, you should set this to True.
546
+ has_secondary_1: Optional[bool] = attr(default=None, name="Sec1")
547
+
548
+ # The secondary 1 control power response time, in the format "HH:MM:SS". It refers to the time required for a power
549
+ # generation unit to adjust its output in response to changes in demand or supply within the electrical grid. A
550
+ # faster seoncdary 1 control power response time indicates that the unit can respond more quickly to fluctuations
551
+ # in frequency or load, thereby helping to maintain grid stability. This parameter is important for assessing the
552
+ # dynamic performance and reliability of the power system under varying operating conditions. Not applicable for
553
+ # power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_secondary_1 is True.
554
+ secondary_1_response_time: Optional[str] = time("Sec1ResponseTime", True)
555
+
556
+ # The secondary 1 control power continuous time, in the format "HH:MM:SS". It refers to the duration for which a
557
+ # secondary 1 control (such as frequency control) is continuously applied by a power generation unit. It represents
558
+ # the period during which the power plant or generating unit can sustain a continuous adjustment to its output to
559
+ # maintain system frequency within acceptable limits. This parameter is essential for ensuring grid stability and
560
+ # reliability by providing continuous support to the power system during frequency disturbances or fluctuations.
561
+ # Not applicable for power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_secondary_1
562
+ # is True.
563
+ secondary_1_continuous_time: Optional[str] = time("Sec1ContinuousTime", True)
564
+
565
+ # The amount of electricity that a power provider can supply. It represents the quantity of electricity that can be
566
+ # reliably supplied by generating facilities or power supply equipment within a specific time frame. The value can
567
+ # be either 0 or within the range of 1000 to 9999999. It is mandatory if the contract_type is not
568
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP. For other power source types, it must not be set. If
569
+ # resource_type is HYDRO or BATTERY, the value of this field must be less than or equal to the maximum of "rated
570
+ # output - minimum output" or "(pumping/charging - output) - minimum output." If resource_type is THERMAL or HYDRO,
571
+ # the value of this field must be less than or equal to "rated output - minimum output." If has_secondary_1 is
572
+ # False, the value of this field must be 0.
573
+ secondary_1_available_capacity_kW: Optional[int] = power_supply("Sec1MaximumSupplyQuantity", True)
574
+
575
+ # How the surplus capacity of a power generation unit can be utilized. For contract_type of MARKET, POWER_SUPPLY_2,
576
+ # and ONLY_POWER_SUPPLY_1, this field must be set to NOT_AVAILABLE.
577
+ secondary_1_remaining_reserve_utilization: RemainingReserveAvailability = attr(name="Sec1RemResvUtilization")
578
+
579
+ # The amount of surplus power that can be supplied for utilization, in kW. If
580
+ # secondary_1_remaining_reserve_utilization is set to AVAILABLE_FOR_UP_ONLY, AVAILABLE_FOR_DOWN_ONLY, or
581
+ # AVAILABLE_FOR_UP_AND_DOWN, this field must be set. If secondary_1_remaining_reserve_utilization is set to
582
+ # NOT_AVAILABLE, this field must not be set.
583
+ secondary_1_remaining_reserve_capacity_kW: Optional[int] = capacity("Sec1RemResvMaximumSupplyQuantity", 0, True)
584
+
585
+ # Whether or not the resource is secondary 2 control power. Secondary control power, also known as secondary reserve
586
+ # or frequency containment reserve, refers to a type of reserve power that is used to stabilize the grid frequency
587
+ # in the event of sudden changes in supply or demand. It is one of the mechanisms used in the regulation of grid
588
+ # frequency and is typically provided by power plants or other sources that can quickly adjust their output in
589
+ # response to frequency deviations. The secondary control power is activated automatically and rapidly in response
590
+ # to frequency deviations detected by the grid's control system. If you want to allow market participation for the
591
+ # specified product category, you should set this to True.
592
+ has_secondary_2: Optional[bool] = attr(default=None, name="Sec2")
593
+
594
+ # The secondary 2 control power response time, in the format "HH:MM:SS". It refers to the time required for a power
595
+ # generation unit to adjust its output in response to changes in demand or supply within the electrical grid. A
596
+ # faster seoncdary 2 control power response time indicates that the unit can respond more quickly to fluctuations
597
+ # in frequency or load, thereby helping to maintain grid stability. This parameter is important for assessing the
598
+ # dynamic performance and reliability of the power system under varying operating conditions. Not applicable for
599
+ # power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_secondary_2 is True.
600
+ secondary_2_response_time: Optional[str] = time("Sec2ResponseTime", True)
601
+
602
+ # The secondary 2 control power continuous time, in the format "HH:MM:SS". It refers to the duration for which a
603
+ # secondary 2 control (such as frequency control) is continuously applied by a power generation unit. It represents
604
+ # the period during which the power plant or generating unit can sustain a continuous adjustment to its output to
605
+ # maintain system frequency within acceptable limits. This parameter is essential for ensuring grid stability and
606
+ # reliability by providing continuous support to the power system during frequency disturbances or fluctuations.
607
+ # Not applicable for power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_secondary_2
608
+ # is True.
609
+ secondary_2_continuous_time: Optional[str] = time("Sec2ContinuousTime", True)
610
+
611
+ # The secondary 2 control power down time, in the format "HH:MM:SS". Not applicable for power sources with
612
+ # contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_secondary_2 is True.
613
+ secondary_2_downtime: Optional[str] = time("Sec2DownTime", True)
614
+
615
+ # The amount of electricity that a power provider can supply. It represents the quantity of electricity that can be
616
+ # reliably supplied by generating facilities or power supply equipment within a specific time frame. The value can
617
+ # be either 0 or within the range of 1000 to 9999999. It is mandatory if the contract_type is not
618
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP. For other power source types, it must not be set. The value of
619
+ # this field must be less than or equal to the "rated output." If has_secondary_2 is "false," the value of this
620
+ # field must be 0.
621
+ secondary_2_available_capacity_kW: Optional[int] = power_supply("Sec2MaximumSupplyQuantity", True)
622
+
623
+ # How the surplus capacity of a power generation unit can be utilized. For contract_type of MARKET, POWER_SUPPLY_2,
624
+ # and ONLY_POWER_SUPPLY_1, this field must be set to NOT_AVAILABLE.
625
+ secondary_2_remaining_reserve_utilization: RemainingReserveAvailability = attr(name="Sec2RemResvUtilization")
626
+
627
+ # The amount of surplus power that can be supplied for utilization, in kW. If
628
+ # secondary_2_remaining_reserve_utilization is set to AVAILABLE_FOR_UP_ONLY, AVAILABLE_FOR_DOWN_ONLY, or
629
+ # AVAILABLE_FOR_UP_AND_DOWN, this field must be set. If secondary_2_remaining_reserve_utilization is set to
630
+ # NOT_AVAILABLE, this field must not be set.
631
+ secondary_2_remaining_reserve_capacity_kW: Optional[int] = capacity("Sec2RemResvMaximumSupplyQuantity", 0, True)
632
+
633
+ # Whether or not the resource is tertairy 1 control power. Tertiary control power refers to the capacity of a
634
+ # power generation unit or system to provide regulation services at the tertiary level of frequency control in
635
+ # an electrical grid. In an electrical grid, frequency regulation is typically categorized into primary, secondary,
636
+ # and tertiary control levels, each serving a specific role in maintaining grid stability. Tertiary control,
637
+ # also known as frequency containment reserve (FCR), operates on a slower timescale compared to primary and
638
+ # secondary control. It helps to fine-tune grid frequency over longer periods, usually several minutes to hours,
639
+ # by adjusting the output of power generation units. The tertiary control power is often provided by power plants
640
+ # that can adjust their output relatively quickly but are not as fast as those providing primary and secondary
641
+ # control. This control level helps to ensure that the grid frequency remains within acceptable limits, thus
642
+ # maintaining grid stability and reliability.If you want to allow market participation for the specified product
643
+ # category, you should set this to True.
644
+ has_tertiary_1: Optional[bool] = attr(default=None, name="Ter1")
645
+
646
+ # The tertiary 1 control power response time, in the format "HH:MM:SS". It refers to the time required for a power
647
+ # generation unit to adjust its output in response to changes in demand or supply within the electrical grid. A
648
+ # faster tertiary 1 control power response time indicates that the unit can respond more quickly to fluctuations
649
+ # in frequency or load, thereby helping to maintain grid stability. This parameter is important for assessing the
650
+ # dynamic performance and reliability of the power system under varying operating conditions. Not applicable for
651
+ # power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_tertiary_1 is True.
652
+ tertiary_1_response_time: Optional[str] = time("Ter1ResponseTime", True)
653
+
654
+ # The tertiary 1 control power continuous time, in the format "HH:MM:SS". It refers to the duration for which a
655
+ # tertiary 1 control (such as frequency control) is continuously applied by a power generation unit. It represents
656
+ # the period during which the power plant or generating unit can sustain a continuous adjustment to its output to
657
+ # maintain system frequency within acceptable limits. This parameter is essential for ensuring grid stability and
658
+ # reliability by providing continuous support to the power system during frequency disturbances or fluctuations.
659
+ # Not applicable for power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_tertiary_1 is
660
+ # True.
661
+ tertiary_1_continuous_time: Optional[str] = time("Ter1ContinuousTime", True)
662
+
663
+ # The amount of electricity that a power provider can supply. It represents the quantity of electricity that can be
664
+ # reliably supplied by generating facilities or power supply equipment within a specific time frame. The value can
665
+ # be either 0 or within the range of 1000 to 9999999. It is mandatory if the contract_type is not
666
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP. For other power source types, it must not be set. If
667
+ # resource_type is HYDRO or BATTERY, the value of this field must be less than or equal to "rated output +
668
+ # (pumping/charging - output)." If resource_type is THERMAL or HYDRO, the value of this field must be less than or
669
+ # equal to "rated output." If has_tertiary_1 is "false," the value of this field must be 0.
670
+ tertiary_1_available_capacity_kW: Optional[int] = power_supply("Ter1MaximumSupplyQuantity", True)
671
+
672
+ # How the surplus capacity of a power generation unit can be utilized. For contract_type of MARKET, POWER_SUPPLY_2,
673
+ # and ONLY_POWER_SUPPLY_1, this field must be set to NOT_AVAILABLE.
674
+ tertiary_1_remaining_reserve_utilization: RemainingReserveAvailability = attr(name="Ter1RemResvUtilization")
675
+
676
+ # The amount of surplus power that can be supplied for utilization, in kW. If
677
+ # tertiary_1_remaining_reserve_utilization is set to AVAILABLE_FOR_UP_ONLY, AVAILABLE_FOR_DOWN_ONLY, or
678
+ # AVAILABLE_FOR_UP_AND_DOWN, this field must be set. If tertiary_1_remaining_reserve_utilization is set to
679
+ # NOT_AVAILABLE, this field must not be set.
680
+ tertiary_1_remaining_reserve_capacity_kW: Optional[int] = capacity("Ter1RemResvMaximumSupplyQuantity", 0, True)
681
+
682
+ # Whether or not the resource is tertairy 2 control power. Tertiary control power refers to the capacity of a
683
+ # power generation unit or system to provide regulation services at the tertiary level of frequency control in
684
+ # an electrical grid. In an electrical grid, frequency regulation is typically categorized into primary, secondary,
685
+ # and tertiary control levels, each serving a specific role in maintaining grid stability. Tertiary control,
686
+ # also known as frequency containment reserve (FCR), operates on a slower timescale compared to primary and
687
+ # secondary control. It helps to fine-tune grid frequency over longer periods, usually several minutes to hours,
688
+ # by adjusting the output of power generation units. The tertiary control power is often provided by power plants
689
+ # that can adjust their output relatively quickly but are not as fast as those providing primary and secondary
690
+ # control. This control level helps to ensure that the grid frequency remains within acceptable limits, thus
691
+ # maintaining grid stability and reliability.If you want to allow market participation for the specified product
692
+ # category, you should set this to True.
693
+ has_tertiary_2: Optional[bool] = attr(default=None, name="Ter2")
694
+
695
+ # The tertiary 2 control power response time, in the format "HH:MM:SS". It refers to the time required for a power
696
+ # generation unit to adjust its output in response to changes in demand or supply within the electrical grid. A
697
+ # faster tertiary 2 control power response time indicates that the unit can respond more quickly to fluctuations
698
+ # in frequency or load, thereby helping to maintain grid stability. This parameter is important for assessing the
699
+ # dynamic performance and reliability of the power system under varying operating conditions. Not applicable for
700
+ # power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_tertiary_2 is True.
701
+ tertiary_2_response_time: Optional[str] = time("Ter2ResponseTime", True)
702
+
703
+ # The tertiary 2 control power continuous time, in the format "HH:MM:SS". It refers to the duration for which a
704
+ # tertiary 2 control (such as frequency control) is continuously applied by a power generation unit. It represents
705
+ # the period during which the power plant or generating unit can sustain a continuous adjustment to its output to
706
+ # maintain system frequency within acceptable limits. This parameter is essential for ensuring grid stability and
707
+ # reliability by providing continuous support to the power system during frequency disturbances or fluctuations.
708
+ # Not applicable for power sources with contract_type of ONLY_POWER_SUPPLY_1. Mandatory only if has_tertiary_2 is
709
+ # True.
710
+ tertiary_2_continuous_time: Optional[str] = time("Ter2ContinuousTime", True)
711
+
712
+ # The amount of electricity that a power provider can supply. It represents the quantity of electricity that can be
713
+ # reliably supplied by generating facilities or power supply equipment within a specific time frame. The value can
714
+ # be either 0 or within the range of 1000 to 9999999. It is mandatory if the contract_type is not
715
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP. For other power source types, it must not be set. If
716
+ # resource_type is HYDRO or BATTERY, the value of this field must be less than or equal to "rated output +
717
+ # (pumping/charging - output)." If resource_type is THERMAL or HYDRO, the value of this field must be less than or
718
+ # equal to "rated output." If has_tertiary_2 is "false," the value of this field must be 0.
719
+ tertiary_2_available_capacity_kW: Optional[int] = power_supply("Ter2MaximumSupplyQuantity", True)
720
+
721
+ # How the surplus capacity of a power generation unit can be utilized. For contract_type of MARKET, POWER_SUPPLY_2,
722
+ # and ONLY_POWER_SUPPLY_1, this field must be set to NOT_AVAILABLE.
723
+ tertiary_2_remaining_reserve_utilization: RemainingReserveAvailability = attr(name="Ter2RemResvUtilization")
724
+
725
+ # The amount of surplus power that can be supplied for utilization, in kW. If
726
+ # tertiary_2_remaining_reserve_utilization is set to AVAILABLE_FOR_UP_ONLY, AVAILABLE_FOR_DOWN_ONLY, or
727
+ # AVAILABLE_FOR_UP_AND_DOWN, this field must be set. If tertiary_2_remaining_reserve_utilization is set to
728
+ # NOT_AVAILABLE, this field must not be set.
729
+ tertiary_2_remaining_reserve_capacity_kW: Optional[int] = capacity("Ter2RemResvMaximumSupplyQuantity", 0, True)
730
+
731
+ # Primary-Secondary 1 command-and-control and monitoring method. Refers to the methodology or system utilized for
732
+ # regulating and overseeing power generation units' operations in response to external commands or signals. This
733
+ # method encompasses the process by which instructions are transmitted to power generation units, and their
734
+ # performance is monitored to ensure compliance with these instructions. If has_secondary_1 is set to True, then
735
+ # it must be set to DEDICATED_LINE. At least one of the following combinations must be set:
736
+ # primary_secondary_1_control_method
737
+ # secondary_2_tertiary_control_method
738
+ primary_secondary_1_control_method: Optional[CommandMonitorMethod] = attr(
739
+ default=None, name="PriSec1CommandOperationMethod"
740
+ )
741
+
742
+ # Secondary 2-Tertiary command-and-control and monitoring method. Refers to the methodology or system utilized for
743
+ # regulating and overseeing power generation units' operations in response to external commands or signals. This
744
+ # method encompasses the process by which instructions are transmitted to power generation units, and their
745
+ # performance is monitored to ensure compliance with these instructions.
746
+ secondary_2_tertiary_control_method: Optional[CommandMonitorMethod] = attr(
747
+ default=None, name="Sec2Ter1Ter2CommandOperationMethod"
748
+ )
749
+
750
+ # The signal type for the power generation unit
751
+ signal_type: SignalType = attr("SignalType")
752
+
753
+ # Method determinining how the baseline is set for a power generation unit. The setting method is available when
754
+ # the contract type is not ONLY_POWER_SUPPLY_1 and at least one of the following is True: has_primary,
755
+ # has_secondary_1, has_secondary_2 or has_tertiary_1. Additionally, it can only be set when resource_type is
756
+ # VPP_GEN, VPP_GEN_AND_DEM or VPP_DEM. It's mandatory in these cases and cannot be set for other power sources.
757
+ baseline_setting_method: Optional[BaseLineSettingMethod] = attr(default=None, name="BaselineSettingMethod")
758
+
759
+ # The presence or absences of a POWER_SUPPLY_1 contract. Applies only if the area is Okinawa, in which case it is
760
+ # mandatory. Otherwise, it should not be set.
761
+ has_contract: Optional[BooleanFlag] = attr(default=None, name="ContractExistence")
762
+
763
+ # The maximum bid price for POWER_SUPPLY_1 power, in JPY/kW/hr
764
+ declared_maximum_unit_price_kWh: Annotated[Decimal, price("DeclaredMaximumUnitPrice", True)]
765
+
766
+ # Presence of voltage regulation function.
767
+ voltage_adjustable: Optional[BooleanFlag] = attr(default=None, name="VoltageAdjustment")
768
+
769
+ # Address of the resource. For power sources categorized under POWER_SUPPLY_1, this field is optional, while for
770
+ # all other power sources, it is mandatory.
771
+ address: Optional[str] = address("Address", True)
772
+
773
+ # The first part of the phone number of the payee. For power sources categorized under POWER_SUPPLY_1, this field
774
+ # is optional, while for all other power sources, it is mandatory.
775
+ phone_1: Optional[str] = phone("PayeePhonePart1", True, True)
776
+
777
+ # The second part of the phone number of the payee. For power sources categorized under POWER_SUPPLY_1, this field
778
+ # is optional, while for all other power sources, it is mandatory.
779
+ phone_2: Optional[str] = phone("PayeePhonePart2", False, True)
780
+
781
+ # The third part of the phone number of the payee. For power sources categorized under POWER_SUPPLY_1, this field
782
+ # is optional, while for all other power sources, it is mandatory.
783
+ phone_3: Optional[str] = phone("PayeePhonePart3", False, True)
784
+
785
+ # The VEN ID for this power generation unit. If secondary_2_tertiary_control_method is SIMPLE_COMMAND, this field
786
+ # is mandatory. Otherwise, it may not be set.
787
+ ven_id: Optional[str] = attr(default=None, name="VenId", min_length=1, max_length=64, pattern=ASCII_TEXT)
788
+
789
+ # The market context for this power generation unit. If secondary_2_tertiary_control_method is SIMPLE_COMMAND, this
790
+ # field is mandatory. Otherwise, it may not be set.
791
+ market_context: Optional[str] = attr(
792
+ default=None, name="MarketContext", min_length=1, max_length=256, pattern=ASCII_TEXT
793
+ )
794
+
795
+ # The model designation associated with this power generation unit.
796
+ model: Optional[str] = attr(
797
+ default=None, name="ModelName", min_length=1, max_length=50, pattern=JAPANESE_ASCII_TEXT
798
+ )
799
+
800
+ # Rated capacity, in kVA. Indicates the maximum power output that a generator or power plant can sustain over a
801
+ # prolonged period without exceeding its design limits. If the contract_type is anything other than
802
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it cannot be set.
803
+ rated_capacity_kVA: Optional[int] = capacity("RatedCapacity", 1000, True)
804
+
805
+ # Rated voltage, in kV. Refers to the nominal voltage level at which a power generation unit is designed to operate.
806
+ # If the contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is
807
+ # mandatory. Otherwise, it cannot be set.
808
+ rated_voltage_kV: Annotated[Decimal, attr(default=None, name="RatedVoltage", ge=0.0, le=1000.0, decimal_places=1)]
809
+
810
+ # Continuous operation voltage as a percentage of the rated voltage. Refers to the voltage level at which a power
811
+ # generation unit can operate continuously without exceeding its design limits. If the contract_type is anything
812
+ # other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it cannot be set.
813
+ continuous_operation_voltage: Annotated[Decimal, percentage("ContinuousOperationVoltage", True)]
814
+
815
+ # Rated power factor. Refers to the ratio of real power to apparent power in an electrical system. It indicates the
816
+ # efficiency of power transfer between the power generation unit and the electrical grid. If the contract_type is
817
+ # anything other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it
818
+ # cannot be set.
819
+ rated_power_factor: Annotated[Decimal, percentage("RatedPowerFactor", True)]
820
+
821
+ # Frequency of the power generation unit. Refers to the number of cycles per second at which the power generation
822
+ # unit operates. It is an essential parameter for ensuring the synchronization of power generation units within the
823
+ # electrical grid. If the contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP,
824
+ # this field is mandatory. Otherwise, it cannot be set.
825
+ frequency: Optional[Frequency] = attr(default=None, name="Frequency")
826
+
827
+ # The internal efficiency of the power generation unit. If the contract_type is anything other than
828
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it cannot be set.
829
+ internal_efficiency: Optional[str] = attr(
830
+ default=None, name="InPlantRate", min_length=1, max_length=100, pattern=JAPANESE_ASCII_TEXT
831
+ )
832
+
833
+ # The lower bound of the continuous operation frequency. Refers to the minimum frequency at which a power
834
+ # generation unit or system can operate continuously without experiencing issues or damage. In electrical power
835
+ # systems, frequency is a crucial parameter that needs to be maintained within a specified range for stable and
836
+ # reliable operation. The lower limit of continuous operation frequency ensures that the system can sustain its
837
+ # operation without dropping below a certain frequency threshold, which could lead to equipment failure or
838
+ # instability in the power grid.
839
+ minimum_continuous_operation_frequency: Annotated[
840
+ Decimal, continuous_operation_frequency("ContinuousOperationFrequencyLower", True)
841
+ ]
842
+
843
+ # The upper bound of the continuous operation frequency. Refers to the maximum frequency at which a power generation
844
+ # unit or system can operate continuously without experiencing issues or damage. In electrical power systems,
845
+ # frequency is a crucial parameter that needs to be maintained within a specified range for stable and reliable
846
+ # operation. The upper limit of continuous operation frequency ensures that the system can sustain its operation
847
+ # without exceeding a certain frequency threshold, which could lead to equipment failure or instability in the power
848
+ # grid. If contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is
849
+ # mandatory. Otherwise, it cannot be set.
850
+ maximum_continuous_operation_frequency: Annotated[
851
+ Decimal, continuous_operation_frequency("ContinuousOperationFrequencyUpper", True)
852
+ ]
853
+
854
+ # Whether or not the power generation unit can be started in black start mode. Black start refers to the process of
855
+ # restarting a power generation unit or system without relying on external power sources. It is a critical
856
+ # capability for power plants to restore electricity supply after a blackout or grid failure. If contract_type is
857
+ # anything other than ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it
858
+ # cannot be set.
859
+ can_black_start: Optional[BooleanFlag] = attr(default=None, name="BlackStart")
860
+
861
+ # The rated output of the power generation unit, in kW. If contract_type is anything other than ONLY_POWER_SUPPLY_1
862
+ # and resource_type is not VPP, this field is mandatory. Otherwise, it cannot be set.
863
+ rated_output_kW: Optional[int] = capacity("RatedOutput", 0, True)
864
+
865
+ # The minimum output of the power generation unit, in kW. For power sources with contract_type of
866
+ # ONLY_POWER_SUPPLY_1, this field cannot be set. If resource_type is not VPP, it must be set. For VPP, the value
867
+ # should be set to 0.
868
+ minimum_output_kW: Optional[int] = capacity("MinimumOutput", 0, True)
869
+
870
+ # The maximum authorized output of the power generation unit, in kW. It refers to the maximum amount of electricity
871
+ # that a power generation unit is allowed to supply when operating normally. It represents the maximum power output
872
+ # capacity permitted by the utility company or regulatory authority. If contract_type is anything other than
873
+ # ONLY_POWER_SUPPLY_1 and resource_type is not VPP, this field is mandatory. Otherwise, it cannot be set.
874
+ maximum_output_authorized_kW: Optional[int] = capacity("AuthorizedMaximumOutput", 0, True)
875
+
876
+ # How power is generated by thermal power generation units. If contract_type is anything other than
877
+ # ONLY_POWER_SUPPLY_1 and resource_type is THERMAL, then this field is mandatory. For other types of power
878
+ # generation units, this field should not be set.
879
+ thermal_type: Optional[ThermalType] = attr(default=None, name="ThermalType")
880
+
881
+ # The amount of electrical energy that can be stored and discharged by a battery system, in kWh. If contract_type
882
+ # is anything other than ONLY_POWER_SUPPLY_1 and resource_type is BATTERY, then this field is mandatory. For other
883
+ # types of power generation units, this field should not be set.
884
+ battery_capacity_kWh: Optional[int] = capacity("BatteryCapacity", 1000, True)
885
+
886
+ # Whether or not this power source has pump-up/charging capability. If contract_type is anything other than
887
+ # ONLY_POWER_SUPPLY_1 and resource_type is PUMP or BATTERY, then this field is mandatory. For other types of power
888
+ # generation units, this field should not be set.
889
+ has_pump_charging: Optional[BooleanFlag] = attr(default=None, name="PumpCharging")
890
+
891
+ # Capability of adjusting the charging process or operation speed of a system. If contract_type is anything other
892
+ # than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or BATTERY, then this field is mandatory. For other types of
893
+ # power generation units, this field should not be set.
894
+ has_variable_speed_operation: Optional[BooleanFlag] = attr(default=None, name="VariableSpeedOperation")
895
+
896
+ # The output power during the generation or discharge process, in kW. If contract_type is anything other than
897
+ # ONLY_POWER_SUPPLY_1 and resource_type is PUMP or BATTERY, then this field is mandatory. For other types of power
898
+ # generation units, this field should not be set.
899
+ discharging_output_kW: Optional[int] = capacity("DischargingOutput", 0, True)
900
+
901
+ # The time it takes for power generation or storage system to transition from the command to generate or discharge
902
+ # power to the state of being in parallel operation, where it is actively supplying or absorbing power to/from the
903
+ # grid or another system. If contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or
904
+ # BATTERY, then this field is mandatory. For other types of power generation units, this field should not be set.
905
+ discharging_time_min: Optional[int] = minute("DischargingTime", True)
906
+
907
+ # The output power during the charging process, in kW. If contract_type is anything other than ONLY_POWER_SUPPLY_1
908
+ # and resource_type is PUMP or BATTERY, then this field is mandatory. For other types of power generation units,
909
+ # this field should not be set.
910
+ charging_output_kw: Optional[int] = capacity("ChargingOutput", 0, True)
911
+
912
+ # The time it takes for power generation or storage system to transition from the command to charge to the state of
913
+ # being in parallel operation, where it is actively supplying or absorbing power to/from the grid or another system.
914
+ # If contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or BATTERY, then this field
915
+ # is mandatory. For other types of power generation units, this field should not be set.
916
+ charging_time_min: Optional[int] = minute("ChargingTime", True)
917
+
918
+ # The duration during which the power generation unit, such as a battery storage system, is capable of operating at
919
+ # its maximum generation or discharge capacity without any constraints or limitations, in hours. If contract_type
920
+ # is anything other than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or BATTERY, then this field is mandatory.
921
+ # For other types of power generation units, this field should not be set.
922
+ full_generation_time_hr: Annotated[Decimal, hour("FullPowerGenerationTime", True)]
923
+
924
+ # The duration for which the power generation unit can operate continuously without interruption or the need for
925
+ # rest or maintenance, in hours. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and resource_type is
926
+ # PUMP, then this field is mandatory. For other types of power generation units, this field should not be set.
927
+ continuous_operation_time: Annotated[Decimal, hour("ContinuousOperationTime", True)]
928
+
929
+ # The maximum duration for which the power generation unit can continue operating under specific limitations or
930
+ # constraints, in hours. This could include factors such as environmental conditions, equipment maintenance
931
+ # requirements, or regulatory restrictions. If contract_type is ONLY_POWER_SUPPLY_1, then this field cannot be
932
+ # set. Otherwise, this field is optional.
933
+ limitd_continuous_operation_time: Annotated[Decimal, hour("ContinuousOperationTimeLimited", True)]
934
+
935
+ # Phase locking is a method used in power systems to synchronize the phase angles of multiple alternating current
936
+ # (AC) sources. In this mode of operation, the frequency and phase of the generated voltage are adjusted to match
937
+ # those of the grid or another AC power source. This ensures that the AC output from the power source is in phase
938
+ # with the grid, allowing for seamless integration and stable operation. If contract_type is anything other than
939
+ # ONLY_POWER_SUPPLY_1 and resource_type is PUMP or HYDRO, then this field is mandatory. For other types of power
940
+ # generation units, this field should not be set.
941
+ is_phase_locked: Optional[BooleanFlag] = attr(default=None, name="PhaseModifyingOperation")
942
+
943
+ # Quantity of water consumed, in cubic meters per second. If contract_type is anything other than
944
+ # ONLY_POWER_SUPPLY_1 and resource_type is PUMP or HYDRO, then this field is mandatory. For other types of power
945
+ # generation units, this field should not be set.
946
+ water_usage_m3_sec: Optional[int] = capacity("AmountOfWaterUsed", 0, True)
947
+
948
+ # Reservoir capacity in cubic decameters. If contract_type is anything other than ONLY_POWER_SUPPLY_1 and
949
+ # resource_type is PUMP or HYDRO, then this field is mandatory. For other types of power generation units, this
950
+ # field should not be set.
951
+ reservior_capacity_dam3: Optional[int] = capacity("ReservoirCapacity", 0, True)
952
+
953
+ # The volume of water that enters a reservoir or water storage facility over a specific period of time, in cubic
954
+ # meters per second. If contract_type is anything other than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or HYDRO,
955
+ # then this field is mandatory. For other types of power generation units, this field should not be set.
956
+ inflow_amount_m3_sec: Optional[int] = capacity("InflowAmount", 0, True)
957
+
958
+ # The sustainable power output that a power generation unit can maintain over a specific duration without
959
+ # interruption, in kW. This metric is crucial for assessing the reliability and capacity of a power generation
960
+ # system to meet demand consistently over time. If contract_type is anything other than ONLY_POWER_SUPPLY_1 and
961
+ # resource_type is PUMP or HYDRO, then this field is mandatory. For other types of power generation units, this
962
+ # field should not be set.
963
+ continuous_output_kW: Optional[int] = capacity("ContinuousOperationOutput", 0, True)
964
+
965
+ # The ability of hydroelectric power stations or pumped-storage hydroelectric plants to supply power, in kW. It
966
+ # represents the capacity of these facilities to generate electricity using water resources. If contract_type is
967
+ # anything other than ONLY_POWER_SUPPLY_1 and resource_type is PUMP or HYDRO, then this field is mandatory. For
968
+ # other types of power generation units, this field should not be set.
969
+ pumped_supply_capacity_kW: Optional[int] = capacity("PumpedSupply", 0, True)
970
+
971
+ # Whether operation of the Fuel Cell Balance of Plant (FCB) system is supported. The FCB is a key component of a
972
+ # fuel cell system responsible for managing various auxiliary functions necessary for the operation of the fuel
973
+ # cell stack. This includes tasks such as managing the flow of reactants (hydrogen and oxygen), controlling
974
+ # temperature and humidity levels within the fuel cell stack, and providing power conditioning for the electrical
975
+ # output of the fuel cell. FCB operation is essential for ensuring the efficient and reliable performance of the
976
+ # overall fuel cell system. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and resource_type is
977
+ # THERMAL, then this field is mandatory. For other types of power generation units, this field should not be set.
978
+ has_fcb_operation: Optional[BooleanFlag] = attr(default=None, name="FcbOperation")
979
+
980
+ # Whether the power plant or generating facility can supply a greater amount of electrical power than its normal
981
+ # output. In this mode, the power plant needs to provide additional power to meet increased demand or to ensure
982
+ # the stability of the electrical grid. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and
983
+ # resource_type is THERMAL, then this field is mandatory. For other types of power generation units, this field
984
+ # should not be set.
985
+ has_overpower_operation: Optional[BooleanFlag] = attr(default=None, name="OverPowerOperation")
986
+
987
+ # Whether the power generation facility at its maximum capacity to meet peak electricity demand. During peak hours,
988
+ # when electricity demand is at its highest, power plants may operate in peak mode to provide the necessary
989
+ # electricity to the grid. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and resource_type is
990
+ # THERMAL, then this field is mandatory. For other types of power generation units, this field should not be set.
991
+ has_peak_mode_operation: Optional[BooleanFlag] = attr(default=None, name="PeakModeOperation")
992
+
993
+ # Whether the power generation facility has a decision support system. If contract_type is anything other than
994
+ # ONLY_POWER_SUPPLY_1, and resource_type is THERMAL, then this field is mandatory. For other types of power
995
+ # generation units, this field should not be set.
996
+ has_dss: Optional[BooleanFlag] = attr(default=None, name="Dss")
997
+
998
+ # The maximum power output generated by a power plant when it operates in overpower mode, in kW. If contract_type
999
+ # is anything other than ONLY_POWER_SUPPLY_1, resource_type is THERMAL and has_overpower_operation is YES, this
1000
+ # field is mandatory. However, for other types of power sources, this field cannot be set.
1001
+ overpower_maximum_output_kW: Optional[int] = capacity("OverPowerOperationMaximumOutput", 0, True)
1002
+
1003
+ # The maximum power output generated by a power plant when it operates in peak mode, in kW. If contract_type is
1004
+ # anything other than ONLY_POWER_SUPPLY_1, resource_type is THERMAL and has_peak_mode_operation is YES, this field
1005
+ # is mandatory. However, for other types of power sources, this field cannot be set.
1006
+ peak_mode_maximum_output_kW: Optional[int] = capacity("PeakModeOperationMaximumOutput", 0, True)
1007
+
1008
+ # The duration during which a power generation unit can effectively operate or generate electricity without
1009
+ # interruption, in hours. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and resource_type is THERMAL,
1010
+ # then this field is mandatory. For other types of power generation units, this field should not be set.
1011
+ operation_time_hr: Annotated[Decimal, hour("OperationTime", True)]
1012
+
1013
+ # The maximum allowable number of times a power generation unit can be started within a specified period. If
1014
+ # contract_type is anything other than ONLY_POWER_SUPPLY_1, and resource_type is THERMAL, then this field is
1015
+ # mandatory. For other types of power generation units, this field should not be set.
1016
+ startups: Optional[int] = attr(default=None, name="NumberOfStartups", ge=0, lt=10000)
1017
+
1018
+ # The minimum output level at which a power generation unit equipped with Emergency Demand Control (EDC) or Load
1019
+ # Frequency Control (LFC) capabilities can operate effectively. If contract_type is anything other than
1020
+ # ONLY_POWER_SUPPLY_1, and resource_type is THERMAL, then this field is mandatory. For other types of power
1021
+ # generation units, this field should not be set.
1022
+ edc_lfc_minimum_output_kw: Optional[int] = capacity("AfcMinimumOutput", 0, True)
1023
+
1024
+ # The rate at which a power generation unit equipped with Governor Function (GF) capabilities can adjust its output
1025
+ # in response to changes in grid frequency. If contract_type is anything other than ONLY_POWER_SUPPLY_1, and
1026
+ # resource_type is THERMAL, HYDRO, OR PUMP; then this field is mandatory. For other types of power generation units,
1027
+ # this field should not be set.
1028
+ gf_variation_rate: Annotated[Decimal, percentage("GfVariationRate", True)]
1029
+
1030
+ # The range within which a power generation unit can modulate its output beyond its rated output, in kW.
1031
+ gf_width_outside_rated_output_kW: Optional[int] = capacity("GfWidthOutOfRatedOutput", 0, True)
1032
+
1033
+ # Whether or not the power generation facility is being transferred to another entity.
1034
+ will_transfer: Optional[bool] = attr(default=None, name="Transfer")
1035
+
1036
+ # The previous participant this power generation unit was associated with. This will only be populated if
1037
+ # will_transfer is True.
1038
+ previous_participant: Optional[str] = participant_name("PreviousParticipantName", True)
1039
+
1040
+ # The previous code for this power generation unit. This will only be populated if will_transfer is True.
1041
+ previous_name: Optional[str] = resource_name("PreviousResourceName", True)
1042
+
1043
+ # An option to override the existing data for this power generation unit. If this fails, the response will
1044
+ # contain a value of VIOLATION.
1045
+ override: Optional[OverrideOption] = attr(default=None, name="OverrideOption")
1046
+
1047
+ # The status of the resource submission. This is automatically set.
1048
+ status: Status = attr(default=Status.IN_PROGRESS, name="RecordStatus")
1049
+
1050
+ # An ID representing the transaction
1051
+ transaction_id: Optional[str] = transaction_id("TransactionId", True)
1052
+
1053
+
1054
+ class ResourceQuery(Payload, tag="Resource"):
1055
+ """The query parameters for a power generation unit."""
1056
+
1057
+ # The MMS code of the business entity to which the registration applies
1058
+ participant: Optional[str] = participant_name("ParticipantName", True)
1059
+
1060
+ # A code that uniquely identifies the power generation unit
1061
+ name: Optional[str] = resource_name("ResourceName", True)
1062
+
1063
+ # The status of the resources being queried.
1064
+ status: Optional[Status] = attr(default=None, name="RecordStatus")