Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ public static ContingencyResultDTO toDto(ContingencyEntity contingency) {
}

// each contingencyResultDto will return multiple line (one for each limitViolation)
public List<List<String>> toCsvRows(Map<String, String> translations) {
public List<List<String>> toCsvRows(Map<String, String> translations, String language) {
return this.getSubjectLimitViolations().stream().map(lm -> {
List<String> csvRow = new ArrayList<>();
csvRow.add(this.getContingency().getContingencyId());
csvRow.add(CsvExportUtils.translate(this.getContingency().getStatus(), translations));
csvRow.add(lm.getSubjectId());

csvRow.addAll(lm.getLimitViolation().toCsvRow(translations));
csvRow.addAll(lm.getLimitViolation().toCsvRow(translations, language));

return csvRow;
}).toList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
@Builder
public record CsvTranslationDTO(
List<String> headers,
Map<String, String> enumValueTranslations
Map<String, String> enumValueTranslations,
String language
) { }
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import org.gridsuite.securityanalysis.server.entities.AbstractLimitViolationEntity;
import org.gridsuite.securityanalysis.server.util.CsvExportUtils;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;

@AllArgsConstructor
Expand Down Expand Up @@ -42,14 +44,18 @@ public static LimitViolationDTO toDto(AbstractLimitViolationEntity limitViolatio
.build();
}

public List<String> toCsvRow(Map<String, String> translations) {
private static String convertDoubleToLocale(Double value, String language) {
return NumberFormat.getInstance(language != null && language.equals("fr") ? Locale.FRENCH : Locale.US).format(value);
}

public List<String> toCsvRow(Map<String, String> translations, String language) {
List<String> csvRow = new ArrayList<>();
csvRow.add(this.getLocationId());
csvRow.add(this.getLimitType() != null ? CsvExportUtils.translate(this.getLimitType().name(), translations) : "");
csvRow.add(CsvExportUtils.replaceNullWithEmptyString(CsvExportUtils.translate(this.getLimitName(), translations)));
csvRow.add(Double.toString(this.getLimit()));
csvRow.add(Double.toString(this.getValue()));
csvRow.add(CsvExportUtils.replaceNullWithEmptyString(this.getLoading()));
csvRow.add(convertDoubleToLocale(this.getLimit(), language));
csvRow.add(convertDoubleToLocale(this.getValue(), language));
csvRow.add(this.getLoading() == null ? "" : convertDoubleToLocale(this.getLoading(), language));
csvRow.add(this.getAcceptableDuration() == Integer.MAX_VALUE ? null : Integer.toString(this.getAcceptableDuration()));
csvRow.add(this.getSide() != null ? CsvExportUtils.translate(this.getSide().name(), translations) : "");
return csvRow;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ public static PreContingencyLimitViolationResultDTO toDto(PreContingencyLimitVio
.build();
}

public List<String> toCsvRow(Map<String, String> translations) {
public List<String> toCsvRow(Map<String, String> translations, String language) {
List<String> csvRow = List.of();

if (this.getLimitViolation() != null) {
return Stream.concat(csvRow.stream(), this.getLimitViolation().toCsvRow(translations).stream()).toList();
return Stream.concat(csvRow.stream(), this.getLimitViolation().toCsvRow(translations, language).stream()).toList();
}

return csvRow;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ public static SubjectLimitViolationResultDTO toDto(SubjectLimitViolationEntity s
}

// each SubjectLimitViolationResultDTO will return multiple line (one for each contingency)
public List<List<String>> toCsvRows(Map<String, String> translations) {
public List<List<String>> toCsvRows(Map<String, String> translations, String language) {
return this.getContingencies().stream().map(contingency -> {
List<String> csvRow = new ArrayList<>();
csvRow.add(this.getSubjectId());
csvRow.add(contingency.getContingency().getContingencyId());
csvRow.add(CsvExportUtils.translate(contingency.getContingency().getStatus(), translations));

csvRow.addAll(contingency.getLimitViolation().toCsvRow(translations));
csvRow.addAll(contingency.getLimitViolation().toCsvRow(translations, language));
return csvRow;
}).toList();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public List<PreContingencyLimitViolationResultDTO> findNResult(UUID resultUuid,
public byte[] findNResultZippedCsv(UUID resultUuid, CsvTranslationDTO csvTranslations) {
List<PreContingencyLimitViolationResultDTO> result = self.findNResult(resultUuid, null, null, List.of(), null, Sort.by(Sort.Direction.ASC, AbstractLimitViolationEntity.Fields.subjectLimitViolation + SpecificationUtils.FIELD_SEPARATOR + SubjectLimitViolationEntity.Fields.subjectId));

return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), result.stream().map(r -> r.toCsvRow(csvTranslations.enumValueTranslations())).toList());
return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), csvTranslations.language(), result.stream().map(r -> r.toCsvRow(csvTranslations.enumValueTranslations(), csvTranslations.language())).toList());
}

@Transactional(readOnly = true)
Expand Down Expand Up @@ -177,7 +177,7 @@ public List<ContingencyResultDTO> findNmKContingenciesResult(UUID resultUuid) {
public byte[] findNmKContingenciesResultZippedCsv(UUID resultUuid, CsvTranslationDTO csvTranslations) {
List<ContingencyResultDTO> result = self.findNmKContingenciesResult(resultUuid);

return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), result.stream().map(r -> r.toCsvRows(csvTranslations.enumValueTranslations())).flatMap(List::stream).toList());
return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), csvTranslations.language(), result.stream().map(r -> r.toCsvRows(csvTranslations.enumValueTranslations(), csvTranslations.language())).flatMap(List::stream).toList());
}

@Transactional(readOnly = true)
Expand Down Expand Up @@ -208,7 +208,7 @@ public List<SubjectLimitViolationResultDTO> findNmKConstraintsResult(UUID result
public byte[] findNmKConstraintsResultZippedCsv(UUID resultUuid, CsvTranslationDTO csvTranslations) {
List<SubjectLimitViolationResultDTO> result = self.findNmKConstraintsResult(resultUuid);

return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), result.stream().map(r -> r.toCsvRows(csvTranslations.enumValueTranslations())).flatMap(List::stream).toList());
return CsvExportUtils.csvRowsToZippedCsv(csvTranslations.headers(), csvTranslations.language(), result.stream().map(r -> r.toCsvRows(csvTranslations.enumValueTranslations(), csvTranslations.language())).flatMap(List::stream).toList());
}

private void assertNmKContingenciesSortAllowed(Sort sort) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
import java.util.zip.ZipOutputStream;

public final class CsvExportUtils {
public static final char CSV_DELIMITER = ',';
public static final char CSV_DELIMITER_FR = ';';
public static final char CSV_DELIMITER_EN = ',';
public static final char CSV_QUOTE_ESCAPE = '"';

public static final String CSV_RESULT_FILE_NAME = "result.csv";
Expand All @@ -24,7 +25,7 @@ private CsvExportUtils() {
throw new UnsupportedOperationException("CsvExportUtils Utility class and cannot be instantiated");
}

public static byte[] csvRowsToZippedCsv(List<String> headers, List<List<String>> csvRows) {
public static byte[] csvRowsToZippedCsv(List<String> headers, String language, List<List<String>> csvRows) {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
zipOutputStream.putNextEntry(new ZipEntry(CSV_RESULT_FILE_NAME));
Expand All @@ -33,7 +34,7 @@ public static byte[] csvRowsToZippedCsv(List<String> headers, List<List<String>>
writeUTF8Bom(zipOutputStream);

CsvWriterSettings settings = new CsvWriterSettings();
setFormat(settings.getFormat());
setFormat(settings.getFormat(), language);
CsvWriter csvWriter = new CsvWriter(zipOutputStream, StandardCharsets.UTF_8, settings);
csvWriter.writeRow(headers);
csvWriter.writeRows(csvRows);
Expand All @@ -51,9 +52,9 @@ private static void writeUTF8Bom(OutputStream outputStream) throws IOException {
outputStream.write(0xbf);
}

private static void setFormat(CsvFormat format) {
private static void setFormat(CsvFormat format, String language) {
format.setLineSeparator(System.lineSeparator());
format.setDelimiter(CSV_DELIMITER);
format.setDelimiter(language != null && language.equals("fr") ? CSV_DELIMITER_FR : CSV_DELIMITER_EN);
format.setQuoteEscape(CSV_QUOTE_ESCAPE);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,7 @@ private void checkAllZippedCsvResults() throws Exception {
CsvTranslationDTO.builder()
.headers(List.of("Equipment", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side"))
.enumValueTranslations(ENUM_TRANSLATIONS_EN)
.language("en")
.build());
/*
* SELECT
Expand All @@ -875,13 +876,15 @@ private void checkAllZippedCsvResults() throws Exception {
CsvTranslationDTO.builder()
.headers(List.of("Ouvrage", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Valeur calculée (A ou kV)", "Charge (%)", "Surcharge", "Côté"))
.enumValueTranslations(ENUM_TRANSLATIONS_FR)
.language("fr")
.build());

SQLStatementCountValidator.reset();
checkZippedCsvResult("nmk-contingencies-result", "/results/nmk-contingencies-result-en.csv",
CsvTranslationDTO.builder()
.headers(List.of("Contingency ID", "Status", "Constraint", "Bus", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side"))
.enumValueTranslations(ENUM_TRANSLATIONS_EN)
.language("en")
.build());
/*
* SELECT
Expand All @@ -897,6 +900,7 @@ private void checkAllZippedCsvResults() throws Exception {
CsvTranslationDTO.builder()
.headers(List.of("Id aléa", "Statut", "Contrainte", "Noeud électrique", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Charge (%)", "Surcharge", "Côté"))
.enumValueTranslations(ENUM_TRANSLATIONS_FR)
.language("fr")
.build());
assertRequestsCount(4, 0, 0, 0);

Expand All @@ -905,6 +909,7 @@ private void checkAllZippedCsvResults() throws Exception {
CsvTranslationDTO.builder()
.headers(List.of("Constraint", "Contingency ID", "Status", "Bus", "Violation type", "Limit name", "Limit value (A or kV)", "Calculated value (A or kV)", "Load (%)", "Overload", "Side"))
.enumValueTranslations(ENUM_TRANSLATIONS_EN)
.language("en")
.build());
/*
* SELECT
Expand All @@ -920,6 +925,7 @@ private void checkAllZippedCsvResults() throws Exception {
CsvTranslationDTO.builder()
.headers(List.of("Contrainte", "ID aléa", "Statut", "Noeud électrique", "Type de contrainte", "Nom du seuil", "Valeur du seuil (A ou kV)", "Valeur calculée (A ou kV)", "Charge (%)", "Surcharge", "Côté"))
.enumValueTranslations(ENUM_TRANSLATIONS_FR)
.language("fr")
.build());
assertRequestsCount(4, 0, 0, 0);
}
Expand Down
6 changes: 3 additions & 3 deletions src/test/resources/results/n-result-en.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Equipment,Violation type,Limit name,Limit value (A or kV),Calculated value (A or kV),Load (%),Overload,Side
,Current,l3_name,10.0,11.0,110.0,,Side 1
,Current,l6_name,10.0,11.0,110.0,1200,Side 1
"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
,Current,l3_name,10,11,110,,Side 1
,Current,l6_name,10,11,110,1200,Side 1
"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
8 changes: 4 additions & 4 deletions src/test/resources/results/n-result-fr.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Ouvrage,Type de contrainte,Nom du seuil,Valeur du seuil (A ou kV),Valeur calculée (A ou kV),Charge (%),Surcharge,Côté
,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
,Intensité,l6_name,10.0,11.0,110.0,1200,Côté 1
"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
Ouvrage;Type de contrainte;Nom du seuil;Valeur du seuil (A ou kV);Valeur calculée (A ou kV);Charge (%);Surcharge;Côté
;Intensité;l3_name;10;11;110;;Côté 1
;Intensité;l6_name;10;11;110;1200;Côté 1
vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
52 changes: 26 additions & 26 deletions src/test/resources/results/nmk-constraints-result-en.csv
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
Constraint,Contingency ID,Status,Bus,Violation type,Limit name,Limit value (A or kV),Calculated value (A or kV),Load (%),Overload,Side
l3,l1,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l2,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l3,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l4,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l6,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l7,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l8,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,l9,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,la,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
l3,lb,Converged,,Current,l3_name,10.0,11.0,110.0,,Side 1
vl1,l1,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l2,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l3,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l4,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l6,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l7,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l8,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,l9,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,la,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
vl1,lb,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400.0,410.0,,0,
l6,f1,Failed,,Current,l6_name,10.0,11.0,110.0,1200,Side 1
l6,f2,Failed,,Current,l6_name,10.0,11.0,110.0,1200,Side 1
l6,f3,Failed,,Current,l6_name,10.0,11.0,110.0,1200,Side 1
vl7,f1,Failed,vl7,High voltage,vl7_name,400.0,410.0,,0,
vl7,f2,Failed,vl7,High voltage,vl7_name,400.0,410.0,,0,
vl7,f3,Failed,vl7,High voltage,vl7_name,400.0,410.0,,0,
l3,l1,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l2,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l3,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l4,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l6,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l7,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l8,Converged,,Current,l3_name,10,11,110,,Side 1
l3,l9,Converged,,Current,l3_name,10,11,110,,Side 1
l3,la,Converged,,Current,l3_name,10,11,110,,Side 1
l3,lb,Converged,,Current,l3_name,10,11,110,,Side 1
vl1,l1,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l2,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l3,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l4,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l6,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l7,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l8,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,l9,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,la,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
vl1,lb,Converged,"vl1 (VLGEN_0, VLLOAD_0)",High voltage,IST,400,410,,0,
l6,f1,Failed,,Current,l6_name,10,11,110,1200,Side 1
l6,f2,Failed,,Current,l6_name,10,11,110,1200,Side 1
l6,f3,Failed,,Current,l6_name,10,11,110,1200,Side 1
vl7,f1,Failed,vl7,High voltage,vl7_name,400,410,,0,
vl7,f2,Failed,vl7,High voltage,vl7_name,400,410,,0,
vl7,f3,Failed,vl7,High voltage,vl7_name,400,410,,0,
54 changes: 27 additions & 27 deletions src/test/resources/results/nmk-constraints-result-fr.csv
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
Contrainte,ID aléa,Statut,Noeud électrique,Type de contrainte,Nom du seuil,Valeur du seuil (A ou kV),Valeur calculée (A ou kV),Charge (%),Surcharge,Côté
l3,l1,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l2,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l3,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l4,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l6,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l7,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l8,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,l9,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,la,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
l3,lb,Convergence,,Intensité,l3_name,10.0,11.0,110.0,,Côté 1
vl1,l1,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l2,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l3,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l4,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l6,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l7,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l8,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,l9,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,la,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
vl1,lb,Convergence,"vl1 (VLGEN_0, VLLOAD_0)",Tension haute,IST,400.0,410.0,,0,
l6,f1,Echec,,Intensité,l6_name,10.0,11.0,110.0,1200,Côté 1
l6,f2,Echec,,Intensité,l6_name,10.0,11.0,110.0,1200,Côté 1
l6,f3,Echec,,Intensité,l6_name,10.0,11.0,110.0,1200,Côté 1
vl7,f1,Echec,vl7,Tension haute,vl7_name,400.0,410.0,,0,
vl7,f2,Echec,vl7,Tension haute,vl7_name,400.0,410.0,,0,
vl7,f3,Echec,vl7,Tension haute,vl7_name,400.0,410.0,,0,
Contrainte;ID aléa;Statut;Noeud électrique;Type de contrainte;Nom du seuil;Valeur du seuil (A ou kV);Valeur calculée (A ou kV);Charge (%);Surcharge;Côté
l3;l1;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l2;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l3;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l4;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l6;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l7;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l8;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;l9;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;la;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
l3;lb;Convergence;;Intensité;l3_name;10;11;110;;Côté 1
vl1;l1;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l2;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l3;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l4;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l6;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l7;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l8;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;l9;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;la;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
vl1;lb;Convergence;vl1 (VLGEN_0, VLLOAD_0);Tension haute;IST;400;410;;0;
l6;f1;Echec;;Intensité;l6_name;10;11;110;1200;Côté 1
l6;f2;Echec;;Intensité;l6_name;10;11;110;1200;Côté 1
l6;f3;Echec;;Intensité;l6_name;10;11;110;1200;Côté 1
vl7;f1;Echec;vl7;Tension haute;vl7_name;400;410;;0;
vl7;f2;Echec;vl7;Tension haute;vl7_name;400;410;;0;
vl7;f3;Echec;vl7;Tension haute;vl7_name;400;410;;0;
Loading