From e40327708a7c38cc04d900ebc9a479460c8c5874 Mon Sep 17 00:00:00 2001 From: Sebastian Kern Date: Wed, 21 Oct 2026 23:54:37 +0200 Subject: [PATCH 1/6] Nachweis: Berichtschreiber in der Charakterisierungssuite, CI-Artefakte und Aggregation (WIP) --- .github/workflows/e2e.yml | 19 ++ .github/workflows/legacy-ci.yml | 10 + .github/workflows/modern-ci.yml | 86 ++++++ .../ApiCharacterizationTest.java | 19 +- .../DbStateCharacterizationTest.java | 2 + .../ErrorContractCharacterizationTest.java | 2 + .../characterization/NachweisBericht.java | 136 +++++++++ .../characterization/Sanktioniert.java | 24 ++ e2e/pom.xml | 7 + scripts/nachweis/aggregate.mjs | 263 ++++++++++++++++++ 10 files changed, 567 insertions(+), 1 deletion(-) create mode 100644 characterization/src/test/java/at/stoicera/migrationlab/characterization/NachweisBericht.java create mode 100644 characterization/src/test/java/at/stoicera/migrationlab/characterization/Sanktioniert.java create mode 100644 scripts/nachweis/aggregate.mjs diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 2432299..64a40ed 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -43,6 +43,25 @@ jobs: - name: Run E2E suite against ${{ matrix.target }} run: ./mvnw -B verify -f e2e/pom.xml -Dtarget=${{ matrix.target }} + # Äquivalenz-Nachweis: the surefire reports of the 34 equivalence scenarios, before the + # page test below adds its own (separate reports directory, so it never enters the count). + - name: Upload test reports (Nachweis) + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 + with: + name: nachweis-e2e-${{ matrix.target }} + path: e2e/target/surefire-reports/TEST-*.xml + if-no-files-found: warn + + # The /nachweis page exists on the modern stand only. Tagged "nachweis" and excluded from + # the default run, so the equivalence count stays 34 per stand on both legs. + - name: Nachweis page (modern stand only) + if: matrix.target == 'modern' + run: > + ./mvnw -B verify -f e2e/pom.xml -Dtarget=modern + -Dgroups=nachweis -De2e.excludedGroups=none + -De2e.reportsDirectory=target/surefire-reports-nachweis + - name: Upload failure screenshots if: failure() uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 diff --git a/.github/workflows/legacy-ci.yml b/.github/workflows/legacy-ci.yml index 3b58a96..1b20667 100644 --- a/.github/workflows/legacy-ci.yml +++ b/.github/workflows/legacy-ci.yml @@ -59,6 +59,16 @@ jobs: - name: Run characterization tests (golden masters) run: ./mvnw -B verify -f characterization/pom.xml + # Äquivalenz-Nachweis: the suite's own report of this run (NachweisBericht), joined + # with the modern stand's in modern-ci's nachweis job. Uploaded green or red. + - name: Upload characterization report (Nachweis) + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 + with: + name: nachweis-characterization-legacy + path: characterization/target/nachweis/ + if-no-files-found: warn + - name: Upload received captures on mismatch if: failure() uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 diff --git a/.github/workflows/modern-ci.yml b/.github/workflows/modern-ci.yml index 4cdfc89..03901ab 100644 --- a/.github/workflows/modern-ci.yml +++ b/.github/workflows/modern-ci.yml @@ -61,6 +61,14 @@ jobs: -DdbUrl=jdbc:postgresql://localhost:5434/werkstatt -Dstand=modern + - name: Upload characterization report (Nachweis) + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 + with: + name: nachweis-characterization-modern + path: characterization/target/nachweis/ + if-no-files-found: warn + - name: Upload received captures on mismatch if: failure() uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 @@ -114,3 +122,81 @@ jobs: # gate people learn to bypass. It is read at review time; DEVIATIONS.md # records this as reporting-only. exit-code: '0' + + # Same scan, machine-readable, for the count on /nachweis. The table above stays the + # human-readable record; this one is only counted, never interpreted. + - name: Scan the modern image (JSON for the Nachweis count) + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 + with: + image-ref: migration-lab/modern:ci + format: json + output: trivy.json + severity: CRITICAL,HIGH + ignore-unfixed: true + exit-code: '0' + + - name: Upload image-scan result (Nachweis) + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 + with: + name: nachweis-trivy + path: trivy.json + if-no-files-found: warn + + # ---- Äquivalenz-Nachweis (/nachweis) ---- + # Joins what the gates of THIS commit produced — characterization on both stands + # (legacy-ci, modern-build), e2e on both stands (e2e.yml), the image scan — into one + # nachweis.json artefact. It runs no test itself and is deliberately NOT a required + # check: it reports, the gates decide. It waits for the two other workflows of the same + # commit, so it finishes last. The deployed page shows the committed copy in + # modern/frontend/public/nachweis.json; scripts/nachweis/refresh.sh updates it. + nachweis: + needs: modern-build + if: always() + runs-on: ubuntu-latest + timeout-minutes: 60 + permissions: + contents: read + actions: read + env: + GH_TOKEN: ${{ github.token }} + HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: ${{ env.HEAD_SHA }} + + - name: Collect the gate results of this commit + run: | + mkdir -p nachweis-in + gh run download "$GITHUB_RUN_ID" -R "$GITHUB_REPOSITORY" -p 'nachweis-*' -D nachweis-in/modern-ci \ + || echo "::warning::no Nachweis artefacts in this run" + for wf in legacy-ci.yml e2e.yml; do + id="" + for i in $(seq 1 40); do + id=$(gh run list -R "$GITHUB_REPOSITORY" --workflow "$wf" --commit "$HEAD_SHA" \ + --event "${{ github.event_name }}" --json databaseId --jq '.[0].databaseId // empty') + [ -n "$id" ] && break + sleep 15 + done + if [ -z "$id" ]; then echo "::warning::no $wf run for $HEAD_SHA"; continue; fi + gh run watch "$id" -R "$GITHUB_REPOSITORY" --interval 30 > /dev/null || true + gh run download "$id" -R "$GITHUB_REPOSITORY" -p 'nachweis-*' -D "nachweis-in/$wf" \ + || echo "::warning::no Nachweis artefacts in $wf run $id" + done + find nachweis-in -type f | sort + + - name: Build nachweis.json + env: + NACHWEIS_SHA: ${{ env.HEAD_SHA }} + NACHWEIS_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + NACHWEIS_REPO: ${{ github.repository }} + run: node scripts/nachweis/aggregate.mjs --in nachweis-in --out nachweis/nachweis.json + + - name: Upload nachweis.json + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 + with: + name: nachweis + path: nachweis/nachweis.json + if-no-files-found: warn diff --git a/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java b/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java index 9a7836a..9977549 100644 --- a/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java +++ b/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java @@ -10,6 +10,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -28,6 +29,7 @@ * against src/test/resources/golden/. */ @DisplayName("API-Charakterisierung: Lese-Endpunkte gegen Golden Master") +@ExtendWith(NachweisBericht.class) class ApiCharacterizationTest { private static final ObjectMapper MAPPER = new ObjectMapper(); @@ -59,6 +61,7 @@ void endpointMatchesGolden(String goldenFile, String endpoint) throws Exception JsonNode received = MAPPER.readTree(response.body()); JsonNode golden = readGolden(goldenFile); + NachweisBericht.erfasse(goldenFile, endpoint, response.body()); if (!received.equals(golden)) { Path out = Path.of("target", "characterization-received", goldenFile); @@ -84,6 +87,9 @@ void endpointMatchesGolden(String goldenFile, String endpoint) throws Exception // ----------------------------------------------------------------- @Test + @Sanktioniert( + value = "SD-1", + quelle = "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md") @DisplayName("B4-Suche, Injektionseingabe %' OR '1'='1 — sanktionierte Divergenz (ADR-0004)") void sucheMitInjektionsEingabe() throws Exception { var response = Stand.get("/api/kunden?suche=" + urlEncode("%' OR '1'='1")); @@ -102,6 +108,9 @@ void sucheMitInjektionsEingabe() throws Exception { } @Test + @Sanktioniert( + value = "SD-1", + quelle = "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md") @DisplayName("B4-Suche, einzelnes Hochkomma — sanktionierte Divergenz (ADR-0004)") void sucheMitEinzelnemHochkomma() throws Exception { var response = Stand.get("/api/kunden?suche=" + urlEncode("'")); @@ -129,6 +138,9 @@ private static String urlEncode(String value) { } @Test + @Sanktioniert( + value = "SD-2", + quelle = "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md") @DisplayName("Adminseite: JSP-Golden (legacy) / SPA-Route + Statistik-JSON (modern, SD-2)") void adminPageMatchesGolden() throws Exception { var response = Stand.get("/admin"); @@ -143,7 +155,9 @@ void adminPageMatchesGolden() throws Exception { // The admin UI FLOW itself is pinned by e2e AdminTest on both stands. assertThat(response.body()).contains(" feldNamen(JsonNode node) { * purpose: it exists on BOTH stands and is pinned by adminPageMatchesGolden.) */ @ParameterizedTest(name = "SPA-Dokumentroute {0}") + @Sanktioniert(value = "ADR-0009", quelle = "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md") @org.junit.jupiter.params.provider.ValueSource( strings = { "/start", @@ -226,6 +242,7 @@ private static java.util.List feldNamen(JsonNode node) { }) void spaRouteServesDocument(String pfad) { var response = Stand.get(pfad); + NachweisBericht.erfasse(null, pfad, null); if (Stand.isModern()) { assertThat(response.statusCode()).as("GET %s", pfad).isEqualTo(200); assertThat(response.body()).as("GET %s serves the SPA shell", pfad).contains(".json} when the run ends. CI joins the legacy and the + * modern file into {@code nachweis.json} (scripts/nachweis/aggregate.mjs). + * + *

