oltc-selector 1.0.0
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.
- package/README.md +91 -0
- package/bin/oltc.js +2095 -0
- package/package.json +27 -0
package/bin/oltc.js
ADDED
|
@@ -0,0 +1,2095 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// lib/deriveUm.ts
|
|
4
|
+
var RATED_TO_WINDING_UM = {
|
|
5
|
+
33: 40.5,
|
|
6
|
+
35: 40.5,
|
|
7
|
+
66: 72.5,
|
|
8
|
+
69: 72.5,
|
|
9
|
+
110: 126,
|
|
10
|
+
115: 126,
|
|
11
|
+
132: 145,
|
|
12
|
+
138: 145,
|
|
13
|
+
150: 170,
|
|
14
|
+
220: 252,
|
|
15
|
+
230: 252,
|
|
16
|
+
330: 363
|
|
17
|
+
};
|
|
18
|
+
var SNAP_UN = Object.keys(RATED_TO_WINDING_UM).map(Number).sort(
|
|
19
|
+
(a, b) => a - b
|
|
20
|
+
);
|
|
21
|
+
function snapRatedKv(ratedKv) {
|
|
22
|
+
if (!Number.isFinite(ratedKv) || ratedKv <= 0) return ratedKv;
|
|
23
|
+
if (RATED_TO_WINDING_UM[ratedKv] != null) return ratedKv;
|
|
24
|
+
let best = SNAP_UN[0];
|
|
25
|
+
let bestDist = Math.abs(ratedKv - best);
|
|
26
|
+
for (const u of SNAP_UN) {
|
|
27
|
+
const d = Math.abs(ratedKv - u);
|
|
28
|
+
if (d < bestDist) {
|
|
29
|
+
best = u;
|
|
30
|
+
bestDist = d;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const rel = bestDist / Math.max(ratedKv, 1);
|
|
34
|
+
if (rel <= 0.12 || bestDist <= 8) return best;
|
|
35
|
+
return ratedKv;
|
|
36
|
+
}
|
|
37
|
+
function windingUmFromRatedKv(ratedKv) {
|
|
38
|
+
const snapped = snapRatedKv(ratedKv);
|
|
39
|
+
return RATED_TO_WINDING_UM[snapped] ?? snapped;
|
|
40
|
+
}
|
|
41
|
+
function deriveOltcUm(windingUmKv, connection) {
|
|
42
|
+
if (connection !== "Y") return windingUmKv;
|
|
43
|
+
if (windingUmKv >= 125.9 && windingUmKv <= 170.1) return 72.5;
|
|
44
|
+
return windingUmKv;
|
|
45
|
+
}
|
|
46
|
+
function oltcUmFromRatedKv(ratedKv, connection) {
|
|
47
|
+
return deriveOltcUm(windingUmFromRatedKv(ratedKv), connection);
|
|
48
|
+
}
|
|
49
|
+
function throughCurrentFromRated(mva, ratedKv, connection) {
|
|
50
|
+
if (!(mva > 0) || !(ratedKv > 0)) return NaN;
|
|
51
|
+
if (connection === "D") return mva * 1e3 / (3 * ratedKv);
|
|
52
|
+
return mva * 1e3 / (Math.sqrt(3) * ratedKv);
|
|
53
|
+
}
|
|
54
|
+
function stepVoltageFromPercent(ratedKv, stepPercent, connection) {
|
|
55
|
+
if (!(ratedKv > 0) || !(stepPercent > 0)) return NaN;
|
|
56
|
+
const windingV = connection === "D" ? ratedKv * 1e3 : ratedKv * 1e3 / Math.sqrt(3);
|
|
57
|
+
return windingV * stepPercent;
|
|
58
|
+
}
|
|
59
|
+
function maxThroughCurrent(ratedA, minusSteps, stepPercent) {
|
|
60
|
+
if (!(ratedA > 0)) return NaN;
|
|
61
|
+
if (!(minusSteps > 0) || !(stepPercent > 0)) return ratedA;
|
|
62
|
+
const drop = minusSteps * stepPercent;
|
|
63
|
+
if (drop <= 0) return ratedA;
|
|
64
|
+
const denom = 1 - Math.min(drop, 0.45);
|
|
65
|
+
return ratedA / denom;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// lib/tapCode.ts
|
|
69
|
+
var PITCHES = [10, 12, 14, 16, 18];
|
|
70
|
+
var W_DIAGRAMS = [
|
|
71
|
+
// mid=1, small pitch ladder
|
|
72
|
+
{ plusMinus: 4, pitch: 10, positions: 9, mid: 1 },
|
|
73
|
+
// 10091W
|
|
74
|
+
{ plusMinus: 5, pitch: 12, positions: 11, mid: 1 },
|
|
75
|
+
// 12111W
|
|
76
|
+
{ plusMinus: 6, pitch: 14, positions: 13, mid: 1 },
|
|
77
|
+
// 14131W
|
|
78
|
+
{ plusMinus: 7, pitch: 16, positions: 15, mid: 1 },
|
|
79
|
+
// 16151W
|
|
80
|
+
{ plusMinus: 8, pitch: 18, positions: 17, mid: 1 },
|
|
81
|
+
// 18171W
|
|
82
|
+
// mid=1, large (odd ±N)
|
|
83
|
+
{ plusMinus: 9, pitch: 10, positions: 19, mid: 1 },
|
|
84
|
+
// 10191W
|
|
85
|
+
{ plusMinus: 11, pitch: 12, positions: 23, mid: 1 },
|
|
86
|
+
// 12231W
|
|
87
|
+
{ plusMinus: 13, pitch: 14, positions: 27, mid: 1 },
|
|
88
|
+
// 14271W
|
|
89
|
+
{ plusMinus: 15, pitch: 16, positions: 31, mid: 1 },
|
|
90
|
+
// 16311W
|
|
91
|
+
{ plusMinus: 17, pitch: 18, positions: 35, mid: 1 },
|
|
92
|
+
// 18351W
|
|
93
|
+
// mid=3 (even ±N) — most common overseas quotes
|
|
94
|
+
{ plusMinus: 8, pitch: 10, positions: 19, mid: 3 },
|
|
95
|
+
// 10193W ★
|
|
96
|
+
{ plusMinus: 10, pitch: 12, positions: 23, mid: 3 },
|
|
97
|
+
// 12233W
|
|
98
|
+
{ plusMinus: 12, pitch: 14, positions: 27, mid: 3 },
|
|
99
|
+
// 14273W
|
|
100
|
+
{ plusMinus: 14, pitch: 16, positions: 31, mid: 3 },
|
|
101
|
+
// 16313W
|
|
102
|
+
{ plusMinus: 16, pitch: 18, positions: 35, mid: 3 }
|
|
103
|
+
// 18353W
|
|
104
|
+
];
|
|
105
|
+
var G_DIAGRAMS = [
|
|
106
|
+
{ plusMinus: 9, pitch: 10, positions: 19, mid: 1 },
|
|
107
|
+
// 10191G
|
|
108
|
+
{ plusMinus: 11, pitch: 12, positions: 23, mid: 1 },
|
|
109
|
+
// 12231G
|
|
110
|
+
{ plusMinus: 13, pitch: 14, positions: 27, mid: 1 },
|
|
111
|
+
// 14271G
|
|
112
|
+
{ plusMinus: 15, pitch: 16, positions: 31, mid: 1 },
|
|
113
|
+
// 16311G
|
|
114
|
+
{ plusMinus: 17, pitch: 18, positions: 35, mid: 1 },
|
|
115
|
+
// 18351G
|
|
116
|
+
{ plusMinus: 8, pitch: 10, positions: 19, mid: 3 },
|
|
117
|
+
// 10193G ★
|
|
118
|
+
{ plusMinus: 10, pitch: 12, positions: 23, mid: 3 },
|
|
119
|
+
// 12233G
|
|
120
|
+
{ plusMinus: 12, pitch: 14, positions: 27, mid: 3 },
|
|
121
|
+
// 14273G
|
|
122
|
+
{ plusMinus: 14, pitch: 16, positions: 31, mid: 3 },
|
|
123
|
+
// 16313G
|
|
124
|
+
{ plusMinus: 16, pitch: 18, positions: 35, mid: 3 }
|
|
125
|
+
// 18353G
|
|
126
|
+
];
|
|
127
|
+
function diagramsFor(regulation) {
|
|
128
|
+
if (regulation === "coarse_fine") return G_DIAGRAMS;
|
|
129
|
+
if (regulation === "reversing") return W_DIAGRAMS;
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
function preferredMid(n, regulation) {
|
|
133
|
+
const rows = diagramsFor(regulation).filter((d) => d.plusMinus === n);
|
|
134
|
+
if (!rows.length) return n % 2 === 0 ? 3 : 1;
|
|
135
|
+
const mid3 = rows.find((d) => d.mid === 3);
|
|
136
|
+
if (mid3) return 3;
|
|
137
|
+
return rows[0].mid === 3 ? 3 : 1;
|
|
138
|
+
}
|
|
139
|
+
function lookupDiagram(n, mid, regulation) {
|
|
140
|
+
return diagramsFor(regulation).find(
|
|
141
|
+
(d) => d.plusMinus === n && d.mid === mid
|
|
142
|
+
) ?? null;
|
|
143
|
+
}
|
|
144
|
+
function pitchFor(n, mid) {
|
|
145
|
+
if (mid === 3) return n + 2;
|
|
146
|
+
if (n <= 8) return 2 * n + 2;
|
|
147
|
+
return n + 1;
|
|
148
|
+
}
|
|
149
|
+
function positionsFor(n, mid) {
|
|
150
|
+
if (mid === 0) return n;
|
|
151
|
+
return 2 * n + mid;
|
|
152
|
+
}
|
|
153
|
+
function midOptionsFor(n, regulation) {
|
|
154
|
+
const mids = diagramsFor(regulation).filter((d) => d.plusMinus === n).map((d) => d.mid);
|
|
155
|
+
const out = [];
|
|
156
|
+
if (mids.includes(3)) out.push(3);
|
|
157
|
+
if (mids.includes(1)) out.push(1);
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
var PM_STEP_OPTIONS_W = [
|
|
161
|
+
4,
|
|
162
|
+
5,
|
|
163
|
+
6,
|
|
164
|
+
7,
|
|
165
|
+
8,
|
|
166
|
+
9,
|
|
167
|
+
10,
|
|
168
|
+
11,
|
|
169
|
+
12,
|
|
170
|
+
13,
|
|
171
|
+
14,
|
|
172
|
+
15,
|
|
173
|
+
16,
|
|
174
|
+
17
|
|
175
|
+
];
|
|
176
|
+
var PM_TAP_MAP = Object.fromEntries(
|
|
177
|
+
PM_STEP_OPTIONS_W.map((n) => {
|
|
178
|
+
const mid = preferredMid(n, "reversing");
|
|
179
|
+
const row = lookupDiagram(n, mid, "reversing");
|
|
180
|
+
return [n, { pitch: row.pitch, positions: row.positions, mid: row.mid }];
|
|
181
|
+
})
|
|
182
|
+
);
|
|
183
|
+
function plusMinusFromPositions(positions, regulation) {
|
|
184
|
+
if (regulation === "linear") return null;
|
|
185
|
+
const rows = diagramsFor(regulation).filter((d) => d.positions === positions);
|
|
186
|
+
if (!rows.length) return null;
|
|
187
|
+
const mid3 = rows.find((d) => d.mid === 3);
|
|
188
|
+
return (mid3 ?? rows[0]).plusMinus;
|
|
189
|
+
}
|
|
190
|
+
function defaultPitch(positions, regulation) {
|
|
191
|
+
if (regulation === "linear") {
|
|
192
|
+
if (positions <= 10) return 10;
|
|
193
|
+
if (positions <= 12) return 12;
|
|
194
|
+
if (positions <= 14) return 14;
|
|
195
|
+
if (positions <= 16) return 16;
|
|
196
|
+
return 18;
|
|
197
|
+
}
|
|
198
|
+
const n = plusMinusFromPositions(positions, regulation);
|
|
199
|
+
if (n != null) {
|
|
200
|
+
const mid = defaultMid(positions, regulation);
|
|
201
|
+
if (mid === 1 || mid === 3) {
|
|
202
|
+
const row = lookupDiagram(n, mid, regulation);
|
|
203
|
+
if (row) return row.pitch;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (positions <= 19) return 10;
|
|
207
|
+
if (positions <= 23) return 12;
|
|
208
|
+
if (positions <= 27) return 14;
|
|
209
|
+
if (positions <= 31) return 16;
|
|
210
|
+
return 18;
|
|
211
|
+
}
|
|
212
|
+
function defaultMid(positions, regulation) {
|
|
213
|
+
if (regulation === "linear") return 0;
|
|
214
|
+
if (positions === 19 || positions === 23 || positions === 27 || positions === 31 || positions === 35) {
|
|
215
|
+
return 3;
|
|
216
|
+
}
|
|
217
|
+
if (positions % 2 === 1) return 1;
|
|
218
|
+
return 1;
|
|
219
|
+
}
|
|
220
|
+
function changeOverOf(regulation) {
|
|
221
|
+
if (regulation === "linear") return "0";
|
|
222
|
+
if (regulation === "reversing") return "W";
|
|
223
|
+
return "G";
|
|
224
|
+
}
|
|
225
|
+
function buildTapCode(opts) {
|
|
226
|
+
let pitch = opts.pitch;
|
|
227
|
+
if (!PITCHES.includes(pitch)) {
|
|
228
|
+
pitch = defaultPitch(opts.positions, opts.regulation);
|
|
229
|
+
}
|
|
230
|
+
if (!PITCHES.includes(pitch)) {
|
|
231
|
+
pitch = 10;
|
|
232
|
+
}
|
|
233
|
+
const mid = opts.regulation === "linear" ? 0 : opts.mid;
|
|
234
|
+
const co = changeOverOf(opts.regulation);
|
|
235
|
+
const p = String(pitch).padStart(2, "0");
|
|
236
|
+
const pos = String(opts.positions).padStart(2, "0");
|
|
237
|
+
if (co === "0") {
|
|
238
|
+
return `${p}${pos}${mid === 0 ? "0" : mid}`;
|
|
239
|
+
}
|
|
240
|
+
return `${p}${pos}${mid}${co}`;
|
|
241
|
+
}
|
|
242
|
+
function resolveTapFields(input) {
|
|
243
|
+
const reg = input.regulation;
|
|
244
|
+
if (reg === "linear") {
|
|
245
|
+
const positions2 = input.positions ?? 9;
|
|
246
|
+
const pitch2 = input.pitch ?? defaultPitch(positions2, reg);
|
|
247
|
+
const mid2 = 0;
|
|
248
|
+
return {
|
|
249
|
+
positions: positions2,
|
|
250
|
+
pitch: pitch2,
|
|
251
|
+
mid: mid2,
|
|
252
|
+
tapCode: buildTapCode({ pitch: pitch2, positions: positions2, mid: mid2, regulation: reg }),
|
|
253
|
+
changeOver: "0"
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (input.plusMinusSteps != null && input.plusMinusSteps > 0) {
|
|
257
|
+
const n = input.plusMinusSteps;
|
|
258
|
+
const allowed = midOptionsFor(n, reg);
|
|
259
|
+
let mid2;
|
|
260
|
+
if (input.midPositions === 1 || input.midPositions === 3) {
|
|
261
|
+
mid2 = allowed.includes(input.midPositions) ? input.midPositions : preferredMid(n, reg);
|
|
262
|
+
} else {
|
|
263
|
+
mid2 = preferredMid(n, reg);
|
|
264
|
+
}
|
|
265
|
+
const row = lookupDiagram(n, mid2, reg);
|
|
266
|
+
const positions2 = row?.positions ?? positionsFor(n, mid2);
|
|
267
|
+
const pitch2 = input.pitch ?? row?.pitch ?? pitchFor(n, mid2);
|
|
268
|
+
return {
|
|
269
|
+
positions: positions2,
|
|
270
|
+
pitch: pitch2,
|
|
271
|
+
mid: mid2,
|
|
272
|
+
tapCode: buildTapCode({ pitch: pitch2, positions: positions2, mid: mid2, regulation: reg }),
|
|
273
|
+
changeOver: changeOverOf(reg)
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
let positions = input.positions ?? 19;
|
|
277
|
+
let mid = input.midPositions === 1 || input.midPositions === 3 ? input.midPositions : defaultMid(positions, reg);
|
|
278
|
+
const pitch = input.pitch ?? (mid === 1 || mid === 3 ? (() => {
|
|
279
|
+
const n = plusMinusFromPositions(positions, reg);
|
|
280
|
+
if (n != null) {
|
|
281
|
+
const row = lookupDiagram(n, mid, reg);
|
|
282
|
+
if (row) return row.pitch;
|
|
283
|
+
}
|
|
284
|
+
return defaultPitch(positions, reg);
|
|
285
|
+
})() : defaultPitch(positions, reg));
|
|
286
|
+
return {
|
|
287
|
+
positions,
|
|
288
|
+
pitch,
|
|
289
|
+
mid,
|
|
290
|
+
tapCode: buildTapCode({ pitch, positions, mid, regulation: reg }),
|
|
291
|
+
changeOver: changeOverOf(reg)
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// lib/catalog.ts
|
|
296
|
+
var EARTH_INSULATION = {
|
|
297
|
+
12: { pf: 35, bil: 75 },
|
|
298
|
+
17.5: { pf: 45, bil: 105 },
|
|
299
|
+
40.5: { pf: 90, bil: 250 },
|
|
300
|
+
72.5: { pf: 140, bil: 350 },
|
|
301
|
+
126: { pf: 230, bil: 550 },
|
|
302
|
+
145: { pf: 275, bil: 650 },
|
|
303
|
+
170: { pf: 325, bil: 750 },
|
|
304
|
+
252: { pf: 460, bil: 1050 },
|
|
305
|
+
300: { pf: 480, bil: 1100 },
|
|
306
|
+
363: { pf: 510, bil: 1175 }
|
|
307
|
+
};
|
|
308
|
+
var UM_OPTIONS_KV = [
|
|
309
|
+
12,
|
|
310
|
+
17.5,
|
|
311
|
+
40.5,
|
|
312
|
+
72.5,
|
|
313
|
+
126,
|
|
314
|
+
145,
|
|
315
|
+
170,
|
|
316
|
+
252,
|
|
317
|
+
300,
|
|
318
|
+
363
|
|
319
|
+
];
|
|
320
|
+
function catalogueMenu(steps, unit) {
|
|
321
|
+
return steps.map((v) => {
|
|
322
|
+
const label = `${v} ${unit}`;
|
|
323
|
+
return { value: v, labelZh: label, labelEn: label };
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
var UM_MENU = catalogueMenu(UM_OPTIONS_KV, "kV");
|
|
327
|
+
var CURRENT_OPTIONS_A = [
|
|
328
|
+
160,
|
|
329
|
+
200,
|
|
330
|
+
350,
|
|
331
|
+
400,
|
|
332
|
+
500,
|
|
333
|
+
600,
|
|
334
|
+
700,
|
|
335
|
+
800,
|
|
336
|
+
1e3,
|
|
337
|
+
1200,
|
|
338
|
+
1300,
|
|
339
|
+
1500,
|
|
340
|
+
1600,
|
|
341
|
+
2e3,
|
|
342
|
+
2400,
|
|
343
|
+
2500,
|
|
344
|
+
3e3
|
|
345
|
+
];
|
|
346
|
+
var CURRENT_MENU = catalogueMenu(
|
|
347
|
+
CURRENT_OPTIONS_A,
|
|
348
|
+
"A"
|
|
349
|
+
);
|
|
350
|
+
var STEP_VOLTAGE_OPTIONS_V = [
|
|
351
|
+
500,
|
|
352
|
+
800,
|
|
353
|
+
1e3,
|
|
354
|
+
1200,
|
|
355
|
+
1400,
|
|
356
|
+
1500,
|
|
357
|
+
1650,
|
|
358
|
+
1800,
|
|
359
|
+
2e3,
|
|
360
|
+
2200,
|
|
361
|
+
2500,
|
|
362
|
+
3e3,
|
|
363
|
+
3300,
|
|
364
|
+
4e3
|
|
365
|
+
];
|
|
366
|
+
var STEP_VOLTAGE_MENU = catalogueMenu(
|
|
367
|
+
STEP_VOLTAGE_OPTIONS_V,
|
|
368
|
+
"V"
|
|
369
|
+
);
|
|
370
|
+
var ACROSS_BIL_OPTIONS_KV = [
|
|
371
|
+
75,
|
|
372
|
+
95,
|
|
373
|
+
105,
|
|
374
|
+
120,
|
|
375
|
+
150,
|
|
376
|
+
170,
|
|
377
|
+
200,
|
|
378
|
+
250,
|
|
379
|
+
285,
|
|
380
|
+
320,
|
|
381
|
+
350,
|
|
382
|
+
450,
|
|
383
|
+
520,
|
|
384
|
+
550,
|
|
385
|
+
650,
|
|
386
|
+
750
|
|
387
|
+
];
|
|
388
|
+
var ACROSS_PF_OPTIONS_KV = [
|
|
389
|
+
20,
|
|
390
|
+
30,
|
|
391
|
+
38,
|
|
392
|
+
45,
|
|
393
|
+
50,
|
|
394
|
+
65,
|
|
395
|
+
70,
|
|
396
|
+
80,
|
|
397
|
+
85,
|
|
398
|
+
95,
|
|
399
|
+
100,
|
|
400
|
+
110,
|
|
401
|
+
125,
|
|
402
|
+
140,
|
|
403
|
+
150
|
|
404
|
+
];
|
|
405
|
+
var ACROSS_BIL_MENU = catalogueMenu(
|
|
406
|
+
ACROSS_BIL_OPTIONS_KV,
|
|
407
|
+
"kV"
|
|
408
|
+
);
|
|
409
|
+
var ACROSS_PF_MENU = catalogueMenu(
|
|
410
|
+
ACROSS_PF_OPTIONS_KV,
|
|
411
|
+
"kV"
|
|
412
|
+
);
|
|
413
|
+
var SELECTOR_SIZES_BY_UM = {
|
|
414
|
+
40.5: ["B", "C"],
|
|
415
|
+
72.5: ["B", "C", "D", "DE"],
|
|
416
|
+
126: ["B", "C", "D", "DE"],
|
|
417
|
+
145: ["C", "D", "DE"],
|
|
418
|
+
170: ["B", "C", "D", "DE"],
|
|
419
|
+
252: ["C", "D", "DE"],
|
|
420
|
+
300: ["DE"],
|
|
421
|
+
363: ["DE"]
|
|
422
|
+
};
|
|
423
|
+
var SIZE_ORDER = ["B", "C", "D", "DE"];
|
|
424
|
+
var INTERNAL_INSULATION = {
|
|
425
|
+
"": { a_li: 0, a_pf: 0, b_li: 0, b_pf: 0 },
|
|
426
|
+
A: { a_li: 0, a_pf: 0, b_li: 0, b_pf: 0 },
|
|
427
|
+
B: { a_li: 265, a_pf: 50, b_li: 265, b_pf: 50 },
|
|
428
|
+
C: { a_li: 365, a_pf: 82, b_li: 350, b_pf: 82 },
|
|
429
|
+
D: { a_li: 460, a_pf: 105, b_li: 460, b_pf: 146 },
|
|
430
|
+
DE: { a_li: 550, a_pf: 120, b_li: 550, b_pf: 160 },
|
|
431
|
+
E: { a_li: 0, a_pf: 0, b_li: 0, b_pf: 0 }
|
|
432
|
+
};
|
|
433
|
+
function iiiTypeAllowsConnection(s, phases, conn) {
|
|
434
|
+
if (phases !== "III") return true;
|
|
435
|
+
const allowed = s.iiiConnections ?? s.connections;
|
|
436
|
+
if (conn === "any") return true;
|
|
437
|
+
return allowed.includes(conn) || allowed.includes("any");
|
|
438
|
+
}
|
|
439
|
+
var FAMILY_MIN_RANK = {
|
|
440
|
+
cv2: 10,
|
|
441
|
+
cv: 18,
|
|
442
|
+
sv: 19,
|
|
443
|
+
cm2: 25,
|
|
444
|
+
shzv: 40,
|
|
445
|
+
shzvg: 45,
|
|
446
|
+
// high-current vacuum after standard SHZV
|
|
447
|
+
cm: 50,
|
|
448
|
+
cmd: 55,
|
|
449
|
+
hwv: 15,
|
|
450
|
+
// only wins on on-tank path
|
|
451
|
+
cvt: 12,
|
|
452
|
+
cz: 14,
|
|
453
|
+
wsg: 6,
|
|
454
|
+
hwdk: 80,
|
|
455
|
+
wsl: 5,
|
|
456
|
+
// OCTC-only list (never mixed into CV2→CM2→SHZV)
|
|
457
|
+
wdl: 6
|
|
458
|
+
};
|
|
459
|
+
var SERIES = [
|
|
460
|
+
{
|
|
461
|
+
id: "shzv",
|
|
462
|
+
code: "SHZV",
|
|
463
|
+
nameEn: "SHZV in-tank vacuum OLTC (combined)",
|
|
464
|
+
nameZh: "SHZV \u7BB1\u5185\u771F\u7A7A\u6709\u8F7D\u5F00\u5173\uFF08\u7EC4\u5408\u5F0F\uFF09",
|
|
465
|
+
mounting: ["in_tank"],
|
|
466
|
+
medium: "oil_vacuum",
|
|
467
|
+
structure: "combined",
|
|
468
|
+
vacuum: true,
|
|
469
|
+
currents: {
|
|
470
|
+
I: [400, 600, 1e3, 1200, 1500, 1600, 2400],
|
|
471
|
+
II: [400, 600, 1e3],
|
|
472
|
+
III: [400, 600, 1e3]
|
|
473
|
+
},
|
|
474
|
+
// List 72.5/126/170/252. 300 from 2026 OS. 363 brochure-only (no 2025 list row).
|
|
475
|
+
umKv: [72.5, 126, 170, 252, 300, 363],
|
|
476
|
+
usesSelectorSize: true,
|
|
477
|
+
maxStepVoltageV: 4e3,
|
|
478
|
+
stepCapacityByCurrent: {
|
|
479
|
+
400: 1500,
|
|
480
|
+
600: 1600,
|
|
481
|
+
1e3: 3e3,
|
|
482
|
+
1200: 3e3,
|
|
483
|
+
1500: 3e3,
|
|
484
|
+
1600: 4400,
|
|
485
|
+
2400: 5600
|
|
486
|
+
},
|
|
487
|
+
connections: ["Y", "D"],
|
|
488
|
+
iiiConnections: ["Y"],
|
|
489
|
+
maxPositionsLinear: 18,
|
|
490
|
+
maxPositionsWithChangeOver: 35,
|
|
491
|
+
defaultMdu: "CMA7",
|
|
492
|
+
notesEn: "In-tank vacuum combined. Brochure III type is star-point only (no SHZVIII-\u2026D). Use when compound / CM2 cannot cover. For I\u1D64\u226B1000 A III see SHZVG.",
|
|
493
|
+
notesZh: "\u7BB1\u5185\u771F\u7A7A\u7EC4\u5408\u5F0F\u3002\u6837\u672C\u4E09\u76F8\u578B\u53F7\u53EA\u7ED9\u661F\u70B9\uFF08\u6CA1\u6709 SHZVIII-\u2026D\uFF09\u3002\u5F53\u590D\u5408\u5F0F/CM2 \u4E0D\u591F\u65F6\u7528\u3002\u4E09\u76F8\u7535\u6D41\u663E\u8457\u5927\u4E8E 1000 A \u89C1 SHZVG\u3002",
|
|
494
|
+
rank: 40
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
id: "shzvg",
|
|
498
|
+
code: "SHZVG",
|
|
499
|
+
nameEn: "SHZVG in-tank vacuum OLTC (high current)",
|
|
500
|
+
nameZh: "SHZVG \u7BB1\u5185\u771F\u7A7A\u6709\u8F7D\u5F00\u5173\uFF08\u5927\u7535\u6D41\uFF09",
|
|
501
|
+
mounting: ["in_tank"],
|
|
502
|
+
medium: "oil_vacuum",
|
|
503
|
+
structure: "combined",
|
|
504
|
+
vacuum: true,
|
|
505
|
+
// 2025 list: III 1300/1500; I 1300/2000/3000. Um 72.5/126/170/252 only.
|
|
506
|
+
currents: {
|
|
507
|
+
I: [1300, 2e3, 3e3],
|
|
508
|
+
II: [1300],
|
|
509
|
+
III: [1300, 1500]
|
|
510
|
+
},
|
|
511
|
+
umKv: [72.5, 126, 170, 252],
|
|
512
|
+
usesSelectorSize: true,
|
|
513
|
+
maxStepVoltageV: 4e3,
|
|
514
|
+
stepCapacityByCurrent: {
|
|
515
|
+
1300: 3e3,
|
|
516
|
+
1500: 3500,
|
|
517
|
+
2e3: 4400,
|
|
518
|
+
3e3: 5600
|
|
519
|
+
},
|
|
520
|
+
connections: ["Y", "D"],
|
|
521
|
+
iiiConnections: ["Y"],
|
|
522
|
+
maxPositionsLinear: 18,
|
|
523
|
+
maxPositionsWithChangeOver: 35,
|
|
524
|
+
defaultMdu: "CMA7",
|
|
525
|
+
notesEn: "High-current vacuum combined (2025 shipments). Brochure III type is star-point only (no SHZVGIII-\u2026D). Prefer when SHZV III max 1000 A is short.",
|
|
526
|
+
notesZh: "\u5927\u7535\u6D41\u771F\u7A7A\u7EC4\u5408\u5F0F\uFF082025 \u51FA\u8D27\u6709\u91CF\uFF09\u3002\u6837\u672C\u4E09\u76F8\u578B\u53F7\u53EA\u7ED9\u661F\u70B9\uFF08\u6CA1\u6709 SHZVGIII-\u2026D\uFF09\u3002\u4EC5\u5F53 SHZV \u4E09\u76F8 1000 A \u4E0D\u591F\u65F6\u9009\u7528\u3002",
|
|
527
|
+
rank: 45
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
id: "hwv",
|
|
531
|
+
code: "HWV",
|
|
532
|
+
nameEn: "HWV externally-mounted vacuum OLTC",
|
|
533
|
+
nameZh: "HWV \u7BB1\u5916\u771F\u7A7A\u6709\u8F7D\u5F00\u5173",
|
|
534
|
+
mounting: ["on_tank", "external_compartment"],
|
|
535
|
+
medium: "oil_vacuum",
|
|
536
|
+
structure: "combined",
|
|
537
|
+
vacuum: true,
|
|
538
|
+
currents: {
|
|
539
|
+
I: [400, 800, 1e3],
|
|
540
|
+
III: [400, 800, 1e3]
|
|
541
|
+
},
|
|
542
|
+
umKv: [17.5, 40.5, 72.5],
|
|
543
|
+
usesSelectorSize: false,
|
|
544
|
+
maxStepVoltageV: 3300,
|
|
545
|
+
stepCapacityByCurrent: {
|
|
546
|
+
400: 1200,
|
|
547
|
+
800: 2200,
|
|
548
|
+
1e3: 2600
|
|
549
|
+
},
|
|
550
|
+
connections: ["Y", "D", "any"],
|
|
551
|
+
maxPositionsLinear: 18,
|
|
552
|
+
maxPositionsWithChangeOver: 35,
|
|
553
|
+
defaultMdu: "CMA7",
|
|
554
|
+
notesEn: "Side-mounted independent oil compartment \u2014 retrofit / side tank. Commercial string usually omits selector grade.",
|
|
555
|
+
notesZh: "\u4FA7\u9762\u72EC\u7ACB\u6CB9\u5BA4\uFF0C\u6539\u9020\u5E38\u7528\u3002\u5546\u52A1\u578B\u53F7\u901A\u5E38\u4E0D\u5199\u9009\u62E9\u5668\u5B57\u6BCD\u3002",
|
|
556
|
+
rank: 15
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
id: "cm2",
|
|
560
|
+
code: "CM2",
|
|
561
|
+
nameEn: "CM2 in-tank vacuum OLTC (combined)",
|
|
562
|
+
nameZh: "CM2 \u7BB1\u5185\u771F\u7A7A\u6709\u8F7D\u5F00\u5173\uFF08\u7EC4\u5408\u5F0F\uFF09",
|
|
563
|
+
mounting: ["in_tank"],
|
|
564
|
+
medium: "oil_vacuum",
|
|
565
|
+
structure: "combined",
|
|
566
|
+
vacuum: true,
|
|
567
|
+
currents: {
|
|
568
|
+
I: [500, 600, 800, 1200, 1500],
|
|
569
|
+
II: [500, 600],
|
|
570
|
+
III: [500, 600]
|
|
571
|
+
},
|
|
572
|
+
umKv: [72.5, 126, 170, 252],
|
|
573
|
+
usesSelectorSize: true,
|
|
574
|
+
maxStepVoltageV: 3300,
|
|
575
|
+
stepCapacityByCurrent: {
|
|
576
|
+
500: 1400,
|
|
577
|
+
600: 1500,
|
|
578
|
+
800: 2e3,
|
|
579
|
+
1200: 3100,
|
|
580
|
+
1500: 3500
|
|
581
|
+
},
|
|
582
|
+
connections: ["Y", "D"],
|
|
583
|
+
iiiConnections: ["Y"],
|
|
584
|
+
maxPositionsLinear: 18,
|
|
585
|
+
maxPositionsWithChangeOver: 35,
|
|
586
|
+
defaultMdu: "CMA7",
|
|
587
|
+
notesEn: "Vacuum combined. Brochure III type is star-point only (no CM2III-\u2026D). Prefer over SHZV when III \u2264600 A (or single-phase ratings) and Um/positions fit.",
|
|
588
|
+
notesZh: "\u771F\u7A7A\u7EC4\u5408\u5F0F\u3002\u6837\u672C\u4E09\u76F8\u578B\u53F7\u53EA\u7ED9\u661F\u70B9\uFF08\u6CA1\u6709 CM2III-\u2026D\uFF09\u3002\u4E09\u76F8 \u2264600 A \u4E14 Um/\u6863\u4F4D\u6EE1\u8DB3\u65F6\u4F18\u5148\u4E8E SHZV\u3002",
|
|
589
|
+
rank: 25
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
id: "cm",
|
|
593
|
+
code: "CM",
|
|
594
|
+
nameEn: "CM in-tank oil OLTC (combined)",
|
|
595
|
+
nameZh: "CM \u7BB1\u5185\u6CB9\u6D78\u6709\u8F7D\u5F00\u5173\uFF08\u7EC4\u5408\u5F0F\uFF09",
|
|
596
|
+
mounting: ["in_tank"],
|
|
597
|
+
medium: "oil",
|
|
598
|
+
structure: "combined",
|
|
599
|
+
vacuum: false,
|
|
600
|
+
currents: {
|
|
601
|
+
I: [500, 600, 800, 1200, 1500],
|
|
602
|
+
II: [500, 600],
|
|
603
|
+
III: [500, 600]
|
|
604
|
+
},
|
|
605
|
+
umKv: [72.5, 126, 170, 252],
|
|
606
|
+
usesSelectorSize: true,
|
|
607
|
+
maxStepVoltageV: 3300,
|
|
608
|
+
stepCapacityByCurrent: {
|
|
609
|
+
500: 1400,
|
|
610
|
+
600: 1500,
|
|
611
|
+
800: 2e3,
|
|
612
|
+
1200: 3100,
|
|
613
|
+
1500: 3500
|
|
614
|
+
},
|
|
615
|
+
connections: ["Y", "D"],
|
|
616
|
+
iiiConnections: ["Y"],
|
|
617
|
+
maxPositionsLinear: 18,
|
|
618
|
+
maxPositionsWithChangeOver: 35,
|
|
619
|
+
defaultMdu: "CMA7",
|
|
620
|
+
notesEn: "Oil combined. Brochure III type is star-point only (no CMIII-\u2026D). Prefer vacuum when switching is frequent.",
|
|
621
|
+
notesZh: "\u6CB9\u5207\u6362\u7EC4\u5408\u5F0F\u3002\u6837\u672C\u4E09\u76F8\u578B\u53F7\u53EA\u7ED9\u661F\u70B9\uFF08\u6CA1\u6709 CMIII-\u2026D\uFF09\u3002\u5207\u6362\u9891\u7E41\u65F6\u4F18\u5148\u771F\u7A7A\u3002",
|
|
622
|
+
rank: 50
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
id: "cmd",
|
|
626
|
+
code: "CMD",
|
|
627
|
+
nameEn: "CMD in-tank oil OLTC (combined, high current)",
|
|
628
|
+
nameZh: "CMD \u7BB1\u5185\u6CB9\u6D78\u6709\u8F7D\u5F00\u5173\uFF08\u5927\u7535\u6D41\uFF09",
|
|
629
|
+
mounting: ["in_tank"],
|
|
630
|
+
medium: "oil",
|
|
631
|
+
structure: "combined",
|
|
632
|
+
vacuum: false,
|
|
633
|
+
currents: {
|
|
634
|
+
// 2025 sales: CMDI-1200 common (indirect export); price list also 400/600/1000/1600/2400
|
|
635
|
+
I: [400, 600, 1e3, 1200, 1600, 2400],
|
|
636
|
+
II: [400, 600, 1e3],
|
|
637
|
+
III: [400, 600, 1e3]
|
|
638
|
+
},
|
|
639
|
+
umKv: [72.5, 126, 170, 252],
|
|
640
|
+
usesSelectorSize: true,
|
|
641
|
+
maxStepVoltageV: 4e3,
|
|
642
|
+
stepCapacityByCurrent: {
|
|
643
|
+
400: 1320,
|
|
644
|
+
600: 1600,
|
|
645
|
+
1e3: 3e3,
|
|
646
|
+
1200: 3e3,
|
|
647
|
+
1600: 4400,
|
|
648
|
+
2400: 5600
|
|
649
|
+
},
|
|
650
|
+
connections: ["Y", "D"],
|
|
651
|
+
iiiConnections: ["Y"],
|
|
652
|
+
maxPositionsLinear: 14,
|
|
653
|
+
maxPositionsWithChangeOver: 27,
|
|
654
|
+
defaultMdu: "CMA7",
|
|
655
|
+
notesEn: "Higher through-current oil combined type. Brochure III type is star-point only (no CMDIII-\u2026D).",
|
|
656
|
+
notesZh: "\u66F4\u5927\u989D\u5B9A\u7535\u6D41\u7684\u6CB9\u6D78\u7EC4\u5408\u5F0F\u3002\u6837\u672C\u4E09\u76F8\u578B\u53F7\u53EA\u7ED9\u661F\u70B9\uFF08\u6CA1\u6709 CMDIII-\u2026D\uFF09\u3002",
|
|
657
|
+
rank: 55
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
id: "cv2",
|
|
661
|
+
code: "CV2",
|
|
662
|
+
nameEn: "CV2 in-tank vacuum compound OLTC (selector switch)",
|
|
663
|
+
nameZh: "CV2 \u7BB1\u5185\u771F\u7A7A\u590D\u5408\u5F0F\u6709\u8F7D\u5F00\u5173\uFF08\u9009\u62E9\u5F00\u5173\uFF09",
|
|
664
|
+
mounting: ["in_tank"],
|
|
665
|
+
medium: "oil_vacuum",
|
|
666
|
+
structure: "compound",
|
|
667
|
+
vacuum: true,
|
|
668
|
+
currents: {
|
|
669
|
+
I: [350, 600],
|
|
670
|
+
III: [350, 600]
|
|
671
|
+
},
|
|
672
|
+
umKv: [40.5, 72.5, 126, 145],
|
|
673
|
+
usesSelectorSize: false,
|
|
674
|
+
maxStepVoltageV: 2e3,
|
|
675
|
+
stepCapacityByCurrent: {
|
|
676
|
+
350: 700,
|
|
677
|
+
600: 800
|
|
678
|
+
},
|
|
679
|
+
connections: ["Y", "D"],
|
|
680
|
+
maxPositionsLinear: 12,
|
|
681
|
+
maxPositionsWithChangeOver: 23,
|
|
682
|
+
defaultMdu: "CMA7",
|
|
683
|
+
notesEn: "Compound vacuum. 2025 sales: III 350/600 only (no 500). Prefer when I\u2264600 A, Um\u2264145 kV, positions\u226423.",
|
|
684
|
+
notesZh: "\u771F\u7A7A\u590D\u5408\u5F0F\u30022025 \u51FA\u8D27\u4E09\u76F8\u4EC5 350/600 A\uFF08\u65E0 500\uFF09\u3002I\u2264600\u3001Um\u2264145\u3001\u6863\u4F4D\u226423 \u65F6\u4F18\u5148\u3002",
|
|
685
|
+
rank: 10
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
id: "cv",
|
|
689
|
+
code: "CV",
|
|
690
|
+
nameEn: "CV in-tank oil compound OLTC",
|
|
691
|
+
nameZh: "CV \u7BB1\u5185\u6CB9\u6D78\u590D\u5408\u5F0F\u6709\u8F7D\u5F00\u5173",
|
|
692
|
+
mounting: ["in_tank"],
|
|
693
|
+
medium: "oil",
|
|
694
|
+
structure: "compound",
|
|
695
|
+
vacuum: false,
|
|
696
|
+
currents: {
|
|
697
|
+
I: [350, 700],
|
|
698
|
+
III: [350]
|
|
699
|
+
},
|
|
700
|
+
umKv: [40.5, 72.5],
|
|
701
|
+
usesSelectorSize: false,
|
|
702
|
+
maxStepVoltageV: 1500,
|
|
703
|
+
stepCapacityByCurrent: {
|
|
704
|
+
350: 525,
|
|
705
|
+
700: 660
|
|
706
|
+
},
|
|
707
|
+
connections: ["Y", "D"],
|
|
708
|
+
maxPositionsLinear: 14,
|
|
709
|
+
maxPositionsWithChangeOver: 27,
|
|
710
|
+
defaultMdu: "CMA7",
|
|
711
|
+
notesEn: "Oil compound. 500 A oil compound is SV, not CV.",
|
|
712
|
+
notesZh: "\u6CB9\u6D78\u590D\u5408\u5F0F\u3002500 A \u6CB9\u6D78\u590D\u5408\u4E3A SV\u3002",
|
|
713
|
+
rank: 18
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
id: "sv",
|
|
717
|
+
code: "SV",
|
|
718
|
+
nameEn: "SV in-tank oil compound OLTC",
|
|
719
|
+
nameZh: "SV \u7BB1\u5185\u6CB9\u6D78\u590D\u5408\u5F0F\u6709\u8F7D\u5F00\u5173",
|
|
720
|
+
mounting: ["in_tank"],
|
|
721
|
+
medium: "oil",
|
|
722
|
+
structure: "compound",
|
|
723
|
+
vacuum: false,
|
|
724
|
+
currents: {
|
|
725
|
+
III: [500]
|
|
726
|
+
},
|
|
727
|
+
umKv: [40.5, 72.5],
|
|
728
|
+
usesSelectorSize: false,
|
|
729
|
+
maxStepVoltageV: 1500,
|
|
730
|
+
stepCapacityByCurrent: {
|
|
731
|
+
500: 525
|
|
732
|
+
},
|
|
733
|
+
connections: ["Y", "D"],
|
|
734
|
+
maxPositionsLinear: 12,
|
|
735
|
+
maxPositionsWithChangeOver: 23,
|
|
736
|
+
defaultMdu: "CMA7",
|
|
737
|
+
notesEn: "Oil compound 500 A (SVIII-500).",
|
|
738
|
+
notesZh: "\u6CB9\u6D78\u590D\u5408\u5F0F 500 A\uFF08SVIII-500\uFF09\u3002",
|
|
739
|
+
rank: 19
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
id: "cvt",
|
|
743
|
+
code: "CVT",
|
|
744
|
+
nameEn: "CVT dry-type vacuum OLTC",
|
|
745
|
+
nameZh: "CVT \u5E72\u5F0F\u771F\u7A7A\u6709\u8F7D\u5F00\u5173",
|
|
746
|
+
mounting: ["dry_type"],
|
|
747
|
+
medium: "dry",
|
|
748
|
+
structure: "compound",
|
|
749
|
+
vacuum: true,
|
|
750
|
+
currents: {
|
|
751
|
+
I: [160, 200],
|
|
752
|
+
III: [160, 200]
|
|
753
|
+
},
|
|
754
|
+
umKv: [12],
|
|
755
|
+
usesSelectorSize: false,
|
|
756
|
+
maxStepVoltageV: 500,
|
|
757
|
+
stepCapacityByCurrent: {
|
|
758
|
+
160: 80,
|
|
759
|
+
200: 80
|
|
760
|
+
},
|
|
761
|
+
connections: ["Y", "D", "any"],
|
|
762
|
+
maxPositionsLinear: 10,
|
|
763
|
+
maxPositionsWithChangeOver: 10,
|
|
764
|
+
defaultMdu: "CMA7",
|
|
765
|
+
notesEn: "Dry-type CVTIII-160/200 / 12 kV.",
|
|
766
|
+
notesZh: "\u5E72\u5F0F CVTIII-160/200\uFF0C12 kV\u3002",
|
|
767
|
+
rank: 12
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
id: "cz",
|
|
771
|
+
code: "CZ",
|
|
772
|
+
nameEn: "CZ dry-type vacuum OLTC",
|
|
773
|
+
nameZh: "CZ \u5E72\u5F0F\u771F\u7A7A\u6709\u8F7D\u5F00\u5173",
|
|
774
|
+
mounting: ["dry_type"],
|
|
775
|
+
medium: "dry",
|
|
776
|
+
structure: "compound",
|
|
777
|
+
vacuum: true,
|
|
778
|
+
currents: {
|
|
779
|
+
I: [500, 600]
|
|
780
|
+
},
|
|
781
|
+
umKv: [40.5, 72.5],
|
|
782
|
+
usesSelectorSize: false,
|
|
783
|
+
maxStepVoltageV: 950,
|
|
784
|
+
stepCapacityByCurrent: {
|
|
785
|
+
500: 325,
|
|
786
|
+
600: 325
|
|
787
|
+
},
|
|
788
|
+
connections: ["Y", "D", "any"],
|
|
789
|
+
maxPositionsLinear: 17,
|
|
790
|
+
maxPositionsWithChangeOver: 17,
|
|
791
|
+
defaultMdu: "CMA7",
|
|
792
|
+
notesEn: "Dry-type; 2025 list and 2026 OS are 3\xD7CZI only (no CZIII row).",
|
|
793
|
+
notesZh: "\u5E72\u5F0F\uFF1B\u4EF7\u8868\u548C 2026 \u5B9E\u5355\u53EA\u6709 3\xD7CZI\uFF0C\u6CA1\u6709 CZIII\u3002",
|
|
794
|
+
rank: 14
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
id: "hwdk",
|
|
798
|
+
code: "HWDK",
|
|
799
|
+
nameEn: "HWDK reactor-type OLTC",
|
|
800
|
+
nameZh: "HWDK \u7535\u6297\u5F0F\u6709\u8F7D\u5F00\u5173",
|
|
801
|
+
mounting: ["reactor", "on_tank"],
|
|
802
|
+
medium: "oil",
|
|
803
|
+
structure: "combined",
|
|
804
|
+
vacuum: false,
|
|
805
|
+
currents: {
|
|
806
|
+
I: [1500, 2e3, 2500],
|
|
807
|
+
III: [1500, 2e3, 2500]
|
|
808
|
+
},
|
|
809
|
+
umKv: [35, 40.5, 69],
|
|
810
|
+
usesSelectorSize: false,
|
|
811
|
+
maxStepVoltageV: 6e3,
|
|
812
|
+
connections: ["Y", "D", "any"],
|
|
813
|
+
maxPositionsLinear: 18,
|
|
814
|
+
maxPositionsWithChangeOver: 35,
|
|
815
|
+
defaultMdu: "CMA7",
|
|
816
|
+
notesEn: "Reactor family \u2014 confirm with engineering.",
|
|
817
|
+
notesZh: "\u7535\u6297\u5668\u7CFB\u5217\uFF0C\u9700\u5DE5\u7A0B\u786E\u8BA4\u3002",
|
|
818
|
+
rank: 80
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
id: "wsl",
|
|
822
|
+
code: "WSL",
|
|
823
|
+
nameEn: "WSL in-tank de-energized tap changer (OCTC)",
|
|
824
|
+
nameZh: "WSL \u7BB1\u5185\u65E0\u8F7D\u5206\u63A5\u5F00\u5173\uFF08OCTC\uFF09",
|
|
825
|
+
mounting: ["in_tank"],
|
|
826
|
+
medium: "oil",
|
|
827
|
+
structure: "cage",
|
|
828
|
+
vacuum: false,
|
|
829
|
+
dutyKind: "octc",
|
|
830
|
+
// Regular WSL(WDL) 2025 blocks only — no one-off 350/400/3500 rows.
|
|
831
|
+
currents: {
|
|
832
|
+
I: [600, 800, 1e3, 1200, 1600, 2e3, 2400],
|
|
833
|
+
II: [600, 800, 1e3, 1200, 1600, 2e3, 2400],
|
|
834
|
+
III: [600, 800, 1e3, 1200, 1600, 2e3, 2400]
|
|
835
|
+
},
|
|
836
|
+
umKv: [12, 40.5, 72.5, 126, 145, 170, 252, 363],
|
|
837
|
+
usesSelectorSize: false,
|
|
838
|
+
maxStepVoltageV: 1e4,
|
|
839
|
+
connections: ["Y", "D"],
|
|
840
|
+
maxPositionsLinear: 18,
|
|
841
|
+
maxPositionsWithChangeOver: 18,
|
|
842
|
+
defaultMdu: "CMA7",
|
|
843
|
+
notesEn: "Cage OCTC. Eligible only when dutyKind=octc. Wiring roman II/IV/V/VI/VII/VIII is a form field, independent of Y/D. Unset auto: Y\u2192WSLIV, D\u2192WSLII; 5x2\u2192VIII, 3x2\u2192VI, 5x4\u2192V. Contact from P or OS. WDL aliases the same list.",
|
|
844
|
+
notesZh: "\u7B3C\u5F0F\u65E0\u8F7D\u5F00\u5173\u3002\u4EC5 dutyKind=octc \u65F6\u5165\u9009\u3002\u63A5\u7EBF\u65B9\u5F0F II/IV/V/VI/VII/VIII \u4E0E Y/D \u5206\u5F00\u9009\u3002\u672A\u6307\u5B9A\u65F6\uFF1AY\u2192WSLIV\uFF0CD\u2192WSLII\u3002\u6863\u4F4D\u6620\u5C04\u89E6\u5934 6x5/7x6/12x11/18x17\u3002WDL \u8D70\u540C\u4E00\u4EF7\u76EE\u8868\u3002",
|
|
845
|
+
rank: 5
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
id: "wsg",
|
|
849
|
+
code: "WSG",
|
|
850
|
+
nameEn: "WSG off-circuit tap changer (OCTC)",
|
|
851
|
+
nameZh: "WSG \u65E0\u8F7D\u5206\u63A5\u5F00\u5173\uFF08OCTC\uFF09",
|
|
852
|
+
mounting: ["in_tank"],
|
|
853
|
+
medium: "oil",
|
|
854
|
+
structure: "drum",
|
|
855
|
+
vacuum: false,
|
|
856
|
+
dutyKind: "octc",
|
|
857
|
+
currents: {
|
|
858
|
+
I: [250, 300, 400, 600, 800, 1e3, 1250],
|
|
859
|
+
II: [250, 300, 400, 600, 800, 1e3, 1250],
|
|
860
|
+
III: [300, 600, 800]
|
|
861
|
+
},
|
|
862
|
+
umKv: [40.5],
|
|
863
|
+
usesSelectorSize: false,
|
|
864
|
+
maxStepVoltageV: 1e4,
|
|
865
|
+
connections: ["Y", "D"],
|
|
866
|
+
maxPositionsLinear: 12,
|
|
867
|
+
maxPositionsWithChangeOver: 12,
|
|
868
|
+
defaultMdu: "CMA7",
|
|
869
|
+
notesEn: "Drum OCTC (WG sheet). dutyKind=octc only. Wiring roman follows octcSeries (form default IV). Auto D \u2192 WSGII (Anthony WSG II-800D/40.5-4x5A).",
|
|
870
|
+
notesZh: "\u9F13\u5F0F\u65E0\u8F7D\uFF08WG \u4EF7\u76EE\u8868\uFF09\u3002\u4EC5 dutyKind=octc\u3002\u63A5\u7EBF\u65B9\u5F0F\u8DDF octcSeries\uFF08\u9875\u9762\u9ED8\u8BA4 IV\uFF09\u3002\u672A\u6307\u5B9A\u65F6 D \u2192 WSGII\u3002",
|
|
871
|
+
rank: 6
|
|
872
|
+
}
|
|
873
|
+
];
|
|
874
|
+
function nearestUm(wanted, allowed) {
|
|
875
|
+
if (!allowed.length) return null;
|
|
876
|
+
const sorted = [...allowed].sort((a, b) => a - b);
|
|
877
|
+
const ge = sorted.find((u) => u >= wanted - 0.01);
|
|
878
|
+
return ge ?? sorted[sorted.length - 1];
|
|
879
|
+
}
|
|
880
|
+
function coveringUms(wanted, allowed) {
|
|
881
|
+
if (!allowed.length) return [];
|
|
882
|
+
const sorted = [...allowed].sort((a, b) => a - b);
|
|
883
|
+
const ge = sorted.filter((u) => u >= wanted - 0.01);
|
|
884
|
+
if (!ge.length) return [];
|
|
885
|
+
return ge.length > 1 ? [ge[0], ge[1]] : [ge[0]];
|
|
886
|
+
}
|
|
887
|
+
function nearestCurrent(wanted, allowed) {
|
|
888
|
+
if (!allowed?.length) return null;
|
|
889
|
+
const sorted = [...allowed].sort((a, b) => a - b);
|
|
890
|
+
const ge = sorted.find((c) => c >= wanted - 0.01);
|
|
891
|
+
if (ge != null) return ge;
|
|
892
|
+
const max = sorted[sorted.length - 1];
|
|
893
|
+
if (wanted <= max * 1.01 + 0.5) return max;
|
|
894
|
+
return null;
|
|
895
|
+
}
|
|
896
|
+
function phaseToken(p) {
|
|
897
|
+
return p;
|
|
898
|
+
}
|
|
899
|
+
function defaultSelectorSizeForUm(um) {
|
|
900
|
+
if (um <= 72.5 + 0.1) return "B";
|
|
901
|
+
if (um <= 145 + 0.1) return "C";
|
|
902
|
+
if (um <= 252 + 0.1) return "D";
|
|
903
|
+
return "DE";
|
|
904
|
+
}
|
|
905
|
+
function firstAllowedAtOrAbove(min, allowed) {
|
|
906
|
+
const minIdx = SIZE_ORDER.indexOf(min);
|
|
907
|
+
for (let i = Math.max(0, minIdx); i < SIZE_ORDER.length; i++) {
|
|
908
|
+
if (allowed.includes(SIZE_ORDER[i])) return SIZE_ORDER[i];
|
|
909
|
+
}
|
|
910
|
+
return allowed[allowed.length - 1] ?? "B";
|
|
911
|
+
}
|
|
912
|
+
function pickSelectorSize(um, requested, bilKv, pfKv, acrossTapBilKv, acrossTapPfKv) {
|
|
913
|
+
const allowed = SELECTOR_SIZES_BY_UM[um] ?? ["B", "C", "D", "DE"];
|
|
914
|
+
if (requested && requested !== "auto") {
|
|
915
|
+
if (allowed.includes(requested)) return requested;
|
|
916
|
+
return firstAllowedAtOrAbove(requested, allowed);
|
|
917
|
+
}
|
|
918
|
+
let floor = defaultSelectorSizeForUm(um);
|
|
919
|
+
floor = firstAllowedAtOrAbove(floor, allowed);
|
|
920
|
+
const earth = EARTH_INSULATION[um];
|
|
921
|
+
if (earth && bilKv && bilKv > earth.bil + 1) {
|
|
922
|
+
const i = SIZE_ORDER.indexOf(floor);
|
|
923
|
+
floor = firstAllowedAtOrAbove(
|
|
924
|
+
SIZE_ORDER[Math.min(SIZE_ORDER.length - 1, i + 1)] ?? "DE",
|
|
925
|
+
allowed
|
|
926
|
+
);
|
|
927
|
+
}
|
|
928
|
+
if (earth && pfKv && pfKv > earth.pf + 1) {
|
|
929
|
+
const i = SIZE_ORDER.indexOf(floor);
|
|
930
|
+
floor = firstAllowedAtOrAbove(
|
|
931
|
+
SIZE_ORDER[Math.min(SIZE_ORDER.length - 1, i + 1)] ?? "DE",
|
|
932
|
+
allowed
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
const needALi = acrossTapBilKv ?? 0;
|
|
936
|
+
const needAPf = acrossTapPfKv ?? 0;
|
|
937
|
+
const floorIdx = SIZE_ORDER.indexOf(floor);
|
|
938
|
+
for (let i = floorIdx; i < SIZE_ORDER.length; i++) {
|
|
939
|
+
const cand = SIZE_ORDER[i];
|
|
940
|
+
if (!allowed.includes(cand)) continue;
|
|
941
|
+
const ins = INTERNAL_INSULATION[cand];
|
|
942
|
+
if (needALi <= 0 && needAPf <= 0) return cand;
|
|
943
|
+
if (ins.a_li + 0.5 >= needALi && ins.a_pf + 0.5 >= needAPf) return cand;
|
|
944
|
+
}
|
|
945
|
+
for (const cand of SIZE_ORDER) {
|
|
946
|
+
if (!allowed.includes(cand)) continue;
|
|
947
|
+
const ins = INTERNAL_INSULATION[cand];
|
|
948
|
+
if (ins.a_li + 0.5 >= needALi && ins.a_pf + 0.5 >= needAPf) return cand;
|
|
949
|
+
}
|
|
950
|
+
return allowed[allowed.length - 1];
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
// lib/listIndex.data.json
|
|
954
|
+
var listIndex_data_default = { source: "QS/a. Base Price List 2025.xlsx (WSL/WDL keys only, no RMB)", generatedOn: "2026-08-19", keyCount: 451, keys: ["WSLIV-600Y/12-6x5A", "WSLIV-600Y/12-6x5B", "WSLIV-600Y/12-7x6B", "WSLIV-600Y/12-8x7B", "WSLIV-600Y/12-9x8B", "WSLIV-600Y/12-10x9B", "WSLIV-600Y/12-11x10B", "WSLIV-600Y/12-12x11B", "WSLIV-600Y/12-18x17E", "WSLIV-600Y/72.5-6x5A", "WSLIV-600Y/72.5-6x5B", "WSLIV-600Y/72.5-7x6B", "WSLIV-600Y/72.5-8x7B", "WSLIV-600Y/72.5-9x8B", "WSLIV-600Y/72.5-10x9B", "WSLIV-600Y/72.5-11x10B", "WSLIV-600Y/72.5-12x11B", "WSLIV-600Y/126-6x5A", "WSLIV-600Y/126-6x5B", "WSLIV-600Y/126-7x6B", "WSLIV-600Y/126-8x7B", "WSLIV-600Y/126-8x7E", "WSLIV-600Y/126-9x8B", "WSLIV-600Y/126-10x9B", "WSLIV-600Y/126-11x10B", "WSLIV-600Y/126-12x11B", "WSLIV-600Y/145-18x17E", "WSLIV-600Y/170-6x5B", "WSLIV-600Y/252-6x5", "WSLIV-800Y/12-6x5A", "WSLIV-800Y/12-6x5B", "WSLIV-800Y/12-7x6B", "WSLIV-800Y/12-8x7B", "WSLIV-800Y/12-9x8B", "WSLIV-800Y/12-10x9B", "WSLIV-800Y/12-11x10B", "WSLIV-800Y/12-12x11B", "WSLIV-800Y/72.5-6x5A", "WSLIV-800Y/72.5-6x5B", "WSLIV-800Y/72.5-7x6B", "WSLIV-800Y/72.5-8x7B", "WSLIV-800Y/72.5-9x8B", "WSLIV-800Y/72.5-10x9B", "WSLIV-800Y/72.5-11x10B", "WSLIV-800Y/72.5-12x11B", "WSLIV-800Y/72.5-18x17E", "WDLIV-800Y/72.5-8x7D", "WSLIV-800Y/126-6x5A", "WSLIV-800Y/126-6x5B", "WSLIV-800Y/126-7x6B", "WSLIV-800Y/126-8x7B", "WSLIV-800Y/126-9x8B", "WSLIV-800Y/126-10x9B", "WSLIV-800Y/126-11x10B", "WSLIV-800Y/126-12x11B", "WSLIV-1000Y/12-6x5B", "WSLIV-1000Y/12-7x6B", "WSLIV-1000Y/12-8x7B", "WSLIV-1000Y/12-9x8B", "WSLIV-1000Y/12-10x9B", "WSLIV-1000Y/72.5-6x5B", "WSLIV-1000Y/72.5-7x6B", "WSLIV-1000Y/72.5-8x7B", "WSLIV-1000Y/72.5-9x8B", "WSLIV-1000Y/72.5-10x9B", "WSLIV-1000Y/126-6x5B", "WSLIV-1000Y/126-7x6B", "WSLIV-1000Y/126-8x7B", "WSLIV-1000Y/126-9x8B", "WSLIV-1000Y/126-10x9B", "WSLIV-1000Y/170-6x5", "WSLIV-1000Y/252-3x2", "WSLIV-1000Y/252-6x5", "WSLIV-1200Y/12-6x5B", "WSLIV-1200Y/12-14x13E", "WSLIV-1200Y/40.5-12x11D", "WSLIV-1200Y/72.5-6x5B", "WSLIV-1200Y/126-6x5B", "WSLIV-1200Y/145-10x9D", "WSLIV-1600Y/12-6x5B", "WSLIV-1600Y/72.5-6x5B", "WDLIV-1600Y/72.5-11x10D", "WSLIV-1600Y/126-6x5B", "WSLIV-1600Y/145-6x5B", "WDLIV-1600/252-6x5B", "WDLIV-1600/362-6x5B", "WSLIV-2000Y/12-6x5B", "WSLIV-2000Y/72.5-6x5B", "WSLIV-2000Y/126-6x5B", "WSLIV-2400Y/12-6x5B", "WSLIV-2400Y/72.5-6x5B", "WSLIV-2400Y/126-6x5B", "WSLIV-3000Y/12-6x5B", "WSLIV-3000Y/72.5-6x5B", "WSLIV-3000Y/126-6x5B", "WSLIV-600D/12-6x5A", "WSLIV-600D/12-6x5B", "WSLIV-600D/10-7x6B", "WSLIV-600D/12-8x7B", "WSLIV-600D/12-9x8B", "WSLIV-600D/12-10x9B", "WSLIV-600D/12-11x10B", "WSLIV-600D/12-12x11B", "WSLIV-600D/12-12x11D", "WSLIV-600Y/170-14x13E", "WSLIV-1200Y/72.5-6x5D", "WSLV-400D/170-6x5B", "WSLIV-600D/72.5-12x11", "WSLIV-800Y/170-6x5B", "WSLIV-1600D/72.5-6x5B", "WSLIV-350D/72.5-10x9", "WSLIV-800Y/252-6x5A", "WSLIV-1200Y/252-6x5A", "WSLIV-1200D/12-12x11D", "WSLIV-600Y/252-6x5B", "WSLIV-800Y/252-6x5B", "WSLIV-600Y/330-6x5B", "WSLIV-800Y/330-6x5B", "WSLIV-600D/72.5-6x5A", "WSLIV-600D/72.5-6x5B", "WSLIV-600D/72.5-7x6B", "WSLIV-600D/72.5-8x7B", "WSLIV-600D/72.5-9x8B", "WSLIV-600D/72.5-10x9B", "WSLIV-600D/72.5-11x10B", "WSLIV-600D/72.5-12x11B", "WSLIV-600D/72.5-12x7D", "WSLIV-600D/126-6x5A", "WSLIV-600D/126-6x5B", "WSLIV-600D/126-7x6B", "WSLIV-600D/126-8x7B", "WSLIV-600D/126-9x8B", "WSLIV-600D/126-10x9B", "WSLIV-600D/126-11x10B", "WSLIV-600D/126-12x11B", "WSLIV-600D/170-6x5B", "WSLIV-600D/170-10x9B", "WSLIV-600D/72.5-14x13", "WSLIV-800D/12-6x5A", "WSLIV-800D/12-6x5B", "WSLIV-800D/12-7x6B", "WSLIV-800D/12-8x7B", "WSLIV-800D/12-9x8B", "WSLIV-800D/12-10x9B", "WSLIV-800D/12-11x10B", "WSLIV-800D/12-12x11B", "WSLIV-800D/72.5-6x5A", "WSLIV-800D/72.5-6x5B", "WSLIV-800D/72.5-7x6B", "WSLIV-800D/72.5-8x7B", "WSLIV-800D/72.5-9x8B", "WSLIV-800D/72.5-10x9B", "WSLIV-800D/72.5-11x10B", "WSLIV-800D/72.5-12x11B", "WSLIV-800D/126-6x5A", "WSLIV-800D/126-6x5B", "WSLIV-800D/126-7x6B", "WSLIV-800D/126-8x7B", "WSLIV-800D/126-9x8B", "WSLIV-800D/126-10x9B", "WSLIV-800D/126-11x10B", "WSLIV-800D/126-12x11B", "WSLIV-800D/170-6x5D", "WSLIV-1000D/12-6x5B", "WSLIV-1000D/12-7x6B", "WSLIV-1000D/12-8x7B", "WSLIV-1000D/12-9x8B", "WSLIV-1000D/12-10x9B", "WSLIV-1000D/12-12x11D", "WSLIV-1000D/72.5-6x5B", "WSLIV-1000D/72.5-7x6B", "WSLIV-1000D/72.5-8x7B", "WSLIV-1000D/72.5-9x8B", "WSLIV-1000D/72.5-10x9B", "WSLIV-1000D/126-6x5B", "WSLIV-1000D/126-7x6B", "WSLIV-1000D/126-8x7B", "WSLIV-1000D/126-9x8B", "WSLIV-1000D/126-10x9B", "WSLIV-1200D/12-6x5B", "WSLIV-1200D/72.5-6x5B", "WSLIV-1200D/72.5-11x10D", "WSLIV-1200D/126-6x5B", "WSLIV-1600D/12-6x5B", "WSLIV-1600D/12.5-12x8D", "WSLIV-1600D/126-6x5B", "WSLIV-1600D/126-6x6B", "WSLIV-2000D/72.5-6x5B", "WSLIV-2000D/72.5-18x17E", "WSLIV-2400Y/72.5-6x5A", "WSLIV-3000D/12-6x5B", "WSLIV-3000D/72.5-6x5B", "WDLIV-4800/362-6x5", "WDLIV-3200/145-6x5", "WDLIV-3200/252-6x5", "WDLIV-2400/252-6x5", "WDLIV-1600/126-12x11", "WDLIV-3000/72.5-6x5B", "WDLIV-2000/72.5-6x5B", "WSLV-600D/12-6x5A", "WSLV-600D/12-6x5B", "WSLV-600D/12-8x7B", "WSLV-600D/12-10x9B", "WSLV-600D/12-12x11B", "WSLV-600D/72.5-6x5A", "WSLV-600D/72.5-6x5B", "WSLV-600D/72.5-8x7B", "WSLV-600D/72.5-10x9B", "WSLV-600D/72.5-12x11B", "WSLV-600D/40.5-16x15E", "WSLV-600D/126-6x5A", "WSLV-600D/126-6x5B", "WSLV-600D/126-6x5E", "WSLV-600D/126-8x7B", "WSLV-600D/126-10x9B", "WSLV-600D/126-12x11B", "WSLV-600D/145-6x5A", "WSLV-600D/170-6x5", "WDLV-600D/252-6x5B", "WSLV-800D/12-6x5A", "WSLV-800D/12-6x5B", "WSLV-800D/12-8x7B", "WSLV-800D/12-10x9B", "WSLV-800D/12-12x11B", "WSLV-800D/72.5-6x5A", "WSLV-800D/72.5-6x5B", "WSLV-800D/72.5-8x7B", "WSLV-800D/72.5-10x9B", "WSLV-800D/72.5-12x11B", "WSLV-800D/126-6x5A", "WSLV-800D/126-6x5B", "WSLV-800D/126-8x7B", "WSLV-800D/126-10x9B", "WSLV-800D/126-12x11B", "WSLV-1000D/12-6x5B", "WSLV-1000D/12-8x7B", "WSLV-1000D/12-10x9B", "WSLV-1600D/12-6x5B", "WSLV-1000D/72.5-6x5B", "WSLV-1000D/72.5-8x7B", "WSLV-1000D/72.5-10x9B", "WSLV-1000D/126-6x5B", "WSLV-1000D/126-8x7B", "WSLV-1000D/126-10x9B", "WSLV-1200Y/126-12x11", "WSLV-1600Y/72.5-7x6B", "WDLV-1600Y/72.5-11x10D", "WSLV-2000D/12-6x5B", "WSLV-2000D/126-6x5B", "WDLV-1600D/145-6x5B", "WDLV-2000/252-6x5B", "WDLV-600/252-6x5B", "WDLV-1000/252-7x6D", "WSLV-3000D/72.5-6x5B", "WDLV-3200/252-12x11", "WSLV-600/145-6x5B", "WSLV-1600Y/12-6x5", "WSLV-2000/126-6x5B", "WSLV-1600D/72.5-6x5A", "WDLV-2500/252-6x5B", "WSLVII-600D/12-6x5A", "WSLVII-600D/12-6x5B", "WSLVII-600D/12-8x7B", "WSLVII-600D/12-10x9B", "WSLVII-600D/12-12x11B", "WSLVII-600D/72.5-6x5A", "WSLVII-600D/72.5-6x5B", "WSLVII-600D/72.5-8x7B", "WSLVII-600D/72.5-10x9B", "WSLVII-600D/72.5-12x11B", "WSLVII-600D/126-6x5A", "WSLVII-600D/126-6x5B", "WSLVII-600D/126-8x7B", "WSLVII-600D/126-10x9B", "WSLVII-600D/126-12x11B", "WSLVII-600D/300-4x3E", "WSLVII-600D/170-6x5B", "WSLVII-600D/170-6x5D", "WSLVI-2500/40.5-3x2B", "WSLVII-800D/12-6x5A", "WSLVII-800D/12-6x5B", "WSLVII-800D/12-8x7B", "WSLVII-800D/12-10x9B", "WSLVII-800D/12-12x11B", "WSLVII-800D/72.5-6x5A", "WSLVII-800D/72.5-6x5B", "WSLVII-800D/72.5-8x7B", "WSLVII-800D/72.5-10x9B", "WSLVII-800D/72.5-12x11B", "WSLVII-800D/126-6x5A", "WSLVII-800D/126-6x5B", "WSLVII-800D/126-8x7B", "WSLVII-800D/126-10x9B", "WSLVII-800D/126-12x11B", "WSLVII-1000D/12-6x5B", "WSLVII-1000D/12-8x7B", "WSLVII-1000D/12-10x9B", "WSLVII-1000D/72.5-6x5B", "WSLVII-1000D/72.5-8x7B", "WSLVII-1000D/72.5-10x9B", "WSLVII-1000D/126-6x5B", "WSLVII-1000D/126-8x7B", "WSLVII-1000D/126-10x9B", "WDLVII-1600D/145-6x5B", "WSLVII-1600D/12-6x5B", "WSLVII-2000D/12-6x5B", "WSLII-600Y/12-6x5A", "WSLII-600Y/12-6x5B", "WSLII-600Y/12-8x7B", "WSLII-600Y/12-10x9B", "WSLII-600Y/12-12x11B", "WSLII-600Y/72.5-6x5A", "WSLII-600Y/72.5-6x5B", "WSLII-600Y/72.5-8x7B", "WSLII-600Y/72.5-10x9B", "WSLII-600Y/72.5-12x11B", "WSLII-600Y/126-6x5A", "WSLII-600Y/126-6x5B", "WSLII-600Y/126-8x7B", "WSLII-600Y/126-10x9B", "WSLII-600Y/126-12x11B", "WSLII-800Y/12-6x5A", "WSLII-800Y/12-6x5B", "WSLII-800Y/12-8x7B", "WSLII-800Y/12-10x9B", "WSLII-800Y/12-12x11B", "WSLII-800Y/72.5-6x5A", "WSLII-800Y/72.5-6x5B", "WSLII-800Y/72.5-8x7B", "WSLII-800Y/72.5-10x9B", "WSLII-800Y/72.5-12x11B", "WSLII-800Y/126-6x5A", "WSLII-800Y/126-6x5B", "WSLII-800Y/126-8x7B", "WSLII-800Y/126-10x9B", "WSLII-800Y/126-12x11B", "WSLII-1000Y/12-6x5", "WSLII-1000Y/12-6x5B", "WSLII-1000Y/12-8x7B", "WSLII-1000Y/12-10x9B", "WSLII-1000Y/72.5-6x5", "WSLII-1000Y/72.5-6x5B", "WSLII-1000Y/72.5-8x7B", "WSLII-1000Y/72.5-10x9B", "WSLII-1000Y/126-6x5B", "WSLII-1000Y/126-8x7B", "WSLII-1000Y/126-10x9B", "WSLII-1200Y/12-6x5", "WSLII-1200Y/12-6x5B", "WSLII-1200Y/72.5-6x5", "WSLII-1200Y/72.5-6x5B", "WSLII-1200Y/72.5-10x9D", "WSLII-1600Y/12-6x5B", "WSLII-1600Y/72.5-6x5B", "WSLII-1600Y/145-6x5B", "WSLII-2000Y/12-6x5A", "WSLII-2000Y/40.5-6x5A", "WSLII-2000Y/72.5-11x10B", "WDLII-2400Y/252-6x5D", "WDLII-1600/252-12x11D", "WDLII-630/252-4x3", "WDLII-400/252-10x9D", "WSLII-400D/170-6x5A", "WSLII-1200D/72.5-10x9B", "WSLII-1000D/72.5-10x9B", "WSLII-600D/12-6x5A", "WSLII-600D/12-6x5B", "WSLII-600D/12-8x7B", "WSLII-600D/12-10x9B", "WSLII-600D/12-12x11B", "WSLII-600D/72.5-6x5A", "WSLII-600D/72.5-6x5B", "WSLII-600D/72.5-8x7B", "WSLII-600D/72.5-10x9B", "WSLII-600D/72.5-12x11B", "WSLII-600D/126-6x5A", "WSLII-600D/126-6x5B", "WSLII-600D/126-8x7B", "WSLII-600D/126-10x9B", "WSLII-600D/126-12x11B", "WSLII-600D/170-6x5D", "WSLII-800D/12-6x5A", "WSLII-800D/12-6x5B", "WSLII-800D/12-8x7B", "WSLII-800D/12-10x9B", "WSLII-800D/12-12x11B", "WSLII-800D/72.5-6x5A", "WSLII-800D/72.5-6x5B", "WSLII-800D/72.5-8x7B", "WSLII-800D/72.5-10x9B", "WSLII-800D/72.5-12x11B", "WSLII-800D/126-6x5A", "WSLII-800D/126-6x5B", "WSLII-800D/126-8x7B", "WSLII-800D/126-10x9B", "WSLII-800D/126-12x11B", "WSLII-800D/170-6x5B", "WSLII-1000D/12-6x5B", "WSLII-1000D/12-8x7B", "WSLII-1000D/12-10x9B", "WSLII-1000D/72.5-6x5B", "WSLII-1000D/72.5-8x7B", "WDLII-4000/72.5-6x5B", "WSLII-1000D/126-6x5B", "WSLII-1000D/126-8x7B", "WSLII-1000D/126-10x9B", "WSLII-1000D/170-6x5B", "WDLII-2400/126-10x9D", "WSLVI-600/12-3x2A", "WSLVI-600/12-3x2B", "WSLVI-600/72.5-3x2A", "WSLVI-600/72.5-3x2B", "WSLVI-1600/72.5-6x2B", "WSLVI-600/252-6x2C", "WDLVI-600/252-6x2C", "WSLVI-800/12-3x2A", "WSLVI-800/12-3x2B", "WSLVI-800/72.5-3x2A", "WSLVI-800/72.5-3x2B", "WSLVI-1000/12-3x2B", "WSLVI-1000/72.5-3x2B", "WSLVI-2000/72.5-3x2B", "WSLVI-3000/72.5-3x2B", "WSLVIII-600/12-5x2A", "WSLVIII-600/12-5x2B", "WSLVIII-600/72.5-5x2A", "WSLVIII-600/72.5-5x2B", "WSLVIII-600/126-5x2A", "WSLVIII-600/126-5x2B", "WSLVIII-600/126-5x2E", "WSLVIII-600/252-5x2B", "WDLVIII-600/252-5x2D", "WDLVIII-600/252-5x2E", "WSLVIII-800/12-5x2A", "WSLVIII-800/12-5x2B", "WSLVIII-800/72.5-5x2A", "WSLVIII-800/72.5-5x2B", "WSLVIII-800/72.5-12x2D", "WSLVIII-800/126-5x2A", "WSLVIII-800/126-5x2B", "WSLVIII-1000/12-5x2B", "WSLVIII-1000/72.5-5x2B", "WSLVIII-1000/126-5x2B", "WSLVIII-1200/72.5-5x2B", "WSLVIII-2000/72.5-12x2D", "WSLVIII-2000/72.5-5x2B", "WDLVIII-2000/126-5x2B", "WSLVIII-2000/40.5-5x2B", "WSLVIII-2000/126-5x2B", "WDLVIII-2400/126-5x2B", "WSLVIII-1600/72.5-3x2B"], octc: [{ family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600Y/12-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600Y/12-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600Y/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600Y/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600Y/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600Y/12-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600Y/12-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 12, selectorSize: "E", tapCode: "18x17", listKey: "WSLIV-600Y/12-18x17E" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600Y/72.5-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600Y/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600Y/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600Y/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600Y/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600Y/72.5-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600Y/72.5-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600Y/126-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600Y/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600Y/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "E", tapCode: "8x7", listKey: "WSLIV-600Y/126-8x7E" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600Y/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600Y/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600Y/126-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600Y/126-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 145, selectorSize: "E", tapCode: "18x17", listKey: "WSLIV-600Y/145-18x17E" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/170-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 252, selectorSize: "", tapCode: "6x5", listKey: "WSLIV-600Y/252-6x5" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800Y/12-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800Y/12-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800Y/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800Y/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800Y/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800Y/12-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800Y/12-12x11B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800Y/72.5-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800Y/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800Y/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800Y/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800Y/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800Y/72.5-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800Y/72.5-12x11B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "E", tapCode: "18x17", listKey: "WSLIV-800Y/72.5-18x17E" }, { family: "WDL", phases: "IV", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "D", tapCode: "8x7", listKey: "WDLIV-800Y/72.5-8x7D" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800Y/126-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800Y/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800Y/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800Y/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800Y/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800Y/126-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800Y/126-12x11B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000Y/12-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000Y/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000Y/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000Y/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000Y/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000Y/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000Y/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000Y/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000Y/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000Y/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000Y/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000Y/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 170, selectorSize: "", tapCode: "6x5", listKey: "WSLIV-1000Y/170-6x5" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 252, selectorSize: "", tapCode: "3x2", listKey: "WSLIV-1000Y/252-3x2" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "Y", umKv: 252, selectorSize: "", tapCode: "6x5", listKey: "WSLIV-1000Y/252-6x5" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 12, selectorSize: "E", tapCode: "14x13", listKey: "WSLIV-1200Y/12-14x13E" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 40.5, selectorSize: "D", tapCode: "12x11", listKey: "WSLIV-1200Y/40.5-12x11D" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 145, selectorSize: "D", tapCode: "10x9", listKey: "WSLIV-1200Y/145-10x9D" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600Y/72.5-6x5B" }, { family: "WDL", phases: "IV", currentA: 1600, connection: "Y", umKv: 72.5, selectorSize: "D", tapCode: "11x10", listKey: "WDLIV-1600Y/72.5-11x10D" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "Y", umKv: 145, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600Y/145-6x5B" }, { family: "WDL", phases: "IV", currentA: 1600, connection: "", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WDLIV-1600/252-6x5B" }, { family: "WDL", phases: "IV", currentA: 1600, connection: "", umKv: 362, selectorSize: "B", tapCode: "6x5", listKey: "WDLIV-1600/362-6x5B" }, { family: "WSL", phases: "IV", currentA: 2e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2000Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 2e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2000Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 2e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2000Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 2400, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2400Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 2400, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2400Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 2400, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2400Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 3e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-3000Y/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 3e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-3000Y/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 3e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-3000Y/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600D/12-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 10, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600D/10-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600D/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600D/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600D/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600D/12-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600D/12-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 12, selectorSize: "D", tapCode: "12x11", listKey: "WSLIV-600D/12-12x11D" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 170, selectorSize: "E", tapCode: "14x13", listKey: "WSLIV-600Y/170-14x13E" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 72.5, selectorSize: "D", tapCode: "6x5", listKey: "WSLIV-1200Y/72.5-6x5D" }, { family: "WSL", phases: "V", currentA: 400, connection: "D", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-400D/170-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "", tapCode: "12x11", listKey: "WSLIV-600D/72.5-12x11" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/170-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 350, connection: "D", umKv: 72.5, selectorSize: "", tapCode: "10x9", listKey: "WSLIV-350D/72.5-10x9" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 252, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800Y/252-6x5A" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "Y", umKv: 252, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-1200Y/252-6x5A" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "D", umKv: 12, selectorSize: "D", tapCode: "12x11", listKey: "WSLIV-1200D/12-12x11D" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/252-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/252-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "Y", umKv: 330, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600Y/330-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "Y", umKv: 330, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800Y/330-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600D/72.5-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600D/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600D/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600D/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600D/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600D/72.5-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600D/72.5-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "D", tapCode: "12x7", listKey: "WSLIV-600D/72.5-12x7D" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-600D/126-6x5A" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600D/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-600D/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-600D/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-600D/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600D/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-600D/126-11x10B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-600D/126-12x11B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-600D/170-6x5B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 170, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-600D/170-10x9B" }, { family: "WSL", phases: "IV", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "", tapCode: "14x13", listKey: "WSLIV-600D/72.5-14x13" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800D/12-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800D/12-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800D/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800D/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800D/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800D/12-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800D/12-12x11B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800D/72.5-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800D/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800D/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800D/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800D/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800D/72.5-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800D/72.5-12x11B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-800D/126-6x5A" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-800D/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-800D/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-800D/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-800D/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-800D/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "11x10", listKey: "WSLIV-800D/126-11x10B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLIV-800D/126-12x11B" }, { family: "WSL", phases: "IV", currentA: 800, connection: "D", umKv: 170, selectorSize: "D", tapCode: "6x5", listKey: "WSLIV-800D/170-6x5D" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000D/12-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000D/12-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000D/12-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000D/12-10x9B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "D", tapCode: "12x11", listKey: "WSLIV-1000D/12-12x11D" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000D/72.5-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000D/72.5-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000D/72.5-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000D/72.5-10x9B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1000D/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "7x6", listKey: "WSLIV-1000D/126-7x6B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLIV-1000D/126-8x7B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "9x8", listKey: "WSLIV-1000D/126-9x8B" }, { family: "WSL", phases: "IV", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLIV-1000D/126-10x9B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "D", umKv: 72.5, selectorSize: "D", tapCode: "11x10", listKey: "WSLIV-1200D/72.5-11x10D" }, { family: "WSL", phases: "IV", currentA: 1200, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1200D/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "D", umKv: 12.5, selectorSize: "D", tapCode: "12x8", listKey: "WSLIV-1600D/12.5-12x8D" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-1600D/126-6x5B" }, { family: "WSL", phases: "IV", currentA: 1600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x6", listKey: "WSLIV-1600D/126-6x6B" }, { family: "WSL", phases: "IV", currentA: 2e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-2000D/72.5-6x5B" }, { family: "WSL", phases: "IV", currentA: 2e3, connection: "D", umKv: 72.5, selectorSize: "E", tapCode: "18x17", listKey: "WSLIV-2000D/72.5-18x17E" }, { family: "WSL", phases: "IV", currentA: 2400, connection: "Y", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLIV-2400Y/72.5-6x5A" }, { family: "WSL", phases: "IV", currentA: 3e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-3000D/12-6x5B" }, { family: "WSL", phases: "IV", currentA: 3e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLIV-3000D/72.5-6x5B" }, { family: "WDL", phases: "IV", currentA: 4800, connection: "", umKv: 362, selectorSize: "", tapCode: "6x5", listKey: "WDLIV-4800/362-6x5" }, { family: "WDL", phases: "IV", currentA: 3200, connection: "", umKv: 145, selectorSize: "", tapCode: "6x5", listKey: "WDLIV-3200/145-6x5" }, { family: "WDL", phases: "IV", currentA: 3200, connection: "", umKv: 252, selectorSize: "", tapCode: "6x5", listKey: "WDLIV-3200/252-6x5" }, { family: "WDL", phases: "IV", currentA: 2400, connection: "", umKv: 252, selectorSize: "", tapCode: "6x5", listKey: "WDLIV-2400/252-6x5" }, { family: "WDL", phases: "IV", currentA: 1600, connection: "", umKv: 126, selectorSize: "", tapCode: "12x11", listKey: "WDLIV-1600/126-12x11" }, { family: "WDL", phases: "IV", currentA: 3e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WDLIV-3000/72.5-6x5B" }, { family: "WDL", phases: "IV", currentA: 2e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WDLIV-2000/72.5-6x5B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-600D/12-6x5A" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-600D/12-6x5B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-600D/12-8x7B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-600D/12-10x9B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-600D/12-12x11B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-600D/72.5-6x5A" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-600D/72.5-6x5B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-600D/72.5-8x7B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-600D/72.5-10x9B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-600D/72.5-12x11B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 40.5, selectorSize: "E", tapCode: "16x15", listKey: "WSLV-600D/40.5-16x15E" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-600D/126-6x5A" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-600D/126-6x5B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "E", tapCode: "6x5", listKey: "WSLV-600D/126-6x5E" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-600D/126-8x7B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-600D/126-10x9B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-600D/126-12x11B" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 145, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-600D/145-6x5A" }, { family: "WSL", phases: "V", currentA: 600, connection: "D", umKv: 170, selectorSize: "", tapCode: "6x5", listKey: "WSLV-600D/170-6x5" }, { family: "WDL", phases: "V", currentA: 600, connection: "D", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WDLV-600D/252-6x5B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-800D/12-6x5A" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-800D/12-6x5B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-800D/12-8x7B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-800D/12-10x9B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-800D/12-12x11B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-800D/72.5-6x5A" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-800D/72.5-6x5B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-800D/72.5-8x7B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-800D/72.5-10x9B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-800D/72.5-12x11B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-800D/126-6x5A" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-800D/126-6x5B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-800D/126-8x7B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-800D/126-10x9B" }, { family: "WSL", phases: "V", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLV-800D/126-12x11B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-1000D/12-6x5B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-1000D/12-8x7B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-1000D/12-10x9B" }, { family: "WSL", phases: "V", currentA: 1600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-1600D/12-6x5B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-1000D/72.5-6x5B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-1000D/72.5-8x7B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-1000D/72.5-10x9B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-1000D/126-6x5B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLV-1000D/126-8x7B" }, { family: "WSL", phases: "V", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLV-1000D/126-10x9B" }, { family: "WSL", phases: "V", currentA: 1200, connection: "Y", umKv: 126, selectorSize: "", tapCode: "12x11", listKey: "WSLV-1200Y/126-12x11" }, { family: "WSL", phases: "V", currentA: 1600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "7x6", listKey: "WSLV-1600Y/72.5-7x6B" }, { family: "WDL", phases: "V", currentA: 1600, connection: "Y", umKv: 72.5, selectorSize: "D", tapCode: "11x10", listKey: "WDLV-1600Y/72.5-11x10D" }, { family: "WSL", phases: "V", currentA: 2e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-2000D/12-6x5B" }, { family: "WSL", phases: "V", currentA: 2e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-2000D/126-6x5B" }, { family: "WDL", phases: "V", currentA: 1600, connection: "D", umKv: 145, selectorSize: "B", tapCode: "6x5", listKey: "WDLV-1600D/145-6x5B" }, { family: "WDL", phases: "V", currentA: 2e3, connection: "", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WDLV-2000/252-6x5B" }, { family: "WDL", phases: "V", currentA: 600, connection: "", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WDLV-600/252-6x5B" }, { family: "WDL", phases: "V", currentA: 1e3, connection: "", umKv: 252, selectorSize: "D", tapCode: "7x6", listKey: "WDLV-1000/252-7x6D" }, { family: "WSL", phases: "V", currentA: 3e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-3000D/72.5-6x5B" }, { family: "WDL", phases: "V", currentA: 3200, connection: "", umKv: 252, selectorSize: "", tapCode: "12x11", listKey: "WDLV-3200/252-12x11" }, { family: "WSL", phases: "V", currentA: 600, connection: "", umKv: 145, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-600/145-6x5B" }, { family: "WSL", phases: "V", currentA: 1600, connection: "Y", umKv: 12, selectorSize: "", tapCode: "6x5", listKey: "WSLV-1600Y/12-6x5" }, { family: "WSL", phases: "V", currentA: 2e3, connection: "", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLV-2000/126-6x5B" }, { family: "WSL", phases: "V", currentA: 1600, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLV-1600D/72.5-6x5A" }, { family: "WDL", phases: "V", currentA: 2500, connection: "", umKv: 252, selectorSize: "B", tapCode: "6x5", listKey: "WDLV-2500/252-6x5B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-600D/12-6x5A" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-600D/12-6x5B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-600D/12-8x7B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-600D/12-10x9B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-600D/12-12x11B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-600D/72.5-6x5A" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-600D/72.5-6x5B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-600D/72.5-8x7B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-600D/72.5-10x9B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-600D/72.5-12x11B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-600D/126-6x5A" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-600D/126-6x5B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-600D/126-8x7B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-600D/126-10x9B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-600D/126-12x11B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 300, selectorSize: "E", tapCode: "4x3", listKey: "WSLVII-600D/300-4x3E" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-600D/170-6x5B" }, { family: "WSL", phases: "VII", currentA: 600, connection: "D", umKv: 170, selectorSize: "D", tapCode: "6x5", listKey: "WSLVII-600D/170-6x5D" }, { family: "WSL", phases: "VI", currentA: 2500, connection: "", umKv: 40.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-2500/40.5-3x2B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-800D/12-6x5A" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-800D/12-6x5B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-800D/12-8x7B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-800D/12-10x9B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-800D/12-12x11B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-800D/72.5-6x5A" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-800D/72.5-6x5B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-800D/72.5-8x7B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-800D/72.5-10x9B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-800D/72.5-12x11B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLVII-800D/126-6x5A" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-800D/126-6x5B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-800D/126-8x7B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-800D/126-10x9B" }, { family: "WSL", phases: "VII", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLVII-800D/126-12x11B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-1000D/12-6x5B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-1000D/12-8x7B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-1000D/12-10x9B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-1000D/72.5-6x5B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-1000D/72.5-8x7B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-1000D/72.5-10x9B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-1000D/126-6x5B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLVII-1000D/126-8x7B" }, { family: "WSL", phases: "VII", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLVII-1000D/126-10x9B" }, { family: "WDL", phases: "VII", currentA: 1600, connection: "D", umKv: 145, selectorSize: "B", tapCode: "6x5", listKey: "WDLVII-1600D/145-6x5B" }, { family: "WSL", phases: "VII", currentA: 1600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-1600D/12-6x5B" }, { family: "WSL", phases: "VII", currentA: 2e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLVII-2000D/12-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600Y/12-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600Y/12-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600Y/12-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600Y/12-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600Y/12-12x11B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600Y/72.5-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600Y/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600Y/72.5-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600Y/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600Y/72.5-12x11B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600Y/126-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600Y/126-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600Y/126-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600Y/126-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600Y/126-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800Y/12-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800Y/12-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800Y/12-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800Y/12-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800Y/12-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800Y/72.5-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800Y/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800Y/72.5-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800Y/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800Y/72.5-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800Y/126-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800Y/126-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800Y/126-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800Y/126-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800Y/126-12x11B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "", tapCode: "6x5", listKey: "WSLII-1000Y/12-6x5" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000Y/12-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000Y/12-8x7B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000Y/12-10x9B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "", tapCode: "6x5", listKey: "WSLII-1000Y/72.5-6x5" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000Y/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000Y/72.5-8x7B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000Y/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000Y/126-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000Y/126-8x7B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "Y", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000Y/126-10x9B" }, { family: "WSL", phases: "II", currentA: 1200, connection: "Y", umKv: 12, selectorSize: "", tapCode: "6x5", listKey: "WSLII-1200Y/12-6x5" }, { family: "WSL", phases: "II", currentA: 1200, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1200Y/12-6x5B" }, { family: "WSL", phases: "II", currentA: 1200, connection: "Y", umKv: 72.5, selectorSize: "", tapCode: "6x5", listKey: "WSLII-1200Y/72.5-6x5" }, { family: "WSL", phases: "II", currentA: 1200, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1200Y/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 1200, connection: "Y", umKv: 72.5, selectorSize: "D", tapCode: "10x9", listKey: "WSLII-1200Y/72.5-10x9D" }, { family: "WSL", phases: "II", currentA: 1600, connection: "Y", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1600Y/12-6x5B" }, { family: "WSL", phases: "II", currentA: 1600, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1600Y/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 1600, connection: "Y", umKv: 145, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1600Y/145-6x5B" }, { family: "WSL", phases: "II", currentA: 2e3, connection: "Y", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-2000Y/12-6x5A" }, { family: "WSL", phases: "II", currentA: 2e3, connection: "Y", umKv: 40.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-2000Y/40.5-6x5A" }, { family: "WSL", phases: "II", currentA: 2e3, connection: "Y", umKv: 72.5, selectorSize: "B", tapCode: "11x10", listKey: "WSLII-2000Y/72.5-11x10B" }, { family: "WDL", phases: "II", currentA: 2400, connection: "Y", umKv: 252, selectorSize: "D", tapCode: "6x5", listKey: "WDLII-2400Y/252-6x5D" }, { family: "WDL", phases: "II", currentA: 1600, connection: "", umKv: 252, selectorSize: "D", tapCode: "12x11", listKey: "WDLII-1600/252-12x11D" }, { family: "WDL", phases: "II", currentA: 630, connection: "", umKv: 252, selectorSize: "", tapCode: "4x3", listKey: "WDLII-630/252-4x3" }, { family: "WDL", phases: "II", currentA: 400, connection: "", umKv: 252, selectorSize: "D", tapCode: "10x9", listKey: "WDLII-400/252-10x9D" }, { family: "WSL", phases: "II", currentA: 400, connection: "D", umKv: 170, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-400D/170-6x5A" }, { family: "WSL", phases: "II", currentA: 1200, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1200D/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000D/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600D/12-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600D/12-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600D/12-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600D/12-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600D/12-12x11B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600D/72.5-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600D/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600D/72.5-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600D/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600D/72.5-12x11B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-600D/126-6x5A" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-600D/126-6x5B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-600D/126-8x7B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-600D/126-10x9B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-600D/126-12x11B" }, { family: "WSL", phases: "II", currentA: 600, connection: "D", umKv: 170, selectorSize: "D", tapCode: "6x5", listKey: "WSLII-600D/170-6x5D" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 12, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800D/12-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800D/12-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800D/12-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800D/12-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 12, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800D/12-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800D/72.5-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800D/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800D/72.5-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800D/72.5-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800D/72.5-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 126, selectorSize: "A", tapCode: "6x5", listKey: "WSLII-800D/126-6x5A" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800D/126-6x5B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-800D/126-8x7B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-800D/126-10x9B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 126, selectorSize: "B", tapCode: "12x11", listKey: "WSLII-800D/126-12x11B" }, { family: "WSL", phases: "II", currentA: 800, connection: "D", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-800D/170-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000D/12-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000D/12-8x7B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 12, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000D/12-10x9B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000D/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 72.5, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000D/72.5-8x7B" }, { family: "WDL", phases: "II", currentA: 4e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "6x5", listKey: "WDLII-4000/72.5-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000D/126-6x5B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "8x7", listKey: "WSLII-1000D/126-8x7B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 126, selectorSize: "B", tapCode: "10x9", listKey: "WSLII-1000D/126-10x9B" }, { family: "WSL", phases: "II", currentA: 1e3, connection: "D", umKv: 170, selectorSize: "B", tapCode: "6x5", listKey: "WSLII-1000D/170-6x5B" }, { family: "WDL", phases: "II", currentA: 2400, connection: "", umKv: 126, selectorSize: "D", tapCode: "10x9", listKey: "WDLII-2400/126-10x9D" }, { family: "WSL", phases: "VI", currentA: 600, connection: "", umKv: 12, selectorSize: "A", tapCode: "3x2", listKey: "WSLVI-600/12-3x2A" }, { family: "WSL", phases: "VI", currentA: 600, connection: "", umKv: 12, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-600/12-3x2B" }, { family: "WSL", phases: "VI", currentA: 600, connection: "", umKv: 72.5, selectorSize: "A", tapCode: "3x2", listKey: "WSLVI-600/72.5-3x2A" }, { family: "WSL", phases: "VI", currentA: 600, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-600/72.5-3x2B" }, { family: "WSL", phases: "VI", currentA: 1600, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "6x2", listKey: "WSLVI-1600/72.5-6x2B" }, { family: "WSL", phases: "VI", currentA: 600, connection: "", umKv: 252, selectorSize: "C", tapCode: "6x2", listKey: "WSLVI-600/252-6x2C" }, { family: "WDL", phases: "VI", currentA: 600, connection: "", umKv: 252, selectorSize: "C", tapCode: "6x2", listKey: "WDLVI-600/252-6x2C" }, { family: "WSL", phases: "VI", currentA: 800, connection: "", umKv: 12, selectorSize: "A", tapCode: "3x2", listKey: "WSLVI-800/12-3x2A" }, { family: "WSL", phases: "VI", currentA: 800, connection: "", umKv: 12, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-800/12-3x2B" }, { family: "WSL", phases: "VI", currentA: 800, connection: "", umKv: 72.5, selectorSize: "A", tapCode: "3x2", listKey: "WSLVI-800/72.5-3x2A" }, { family: "WSL", phases: "VI", currentA: 800, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-800/72.5-3x2B" }, { family: "WSL", phases: "VI", currentA: 1e3, connection: "", umKv: 12, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-1000/12-3x2B" }, { family: "WSL", phases: "VI", currentA: 1e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-1000/72.5-3x2B" }, { family: "WSL", phases: "VI", currentA: 2e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-2000/72.5-3x2B" }, { family: "WSL", phases: "VI", currentA: 3e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVI-3000/72.5-3x2B" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 12, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-600/12-5x2A" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 12, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-600/12-5x2B" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 72.5, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-600/72.5-5x2A" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-600/72.5-5x2B" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 126, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-600/126-5x2A" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-600/126-5x2B" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 126, selectorSize: "E", tapCode: "5x2", listKey: "WSLVIII-600/126-5x2E" }, { family: "WSL", phases: "VIII", currentA: 600, connection: "", umKv: 252, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-600/252-5x2B" }, { family: "WDL", phases: "VIII", currentA: 600, connection: "", umKv: 252, selectorSize: "D", tapCode: "5x2", listKey: "WDLVIII-600/252-5x2D" }, { family: "WDL", phases: "VIII", currentA: 600, connection: "", umKv: 252, selectorSize: "E", tapCode: "5x2", listKey: "WDLVIII-600/252-5x2E" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 12, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-800/12-5x2A" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 12, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-800/12-5x2B" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 72.5, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-800/72.5-5x2A" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-800/72.5-5x2B" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 72.5, selectorSize: "D", tapCode: "12x2", listKey: "WSLVIII-800/72.5-12x2D" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 126, selectorSize: "A", tapCode: "5x2", listKey: "WSLVIII-800/126-5x2A" }, { family: "WSL", phases: "VIII", currentA: 800, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-800/126-5x2B" }, { family: "WSL", phases: "VIII", currentA: 1e3, connection: "", umKv: 12, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-1000/12-5x2B" }, { family: "WSL", phases: "VIII", currentA: 1e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-1000/72.5-5x2B" }, { family: "WSL", phases: "VIII", currentA: 1e3, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-1000/126-5x2B" }, { family: "WSL", phases: "VIII", currentA: 1200, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-1200/72.5-5x2B" }, { family: "WSL", phases: "VIII", currentA: 2e3, connection: "", umKv: 72.5, selectorSize: "D", tapCode: "12x2", listKey: "WSLVIII-2000/72.5-12x2D" }, { family: "WSL", phases: "VIII", currentA: 2e3, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-2000/72.5-5x2B" }, { family: "WDL", phases: "VIII", currentA: 2e3, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WDLVIII-2000/126-5x2B" }, { family: "WSL", phases: "VIII", currentA: 2e3, connection: "", umKv: 40.5, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-2000/40.5-5x2B" }, { family: "WSL", phases: "VIII", currentA: 2e3, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WSLVIII-2000/126-5x2B" }, { family: "WDL", phases: "VIII", currentA: 2400, connection: "", umKv: 126, selectorSize: "B", tapCode: "5x2", listKey: "WDLVIII-2400/126-5x2B" }, { family: "WSL", phases: "VIII", currentA: 1600, connection: "", umKv: 72.5, selectorSize: "B", tapCode: "3x2", listKey: "WSLVIII-1600/72.5-3x2B" }] };
|
|
955
|
+
|
|
956
|
+
// lib/parseType.ts
|
|
957
|
+
function normalizeType(raw) {
|
|
958
|
+
let t = raw.replace(/[×*]/g, "x").replace(/[–—-]/g, "-").replace(/,/g, ".").replace(/(/g, "(").replace(/)/g, ")").replace(/\s+/g, "").replace(/(\d)_(\d)/g, "$1x$2").replace(/(III|II|I)(\d)/, "$1-$2").replace(/(WSL|WDL|WSG)(VIII|VII|IV|VI|IX|V)(\d)/i, "$1$2-$3");
|
|
959
|
+
if (!t.includes("/")) {
|
|
960
|
+
t = t.replace(/([YD])(\d+(?:\.\d+)?)-/i, "$1/$2-");
|
|
961
|
+
}
|
|
962
|
+
t = t.replace(
|
|
963
|
+
/(363|362|330|300|252|170|145|126|72\.5|40\.5|17\.5|12\.5|12)(\d{1,2}x\d)/,
|
|
964
|
+
"$1-$2"
|
|
965
|
+
);
|
|
966
|
+
return t;
|
|
967
|
+
}
|
|
968
|
+
var OCTC_TYPE_RE = /^(?:(\d+)x)?(WSL|WDL|WSG)(VIII|VII|III|II|IV|VI|IX|V|I)-(\d+)([YD])?[/-](\d+(?:\.\d+)?)-(\d+)x(\d+)(?:\((\d+)x(\d+)\))?(?:\(([A-E])\)|([A-E]))?$/i;
|
|
969
|
+
function parseTypeString(raw) {
|
|
970
|
+
const t = normalizeType(raw);
|
|
971
|
+
const octc = t.match(OCTC_TYPE_RE);
|
|
972
|
+
if (octc) {
|
|
973
|
+
const contact = octc[9] && octc[10] ? `${Number(octc[9])}x${Number(octc[10])}` : `${Number(octc[7])}x${Number(octc[8])}`;
|
|
974
|
+
return {
|
|
975
|
+
unitCount: octc[1] ? Number(octc[1]) : 1,
|
|
976
|
+
family: octc[2].toUpperCase(),
|
|
977
|
+
phases: octc[3].toUpperCase(),
|
|
978
|
+
currentA: Number(octc[4]),
|
|
979
|
+
connection: (octc[5] ?? "").toUpperCase(),
|
|
980
|
+
umKv: Number(octc[6]),
|
|
981
|
+
selectorSize: (octc[11] || octc[12] || "").toUpperCase(),
|
|
982
|
+
tapCode: contact
|
|
983
|
+
};
|
|
984
|
+
}
|
|
985
|
+
const re = /^(?:(\d+)x)?([A-Z][A-Z0-9]*?)(III|II|I)-(\d+)([YD])?\/(\d+(?:\.\d+)?)([BCDE]+)?-(\d+[WG0]?)$/;
|
|
986
|
+
const m = t.match(re);
|
|
987
|
+
if (!m) return null;
|
|
988
|
+
return {
|
|
989
|
+
unitCount: m[1] ? Number(m[1]) : 1,
|
|
990
|
+
family: m[2],
|
|
991
|
+
phases: m[3],
|
|
992
|
+
currentA: Number(m[4]),
|
|
993
|
+
connection: m[5] ?? "",
|
|
994
|
+
umKv: Number(m[6]),
|
|
995
|
+
selectorSize: m[7] ?? "",
|
|
996
|
+
tapCode: m[8]
|
|
997
|
+
};
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
// lib/listIndex.ts
|
|
1001
|
+
var file = listIndex_data_default;
|
|
1002
|
+
var LIST_INDEX_META = {
|
|
1003
|
+
source: file.source,
|
|
1004
|
+
generatedOn: file.generatedOn,
|
|
1005
|
+
keyCount: file.keyCount
|
|
1006
|
+
};
|
|
1007
|
+
var KEYS = new Set(file.keys);
|
|
1008
|
+
function stripMdu(raw) {
|
|
1009
|
+
return raw.replace(
|
|
1010
|
+
/\+(CMA7|SHM-D[A]?|SHM-KX|HMIET|HMJK|ET-SZ6).*$/i,
|
|
1011
|
+
""
|
|
1012
|
+
);
|
|
1013
|
+
}
|
|
1014
|
+
function compactTypeKey(model) {
|
|
1015
|
+
return stripMdu(model).trim().replace(/\s+/g, "").replace(/[×*]/g, "x");
|
|
1016
|
+
}
|
|
1017
|
+
function octcSig(row) {
|
|
1018
|
+
return [
|
|
1019
|
+
"octc",
|
|
1020
|
+
row.family,
|
|
1021
|
+
row.phases,
|
|
1022
|
+
row.currentA,
|
|
1023
|
+
row.connection,
|
|
1024
|
+
row.umKv,
|
|
1025
|
+
row.selectorSize,
|
|
1026
|
+
row.tapCode
|
|
1027
|
+
].join("|");
|
|
1028
|
+
}
|
|
1029
|
+
var octcIndex = null;
|
|
1030
|
+
function getOctcIndex() {
|
|
1031
|
+
if (octcIndex) return octcIndex;
|
|
1032
|
+
const bySig = /* @__PURE__ */ new Map();
|
|
1033
|
+
for (const row of file.octc) {
|
|
1034
|
+
const k = octcSig(row);
|
|
1035
|
+
const bucket = bySig.get(k);
|
|
1036
|
+
if (bucket) bucket.push(row);
|
|
1037
|
+
else bySig.set(k, [row]);
|
|
1038
|
+
}
|
|
1039
|
+
octcIndex = { byKey: KEYS, bySig };
|
|
1040
|
+
return octcIndex;
|
|
1041
|
+
}
|
|
1042
|
+
var OCTC_SIZE_FALLBACK = ["A", "B", "E", "D", "C", ""];
|
|
1043
|
+
function lookupOctcRows(parsed) {
|
|
1044
|
+
const idx = getOctcIndex();
|
|
1045
|
+
const tryFam = (family) => {
|
|
1046
|
+
const base = { ...parsed, family };
|
|
1047
|
+
const exact = idx.bySig.get(octcSig(base));
|
|
1048
|
+
if (exact?.length) return exact;
|
|
1049
|
+
if (parsed.selectorSize) return void 0;
|
|
1050
|
+
for (const sz of OCTC_SIZE_FALLBACK) {
|
|
1051
|
+
const hits = idx.bySig.get(octcSig({ ...base, selectorSize: sz }));
|
|
1052
|
+
if (hits?.length) return hits;
|
|
1053
|
+
}
|
|
1054
|
+
return void 0;
|
|
1055
|
+
};
|
|
1056
|
+
return tryFam(parsed.family) ?? (parsed.family === "WDL" ? tryFam("WSL") : void 0);
|
|
1057
|
+
}
|
|
1058
|
+
function listRowExists(model) {
|
|
1059
|
+
const compact = compactTypeKey(model);
|
|
1060
|
+
if (!compact) return false;
|
|
1061
|
+
if (KEYS.has(compact)) return true;
|
|
1062
|
+
const parsed = parseTypeString(compact);
|
|
1063
|
+
if (!parsed) return false;
|
|
1064
|
+
if (parsed.family !== "WSL" && parsed.family !== "WDL") return false;
|
|
1065
|
+
return Boolean(lookupOctcRows(parsed)?.length);
|
|
1066
|
+
}
|
|
1067
|
+
function resolveOctcListKey(model) {
|
|
1068
|
+
const parsed = parseTypeString(model);
|
|
1069
|
+
if (!parsed) return null;
|
|
1070
|
+
if (parsed.family === "WSG") return model;
|
|
1071
|
+
if (parsed.family !== "WSL" && parsed.family !== "WDL") return null;
|
|
1072
|
+
const candidates = /* @__PURE__ */ new Set();
|
|
1073
|
+
const add = (m) => {
|
|
1074
|
+
if (m) candidates.add(m);
|
|
1075
|
+
};
|
|
1076
|
+
add(model);
|
|
1077
|
+
const stripped = model.replace(/(\d+)[YD]\//, "$1/");
|
|
1078
|
+
add(stripped);
|
|
1079
|
+
const sizeNow = parsed.selectorSize;
|
|
1080
|
+
const sizes = ["A", "B", "D", "E"];
|
|
1081
|
+
for (const sz of sizes) {
|
|
1082
|
+
if (!sizeNow) {
|
|
1083
|
+
add(`${model}${sz}`);
|
|
1084
|
+
add(`${stripped}${sz}`);
|
|
1085
|
+
} else {
|
|
1086
|
+
add(model.replace(new RegExp(`${sizeNow}$`), sz));
|
|
1087
|
+
add(stripped.replace(new RegExp(`${sizeNow}$`), sz));
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
for (const c of candidates) {
|
|
1091
|
+
if (listRowExists(c)) {
|
|
1092
|
+
const hits2 = lookupOctcRows(parseTypeString(c) ?? parsed);
|
|
1093
|
+
return hits2?.[0]?.listKey ?? compactTypeKey(c);
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
const hits = lookupOctcRows(parsed);
|
|
1097
|
+
return hits?.[0]?.listKey ?? null;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
// lib/typeExists.ts
|
|
1101
|
+
var STAR_ONLY_III = /* @__PURE__ */ new Set(["cm", "cm2", "cmd", "shzv", "shzvg"]);
|
|
1102
|
+
var II_OMITS_CONNECTION = /* @__PURE__ */ new Set(["cm", "cm2", "cmd"]);
|
|
1103
|
+
var COMPOUND_NO_GRADE = /* @__PURE__ */ new Set(["cv", "cv2", "sv", "cvt", "cz"]);
|
|
1104
|
+
function commercialTypeExists(model, series) {
|
|
1105
|
+
const parsed = parseTypeString(model);
|
|
1106
|
+
if (!parsed) return false;
|
|
1107
|
+
const s = series ?? SERIES.find((row) => row.code === parsed.family);
|
|
1108
|
+
if (!s) return false;
|
|
1109
|
+
if (s.code !== parsed.family) return false;
|
|
1110
|
+
if (s.dutyKind === "octc") {
|
|
1111
|
+
if (s.id === "wsg") {
|
|
1112
|
+
const i = s.currents.III?.includes(parsed.currentA) || s.currents.II?.includes(parsed.currentA) || s.currents.I?.includes(parsed.currentA);
|
|
1113
|
+
return Boolean(
|
|
1114
|
+
i && s.umKv.some((u) => Math.abs(u - parsed.umKv) < 0.05)
|
|
1115
|
+
);
|
|
1116
|
+
}
|
|
1117
|
+
return listRowExists(model);
|
|
1118
|
+
}
|
|
1119
|
+
const phase = parsed.phases;
|
|
1120
|
+
const allowedI = s.currents[phase];
|
|
1121
|
+
if (!allowedI?.includes(parsed.currentA)) return false;
|
|
1122
|
+
if (!s.umKv.some((u) => Math.abs(u - parsed.umKv) < 0.05)) return false;
|
|
1123
|
+
if (COMPOUND_NO_GRADE.has(s.id) && parsed.selectorSize) return false;
|
|
1124
|
+
if (s.id === "cv2" && parsed.currentA === 500) return false;
|
|
1125
|
+
if (s.id === "hwv" && parsed.selectorSize) return false;
|
|
1126
|
+
if (phase === "III") {
|
|
1127
|
+
const conn = parsed.connection || "Y";
|
|
1128
|
+
if (!iiiTypeAllowsConnection(s, "III", conn === "D" ? "D" : "Y")) {
|
|
1129
|
+
return false;
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
if (phase === "I" && parsed.connection) return false;
|
|
1133
|
+
if (phase === "II") {
|
|
1134
|
+
if (STAR_ONLY_III.has(s.id) && parsed.connection === "D") return false;
|
|
1135
|
+
if (II_OMITS_CONNECTION.has(s.id) && parsed.connection) return false;
|
|
1136
|
+
}
|
|
1137
|
+
return true;
|
|
1138
|
+
}
|
|
1139
|
+
function phaseConnectionLegal(s, phases, conn) {
|
|
1140
|
+
if (s.dutyKind === "octc") return true;
|
|
1141
|
+
if (phases === "III") return iiiTypeAllowsConnection(s, "III", conn);
|
|
1142
|
+
if (phases === "II" && STAR_ONLY_III.has(s.id) && conn === "D") return false;
|
|
1143
|
+
return true;
|
|
1144
|
+
}
|
|
1145
|
+
function resolveOctcListModel(model) {
|
|
1146
|
+
return resolveOctcListKey(model);
|
|
1147
|
+
}
|
|
1148
|
+
function connectionLetterOnPhase(s, phases, connection) {
|
|
1149
|
+
if (s.dutyKind === "octc") return connection === "D" ? "D" : "Y";
|
|
1150
|
+
if (phases === "I") return "any";
|
|
1151
|
+
if (phases === "II" && II_OMITS_CONNECTION.has(s.id)) return "any";
|
|
1152
|
+
if (phases === "II" && STAR_ONLY_III.has(s.id) && connection === "D") {
|
|
1153
|
+
return "any";
|
|
1154
|
+
}
|
|
1155
|
+
if (phases === "III" && !iiiTypeAllowsConnection(s, "III", connection)) {
|
|
1156
|
+
return "any";
|
|
1157
|
+
}
|
|
1158
|
+
return connection;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
// lib/engine.ts
|
|
1162
|
+
function normOctcContact(raw) {
|
|
1163
|
+
const t = (raw ?? "").replace(/\s+/g, "").toLowerCase();
|
|
1164
|
+
const m = t.match(/^(\d+)x(\d+)$/);
|
|
1165
|
+
if (!m) return "";
|
|
1166
|
+
return `${Number(m[1])}x${Number(m[2])}`;
|
|
1167
|
+
}
|
|
1168
|
+
function octcContactCode(input, seriesId) {
|
|
1169
|
+
const hinted = normOctcContact(input.octcContact);
|
|
1170
|
+
if (hinted) return hinted;
|
|
1171
|
+
let pos = input.positions;
|
|
1172
|
+
if (input.plusMinusSteps != null && input.plusMinusSteps > 0) {
|
|
1173
|
+
pos = 2 * input.plusMinusSteps + 1;
|
|
1174
|
+
}
|
|
1175
|
+
if (seriesId === "wsg") {
|
|
1176
|
+
if (pos == null || pos <= 5) return "4x5";
|
|
1177
|
+
return "6x5";
|
|
1178
|
+
}
|
|
1179
|
+
if (pos == null || pos <= 6) return "6x5";
|
|
1180
|
+
if (pos <= 7) return "7x6";
|
|
1181
|
+
if (pos <= 8) return "8x7";
|
|
1182
|
+
if (pos <= 9) return "9x8";
|
|
1183
|
+
if (pos <= 10) return "10x9";
|
|
1184
|
+
if (pos <= 12) return "12x11";
|
|
1185
|
+
if (pos <= 16) return "16x15";
|
|
1186
|
+
return "18x17";
|
|
1187
|
+
}
|
|
1188
|
+
function octcSizeLetter(um, contact, requested) {
|
|
1189
|
+
if (requested && requested !== "auto") {
|
|
1190
|
+
if (requested === "DE") return "E";
|
|
1191
|
+
return requested;
|
|
1192
|
+
}
|
|
1193
|
+
const c = contact.toLowerCase();
|
|
1194
|
+
if (c === "18x17" || c === "16x15") return "E";
|
|
1195
|
+
if (c === "12x11" || c === "10x9" || c === "12x12") return "D";
|
|
1196
|
+
if (um <= 72.5 + 0.1 && ["6x5", "4x5", "5x4", "5x2", "4x3", "3x2", "7x6"].includes(c)) {
|
|
1197
|
+
return "A";
|
|
1198
|
+
}
|
|
1199
|
+
return "B";
|
|
1200
|
+
}
|
|
1201
|
+
function octcRoman(connection, contact, series) {
|
|
1202
|
+
if (series && series !== "auto") return series;
|
|
1203
|
+
const c = (contact ?? "").toLowerCase();
|
|
1204
|
+
if (c === "5x2" || c === "12x2") return "VIII";
|
|
1205
|
+
if (c === "3x2" || c === "6x2") return "VI";
|
|
1206
|
+
if (c === "5x4" || c === "4x3") return "V";
|
|
1207
|
+
if (c === "12x12") return "VII";
|
|
1208
|
+
return connection === "D" ? "II" : "IV";
|
|
1209
|
+
}
|
|
1210
|
+
function isOctcSeries(s) {
|
|
1211
|
+
return s.dutyKind === "octc";
|
|
1212
|
+
}
|
|
1213
|
+
function maxStepVoltageForSeries(s, pitch) {
|
|
1214
|
+
if (s.id === "cv2" || s.id === "cv" || s.id === "sv") {
|
|
1215
|
+
if (pitch <= 10) return s.id === "cv2" ? 2e3 : 1500;
|
|
1216
|
+
if (pitch <= 12) return s.id === "cv2" ? 1500 : 1400;
|
|
1217
|
+
return s.id === "cv2" ? 1500 : 1e3;
|
|
1218
|
+
}
|
|
1219
|
+
return s.maxStepVoltageV;
|
|
1220
|
+
}
|
|
1221
|
+
function compoundCoversAcrossTap(s, input) {
|
|
1222
|
+
if (s.structure !== "compound") return true;
|
|
1223
|
+
const needBil = input.acrossTapBilKv ?? 0;
|
|
1224
|
+
const needPf = input.acrossTapPfKv ?? 0;
|
|
1225
|
+
if (needBil <= 0 && needPf <= 0) return true;
|
|
1226
|
+
const aLi = s.id === "cv2" ? 200 : 200;
|
|
1227
|
+
const aPf = s.id === "cv2" ? 50 : 50;
|
|
1228
|
+
return aLi + 0.5 >= needBil && aPf + 0.5 >= needPf;
|
|
1229
|
+
}
|
|
1230
|
+
function formatUmToken(um, size, usesSelectorSize) {
|
|
1231
|
+
const umStr = Number.isInteger(um) ? String(um) : String(um);
|
|
1232
|
+
if (!usesSelectorSize || !size) return umStr;
|
|
1233
|
+
return `${umStr}${size}`;
|
|
1234
|
+
}
|
|
1235
|
+
function buildModelString(series, phases, current, connection, umToken, tapCode, unitCount, octcSeries) {
|
|
1236
|
+
const conn = series.connections.includes("any") && connection === "any" ? "" : connection === "any" ? "Y" : connection;
|
|
1237
|
+
let core;
|
|
1238
|
+
if (isOctcSeries(series)) {
|
|
1239
|
+
const yd = conn === "D" ? "D" : "Y";
|
|
1240
|
+
const roman = octcRoman(
|
|
1241
|
+
yd,
|
|
1242
|
+
tapCode.replace(/[A-E]$/i, ""),
|
|
1243
|
+
octcSeries
|
|
1244
|
+
);
|
|
1245
|
+
core = `${series.code}${roman}-${current}${yd}/${umToken}-${tapCode}`;
|
|
1246
|
+
} else if (series.code === "HWDK") {
|
|
1247
|
+
core = `${series.code}${phases}-${current}/${umToken}`;
|
|
1248
|
+
if (tapCode && /^\d+$/.test(tapCode)) core += `-${tapCode}`;
|
|
1249
|
+
} else if (!conn) {
|
|
1250
|
+
core = `${series.code}${phases}-${current}/${umToken}-${tapCode}`;
|
|
1251
|
+
} else {
|
|
1252
|
+
core = `${series.code}${phases}-${current}${conn}/${umToken}-${tapCode}`;
|
|
1253
|
+
}
|
|
1254
|
+
if (unitCount > 1) {
|
|
1255
|
+
return `${unitCount}x${core}`;
|
|
1256
|
+
}
|
|
1257
|
+
return core;
|
|
1258
|
+
}
|
|
1259
|
+
function seriesMatchesMounting(s, input) {
|
|
1260
|
+
if (input.mounting === "dry_type") return s.mounting.includes("dry_type");
|
|
1261
|
+
if (input.mounting === "reactor") return s.mounting.includes("reactor");
|
|
1262
|
+
if (input.mounting === "on_tank" || input.mounting === "external_compartment") {
|
|
1263
|
+
return s.mounting.includes("on_tank") || s.mounting.includes("external_compartment");
|
|
1264
|
+
}
|
|
1265
|
+
return s.mounting.includes("in_tank");
|
|
1266
|
+
}
|
|
1267
|
+
function seriesMatchesMedium(s, input) {
|
|
1268
|
+
if (input.mounting === "dry_type") return s.medium === "dry";
|
|
1269
|
+
if (input.preferVacuum) return true;
|
|
1270
|
+
if (input.medium === "oil_vacuum") return s.vacuum || s.medium === "oil_vacuum";
|
|
1271
|
+
if (input.medium === "oil") return s.medium === "oil" || s.medium === "oil_vacuum";
|
|
1272
|
+
return true;
|
|
1273
|
+
}
|
|
1274
|
+
function adequacyScore(s, input, current, um, unitCount) {
|
|
1275
|
+
let score = 1e4;
|
|
1276
|
+
const fam = FAMILY_MIN_RANK[s.id] ?? s.rank;
|
|
1277
|
+
score -= fam * 100;
|
|
1278
|
+
if (input.preferVacuum && s.vacuum) score += 40;
|
|
1279
|
+
if (input.preferVacuum && !s.vacuum) score -= 800;
|
|
1280
|
+
if (!input.preferVacuum && input.medium === "oil" && !s.vacuum) score += 40;
|
|
1281
|
+
if (!input.preferVacuum && input.medium === "oil" && s.vacuum) score -= 800;
|
|
1282
|
+
if ((input.mounting === "on_tank" || input.mounting === "external_compartment") && s.id === "hwv") {
|
|
1283
|
+
score += 2500;
|
|
1284
|
+
}
|
|
1285
|
+
if (input.mounting === "in_tank" && s.id === "hwv") score -= 4e3;
|
|
1286
|
+
if (unitCount > 1) {
|
|
1287
|
+
score -= 8e3;
|
|
1288
|
+
score -= current * 0.05;
|
|
1289
|
+
}
|
|
1290
|
+
const overshootI = current - input.throughCurrentA;
|
|
1291
|
+
score -= overshootI * 0.25;
|
|
1292
|
+
const overshootUm = um - input.umKv;
|
|
1293
|
+
score -= overshootUm * 3;
|
|
1294
|
+
const psin = s.stepCapacityByCurrent?.[current];
|
|
1295
|
+
if (psin && input.stepVoltageV > 0) {
|
|
1296
|
+
const need = input.throughCurrentA * input.stepVoltageV / 1e3;
|
|
1297
|
+
if (need > 0 && psin >= need) {
|
|
1298
|
+
score -= (psin - need) * 0.01;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
return score;
|
|
1302
|
+
}
|
|
1303
|
+
function ratingCoversDuty(wanted, rating) {
|
|
1304
|
+
if (wanted <= rating + 0.01) return true;
|
|
1305
|
+
return wanted <= rating * 1.01 + 0.5;
|
|
1306
|
+
}
|
|
1307
|
+
function buildAttempts(s, input) {
|
|
1308
|
+
const out = [];
|
|
1309
|
+
const covering = coveringUms(input.umKv, s.umKv).filter(
|
|
1310
|
+
(u) => u >= input.umKv - 0.1
|
|
1311
|
+
);
|
|
1312
|
+
if (!covering.length) return out;
|
|
1313
|
+
const um0 = covering[0];
|
|
1314
|
+
const ums = (FAMILY_MIN_RANK[s.id] ?? s.rank) < 40 ? covering : [um0];
|
|
1315
|
+
if (s.id === "cz") {
|
|
1316
|
+
const curI = nearestCurrent(input.throughCurrentA, s.currents.I ?? []);
|
|
1317
|
+
if (curI != null && ratingCoversDuty(input.throughCurrentA, curI)) {
|
|
1318
|
+
out.push({
|
|
1319
|
+
series: s,
|
|
1320
|
+
phases: "I",
|
|
1321
|
+
current: curI,
|
|
1322
|
+
um: um0,
|
|
1323
|
+
unitCount: 3
|
|
1324
|
+
});
|
|
1325
|
+
}
|
|
1326
|
+
return out;
|
|
1327
|
+
}
|
|
1328
|
+
const list = s.currents[input.phases];
|
|
1329
|
+
const maxPhase = list?.length ? Math.max(...list) : null;
|
|
1330
|
+
const connIllegal = !phaseConnectionLegal(
|
|
1331
|
+
s,
|
|
1332
|
+
input.phases,
|
|
1333
|
+
input.connection
|
|
1334
|
+
);
|
|
1335
|
+
if (!connIllegal && maxPhase != null && ratingCoversDuty(input.throughCurrentA, maxPhase)) {
|
|
1336
|
+
const cur = nearestCurrent(input.throughCurrentA, list);
|
|
1337
|
+
if (cur != null) {
|
|
1338
|
+
for (const um of ums) {
|
|
1339
|
+
out.push({
|
|
1340
|
+
series: s,
|
|
1341
|
+
phases: input.phases,
|
|
1342
|
+
current: cur,
|
|
1343
|
+
um,
|
|
1344
|
+
unitCount: 1
|
|
1345
|
+
});
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
if (isOctcSeries(s)) return out;
|
|
1350
|
+
if (s.currents.I?.length && (input.phases === "III" || connIllegal)) {
|
|
1351
|
+
const curI = nearestCurrent(input.throughCurrentA, s.currents.I);
|
|
1352
|
+
if (curI != null) {
|
|
1353
|
+
out.push({
|
|
1354
|
+
series: s,
|
|
1355
|
+
phases: "I",
|
|
1356
|
+
current: curI,
|
|
1357
|
+
um: um0,
|
|
1358
|
+
unitCount: 3,
|
|
1359
|
+
deltaForced: connIllegal
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
return out;
|
|
1364
|
+
}
|
|
1365
|
+
function diversifyResults(ranked) {
|
|
1366
|
+
if (ranked.length <= 1) return ranked;
|
|
1367
|
+
const primary = ranked[0];
|
|
1368
|
+
const used = /* @__PURE__ */ new Set([primary.model]);
|
|
1369
|
+
const rest = [];
|
|
1370
|
+
const take = (pred) => {
|
|
1371
|
+
const hit = ranked.find((r) => !used.has(r.model) && pred(r));
|
|
1372
|
+
if (hit) {
|
|
1373
|
+
rest.push(hit);
|
|
1374
|
+
used.add(hit.model);
|
|
1375
|
+
}
|
|
1376
|
+
};
|
|
1377
|
+
take(
|
|
1378
|
+
(r) => r.seriesId === primary.seriesId && r.unitCount === primary.unitCount && Math.abs(r.umKv - primary.umKv) < 0.1 && r.currentA !== primary.currentA
|
|
1379
|
+
);
|
|
1380
|
+
take(
|
|
1381
|
+
(r) => r.seriesId === primary.seriesId && r.unitCount === primary.unitCount && r.umKv > primary.umKv + 0.1
|
|
1382
|
+
);
|
|
1383
|
+
take(
|
|
1384
|
+
(r) => r.seriesId !== primary.seriesId && r.unitCount === 1 && r.umKv <= primary.umKv + 0.1
|
|
1385
|
+
);
|
|
1386
|
+
for (const r of ranked) {
|
|
1387
|
+
if (used.has(r.model)) continue;
|
|
1388
|
+
rest.push(r);
|
|
1389
|
+
used.add(r.model);
|
|
1390
|
+
}
|
|
1391
|
+
return [primary, ...rest];
|
|
1392
|
+
}
|
|
1393
|
+
function selectOltc(input) {
|
|
1394
|
+
const errorsEn = [];
|
|
1395
|
+
const errorsZh = [];
|
|
1396
|
+
if (!input.throughCurrentA || input.throughCurrentA <= 0) {
|
|
1397
|
+
errorsEn.push("Enter rated through-current (A).");
|
|
1398
|
+
errorsZh.push("\u8BF7\u586B\u5199\u989D\u5B9A\u901A\u8FC7\u7535\u6D41\uFF08A\uFF09\u3002");
|
|
1399
|
+
}
|
|
1400
|
+
if (!input.umKv || input.umKv <= 0) {
|
|
1401
|
+
errorsEn.push("Enter highest voltage for equipment Um (kV).");
|
|
1402
|
+
errorsZh.push("\u8BF7\u586B\u5199\u8BBE\u5907\u6700\u9AD8\u7535\u538B Um\uFF08kV\uFF09\u3002");
|
|
1403
|
+
}
|
|
1404
|
+
if (input.stepVoltageV < 0) {
|
|
1405
|
+
errorsEn.push("Step voltage cannot be negative.");
|
|
1406
|
+
errorsZh.push("\u7EA7\u7535\u538B\u4E0D\u80FD\u4E3A\u8D1F\u3002");
|
|
1407
|
+
}
|
|
1408
|
+
if (errorsEn.length) {
|
|
1409
|
+
return { ok: false, results: [], errorsEn, errorsZh };
|
|
1410
|
+
}
|
|
1411
|
+
const tap = resolveTapFields({
|
|
1412
|
+
regulation: input.regulation,
|
|
1413
|
+
positions: input.positions,
|
|
1414
|
+
plusMinusSteps: input.plusMinusSteps,
|
|
1415
|
+
pitch: input.pitch,
|
|
1416
|
+
midPositions: input.midPositions
|
|
1417
|
+
});
|
|
1418
|
+
const wantOctc = input.dutyKind === "octc";
|
|
1419
|
+
let candidates = SERIES.filter((s) => {
|
|
1420
|
+
if (isOctcSeries(s) !== wantOctc) return false;
|
|
1421
|
+
return seriesMatchesMounting(s, input) && seriesMatchesMedium(s, input);
|
|
1422
|
+
});
|
|
1423
|
+
candidates = candidates.filter((s) => {
|
|
1424
|
+
if (input.connection === "any") return true;
|
|
1425
|
+
return s.connections.includes(input.connection) || s.connections.includes("any");
|
|
1426
|
+
});
|
|
1427
|
+
const wantStruct = input.preferStructure;
|
|
1428
|
+
if (wantStruct && wantStruct !== "auto") {
|
|
1429
|
+
candidates = candidates.filter((s) => s.structure === wantStruct);
|
|
1430
|
+
}
|
|
1431
|
+
if (!candidates.length) {
|
|
1432
|
+
return {
|
|
1433
|
+
ok: false,
|
|
1434
|
+
results: [],
|
|
1435
|
+
errorsEn: [
|
|
1436
|
+
wantOctc ? "No OCTC family matches this mounting / medium combination. Adjust filters or contact engineering." : "No OLTC family matches this mounting / medium combination. Adjust filters or contact engineering."
|
|
1437
|
+
],
|
|
1438
|
+
errorsZh: [
|
|
1439
|
+
wantOctc ? "\u6CA1\u6709\u65E0\u8F7D\u7CFB\u5217\u5339\u914D\u5F53\u524D\u5B89\u88C5\u4F4D\u7F6E/\u4ECB\u8D28\u3002\u8BF7\u8C03\u6574\u6761\u4EF6\uFF0C\u6216\u8054\u7CFB\u5DE5\u7A0B\u786E\u8BA4\u3002" : "\u6CA1\u6709\u7CFB\u5217\u5339\u914D\u5F53\u524D\u5B89\u88C5\u4F4D\u7F6E/\u4ECB\u8D28\u3002\u8BF7\u8C03\u6574\u6761\u4EF6\uFF0C\u6216\u8054\u7CFB\u5DE5\u7A0B\u786E\u8BA4\u3002"
|
|
1440
|
+
]
|
|
1441
|
+
};
|
|
1442
|
+
}
|
|
1443
|
+
const results = [];
|
|
1444
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1445
|
+
for (const s of candidates) {
|
|
1446
|
+
if (!compoundCoversAcrossTap(s, input)) continue;
|
|
1447
|
+
if (!isOctcSeries(s)) {
|
|
1448
|
+
const pitchMaxUst = maxStepVoltageForSeries(s, tap.pitch);
|
|
1449
|
+
if (input.stepVoltageV > pitchMaxUst + 0.5) continue;
|
|
1450
|
+
const maxPos = input.regulation === "linear" ? s.maxPositionsLinear : s.maxPositionsWithChangeOver;
|
|
1451
|
+
if (tap.positions > maxPos) continue;
|
|
1452
|
+
} else {
|
|
1453
|
+
let octcPos = input.positions;
|
|
1454
|
+
if (input.plusMinusSteps != null && input.plusMinusSteps > 0) {
|
|
1455
|
+
octcPos = 2 * input.plusMinusSteps + 1;
|
|
1456
|
+
}
|
|
1457
|
+
if (octcPos != null && octcPos > s.maxPositionsLinear) continue;
|
|
1458
|
+
}
|
|
1459
|
+
for (const att of buildAttempts(s, input)) {
|
|
1460
|
+
const phaseCurrents = s.currents[att.phases] ?? s.currents.I ?? [];
|
|
1461
|
+
const need = input.stepVoltageV > 0 ? input.throughCurrentA * input.stepVoltageV / 1e3 : 0;
|
|
1462
|
+
const capacityOk = (c) => {
|
|
1463
|
+
const psin = s.stepCapacityByCurrent?.[c];
|
|
1464
|
+
if (psin != null && need > psin + 0.5) return false;
|
|
1465
|
+
return true;
|
|
1466
|
+
};
|
|
1467
|
+
let covering = phaseCurrents.filter((c) => {
|
|
1468
|
+
if (!ratingCoversDuty(input.throughCurrentA, c)) return false;
|
|
1469
|
+
if (input.throughCurrentA + 1 < c && input.throughCurrentA > c * 0.97) {
|
|
1470
|
+
return false;
|
|
1471
|
+
}
|
|
1472
|
+
return capacityOk(c);
|
|
1473
|
+
});
|
|
1474
|
+
if (!covering.length) {
|
|
1475
|
+
const maxKeep = phaseCurrents.filter(
|
|
1476
|
+
(c) => ratingCoversDuty(input.throughCurrentA, c) && capacityOk(c)
|
|
1477
|
+
);
|
|
1478
|
+
if (maxKeep.length) covering = [Math.max(...maxKeep)];
|
|
1479
|
+
}
|
|
1480
|
+
if (!covering.length) continue;
|
|
1481
|
+
const currentsToEmit = covering.slice(0, 2);
|
|
1482
|
+
for (const current of currentsToEmit) {
|
|
1483
|
+
const octc = isOctcSeries(s);
|
|
1484
|
+
const contact = octc ? octcContactCode(input, s.id) : "";
|
|
1485
|
+
const selectorSize = octc ? octcSizeLetter(att.um, contact, input.selectorSize ?? "auto") : s.usesSelectorSize ? pickSelectorSize(
|
|
1486
|
+
att.um,
|
|
1487
|
+
input.selectorSize ?? "auto",
|
|
1488
|
+
input.bilKv,
|
|
1489
|
+
input.pfKv,
|
|
1490
|
+
input.acrossTapBilKv,
|
|
1491
|
+
input.acrossTapPfKv
|
|
1492
|
+
) : "";
|
|
1493
|
+
const tapCode = octc ? contact : tap.tapCode;
|
|
1494
|
+
const modelTap = octc ? `${contact}${selectorSize}` : s.id === "cz" || s.id === "hwdk" ? String(tap.positions) : tap.tapCode;
|
|
1495
|
+
const umToken = formatUmToken(att.um, selectorSize, s.usesSelectorSize);
|
|
1496
|
+
const phases = phaseToken(att.phases);
|
|
1497
|
+
const conn = input.connection === "any" ? s.connections.includes("Y") ? "Y" : s.connections[0] : input.connection;
|
|
1498
|
+
let mduStr = "";
|
|
1499
|
+
const mduPref = input.mdu ?? "none";
|
|
1500
|
+
if (mduPref && mduPref !== "none" && mduPref !== "auto") {
|
|
1501
|
+
mduStr = mduPref;
|
|
1502
|
+
} else if (mduPref === "auto") {
|
|
1503
|
+
mduStr = s.defaultMdu;
|
|
1504
|
+
}
|
|
1505
|
+
const modelConn = connectionLetterOnPhase(
|
|
1506
|
+
s,
|
|
1507
|
+
att.phases,
|
|
1508
|
+
conn
|
|
1509
|
+
);
|
|
1510
|
+
let finalModel = buildModelString(
|
|
1511
|
+
s,
|
|
1512
|
+
phases,
|
|
1513
|
+
current,
|
|
1514
|
+
modelConn,
|
|
1515
|
+
umToken,
|
|
1516
|
+
modelTap,
|
|
1517
|
+
att.unitCount,
|
|
1518
|
+
input.octcSeries
|
|
1519
|
+
);
|
|
1520
|
+
if (att.phases === "I") {
|
|
1521
|
+
finalModel = finalModel.replace(
|
|
1522
|
+
new RegExp(`(${s.code}I-\\d+)[YD]/`),
|
|
1523
|
+
"$1/"
|
|
1524
|
+
);
|
|
1525
|
+
} else if (att.phases === "II" && modelConn === "any") {
|
|
1526
|
+
finalModel = finalModel.replace(
|
|
1527
|
+
new RegExp(`(${s.code}II-\\d+)[YD]/`),
|
|
1528
|
+
"$1/"
|
|
1529
|
+
);
|
|
1530
|
+
}
|
|
1531
|
+
if (octc) {
|
|
1532
|
+
const listed = resolveOctcListModel(finalModel);
|
|
1533
|
+
if (!listed) continue;
|
|
1534
|
+
finalModel = listed;
|
|
1535
|
+
} else if (!commercialTypeExists(finalModel, s)) {
|
|
1536
|
+
continue;
|
|
1537
|
+
}
|
|
1538
|
+
if (seen.has(finalModel)) continue;
|
|
1539
|
+
seen.add(finalModel);
|
|
1540
|
+
const modelWithMdu = mduStr ? `${finalModel}+${mduStr}` : finalModel;
|
|
1541
|
+
const score = adequacyScore(s, input, current, att.um, att.unitCount);
|
|
1542
|
+
const reasonsEn = [];
|
|
1543
|
+
const reasonsZh = [];
|
|
1544
|
+
const warningsEn = [];
|
|
1545
|
+
const warningsZh = [];
|
|
1546
|
+
reasonsEn.push(
|
|
1547
|
+
`Minimum-adequate path: ${s.nameEn}, Ium ${current} A \u2265 ${input.throughCurrentA} A, Um ${att.um} kV.`
|
|
1548
|
+
);
|
|
1549
|
+
reasonsZh.push(
|
|
1550
|
+
`\u6700\u4F4E\u6EE1\u8DB3\u8DEF\u5F84\uFF1A${s.nameZh}\uFF0CIum ${current} A \u2265 \u9700\u6C42 ${input.throughCurrentA} A\uFF0CUm ${att.um} kV\u3002`
|
|
1551
|
+
);
|
|
1552
|
+
if (s.structure === "compound" && !octc) {
|
|
1553
|
+
reasonsEn.push(
|
|
1554
|
+
"Compound type fits duty \u2014 preferred over larger combined types when eligible."
|
|
1555
|
+
);
|
|
1556
|
+
reasonsZh.push(
|
|
1557
|
+
"\u590D\u5408\u5F0F\u6EE1\u8DB3\u5DE5\u51B5\u65F6\u4F18\u5148\u4E8E\u66F4\u5927\u7684\u7EC4\u5408\u5F0F\uFF08\u975E\u9ED8\u8BA4 SHZV\uFF09\u3002"
|
|
1558
|
+
);
|
|
1559
|
+
}
|
|
1560
|
+
if (s.usesSelectorSize) {
|
|
1561
|
+
reasonsEn.push(
|
|
1562
|
+
`Tap selector grade ${selectorSize} (smallest covering Um` + (input.acrossTapBilKv ? ` + across-tap BIL ${input.acrossTapBilKv} kV` : "") + ")."
|
|
1563
|
+
);
|
|
1564
|
+
reasonsZh.push(
|
|
1565
|
+
`\u5206\u63A5\u9009\u62E9\u5668\u7B49\u7EA7 ${selectorSize}\uFF08\u6EE1\u8DB3 Um` + (input.acrossTapBilKv ? ` \u4E0E\u8C03\u538B\u7ED5\u7EC4\u95F4 BIL ${input.acrossTapBilKv} kV` : "") + " \u7684\u6700\u5C0F\u89C4\u683C\uFF09\u3002"
|
|
1566
|
+
);
|
|
1567
|
+
}
|
|
1568
|
+
if (octc) {
|
|
1569
|
+
const roman = octcRoman(conn, contact, input.octcSeries);
|
|
1570
|
+
reasonsEn.push(
|
|
1571
|
+
`OCTC contact ${contact}${selectorSize} (${s.code}${roman}).`
|
|
1572
|
+
);
|
|
1573
|
+
reasonsZh.push(
|
|
1574
|
+
`\u65E0\u8F7D\u89E6\u5934 ${contact}${selectorSize}\uFF08${s.code}${roman}\uFF09\u3002`
|
|
1575
|
+
);
|
|
1576
|
+
} else {
|
|
1577
|
+
reasonsEn.push(
|
|
1578
|
+
`Tap code ${tap.tapCode}: pitch ${tap.pitch}, ${tap.positions} pos, mid ${tap.mid}, ${input.regulation}.`
|
|
1579
|
+
);
|
|
1580
|
+
reasonsZh.push(
|
|
1581
|
+
`\u5206\u63A5\u4EE3\u7801 ${tap.tapCode}\uFF1A\u8282\u8DDD ${tap.pitch}\uFF0C${tap.positions} \u4F4D\uFF0C\u4E2D\u95F4\u4F4D ${tap.mid}\u3002`
|
|
1582
|
+
);
|
|
1583
|
+
}
|
|
1584
|
+
if (att.unitCount > 1) {
|
|
1585
|
+
if (att.deltaForced) {
|
|
1586
|
+
reasonsEn.push(
|
|
1587
|
+
`${att.unitCount}\xD7 single-phase \u2014 no brochure III type for this connection (e.g. CM2III-\u2026D does not exist).`
|
|
1588
|
+
);
|
|
1589
|
+
reasonsZh.push(
|
|
1590
|
+
`${att.unitCount} \u53F0\u5355\u76F8 \u2014 \u6837\u672C\u6CA1\u6709\u8FD9\u4E2A\u8FDE\u63A5\u7684\u4E09\u76F8\u578B\u53F7\uFF08\u6CA1\u6709 CM2III-\u2026D\uFF09\u3002`
|
|
1591
|
+
);
|
|
1592
|
+
} else {
|
|
1593
|
+
reasonsEn.push(
|
|
1594
|
+
`${att.unitCount}\xD7 single-phase \u2014 no single III unit covers this I\u1D64 (prefer one SHZV/SHZVG when it fits; 3\xD7 costs more).`
|
|
1595
|
+
);
|
|
1596
|
+
reasonsZh.push(
|
|
1597
|
+
`${att.unitCount} \u53F0\u5355\u76F8 \u2014 \u65E0\u4E09\u76F8\u6574\u673A\u53EF\u8986\u76D6\u6B64\u7535\u6D41\uFF08\u6709 SHZV/SHZVG \u6574\u673A\u65F6\u4F18\u5148\uFF1B3\xD7 \u66F4\u8D35\uFF09\u3002`
|
|
1598
|
+
);
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1601
|
+
const earth = EARTH_INSULATION[att.um];
|
|
1602
|
+
if (earth) {
|
|
1603
|
+
reasonsEn.push(
|
|
1604
|
+
`Earth insulation (catalogue): PF ${earth.pf} / LI ${earth.bil} kV.`
|
|
1605
|
+
);
|
|
1606
|
+
reasonsZh.push(
|
|
1607
|
+
`\u5BF9\u5730\u7EDD\u7F18\uFF08\u6837\u672C\uFF09\uFF1A\u5DE5\u9891 ${earth.pf} / \u96F7\u7535 ${earth.bil} kV\u3002`
|
|
1608
|
+
);
|
|
1609
|
+
}
|
|
1610
|
+
if (current > input.throughCurrentA + 0.5) {
|
|
1611
|
+
warningsEn.push(`Through-current rounded up to ${current} A.`);
|
|
1612
|
+
warningsZh.push(`\u901A\u8FC7\u7535\u6D41\u5DF2\u4E0A\u9760\u81F3 ${current} A\u3002`);
|
|
1613
|
+
}
|
|
1614
|
+
const coveringUm = nearestUm(input.umKv, s.umKv);
|
|
1615
|
+
const extraUm = coveringUm != null && att.um > coveringUm + 0.1;
|
|
1616
|
+
if (extraUm) {
|
|
1617
|
+
reasonsEn.push(
|
|
1618
|
+
`Next catalogue Um ${att.um} kV (list twin of ${coveringUm} kV).`
|
|
1619
|
+
);
|
|
1620
|
+
reasonsZh.push(
|
|
1621
|
+
`\u76EE\u5F55\u4E0B\u4E00\u6863 Um ${att.um} kV\uFF08${coveringUm} kV \u7684\u4EF7\u76EE\u8868\u914D\u5BF9\uFF09\u3002`
|
|
1622
|
+
);
|
|
1623
|
+
} else if (att.um > input.umKv + 0.1) {
|
|
1624
|
+
warningsEn.push(`Um rounded up to ${att.um} kV.`);
|
|
1625
|
+
warningsZh.push(`Um \u5DF2\u4E0A\u9760\u81F3 ${att.um} kV\u3002`);
|
|
1626
|
+
}
|
|
1627
|
+
warningsEn.push(
|
|
1628
|
+
"Indicative selection from published technical data. Final OS requires engineering confirmation."
|
|
1629
|
+
);
|
|
1630
|
+
warningsZh.push(
|
|
1631
|
+
"\u4F9D\u636E\u516C\u5F00\u6280\u672F\u6837\u672C\u7684\u9009\u578B\u5EFA\u8BAE\u3002\u6700\u7EC8 OS \u987B\u5DE5\u7A0B\u786E\u8BA4\u3002"
|
|
1632
|
+
);
|
|
1633
|
+
const maxStepVoltageV = octc ? null : maxStepVoltageForSeries(s, tap.pitch);
|
|
1634
|
+
const stepCapacityKva = s.stepCapacityByCurrent?.[current] ?? null;
|
|
1635
|
+
let confidence = 0.88;
|
|
1636
|
+
if (att.unitCount > 1) confidence -= 0.08;
|
|
1637
|
+
if (warningsEn.length > 2) confidence -= 0.03;
|
|
1638
|
+
confidence = Math.max(0.45, Math.min(0.96, confidence));
|
|
1639
|
+
results.push({
|
|
1640
|
+
seriesId: s.id,
|
|
1641
|
+
seriesCode: s.code,
|
|
1642
|
+
model: finalModel,
|
|
1643
|
+
modelWithMdu,
|
|
1644
|
+
phases: att.phases,
|
|
1645
|
+
currentA: current,
|
|
1646
|
+
connection: conn,
|
|
1647
|
+
umKv: att.um,
|
|
1648
|
+
selectorSize,
|
|
1649
|
+
umToken,
|
|
1650
|
+
tapCode,
|
|
1651
|
+
regulation: input.regulation,
|
|
1652
|
+
changeOver: octc ? "0" : tap.changeOver,
|
|
1653
|
+
pitch: octc ? 0 : tap.pitch,
|
|
1654
|
+
positions: octc ? input.positions ?? (input.plusMinusSteps != null && input.plusMinusSteps > 0 ? 2 * input.plusMinusSteps + 1 : 5) : tap.positions,
|
|
1655
|
+
mid: octc ? 0 : tap.mid,
|
|
1656
|
+
mdu: mduStr,
|
|
1657
|
+
unitCount: att.unitCount,
|
|
1658
|
+
maxStepVoltageV,
|
|
1659
|
+
stepCapacityKva,
|
|
1660
|
+
earthPfKv: earth?.pf ?? null,
|
|
1661
|
+
earthBilKv: earth?.bil ?? null,
|
|
1662
|
+
reasonsEn,
|
|
1663
|
+
reasonsZh,
|
|
1664
|
+
warningsEn,
|
|
1665
|
+
warningsZh,
|
|
1666
|
+
confidence,
|
|
1667
|
+
adequacyScore: score
|
|
1668
|
+
});
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
let final = results;
|
|
1673
|
+
if (input.preferVacuum) {
|
|
1674
|
+
const vac = results.filter(
|
|
1675
|
+
(r) => SERIES.find((s) => s.id === r.seriesId)?.vacuum
|
|
1676
|
+
);
|
|
1677
|
+
if (vac.length) final = vac;
|
|
1678
|
+
} else if (input.medium === "oil") {
|
|
1679
|
+
const oil = results.filter(
|
|
1680
|
+
(r) => SERIES.find((s) => s.id === r.seriesId)?.vacuum === false
|
|
1681
|
+
);
|
|
1682
|
+
if (oil.length) final = oil;
|
|
1683
|
+
}
|
|
1684
|
+
final.sort((a, b) => {
|
|
1685
|
+
if (a.unitCount !== b.unitCount) return a.unitCount - b.unitCount;
|
|
1686
|
+
if (b.adequacyScore !== a.adequacyScore)
|
|
1687
|
+
return b.adequacyScore - a.adequacyScore;
|
|
1688
|
+
return b.confidence - a.confidence;
|
|
1689
|
+
});
|
|
1690
|
+
if (!final.length) {
|
|
1691
|
+
return {
|
|
1692
|
+
ok: false,
|
|
1693
|
+
results: [],
|
|
1694
|
+
errorsEn: [
|
|
1695
|
+
"Parameters out of catalogue range (current, Um, step voltage, or positions)."
|
|
1696
|
+
],
|
|
1697
|
+
errorsZh: [
|
|
1698
|
+
"\u53C2\u6570\u8D85\u51FA\u76EE\u5F55\u8303\u56F4\uFF08\u7535\u6D41\u3001Um\u3001\u7EA7\u7535\u538B\u6216\u6863\u4F4D\u6570\uFF09\u3002"
|
|
1699
|
+
]
|
|
1700
|
+
};
|
|
1701
|
+
}
|
|
1702
|
+
return {
|
|
1703
|
+
ok: true,
|
|
1704
|
+
results: diversifyResults(final).slice(0, 20),
|
|
1705
|
+
errorsEn: [],
|
|
1706
|
+
errorsZh: []
|
|
1707
|
+
};
|
|
1708
|
+
}
|
|
1709
|
+
function stepUpOf(primary, results) {
|
|
1710
|
+
const same = results.filter(
|
|
1711
|
+
(r) => r.model !== primary.model && r.seriesId === primary.seriesId && r.phases === primary.phases && r.unitCount === primary.unitCount && r.currentA > primary.currentA
|
|
1712
|
+
);
|
|
1713
|
+
if (!same.length) return null;
|
|
1714
|
+
same.sort((a, b) => a.currentA - b.currentA);
|
|
1715
|
+
return same[0];
|
|
1716
|
+
}
|
|
1717
|
+
function pickOtherOptions(results, n = 3) {
|
|
1718
|
+
if (results.length <= 1) return [];
|
|
1719
|
+
const primary = results[0];
|
|
1720
|
+
const stepUp = stepUpOf(primary, results);
|
|
1721
|
+
const preferred = [];
|
|
1722
|
+
const overflow = [];
|
|
1723
|
+
if (stepUp) preferred.push(stepUp);
|
|
1724
|
+
for (const r of results.slice(1)) {
|
|
1725
|
+
if (r.model === primary.model) continue;
|
|
1726
|
+
if (preferred.some((x) => x.model === r.model)) continue;
|
|
1727
|
+
const sameFamilyUm = preferred.some(
|
|
1728
|
+
(x) => x.seriesCode === r.seriesCode && Math.abs(x.umKv - r.umKv) < 0.1
|
|
1729
|
+
);
|
|
1730
|
+
if (sameFamilyUm) overflow.push(r);
|
|
1731
|
+
else preferred.push(r);
|
|
1732
|
+
}
|
|
1733
|
+
return [...preferred, ...overflow].slice(0, n);
|
|
1734
|
+
}
|
|
1735
|
+
|
|
1736
|
+
// lib/cli.ts
|
|
1737
|
+
var CliError = class extends Error {
|
|
1738
|
+
constructor(message) {
|
|
1739
|
+
super(message);
|
|
1740
|
+
this.name = "CliError";
|
|
1741
|
+
}
|
|
1742
|
+
};
|
|
1743
|
+
function num(raw, flag) {
|
|
1744
|
+
const n = Number(String(raw).replace(",", "."));
|
|
1745
|
+
if (!Number.isFinite(n)) throw new CliError(`Invalid number for ${flag}: ${raw}`);
|
|
1746
|
+
return n;
|
|
1747
|
+
}
|
|
1748
|
+
function parseCliArgs(argv) {
|
|
1749
|
+
const out = {
|
|
1750
|
+
conn: "Y",
|
|
1751
|
+
reg: "reversing",
|
|
1752
|
+
octc: false,
|
|
1753
|
+
structure: "auto",
|
|
1754
|
+
mount: "in_tank",
|
|
1755
|
+
vacuum: true,
|
|
1756
|
+
oil: false,
|
|
1757
|
+
phases: "III",
|
|
1758
|
+
json: false,
|
|
1759
|
+
help: false,
|
|
1760
|
+
pm: 8
|
|
1761
|
+
};
|
|
1762
|
+
const take = (i, flag) => {
|
|
1763
|
+
const v = argv[i + 1];
|
|
1764
|
+
if (v == null || v.startsWith("-")) {
|
|
1765
|
+
throw new CliError(`Missing value for ${flag}`);
|
|
1766
|
+
}
|
|
1767
|
+
return [v, i + 1];
|
|
1768
|
+
};
|
|
1769
|
+
for (let i = 0; i < argv.length; i++) {
|
|
1770
|
+
const a = argv[i];
|
|
1771
|
+
if (a === "-h" || a === "--help") {
|
|
1772
|
+
out.help = true;
|
|
1773
|
+
continue;
|
|
1774
|
+
}
|
|
1775
|
+
if (a === "--json") {
|
|
1776
|
+
out.json = true;
|
|
1777
|
+
continue;
|
|
1778
|
+
}
|
|
1779
|
+
if (a === "--octc") {
|
|
1780
|
+
out.octc = true;
|
|
1781
|
+
continue;
|
|
1782
|
+
}
|
|
1783
|
+
if (a === "--oil") {
|
|
1784
|
+
out.oil = true;
|
|
1785
|
+
out.vacuum = false;
|
|
1786
|
+
continue;
|
|
1787
|
+
}
|
|
1788
|
+
if (a === "--vacuum") {
|
|
1789
|
+
out.vacuum = true;
|
|
1790
|
+
out.oil = false;
|
|
1791
|
+
continue;
|
|
1792
|
+
}
|
|
1793
|
+
if (a === "--iu" || a === "--imax") {
|
|
1794
|
+
const [v, n] = take(i, a);
|
|
1795
|
+
out.iu = num(v, a);
|
|
1796
|
+
i = n;
|
|
1797
|
+
continue;
|
|
1798
|
+
}
|
|
1799
|
+
if (a === "--mva") {
|
|
1800
|
+
const [v, n] = take(i, a);
|
|
1801
|
+
out.mva = num(v, a);
|
|
1802
|
+
i = n;
|
|
1803
|
+
continue;
|
|
1804
|
+
}
|
|
1805
|
+
if (a === "--kv") {
|
|
1806
|
+
const [v, n] = take(i, a);
|
|
1807
|
+
out.kv = num(v, a);
|
|
1808
|
+
i = n;
|
|
1809
|
+
continue;
|
|
1810
|
+
}
|
|
1811
|
+
if (a === "--um") {
|
|
1812
|
+
const [v, n] = take(i, a);
|
|
1813
|
+
out.um = num(v, a);
|
|
1814
|
+
i = n;
|
|
1815
|
+
continue;
|
|
1816
|
+
}
|
|
1817
|
+
if (a === "--ust") {
|
|
1818
|
+
const [v, n] = take(i, a);
|
|
1819
|
+
out.ust = num(v, a);
|
|
1820
|
+
i = n;
|
|
1821
|
+
continue;
|
|
1822
|
+
}
|
|
1823
|
+
if (a === "--step-pct") {
|
|
1824
|
+
const [v, n] = take(i, a);
|
|
1825
|
+
out.stepPct = num(v, a);
|
|
1826
|
+
i = n;
|
|
1827
|
+
continue;
|
|
1828
|
+
}
|
|
1829
|
+
if (a === "--k") {
|
|
1830
|
+
const [v, n] = take(i, a);
|
|
1831
|
+
out.k = num(v, a);
|
|
1832
|
+
i = n;
|
|
1833
|
+
continue;
|
|
1834
|
+
}
|
|
1835
|
+
if (a === "--conn" || a === "--connection") {
|
|
1836
|
+
const [v, n] = take(i, a);
|
|
1837
|
+
const c = v.toUpperCase();
|
|
1838
|
+
if (c !== "Y" && c !== "D") throw new CliError(`--conn must be Y or D`);
|
|
1839
|
+
out.conn = c;
|
|
1840
|
+
i = n;
|
|
1841
|
+
continue;
|
|
1842
|
+
}
|
|
1843
|
+
if (a === "--reg") {
|
|
1844
|
+
const [v, n] = take(i, a);
|
|
1845
|
+
const r = v.toUpperCase();
|
|
1846
|
+
if (r === "W" || r === "REVERSING") out.reg = "reversing";
|
|
1847
|
+
else if (r === "G" || r === "COARSE" || r === "COARSE_FINE") {
|
|
1848
|
+
out.reg = "coarse_fine";
|
|
1849
|
+
} else if (r === "0" || r === "LINEAR") out.reg = "linear";
|
|
1850
|
+
else throw new CliError(`--reg must be W, G, or 0`);
|
|
1851
|
+
i = n;
|
|
1852
|
+
continue;
|
|
1853
|
+
}
|
|
1854
|
+
if (a === "--pm") {
|
|
1855
|
+
const [v, n] = take(i, a);
|
|
1856
|
+
out.pm = num(v, a);
|
|
1857
|
+
i = n;
|
|
1858
|
+
continue;
|
|
1859
|
+
}
|
|
1860
|
+
if (a === "--positions" || a === "--pos") {
|
|
1861
|
+
const [v, n] = take(i, a);
|
|
1862
|
+
out.positions = num(v, a);
|
|
1863
|
+
i = n;
|
|
1864
|
+
continue;
|
|
1865
|
+
}
|
|
1866
|
+
if (a === "--structure") {
|
|
1867
|
+
const [v, n] = take(i, a);
|
|
1868
|
+
const s = v.toLowerCase();
|
|
1869
|
+
const map = {
|
|
1870
|
+
auto: "auto",
|
|
1871
|
+
combined: "combined",
|
|
1872
|
+
compound: "compound",
|
|
1873
|
+
cage: "cage",
|
|
1874
|
+
drum: "drum",
|
|
1875
|
+
\u7EC4\u5408\u5F0F: "combined",
|
|
1876
|
+
\u590D\u5408\u5F0F: "compound",
|
|
1877
|
+
\u7B3C\u5F0F: "cage",
|
|
1878
|
+
\u9F13\u5F0F: "drum"
|
|
1879
|
+
};
|
|
1880
|
+
if (!(s in map) && !(v in map)) {
|
|
1881
|
+
throw new CliError(
|
|
1882
|
+
`--structure must be auto|combined|compound|cage|drum`
|
|
1883
|
+
);
|
|
1884
|
+
}
|
|
1885
|
+
out.structure = map[s] ?? map[v];
|
|
1886
|
+
i = n;
|
|
1887
|
+
continue;
|
|
1888
|
+
}
|
|
1889
|
+
if (a === "--series") {
|
|
1890
|
+
const [v, n] = take(i, a);
|
|
1891
|
+
const r = v.toUpperCase();
|
|
1892
|
+
const ok = ["II", "IV", "V", "VI", "VII", "VIII", "AUTO"];
|
|
1893
|
+
if (!ok.includes(r)) {
|
|
1894
|
+
throw new CliError(`--series must be II|IV|V|VI|VII|VIII`);
|
|
1895
|
+
}
|
|
1896
|
+
out.series = r === "AUTO" ? "auto" : r;
|
|
1897
|
+
i = n;
|
|
1898
|
+
continue;
|
|
1899
|
+
}
|
|
1900
|
+
if (a === "--mount") {
|
|
1901
|
+
const [v, n] = take(i, a);
|
|
1902
|
+
const m = v.toLowerCase().replace("_", "-");
|
|
1903
|
+
if (m === "in-tank" || m === "intank") out.mount = "in_tank";
|
|
1904
|
+
else if (m === "on-tank" || m === "ontank") out.mount = "on_tank";
|
|
1905
|
+
else if (m === "dry" || m === "dry-type") out.mount = "dry_type";
|
|
1906
|
+
else throw new CliError(`--mount must be in-tank|on-tank|dry`);
|
|
1907
|
+
i = n;
|
|
1908
|
+
continue;
|
|
1909
|
+
}
|
|
1910
|
+
if (a === "--contact") {
|
|
1911
|
+
const [v, n] = take(i, a);
|
|
1912
|
+
out.contact = v;
|
|
1913
|
+
i = n;
|
|
1914
|
+
continue;
|
|
1915
|
+
}
|
|
1916
|
+
if (a === "--phases") {
|
|
1917
|
+
const [v, n] = take(i, a);
|
|
1918
|
+
const p = v.toUpperCase();
|
|
1919
|
+
if (p !== "I" && p !== "II" && p !== "III") {
|
|
1920
|
+
throw new CliError(`--phases must be I, II, or III`);
|
|
1921
|
+
}
|
|
1922
|
+
out.phases = p;
|
|
1923
|
+
i = n;
|
|
1924
|
+
continue;
|
|
1925
|
+
}
|
|
1926
|
+
if (a === "--duty") {
|
|
1927
|
+
const [v, n] = take(i, a);
|
|
1928
|
+
const d = v.toLowerCase();
|
|
1929
|
+
if (d === "octc" || d === "off" || d === "detc") out.octc = true;
|
|
1930
|
+
else if (d === "oltc" || d === "on") out.octc = false;
|
|
1931
|
+
else throw new CliError(`--duty must be oltc or octc`);
|
|
1932
|
+
i = n;
|
|
1933
|
+
continue;
|
|
1934
|
+
}
|
|
1935
|
+
throw new CliError(`Unknown flag: ${a}`);
|
|
1936
|
+
}
|
|
1937
|
+
return out;
|
|
1938
|
+
}
|
|
1939
|
+
var CLI_HELP = `oltc \u2014 Huaming OLTC/OCTC type selection (package: oltc-selector, no prices)
|
|
1940
|
+
|
|
1941
|
+
Usage:
|
|
1942
|
+
oltc --iu 400 --um 72.5 --conn Y --reg W --pm 8
|
|
1943
|
+
oltc --mva 25 --kv 110 --conn Y --reg W --pm 8
|
|
1944
|
+
oltc --octc --iu 800 --um 72.5 --conn D --series II --contact 6x5
|
|
1945
|
+
oltc --iu 600 --um 72.5 --conn Y --reg W --pm 8 --structure combined
|
|
1946
|
+
|
|
1947
|
+
Flags:
|
|
1948
|
+
--iu, --imax A Max through-current (Imax). No safety factor.
|
|
1949
|
+
--mva MVA --kv kV Capacity path: Imax from rated I, minus steps, --step-pct, --k
|
|
1950
|
+
--um kV Equipment Um (OLTC). With --mva/--kv, derived if omitted.
|
|
1951
|
+
--ust V Step voltage. With --mva/--kv/--step-pct, derived if omitted.
|
|
1952
|
+
--step-pct % Step as percent (1.25 means 1.25%). Capacity path only.
|
|
1953
|
+
--k n Safety factor on capacity path only (default 1.2).
|
|
1954
|
+
--conn Y|D Switch connection (star / delta). Default Y.
|
|
1955
|
+
--reg W|G|0 Reversing / coarse-fine / linear. Default W.
|
|
1956
|
+
--pm N \xB1 steps. Default 8.
|
|
1957
|
+
--pos, --positions Linear / OCTC positions.
|
|
1958
|
+
--octc Off-circuit (\u65E0\u8F7D). Default on-load.
|
|
1959
|
+
--structure auto|combined|compound|cage|drum (\u7EC4\u5408\u5F0F/\u590D\u5408\u5F0F/\u7B3C\u5F0F/\u9F13\u5F0F)
|
|
1960
|
+
--series II|IV|V|VI|VII|VIII OCTC wiring. Default auto (Y\u2192IV, D\u2192II).
|
|
1961
|
+
--mount in-tank|on-tank|dry. Default in-tank.
|
|
1962
|
+
--oil / --vacuum Switching medium. Default vacuum (on-load).
|
|
1963
|
+
--contact OCTC contact e.g. 6x5.
|
|
1964
|
+
--phases I|II|III. Default III.
|
|
1965
|
+
--json Machine-readable result (still no prices).
|
|
1966
|
+
-h, --help This text.
|
|
1967
|
+
|
|
1968
|
+
Defaults match the web first paint: on-load, in-tank vacuum, structure auto,
|
|
1969
|
+
\xB18 mid-3 reversing. Omitting --octc and --structure auto is minimum-adequate.
|
|
1970
|
+
`;
|
|
1971
|
+
function cliToSelectInput(args) {
|
|
1972
|
+
const dutyKind = args.octc ? "octc" : "oltc";
|
|
1973
|
+
const oil = args.octc || args.oil || !args.vacuum;
|
|
1974
|
+
const medium = args.mount === "dry_type" ? "dry" : oil ? "oil" : "oil_vacuum";
|
|
1975
|
+
let iu = args.iu;
|
|
1976
|
+
let um = args.um;
|
|
1977
|
+
let ust = args.ust ?? 0;
|
|
1978
|
+
if (args.mva != null) {
|
|
1979
|
+
if (!(args.kv != null && args.kv > 0)) {
|
|
1980
|
+
throw new CliError("--mva requires --kv (tap-side rated voltage)");
|
|
1981
|
+
}
|
|
1982
|
+
const rated = throughCurrentFromRated(args.mva, args.kv, args.conn);
|
|
1983
|
+
if (!Number.isFinite(rated) || rated <= 0) {
|
|
1984
|
+
throw new CliError("Could not compute rated current from --mva/--kv");
|
|
1985
|
+
}
|
|
1986
|
+
const pct = args.stepPct != null && args.stepPct > 0 ? args.stepPct / 100 : 0.0125;
|
|
1987
|
+
const minus = args.pm != null && args.pm > 0 ? args.pm : 8;
|
|
1988
|
+
const iMax = maxThroughCurrent(rated, minus, pct);
|
|
1989
|
+
const k = args.k != null && args.k > 0 ? args.k : 1.2;
|
|
1990
|
+
iu = iMax * k;
|
|
1991
|
+
if (um == null || !(um > 0)) {
|
|
1992
|
+
um = oltcUmFromRatedKv(args.kv, args.conn);
|
|
1993
|
+
}
|
|
1994
|
+
if (!(ust > 0)) {
|
|
1995
|
+
const v = stepVoltageFromPercent(args.kv, pct, args.conn);
|
|
1996
|
+
if (Number.isFinite(v) && v > 0) ust = v;
|
|
1997
|
+
}
|
|
1998
|
+
}
|
|
1999
|
+
if (iu == null || !(iu > 0)) {
|
|
2000
|
+
throw new CliError("Need --iu (Imax) or --mva plus --kv");
|
|
2001
|
+
}
|
|
2002
|
+
if (um == null || !(um > 0)) {
|
|
2003
|
+
throw new CliError("Need --um, or --mva/--kv so Um can be derived");
|
|
2004
|
+
}
|
|
2005
|
+
const input = {
|
|
2006
|
+
mounting: args.mount,
|
|
2007
|
+
medium,
|
|
2008
|
+
preferVacuum: !oil && dutyKind === "oltc",
|
|
2009
|
+
dutyKind,
|
|
2010
|
+
phases: args.phases,
|
|
2011
|
+
connection: args.conn,
|
|
2012
|
+
throughCurrentA: iu,
|
|
2013
|
+
umKv: um,
|
|
2014
|
+
stepVoltageV: ust,
|
|
2015
|
+
regulation: args.octc ? "linear" : args.reg,
|
|
2016
|
+
selectorSize: "auto",
|
|
2017
|
+
preferStructure: args.structure,
|
|
2018
|
+
mdu: "none"
|
|
2019
|
+
};
|
|
2020
|
+
if (args.octc) {
|
|
2021
|
+
input.octcSeries = args.series ?? "auto";
|
|
2022
|
+
if (args.contact) input.octcContact = args.contact;
|
|
2023
|
+
if (args.positions != null) input.positions = args.positions;
|
|
2024
|
+
else if (args.pm != null && args.pm > 0) {
|
|
2025
|
+
input.positions = Math.round(2 * args.pm + 1);
|
|
2026
|
+
}
|
|
2027
|
+
} else if (args.reg === "linear") {
|
|
2028
|
+
if (args.positions != null) input.positions = args.positions;
|
|
2029
|
+
} else {
|
|
2030
|
+
if (args.pm != null && args.pm > 0) {
|
|
2031
|
+
input.plusMinusSteps = args.pm;
|
|
2032
|
+
input.midPositions = 3;
|
|
2033
|
+
}
|
|
2034
|
+
if (args.positions != null) input.positions = args.positions;
|
|
2035
|
+
}
|
|
2036
|
+
return input;
|
|
2037
|
+
}
|
|
2038
|
+
function formatCliText(input) {
|
|
2039
|
+
const out = selectOltc(input);
|
|
2040
|
+
if (!out.ok || !out.results.length) {
|
|
2041
|
+
const err = [...out.errorsZh, ...out.errorsEn].join("\n") || "No type found.";
|
|
2042
|
+
throw new CliError(err);
|
|
2043
|
+
}
|
|
2044
|
+
const primary = out.results[0];
|
|
2045
|
+
if (!commercialTypeExists(primary.model)) {
|
|
2046
|
+
throw new CliError(`Engine emitted a non-catalogue type: ${primary.model}`);
|
|
2047
|
+
}
|
|
2048
|
+
const alts = pickOtherOptions(out.results, 3);
|
|
2049
|
+
const lines = [
|
|
2050
|
+
primary.model,
|
|
2051
|
+
primary.reasonsZh[0] || primary.reasonsEn[0] || "\u6700\u4F4E\u6EE1\u8DB3"
|
|
2052
|
+
];
|
|
2053
|
+
if (alts.length) {
|
|
2054
|
+
lines.push("");
|
|
2055
|
+
lines.push("\u5176\u4ED6");
|
|
2056
|
+
for (const a of alts) lines.push(a.model);
|
|
2057
|
+
}
|
|
2058
|
+
return lines.join("\n") + "\n";
|
|
2059
|
+
}
|
|
2060
|
+
function formatCliJson(input) {
|
|
2061
|
+
const out = selectOltc(input);
|
|
2062
|
+
const primary = out.results[0] ?? null;
|
|
2063
|
+
const alts = pickOtherOptions(out.results, 3).map((r) => r.model);
|
|
2064
|
+
const payload = {
|
|
2065
|
+
ok: out.ok,
|
|
2066
|
+
model: primary?.model ?? null,
|
|
2067
|
+
why: primary?.reasonsZh[0] ?? primary?.reasonsEn[0] ?? null,
|
|
2068
|
+
alts,
|
|
2069
|
+
errors: out.errorsZh.length ? out.errorsZh : out.errorsEn
|
|
2070
|
+
};
|
|
2071
|
+
return JSON.stringify(payload, null, 2) + "\n";
|
|
2072
|
+
}
|
|
2073
|
+
function runCli(argv, io = {
|
|
2074
|
+
stdout: (s) => process.stdout.write(s),
|
|
2075
|
+
stderr: (s) => process.stderr.write(s)
|
|
2076
|
+
}) {
|
|
2077
|
+
try {
|
|
2078
|
+
const args = parseCliArgs(argv);
|
|
2079
|
+
if (args.help) {
|
|
2080
|
+
io.stdout(CLI_HELP);
|
|
2081
|
+
return 0;
|
|
2082
|
+
}
|
|
2083
|
+
const input = cliToSelectInput(args);
|
|
2084
|
+
io.stdout(args.json ? formatCliJson(input) : formatCliText(input));
|
|
2085
|
+
return 0;
|
|
2086
|
+
} catch (err) {
|
|
2087
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
2088
|
+
io.stderr(msg.endsWith("\n") ? msg : msg + "\n");
|
|
2089
|
+
return 1;
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2093
|
+
// scripts/oltc.ts
|
|
2094
|
+
var code = runCli(process.argv.slice(2));
|
|
2095
|
+
process.exit(code);
|