UNT-Segmentanzahl gegen tatsächliche Nachrichtenstruktur validieren
This commit is contained in:
@@ -23,6 +23,7 @@ import de.gecheckt.asv.validation.model.ValidationSeverity;
|
||||
* 5. Segmentpositionen innerhalb einer Nachricht müssen eindeutig und positiv sein
|
||||
* 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
|
||||
*/
|
||||
public class DefaultStructureValidator implements StructureValidator {
|
||||
|
||||
@@ -87,6 +88,52 @@ public class DefaultStructureValidator implements StructureValidator {
|
||||
|
||||
// Regel 7: UNH- und UNT-Referenznummern müssen übereinstimmen
|
||||
validateUnhUntReferenceNumbers(message, errors);
|
||||
|
||||
// Regel 8: UNT-Segmentanzahl muss mit tatsächlicher Segmentanzahl übereinstimmen
|
||||
validateUntSegmentCount(message, errors);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validiert, dass die im UNT angegebene Segmentanzahl der tatsächlichen Anzahl entspricht.
|
||||
*
|
||||
* @param message die zu validierende Nachricht
|
||||
* @param errors die Liste zum Hinzufügen von Validierungsfehlern
|
||||
*/
|
||||
private void validateUntSegmentCount(Message message, List<ValidationError> errors) {
|
||||
var untSegment = message.getFirstSegment("UNT");
|
||||
|
||||
// Nur prüfen, wenn UNT-Segment vorhanden ist
|
||||
if (untSegment.isPresent()) {
|
||||
var fields = untSegment.get().fields();
|
||||
|
||||
// Prüfen, ob das erste Feld (Segmentanzahl) vorhanden ist
|
||||
if (!fields.isEmpty()) {
|
||||
var countField = fields.get(0); // 0074 - Anzahl der Segmente
|
||||
var countValue = countField.rawValue();
|
||||
|
||||
// Nur prüfen, wenn der Wert numerisch interpretiert werden kann
|
||||
try {
|
||||
int declaredCount = Integer.parseInt(countValue);
|
||||
int actualCount = message.segments().size();
|
||||
|
||||
if (declaredCount != actualCount) {
|
||||
errors.add(createError(
|
||||
"STRUCTURE_008",
|
||||
"Die im UNT angegebene Segmentanzahl entspricht nicht der tatsächlichen Anzahl",
|
||||
ValidationSeverity.ERROR,
|
||||
"UNT",
|
||||
message.messagePosition(),
|
||||
"0074",
|
||||
1,
|
||||
declaredCount + " != " + actualCount,
|
||||
"Segmentanzahl in UNT muss mit tatsächlicher Anzahl übereinstimmen"
|
||||
));
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// Nicht-numerischer Wert - keine zusätzliche Fehlermeldung gemäß Anforderung
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user