It observes and never decides: a test passes or fails exactly as without it. Tests may attach + * the golden file, the endpoint and the received document via {@link #erfasse}, so the report can + * show golden and answer side by side. + */ +public final class NachweisBericht implements BeforeTestExecutionCallback, TestWatcher { + + private static final ExtensionContext.Namespace NAMESPACE = + ExtensionContext.Namespace.create(NachweisBericht.class); + private static final ThreadLocal> AKTUELL = new ThreadLocal<>(); + + /** Attaches golden file, endpoint and received document to the running test. */ + public static void erfasse(String goldenDatei, String endpunkt, String empfangen) { + Map eintrag = AKTUELL.get(); + if (eintrag == null) { + return; // test class runs without the extension — nothing to record + } + eintrag.put("golden", goldenDatei); + eintrag.put("endpunkt", endpunkt); + eintrag.put("empfangen", empfangen); + } + + @Override + public void beforeTestExecution(ExtensionContext context) { + AKTUELL.set(neuerEintrag(context)); + } + + @Override + public void testSuccessful(ExtensionContext context) { + abschliessen(context, "bestanden", null); + } + + @Override + public void testFailed(ExtensionContext context, Throwable cause) { + abschliessen(context, "fehlgeschlagen", cause); + } + + @Override + public void testAborted(ExtensionContext context, Throwable cause) { + abschliessen(context, "abgebrochen", cause); + } + + @Override + public void testDisabled(ExtensionContext context, Optional reason) { + abschliessen(context, "deaktiviert", null); + } + + private static void abschliessen(ExtensionContext context, String status, Throwable cause) { + Map eintrag = AKTUELL.get(); + if (eintrag == null || !context.getUniqueId().equals(eintrag.get("id"))) { + eintrag = neuerEintrag(context); // failed before execution, e.g. in @BeforeEach + } + AKTUELL.remove(); + eintrag.put("status", status); + if (cause != null) { + String meldung = String.valueOf(cause.getMessage()); + eintrag.put("meldung", meldung.length() > 600 ? meldung.substring(0, 600) + " …" : meldung); + } + context + .getRoot() + .getStore(NAMESPACE) + .getOrComputeIfAbsent(Bericht.class, k -> new Bericht(), Bericht.class) + .add(eintrag); + } + + private static Map neuerEintrag(ExtensionContext context) { + Map eintrag = new LinkedHashMap<>(); + eintrag.put("id", context.getUniqueId()); + eintrag.put("klasse", context.getRequiredTestClass().getSimpleName()); + Optional methode = context.getTestMethod(); + eintrag.put("methode", methode.map(Method::getName).orElse(null)); + eintrag.put("name", context.getDisplayName()); + Sanktioniert sanktion = methode.map(m -> m.getAnnotation(Sanktioniert.class)).orElse(null); + if (sanktion != null) { + eintrag.put("sanktioniert", Map.of("ref", sanktion.value(), "quelle", sanktion.quelle())); + } + return eintrag; + } + + /** + * Collected for the whole engine run; written once when JUnit closes the root store. Both close + * contracts are implemented (JUnit 5.13 moved from CloseableResource to AutoCloseable); the guard + * makes a second call a no-op. + */ + @SuppressWarnings("deprecation") + private static final class Bericht + implements ExtensionContext.Store.CloseableResource, AutoCloseable { + private final List> tests = new ArrayList<>(); + private boolean geschrieben; + + synchronized void add(Map eintrag) { + tests.add(eintrag); + } + + @Override + public synchronized void close() throws Exception { + if (geschrieben) { + return; + } + geschrieben = true; + Map dokument = new LinkedHashMap<>(); + dokument.put("suite", "characterization"); + dokument.put("stand", Stand.STAND); + dokument.put("baseUrl", Stand.BASE_URL); + dokument.put("erzeugt", Instant.now().toString()); + dokument.put("tests", tests); + Path ziel = Path.of("target", "nachweis", "characterization-" + Stand.STAND + ".json"); + Files.createDirectories(ziel.getParent()); + new ObjectMapper() + .enable(SerializationFeature.INDENT_OUTPUT) + .writeValue(ziel.toFile(), dokument); + } + } +} diff --git a/characterization/src/test/java/at/stoicera/migrationlab/characterization/Sanktioniert.java b/characterization/src/test/java/at/stoicera/migrationlab/characterization/Sanktioniert.java new file mode 100644 index 0000000..9d241a2 --- /dev/null +++ b/characterization/src/test/java/at/stoicera/migrationlab/characterization/Sanktioniert.java @@ -0,0 +1,24 @@ +package at.stoicera.migrationlab.characterization; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a test whose expectation forks on {@link Stand#STAND} because the modern stand deliberately + * behaves differently (ADR-0004 rule 2). The marker carries no behaviour; it tells {@link + * NachweisBericht} which register entry sanctions the fork, so the equivalence report can say + * "sanktionierte Abweichung" with a source instead of "identisch". A fork without this marker is a + * review finding. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Sanktioniert { + + /** Register id, e.g. {@code SD-1}, or the ADR that sanctions the change. */ + String value(); + + /** Repository path of the register entry. */ + String quelle(); +} diff --git a/e2e/pom.xml b/e2e/pom.xml index b9ae7b9..835c45b 100644 --- a/e2e/pom.xml +++ b/e2e/pom.xml @@ -18,6 +18,8 @@ 5.14.4 4.51.0 3.27.7 + nachweis + ${project.build.directory}/surefire-reports 42.7.14 legacy @@ -76,6 +78,11 @@ true true + + ${e2e.excludedGroups} + ${e2e.reportsDirectory} DC1~uYxv0qeRAu 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

KJwQ1F1)zRWwf@f>RA>TLHfn9w?9A)28V{? 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 GGywo247rE^ literal 0 HcmV?d00001 diff --git a/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java b/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java new file mode 100644 index 0000000..809afb3 --- /dev/null +++ b/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java @@ -0,0 +1,122 @@ +package at.stoicera.migrationlab.e2e.nachweis; + +import static org.assertj.core.api.Assertions.assertThat; + +import at.stoicera.migrationlab.e2e.config.TestConfig; +import at.stoicera.migrationlab.e2e.support.ScenarioTest; +import java.util.List; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebElement; + +/** + * The /nachweis evidence page of the modern stand. NOT one of the equivalence scenarios: the page + * does not exist on the 2016 stand, so it carries the tag "nachweis", is excluded from the default + * run (e2e/pom.xml) and runs as its own step in e2e.yml — the 34-per-stand count it reports stays + * the count of the equivalence suite. Selectors are direct data-testid anchors on purpose: there is + * no legacy counterpart for a selector map to abstract. + */ +@Tag("nachweis") +@DisplayName("Nachweis-Seite: Matrix, Zahlen, Vergleich, Belege (nur moderner Stand)") +class NachweisSeiteTest extends ScenarioTest { + + private static By testid(String id) { + return By.cssSelector("[data-testid='" + id + "']"); + } + + @BeforeAll + void nurModern() { + Assumptions.assumeTrue("modern".equals(TestConfig.target()), "page exists on modern only"); + } + + @Test + @Order(1) + void bannerAufDerStartseiteFuehrtZumNachweis() { + driver.get(TestConfig.baseUrl() + "/"); + waits.clickable(testid("demo-hinweis-nachweis")).click(); + waits.urlContains("/nachweis"); + waits.visible(testid("nachweis-matrix")); + } + + @Test + @Order(2) + void direktaufrufZeigtMatrixMitStimmigenZahlen() { + // document request, not router navigation: pins the SpaForwardController mapping + driver.get(TestConfig.baseUrl() + "/nachweis"); + waits.countAtLeast(testid("nachweis-zeile"), 1); + + List zeilen = driver.findElements(testid("nachweis-zeile")); + int gesamt = zahl("nachweis-gesamt"); + assertThat(zeilen).as("one matrix row per characterization test").hasSize(gesamt); + assertThat( + zahl("nachweis-anzahl-identisch") + + zahl("nachweis-anzahl-sanktioniert") + + zahl("nachweis-anzahl-regression")) + .as("verdict counts add up to the total") + .isEqualTo(gesamt); + long sanktioniert = + zeilen.stream().filter(z -> "sanktioniert".equals(z.getAttribute("data-urteil"))).count(); + assertThat(sanktioniert).isEqualTo(zahl("nachweis-anzahl-sanktioniert")); + assertThat(driver.findElement(testid("nachweis-e2e-legacy")).getText()) + .matches("\\d+ von \\d+ grün"); + assertThat(driver.findElement(testid("nachweis-e2e-modern")).getText()) + .matches("\\d+ von \\d+ grün"); + } + + @Test + @Order(3) + void zeilenklickZeigtGoldenUndModerneAntwortNebeneinander() { + WebElement goldenZeile = + driver.findElements(testid("nachweis-zeile")).stream() + .filter(z -> z.getText().contains("kunden.json")) + .findFirst() + .orElseThrow(); + goldenZeile.findElement(testid("nachweis-umschalter")).click(); + waits.visible(testid("nachweis-vergleich")); + String golden = driver.findElement(testid("nachweis-golden")).getText(); + String modern = driver.findElement(testid("nachweis-modern")).getText(); + assertThat(golden).isNotBlank().contains("nachname"); + assertThat(modern).isEqualTo(golden); + } + + @Test + @Order(4) + void sanktionierteZeileZeigtErklaerungUndRegisterBeleg() { + WebElement zeile = + driver.findElements(testid("nachweis-zeile")).stream() + .filter(z -> "sanktioniert".equals(z.getAttribute("data-urteil"))) + .findFirst() + .orElseThrow(); + zeile.findElement(testid("nachweis-umschalter")).click(); + waits.visible(testid("nachweis-erklaerung")); + assertThat( + zeile.findElements(testid("nachweis-beleg")).stream() + .map(a -> a.getAttribute("href")) + .toList()) + .anyMatch(href -> href.contains("/blob/") && href.contains("docs/adr/")); + } + + @Test + @Order(5) + void jederBelegZeigtAufEinenFestenCommitUndKeinInlineSkript() { + for (WebElement a : driver.findElements(testid("nachweis-beleg"))) { + assertThat(a.getAttribute("href")) + .as("evidence link pinned to a commit SHA") + .matches("https://github\\.com/.+/blob/[0-9a-f]{40}/.+"); + } + Object inline = + ((JavascriptExecutor) driver) + .executeScript("return document.querySelectorAll('script:not([src])').length"); + assertThat(((Number) inline).intValue()).as("no inline script (strict CSP)").isZero(); + } + + private int zahl(String id) { + return Integer.parseInt(waits.visible(testid(id)).getText().trim()); + } +} diff --git a/modern/frontend/public/nachweis.json b/modern/frontend/public/nachweis.json new file mode 100644 index 0000000..693afc2 --- /dev/null +++ b/modern/frontend/public/nachweis.json @@ -0,0 +1,1929 @@ +{ + "schema": 1, + "erzeugt": "2026-10-21T22:03:00.466Z", + "repo": "https://github.com/Stoicera/migration-lab-java", + "commit": { + "sha": "00f74d797e6d893e338c41eb9685deec06810f5d", + "url": "https://github.com/Stoicera/migration-lab-java/commit/00f74d797e6d893e338c41eb9685deec06810f5d" + }, + "ciLauf": { + "url": "https://github.com/Stoicera/migration-lab-java/actions/runs/39682526965" + }, + "register": { + "deviations": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/DEVIATIONS.md", + "adr0004": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md" + }, + "charakterisierung": { + "gesamt": 47, + "identisch": 33, + "sanktioniert": 14, + "regression": 0, + "unvollstaendig": 0, + "zeilen": [ + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#1]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/kunden wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/kunden", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "kunden.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden.json" + }, + "vergleich": { + "golden": "[\n {\n \"angelegtAm\": 1781259000000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"AIGNER, Thomas\",\n \"email\": \"t.aigner@aon.at\",\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"notiz\": null,\n \"ort\": \"Waldhausen\",\n \"plz\": \"4391\",\n \"strasse\": \"Waldweg 5\",\n \"telefon\": \"+43 676 1010101\",\n \"vorname\": \"Thomas\"\n },\n {\n \"angelegtAm\": 1770021900000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"BRUNNER, Elisabeth\",\n \"email\": \"e.brunner@liwest.at\",\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"notiz\": null,\n \"ort\": \"Linz\",\n \"plz\": \"4020\",\n \"strasse\": \"Landstraße 101\",\n \"telefon\": \"+43 650 4444444\",\n \"vorname\": \"Elisabeth\"\n },\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n },\n {\n \"angelegtAm\": 1775202900000,\n \"anrede\": \"Firma\",\n \"anzeigeName\": \"HUBER TRANSPORTE GMBH, \",\n \"email\": \"office@huber-transporte.at\",\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"notiz\": \"Flottenkunde, Sammelrechnung Monatsende gewuenscht (machen wir nicht)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Gewerbestraße 9\",\n \"telefon\": \"+43 7262 88888\",\n \"vorname\": null\n },\n {\n \"angelegtAm\": 1767868200000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"LEITNER, Maria\",\n \"email\": \"m.leitner@gmx.at\",\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"notiz\": null,\n \"ort\": \"Schwertberg\",\n \"plz\": \"4311\",\n \"strasse\": \"Bahnhofstraße 18\",\n \"telefon\": \"+43 664 2222222\",\n \"vorname\": \"Maria\"\n },\n {\n \"angelegtAm\": 1772362800000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"MAYR, Anna\",\n \"email\": \"anna.mayr@gmx.at\",\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"notiz\": null,\n \"ort\": \"Naarn\",\n \"plz\": \"4331\",\n \"strasse\": \"Am Anger 12\",\n \"telefon\": \"+43 664 6666666\",\n \"vorname\": \"Anna\"\n },\n {\n \"angelegtAm\": 1773913200000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"PICHLER, Josef\",\n \"email\": null,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"notiz\": \"kein E-Mail, immer anrufen!\",\n \"ort\": \"Grein\",\n \"plz\": \"4360\",\n \"strasse\": \"Marktplatz 2\",\n \"telefon\": \"+43 699 7777777\",\n \"vorname\": \"Josef\"\n },\n {\n \"angelegtAm\": 1770826800000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"STEINER, Karl\",\n \"email\": \"karl.steiner@aon.at\",\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"notiz\": \"Reifen lagern bei uns (Keller)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Feldweg 7\",\n \"telefon\": \"+43 676 5555555\",\n \"vorname\": \"Karl\"\n },\n {\n \"angelegtAm\": 1778073300000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"WAGNER, Christine\",\n \"email\": \"ch.wagner@gmail.com\",\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"notiz\": null,\n \"ort\": \"Ried in der Riedmark\",\n \"plz\": \"4312\",\n \"strasse\": \"Ringstraße 22\",\n \"telefon\": \"+43 650 9999999\",\n \"vorname\": \"Christine\"\n },\n {\n \"angelegtAm\": 1768485900000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"WIMMER, Johann\",\n \"email\": \"j.wimmer@gmail.com\",\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"notiz\": \"zahlt gern bar\",\n \"ort\": \"Mauthausen\",\n \"plz\": \"4310\",\n \"strasse\": \"Donaulände 3\",\n \"telefon\": \"+43 699 3333333\",\n \"vorname\": \"Johann\"\n }\n]", + "modern": "[\n {\n \"angelegtAm\": 1781259000000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"AIGNER, Thomas\",\n \"email\": \"t.aigner@aon.at\",\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"notiz\": null,\n \"ort\": \"Waldhausen\",\n \"plz\": \"4391\",\n \"strasse\": \"Waldweg 5\",\n \"telefon\": \"+43 676 1010101\",\n \"vorname\": \"Thomas\"\n },\n {\n \"angelegtAm\": 1770021900000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"BRUNNER, Elisabeth\",\n \"email\": \"e.brunner@liwest.at\",\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"notiz\": null,\n \"ort\": \"Linz\",\n \"plz\": \"4020\",\n \"strasse\": \"Landstraße 101\",\n \"telefon\": \"+43 650 4444444\",\n \"vorname\": \"Elisabeth\"\n },\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n },\n {\n \"angelegtAm\": 1775202900000,\n \"anrede\": \"Firma\",\n \"anzeigeName\": \"HUBER TRANSPORTE GMBH, \",\n \"email\": \"office@huber-transporte.at\",\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"notiz\": \"Flottenkunde, Sammelrechnung Monatsende gewuenscht (machen wir nicht)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Gewerbestraße 9\",\n \"telefon\": \"+43 7262 88888\",\n \"vorname\": null\n },\n {\n \"angelegtAm\": 1767868200000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"LEITNER, Maria\",\n \"email\": \"m.leitner@gmx.at\",\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"notiz\": null,\n \"ort\": \"Schwertberg\",\n \"plz\": \"4311\",\n \"strasse\": \"Bahnhofstraße 18\",\n \"telefon\": \"+43 664 2222222\",\n \"vorname\": \"Maria\"\n },\n {\n \"angelegtAm\": 1772362800000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"MAYR, Anna\",\n \"email\": \"anna.mayr@gmx.at\",\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"notiz\": null,\n \"ort\": \"Naarn\",\n \"plz\": \"4331\",\n \"strasse\": \"Am Anger 12\",\n \"telefon\": \"+43 664 6666666\",\n \"vorname\": \"Anna\"\n },\n {\n \"angelegtAm\": 1773913200000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"PICHLER, Josef\",\n \"email\": null,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"notiz\": \"kein E-Mail, immer anrufen!\",\n \"ort\": \"Grein\",\n \"plz\": \"4360\",\n \"strasse\": \"Marktplatz 2\",\n \"telefon\": \"+43 699 7777777\",\n \"vorname\": \"Josef\"\n },\n {\n \"angelegtAm\": 1770826800000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"STEINER, Karl\",\n \"email\": \"karl.steiner@aon.at\",\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"notiz\": \"Reifen lagern bei uns (Keller)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Feldweg 7\",\n \"telefon\": \"+43 676 5555555\",\n \"vorname\": \"Karl\"\n },\n {\n \"angelegtAm\": 1778073300000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"WAGNER, Christine\",\n \"email\": \"ch.wagner@gmail.com\",\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"notiz\": null,\n \"ort\": \"Ried in der Riedmark\",\n \"plz\": \"4312\",\n \"strasse\": \"Ringstraße 22\",\n \"telefon\": \"+43 650 9999999\",\n \"vorname\": \"Christine\"\n },\n {\n \"angelegtAm\": 1768485900000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"WIMMER, Johann\",\n \"email\": \"j.wimmer@gmail.com\",\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"notiz\": \"zahlt gern bar\",\n \"ort\": \"Mauthausen\",\n \"plz\": \"4310\",\n \"strasse\": \"Donaulände 3\",\n \"telefon\": \"+43 699 3333333\",\n \"vorname\": \"Johann\"\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden kunden.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#2]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/kunden?suche=Hofer wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/kunden?suche=Hofer", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "kunden-suche-hofer.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-hofer.json" + }, + "vergleich": { + "golden": "[\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n }\n]", + "modern": "[\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden kunden-suche-hofer.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-hofer.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#3]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/kunden?suche=Meier wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/kunden?suche=Meier", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "kunden-suche-meier-leer.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" + }, + "vergleich": { + "golden": "[]", + "modern": "[]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden kunden-suche-meier-leer.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#4]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/kunden/1 wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/kunden/1", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "kunde-1.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1.json" + }, + "vergleich": { + "golden": "{\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n}", + "modern": "{\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n}", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden kunde-1.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#5]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/kunden/1/fahrzeuge wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/kunden/1/fahrzeuge", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "kunde-1-fahrzeuge.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" + }, + "vergleich": { + "golden": "[\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n }\n]", + "modern": "[\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden kunde-1-fahrzeuge.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#6]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/fahrzeuge wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/fahrzeuge", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "fahrzeuge.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/fahrzeuge.json" + }, + "vergleich": { + "golden": "[\n {\n \"angelegtAm\": 1770022320000,\n \"baujahr\": 2018,\n \"bezeichnung\": \"VW Up 1.0\",\n \"fahrgestellnr\": \"WVWZZZAAZJD000013\",\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"VW\",\n \"modell\": \"Up 1.0\",\n \"pickerlDatum\": \"2027-04-30\"\n },\n {\n \"angelegtAm\": 1770022200000,\n \"baujahr\": 2014,\n \"bezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrgestellnr\": \"WAUZZZ8K9EA000005\",\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 141200,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"Audi\",\n \"modell\": \"A4 Avant 2.0 TDI\",\n \"pickerlDatum\": \"2027-01-31\"\n },\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1781259240000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"BMW 320d Touring\",\n \"fahrgestellnr\": \"WBA3K51000F000012\",\n \"id\": 12,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"marke\": \"BMW\",\n \"modell\": \"320d Touring\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1768486080000,\n \"baujahr\": 2010,\n \"bezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrgestellnr\": \"WF0KXXGCBK9000004\",\n \"id\": 4,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 175300,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"marke\": \"Ford\",\n \"modell\": \"Focus 1.6 TDCi\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1773913440000,\n \"baujahr\": 2013,\n \"bezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrgestellnr\": \"VNKKC96380A000008\",\n \"id\": 8,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88700,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"marke\": \"Toyota\",\n \"modell\": \"Yaris 1.33\",\n \"pickerlDatum\": \"2026-12-31\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n },\n {\n \"angelegtAm\": 1770827040000,\n \"baujahr\": 2011,\n \"bezeichnung\": \"VW Passat Variant\",\n \"fahrgestellnr\": \"WVWZZZ3CZBE000006\",\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189900,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"marke\": \"VW\",\n \"modell\": \"Passat Variant\",\n \"pickerlDatum\": \"2026-10-31\"\n },\n {\n \"angelegtAm\": 1775203200000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000009\",\n \"id\": 9,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 234000,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1775203320000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000010\",\n \"id\": 10,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2027-02-28\"\n },\n {\n \"angelegtAm\": 1767868380000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrgestellnr\": \"W0L0SDL08C4000003\",\n \"id\": 3,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 98000,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"marke\": \"Opel\",\n \"modell\": \"Corsa D 1.2\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1772363040000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Renault Clio IV\",\n \"fahrgestellnr\": \"VF15R240A54000007\",\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 61000,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"marke\": \"Renault\",\n \"modell\": \"Clio IV\",\n \"pickerlDatum\": \"2027-05-31\"\n },\n {\n \"angelegtAm\": 1778073480000,\n \"baujahr\": 2017,\n \"bezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrgestellnr\": \"VSSZZZ6JZHR000011\",\n \"id\": 11,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"marke\": \"Seat\",\n \"modell\": \"Ibiza 1.0 TSI\",\n \"pickerlDatum\": \"2027-06-30\"\n }\n]", + "modern": "[\n {\n \"angelegtAm\": 1770022320000,\n \"baujahr\": 2018,\n \"bezeichnung\": \"VW Up 1.0\",\n \"fahrgestellnr\": \"WVWZZZAAZJD000013\",\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"VW\",\n \"modell\": \"Up 1.0\",\n \"pickerlDatum\": \"2027-04-30\"\n },\n {\n \"angelegtAm\": 1770022200000,\n \"baujahr\": 2014,\n \"bezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrgestellnr\": \"WAUZZZ8K9EA000005\",\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 141200,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"Audi\",\n \"modell\": \"A4 Avant 2.0 TDI\",\n \"pickerlDatum\": \"2027-01-31\"\n },\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1781259240000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"BMW 320d Touring\",\n \"fahrgestellnr\": \"WBA3K51000F000012\",\n \"id\": 12,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"marke\": \"BMW\",\n \"modell\": \"320d Touring\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1768486080000,\n \"baujahr\": 2010,\n \"bezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrgestellnr\": \"WF0KXXGCBK9000004\",\n \"id\": 4,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 175300,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"marke\": \"Ford\",\n \"modell\": \"Focus 1.6 TDCi\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1773913440000,\n \"baujahr\": 2013,\n \"bezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrgestellnr\": \"VNKKC96380A000008\",\n \"id\": 8,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88700,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"marke\": \"Toyota\",\n \"modell\": \"Yaris 1.33\",\n \"pickerlDatum\": \"2026-12-31\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n },\n {\n \"angelegtAm\": 1770827040000,\n \"baujahr\": 2011,\n \"bezeichnung\": \"VW Passat Variant\",\n \"fahrgestellnr\": \"WVWZZZ3CZBE000006\",\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189900,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"marke\": \"VW\",\n \"modell\": \"Passat Variant\",\n \"pickerlDatum\": \"2026-10-31\"\n },\n {\n \"angelegtAm\": 1775203200000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000009\",\n \"id\": 9,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 234000,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1775203320000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000010\",\n \"id\": 10,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2027-02-28\"\n },\n {\n \"angelegtAm\": 1767868380000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrgestellnr\": \"W0L0SDL08C4000003\",\n \"id\": 3,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 98000,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"marke\": \"Opel\",\n \"modell\": \"Corsa D 1.2\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1772363040000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Renault Clio IV\",\n \"fahrgestellnr\": \"VF15R240A54000007\",\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 61000,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"marke\": \"Renault\",\n \"modell\": \"Clio IV\",\n \"pickerlDatum\": \"2027-05-31\"\n },\n {\n \"angelegtAm\": 1778073480000,\n \"baujahr\": 2017,\n \"bezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrgestellnr\": \"VSSZZZ6JZHR000011\",\n \"id\": 11,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"marke\": \"Seat\",\n \"modell\": \"Ibiza 1.0 TSI\",\n \"pickerlDatum\": \"2027-06-30\"\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden fahrzeuge.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/fahrzeuge.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#7]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/auftraege wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/auftraege", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "auftraege.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege.json" + }, + "vergleich": { + "golden": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785247200000,\n \"auftragNr\": \"A-2026-0015\",\n \"beschreibung\": \"Klappern vorne rechts bei Kopfsteinpflaster\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": null,\n \"id\": 15,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785143400000,\n \"auftragNr\": \"A-2026-0014\",\n \"beschreibung\": \"Jahresservice, bitte auch Wischerblätter\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 14,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784623800000,\n \"auftragNr\": \"A-2026-0013\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"VW Up 1.0\",\n \"fahrzeugId\": 13,\n \"fertigAm\": null,\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784115000000,\n \"auftragNr\": \"A-2026-0016\",\n \"beschreibung\": \"Radio ohne Funktion - Kunde macht es doch selbst\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": null,\n \"id\": 16,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1782292800000,\n \"auftragNr\": \"A-2026-0011\",\n \"beschreibung\": \"Motorlampe leuchtet, Injektor Zylinder 3 defekt\",\n \"fahrzeugBezeichnung\": \"BMW 320d Touring\",\n \"fahrzeugId\": 12,\n \"fertigAm\": null,\n \"id\": 11,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1781108400000,\n \"angenommenAm\": 1780992600000,\n \"auftragNr\": \"A-2026-0010\",\n \"beschreibung\": \"Auspuff Endtopf durchgerostet\",\n \"fahrzeugBezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrzeugId\": 8,\n \"fertigAm\": 1781092200000,\n \"id\": 10,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88300,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1778076000000,\n \"angenommenAm\": 1777966200000,\n \"auftragNr\": \"A-2026-0008\",\n \"beschreibung\": \"§57a + Service, Firmenfahrzeug\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 9,\n \"fertigAm\": 1778068800000,\n \"id\": 8,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 232900,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1775749500000,\n \"angenommenAm\": 1775655000000,\n \"auftragNr\": \"A-2026-0007\",\n \"beschreibung\": \"Kleines Service, Innenraumfilter\",\n \"fahrzeugBezeichnung\": \"Renault Clio IV\",\n \"fahrzeugId\": 7,\n \"fertigAm\": 1775730000000,\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 60500,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1773855000000,\n \"angenommenAm\": 1773651600000,\n \"auftragNr\": \"A-2026-0006\",\n \"beschreibung\": \"Kupplung rutscht, Tausch Kupplungssatz\",\n \"fahrzeugBezeichnung\": \"VW Passat Variant\",\n \"fahrzeugId\": 6,\n \"fertigAm\": 1773844800000,\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189200,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1770718500000,\n \"auftragNr\": \"A-2026-0004\",\n \"beschreibung\": \"Klimaanlage kühlt nicht - Kunde hat Termin abgesagt\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 4,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1770309000000,\n \"angenommenAm\": 1770277500000,\n \"auftragNr\": \"A-2026-0003\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrzeugId\": 4,\n \"fertigAm\": 1770289200000,\n \"id\": 3,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 174900,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1769070600000,\n \"angenommenAm\": 1768901400000,\n \"auftragNr\": \"A-2026-0002\",\n \"beschreibung\": \"Bremsen vorne komplett, Geräusch beim Bremsen\",\n \"fahrzeugBezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrzeugId\": 3,\n \"fertigAm\": 1769011200000,\n \"id\": 2,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 97400,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1768410000000,\n \"angenommenAm\": 1768204800000,\n \"auftragNr\": \"A-2026-0001\",\n \"beschreibung\": \"Jahresservice inkl. Öl und Filter\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": 1768318200000,\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 246800,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n }\n]", + "modern": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785247200000,\n \"auftragNr\": \"A-2026-0015\",\n \"beschreibung\": \"Klappern vorne rechts bei Kopfsteinpflaster\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": null,\n \"id\": 15,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785143400000,\n \"auftragNr\": \"A-2026-0014\",\n \"beschreibung\": \"Jahresservice, bitte auch Wischerblätter\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 14,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784623800000,\n \"auftragNr\": \"A-2026-0013\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"VW Up 1.0\",\n \"fahrzeugId\": 13,\n \"fertigAm\": null,\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784115000000,\n \"auftragNr\": \"A-2026-0016\",\n \"beschreibung\": \"Radio ohne Funktion - Kunde macht es doch selbst\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": null,\n \"id\": 16,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1782292800000,\n \"auftragNr\": \"A-2026-0011\",\n \"beschreibung\": \"Motorlampe leuchtet, Injektor Zylinder 3 defekt\",\n \"fahrzeugBezeichnung\": \"BMW 320d Touring\",\n \"fahrzeugId\": 12,\n \"fertigAm\": null,\n \"id\": 11,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1781108400000,\n \"angenommenAm\": 1780992600000,\n \"auftragNr\": \"A-2026-0010\",\n \"beschreibung\": \"Auspuff Endtopf durchgerostet\",\n \"fahrzeugBezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrzeugId\": 8,\n \"fertigAm\": 1781092200000,\n \"id\": 10,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88300,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1778076000000,\n \"angenommenAm\": 1777966200000,\n \"auftragNr\": \"A-2026-0008\",\n \"beschreibung\": \"§57a + Service, Firmenfahrzeug\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 9,\n \"fertigAm\": 1778068800000,\n \"id\": 8,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 232900,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1775749500000,\n \"angenommenAm\": 1775655000000,\n \"auftragNr\": \"A-2026-0007\",\n \"beschreibung\": \"Kleines Service, Innenraumfilter\",\n \"fahrzeugBezeichnung\": \"Renault Clio IV\",\n \"fahrzeugId\": 7,\n \"fertigAm\": 1775730000000,\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 60500,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1773855000000,\n \"angenommenAm\": 1773651600000,\n \"auftragNr\": \"A-2026-0006\",\n \"beschreibung\": \"Kupplung rutscht, Tausch Kupplungssatz\",\n \"fahrzeugBezeichnung\": \"VW Passat Variant\",\n \"fahrzeugId\": 6,\n \"fertigAm\": 1773844800000,\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189200,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1770718500000,\n \"auftragNr\": \"A-2026-0004\",\n \"beschreibung\": \"Klimaanlage kühlt nicht - Kunde hat Termin abgesagt\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 4,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1770309000000,\n \"angenommenAm\": 1770277500000,\n \"auftragNr\": \"A-2026-0003\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrzeugId\": 4,\n \"fertigAm\": 1770289200000,\n \"id\": 3,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 174900,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1769070600000,\n \"angenommenAm\": 1768901400000,\n \"auftragNr\": \"A-2026-0002\",\n \"beschreibung\": \"Bremsen vorne komplett, Geräusch beim Bremsen\",\n \"fahrzeugBezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrzeugId\": 3,\n \"fertigAm\": 1769011200000,\n \"id\": 2,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 97400,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1768410000000,\n \"angenommenAm\": 1768204800000,\n \"auftragNr\": \"A-2026-0001\",\n \"beschreibung\": \"Jahresservice inkl. Öl und Filter\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": 1768318200000,\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 246800,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden auftraege.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#8]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/auftraege?status=FERTIG wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/auftraege?status=FERTIG", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "auftraege-fertig.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege-fertig.json" + }, + "vergleich": { + "golden": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n }\n]", + "modern": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden auftraege-fertig.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege-fertig.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#9]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/auftraege/5 wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/auftraege/5", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "auftrag-5.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftrag-5.json" + }, + "vergleich": { + "golden": "{\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemen + WaPu tauschen\",\n \"einzelpreis\": 88.0,\n \"gesamtpreis\": 396.0,\n \"id\": 9,\n \"menge\": 4.5,\n \"typ\": \"ARBEIT\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemensatz\",\n \"einzelpreis\": 185.0,\n \"gesamtpreis\": 185.0,\n \"id\": 10,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Wasserpumpe\",\n \"einzelpreis\": 98.0,\n \"gesamtpreis\": 98.0,\n \"id\": 11,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n }\n ],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 679.0\n}", + "modern": "{\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemen + WaPu tauschen\",\n \"einzelpreis\": 88.0,\n \"gesamtpreis\": 396.0,\n \"id\": 9,\n \"menge\": 4.5,\n \"typ\": \"ARBEIT\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemensatz\",\n \"einzelpreis\": 185.0,\n \"gesamtpreis\": 185.0,\n \"id\": 10,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Wasserpumpe\",\n \"einzelpreis\": 98.0,\n \"gesamtpreis\": 98.0,\n \"id\": 11,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n }\n ],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 679.0\n}", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden auftrag-5.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftrag-5.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#10]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/rechnungen wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/rechnungen", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "rechnungen.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnungen.json" + }, + "vergleich": { + "golden": "[\n {\n \"auftragId\": 10,\n \"auftragNr\": \"A-2026-0010\",\n \"ausgestelltAm\": 1781107200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1781108400000,\n \"id\": 8,\n \"kundeName\": \"Pichler Josef\",\n \"rechnungNr\": \"R-2026-0008\",\n \"summeBrutto\": 294.0,\n \"summeNetto\": 245.0,\n \"ust\": 49.0\n },\n {\n \"auftragId\": 8,\n \"auftragNr\": \"A-2026-0008\",\n \"ausgestelltAm\": 1778075100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1779967200000,\n \"id\": 7,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"rechnungNr\": \"R-2026-0007\",\n \"summeBrutto\": 408.0,\n \"summeNetto\": 340.0,\n \"ust\": 68.0\n },\n {\n \"auftragId\": 7,\n \"auftragNr\": \"A-2026-0007\",\n \"ausgestelltAm\": 1775748600000,\n \"bezahlt\": true,\n \"bezahltAm\": 1775749500000,\n \"id\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"rechnungNr\": \"R-2026-0006\",\n \"summeBrutto\": 179.52,\n \"summeNetto\": 149.6,\n \"ust\": 29.92\n },\n {\n \"auftragId\": 6,\n \"auftragNr\": \"A-2026-0006\",\n \"ausgestelltAm\": 1773853200000,\n \"bezahlt\": false,\n \"bezahltAm\": null,\n \"id\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"rechnungNr\": \"R-2026-0005\",\n \"summeBrutto\": 912.0,\n \"summeNetto\": 760.0,\n \"ust\": 152.0\n },\n {\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n },\n {\n \"auftragId\": 3,\n \"auftragNr\": \"A-2026-0003\",\n \"ausgestelltAm\": 1770307200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1770309000000,\n \"id\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"rechnungNr\": \"R-2026-0003\",\n \"summeBrutto\": 100.8,\n \"summeNetto\": 84.0,\n \"ust\": 16.8\n },\n {\n \"auftragId\": 2,\n \"auftragNr\": \"A-2026-0002\",\n \"ausgestelltAm\": 1769069700000,\n \"bezahlt\": true,\n \"bezahltAm\": 1769680800000,\n \"id\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"rechnungNr\": \"R-2026-0002\",\n \"summeBrutto\": 434.88,\n \"summeNetto\": 362.4,\n \"ust\": 72.48\n },\n {\n \"auftragId\": 1,\n \"auftragNr\": \"A-2026-0001\",\n \"ausgestelltAm\": 1768409100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1768410000000,\n \"id\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"rechnungNr\": \"R-2026-0001\",\n \"summeBrutto\": 261.6,\n \"summeNetto\": 218.0,\n \"ust\": 43.6\n }\n]", + "modern": "[\n {\n \"auftragId\": 10,\n \"auftragNr\": \"A-2026-0010\",\n \"ausgestelltAm\": 1781107200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1781108400000,\n \"id\": 8,\n \"kundeName\": \"Pichler Josef\",\n \"rechnungNr\": \"R-2026-0008\",\n \"summeBrutto\": 294.0,\n \"summeNetto\": 245.0,\n \"ust\": 49.0\n },\n {\n \"auftragId\": 8,\n \"auftragNr\": \"A-2026-0008\",\n \"ausgestelltAm\": 1778075100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1779967200000,\n \"id\": 7,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"rechnungNr\": \"R-2026-0007\",\n \"summeBrutto\": 408.0,\n \"summeNetto\": 340.0,\n \"ust\": 68.0\n },\n {\n \"auftragId\": 7,\n \"auftragNr\": \"A-2026-0007\",\n \"ausgestelltAm\": 1775748600000,\n \"bezahlt\": true,\n \"bezahltAm\": 1775749500000,\n \"id\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"rechnungNr\": \"R-2026-0006\",\n \"summeBrutto\": 179.52,\n \"summeNetto\": 149.6,\n \"ust\": 29.92\n },\n {\n \"auftragId\": 6,\n \"auftragNr\": \"A-2026-0006\",\n \"ausgestelltAm\": 1773853200000,\n \"bezahlt\": false,\n \"bezahltAm\": null,\n \"id\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"rechnungNr\": \"R-2026-0005\",\n \"summeBrutto\": 912.0,\n \"summeNetto\": 760.0,\n \"ust\": 152.0\n },\n {\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n },\n {\n \"auftragId\": 3,\n \"auftragNr\": \"A-2026-0003\",\n \"ausgestelltAm\": 1770307200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1770309000000,\n \"id\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"rechnungNr\": \"R-2026-0003\",\n \"summeBrutto\": 100.8,\n \"summeNetto\": 84.0,\n \"ust\": 16.8\n },\n {\n \"auftragId\": 2,\n \"auftragNr\": \"A-2026-0002\",\n \"ausgestelltAm\": 1769069700000,\n \"bezahlt\": true,\n \"bezahltAm\": 1769680800000,\n \"id\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"rechnungNr\": \"R-2026-0002\",\n \"summeBrutto\": 434.88,\n \"summeNetto\": 362.4,\n \"ust\": 72.48\n },\n {\n \"auftragId\": 1,\n \"auftragNr\": \"A-2026-0001\",\n \"ausgestelltAm\": 1768409100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1768410000000,\n \"id\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"rechnungNr\": \"R-2026-0001\",\n \"summeBrutto\": 261.6,\n \"summeNetto\": 218.0,\n \"ust\": 43.6\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden rechnungen.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnungen.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#11]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/rechnungen/4 wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/rechnungen/4", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "rechnung-4.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnung-4.json" + }, + "vergleich": { + "golden": "{\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n}", + "modern": "{\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n}", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden rechnung-4.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnung-4.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#12]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/bericht/monat?jahr=2026 wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/bericht/monat?jahr=2026", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "bericht-monat-2026.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-monat-2026.json" + }, + "vergleich": { + "golden": "[\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 1,\n \"monatName\": \"Jänner\",\n \"umsatzBrutto\": 696.48,\n \"umsatzNetto\": 580.4\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 2,\n \"monatName\": \"Februar\",\n \"umsatzBrutto\": 100.8,\n \"umsatzNetto\": 84.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 3,\n \"monatName\": \"März\",\n \"umsatzBrutto\": 1726.8,\n \"umsatzNetto\": 1439.0\n },\n {\n \"anzahlAuftraege\": 1,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 4,\n \"monatName\": \"April\",\n \"umsatzBrutto\": 179.52,\n \"umsatzNetto\": 149.6\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 5,\n \"monatName\": \"Mai\",\n \"umsatzBrutto\": 408.0,\n \"umsatzNetto\": 340.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 6,\n \"monatName\": \"Juni\",\n \"umsatzBrutto\": 294.0,\n \"umsatzNetto\": 245.0\n },\n {\n \"anzahlAuftraege\": 5,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 7,\n \"monatName\": \"Juli\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 8,\n \"monatName\": \"August\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 9,\n \"monatName\": \"September\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 10,\n \"monatName\": \"Oktober\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 11,\n \"monatName\": \"November\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 12,\n \"monatName\": \"Dezember\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n }\n]", + "modern": "[\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 1,\n \"monatName\": \"Jänner\",\n \"umsatzBrutto\": 696.48,\n \"umsatzNetto\": 580.4\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 2,\n \"monatName\": \"Februar\",\n \"umsatzBrutto\": 100.8,\n \"umsatzNetto\": 84.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 3,\n \"monatName\": \"März\",\n \"umsatzBrutto\": 1726.8,\n \"umsatzNetto\": 1439.0\n },\n {\n \"anzahlAuftraege\": 1,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 4,\n \"monatName\": \"April\",\n \"umsatzBrutto\": 179.52,\n \"umsatzNetto\": 149.6\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 5,\n \"monatName\": \"Mai\",\n \"umsatzBrutto\": 408.0,\n \"umsatzNetto\": 340.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 6,\n \"monatName\": \"Juni\",\n \"umsatzBrutto\": 294.0,\n \"umsatzNetto\": 245.0\n },\n {\n \"anzahlAuftraege\": 5,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 7,\n \"monatName\": \"Juli\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 8,\n \"monatName\": \"August\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 9,\n \"monatName\": \"September\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 10,\n \"monatName\": \"Oktober\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 11,\n \"monatName\": \"November\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 12,\n \"monatName\": \"Dezember\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n }\n]", + "gleich": true + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden bericht-monat-2026.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-monat-2026.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:endpointMatchesGolden(java.lang.String, java.lang.String)]/[test-template-invocation:#13]", + "suite": "API (Lese-Endpunkte)", + "name": "GET /api/bericht/topkunden?jahr=2026 wie aufgezeichnet", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "endpointMatchesGolden" + }, + "endpunkt": "/api/bericht/topkunden?jahr=2026", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": { + "datei": "bericht-topkunden-2026.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-topkunden-2026.json" + }, + "vergleich": { + "golden": "[\n {\n \"anzahl_auftraege\": 1,\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"umsatz\": 912.0,\n \"vorname\": \"Karl\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"umsatz\": 814.8,\n \"vorname\": \"Elisabeth\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"umsatz\": 434.88,\n \"vorname\": \"Maria\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"umsatz\": 408.0,\n \"vorname\": null\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"umsatz\": 294.0,\n \"vorname\": \"Josef\"\n },\n {\n \"anzahl_auftraege\": 4,\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"umsatz\": 261.6,\n \"vorname\": \"Franz\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"umsatz\": 179.52,\n \"vorname\": \"Anna\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"umsatz\": 100.8,\n \"vorname\": \"Johann\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"umsatz\": 0,\n \"vorname\": \"Christine\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"umsatz\": 0,\n \"vorname\": \"Thomas\"\n }\n]", + "modern": "[\n {\n \"anzahl_auftraege\": 1,\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"umsatz\": 912.00,\n \"vorname\": \"Karl\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"umsatz\": 814.80,\n \"vorname\": \"Elisabeth\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"umsatz\": 434.88,\n \"vorname\": \"Maria\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"umsatz\": 408.00,\n \"vorname\": null\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"umsatz\": 294.00,\n \"vorname\": \"Josef\"\n },\n {\n \"anzahl_auftraege\": 4,\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"umsatz\": 261.60,\n \"vorname\": \"Franz\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"umsatz\": 179.52,\n \"vorname\": \"Anna\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"umsatz\": 100.80,\n \"vorname\": \"Johann\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"umsatz\": 0,\n \"vorname\": \"Christine\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"umsatz\": 0,\n \"vorname\": \"Thomas\"\n }\n]", + "legacy": "[\n {\n \"anzahl_auftraege\": 1,\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"umsatz\": 912.00,\n \"vorname\": \"Karl\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"umsatz\": 814.80,\n \"vorname\": \"Elisabeth\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"umsatz\": 434.88,\n \"vorname\": \"Maria\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"umsatz\": 408.00,\n \"vorname\": null\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"umsatz\": 294.00,\n \"vorname\": \"Josef\"\n },\n {\n \"anzahl_auftraege\": 4,\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"umsatz\": 261.60,\n \"vorname\": \"Franz\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"umsatz\": 179.52,\n \"vorname\": \"Anna\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"umsatz\": 100.80,\n \"vorname\": \"Johann\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"umsatz\": 0,\n \"vorname\": \"Christine\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"umsatz\": 0,\n \"vorname\": \"Thomas\"\n }\n]", + "gleich": false + }, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + }, + { + "label": "Golden bericht-topkunden-2026.json", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-topkunden-2026.json" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[method:adminPageMatchesGolden()]", + "suite": "API (Lese-Endpunkte)", + "name": "Adminseite: JSP-Golden (legacy) / SPA-Route + Statistik-JSON (modern, SD-2)", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "adminPageMatchesGolden" + }, + "endpunkt": "/admin + /api/admin/statistik", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": { + "datei": "admin.html", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/admin.html" + }, + "vergleich": { + "golden": "\n\n\n\n\n\t\n\tAdmin - KFZ-Werkstatt Moser GmbH\n\t\n\n\n\n\t

KFZ-Werkstatt Moser GmbH — Administration

\n\t

WerkstattCRM Version 1.4.2 · Stand: XX.XX.XXXX

\n\n\t\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
KennzahlWert
Kunden10
Fahrzeuge13
Aufträge gesamt16
Aufträge offen4
Rechnungen gesamt8
Rechnungen unbezahlt1
\n\n\t
\n\t\tBereinigung: Löscht stornierte Aufträge, die älter als 90 Tage sind.\n\t\tEndgültig, kein Papierkorb!

\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\t

Rohdaten (für Hrn. B. beim Telefonsupport):

\n\t
{\"rechnungenOffen\":1,\"kunden\":10,\"auftraegeOffen\":4,\"rechnungen\":8,\"auftraege\":16,\"stand\":\"XX.XX.XXXX\",\"fahrzeuge\":13}
\n\n\t

\n\t\tZur Werkstatt-Oberfläche\n\t

\n\n\n\n", + "modern": "{\n \"firmaName\": \"KFZ-Werkstatt Moser GmbH\",\n \"statistik\": {\n \"auftraege\": 16,\n \"auftraegeOffen\": 4,\n \"fahrzeuge\": 13,\n \"kunden\": 10,\n \"rechnungen\": 8,\n \"rechnungenOffen\": 1,\n \"stand\": \"21.10.2026\"\n },\n \"version\": \"1.4.2\"\n}", + "gleich": false + }, + "sanktion": { + "ref": "SD-2", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37", + "erklaerung": { + "ref": "SD-2", + "titel": "Adminseite", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "text": "Adminseite (SD-2, seit Etappe 5): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Registereintrag (englisch): Admin page: legacy serves the JSP at GET /admin (HTML golden master); modern serves the SPA shell there, numbers come from the new GET /api/admin/statistik, and POST /admin/bereinigen answers JSON instead of re-rendered JSP HTML. Unchanged and pinned identically on both stands: the /admin/bereinigen path, status 200, the exact German meldung, and the delete semantics (DB-state test). Begründung: Mandated by SPEC §4 / MILESTONES G5 (\"JSP-Adminseite absorbiert\") — the mixed server-rendered page is a wart the migration exists to remove; JSP/JSTL/gson die with it.", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "b41eaa6c2ba372e7f2f53bfeb3a847c44fe2895918b90e6d14d39d99b1ff3c49", + "diff_sha256": "02b69cbfeb9564ce5a034ffd007bf228bec7391d88297e810ef38fc204516a32", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L145" + }, + { + "label": "Golden admin.html", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/admin.html" + }, + { + "label": "Register SD-2", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[method:sucheMitEinzelnemHochkomma()]", + "suite": "API (Lese-Endpunkte)", + "name": "B4-Suche, einzelnes Hochkomma — sanktionierte Divergenz (ADR-0004)", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "sucheMitEinzelnemHochkomma" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "SD-1", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", + "erklaerung": { + "ref": "SD-1", + "titel": "Suche mit feindlicher Eingabe", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "text": "Suche mit feindlicher Eingabe (SD-1, seit Etappe 4): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Registereintrag (englisch): Hostile input to GET /api/kunden?suche= (and the ?status= filter): legacy is injectable, modern is parameterised. Pinned observed behaviour: %' OR '1'='1 → legacy 200/10 rows vs modern 200/0 rows; lone ' → legacy 500 (Boot error JSON naming java.lang.ArrayIndexOutOfBoundsException from the driver) vs modern 200/0 rows. Begründung: Security fix B4 — carrying an injection into the target stack to preserve bug-for-bug equality would be malpractice; equivalence holds for all legitimate inputs.", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "197190b818da4838f7559348f20f0ee1615b8ff6dc8d0e404a402bb62949543a", + "diff_sha256": "b59a8e9f1d71322f3b46043098518ef5d6ea68ae52b12ceefa0b98df220d8c5a", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L115" + }, + { + "label": "Register SD-1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[method:sucheMitInjektionsEingabe()]", + "suite": "API (Lese-Endpunkte)", + "name": "B4-Suche, Injektionseingabe %' OR '1'='1 — sanktionierte Divergenz (ADR-0004)", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "sucheMitInjektionsEingabe" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "SD-1", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", + "erklaerung": { + "ref": "SD-1", + "titel": "Suche mit feindlicher Eingabe", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "text": "Suche mit feindlicher Eingabe (SD-1, seit Etappe 4): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Registereintrag (englisch): Hostile input to GET /api/kunden?suche= (and the ?status= filter): legacy is injectable, modern is parameterised. Pinned observed behaviour: %' OR '1'='1 → legacy 200/10 rows vs modern 200/0 rows; lone ' → legacy 500 (Boot error JSON naming java.lang.ArrayIndexOutOfBoundsException from the driver) vs modern 200/0 rows. Begründung: Security fix B4 — carrying an injection into the target stack to preserve bug-for-bug equality would be malpractice; equivalence holds for all legitimate inputs.", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "197190b818da4838f7559348f20f0ee1615b8ff6dc8d0e404a402bb62949543a", + "diff_sha256": "b59a8e9f1d71322f3b46043098518ef5d6ea68ae52b12ceefa0b98df220d8c5a", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L94" + }, + { + "label": "Register SD-1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#1]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /start", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/start", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#2]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /kunden", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/kunden", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#3]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /kunden/neu", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/kunden/neu", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#4]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /kunden/1", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/kunden/1", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#5]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /fahrzeuge", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/fahrzeuge", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#6]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /auftraege", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/auftraege", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#7]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /auftraege/neu", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/auftraege/neu", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#8]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /auftraege/5", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/auftraege/5", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#9]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /rechnungen", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/rechnungen", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#10]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /rechnungen/4", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/rechnungen/4", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ApiCharacterizationTest]/[test-template:spaRouteServesDocument(java.lang.String)]/[test-template-invocation:#11]", + "suite": "API (Lese-Endpunkte)", + "name": "SPA-Dokumentroute /bericht", + "test": { + "klasse": "ApiCharacterizationTest", + "methode": "spaRouteServesDocument" + }, + "endpunkt": "/bericht", + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "sanktioniert", + "golden": null, + "vergleich": null, + "sanktion": { + "ref": "ADR-0009", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "erklaerung": { + "ref": "ADR-0009", + "titel": "Seitenadressen ohne #!", + "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", + "text": "Seitenadressen ohne #! (ADR-0009): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): Coexistence: one origin, the URL scheme is the seam — no ngUpgrade. The Angular app owns / with path routes from the first slice; the AngularJS app stays fully functional at /alt.html#!/… (its hash routing makes the split free). One route group migrates per commit; cross-overs are full page loads (Angular catch-all → /alt.html#!; the old app keeps a ported-routes list and hands over via window.location).", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "e34b751c9e71f5ccaeae1dfe082f7abe837f4e0bc5b7f61d12c60fe0830c9745", + "diff_sha256": "aa6f3d7343108e60088d8686a78f7ed3062c57896d6fe04da48bc60688468f54", + "date": "2026-10-21", + "review": "offen" + } + }, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + }, + { + "label": "Register ADR-0009", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:doppelteRechnung_liefert500MitMeldung()]", + "suite": "Fehlerkontrakt", + "name": "Doppelte rechnung — liefert500 mit meldung", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "doppelteRechnung_liefert500MitMeldung" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L74" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:kundeOhneNachname_liefert500AusDbConstraint()]", + "suite": "Fehlerkontrakt", + "name": "Kunde ohne nachname — liefert500 aus db constraint", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "kundeOhneNachname_liefert500AusDbConstraint" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L87" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:rechnungFuerNichtFertigenAuftrag_liefert500MitMeldung()]", + "suite": "Fehlerkontrakt", + "name": "Rechnung fuer nicht fertigen auftrag — liefert500 mit meldung", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "rechnungFuerNichtFertigenAuftrag_liefert500MitMeldung" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L64" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:unerlaubterStatuswechsel_liefert500MitDeutscherMeldung()]", + "suite": "Fehlerkontrakt", + "name": "Unerlaubter statuswechsel — liefert500 mit deutscher meldung", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "unerlaubterStatuswechsel_liefert500MitDeutscherMeldung" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L55" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[test-template:nichtVorhandeneRessource_liefert404OhneBody(java.lang.String)]/[test-template-invocation:#1]", + "suite": "Fehlerkontrakt", + "name": "GET /api/kunden/999 → 404 ohne Body", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "nichtVorhandeneRessource_liefert404OhneBody" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[test-template:nichtVorhandeneRessource_liefert404OhneBody(java.lang.String)]/[test-template-invocation:#2]", + "suite": "Fehlerkontrakt", + "name": "GET /api/auftraege/999 → 404 ohne Body", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "nichtVorhandeneRessource_liefert404OhneBody" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[test-template:nichtVorhandeneRessource_liefert404OhneBody(java.lang.String)]/[test-template-invocation:#3]", + "suite": "Fehlerkontrakt", + "name": "GET /api/rechnungen/999 → 404 ohne Body", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "nichtVorhandeneRessource_liefert404OhneBody" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[test-template:nichtVorhandeneRessource_liefert404OhneBody(java.lang.String)]/[test-template-invocation:#4]", + "suite": "Fehlerkontrakt", + "name": "GET /api/fahrzeuge/999 → 404 ohne Body", + "test": { + "klasse": "ErrorContractCharacterizationTest", + "methode": "nichtVorhandeneRessource_liefert404OhneBody" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:adminBereinigen_loeschtGenauStornierteAelterAls90Tage()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Admin bereinigen — loescht genau stornierte aelter als90 tage", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "adminBereinigen_loeschtGenauStornierteAelterAls90Tage" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L286" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:angenommenNachInArbeit_setztNurStatus()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Angenommen nach in arbeit — setzt nur status", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "angenommenNachInArbeit_setztNurStatus" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L72" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:angenommenNachStorniert_setztNurStatus()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Angenommen nach storniert — setzt nur status", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "angenommenNachStorniert_setztNurStatus" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L90" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:auftragAnlegen_schreibtAuftragUndAktualisiertFahrzeugKm()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Auftrag anlegen — schreibt auftrag und aktualisiert fahrzeug km", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "auftragAnlegen_schreibtAuftragUndAktualisiertFahrzeugKm" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L38" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:fertigNachAbgeholt_setztAbgeholtAmUndBehaeltFertigAm()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Fertig nach abgeholt — setzt abgeholt am und behaelt fertig am", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "fertigNachAbgeholt_setztAbgeholtAmUndBehaeltFertigAm" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L164" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:fertigZurueckInArbeit_sonderfallBehaeltFertigAm()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Fertig zurueck in arbeit — sonderfall behaelt fertig am", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "fertigZurueckInArbeit_sonderfallBehaeltFertigAm" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L144" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:inArbeitNachFertig_setztZeitstempel()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "In arbeit nach fertig — setzt zeitstempel", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "inArbeitNachFertig_setztZeitstempel" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L108" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:inArbeitNachStorniert_setztNurStatus()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "In arbeit nach storniert — setzt nur status", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "inArbeitNachStorniert_setztNurStatus" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L126" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:kundeLoeschen_hinterlaesstVerwaisteFahrzeuge()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Kunde loeschen — hinterlaesst verwaiste fahrzeuge", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "kundeLoeschen_hinterlaesstVerwaisteFahrzeuge" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L267" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungBezahlt_setztFlagUndZeitstempel()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Rechnung bezahlt — setzt flag und zeitstempel", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "rechnungBezahlt_setztFlagUndZeitstempel" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L247" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungErstellen_schreibtBetraegeUndNummer()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Rechnung erstellen — schreibt betraege und nummer", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "rechnungErstellen_schreibtBetraegeUndNummer" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L186" + } + ] + }, + { + "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungRundung_doppeltesRundenAmGrenzfall()]", + "suite": "DB-Zustand (Schreibpfade)", + "name": "Rechnung rundung — doppeltes runden am grenzfall", + "test": { + "klasse": "DbStateCharacterizationTest", + "methode": "rechnungRundung_doppeltesRundenAmGrenzfall" + }, + "endpunkt": null, + "legacy": { + "status": "bestanden" + }, + "modern": { + "status": "bestanden" + }, + "urteil": "identisch", + "golden": null, + "vergleich": null, + "sanktion": null, + "belege": [ + { + "label": "Test im Quelltext", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L209" + } + ] + } + ] + }, + "e2e": { + "legacy": { + "gesamt": 34, + "bestanden": 34, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 34, + "bestanden": 34, + "fehlgeschlagen": 0 + }, + "klassen": [ + { + "klasse": "AdminTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AdminTest.java", + "legacy": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "AuftragLebenszyklusTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragLebenszyklusTest.java", + "legacy": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "AuftragSonderfaelleTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragSonderfaelleTest.java", + "legacy": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "BerichtTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/BerichtTest.java", + "legacy": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "DashboardTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DashboardTest.java", + "legacy": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "DeepLinkTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DeepLinkTest.java", + "legacy": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "FahrzeugeTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/FahrzeugeTest.java", + "legacy": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "KundeDetailTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundeDetailTest.java", + "legacy": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "KundenCrudTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundenCrudTest.java", + "legacy": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "ListenFilterTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ListenFilterTest.java", + "legacy": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 3, + "bestanden": 3, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "RechnungTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/RechnungTest.java", + "legacy": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 4, + "bestanden": 4, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "SelectorMapParityTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/selectors/SelectorMapParityTest.java", + "legacy": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 1, + "bestanden": 1, + "fehlgeschlagen": 0 + } + }, + { + "klasse": "ValidierungTest", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ValidierungTest.java", + "legacy": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + }, + "modern": { + "gesamt": 2, + "bestanden": 2, + "fehlgeschlagen": 0 + } + } + ], + "sanktionen": [ + { + "ref": "SD-3", + "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L38", + "erklaerung": { + "ref": "SD-3", + "titel": "Meldung bei abgelehnter Aktion", + "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", + "text": "Meldung bei abgelehnter Aktion (SD-3, seit Etappe 5): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; beide Seiten sind durch einen Test festgehalten. Registereintrag (englisch): Alert on server-rejected actions (pinned instance: duplicate invoice): legacy shows literally undefined (Boot 1.5 labels the plain-string 500 body as JSON → AngularJS $http:baddata → alert(fehler.data) of an Error); modern shows the backend's German message. Both UI behaviours pinned by e2e via per-stand map values (alert.rechnungDuplikat); the HTTP contract itself is identical on both stands and pinned by error-contract characterization. Begründung: The legacy display is a defect (flagged at stage 1, e2e/README \"formatting contract\"); reproducing it in the new UI would preserve a bug users suffer from, not behaviour they rely on.", + "source": "register", + "model": null, + "prompt_sha256": null, + "register_sha256": "f7d72fcd110aa2a020814ea626d5e77c70cff607b7eefe9818c2a1cb8fb9456b", + "diff_sha256": "6776ba88892bfe5f1048d0e01db8610831850b9603cac1e1f578459995eb2f73", + "date": "2026-10-21", + "review": "offen" + } + } + ] + }, + "imageScan": { + "werkzeug": "Trivy", + "schweregrade": "CRITICAL, HIGH", + "nurBehebbar": true, + "gesamt": 12, + "ziele": [ + { + "ziel": "Java", + "typ": "jar", + "anzahl": 8 + }, + { + "ziel": "usr/bin/pebble", + "typ": "gobinary", + "anzahl": 4 + } + ] + } +} diff --git a/modern/frontend/src/app/app.routes.ts b/modern/frontend/src/app/app.routes.ts index fba5b51..ee1fbbe 100644 --- a/modern/frontend/src/app/app.routes.ts +++ b/modern/frontend/src/app/app.routes.ts @@ -8,6 +8,7 @@ import { Bericht } from './bericht/bericht'; import { Dashboard } from './dashboard/dashboard'; import { Fahrzeuge } from './fahrzeuge/fahrzeuge'; import { Kunden } from './kunden/kunden'; +import { NachweisSeite } from './nachweis/nachweis'; import { KundeDetail } from './kunden/kunde-detail'; import { Rechnungen } from './rechnungen/rechnungen'; import { RechnungDetail } from './rechnungen/rechnung-detail'; @@ -27,6 +28,8 @@ export const routes: Routes = [ { path: 'rechnungen/:id', component: RechnungDetail }, { path: 'bericht', component: Bericht }, { path: 'admin', component: Admin }, + // not part of the 2016 app: the demo's evidence page (scripts/nachweis/, docs/demo.md) + { path: 'nachweis', component: NachweisSeite }, { path: '', pathMatch: 'full', redirectTo: 'start' }, { path: '**', redirectTo: 'start' }, ]; diff --git a/modern/frontend/src/app/dashboard/dashboard.html b/modern/frontend/src/app/dashboard/dashboard.html index 42ae0c4..40044e7 100644 --- a/modern/frontend/src/app/dashboard/dashboard.html +++ b/modern/frontend/src/app/dashboard/dashboard.html @@ -1,3 +1,15 @@ + +

Übersicht

diff --git a/modern/frontend/src/app/nachweis/nachweis-daten.ts b/modern/frontend/src/app/nachweis/nachweis-daten.ts new file mode 100644 index 0000000..d268ced --- /dev/null +++ b/modern/frontend/src/app/nachweis/nachweis-daten.ts @@ -0,0 +1,83 @@ +/** Shape of /nachweis.json, written by scripts/nachweis/aggregate.mjs from the CI results. */ + +export type Urteil = 'identisch' | 'sanktioniert' | 'regression' | 'unvollstaendig'; + +export interface Ergebnis { + status: 'bestanden' | 'fehlgeschlagen' | 'abgebrochen' | 'deaktiviert' | 'fehlt'; + meldung?: string; +} + +export interface Beleg { + label: string; + url: string; +} + +export interface Erklaerung { + ref: string; + titel: string; + text: string; + source: 'openrouter' | 'register'; + model: string | null; + prompt_sha256: string | null; + register_sha256: string; + date: string; + review: string; +} + +export interface Sanktion { + ref: string; + quelle: string; + url: string | null; + erklaerung: Erklaerung | null; +} + +export interface Zeile { + id: string; + suite: string; + name: string; + test: { klasse: string; methode: string | null }; + endpunkt: string | null; + legacy: Ergebnis; + modern: Ergebnis; + urteil: Urteil; + golden: { datei: string; url: string | null } | null; + vergleich: { golden: string; modern: string | null; legacy?: string; gleich: boolean } | null; + sanktion: Sanktion | null; + belege: Beleg[]; +} + +export interface Summe { + gesamt: number; + bestanden: number; + fehlgeschlagen: number; +} + +export interface Nachweis { + schema: number; + erzeugt: string; + repo: string; + commit: { sha: string; url: string } | null; + ciLauf: { url: string } | null; + register: { deviations: string | null; adr0004: string | null }; + charakterisierung: { + gesamt: number; + identisch: number; + sanktioniert: number; + regression: number; + unvollstaendig: number; + zeilen: Zeile[]; + }; + e2e: { + legacy: Summe | null; + modern: Summe | null; + klassen: { klasse: string; url: string | null; legacy: Summe | null; modern: Summe | null }[]; + sanktionen: { ref: string; url: string | null; erklaerung: Erklaerung | null }[]; + }; + imageScan: { + werkzeug: string; + schweregrade: string; + nurBehebbar: boolean; + gesamt: number; + ziele: { ziel: string; typ: string; anzahl: number }[]; + } | null; +} diff --git a/modern/frontend/src/app/nachweis/nachweis.css b/modern/frontend/src/app/nachweis/nachweis.css new file mode 100644 index 0000000..4d407ee --- /dev/null +++ b/modern/frontend/src/app/nachweis/nachweis.css @@ -0,0 +1,96 @@ +.nachweis-einleitung { + max-width: 60em; +} +.nachweis-herkunft { + color: #555; +} +.nachweis-zahl { + font-size: 32px; + margin-bottom: 0; +} +.nachweis-legende li { + margin-bottom: 4px; +} +.nachweis-legende .urteil { + margin-right: 6px; +} +/* verdict colours: Bootstrap 3 alert palette, text contrast >= 4.5:1 on its background */ +.urteil { + display: inline-block; + padding: 1px 6px; + border-radius: 3px; + font-size: 12px; + border: 1px solid transparent; + white-space: nowrap; +} +.urteil-identisch { + background: #dff0d8; + color: #2b542c; + border-color: #b2dba1; +} +.urteil-sanktioniert { + background: #fcf8e3; + color: #66512c; + border-color: #e6d28a; +} +.urteil-regression { + background: #f2dede; + color: #843534; + border-color: #dca7a7; +} +.urteil-unvollstaendig { + background: #eee; + color: #333; + border-color: #ccc; +} +.zeile-identisch { + border-left: 4px solid #3c763d; +} +.zeile-sanktioniert { + border-left: 4px solid #8a6d3b; +} +.zeile-regression { + border-left: 4px solid #a94442; +} +.status-fehlgeschlagen, +.status-abgebrochen, +.status-fehlt { + color: #a94442; + font-weight: bold; +} +.nachweis-umschalter { + padding: 0; + text-align: left; + white-space: normal; +} +.nachweis-ref { + font-size: 12px; + color: #555; +} +.nachweis-detail > td { + background: #fafafa; +} +.nachweis-vergleich pre { + max-height: 420px; + overflow: auto; + font-size: 12px; +} +.nachweis-vergleich pre span { + display: block; + min-height: 1em; +} +.nachweis-vergleich .anders { + background: #f2dede; + color: #843534; +} +.nachweis-erklaerung { + max-width: 60em; +} +.nachweis-provenienz, +.nachweis-hinweis { + font-size: 12px; + color: #555; +} +.nachweis-meldung { + white-space: pre-wrap; +} diff --git a/modern/frontend/src/app/nachweis/nachweis.html b/modern/frontend/src/app/nachweis/nachweis.html new file mode 100644 index 0000000..46a0fcc --- /dev/null +++ b/modern/frontend/src/app/nachweis/nachweis.html @@ -0,0 +1,338 @@ +

Äquivalenz-Nachweis

+ +

+ Dieselben Tests laufen gegen den Stand von 2016 und gegen den modernen Stand. Diese Seite zeigt + das Ergebnis eines CI-Laufs, Test für Test. Jede Zeile verweist auf den Quelltext und die + Aufzeichnung, auf die sie sich stützt. +

+ +@if (fehler()) { + +} + +@if (daten(); as d) { +

+ Erzeugt am {{ d.erzeugt | date: 'dd.MM.yyyy, HH:mm' }} + @if (d.commit) { + · Commit {{ kurzSha() }} + } + @if (d.ciLauf) { + · CI-Lauf + } + · Repository · + Rohdaten (JSON) +

+ +
+
+
+
Charakterisierungstests
+
+

+ {{ d.charakterisierung.gesamt }} +

+

je Test einmal gegen jeden Stand

+
    +
  • + identisch + {{ + d.charakterisierung.identisch + }} + — auf beiden Ständen grün, gleiche Erwartung +
  • +
  • + sanktionierte Abweichung + {{ + d.charakterisierung.sanktioniert + }} + — absichtlich anders, beide Seiten festgehalten, Eintrag im Register +
  • +
  • + Regression + {{ + d.charakterisierung.regression + }} + — ein Stand weicht vom festgehaltenen Verhalten ab +
  • + @if (d.charakterisierung.unvollstaendig > 0) { +
  • + unvollständig + {{ d.charakterisierung.unvollstaendig }} + — für einen Stand liegt kein Ergebnis vor +
  • + } +
+
+
+
+
+
+
Selenium-E2E-Tests
+
+

Dieselbe Suite gegen beide Oberflächen.

+ + + + + + + + + + + +
Stand 2016 + @if (d.e2e.legacy; as s) { + {{ s.bestanden }} von {{ s.gesamt }} grün + } @else { + kein Ergebnis + } +
Moderner Stand + @if (d.e2e.modern; as s) { + {{ s.bestanden }} von {{ s.gesamt }} grün + } @else { + kein Ergebnis + } +
+
+
+
+
+
+
Image-Scan
+
+ @if (d.imageScan; as scan) { +

{{ scan.gesamt }}

+

+ Funde im Image des modernen Standes ({{ scan.werkzeug }}, {{ scan.schweregrade }}, nur + behebbare). Der Scan berichtet, er blockiert nicht; + @if (d.register.deviations) { + Begründung im Register. + } @else { + Begründung im Register. + } +

+ @if (scan.ziele.length > 0) { +
    + @for (z of scan.ziele; track z.ziel) { +
  • + {{ z.ziel }}: {{ z.anzahl }} +
  • + } +
+ } + } @else { +

Für diesen Lauf liegt kein Scan-Ergebnis vor.

+ } +
+
+
+
+ +

Charakterisierung, Test für Test

+

+ Ein Klick auf den Testnamen zeigt die Aufzeichnung des Standes von 2016 neben der Antwort des + modernen Standes, oder die Begründung einer sanktionierten Abweichung. +

+ +
+ + + + + + + + + + + + + + @for (zeile of zeilen(); track zeile.id) { + + + + + + + + + + @if (offen() === zeile.id) { + + + + } + } + +
BereichTestGolden / Endpunkt2016ModernUrteilBeleg
{{ zeile.suite }} + + + @if (zeile.golden) { + {{ zeile.golden.datei }} + } + @if (zeile.endpunkt) { +
+ {{ zeile.endpunkt }} +
+ } +
{{ statusText(zeile.legacy.status) }}{{ statusText(zeile.modern.status) }} + {{ urteilText(zeile.urteil) }} + @if (zeile.sanktion) { +
{{ zeile.sanktion.ref }}
+ } +
+ @for (b of zeile.belege; track b.url) { + + } +
+ @if (zeile.sanktion; as s) { +
+

{{ s.erklaerung?.titel ?? s.ref }} ({{ s.ref }})

+ @if (s.erklaerung; as e) { +

{{ e.text }}

+

+ @if (e.source === 'openrouter') { + Formuliert von {{ e.model }} am {{ e.date }} aus Registereintrag und + Testauszug (Prompt-Hash {{ e.prompt_sha256?.slice(0, 12) }}). + } @else { + Zusammengestellt aus dem Registereintrag am {{ e.date }}, ohne Modell. + } + Maßgeblich ist der + @if (s.url) { + Registereintrag. + } @else { + Registereintrag. + } +

+ } +
+ } + @for (m of [zeile.legacy, zeile.modern]; track $index) { + @if (m.meldung) { +

+ {{ $index === 0 ? 'Stand 2016' : 'Moderner Stand' }}: + {{ m.meldung }} +

+ } + } + @if (zeile.vergleich; as v) { +
+
+
Golden: Aufzeichnung des Standes von 2016
+
@for (z of vergleich(zeile); track $index) {{{ z.links }}}
+
+
+
Antwort des modernen Standes in diesem Lauf
+ @if (v.modern !== null) { +
@for (z of vergleich(zeile); track $index) {{{ z.rechts }}}
+ } @else { +

Keine Antwort aufgezeichnet.

+ } +
+
+

+ Schlüssel alphabetisch sortiert, Zahlen in der gesendeten Schreibweise. Der Test + vergleicht JSON-Bäume: Reihenfolge der Schlüssel und Leerzeichen zählen nicht, + Werte und Reihenfolge in Listen schon. Zahlen zählen als Wert, nicht als + Schreibweise (912.0 = 912.00). + @if (v.gleich) { + In diesem Lauf sind beide Seiten gleich. + } +

+ } +
+
+ +

Selenium-E2E, nach Testklasse

+ + + + + + + + + + + @for (k of d.e2e.klassen; track k.klasse) { + + + + + + + } + +
Testklasse2016ModernBeleg
+ {{ k.klasse }} + + @if (k.legacy; as s) { + {{ s.bestanden }} / {{ s.gesamt }} + } @else { + – + } + + @if (k.modern; as s) { + {{ s.bestanden }} / {{ s.gesamt }} + } @else { + – + } + + @if (k.url) { + Quelltext + } +
+ @for (s of d.e2e.sanktionen; track s.ref) { + @if (s.erklaerung; as e) { +
+

{{ e.titel }} ({{ s.ref }}), sanktionierte Abweichung in der Oberfläche

+

{{ e.text }}

+ @if (s.url) { +

+ Maßgeblich ist der Registereintrag. +

+ } +
+ } + } + +

Was diese Seite nicht zeigt

+
    +
  • + Eine grüne Suite belegt, was sie prüft, und nichts darüber hinaus. Aussehen und vom Browser + blockierte Styles sieht sie nicht; das steht als Grenze des Netzes im Register. +
  • +
  • + Die Seite zeigt den eingecheckten Stand eines CI-Laufs. Sie wird nicht bei jedem Aufruf neu + berechnet; Commit und CI-Lauf oben nennen, woher die Zahlen stammen. +
  • +
  • + Die Erklärungen zu sanktionierten Abweichungen sind Lesehilfen. Maßgeblich ist der jeweilige + Registereintrag. +
  • +
+} diff --git a/modern/frontend/src/app/nachweis/nachweis.ts b/modern/frontend/src/app/nachweis/nachweis.ts new file mode 100644 index 0000000..ec818bc --- /dev/null +++ b/modern/frontend/src/app/nachweis/nachweis.ts @@ -0,0 +1,91 @@ +import { Component, OnInit, computed, inject, signal } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { HttpClient } from '@angular/common/http'; + +import { Nachweis, Urteil, Zeile } from './nachweis-daten'; + +const URTEIL_TEXT: Record = { + identisch: 'identisch', + sanktioniert: 'sanktionierte Abweichung', + regression: 'Regression', + unvollstaendig: 'unvollständig', +}; + +const STATUS_TEXT: Record = { + bestanden: 'grün', + fehlgeschlagen: 'rot', + abgebrochen: 'abgebrochen', + deaktiviert: 'deaktiviert', + fehlt: 'kein Ergebnis', +}; + +/** Number literals compared as values, like the test does (912.0 and 912.00 are equal). */ +function zahlenNormiert(zeile: string): string { + return zeile.replace( + /(:\s*|^\s*)(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)(,?)$/, + (_, a, n, b) => a + Number(n) + b, + ); +} + +/** One line of a side-by-side view; `anders` marks lines that differ at the same position. */ +interface VergleichsZeile { + links: string; + rechts: string; + anders: boolean; +} + +/** + * Äquivalenz-Nachweis — the result of one CI run, test by test, as committed in + * /nachweis.json (scripts/nachweis/). Read-only, no backend call: the page shows evidence + * that was produced and reviewed before deployment, never anything computed at request time. + */ +@Component({ + selector: 'app-nachweis', + imports: [DatePipe], + templateUrl: './nachweis.html', + styleUrl: './nachweis.css', +}) +export class NachweisSeite implements OnInit { + private readonly http = inject(HttpClient); + + protected readonly daten = signal(null); + protected readonly fehler = signal(false); + protected readonly offen = signal(null); + + protected readonly zeilen = computed(() => this.daten()?.charakterisierung.zeilen ?? []); + protected readonly kurzSha = computed(() => this.daten()?.commit?.sha.slice(0, 7) ?? ''); + + ngOnInit(): void { + this.http.get('nachweis.json').subscribe({ + next: (d) => this.daten.set(d), + error: () => this.fehler.set(true), + }); + } + + protected umschalten(zeile: Zeile): void { + this.offen.set(this.offen() === zeile.id ? null : zeile.id); + } + + protected urteilText(u: Urteil): string { + return URTEIL_TEXT[u]; + } + + protected statusText(s: string): string { + return STATUS_TEXT[s] ?? s; + } + + protected vergleich(zeile: Zeile): VergleichsZeile[] { + const v = zeile.vergleich; + if (!v) { + return []; + } + const links = v.golden.split('\n'); + const rechts = (v.modern ?? '').split('\n'); + const n = Math.max(links.length, rechts.length); + return Array.from({ length: n }, (_, i) => ({ + links: links[i] ?? '', + rechts: rechts[i] ?? '', + anders: zahlenNormiert(links[i] ?? '') !== zahlenNormiert(rechts[i] ?? ''), + })); + } +} diff --git a/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java b/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java index 06f28b9..8440f26 100644 --- a/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java +++ b/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java @@ -7,7 +7,9 @@ * Stage 5 (Strangler Fig, ADR-0009): the Angular UI uses path routing, so every route the SPA owns * must be answered with the SPA shell — a deep link or reload would otherwise 404. One mapping is * added per ported route slice; the list is the server-side mirror of - * frontend/src/app/app.routes.ts. + * frontend/src/app/app.routes.ts. {@code /nachweis} is the demo's evidence page, not a route of + * the 2016 app; its document route is pinned by the e2e page test (tag "nachweis"), not by the + * characterization suite, whose test count is part of what the page reports. */ @Controller public class SpaForwardController { @@ -24,7 +26,8 @@ public class SpaForwardController { "/rechnungen", "/rechnungen/{id:\\d+}", "/bericht", - "/admin" + "/admin", + "/nachweis" }) public String spa() { return "forward:/index.html"; diff --git a/scripts/nachweis/aggregate.mjs b/scripts/nachweis/aggregate.mjs index 77cf0b8..c2d5451 100644 --- a/scripts/nachweis/aggregate.mjs +++ b/scripts/nachweis/aggregate.mjs @@ -39,13 +39,6 @@ const find = (name) => files.find((f) => basename(f) === name); const readJson = (p) => (p ? JSON.parse(readFileSync(p, 'utf8')) : null); // ---------- characterization ---------- -const legacy = readJson(find('characterization-legacy.json')); -const modern = readJson(find('characterization-modern.json')); -const byId = (doc) => new Map((doc?.tests ?? []).map((t) => [t.id, t])); -const L = byId(legacy); -const M = byId(modern); -const ids = [...new Set([...L.keys(), ...M.keys()])].sort(compareIds); - const SUITE = { ApiCharacterizationTest: 'API (Lese-Endpunkte)', ErrorContractCharacterizationTest: 'Fehlerkontrakt', @@ -59,6 +52,13 @@ function compareIds(a, b) { return a.localeCompare(b, 'en', { numeric: true }); } +const legacy = readJson(find('characterization-legacy.json')); +const modern = readJson(find('characterization-modern.json')); +const byId = (doc) => new Map((doc?.tests ?? []).map((t) => [t.id, t])); +const L = byId(legacy); +const M = byId(modern); +const ids = [...new Set([...L.keys(), ...M.keys()])].sort(compareIds); + const CHAR_SRC = 'characterization/src/test/java/at/stoicera/migrationlab/characterization'; const GOLDEN_DIR = 'characterization/src/test/resources/golden'; const lineOf = (path, needle) => { @@ -74,17 +74,45 @@ const erklaerungen = readJson(existsSync(join(ROOT, 'docs/nachweis/erklaerungen. const erklaerung = (ref) => erklaerungen.eintraege.find((e) => e.ref === ref) ?? null; const registerLink = (ref, quelle) => at(quelle, lineOf(quelle, ref.startsWith('SD-') ? `| ${ref} |` : `# ${ref}`)); +// JSON with sorted keys and number literals kept verbatim (84.0 stays 84.0) function canonical(text) { - try { - const sort = (v) => - Array.isArray(v) ? v.map(sort) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().map((k) => [k, sort(v[k])])) : v; - return JSON.stringify(sort(JSON.parse(text)), null, 2); - } catch { - return text; - } + let i = 0; + const ws = () => { while (/\s/.test(text[i])) i++; }; + const value = () => { + ws(); + const c = text[i]; + if (c === '{') { + i++; const o = []; ws(); + if (text[i] === '}') { i++; return { o }; } + for (;;) { ws(); const k = str(); ws(); i++; o.push([k, value()]); ws(); if (text[i++] === '}') return { o }; } + } + if (c === '[') { + i++; const a = []; ws(); + if (text[i] === ']') { i++; return { a }; } + for (;;) { a.push(value()); ws(); if (text[i++] === ']') return { a }; } + } + if (c === '"') return { s: str() }; + const m = /^(-?\d+(\.\d+)?([eE][+-]?\d+)?|true|false|null)/.exec(text.slice(i)); + if (!m) throw new Error(`not JSON at ${i}`); + i += m[0].length; return { r: m[0] }; + }; + const str = () => { + let j = i + 1; + while (text[j] !== '"') j += text[j] === '\\' ? 2 : 1; + const s = JSON.parse(text.slice(i, j + 1)); i = j + 1; return s; + }; + const out = (v, ind) => { + const pad = ' '.repeat(ind + 1), end = ' '.repeat(ind); + if (v.o) return v.o.length === 0 ? '{}' : '{\n' + [...v.o].sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)).map(([k, x]) => `${pad}${JSON.stringify(k)}: ${out(x, ind + 1)}`).join(',\n') + `\n${end}}`; + if (v.a) return v.a.length === 0 ? '[]' : '[\n' + v.a.map((x) => pad + out(x, ind + 1)).join(',\n') + `\n${end}]`; + if ('s' in v) return JSON.stringify(v.s); + return v.r; + }; + try { const v = value(); return out(v, 0); } catch { return text; } } const humanize = (t) => { + if (t.methode === 'endpointMatchesGolden' && t.endpunkt) return `GET ${t.endpunkt} wie aufgezeichnet`; if (!t.methode || t.name !== `${t.methode}()`) return t.name; const [was, ...rest] = t.methode.split('_'); const words = (s) => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase(); @@ -151,6 +179,13 @@ const zeilen = ids.map((id) => { belege: belege.filter((b) => b.url), }; }); +// golden-master rows first, sanctioned forks after them, per suite +zeilen.sort( + (a, b) => + SUITE_ORDER.indexOf(a.test.klasse) - SUITE_ORDER.indexOf(b.test.klasse) || + (a.sanktion ? 1 : 0) - (b.sanktion ? 1 : 0) || + compareIds(a.id, b.id), +); const zaehle = (u) => zeilen.filter((z) => z.urteil === u).length; // ---------- e2e (surefire XML) ---------- diff --git a/scripts/nachweis/erklaerungen.mjs b/scripts/nachweis/erklaerungen.mjs new file mode 100644 index 0000000..78da72f --- /dev/null +++ b/scripts/nachweis/erklaerungen.mjs @@ -0,0 +1,175 @@ +#!/usr/bin/env node +// Erklärungen für sanktionierte Abweichungen — build-time, committed, reviewed. Never at request time. +// +// node scripts/nachweis/erklaerungen.mjs # writes docs/nachweis/erklaerungen.json +// +// For every sanctioned divergence the script reads the register entry (ADR-0004 table row, or the +// ADR that sanctions it) and the forked test expectation ("the diff": what each stand is pinned to), +// and writes one German paragraph per entry with provenance fields. +// +// OPENROUTER_API_KEY set → the paragraph is formulated by a model via OpenRouter +// (source: openrouter, model, prompt_sha256, date). +// Model: NACHWEIS_MODEL, default mistralai/mistral-large-2512 — a config +// value, not a code dependency; any OpenRouter model id works. +// no key → the paragraph is composed deterministically from the register text +// (source: register). Same fields, no model. +// +// Locally the key comes from 1Password, never from a file: +// OPENROUTER_API_KEY=$(op read op://Agents/OpenRouter/credential) node scripts/nachweis/erklaerungen.mjs +// +// The register entry stays authoritative; the paragraph is a reading aid. register_sha256 pins the +// exact register text it was derived from, so a later register change is visible as drift. + +import { readFileSync, writeFileSync } from 'node:fs'; +import { createHash } from 'node:crypto'; + +const ADR4 = 'docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md'; +const ADR9 = 'docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md'; +const API_TEST = 'characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java'; +const OUT = 'docs/nachweis/erklaerungen.json'; +const MODEL = process.env.NACHWEIS_MODEL || 'mistralai/mistral-large-2512'; +const sha256 = (s) => createHash('sha256').update(s).digest('hex'); +const read = (p) => readFileSync(p, 'utf8'); + +function registerRow(ref) { + const row = read(ADR4).split("\n").map((l) => l.trim()).find((l) => l.startsWith(`| ${ref} |`)); + if (!row) throw new Error(`${ref} not found in ${ADR4}`); + const [, seit, abweichung, grund] = row.split(' | ').map((c) => c.replace(/^\| ?| ?\|$/g, '').trim()); + return { seit, abweichung, grund, text: row }; +} + +/** Body of a test method — the forked expectation is the diff between the stands. */ +function methodBody(path, name) { + const src = read(path); + const start = src.indexOf(`void ${name}(`); + if (start < 0) throw new Error(`${name} not found in ${path}`); + let depth = 0; + for (let i = src.indexOf('{', start); i < src.length; i++) { + if (src[i] === '{') depth++; + if (src[i] === '}' && --depth === 0) return src.slice(start, i + 1); + } + throw new Error(`unbalanced ${name}`); +} + +function adr9Decision1() { + const src = read(ADR9); + const from = src.indexOf('1. **Coexistence'); + return src.slice(from, src.indexOf('2. **', from)).trim(); +} + +const prop = (file, key) => read(file).split('\n').find((l) => l.startsWith(`${key}=`)); + +const EINTRAEGE = [ + { + ref: 'SD-1', + titel: 'Suche mit feindlicher Eingabe', + quelle: ADR4, + register: () => registerRow('SD-1').text, + diff: () => methodBody(API_TEST, 'sucheMitInjektionsEingabe') + '\n\n' + methodBody(API_TEST, 'sucheMitEinzelnemHochkomma'), + }, + { + ref: 'SD-2', + titel: 'Adminseite', + quelle: ADR4, + register: () => registerRow('SD-2').text, + diff: () => methodBody(API_TEST, 'adminPageMatchesGolden'), + }, + { + ref: 'SD-3', + titel: 'Meldung bei abgelehnter Aktion', + quelle: ADR4, + register: () => registerRow('SD-3').text, + diff: () => + [ + 'legacy: ' + prop('e2e/src/test/resources/selectors/legacy.properties', 'alert.rechnungDuplikat'), + 'modern: ' + prop('e2e/src/test/resources/selectors/modern.properties', 'alert.rechnungDuplikat'), + ].join('\n'), + }, + { + ref: 'ADR-0009', + titel: 'Seitenadressen ohne #!', + quelle: ADR9, + register: adr9Decision1, + diff: () => methodBody(API_TEST, 'spaRouteServesDocument'), + }, +]; + +const SYSTEM = [ + 'Du erklärst einer IT-Leitung oder Geschäftsführung in Österreich eine absichtliche Verhaltensänderung', + 'zwischen einer Altanwendung (Stand 2016) und ihrer modernisierten Fassung.', + 'Regeln: genau ein Absatz, drei bis fünf Sätze, österreichisches Standarddeutsch, sachlich und ruhig.', + 'Keine Superlative, keine Werbesprache, keine Aufzählungen, kein Markdown.', + 'Verwende nur Fakten aus dem Registereintrag und dem Testauszug; erfinde keine Zahlen, Kunden oder Folgen.', + 'Sag, was sich unterscheidet, warum es absichtlich so ist, und dass beide Seiten durch einen Test festgehalten sind.', + 'Technische Begriffe nur, wenn nötig, dann kurz erklärt.', +].join(' '); + +async function viaOpenRouter(e, register, diff) { + const messages = [ + { role: 'system', content: SYSTEM }, + { role: 'user', content: `Registereintrag (${e.ref}, ${e.quelle}):\n${register}\n\nFestgehaltenes Verhalten je Stand (Testauszug):\n${diff}` }, + ]; + const body = { model: MODEL, messages, temperature: 0.2, max_tokens: 400 }; + const res = await fetch('https://openrouter.ai/api/v1/chat/completions', { + method: 'POST', + headers: { Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`, 'Content-Type': 'application/json', 'X-Title': 'migration-lab Nachweis' }, + body: JSON.stringify(body), + }); + if (!res.ok) throw new Error(`OpenRouter ${res.status}: ${await res.text()}`); + const json = await res.json(); + return { + text: json.choices[0].message.content.trim().replace(/\s*\n+\s*/g, ' '), + model: json.model ?? MODEL, + prompt_sha256: sha256(JSON.stringify(messages)), + }; +} + +function ausRegister(e, register) { + const plain = (t) => t.replace(/\s*\*\(.*?\)\*/g, '').replace(/\*\*|`/g, '').replace(/\s+/g, ' ').trim().replace(/([^.!?])$/, '$1.'); + const zeile = e.ref.startsWith('SD-') ? registerRow(e.ref) : null; + // ADR-0009: the first two sentences of decision 1 carry the change; the rest is rationale + const entscheidung = zeile ? null : plain(register.replace(/^1\.\s*/, '')).split(/(?<=\.)\s+/).slice(0, 3).join(' '); + const text = zeile + ? `${e.titel} (${e.ref}, seit ${zeile.seit.replace('stage', 'Etappe')}): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; ` + + `beide Seiten sind durch einen Test festgehalten. Registereintrag (englisch): ${plain(zeile.abweichung)} Begründung: ${plain(zeile.grund)}` + : `${e.titel} (${e.ref}): Der moderne Stand verhält sich hier absichtlich anders als der Stand von 2016; ` + + `beide Seiten sind durch einen Test festgehalten. Entscheidung (englisch): ${entscheidung}`; + return { text, model: null, prompt_sha256: null }; +} + +const useModel = Boolean(process.env.OPENROUTER_API_KEY); +const heute = new Date().toISOString().slice(0, 10); +const eintraege = []; +for (const e of EINTRAEGE) { + const register = e.register(); + const diff = e.diff(); + const r = useModel ? await viaOpenRouter(e, register, diff) : ausRegister(e, register); + eintraege.push({ + ref: e.ref, + titel: e.titel, + quelle: e.quelle, + text: r.text, + source: useModel ? 'openrouter' : 'register', + model: r.model, + prompt_sha256: r.prompt_sha256, + register_sha256: sha256(register), + diff_sha256: sha256(diff), + date: heute, + review: 'offen', + }); + console.log(`${e.ref}: ${useModel ? r.model : 'register'} — ${r.text.length} Zeichen`); +} +writeFileSync( + OUT, + JSON.stringify( + { + hinweis: + 'Lesehilfe zu sanktionierten Abweichungen, erzeugt zur Build-Zeit von scripts/nachweis/erklaerungen.mjs, im Review geprüft. Maßgeblich ist der Registereintrag.', + systemPrompt: SYSTEM, + eintraege, + }, + null, + 2, + ) + '\n', +); +console.log(`→ ${OUT}`); diff --git a/scripts/nachweis/refresh.sh b/scripts/nachweis/refresh.sh new file mode 100755 index 0000000..381616c --- /dev/null +++ b/scripts/nachweis/refresh.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Refreshes the committed /nachweis evidence from CI. The deployed page shows +# modern/frontend/public/nachweis.json; deploy.yml cannot produce it itself, because the +# report needs both stands running and both suites executed (that is what modern-ci, +# legacy-ci and e2e do). So the evidence is produced by CI and committed through a PR. +# +# scripts/nachweis/refresh.sh # latest successful modern-ci run on master +# scripts/nachweis/refresh.sh # a specific modern-ci run (e.g. of a PR) +# +# Then: review the diff (counts, verdicts), commit on a branch, open a PR. The file names +# the commit and the CI run it came from; that pair, not the deploy time, is what it proves. +set -euo pipefail +cd "$(git rev-parse --show-toplevel)" +run="${1:-}" +if [ -z "$run" ]; then + run=$(gh run list --workflow modern-ci.yml --branch master --status success --limit 1 \ + --json databaseId --jq '.[0].databaseId') +fi +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT +gh run download "$run" -n nachweis -D "$tmp" +cp "$tmp/nachweis.json" modern/frontend/public/nachweis.json +node -e ' +const d = require("./modern/frontend/public/nachweis.json"), c = d.charakterisierung; +console.log(`run ${process.argv[1]} · commit ${d.commit?.sha?.slice(0, 7)} · ${c.gesamt} Tests: ${c.identisch} identisch, ${c.sanktioniert} sanktioniert, ${c.regression} Regression · E2E ${d.e2e.legacy?.bestanden}/${d.e2e.legacy?.gesamt} + ${d.e2e.modern?.bestanden}/${d.e2e.modern?.gesamt} · Trivy ${d.imageScan?.gesamt}`); +' "$run" From 3a01611a513314b523dc21511ea4b90df758ee65 Mon Sep 17 00:00:00 2001 From: Sebastian Kern Date: Thu, 22 Oct 2026 00:10:06 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Nachweis:=20Formatierung,=20Klick=20=C3=BCb?= =?UTF-8?q?er=20der=20fixierten=20Fu=C3=9Fzeile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrationlab/e2e/nachweis/NachweisSeiteTest.java | 11 +++++++++-- .../crm/controller/SpaForwardController.java | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java b/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java index 809afb3..f4c2a01 100644 --- a/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java +++ b/e2e/src/test/java/at/stoicera/migrationlab/e2e/nachweis/NachweisSeiteTest.java @@ -77,7 +77,7 @@ void zeilenklickZeigtGoldenUndModerneAntwortNebeneinander() { .filter(z -> z.getText().contains("kunden.json")) .findFirst() .orElseThrow(); - goldenZeile.findElement(testid("nachweis-umschalter")).click(); + klicke(goldenZeile.findElement(testid("nachweis-umschalter"))); waits.visible(testid("nachweis-vergleich")); String golden = driver.findElement(testid("nachweis-golden")).getText(); String modern = driver.findElement(testid("nachweis-modern")).getText(); @@ -93,7 +93,7 @@ void sanktionierteZeileZeigtErklaerungUndRegisterBeleg() { .filter(z -> "sanktioniert".equals(z.getAttribute("data-urteil"))) .findFirst() .orElseThrow(); - zeile.findElement(testid("nachweis-umschalter")).click(); + klicke(zeile.findElement(testid("nachweis-umschalter"))); waits.visible(testid("nachweis-erklaerung")); assertThat( zeile.findElements(testid("nachweis-beleg")).stream() @@ -116,6 +116,13 @@ void jederBelegZeigtAufEinenFestenCommitUndKeinInlineSkript() { assertThat(((Number) inline).intValue()).as("no inline script (strict CSP)").isZero(); } + /** The fixed 2016 footer covers the lower viewport edge; centre the target before clicking. */ + private void klicke(WebElement element) { + ((JavascriptExecutor) driver) + .executeScript("arguments[0].scrollIntoView({block: 'center'});", element); + element.click(); + } + private int zahl(String id) { return Integer.parseInt(waits.visible(testid(id)).getText().trim()); } diff --git a/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java b/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java index 8440f26..4990a83 100644 --- a/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java +++ b/modern/src/main/java/at/werkstatt/crm/controller/SpaForwardController.java @@ -7,8 +7,8 @@ * Stage 5 (Strangler Fig, ADR-0009): the Angular UI uses path routing, so every route the SPA owns * must be answered with the SPA shell — a deep link or reload would otherwise 404. One mapping is * added per ported route slice; the list is the server-side mirror of - * frontend/src/app/app.routes.ts. {@code /nachweis} is the demo's evidence page, not a route of - * the 2016 app; its document route is pinned by the e2e page test (tag "nachweis"), not by the + * frontend/src/app/app.routes.ts. {@code /nachweis} is the demo's evidence page, not a route of the + * 2016 app; its document route is pinned by the e2e page test (tag "nachweis"), not by the * characterization suite, whose test count is part of what the page reports. */ @Controller From 42dd49debc807e17ca66583b034b89b1248883a5 Mon Sep 17 00:00:00 2001 From: Sebastian Kern Date: Thu, 22 Oct 2026 00:12:12 +0200 Subject: [PATCH 4/6] =?UTF-8?q?Nachweis:=20Permissions-Kommentar=20erg?= =?UTF-8?q?=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/modern-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/modern-ci.yml b/.github/workflows/modern-ci.yml index 03901ab..46f57bf 100644 --- a/.github/workflows/modern-ci.yml +++ b/.github/workflows/modern-ci.yml @@ -14,6 +14,7 @@ on: # Least privilege (CodeQL actions/missing-workflow-permissions, 2026-10-21): the jobs # here only read the repository; artefact upload and the Actions cache use the # runtime token, not GITHUB_TOKEN, so read access to the contents is all it needs. +# The nachweis job additionally reads Actions runs (job-level `actions: read`). permissions: contents: read From 7f70de728cf9603836a41f46a339c4b64eb0d070 Mon Sep 17 00:00:00 2001 From: Sebastian Kern Date: Thu, 22 Oct 2026 00:12:29 +0200 Subject: [PATCH 5/6] =?UTF-8?q?Worklog:=20Hygiene=20und=20=C3=84quivalenz-?= =?UTF-8?q?Nachweis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/worklog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/worklog.md b/docs/worklog.md index 4ca6764..596a6c4 100644 --- a/docs/worklog.md +++ b/docs/worklog.md @@ -1284,3 +1284,9 @@ danach die Neuaufnahme der beiden Kern-Screenshots — **erst dann** Marketing. ## 2026-09-24 — fleet maintenance, docs sync Dokploy 0.30.7 writes the compose `.env` double-quoted with `$` escaped: the doubled-dollar htpasswd values (0.29 trap) rejected every password; fixed on the host to single dollars 2026-09-23, gates verified 401 without credentials (a login with the real ones is still to do). Off-site copies of the dumps are armed (to the panel over the private network). §10.3, §10.6 and MANUAL_TASKS §J corrected. Hours: 0.1 (docs only). + +## 2026-10-21/22 — hygiene sweep and the Äquivalenz-Nachweis (`/nachweis`) — agent session + +Hygiene: six Actions/Dependabot PRs merged one at a time (strict up-to-date rule), each followed by a live check of `/`, `/kunden`, `/api/kunden` (200) and `/admin` (401). Security PR #104: the image scan had drifted to 12 fixable CRITICAL/HIGH without a commit of ours; minimum fixed Tomcat/Jackson pinned, 4 HIGH remain in the base image's `/usr/bin/pebble` (DEVIATIONS). Six Angular Dependabot PRs replaced by one grouped bump. Legacy Dependabot/CodeQL alerts dismissed as the exhibit they are (GitHub state only). + +Nachweis: the characterization suite now writes its own report (`NachweisBericht`), CI joins both stands, e2e and the image scan into `nachweis.json`, and the modern stand shows it at `/nachweis` with golden and answer side by side. Two findings from building it, kept here because they are the useful part: (1) ADR-0004's SD-1 row described the lone-quote failure as "PSQLException leaks" while the test pins `ArrayIndexOutOfBoundsException` — the register drifted from the test it cites; corrected. (2) Golden files are stored python-normalized (`912.0`), while both stands send `912.00`; the suite compares values, so this is correct, but a byte-level side-by-side would have shown a "difference" on a green row — the page now keeps literals and compares numbers as values, and says so. Explanations of sanctioned divergences are register-derived (`source: register`) because the OpenRouter item in 1Password is an empty placeholder. Hours: ~4 (agent wall time, supervised). From 8e494b2093d43a241f40c97006fe6592cb654774 Mon Sep 17 00:00:00 2001 From: Sebastian Kern Date: Thu, 22 Oct 2026 00:18:56 +0200 Subject: [PATCH 6/6] Nachweis: nachweis.json aus CI-Lauf 39684763121 (Commit 24fd501), Screenshot --- docs/screenshots/nachweis.png | Bin 140609 -> 178112 bytes modern/frontend/public/nachweis.json | 285 +++++++++++++-------------- 2 files changed, 140 insertions(+), 145 deletions(-) diff --git a/docs/screenshots/nachweis.png b/docs/screenshots/nachweis.png index a755efd1f45aac2894c5013ec53b73e5a4a2854f..a7997131eba6000ad04961443f09451f508a2e36 100644 GIT binary patch literal 178112 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 xy7yl%`M+Z7Rc!1C& literal 140609 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%0A=C4LB_-9b<` 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

{ED-R1Z@GyA-+rsbcIN|`0 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

KJwQ1F1)zRWwf@f>RA>TLHfn9w?9A)28V{? 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 GGywo247rE^ diff --git a/modern/frontend/public/nachweis.json b/modern/frontend/public/nachweis.json index 693afc2..3337d54 100644 --- a/modern/frontend/public/nachweis.json +++ b/modern/frontend/public/nachweis.json @@ -1,17 +1,17 @@ { "schema": 1, - "erzeugt": "2026-10-21T22:03:00.466Z", + "erzeugt": "2026-10-21T22:16:59.735Z", "repo": "https://github.com/Stoicera/migration-lab-java", "commit": { - "sha": "00f74d797e6d893e338c41eb9685deec06810f5d", - "url": "https://github.com/Stoicera/migration-lab-java/commit/00f74d797e6d893e338c41eb9685deec06810f5d" + "sha": "24fd5019f70225bc0dbc1c3d91521a3ce49d4258", + "url": "https://github.com/Stoicera/migration-lab-java/commit/24fd5019f70225bc0dbc1c3d91521a3ce49d4258" }, "ciLauf": { - "url": "https://github.com/Stoicera/migration-lab-java/actions/runs/39682526965" + "url": "https://github.com/Stoicera/migration-lab-java/actions/runs/39684763121" }, "register": { - "deviations": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/DEVIATIONS.md", - "adr0004": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md" + "deviations": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/DEVIATIONS.md", + "adr0004": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md" }, "charakterisierung": { "gesamt": 47, @@ -38,7 +38,7 @@ "urteil": "identisch", "golden": { "datei": "kunden.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden.json" }, "vergleich": { "golden": "[\n {\n \"angelegtAm\": 1781259000000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"AIGNER, Thomas\",\n \"email\": \"t.aigner@aon.at\",\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"notiz\": null,\n \"ort\": \"Waldhausen\",\n \"plz\": \"4391\",\n \"strasse\": \"Waldweg 5\",\n \"telefon\": \"+43 676 1010101\",\n \"vorname\": \"Thomas\"\n },\n {\n \"angelegtAm\": 1770021900000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"BRUNNER, Elisabeth\",\n \"email\": \"e.brunner@liwest.at\",\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"notiz\": null,\n \"ort\": \"Linz\",\n \"plz\": \"4020\",\n \"strasse\": \"Landstraße 101\",\n \"telefon\": \"+43 650 4444444\",\n \"vorname\": \"Elisabeth\"\n },\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n },\n {\n \"angelegtAm\": 1775202900000,\n \"anrede\": \"Firma\",\n \"anzeigeName\": \"HUBER TRANSPORTE GMBH, \",\n \"email\": \"office@huber-transporte.at\",\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"notiz\": \"Flottenkunde, Sammelrechnung Monatsende gewuenscht (machen wir nicht)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Gewerbestraße 9\",\n \"telefon\": \"+43 7262 88888\",\n \"vorname\": null\n },\n {\n \"angelegtAm\": 1767868200000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"LEITNER, Maria\",\n \"email\": \"m.leitner@gmx.at\",\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"notiz\": null,\n \"ort\": \"Schwertberg\",\n \"plz\": \"4311\",\n \"strasse\": \"Bahnhofstraße 18\",\n \"telefon\": \"+43 664 2222222\",\n \"vorname\": \"Maria\"\n },\n {\n \"angelegtAm\": 1772362800000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"MAYR, Anna\",\n \"email\": \"anna.mayr@gmx.at\",\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"notiz\": null,\n \"ort\": \"Naarn\",\n \"plz\": \"4331\",\n \"strasse\": \"Am Anger 12\",\n \"telefon\": \"+43 664 6666666\",\n \"vorname\": \"Anna\"\n },\n {\n \"angelegtAm\": 1773913200000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"PICHLER, Josef\",\n \"email\": null,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"notiz\": \"kein E-Mail, immer anrufen!\",\n \"ort\": \"Grein\",\n \"plz\": \"4360\",\n \"strasse\": \"Marktplatz 2\",\n \"telefon\": \"+43 699 7777777\",\n \"vorname\": \"Josef\"\n },\n {\n \"angelegtAm\": 1770826800000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"STEINER, Karl\",\n \"email\": \"karl.steiner@aon.at\",\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"notiz\": \"Reifen lagern bei uns (Keller)\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Feldweg 7\",\n \"telefon\": \"+43 676 5555555\",\n \"vorname\": \"Karl\"\n },\n {\n \"angelegtAm\": 1778073300000,\n \"anrede\": \"Frau\",\n \"anzeigeName\": \"WAGNER, Christine\",\n \"email\": \"ch.wagner@gmail.com\",\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"notiz\": null,\n \"ort\": \"Ried in der Riedmark\",\n \"plz\": \"4312\",\n \"strasse\": \"Ringstraße 22\",\n \"telefon\": \"+43 650 9999999\",\n \"vorname\": \"Christine\"\n },\n {\n \"angelegtAm\": 1768485900000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"WIMMER, Johann\",\n \"email\": \"j.wimmer@gmail.com\",\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"notiz\": \"zahlt gern bar\",\n \"ort\": \"Mauthausen\",\n \"plz\": \"4310\",\n \"strasse\": \"Donaulände 3\",\n \"telefon\": \"+43 699 3333333\",\n \"vorname\": \"Johann\"\n }\n]", @@ -49,11 +49,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden kunden.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden.json" } ] }, @@ -75,7 +75,7 @@ "urteil": "identisch", "golden": { "datei": "kunden-suche-hofer.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-hofer.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden-suche-hofer.json" }, "vergleich": { "golden": "[\n {\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n }\n]", @@ -86,11 +86,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden kunden-suche-hofer.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-hofer.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden-suche-hofer.json" } ] }, @@ -112,7 +112,7 @@ "urteil": "identisch", "golden": { "datei": "kunden-suche-meier-leer.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" }, "vergleich": { "golden": "[]", @@ -123,11 +123,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden kunden-suche-meier-leer.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunden-suche-meier-leer.json" } ] }, @@ -149,7 +149,7 @@ "urteil": "identisch", "golden": { "datei": "kunde-1.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunde-1.json" }, "vergleich": { "golden": "{\n \"angelegtAm\": 1767604320000,\n \"anrede\": \"Herr\",\n \"anzeigeName\": \"HOFER, Franz\",\n \"email\": \"franz.hofer@aon.at\",\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"notiz\": \"Stammkunde seit 2016\",\n \"ort\": \"Perg\",\n \"plz\": \"4320\",\n \"strasse\": \"Hauptstraße 4\",\n \"telefon\": \"+43 664 1111111\",\n \"vorname\": \"Franz\"\n}", @@ -160,11 +160,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden kunde-1.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunde-1.json" } ] }, @@ -186,7 +186,7 @@ "urteil": "identisch", "golden": { "datei": "kunde-1-fahrzeuge.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" }, "vergleich": { "golden": "[\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": null,\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n }\n]", @@ -197,11 +197,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden kunde-1-fahrzeuge.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/kunde-1-fahrzeuge.json" } ] }, @@ -223,7 +223,7 @@ "urteil": "identisch", "golden": { "datei": "fahrzeuge.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/fahrzeuge.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/fahrzeuge.json" }, "vergleich": { "golden": "[\n {\n \"angelegtAm\": 1770022320000,\n \"baujahr\": 2018,\n \"bezeichnung\": \"VW Up 1.0\",\n \"fahrgestellnr\": \"WVWZZZAAZJD000013\",\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"VW\",\n \"modell\": \"Up 1.0\",\n \"pickerlDatum\": \"2027-04-30\"\n },\n {\n \"angelegtAm\": 1770022200000,\n \"baujahr\": 2014,\n \"bezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrgestellnr\": \"WAUZZZ8K9EA000005\",\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 141200,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"marke\": \"Audi\",\n \"modell\": \"A4 Avant 2.0 TDI\",\n \"pickerlDatum\": \"2027-01-31\"\n },\n {\n \"angelegtAm\": 1767604500000,\n \"baujahr\": 2006,\n \"bezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrgestellnr\": \"WVWZZZ1KZ6W000001\",\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"VW\",\n \"modell\": \"Golf V 1.9 TDI\",\n \"pickerlDatum\": \"2026-11-30\"\n },\n {\n \"angelegtAm\": 1781259240000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"BMW 320d Touring\",\n \"fahrgestellnr\": \"WBA3K51000F000012\",\n \"id\": 12,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"marke\": \"BMW\",\n \"modell\": \"320d Touring\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1768486080000,\n \"baujahr\": 2010,\n \"bezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrgestellnr\": \"WF0KXXGCBK9000004\",\n \"id\": 4,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 175300,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"marke\": \"Ford\",\n \"modell\": \"Focus 1.6 TDCi\",\n \"pickerlDatum\": \"2026-08-31\"\n },\n {\n \"angelegtAm\": 1773913440000,\n \"baujahr\": 2013,\n \"bezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrgestellnr\": \"VNKKC96380A000008\",\n \"id\": 8,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88700,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"marke\": \"Toyota\",\n \"modell\": \"Yaris 1.33\",\n \"pickerlDatum\": \"2026-12-31\"\n },\n {\n \"angelegtAm\": 1767604680000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Skoda Octavia Combi\",\n \"fahrgestellnr\": \"TMBJF7NE0F0000002\",\n \"id\": 2,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"marke\": \"Skoda\",\n \"modell\": \"Octavia Combi\",\n \"pickerlDatum\": \"2027-03-31\"\n },\n {\n \"angelegtAm\": 1770827040000,\n \"baujahr\": 2011,\n \"bezeichnung\": \"VW Passat Variant\",\n \"fahrgestellnr\": \"WVWZZZ3CZBE000006\",\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189900,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"marke\": \"VW\",\n \"modell\": \"Passat Variant\",\n \"pickerlDatum\": \"2026-10-31\"\n },\n {\n \"angelegtAm\": 1775203200000,\n \"baujahr\": 2015,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000009\",\n \"id\": 9,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 234000,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1775203320000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrgestellnr\": \"WDB90663213000010\",\n \"id\": 10,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"marke\": \"Mercedes-Benz\",\n \"modell\": \"Sprinter 316 CDI\",\n \"pickerlDatum\": \"2027-02-28\"\n },\n {\n \"angelegtAm\": 1767868380000,\n \"baujahr\": 2012,\n \"bezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrgestellnr\": \"W0L0SDL08C4000003\",\n \"id\": 3,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 98000,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"marke\": \"Opel\",\n \"modell\": \"Corsa D 1.2\",\n \"pickerlDatum\": \"2026-09-30\"\n },\n {\n \"angelegtAm\": 1772363040000,\n \"baujahr\": 2016,\n \"bezeichnung\": \"Renault Clio IV\",\n \"fahrgestellnr\": \"VF15R240A54000007\",\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 61000,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"marke\": \"Renault\",\n \"modell\": \"Clio IV\",\n \"pickerlDatum\": \"2027-05-31\"\n },\n {\n \"angelegtAm\": 1778073480000,\n \"baujahr\": 2017,\n \"bezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrgestellnr\": \"VSSZZZ6JZHR000011\",\n \"id\": 11,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"marke\": \"Seat\",\n \"modell\": \"Ibiza 1.0 TSI\",\n \"pickerlDatum\": \"2027-06-30\"\n }\n]", @@ -234,11 +234,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden fahrzeuge.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/fahrzeuge.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/fahrzeuge.json" } ] }, @@ -260,7 +260,7 @@ "urteil": "identisch", "golden": { "datei": "auftraege.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftraege.json" }, "vergleich": { "golden": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785247200000,\n \"auftragNr\": \"A-2026-0015\",\n \"beschreibung\": \"Klappern vorne rechts bei Kopfsteinpflaster\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": null,\n \"id\": 15,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 248000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1785143400000,\n \"auftragNr\": \"A-2026-0014\",\n \"beschreibung\": \"Jahresservice, bitte auch Wischerblätter\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 14,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132500,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ANGENOMMEN\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784623800000,\n \"auftragNr\": \"A-2026-0013\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"VW Up 1.0\",\n \"fahrzeugId\": 13,\n \"fertigAm\": null,\n \"id\": 13,\n \"kennzeichen\": \"L-246WX\",\n \"kmStand\": 29800,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1784115000000,\n \"auftragNr\": \"A-2026-0016\",\n \"beschreibung\": \"Radio ohne Funktion - Kunde macht es doch selbst\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": null,\n \"id\": 16,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45200,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1782292800000,\n \"auftragNr\": \"A-2026-0011\",\n \"beschreibung\": \"Motorlampe leuchtet, Injektor Zylinder 3 defekt\",\n \"fahrzeugBezeichnung\": \"BMW 320d Touring\",\n \"fahrzeugId\": 12,\n \"fertigAm\": null,\n \"id\": 11,\n \"kennzeichen\": \"PE-135UV\",\n \"kmStand\": 167800,\n \"kundeId\": 10,\n \"kundeName\": \"Aigner Thomas\",\n \"positionen\": [],\n \"status\": \"IN_ARBEIT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1781108400000,\n \"angenommenAm\": 1780992600000,\n \"auftragNr\": \"A-2026-0010\",\n \"beschreibung\": \"Auspuff Endtopf durchgerostet\",\n \"fahrzeugBezeichnung\": \"Toyota Yaris 1.33\",\n \"fahrzeugId\": 8,\n \"fertigAm\": 1781092200000,\n \"id\": 10,\n \"kennzeichen\": \"PE-321OP\",\n \"kmStand\": 88300,\n \"kundeId\": 7,\n \"kundeName\": \"Pichler Josef\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1778076000000,\n \"angenommenAm\": 1777966200000,\n \"auftragNr\": \"A-2026-0008\",\n \"beschreibung\": \"§57a + Service, Firmenfahrzeug\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 9,\n \"fertigAm\": 1778068800000,\n \"id\": 8,\n \"kennzeichen\": \"PE-654QR\",\n \"kmStand\": 232900,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1775749500000,\n \"angenommenAm\": 1775655000000,\n \"auftragNr\": \"A-2026-0007\",\n \"beschreibung\": \"Kleines Service, Innenraumfilter\",\n \"fahrzeugBezeichnung\": \"Renault Clio IV\",\n \"fahrzeugId\": 7,\n \"fertigAm\": 1775730000000,\n \"id\": 7,\n \"kennzeichen\": \"PE-890MN\",\n \"kmStand\": 60500,\n \"kundeId\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1773855000000,\n \"angenommenAm\": 1773651600000,\n \"auftragNr\": \"A-2026-0006\",\n \"beschreibung\": \"Kupplung rutscht, Tausch Kupplungssatz\",\n \"fahrzeugBezeichnung\": \"VW Passat Variant\",\n \"fahrzeugId\": 6,\n \"fertigAm\": 1773844800000,\n \"id\": 6,\n \"kennzeichen\": \"PE-567KL\",\n \"kmStand\": 189200,\n \"kundeId\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1770718500000,\n \"auftragNr\": \"A-2026-0004\",\n \"beschreibung\": \"Klimaanlage kühlt nicht - Kunde hat Termin abgesagt\",\n \"fahrzeugBezeichnung\": \"Skoda Octavia Combi\",\n \"fahrzeugId\": 2,\n \"fertigAm\": null,\n \"id\": 4,\n \"kennzeichen\": \"PE-456CD\",\n \"kmStand\": 132000,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"STORNIERT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1770309000000,\n \"angenommenAm\": 1770277500000,\n \"auftragNr\": \"A-2026-0003\",\n \"beschreibung\": \"§57a Begutachtung (Pickerl)\",\n \"fahrzeugBezeichnung\": \"Ford Focus 1.6 TDCi\",\n \"fahrzeugId\": 4,\n \"fertigAm\": 1770289200000,\n \"id\": 3,\n \"kennzeichen\": \"PE-234GH\",\n \"kmStand\": 174900,\n \"kundeId\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1769070600000,\n \"angenommenAm\": 1768901400000,\n \"auftragNr\": \"A-2026-0002\",\n \"beschreibung\": \"Bremsen vorne komplett, Geräusch beim Bremsen\",\n \"fahrzeugBezeichnung\": \"Opel Corsa D 1.2\",\n \"fahrzeugId\": 3,\n \"fertigAm\": 1769011200000,\n \"id\": 2,\n \"kennzeichen\": \"PE-789EF\",\n \"kmStand\": 97400,\n \"kundeId\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": 1768410000000,\n \"angenommenAm\": 1768204800000,\n \"auftragNr\": \"A-2026-0001\",\n \"beschreibung\": \"Jahresservice inkl. Öl und Filter\",\n \"fahrzeugBezeichnung\": \"VW Golf V 1.9 TDI\",\n \"fahrzeugId\": 1,\n \"fertigAm\": 1768318200000,\n \"id\": 1,\n \"kennzeichen\": \"PE-123AB\",\n \"kmStand\": 246800,\n \"kundeId\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"positionen\": [],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 0.0\n }\n]", @@ -271,11 +271,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden auftraege.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftraege.json" } ] }, @@ -297,7 +297,7 @@ "urteil": "identisch", "golden": { "datei": "auftraege-fertig.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege-fertig.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftraege-fertig.json" }, "vergleich": { "golden": "[\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1783410000000,\n \"auftragNr\": \"A-2026-0012\",\n \"beschreibung\": \"Bremsen hinten + Handbremse nachstellen\",\n \"fahrzeugBezeichnung\": \"Mercedes-Benz Sprinter 316 CDI\",\n \"fahrzeugId\": 10,\n \"fertigAm\": 1783516200000,\n \"id\": 12,\n \"kennzeichen\": \"PE-655QS\",\n \"kmStand\": 198500,\n \"kundeId\": 8,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n },\n {\n \"abgeholtAm\": null,\n \"angenommenAm\": 1779187500000,\n \"auftragNr\": \"A-2026-0009\",\n \"beschreibung\": \"Klimaservice, Kältemittel auffüllen\",\n \"fahrzeugBezeichnung\": \"Seat Ibiza 1.0 TSI\",\n \"fahrzeugId\": 11,\n \"fertigAm\": 1779269400000,\n \"id\": 9,\n \"kennzeichen\": \"PE-987ST\",\n \"kmStand\": 45100,\n \"kundeId\": 9,\n \"kundeName\": \"Wagner Christine\",\n \"positionen\": [],\n \"status\": \"FERTIG\",\n \"summeNetto\": 0.0\n }\n]", @@ -308,11 +308,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden auftraege-fertig.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftraege-fertig.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftraege-fertig.json" } ] }, @@ -334,7 +334,7 @@ "urteil": "identisch", "golden": { "datei": "auftrag-5.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftrag-5.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftrag-5.json" }, "vergleich": { "golden": "{\n \"abgeholtAm\": 1772701200000,\n \"angenommenAm\": 1772526000000,\n \"auftragNr\": \"A-2026-0005\",\n \"beschreibung\": \"Zahnriemen + Wasserpumpe lt. Serviceplan\",\n \"fahrzeugBezeichnung\": \"Audi A4 Avant 2.0 TDI\",\n \"fahrzeugId\": 5,\n \"fertigAm\": 1772644500000,\n \"id\": 5,\n \"kennzeichen\": \"L-345IJ\",\n \"kmStand\": 140100,\n \"kundeId\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"positionen\": [\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemen + WaPu tauschen\",\n \"einzelpreis\": 88.0,\n \"gesamtpreis\": 396.0,\n \"id\": 9,\n \"menge\": 4.5,\n \"typ\": \"ARBEIT\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Zahnriemensatz\",\n \"einzelpreis\": 185.0,\n \"gesamtpreis\": 185.0,\n \"id\": 10,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n },\n {\n \"auftragId\": 5,\n \"bezeichnung\": \"Wasserpumpe\",\n \"einzelpreis\": 98.0,\n \"gesamtpreis\": 98.0,\n \"id\": 11,\n \"menge\": 1.0,\n \"typ\": \"MATERIAL\"\n }\n ],\n \"status\": \"ABGEHOLT\",\n \"summeNetto\": 679.0\n}", @@ -345,11 +345,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden auftrag-5.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/auftrag-5.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/auftrag-5.json" } ] }, @@ -371,7 +371,7 @@ "urteil": "identisch", "golden": { "datei": "rechnungen.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnungen.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/rechnungen.json" }, "vergleich": { "golden": "[\n {\n \"auftragId\": 10,\n \"auftragNr\": \"A-2026-0010\",\n \"ausgestelltAm\": 1781107200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1781108400000,\n \"id\": 8,\n \"kundeName\": \"Pichler Josef\",\n \"rechnungNr\": \"R-2026-0008\",\n \"summeBrutto\": 294.0,\n \"summeNetto\": 245.0,\n \"ust\": 49.0\n },\n {\n \"auftragId\": 8,\n \"auftragNr\": \"A-2026-0008\",\n \"ausgestelltAm\": 1778075100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1779967200000,\n \"id\": 7,\n \"kundeName\": \"Huber Transporte GmbH \",\n \"rechnungNr\": \"R-2026-0007\",\n \"summeBrutto\": 408.0,\n \"summeNetto\": 340.0,\n \"ust\": 68.0\n },\n {\n \"auftragId\": 7,\n \"auftragNr\": \"A-2026-0007\",\n \"ausgestelltAm\": 1775748600000,\n \"bezahlt\": true,\n \"bezahltAm\": 1775749500000,\n \"id\": 6,\n \"kundeName\": \"Mayr Anna\",\n \"rechnungNr\": \"R-2026-0006\",\n \"summeBrutto\": 179.52,\n \"summeNetto\": 149.6,\n \"ust\": 29.92\n },\n {\n \"auftragId\": 6,\n \"auftragNr\": \"A-2026-0006\",\n \"ausgestelltAm\": 1773853200000,\n \"bezahlt\": false,\n \"bezahltAm\": null,\n \"id\": 5,\n \"kundeName\": \"Steiner Karl\",\n \"rechnungNr\": \"R-2026-0005\",\n \"summeBrutto\": 912.0,\n \"summeNetto\": 760.0,\n \"ust\": 152.0\n },\n {\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n },\n {\n \"auftragId\": 3,\n \"auftragNr\": \"A-2026-0003\",\n \"ausgestelltAm\": 1770307200000,\n \"bezahlt\": true,\n \"bezahltAm\": 1770309000000,\n \"id\": 3,\n \"kundeName\": \"Wimmer Johann\",\n \"rechnungNr\": \"R-2026-0003\",\n \"summeBrutto\": 100.8,\n \"summeNetto\": 84.0,\n \"ust\": 16.8\n },\n {\n \"auftragId\": 2,\n \"auftragNr\": \"A-2026-0002\",\n \"ausgestelltAm\": 1769069700000,\n \"bezahlt\": true,\n \"bezahltAm\": 1769680800000,\n \"id\": 2,\n \"kundeName\": \"Leitner Maria\",\n \"rechnungNr\": \"R-2026-0002\",\n \"summeBrutto\": 434.88,\n \"summeNetto\": 362.4,\n \"ust\": 72.48\n },\n {\n \"auftragId\": 1,\n \"auftragNr\": \"A-2026-0001\",\n \"ausgestelltAm\": 1768409100000,\n \"bezahlt\": true,\n \"bezahltAm\": 1768410000000,\n \"id\": 1,\n \"kundeName\": \"Hofer Franz\",\n \"rechnungNr\": \"R-2026-0001\",\n \"summeBrutto\": 261.6,\n \"summeNetto\": 218.0,\n \"ust\": 43.6\n }\n]", @@ -382,11 +382,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden rechnungen.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnungen.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/rechnungen.json" } ] }, @@ -408,7 +408,7 @@ "urteil": "identisch", "golden": { "datei": "rechnung-4.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnung-4.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/rechnung-4.json" }, "vergleich": { "golden": "{\n \"auftragId\": 5,\n \"auftragNr\": \"A-2026-0005\",\n \"ausgestelltAm\": 1772700300000,\n \"bezahlt\": true,\n \"bezahltAm\": 1773307800000,\n \"id\": 4,\n \"kundeName\": \"Brunner Elisabeth\",\n \"rechnungNr\": \"R-2026-0004\",\n \"summeBrutto\": 814.8,\n \"summeNetto\": 679.0,\n \"ust\": 135.8\n}", @@ -419,11 +419,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden rechnung-4.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/rechnung-4.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/rechnung-4.json" } ] }, @@ -445,7 +445,7 @@ "urteil": "identisch", "golden": { "datei": "bericht-monat-2026.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-monat-2026.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/bericht-monat-2026.json" }, "vergleich": { "golden": "[\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 1,\n \"monatName\": \"Jänner\",\n \"umsatzBrutto\": 696.48,\n \"umsatzNetto\": 580.4\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 2,\n \"monatName\": \"Februar\",\n \"umsatzBrutto\": 100.8,\n \"umsatzNetto\": 84.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 2,\n \"jahr\": 2026,\n \"monat\": 3,\n \"monatName\": \"März\",\n \"umsatzBrutto\": 1726.8,\n \"umsatzNetto\": 1439.0\n },\n {\n \"anzahlAuftraege\": 1,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 4,\n \"monatName\": \"April\",\n \"umsatzBrutto\": 179.52,\n \"umsatzNetto\": 149.6\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 5,\n \"monatName\": \"Mai\",\n \"umsatzBrutto\": 408.0,\n \"umsatzNetto\": 340.0\n },\n {\n \"anzahlAuftraege\": 2,\n \"anzahlRechnungen\": 1,\n \"jahr\": 2026,\n \"monat\": 6,\n \"monatName\": \"Juni\",\n \"umsatzBrutto\": 294.0,\n \"umsatzNetto\": 245.0\n },\n {\n \"anzahlAuftraege\": 5,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 7,\n \"monatName\": \"Juli\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 8,\n \"monatName\": \"August\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 9,\n \"monatName\": \"September\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 10,\n \"monatName\": \"Oktober\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 11,\n \"monatName\": \"November\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n },\n {\n \"anzahlAuftraege\": 0,\n \"anzahlRechnungen\": 0,\n \"jahr\": 2026,\n \"monat\": 12,\n \"monatName\": \"Dezember\",\n \"umsatzBrutto\": 0.0,\n \"umsatzNetto\": 0.0\n }\n]", @@ -456,11 +456,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden bericht-monat-2026.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-monat-2026.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/bericht-monat-2026.json" } ] }, @@ -482,7 +482,7 @@ "urteil": "identisch", "golden": { "datei": "bericht-topkunden-2026.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-topkunden-2026.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/bericht-topkunden-2026.json" }, "vergleich": { "golden": "[\n {\n \"anzahl_auftraege\": 1,\n \"id\": 5,\n \"nachname\": \"Steiner\",\n \"umsatz\": 912.0,\n \"vorname\": \"Karl\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 4,\n \"nachname\": \"Brunner\",\n \"umsatz\": 814.8,\n \"vorname\": \"Elisabeth\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 2,\n \"nachname\": \"Leitner\",\n \"umsatz\": 434.88,\n \"vorname\": \"Maria\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 8,\n \"nachname\": \"Huber Transporte GmbH\",\n \"umsatz\": 408.0,\n \"vorname\": null\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 7,\n \"nachname\": \"Pichler\",\n \"umsatz\": 294.0,\n \"vorname\": \"Josef\"\n },\n {\n \"anzahl_auftraege\": 4,\n \"id\": 1,\n \"nachname\": \"Hofer\",\n \"umsatz\": 261.6,\n \"vorname\": \"Franz\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 6,\n \"nachname\": \"Mayr\",\n \"umsatz\": 179.52,\n \"vorname\": \"Anna\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 3,\n \"nachname\": \"Wimmer\",\n \"umsatz\": 100.8,\n \"vorname\": \"Johann\"\n },\n {\n \"anzahl_auftraege\": 2,\n \"id\": 9,\n \"nachname\": \"Wagner\",\n \"umsatz\": 0,\n \"vorname\": \"Christine\"\n },\n {\n \"anzahl_auftraege\": 1,\n \"id\": 10,\n \"nachname\": \"Aigner\",\n \"umsatz\": 0,\n \"vorname\": \"Thomas\"\n }\n]", @@ -494,11 +494,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L58" }, { "label": "Golden bericht-topkunden-2026.json", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/bericht-topkunden-2026.json" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/bericht-topkunden-2026.json" } ] }, @@ -520,7 +520,7 @@ "urteil": "sanktioniert", "golden": { "datei": "admin.html", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/admin.html" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/admin.html" }, "vergleich": { "golden": "\n\n\n\n\n\t\n\tAdmin - KFZ-Werkstatt Moser GmbH\n\t\n\n\n\n\t

KFZ-Werkstatt Moser GmbH — Administration

\n\t

WerkstattCRM Version 1.4.2 · Stand: XX.XX.XXXX

\n\n\t\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
KennzahlWert
Kunden10
Fahrzeuge13
Aufträge gesamt16
Aufträge offen4
Rechnungen gesamt8
Rechnungen unbezahlt1
\n\n\t
\n\t\tBereinigung: Löscht stornierte Aufträge, die älter als 90 Tage sind.\n\t\tEndgültig, kein Papierkorb!

\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\t

Rohdaten (für Hrn. B. beim Telefonsupport):

\n\t
{\"rechnungenOffen\":1,\"kunden\":10,\"auftraegeOffen\":4,\"rechnungen\":8,\"auftraege\":16,\"stand\":\"XX.XX.XXXX\",\"fahrzeuge\":13}
\n\n\t

\n\t\tZur Werkstatt-Oberfläche\n\t

\n\n\n\n", @@ -530,7 +530,7 @@ "sanktion": { "ref": "SD-2", "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37", "erklaerung": { "ref": "SD-2", "titel": "Adminseite", @@ -548,15 +548,15 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L145" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L145" }, { "label": "Golden admin.html", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/resources/golden/admin.html" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/resources/golden/admin.html" }, { "label": "Register SD-2", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L37" } ] }, @@ -581,7 +581,7 @@ "sanktion": { "ref": "SD-1", "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", "erklaerung": { "ref": "SD-1", "titel": "Suche mit feindlicher Eingabe", @@ -599,11 +599,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L115" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L115" }, { "label": "Register SD-1", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" } ] }, @@ -628,7 +628,7 @@ "sanktion": { "ref": "SD-1", "quelle": "docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36", "erklaerung": { "ref": "SD-1", "titel": "Suche mit feindlicher Eingabe", @@ -646,11 +646,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L94" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L94" }, { "label": "Register SD-1", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L36" } ] }, @@ -675,7 +675,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -693,11 +693,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -722,7 +722,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -740,11 +740,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -769,7 +769,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -787,11 +787,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -816,7 +816,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -834,11 +834,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -863,7 +863,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -881,11 +881,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -910,7 +910,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -928,11 +928,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -957,7 +957,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -975,11 +975,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -1004,7 +1004,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -1022,11 +1022,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -1051,7 +1051,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -1069,11 +1069,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -1098,7 +1098,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -1116,11 +1116,11 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, @@ -1145,7 +1145,7 @@ "sanktion": { "ref": "ADR-0009", "quelle": "docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1", "erklaerung": { "ref": "ADR-0009", "titel": "Seitenadressen ohne #!", @@ -1163,18 +1163,18 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ApiCharacterizationTest.java#L243" }, { "label": "Register ADR-0009", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0009-strangler-fig-url-seam-no-ngupgrade.md#L1" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:doppelteRechnung_liefert500MitMeldung()]", "suite": "Fehlerkontrakt", - "name": "Doppelte rechnung — liefert500 mit meldung", + "name": "Doppelte Rechnung: 500 mit Meldung", "test": { "klasse": "ErrorContractCharacterizationTest", "methode": "doppelteRechnung_liefert500MitMeldung" @@ -1193,14 +1193,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L74" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L74" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:kundeOhneNachname_liefert500AusDbConstraint()]", "suite": "Fehlerkontrakt", - "name": "Kunde ohne nachname — liefert500 aus db constraint", + "name": "Kunde ohne Nachname: 500 aus dem DB-Constraint (B12)", "test": { "klasse": "ErrorContractCharacterizationTest", "methode": "kundeOhneNachname_liefert500AusDbConstraint" @@ -1219,14 +1219,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L87" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L87" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:rechnungFuerNichtFertigenAuftrag_liefert500MitMeldung()]", "suite": "Fehlerkontrakt", - "name": "Rechnung fuer nicht fertigen auftrag — liefert500 mit meldung", + "name": "Rechnung für nicht fertigen Auftrag: 500 mit Meldung", "test": { "klasse": "ErrorContractCharacterizationTest", "methode": "rechnungFuerNichtFertigenAuftrag_liefert500MitMeldung" @@ -1245,14 +1245,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L64" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L64" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.ErrorContractCharacterizationTest]/[method:unerlaubterStatuswechsel_liefert500MitDeutscherMeldung()]", "suite": "Fehlerkontrakt", - "name": "Unerlaubter statuswechsel — liefert500 mit deutscher meldung", + "name": "Unerlaubter Statuswechsel: 500 mit deutscher Meldung", "test": { "klasse": "ErrorContractCharacterizationTest", "methode": "unerlaubterStatuswechsel_liefert500MitDeutscherMeldung" @@ -1271,7 +1271,7 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L55" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L55" } ] }, @@ -1297,7 +1297,7 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" } ] }, @@ -1323,7 +1323,7 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" } ] }, @@ -1349,7 +1349,7 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" } ] }, @@ -1375,14 +1375,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/ErrorContractCharacterizationTest.java#L47" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:adminBereinigen_loeschtGenauStornierteAelterAls90Tage()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Admin bereinigen — loescht genau stornierte aelter als90 tage", + "name": "Admin-Bereinigung: löscht genau stornierte Aufträge älter als 90 Tage", "test": { "klasse": "DbStateCharacterizationTest", "methode": "adminBereinigen_loeschtGenauStornierteAelterAls90Tage" @@ -1401,14 +1401,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L286" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L286" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:angenommenNachInArbeit_setztNurStatus()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Angenommen nach in arbeit — setzt nur status", + "name": "Status ANGENOMMEN → IN_ARBEIT: setzt nur den Status", "test": { "klasse": "DbStateCharacterizationTest", "methode": "angenommenNachInArbeit_setztNurStatus" @@ -1427,14 +1427,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L72" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L72" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:angenommenNachStorniert_setztNurStatus()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Angenommen nach storniert — setzt nur status", + "name": "Status ANGENOMMEN → STORNIERT: setzt nur den Status", "test": { "klasse": "DbStateCharacterizationTest", "methode": "angenommenNachStorniert_setztNurStatus" @@ -1453,14 +1453,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L90" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L90" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:auftragAnlegen_schreibtAuftragUndAktualisiertFahrzeugKm()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Auftrag anlegen — schreibt auftrag und aktualisiert fahrzeug km", + "name": "Auftrag anlegen: schreibt Auftrag und aktualisiert Fahrzeug-km", "test": { "klasse": "DbStateCharacterizationTest", "methode": "auftragAnlegen_schreibtAuftragUndAktualisiertFahrzeugKm" @@ -1479,14 +1479,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L38" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L38" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:fertigNachAbgeholt_setztAbgeholtAmUndBehaeltFertigAm()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Fertig nach abgeholt — setzt abgeholt am und behaelt fertig am", + "name": "Status FERTIG → ABGEHOLT: setzt abgeholt_am, fertig_am bleibt", "test": { "klasse": "DbStateCharacterizationTest", "methode": "fertigNachAbgeholt_setztAbgeholtAmUndBehaeltFertigAm" @@ -1505,14 +1505,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L164" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L164" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:fertigZurueckInArbeit_sonderfallBehaeltFertigAm()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Fertig zurueck in arbeit — sonderfall behaelt fertig am", + "name": "Status FERTIG → IN_ARBEIT: Sonderfall, fertig_am bleibt", "test": { "klasse": "DbStateCharacterizationTest", "methode": "fertigZurueckInArbeit_sonderfallBehaeltFertigAm" @@ -1531,14 +1531,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L144" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L144" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:inArbeitNachFertig_setztZeitstempel()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "In arbeit nach fertig — setzt zeitstempel", + "name": "Status IN_ARBEIT → FERTIG: setzt fertig_am", "test": { "klasse": "DbStateCharacterizationTest", "methode": "inArbeitNachFertig_setztZeitstempel" @@ -1557,14 +1557,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L108" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L108" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:inArbeitNachStorniert_setztNurStatus()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "In arbeit nach storniert — setzt nur status", + "name": "Status IN_ARBEIT → STORNIERT: setzt nur den Status", "test": { "klasse": "DbStateCharacterizationTest", "methode": "inArbeitNachStorniert_setztNurStatus" @@ -1583,14 +1583,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L126" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L126" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:kundeLoeschen_hinterlaesstVerwaisteFahrzeuge()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Kunde loeschen — hinterlaesst verwaiste fahrzeuge", + "name": "Kunde löschen: Fahrzeuge bleiben verwaist zurück (B13)", "test": { "klasse": "DbStateCharacterizationTest", "methode": "kundeLoeschen_hinterlaesstVerwaisteFahrzeuge" @@ -1609,14 +1609,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L267" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L267" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungBezahlt_setztFlagUndZeitstempel()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Rechnung bezahlt — setzt flag und zeitstempel", + "name": "Rechnung bezahlt: setzt Kennzeichen und Zeitstempel", "test": { "klasse": "DbStateCharacterizationTest", "methode": "rechnungBezahlt_setztFlagUndZeitstempel" @@ -1635,14 +1635,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L247" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L247" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungErstellen_schreibtBetraegeUndNummer()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Rechnung erstellen — schreibt betraege und nummer", + "name": "Rechnung erstellen: Beträge und Rechnungsnummer", "test": { "klasse": "DbStateCharacterizationTest", "methode": "rechnungErstellen_schreibtBetraegeUndNummer" @@ -1661,14 +1661,14 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L186" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L186" } ] }, { "id": "[engine:junit-jupiter]/[class:at.stoicera.migrationlab.characterization.DbStateCharacterizationTest]/[method:rechnungRundung_doppeltesRundenAmGrenzfall()]", "suite": "DB-Zustand (Schreibpfade)", - "name": "Rechnung rundung — doppeltes runden am grenzfall", + "name": "Rechnung: doppeltes Runden am Grenzfall (B8)", "test": { "klasse": "DbStateCharacterizationTest", "methode": "rechnungRundung_doppeltesRundenAmGrenzfall" @@ -1687,7 +1687,7 @@ "belege": [ { "label": "Test im Quelltext", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L209" + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/characterization/src/test/java/at/stoicera/migrationlab/characterization/DbStateCharacterizationTest.java#L209" } ] } @@ -1707,7 +1707,7 @@ "klassen": [ { "klasse": "AdminTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AdminTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AdminTest.java", "legacy": { "gesamt": 2, "bestanden": 2, @@ -1721,7 +1721,7 @@ }, { "klasse": "AuftragLebenszyklusTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragLebenszyklusTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragLebenszyklusTest.java", "legacy": { "gesamt": 4, "bestanden": 4, @@ -1735,7 +1735,7 @@ }, { "klasse": "AuftragSonderfaelleTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragSonderfaelleTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/AuftragSonderfaelleTest.java", "legacy": { "gesamt": 3, "bestanden": 3, @@ -1749,7 +1749,7 @@ }, { "klasse": "BerichtTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/BerichtTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/BerichtTest.java", "legacy": { "gesamt": 4, "bestanden": 4, @@ -1763,7 +1763,7 @@ }, { "klasse": "DashboardTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DashboardTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DashboardTest.java", "legacy": { "gesamt": 2, "bestanden": 2, @@ -1777,7 +1777,7 @@ }, { "klasse": "DeepLinkTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DeepLinkTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/DeepLinkTest.java", "legacy": { "gesamt": 1, "bestanden": 1, @@ -1791,7 +1791,7 @@ }, { "klasse": "FahrzeugeTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/FahrzeugeTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/FahrzeugeTest.java", "legacy": { "gesamt": 3, "bestanden": 3, @@ -1805,7 +1805,7 @@ }, { "klasse": "KundeDetailTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundeDetailTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundeDetailTest.java", "legacy": { "gesamt": 1, "bestanden": 1, @@ -1819,7 +1819,7 @@ }, { "klasse": "KundenCrudTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundenCrudTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/KundenCrudTest.java", "legacy": { "gesamt": 4, "bestanden": 4, @@ -1833,7 +1833,7 @@ }, { "klasse": "ListenFilterTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ListenFilterTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ListenFilterTest.java", "legacy": { "gesamt": 3, "bestanden": 3, @@ -1847,7 +1847,7 @@ }, { "klasse": "RechnungTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/RechnungTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/RechnungTest.java", "legacy": { "gesamt": 4, "bestanden": 4, @@ -1861,7 +1861,7 @@ }, { "klasse": "SelectorMapParityTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/selectors/SelectorMapParityTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/selectors/SelectorMapParityTest.java", "legacy": { "gesamt": 1, "bestanden": 1, @@ -1875,7 +1875,7 @@ }, { "klasse": "ValidierungTest", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ValidierungTest.java", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/e2e/src/test/java/at/stoicera/migrationlab/e2e/tests/ValidierungTest.java", "legacy": { "gesamt": 2, "bestanden": 2, @@ -1891,7 +1891,7 @@ "sanktionen": [ { "ref": "SD-3", - "url": "https://github.com/Stoicera/migration-lab-java/blob/00f74d797e6d893e338c41eb9685deec06810f5d/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L38", + "url": "https://github.com/Stoicera/migration-lab-java/blob/24fd5019f70225bc0dbc1c3d91521a3ce49d4258/docs/adr/0004-functional-equivalence-and-sanctioned-divergence.md#L38", "erklaerung": { "ref": "SD-3", "titel": "Meldung bei abgelehnter Aktion", @@ -1912,13 +1912,8 @@ "werkzeug": "Trivy", "schweregrade": "CRITICAL, HIGH", "nurBehebbar": true, - "gesamt": 12, + "gesamt": 4, "ziele": [ - { - "ziel": "Java", - "typ": "jar", - "anzahl": 8 - }, { "ziel": "usr/bin/pebble", "typ": "gobinary",