Rechnungskennzeichen in REA für ASVREC fachlich einschränken

This commit is contained in:
2026-03-26 21:14:41 +01:00
parent b7776a564a
commit a804a19639
3 changed files with 117 additions and 4 deletions

View File

@@ -676,8 +676,20 @@ public class DefaultStructureValidator implements StructureValidator {
"LEA-Segment verboten bei Rechnungskennzeichen '1'"
));
}
} else {
// Ungültiges Rechnungskennzeichen: nur "0" oder "1" sind erlaubt
errors.add(createError(
"STRUCTURE_026",
"Rechnungskennzeichen in REA muss '0' oder '1' sein",
ValidationSeverity.ERROR,
"REA",
message.messagePosition(),
"",
0,
kennzeichen,
"Rechnungskennzeichen muss '0' oder '1' sein"
));
}
// Anderes Kennzeichen: keine Prüfung durch diese Regel
}
/**

View File

@@ -259,4 +259,104 @@ class DefaultStructureValidatorAsvrecRechnungskennzeichenTest {
|| "STRUCTURE_020".equals(e.errorCode())),
"Kein Rechnungskennzeichen-Fehler erwartet wenn REA keine Felder hat");
}
// --- Test 9: Kennzeichen "2" -> genau ein Fehler STRUCTURE_026 ---
@Test
void validate_kennzeichen2_fehlerSTRUCTURE026() {
InputFile inputFile = buildAsvrec(List.of(
new Segment("IFA", 2),
rea(3, "2"),
new Segment("IVA", 4)
));
ValidationResult result = validator.validate(inputFile);
assertTrue(result.hasErrors());
assertEquals(1, result.getErrors().size());
ValidationError error = result.getErrors().get(0);
assertEquals("STRUCTURE_026", error.errorCode());
assertEquals("Rechnungskennzeichen in REA muss '0' oder '1' sein",
error.description());
assertEquals("REA", error.segmentName());
assertEquals(1, error.segmentPosition());
assertEquals("2", error.actualValue());
assertEquals("Rechnungskennzeichen muss '0' oder '1' sein", error.expectedRule());
}
// --- Test 10: Kennzeichen "" (leer) -> genau ein Fehler STRUCTURE_026 ---
@Test
void validate_kennzeichenLeer_fehlerSTRUCTURE026() {
InputFile inputFile = buildAsvrec(List.of(
new Segment("IFA", 2),
rea(3, ""),
new Segment("IVA", 4)
));
ValidationResult result = validator.validate(inputFile);
assertTrue(result.hasErrors());
assertEquals(1, result.getErrors().size());
ValidationError error = result.getErrors().get(0);
assertEquals("STRUCTURE_026", error.errorCode());
assertEquals("Rechnungskennzeichen in REA muss '0' oder '1' sein",
error.description());
assertEquals("REA", error.segmentName());
assertEquals(1, error.segmentPosition());
assertEquals("", error.actualValue());
assertEquals("Rechnungskennzeichen muss '0' oder '1' sein", error.expectedRule());
}
// --- Test 11: Kennzeichen "X" -> genau ein Fehler STRUCTURE_026 ---
@Test
void validate_kennzeichenX_fehlerSTRUCTURE026() {
InputFile inputFile = buildAsvrec(List.of(
new Segment("IFA", 2),
rea(3, "X"),
new Segment("IVA", 4)
));
ValidationResult result = validator.validate(inputFile);
assertTrue(result.hasErrors());
assertEquals(1, result.getErrors().size());
ValidationError error = result.getErrors().get(0);
assertEquals("STRUCTURE_026", error.errorCode());
assertEquals("Rechnungskennzeichen in REA muss '0' oder '1' sein",
error.description());
assertEquals("REA", error.segmentName());
assertEquals(1, error.segmentPosition());
assertEquals("X", error.actualValue());
assertEquals("Rechnungskennzeichen muss '0' oder '1' sein", error.expectedRule());
}
// --- Test 12: Kennzeichen "01" -> genau ein Fehler STRUCTURE_026 ---
@Test
void validate_kennzeichen01_fehlerSTRUCTURE026() {
InputFile inputFile = buildAsvrec(List.of(
new Segment("IFA", 2),
rea(3, "01"),
new Segment("IVA", 4)
));
ValidationResult result = validator.validate(inputFile);
assertTrue(result.hasErrors());
assertEquals(1, result.getErrors().size());
ValidationError error = result.getErrors().get(0);
assertEquals("STRUCTURE_026", error.errorCode());
assertEquals("Rechnungskennzeichen in REA muss '0' oder '1' sein",
error.description());
assertEquals("REA", error.segmentName());
assertEquals(1, error.segmentPosition());
assertEquals("01", error.actualValue());
assertEquals("Rechnungskennzeichen muss '0' oder '1' sein", error.expectedRule());
}
}

View File

@@ -54,10 +54,11 @@ class DefaultStructureValidatorTestAdditional {
@Test
void validate_shouldNotReportErrorWhenMessageTypeIsASVFEH() {
// Given
// Given: ASVFEH-Nachricht mit erforderlichem FHL-Segment
Segment unh = new Segment("UNH", 1, List.of(new Field(1, "12345"), new Field(2, "ASVFEH:D:03B:UN:EAN008")));
Segment unt = new Segment("UNT", 2, List.of(new Field(1, "2"), new Field(2, "12345")));
Message message = new Message(1, List.of(unh, unt));
Segment fhl = new Segment("FHL", 2, List.of(new Field(1, "1")));
Segment unt = new Segment("UNT", 3, List.of(new Field(1, "3"), new Field(2, "12345")));
Message message = new Message(1, List.of(unh, fhl, unt));
InputFile inputFile = new InputFile("test.txt", List.of(message));
// When