Pflicht-Präsenz von UNH und UNT pro Nachricht validieren
This commit is contained in:
@@ -24,6 +24,8 @@ import de.gecheckt.asv.validation.model.ValidationSeverity;
|
||||
* 6. Nachrichtenpositionen innerhalb einer Eingabedatei müssen eindeutig und positiv sein
|
||||
* 7. UNH- und UNT-Referenznummern müssen innerhalb einer Nachricht übereinstimmen
|
||||
* 8. Die im UNT angegebene Segmentanzahl muss der tatsächlichen Anzahl der Segmente entsprechen
|
||||
* 9. Eine Nachricht muss mindestens ein UNH-Segment enthalten
|
||||
* 10. Eine Nachricht muss mindestens ein UNT-Segment enthalten
|
||||
*/
|
||||
public class DefaultStructureValidator implements StructureValidator {
|
||||
|
||||
@@ -86,11 +88,79 @@ public class DefaultStructureValidator implements StructureValidator {
|
||||
// Validiere Segmente in dieser Nachricht
|
||||
validateSegments(message.segments(), messagePosition, errors);
|
||||
|
||||
// Prüfe zuerst, ob grundlegende Strukturfehler vorliegen (keine Segmente)
|
||||
// In diesem Fall können wir keine UNH/UNT-Prüfung durchführen
|
||||
if (message.segments().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Regel 9: Nachricht muss mindestens ein UNH-Segment enthalten
|
||||
validateUnhPresence(message, errors);
|
||||
|
||||
// Regel 10: Nachricht muss mindestens ein UNT-Segment enthalten
|
||||
validateUntPresence(message, errors);
|
||||
|
||||
// Regel 7: UNH- und UNT-Referenznummern müssen übereinstimmen
|
||||
validateUnhUntReferenceNumbers(message, errors);
|
||||
// Nur prüfen, wenn beide Segmente vorhanden sind
|
||||
if (message.getFirstSegment("UNH").isPresent() && message.getFirstSegment("UNT").isPresent()) {
|
||||
validateUnhUntReferenceNumbers(message, errors);
|
||||
}
|
||||
|
||||
// Regel 8: UNT-Segmentanzahl muss mit tatsächlicher Segmentanzahl übereinstimmen
|
||||
validateUntSegmentCount(message, errors);
|
||||
// Nur prüfen, wenn UNT-Segment vorhanden ist
|
||||
if (message.getFirstSegment("UNT").isPresent()) {
|
||||
validateUntSegmentCount(message, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validiert, dass mindestens ein UNH-Segment in der Nachricht vorhanden ist.
|
||||
*
|
||||
* @param message die zu validierende Nachricht
|
||||
* @param errors die Liste zum Hinzufügen von Validierungsfehlern
|
||||
*/
|
||||
private void validateUnhPresence(Message message, List<ValidationError> errors) {
|
||||
var unhSegment = message.getFirstSegment("UNH");
|
||||
|
||||
// Wenn kein UNH-Segment vorhanden ist, Fehler hinzufügen
|
||||
if (unhSegment.isEmpty()) {
|
||||
errors.add(createError(
|
||||
"STRUCTURE_009",
|
||||
"Nachricht muss mindestens ein UNH-Segment enthalten",
|
||||
ValidationSeverity.ERROR,
|
||||
"",
|
||||
message.messagePosition(),
|
||||
"",
|
||||
0,
|
||||
"",
|
||||
"UNH-Segment erforderlich"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validiert, dass mindestens ein UNT-Segment in der Nachricht vorhanden ist.
|
||||
*
|
||||
* @param message die zu validierende Nachricht
|
||||
* @param errors die Liste zum Hinzufügen von Validierungsfehlern
|
||||
*/
|
||||
private void validateUntPresence(Message message, List<ValidationError> errors) {
|
||||
var untSegment = message.getFirstSegment("UNT");
|
||||
|
||||
// Wenn kein UNT-Segment vorhanden ist, Fehler hinzufügen
|
||||
if (untSegment.isEmpty()) {
|
||||
errors.add(createError(
|
||||
"STRUCTURE_010",
|
||||
"Nachricht muss mindestens ein UNT-Segment enthalten",
|
||||
ValidationSeverity.ERROR,
|
||||
"",
|
||||
message.messagePosition(),
|
||||
"",
|
||||
0,
|
||||
"",
|
||||
"UNT-Segment erforderlich"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,7 +313,9 @@ public class DefaultStructureValidator implements StructureValidator {
|
||||
}
|
||||
|
||||
// Validate fields in this segment
|
||||
validateFields(segment.fields(), segmentName, segmentPosition, errors);
|
||||
if (!segment.fields().isEmpty()) {
|
||||
validateFields(segment.fields(), segmentName, segmentPosition, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,6 +328,10 @@ public class DefaultStructureValidator implements StructureValidator {
|
||||
* @param errors die Liste zum Hinzufügen von Validierungsfehlern
|
||||
*/
|
||||
private void validateFields(List<Field> fields, String segmentName, int segmentPosition, List<ValidationError> errors) {
|
||||
if (fields.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var fieldPositions = new HashSet<Integer>();
|
||||
|
||||
for (var field : fields) {
|
||||
|
||||
Reference in New Issue
Block a user