Skip to content

Commit 08d7383

Browse files
authored
Add shortcircuit form for batteries (#3352)
Signed-off-by: Etienne LESOT <[email protected]>
1 parent 9d2418f commit 08d7383

14 files changed

+200
-78
lines changed

src/components/dialogs/network-modifications/battery/battery-dialog.type.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import {
2727
REACTIVE_CAPABILITY_CURVE_TABLE,
2828
REACTIVE_LIMITS,
2929
REACTIVE_POWER_SET_POINT,
30+
TRANSFORMER_REACTANCE,
31+
TRANSIENT_REACTANCE,
3032
VOLTAGE_LEVEL,
3133
} from '../../../utils/field-constants';
3234
import { Property } from '../common/properties/property-utils';
@@ -36,6 +38,7 @@ import {
3638
ReactiveCapabilityCurvePoints,
3739
} from '../../reactive-limits/reactive-limits.type';
3840
import { ActivePowerControlInfos } from '../../active-power-control/active-power-control.type';
41+
import { ShortCircuitFormInfos } from '../../short-circuit/short-circuit-utils';
3942

4043
export type BatteryDialogSchemaBaseForm = {
4144
[EQUIPMENT_NAME]?: string;
@@ -61,6 +64,8 @@ export type BatteryDialogSchemaBaseForm = {
6164
};
6265
// Properties
6366
[ADDITIONAL_PROPERTIES]?: Property[];
67+
[TRANSFORMER_REACTANCE]?: number | null;
68+
[TRANSIENT_REACTANCE]?: number | null;
6469
};
6570

6671
export type BatteryCreationDialogSchemaForm = { [EQUIPMENT_ID]: string } & BatteryDialogSchemaBaseForm;
@@ -77,6 +82,7 @@ export interface BatteryFormInfos {
7782
connectablePosition: ConnectablePositionFormInfos;
7883
minMaxReactiveLimits: MinMaxReactiveLimitsFormInfos;
7984
activePowerControl: ActivePowerControlInfos;
85+
batteryShortCircuit: ShortCircuitFormInfos;
8086
reactiveCapabilityCurvePoints: ReactiveCapabilityCurvePoints[];
8187
voltageLevelId: string;
8288
busOrBusbarSectionId: string;

src/components/dialogs/network-modifications/battery/creation/battery-creation-dialog.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ import {
3434
REACTIVE_CAPABILITY_CURVE_TABLE,
3535
REACTIVE_LIMITS,
3636
REACTIVE_POWER_SET_POINT,
37+
TRANSFORMER_REACTANCE,
38+
TRANSIENT_REACTANCE,
3739
VOLTAGE_LEVEL,
3840
} from 'components/utils/field-constants';
3941
import {
@@ -68,6 +70,11 @@ import { BatteryCreationInfos } from '../../../../../services/network-modificati
6870
import BatteryCreationForm from './battery-creation-form';
6971
import { getSetPointsEmptyFormData, getSetPointsSchema } from '../../../set-points/set-points-utils';
7072
import { NetworkModificationDialogProps } from '../../../../graph/menus/network-modifications/network-modification-menu.type';
73+
import {
74+
getShortCircuitEmptyFormData,
75+
getShortCircuitFormData,
76+
getShortCircuitFormSchema,
77+
} from '../../../short-circuit/short-circuit-utils';
7178

7279
const emptyFormData = {
7380
[EQUIPMENT_ID]: '',
@@ -79,6 +86,7 @@ const emptyFormData = {
7986
...getReactiveLimitsEmptyFormData(),
8087
...getActivePowerControlEmptyFormData(),
8188
...emptyProperties,
89+
...getShortCircuitEmptyFormData(),
8290
};
8391

8492
const formSchema = yup
@@ -92,6 +100,7 @@ const formSchema = yup
92100
[REACTIVE_LIMITS]: getReactiveLimitsValidationSchema(),
93101
...getSetPointsSchema(),
94102
...getActivePowerControlSchema(),
103+
...getShortCircuitFormSchema(),
95104
})
96105
.concat(creationPropertiesSchema)
97106
.required();
@@ -144,6 +153,10 @@ export default function BatteryCreationDialog({
144153
reactiveCapabilityCurvePoints: battery?.reactiveCapabilityCurvePoints ?? [{}, {}],
145154
}),
146155
...copyEquipmentPropertiesForCreation(battery),
156+
...getShortCircuitFormData({
157+
directTransX: battery.batteryShortCircuit?.directTransX,
158+
stepUpTransformerX: battery.batteryShortCircuit?.stepUpTransformerX,
159+
}),
147160
},
148161
{ keepDefaultValues: true }
149162
);
@@ -179,6 +192,10 @@ export default function BatteryCreationDialog({
179192
: [{}, {}],
180193
}),
181194
...getPropertiesFromModification(editData?.properties ?? undefined),
195+
...getShortCircuitFormData({
196+
directTransX: editData.directTransX,
197+
stepUpTransformerX: editData.stepUpTransformerX,
198+
}),
182199
});
183200
}
184201
}, [editData, reset]);
@@ -215,6 +232,8 @@ export default function BatteryCreationDialog({
215232
participate: battery[FREQUENCY_REGULATION] ?? null,
216233
droop: battery[DROOP] ?? null,
217234
properties: toModificationProperties(battery) ?? null,
235+
directTransX: battery[TRANSIENT_REACTANCE] ?? null,
236+
stepUpTransformerX: battery[TRANSFORMER_REACTANCE] ?? null,
218237
} satisfies BatteryCreationInfos;
219238
createBattery({
220239
batteryCreationInfos: batteryCreationInfos,

src/components/dialogs/network-modifications/battery/creation/battery-creation-form.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { ActivePowerControlForm } from '../../../active-power-control/active-pow
2424
import type { UUID } from 'node:crypto';
2525
import { CurrentTreeNode } from '../../../../graph/tree-node.type';
2626
import { SetPointsForm } from '../../../set-points/set-points-form';
27+
import ShortCircuitForm from '../../../short-circuit/short-circuit-form';
2728

2829
export interface BatteryCreationFormProps {
2930
studyUuid: UUID;
@@ -88,9 +89,16 @@ export default function BatteryCreationForm({
8889

8990
{/* Set points part */}
9091
<SetPointsForm />
92+
93+
{/* Active power control part */}
9194
<Grid container spacing={2} paddingTop={2}>
9295
<ActivePowerControlForm />
9396
</Grid>
97+
98+
{/* Short Circuit part */}
99+
<GridSection title="ShortCircuit" />
100+
<ShortCircuitForm />
101+
94102
<PropertiesForm networkElementType={'battery'} />
95103
</>
96104
);

src/components/dialogs/network-modifications/battery/modification/battery-modification-dialog.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import {
3333
REACTIVE_CAPABILITY_CURVE_TABLE,
3434
REACTIVE_LIMITS,
3535
REACTIVE_POWER_SET_POINT,
36+
TRANSFORMER_REACTANCE,
37+
TRANSIENT_REACTANCE,
3638
VOLTAGE_LEVEL,
3739
} from 'components/utils/field-constants';
3840
import { sanitizeString } from '../../../dialog-utils';
@@ -74,6 +76,11 @@ import { getSetPointsEmptyFormData, getSetPointsSchema } from '../../../set-poin
7476
import { ModificationDialog } from '../../../commons/modificationDialog';
7577
import { EquipmentModificationDialogProps } from '../../../../graph/menus/network-modifications/network-modification-menu.type';
7678
import { useFormWithDirtyTracking } from 'components/dialogs/commons/use-form-with-dirty-tracking';
79+
import {
80+
getShortCircuitEmptyFormData,
81+
getShortCircuitFormData,
82+
getShortCircuitFormSchema,
83+
} from '../../../short-circuit/short-circuit-utils';
7784

7885
const emptyFormData = {
7986
[EQUIPMENT_NAME]: '',
@@ -84,6 +91,7 @@ const emptyFormData = {
8491
...getSetPointsEmptyFormData(true),
8592
...getActivePowerControlEmptyFormData(true),
8693
...emptyProperties,
94+
...getShortCircuitEmptyFormData(),
8795
};
8896

8997
const formSchema = yup
@@ -103,6 +111,7 @@ const formSchema = yup
103111
[REACTIVE_LIMITS]: getReactiveLimitsValidationSchema(true),
104112
...getSetPointsSchema(true),
105113
...getActivePowerControlSchema(true),
114+
...getShortCircuitFormSchema(true),
106115
})
107116
.concat(modificationPropertiesSchema)
108117
.required();
@@ -162,6 +171,10 @@ export default function BatteryModificationDialog({
162171
reactiveCapabilityCurvePoints: editData?.reactiveCapabilityCurvePoints ?? null,
163172
}),
164173
...getPropertiesFromModification(editData?.properties ?? undefined),
174+
...getShortCircuitFormData({
175+
directTransX: editData?.directTransX?.value ?? null,
176+
stepUpTransformerX: editData?.stepUpTransformerX?.value ?? null,
177+
}),
165178
});
166179
},
167180
[reset]
@@ -295,6 +308,8 @@ export default function BatteryModificationDialog({
295308
? (reactiveLimits[REACTIVE_CAPABILITY_CURVE_TABLE] ?? null)
296309
: null,
297310
properties: toModificationProperties(battery) ?? null,
311+
directTransX: toModificationOperation(battery[TRANSIENT_REACTANCE]),
312+
stepUpTransformerX: toModificationOperation(battery[TRANSFORMER_REACTANCE]),
298313
} satisfies BatteryModificationInfos;
299314
modifyBattery({
300315
batteryModificationInfos: batteryModificationInfos,

src/components/dialogs/network-modifications/battery/modification/battery-modification-form.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { BatteryCreationInfos } from '../../../../../services/network-modificati
2727
import { BatteryFormInfos } from '../battery-dialog.type';
2828
import { CurrentTreeNode } from '../../../../graph/tree-node.type';
2929
import useVoltageLevelsListInfos from '../../../../../hooks/use-voltage-levels-list-infos';
30+
import ShortCircuitForm from '../../../short-circuit/short-circuit-form';
3031

3132
export interface BatteryModificationFormProps {
3233
studyUuid: UUID;
@@ -179,6 +180,11 @@ export default function BatteryModificationForm({
179180
previousValues={batteryToModify?.activePowerControl}
180181
/>
181182
</Grid>
183+
184+
{/* Short Circuit part */}
185+
<GridSection title="ShortCircuit" />
186+
<ShortCircuitForm previousValues={batteryToModify?.batteryShortCircuit} />
187+
182188
<PropertiesForm networkElementType={'battery'} isModification={true} />
183189
</>
184190
);

src/components/dialogs/network-modifications/generator/creation/generator-creation-dialog.tsx

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ import { DeepNullable } from '../../../../utils/ts-utils';
8484
import { GeneratorCreationDialogSchemaForm, GeneratorFormInfos } from '../generator-dialog.type';
8585
import { getSetPointsEmptyFormData, getSetPointsSchema } from '../../../set-points/set-points-utils';
8686
import { NetworkModificationDialogProps } from '../../../../graph/menus/network-modifications/network-modification-menu.type';
87+
import {
88+
getShortCircuitEmptyFormData,
89+
getShortCircuitFormData,
90+
getShortCircuitFormSchema,
91+
} from '../../../short-circuit/short-circuit-utils';
8792

8893
const emptyFormData = {
8994
[EQUIPMENT_ID]: '',
@@ -92,8 +97,7 @@ const emptyFormData = {
9297
[MAXIMUM_ACTIVE_POWER]: null,
9398
[MINIMUM_ACTIVE_POWER]: null,
9499
[RATED_NOMINAL_POWER]: null,
95-
[TRANSIENT_REACTANCE]: null,
96-
[TRANSFORMER_REACTANCE]: null,
100+
...getShortCircuitEmptyFormData(),
97101
[PLANNED_ACTIVE_POWER_SET_POINT]: null,
98102
[MARGINAL_COST]: null,
99103
[PLANNED_OUTAGE_RATE]: null,
@@ -115,14 +119,7 @@ const formSchema = yup
115119
[MAXIMUM_ACTIVE_POWER]: yup.number().nullable().required(),
116120
[MINIMUM_ACTIVE_POWER]: yup.number().nullable().required(),
117121
[RATED_NOMINAL_POWER]: yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero'),
118-
[TRANSFORMER_REACTANCE]: yup.number().nullable(),
119-
[TRANSIENT_REACTANCE]: yup
120-
.number()
121-
.nullable()
122-
.when([TRANSFORMER_REACTANCE], {
123-
is: (transformerReactance: number) => transformerReactance != null,
124-
then: (schema) => schema.required(),
125-
}),
122+
...getShortCircuitFormSchema(),
126123
[PLANNED_ACTIVE_POWER_SET_POINT]: yup.number().nullable(),
127124
[MARGINAL_COST]: yup.number().nullable(),
128125
[PLANNED_OUTAGE_RATE]: yup.number().nullable().min(0, 'RealPercentage').max(1, 'RealPercentage'),
@@ -177,8 +174,10 @@ export default function GeneratorCreationDialog({
177174
[FORCED_OUTAGE_RATE]: generator.generatorStartup?.forcedOutageRate,
178175
[FREQUENCY_REGULATION]: generator.activePowerControl?.participate,
179176
[DROOP]: generator.activePowerControl?.droop,
180-
[TRANSIENT_REACTANCE]: generator.generatorShortCircuit?.directTransX,
181-
[TRANSFORMER_REACTANCE]: generator.generatorShortCircuit?.stepUpTransformerX,
177+
...getShortCircuitFormData({
178+
directTransX: generator.generatorShortCircuit?.directTransX,
179+
stepUpTransformerX: generator.generatorShortCircuit?.stepUpTransformerX,
180+
}),
182181
[VOLTAGE_REGULATION_TYPE]:
183182
generator?.regulatingTerminalId || generator?.regulatingTerminalConnectableId
184183
? REGULATION_TYPES.DISTANT.id
@@ -231,8 +230,10 @@ export default function GeneratorCreationDialog({
231230
[FORCED_OUTAGE_RATE]: editData.forcedOutageRate,
232231
[FREQUENCY_REGULATION]: editData.participate,
233232
[DROOP]: editData.droop,
234-
[TRANSIENT_REACTANCE]: editData.directTransX,
235-
[TRANSFORMER_REACTANCE]: editData.stepUpTransformerX,
233+
...getShortCircuitFormData({
234+
directTransX: editData.directTransX,
235+
stepUpTransformerX: editData.stepUpTransformerX,
236+
}),
236237
[VOLTAGE_REGULATION_TYPE]: editData?.regulatingTerminalId
237238
? REGULATION_TYPES.DISTANT.id
238239
: REGULATION_TYPES.LOCAL.id,

src/components/dialogs/network-modifications/generator/creation/generator-creation-form.tsx

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,9 @@ import {
1717
PLANNED_ACTIVE_POWER_SET_POINT,
1818
PLANNED_OUTAGE_RATE,
1919
RATED_NOMINAL_POWER,
20-
TRANSFORMER_REACTANCE,
21-
TRANSIENT_REACTANCE,
2220
VOLTAGE_REGULATION,
2321
} from 'components/utils/field-constants';
24-
import {
25-
ActivePowerAdornment,
26-
filledTextField,
27-
italicFontTextField,
28-
MVAPowerAdornment,
29-
OhmAdornment,
30-
} from '../../../dialog-utils';
22+
import { ActivePowerAdornment, filledTextField, italicFontTextField, MVAPowerAdornment } from '../../../dialog-utils';
3123
import { ENERGY_SOURCES } from 'components/network/constants';
3224
import { Box, Grid } from '@mui/material';
3325
import { ConnectivityForm } from '../../../connectivity/connectivity-form';
@@ -43,6 +35,7 @@ import { useWatch } from 'react-hook-form';
4335
import { VoltageRegulationForm } from '../../../voltage-regulation/voltage-regulation-form';
4436
import type { UUID } from 'node:crypto';
4537
import { CurrentTreeNode } from '../../../../graph/tree-node.type';
38+
import ShortCircuitForm from '../../../short-circuit/short-circuit-form';
4639

4740
export interface GeneratorCreationFormProps {
4841
studyUuid: UUID;
@@ -101,14 +94,6 @@ export default function GeneratorCreationForm({
10194
<FloatInput name={RATED_NOMINAL_POWER} label={'RatedNominalPowerText'} adornment={MVAPowerAdornment} />
10295
);
10396

104-
const transientReactanceField = (
105-
<FloatInput name={TRANSIENT_REACTANCE} label={'TransientReactanceForm'} adornment={OhmAdornment} />
106-
);
107-
108-
const transformerReactanceField = (
109-
<FloatInput name={TRANSFORMER_REACTANCE} label={'TransformerReactanceForm'} adornment={OhmAdornment} />
110-
);
111-
11297
const plannedActivePowerSetPointField = (
11398
<FloatInput
11499
name={PLANNED_ACTIVE_POWER_SET_POINT}
@@ -179,11 +164,10 @@ export default function GeneratorCreationForm({
179164
<ActivePowerControlForm />
180165
</Grid>
181166

182-
{/* Short Circuit of start part */}
167+
{/* Short Circuit part */}
183168
<GridSection title="ShortCircuit" />
184169
<Grid container spacing={2}>
185-
<GridItem size={4}>{transientReactanceField}</GridItem>
186-
<GridItem size={4}>{transformerReactanceField}</GridItem>
170+
<ShortCircuitForm />
187171
</Grid>
188172

189173
{/* Cost of start part */}

src/components/dialogs/network-modifications/generator/generator-dialog.type.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import {
5454
ReactiveCapabilityCurvePoints,
5555
} from '../../reactive-limits/reactive-limits.type';
5656
import { ActivePowerControlInfos } from '../../active-power-control/active-power-control.type';
57+
import { ShortCircuitFormInfos } from '../../short-circuit/short-circuit-utils';
5758

5859
export type GeneratorDialogSchemaBaseForm = {
5960
[EQUIPMENT_NAME]?: string;
@@ -127,7 +128,7 @@ export interface GeneratorFormInfos {
127128
generatorStartup: GeneratorStartUpFormInfos;
128129
connectablePosition: ConnectablePositionFormInfos;
129130
activePowerControl: ActivePowerControlInfos;
130-
generatorShortCircuit: GeneratorShortCircuitFormInfos;
131+
generatorShortCircuit: ShortCircuitFormInfos;
131132
regulatingTerminalId: string;
132133
regulatingTerminalVlId: string;
133134
regulatingTerminalConnectableId: string;
@@ -154,8 +155,3 @@ interface GeneratorStartUpFormInfos {
154155
plannedOutageRate?: number | null;
155156
forcedOutageRate?: number | null;
156157
}
157-
158-
interface GeneratorShortCircuitFormInfos {
159-
directTransX?: number | null;
160-
stepUpTransformerX?: number | null;
161-
}

src/components/dialogs/network-modifications/generator/modification/generator-modification-dialog.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,19 @@ import { GeneratorFormInfos, GeneratorModificationDialogSchemaForm } from '../ge
9595
import { toModificationOperation } from '../../../../utils/utils';
9696
import { EquipmentModificationDialogProps } from '../../../../graph/menus/network-modifications/network-modification-menu.type';
9797
import { useFormWithDirtyTracking } from 'components/dialogs/commons/use-form-with-dirty-tracking';
98+
import {
99+
getShortCircuitEmptyFormData,
100+
getShortCircuitFormData,
101+
getShortCircuitFormSchema,
102+
} from '../../../short-circuit/short-circuit-utils';
98103

99104
const emptyFormData = {
100105
[EQUIPMENT_NAME]: '',
101106
[ENERGY_SOURCE]: null,
102107
[MAXIMUM_ACTIVE_POWER]: null,
103108
[MINIMUM_ACTIVE_POWER]: null,
104109
[RATED_NOMINAL_POWER]: null,
105-
[TRANSIENT_REACTANCE]: null,
106-
[TRANSFORMER_REACTANCE]: null,
110+
...getShortCircuitEmptyFormData(),
107111
[PLANNED_ACTIVE_POWER_SET_POINT]: null,
108112
[MARGINAL_COST]: null,
109113
[PLANNED_OUTAGE_RATE]: null,
@@ -131,8 +135,7 @@ const formSchema = yup
131135
schema.max(yup.ref(MAXIMUM_ACTIVE_POWER), 'MinActivePowerMustBeLessOrEqualToMaxActivePower'),
132136
}),
133137
[RATED_NOMINAL_POWER]: yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero'),
134-
[TRANSIENT_REACTANCE]: yup.number().nullable(),
135-
[TRANSFORMER_REACTANCE]: yup.number().nullable(),
138+
...getShortCircuitFormSchema(),
136139
[PLANNED_ACTIVE_POWER_SET_POINT]: yup.number().nullable(),
137140
[MARGINAL_COST]: yup.number().nullable(),
138141

@@ -195,8 +198,10 @@ export default function GeneratorModificationDialog({
195198
[FORCED_OUTAGE_RATE]: editData?.forcedOutageRate?.value ?? null,
196199
[FREQUENCY_REGULATION]: editData?.participate?.value ?? null,
197200
[DROOP]: editData?.droop?.value ?? null,
198-
[TRANSIENT_REACTANCE]: editData?.directTransX?.value ?? null,
199-
[TRANSFORMER_REACTANCE]: editData?.stepUpTransformerX?.value ?? null,
201+
...getShortCircuitFormData({
202+
directTransX: editData?.directTransX?.value ?? null,
203+
stepUpTransformerX: editData?.stepUpTransformerX?.value ?? null,
204+
}),
200205
[VOLTAGE_REGULATION_TYPE]: editData?.voltageRegulationType?.value ?? null,
201206
[Q_PERCENT]: editData?.qPercent?.value ?? null,
202207
...getConnectivityFormData({

0 commit comments

Comments
 (0)