|
@@ -149,9 +149,9 @@ public class VergleichController {
|
|
|
|
|
|
|
|
// ===== Helper-Typen =====
|
|
// ===== Helper-Typen =====
|
|
|
public record Z(String id, String beginn, String ende) {}
|
|
public record Z(String id, String beginn, String ende) {}
|
|
|
- public record Vorgang(String id, String aktenzeichen, List<Z> zeitraeume) {}
|
|
|
|
|
|
|
+ public record Vorgang(String id, String vorgangstyp, List<Z> zeitraeume) {}
|
|
|
public record PersonRef(String id, String label) {}
|
|
public record PersonRef(String id, String label) {}
|
|
|
- public record StammvorgangInfo(String id, String aktenzeichen, String beginn, String ende, String bemerkung) {}
|
|
|
|
|
|
|
+ public record StammvorgangInfo(String id, String vorgangstyp, String vorgangsstatus) {}
|
|
|
public record StammakteInfo(String aktenzeichen, String antragstellername, String antragstellerGeburtsdatum, String anschrift) {}
|
|
public record StammakteInfo(String aktenzeichen, String antragstellername, String antragstellerGeburtsdatum, String anschrift) {}
|
|
|
public static final class Pair<R, L> {
|
|
public static final class Pair<R, L> {
|
|
|
public final R right;
|
|
public final R right;
|
|
@@ -165,16 +165,14 @@ public class VergleichController {
|
|
|
// ===== Helper-Methoden =====
|
|
// ===== Helper-Methoden =====
|
|
|
private static StammvorgangInfo createStammvorgangInfo(JsonNode stammvorgangNode) {
|
|
private static StammvorgangInfo createStammvorgangInfo(JsonNode stammvorgangNode) {
|
|
|
if (stammvorgangNode == null || stammvorgangNode.isMissingNode()) {
|
|
if (stammvorgangNode == null || stammvorgangNode.isMissingNode()) {
|
|
|
- return new StammvorgangInfo("", "", "", "", "");
|
|
|
|
|
|
|
+ return new StammvorgangInfo("", "", "");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
String id = stammvorgangNode.path("id").asText("");
|
|
String id = stammvorgangNode.path("id").asText("");
|
|
|
- String aktenzeichen = stammvorgangNode.path("aktenzeichen").asText("");
|
|
|
|
|
- String beginn = stammvorgangNode.path("beginn").asText("");
|
|
|
|
|
- String ende = stammvorgangNode.path("ende").asText("");
|
|
|
|
|
- String bemerkung = stammvorgangNode.path("bemerkung").asText("");
|
|
|
|
|
|
|
+ String vorgangstyp = stammvorgangNode.path("vorgangstyp").asText("");
|
|
|
|
|
+ String vorgangsstatus = stammvorgangNode.path("vorgangsstatus").asText("");
|
|
|
|
|
|
|
|
- return new StammvorgangInfo(id, aktenzeichen, beginn, ende, bemerkung);
|
|
|
|
|
|
|
+ return new StammvorgangInfo(id, vorgangstyp, vorgangsstatus);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static StammakteInfo extractStammakteInfo(JsonNode root) {
|
|
private static StammakteInfo extractStammakteInfo(JsonNode root) {
|
|
@@ -340,10 +338,10 @@ public class VergleichController {
|
|
|
for (JsonNode v : stammakte.get("vorgaenge")) {
|
|
for (JsonNode v : stammakte.get("vorgaenge")) {
|
|
|
JsonNode stammvorgang = v.path("stammvorgang");
|
|
JsonNode stammvorgang = v.path("stammvorgang");
|
|
|
String id = stammvorgang.path("id").asText("");
|
|
String id = stammvorgang.path("id").asText("");
|
|
|
- String aktenzeichen = stammvorgang.path("aktenzeichen").asText("");
|
|
|
|
|
|
|
+ String vorgangstyp = stammvorgang.path("vorgangstyp").asText("");
|
|
|
List<Z> zeitraeume = extractZeitraeume(JsonNodeFactory.instance.objectNode().set("vorgaenge",
|
|
List<Z> zeitraeume = extractZeitraeume(JsonNodeFactory.instance.objectNode().set("vorgaenge",
|
|
|
JsonNodeFactory.instance.arrayNode().add(v)));
|
|
JsonNodeFactory.instance.arrayNode().add(v)));
|
|
|
- result.add(new Vorgang(id, aktenzeichen, zeitraeume));
|
|
|
|
|
|
|
+ result.add(new Vorgang(id, vorgangstyp, zeitraeume));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -352,18 +350,18 @@ public class VergleichController {
|
|
|
for (JsonNode v : left.get("vorgaenge")) {
|
|
for (JsonNode v : left.get("vorgaenge")) {
|
|
|
JsonNode stammvorgang = v.path("stammvorgang");
|
|
JsonNode stammvorgang = v.path("stammvorgang");
|
|
|
String id = stammvorgang.path("id").asText("");
|
|
String id = stammvorgang.path("id").asText("");
|
|
|
- String aktenzeichen = stammvorgang.path("aktenzeichen").asText("");
|
|
|
|
|
|
|
+ String vorgangstyp = stammvorgang.path("vorgangstyp").asText("");
|
|
|
List<Z> zeitraeume = extractZeitraeume(JsonNodeFactory.instance.objectNode().set("vorgaenge",
|
|
List<Z> zeitraeume = extractZeitraeume(JsonNodeFactory.instance.objectNode().set("vorgaenge",
|
|
|
JsonNodeFactory.instance.arrayNode().add(v)));
|
|
JsonNodeFactory.instance.arrayNode().add(v)));
|
|
|
- result.add(new Vorgang(id, aktenzeichen, zeitraeume));
|
|
|
|
|
|
|
+ result.add(new Vorgang(id, vorgangstyp, zeitraeume));
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
// b) sonst: single vorgang
|
|
// b) sonst: single vorgang
|
|
|
JsonNode stammvorgang = left.path("stammvorgang");
|
|
JsonNode stammvorgang = left.path("stammvorgang");
|
|
|
String id = stammvorgang.path("id").asText("");
|
|
String id = stammvorgang.path("id").asText("");
|
|
|
- String aktenzeichen = stammvorgang.path("aktenzeichen").asText("");
|
|
|
|
|
|
|
+ String vorgangstyp = stammvorgang.path("vorgangstyp").asText("");
|
|
|
List<Z> zeitraeume = extractZeitraeume(left);
|
|
List<Z> zeitraeume = extractZeitraeume(left);
|
|
|
- result.add(new Vorgang(id, aktenzeichen, zeitraeume));
|
|
|
|
|
|
|
+ result.add(new Vorgang(id, vorgangstyp, zeitraeume));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
@@ -471,22 +469,38 @@ public class VergleichController {
|
|
|
JsonNode primaryItem = rightItem != null ? rightItem : leftItem;
|
|
JsonNode primaryItem = rightItem != null ? rightItem : leftItem;
|
|
|
|
|
|
|
|
if (primaryPerson == null) {
|
|
if (primaryPerson == null) {
|
|
|
- return new MitgliedRow(personId, symbol, symbolClass, rowClass, "", "", "", "", "", "", "");
|
|
|
|
|
|
|
+ return new MitgliedRow(
|
|
|
|
|
+ personId, symbol, symbolClass, rowClass,
|
|
|
|
|
+ "", "", "", "", "", "", "", "", "", "", "",
|
|
|
|
|
+ "", "", "", "", "", "", "", "", "", ""
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Extract data with change detection for HTML
|
|
|
|
|
|
|
+ // Extract data with change detection for HTML - Hauptfelder
|
|
|
String nameHtml = buildPersonFieldHtml(
|
|
String nameHtml = buildPersonFieldHtml(
|
|
|
rightPerson, leftPerson,
|
|
rightPerson, leftPerson,
|
|
|
p -> p.path("nachname").asText("") + ", " + p.path("vorname").asText(""),
|
|
p -> p.path("nachname").asText("") + ", " + p.path("vorname").asText(""),
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
|
|
+ String blocknameHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("blockname").asBoolean(false) ? "☑" : "☐",
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
String geburtsdatumHtml = buildPersonFieldHtml(
|
|
String geburtsdatumHtml = buildPersonFieldHtml(
|
|
|
rightPerson, leftPerson,
|
|
rightPerson, leftPerson,
|
|
|
p -> !p.path("geburtsdatum").asText("").isEmpty() ? FormatUtil.date(p.path("geburtsdatum").asText("")) : "",
|
|
p -> !p.path("geburtsdatum").asText("").isEmpty() ? FormatUtil.date(p.path("geburtsdatum").asText("")) : "",
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
|
|
+ String sterbedatumHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> !p.path("sterbedatum").asText("").isEmpty() ? FormatUtil.date(p.path("sterbedatum").asText("")) : "",
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
String familienstandHtml = buildPersonFieldHtml(
|
|
String familienstandHtml = buildPersonFieldHtml(
|
|
|
rightPerson, leftPerson,
|
|
rightPerson, leftPerson,
|
|
|
p -> p.path("familienstand").asText(""),
|
|
p -> p.path("familienstand").asText(""),
|
|
@@ -499,36 +513,106 @@ public class VergleichController {
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
|
|
+ String anredeHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("anrede").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // Item-level fields - angepasst an Schema
|
|
|
String verwandtschaftHtml = buildItemFieldHtml(
|
|
String verwandtschaftHtml = buildItemFieldHtml(
|
|
|
rightItem, leftItem,
|
|
rightItem, leftItem,
|
|
|
- i -> i.path("verwandtschaft").asText(""),
|
|
|
|
|
|
|
+ i -> i.path("verwandtschaftsverhaeltnis").asText(""),
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- String sozialstellungHtml = buildItemFieldHtml(
|
|
|
|
|
- rightItem, leftItem,
|
|
|
|
|
- i -> i.path("sozialstellung").asText(""),
|
|
|
|
|
|
|
+ String ausschlussgrundHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("ausschlussgrund").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String sozialstellungHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("sozialstellung").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String aufenthaltstitelEndeHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> !p.path("aufenthaltstitelEnde").asText("").isEmpty() ? FormatUtil.date(p.path("aufenthaltstitelEnde").asText("")) : "",
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- String istKindHtml = buildItemFieldHtml(
|
|
|
|
|
|
|
+ String antragstellerHtml = buildItemFieldHtml(
|
|
|
rightItem, leftItem,
|
|
rightItem, leftItem,
|
|
|
- i -> i.path("istKind").asBoolean(false) ? "Ja" : "Nein",
|
|
|
|
|
|
|
+ i -> i.path("rolleImHaushalt").asText("").equals("Antragsteller") ? "☑" : "☐",
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String zahlungsempfaengerHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("zahlungsempfaenger").asBoolean(false) ? "☑" : "☐",
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // Zusatzfelder
|
|
|
|
|
+ String titelHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("titel").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String geburtsortHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("geburtsort").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String telefonHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("telefon").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String aktenzeichenSozialHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("aktenzeichenSozial").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String geburtsnameHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("geburtsname").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String alterNameHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("alterName").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String emailHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("email").asText(""),
|
|
|
|
|
+ hasChanges
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ String postabrutionsnummerHtml = buildPersonFieldHtml(
|
|
|
|
|
+ rightPerson, leftPerson,
|
|
|
|
|
+ p -> p.path("postabrutionsnummer").asText(""),
|
|
|
hasChanges
|
|
hasChanges
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
return new MitgliedRow(
|
|
return new MitgliedRow(
|
|
|
- personId,
|
|
|
|
|
- symbol,
|
|
|
|
|
- symbolClass,
|
|
|
|
|
- rowClass,
|
|
|
|
|
- nameHtml,
|
|
|
|
|
- geburtsdatumHtml,
|
|
|
|
|
- familienstandHtml,
|
|
|
|
|
- geschlechtHtml,
|
|
|
|
|
- verwandtschaftHtml,
|
|
|
|
|
- sozialstellungHtml,
|
|
|
|
|
- istKindHtml
|
|
|
|
|
|
|
+ personId, symbol, symbolClass, rowClass,
|
|
|
|
|
+ nameHtml, blocknameHtml, geburtsdatumHtml, sterbedatumHtml,
|
|
|
|
|
+ familienstandHtml, geschlechtHtml, anredeHtml,
|
|
|
|
|
+ verwandtschaftHtml, ausschlussgrundHtml, sozialstellungHtml, aufenthaltstitelEndeHtml,
|
|
|
|
|
+ antragstellerHtml, zahlungsempfaengerHtml,
|
|
|
|
|
+ titelHtml, geburtsortHtml, telefonHtml, aktenzeichenSozialHtml,
|
|
|
|
|
+ geburtsnameHtml, alterNameHtml, emailHtml, postabrutionsnummerHtml
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -541,9 +625,10 @@ public class VergleichController {
|
|
|
!Objects.equals(rightPerson.path("geburtsdatum").asText(""), leftPerson.path("geburtsdatum").asText("")) ||
|
|
!Objects.equals(rightPerson.path("geburtsdatum").asText(""), leftPerson.path("geburtsdatum").asText("")) ||
|
|
|
!Objects.equals(rightPerson.path("familienstand").asText(""), leftPerson.path("familienstand").asText("")) ||
|
|
!Objects.equals(rightPerson.path("familienstand").asText(""), leftPerson.path("familienstand").asText("")) ||
|
|
|
!Objects.equals(rightPerson.path("geschlecht").asText(""), leftPerson.path("geschlecht").asText("")) ||
|
|
!Objects.equals(rightPerson.path("geschlecht").asText(""), leftPerson.path("geschlecht").asText("")) ||
|
|
|
- !Objects.equals(rightItem.path("verwandtschaft").asText(""), leftItem.path("verwandtschaft").asText("")) ||
|
|
|
|
|
- !Objects.equals(rightItem.path("sozialstellung").asText(""), leftItem.path("sozialstellung").asText("")) ||
|
|
|
|
|
- rightItem.path("istKind").asBoolean(false) != leftItem.path("istKind").asBoolean(false);
|
|
|
|
|
|
|
+ !Objects.equals(rightItem.path("verwandtschaftsverhaeltnis").asText(""), leftItem.path("verwandtschaftsverhaeltnis").asText("")) ||
|
|
|
|
|
+ !Objects.equals(rightPerson.path("sozialstellung").asText(""), leftPerson.path("sozialstellung").asText("")) ||
|
|
|
|
|
+ !Objects.equals(rightItem.path("rolleImHaushalt").asText(""), leftItem.path("rolleImHaushalt").asText("")) ||
|
|
|
|
|
+ rightPerson.path("zahlungsempfaenger").asBoolean(false) != leftPerson.path("zahlungsempfaenger").asBoolean(false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static String buildPersonFieldHtml(JsonNode rightPerson, JsonNode leftPerson, Function<JsonNode, String> extractor, boolean hasChanges) {
|
|
private static String buildPersonFieldHtml(JsonNode rightPerson, JsonNode leftPerson, Function<JsonNode, String> extractor, boolean hasChanges) {
|
|
@@ -630,12 +715,12 @@ public class VergleichController {
|
|
|
return !artZusatz.isEmpty() ? art + " (" + artZusatz + ")" : art;
|
|
return !artZusatz.isEmpty() ? art + " (" + artZusatz + ")" : art;
|
|
|
}, hasChanges);
|
|
}, hasChanges);
|
|
|
|
|
|
|
|
- String frequenzHtml = buildEinkommenFieldHtml(rightItem, leftItem,
|
|
|
|
|
|
|
+ String faktorHtml = buildEinkommenFieldHtml(rightItem, leftItem,
|
|
|
i -> {
|
|
i -> {
|
|
|
- int frequenz = i.path("frequenz").asInt(1);
|
|
|
|
|
- return frequenz == 1 ? "monatlich" :
|
|
|
|
|
- frequenz == 12 ? "jährlich" :
|
|
|
|
|
- frequenz + "x/Jahr";
|
|
|
|
|
|
|
+ double faktor = i.path("faktor").asDouble(12);
|
|
|
|
|
+ return faktor == 12 ? "monatlich" :
|
|
|
|
|
+ faktor == 1 ? "jährlich" :
|
|
|
|
|
+ String.format("%.0fx/Jahr", faktor);
|
|
|
}, hasChanges);
|
|
}, hasChanges);
|
|
|
|
|
|
|
|
String betragHtml = buildEinkommenFieldHtml(rightItem, leftItem,
|
|
String betragHtml = buildEinkommenFieldHtml(rightItem, leftItem,
|
|
@@ -659,13 +744,10 @@ public class VergleichController {
|
|
|
return werbungskosten > 0 ? String.format("%.2f €", werbungskosten) : "";
|
|
return werbungskosten > 0 ? String.format("%.2f €", werbungskosten) : "";
|
|
|
}, hasChanges);
|
|
}, hasChanges);
|
|
|
|
|
|
|
|
- String berechnungsartHtml = buildEinkommenFieldHtml(rightItem, leftItem,
|
|
|
|
|
- i -> i.path("berechnungsart").asText(""), hasChanges);
|
|
|
|
|
-
|
|
|
|
|
result.add(new EinkommenZeile(
|
|
result.add(new EinkommenZeile(
|
|
|
symbol, symbolClass, rowClass,
|
|
symbol, symbolClass, rowClass,
|
|
|
- artHtml, frequenzHtml, betragHtml,
|
|
|
|
|
- zuschlagHtml, abschlagHtml, werbungskostenHtml, berechnungsartHtml
|
|
|
|
|
|
|
+ artHtml, faktorHtml, betragHtml,
|
|
|
|
|
+ zuschlagHtml, abschlagHtml, werbungskostenHtml
|
|
|
));
|
|
));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -676,12 +758,11 @@ public class VergleichController {
|
|
|
private static boolean detectEinkommenChanges(JsonNode rightItem, JsonNode leftItem) {
|
|
private static boolean detectEinkommenChanges(JsonNode rightItem, JsonNode leftItem) {
|
|
|
return !Objects.equals(rightItem.path("art").asText(""), leftItem.path("art").asText("")) ||
|
|
return !Objects.equals(rightItem.path("art").asText(""), leftItem.path("art").asText("")) ||
|
|
|
!Objects.equals(rightItem.path("artZusatz").asText(""), leftItem.path("artZusatz").asText("")) ||
|
|
!Objects.equals(rightItem.path("artZusatz").asText(""), leftItem.path("artZusatz").asText("")) ||
|
|
|
- rightItem.path("frequenz").asInt(1) != leftItem.path("frequenz").asInt(1) ||
|
|
|
|
|
|
|
+ rightItem.path("faktor").asDouble(12) != leftItem.path("faktor").asDouble(12) ||
|
|
|
rightItem.path("betrag").asDouble(0.0) != leftItem.path("betrag").asDouble(0.0) ||
|
|
rightItem.path("betrag").asDouble(0.0) != leftItem.path("betrag").asDouble(0.0) ||
|
|
|
rightItem.path("zuschlag").asDouble(0.0) != leftItem.path("zuschlag").asDouble(0.0) ||
|
|
rightItem.path("zuschlag").asDouble(0.0) != leftItem.path("zuschlag").asDouble(0.0) ||
|
|
|
rightItem.path("abschlag").asDouble(0.0) != leftItem.path("abschlag").asDouble(0.0) ||
|
|
rightItem.path("abschlag").asDouble(0.0) != leftItem.path("abschlag").asDouble(0.0) ||
|
|
|
- rightItem.path("werbungskosten").asDouble(0.0) != leftItem.path("werbungskosten").asDouble(0.0) ||
|
|
|
|
|
- !Objects.equals(rightItem.path("berechnungsart").asText(""), leftItem.path("berechnungsart").asText(""));
|
|
|
|
|
|
|
+ rightItem.path("werbungskosten").asDouble(0.0) != leftItem.path("werbungskosten").asDouble(0.0);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static String buildEinkommenFieldHtml(JsonNode rightItem, JsonNode leftItem, Function<JsonNode, String> extractor, boolean hasChanges) {
|
|
private static String buildEinkommenFieldHtml(JsonNode rightItem, JsonNode leftItem, Function<JsonNode, String> extractor, boolean hasChanges) {
|
|
@@ -750,10 +831,10 @@ public class VergleichController {
|
|
|
|
|
|
|
|
String frequenzHtml = buildFreibetragFieldHtml(rightItem, leftItem,
|
|
String frequenzHtml = buildFreibetragFieldHtml(rightItem, leftItem,
|
|
|
i -> {
|
|
i -> {
|
|
|
- int frequenz = i.path("frequenz").asInt(1);
|
|
|
|
|
- return frequenz == 1 ? "monatlich" :
|
|
|
|
|
- frequenz == 12 ? "jährlich" :
|
|
|
|
|
- frequenz + "x/Jahr";
|
|
|
|
|
|
|
+ double faktor = i.path("faktor").asDouble(12);
|
|
|
|
|
+ return faktor == 12 ? "monatlich" :
|
|
|
|
|
+ faktor == 1 ? "jährlich" :
|
|
|
|
|
+ String.format("%.0fx/Jahr", faktor);
|
|
|
}, hasChanges);
|
|
}, hasChanges);
|
|
|
|
|
|
|
|
String betragHtml = buildFreibetragFieldHtml(rightItem, leftItem,
|
|
String betragHtml = buildFreibetragFieldHtml(rightItem, leftItem,
|
|
@@ -779,7 +860,7 @@ public class VergleichController {
|
|
|
|
|
|
|
|
private static boolean detectFreibetragChanges(JsonNode rightItem, JsonNode leftItem) {
|
|
private static boolean detectFreibetragChanges(JsonNode rightItem, JsonNode leftItem) {
|
|
|
return !Objects.equals(rightItem.path("art").asText(""), leftItem.path("art").asText("")) ||
|
|
return !Objects.equals(rightItem.path("art").asText(""), leftItem.path("art").asText("")) ||
|
|
|
- rightItem.path("frequenz").asInt(1) != leftItem.path("frequenz").asInt(1) ||
|
|
|
|
|
|
|
+ rightItem.path("faktor").asDouble(12) != leftItem.path("faktor").asDouble(12) ||
|
|
|
rightItem.path("betrag").asDouble(0.0) != leftItem.path("betrag").asDouble(0.0) ||
|
|
rightItem.path("betrag").asDouble(0.0) != leftItem.path("betrag").asDouble(0.0) ||
|
|
|
!Objects.equals(rightItem.path("fristDatum").asText(""), leftItem.path("fristDatum").asText(""));
|
|
!Objects.equals(rightItem.path("fristDatum").asText(""), leftItem.path("fristDatum").asText(""));
|
|
|
}
|
|
}
|