Skip to content

Commit

Permalink
feat(PKH Eigentum PDF Filler) (#1328)
Browse files Browse the repository at this point in the history
* move eigentumerMapping to shared location, add shared attachBankkonten function and use in BerH/PKH, add fillEigentum function for PKH

* rename attachBankkonten function, print all bank account info in anhang, add unit tests

* move grundeigentumArtMapping to shared location, rename shared eigentum helpers, begin filling out fillGrundeigentum function

* print =1 bank konto as comma separated values

* add reusable attachGrundeigentumToAnhang,, fill out Grundeigentum section in PDF, add tests

* add kraftfahrzeug pdf filler

* fix typo in geldanlagenArray, fill out bargeld or wertgegenstaende

* add sonstige vermoegenswerte pdf filler

* add sonstigeVermoegenswerte pdf filler to eigentum filler

* refactor anhang filler functions to create attachment within function body instead of passing in

* use "Siehe Anhang" globally instead of "Bitte im Anhang prüfen"
  • Loading branch information
Spencer6497 authored Oct 22, 2024
1 parent 4af3003 commit 646b0c1
Show file tree
Hide file tree
Showing 31 changed files with 1,136 additions and 304 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { z } from "zod";
import {
besondereBelastungenSchema,
bankkontenArraySchema,
gelanlagenArraySchema,
geldanlagenArraySchema,
grundeigentumArraySchema,
kinderArraySchema,
kraftfahrzeugeArraySchema,
Expand Down Expand Up @@ -56,7 +56,7 @@ export const beratungshilfeFinanzielleAngaben = {
hasKraftfahrzeug: YesNoAnswer,
kraftfahrzeuge: kraftfahrzeugeArraySchema,
hasGeldanlage: YesNoAnswer,
geldanlagen: gelanlagenArraySchema,
geldanlagen: geldanlagenArraySchema,
eigentumTotalWorth: z.enum(
["less10000", "more10000", "unsure"],
customRequiredErrorMessage,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { duplicateContext } from "~/flows/common";
import {
besondereBelastungenSchema,
bankkontenArraySchema,
gelanlagenArraySchema,
geldanlagenArraySchema,
grundeigentumArraySchema,
kinderArraySchema,
kraftfahrzeugeArraySchema,
Expand Down Expand Up @@ -50,7 +50,7 @@ export const prozesskostenhilfeFinanzielleAngabenContext = {
hasKraftfahrzeug: YesNoAnswer,
kraftfahrzeuge: kraftfahrzeugeArraySchema,
hasGeldanlage: YesNoAnswer,
geldanlagen: gelanlagenArraySchema,
geldanlagen: geldanlagenArraySchema,
hasGrundeigentum: YesNoAnswer,
grundeigentum: grundeigentumArraySchema,
hasWertsache: YesNoAnswer,
Expand Down
14 changes: 12 additions & 2 deletions app/flows/shared/finanzielleAngaben/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ export const Eigentuemer = z.enum(
customRequiredErrorMessage,
);

export type Eigentumer = z.infer<typeof Eigentuemer>;

const MINUS_150_YEARS = -150;

export const GrundeigentumArt = z.enum(
Expand Down Expand Up @@ -60,6 +62,8 @@ export const staatlicheLeistungen = z.enum(
customRequiredErrorMessage,
);

export type BankkontenArraySchema = z.infer<typeof bankkontenArraySchema>;

export const bankkontenArraySchema = z.array(
z.object({
bankName: stringRequiredSchema,
Expand All @@ -86,6 +90,10 @@ export const kraftfahrzeugWert = z.enum(
customRequiredErrorMessage,
);

export type KraftfahrzeugeArraySchema = z.infer<
typeof kraftfahrzeugeArraySchema
>;

export const kraftfahrzeugeArraySchema = z.array(
z
.object({
Expand All @@ -106,9 +114,9 @@ export const kraftfahrzeugeArraySchema = z.array(
.partial(),
);

export type GeldanlagenArraySchema = z.infer<typeof gelanlagenArraySchema>;
export type GeldanlagenArraySchema = z.infer<typeof geldanlagenArraySchema>;

export const gelanlagenArraySchema = z.array(
export const geldanlagenArraySchema = z.array(
z
.object({
art: z.enum(
Expand Down Expand Up @@ -162,6 +170,8 @@ export const grundeigentumArraySchema = z.array(
.partial(),
);

export type WertsachenArraySchema = z.infer<typeof wertsachenArraySchema>;

export const wertsachenArraySchema = z.array(
z.object({
art: stringRequiredSchema,
Expand Down
4 changes: 2 additions & 2 deletions app/services/pdf/attachment/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export const newPageHint = "Bitte im Anhang prüfen";

export type AttachmentEntries = {
title: string;
text?: string;
level?: "h2" | "h3" | "h4";
}[];

export const SEE_IN_ATTACHMENT_DESCRIPTION = "Siehe Anhang";
6 changes: 0 additions & 6 deletions app/services/pdf/beratungshilfe/eigentuemerMapping.ts

This file was deleted.

7 changes: 5 additions & 2 deletions app/services/pdf/beratungshilfe/sections/A_angelegenheit.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import type { BeratungshilfeFormularContext } from "~/flows/beratungshilfeFormular";
import type { BerHPdfFillFunction } from "..";
import { newPageHint, type AttachmentEntries } from "../../attachment";
import {
SEE_IN_ATTACHMENT_DESCRIPTION,
type AttachmentEntries,
} from "../../attachment";

export const THEMA_RECHTSPROBLEM_TITLE = "Thema des Rechtsproblems";
export const GEGNER_TITLE = "Gegner";
Expand Down Expand Up @@ -41,7 +44,7 @@ export const fillAngelegenheit: BerHPdfFillFunction = ({

if (overflowDueToMaxChars || overflowDueToMaxNewLines) {
pdfValues.ichbeantrageBeratungshilfeinfolgenderAngelegenheitbitteSachverhaltkurzerlaeutern.value =
newPageHint;
SEE_IN_ATTACHMENT_DESCRIPTION;

attachment.push({
title: "Feld A: Das Rechtsproblem",
Expand Down
6 changes: 4 additions & 2 deletions app/services/pdf/beratungshilfe/sections/E_unterhalt.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import type { BerHPdfFillFunction } from "..";
import type { AttachmentEntries } from "../../attachment";
import {
SEE_IN_ATTACHMENT_DESCRIPTION,
type AttachmentEntries,
} from "../../attachment";

export const ATTACHMENT_DESCRIPTION_SECTION_E = "Feld E: Unterhaltszahlungen";
export const SEE_IN_ATTACHMENT_DESCRIPTION = "Siehe Anhang";

const familyRelationshipMap = {
mother: "Meine Mutter",
Expand Down
82 changes: 15 additions & 67 deletions app/services/pdf/beratungshilfe/sections/F_besitz/F_besitz.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { pdfFillReducer } from "~/services/pdf/fillOutFunction";
import {
attachBankkontenToAnhang,
attachGrundeigentumToAnhang,
eigentuemerMapping,
grundeigentumArtMapping,
} from "~/services/pdf/shared/eigentumHelpers";
import { arrayIsNonEmpty } from "~/util/array";
import { fillKraftfahrzeug } from "./fillKraftfahrzeug";
import type { BerHPdfFillFunction } from "../..";
import { fillVermoegenswerte } from "./fillVermoegenswerte";
import type { AttachmentEntries } from "../../../attachment";
import { newPageHint } from "../../../attachment";
import { eigentuemerMapping } from "../../eigentuemerMapping";
import { SEE_IN_ATTACHMENT_DESCRIPTION } from "../../../attachment";

export const fillBesitz: BerHPdfFillFunction = ({ userData, pdfValues }) => {
const attachment: AttachmentEntries = [];
Expand Down Expand Up @@ -39,7 +44,7 @@ export const fillFinancialBankkonto: BerHPdfFillFunction = ({
userData,
pdfValues,
}) => {
const attachment: AttachmentEntries = [];
let attachment: AttachmentEntries = [];
pdfValues.f1Konten1.value = userData.hasBankkonto === "no";
pdfValues.f1Konten2.value = userData.hasBankkonto === "yes";

Expand All @@ -62,30 +67,9 @@ export const fillFinancialBankkonto: BerHPdfFillFunction = ({

pdfValues.f4Kontostand.value = bankkonto.kontostand + " €";
} else {
pdfValues.f3Bank1.value = newPageHint;

attachment.push({
title: "Bankkonten",
level: "h3",
});
pdfValues.f3Bank1.value = SEE_IN_ATTACHMENT_DESCRIPTION;

bankkonten.forEach(
(
{ bankName, kontoEigentuemer, kontostand, kontoDescription, iban },
index,
) => {
attachment.push(
{ title: `Bankkonto ${index + 1}`, level: "h4" },
{ title: "Bank", text: bankName },
{ title: "Inhaber", text: eigentuemerMapping[kontoEigentuemer] },
{ title: "Kontostand", text: kontostand + " €" },
);

if (kontoDescription)
attachment.push({ title: "Beschreibung", text: kontoDescription });
if (iban) attachment.push({ title: "Iban", text: iban });
},
);
({ attachment } = attachBankkontenToAnhang([], bankkonten));
}
return { pdfValues, attachment };
};
Expand All @@ -94,7 +78,6 @@ export const fillFinancialGrundeigentum: BerHPdfFillFunction = ({
userData,
pdfValues,
}) => {
const attachment: AttachmentEntries = [];
const { eigentumTotalWorth, grundeigentum: grundeigentumArray } = userData;
pdfValues.f5Grundeigentum1.value = userData.hasGrundeigentum === "no";
pdfValues.f5Grundeigentum2.value = userData.hasGrundeigentum === "yes";
Expand All @@ -108,15 +91,6 @@ export const fillFinancialGrundeigentum: BerHPdfFillFunction = ({

if (!arrayIsNonEmpty(grundeigentumArray)) return { pdfValues };

const grundeigentumArtMapping = {
eigentumswohnung: "Wohnung",
einfamilienhaus: "Haus für Familie",
mehrereWohnungen: "Haus mit mehreren Wohnungen",
unbebaut: "Grundstück",
erbbaurecht: "Erbbaurecht",
garage: "Garagen(-hof)",
} as const;

if (grundeigentumArray.length === 1 && !shouldPrintNote) {
const grundeigentum = grundeigentumArray[0];

Expand All @@ -139,37 +113,11 @@ export const fillFinancialGrundeigentum: BerHPdfFillFunction = ({
pdfValues.f8Verkehrswert.value = grundeigentum.verkaufswert + " €";
} else {
pdfValues.f7Nutzungsart.value = pdfValues.f7Nutzungsart.value
? newPageHint + "\n" + pdfValues.f7Nutzungsart.value
: newPageHint;
? SEE_IN_ATTACHMENT_DESCRIPTION + "\n" + pdfValues.f7Nutzungsart.value
: SEE_IN_ATTACHMENT_DESCRIPTION;

attachment.push({
title: "Grundeigentum",
level: "h3",
});

grundeigentumArray.forEach((grundeigentum, index) => {
attachment.push(
{ title: `Grundeigentum ${index + 1}`, level: "h4" },
{
title: "Art",
text: grundeigentum.art
? grundeigentumArtMapping[grundeigentum.art]
: "",
},
{
title: "Eigentümer:in",
text: grundeigentum.eigentuemer
? eigentuemerMapping[grundeigentum.eigentuemer]
: "",
},
{ title: "Fläche", text: grundeigentum.flaeche + " m²" },
{ title: "Verkehrswert", text: grundeigentum.verkaufswert + " €" },
);
if (grundeigentum.isBewohnt === "yes")
attachment.push({ title: "Eigennutzung", text: "Ja" });
else if (grundeigentum.isBewohnt === "family")
attachment.push({ title: "Eigennutzung", text: "Von Familie" });
});
const { attachment } = attachGrundeigentumToAnhang(grundeigentumArray);
return { pdfValues, attachment };
}
return { pdfValues, attachment };
return { pdfValues };
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable sonarjs/no-duplicate-string */

import { type BeratungshilfeFormularContext } from "~/flows/beratungshilfeFormular";
import { newPageHint } from "~/services/pdf/attachment";
import { SEE_IN_ATTACHMENT_DESCRIPTION } from "~/services/pdf/attachment";
import { getBeratungshilfeParameters } from "~/services/pdf/beratungshilfe";
import {
fillFinancialBankkonto,
Expand Down Expand Up @@ -74,7 +74,7 @@ describe("F_besitz", () => {
expect(pdfValues.f1InhaberA.value).toBe(undefined);
expect(pdfValues.f2InhaberB.value).toBe(undefined);
expect(pdfValues.f2InhaberC.value).toBe(undefined);
expect(pdfValues.f3Bank1.value).toBe("Bitte im Anhang prüfen");
expect(pdfValues.f3Bank1.value).toBe("Siehe Anhang");
expect(pdfValues.f4Kontostand.value).toBe(undefined);

expect(attachment).toContainEqual({ title: "Bankkonten", level: "h3" });
Expand Down Expand Up @@ -189,7 +189,7 @@ describe("F_besitz", () => {
expect(pdfValues.f1InhaberA.value).toBe(undefined);
expect(pdfValues.f2InhaberB.value).toBe(undefined);
expect(pdfValues.f2InhaberC.value).toBe(undefined);
expect(pdfValues.f7Nutzungsart.value).toBe(newPageHint);
expect(pdfValues.f7Nutzungsart.value).toBe(SEE_IN_ATTACHMENT_DESCRIPTION);
});

it("should print a hinweis under 10000€", () => {
Expand Down Expand Up @@ -223,7 +223,9 @@ describe("F_besitz", () => {
fillFunctions: [fillFinancialGrundeigentum],
});
expect(pdfValues.f7Nutzungsart.value).toContain("Hinweis");
expect(pdfValues.f7Nutzungsart.value).toContain(newPageHint);
expect(pdfValues.f7Nutzungsart.value).toContain(
SEE_IN_ATTACHMENT_DESCRIPTION,
);
});
});

Expand All @@ -246,7 +248,7 @@ describe("F_besitz", () => {
expect(pdfValues.f14InhaberA.value).toBe(false);
expect(pdfValues.f14InhaberB.value).toBe(true);
expect(pdfValues.f14VermoegenswerteC.value).toBe(false);
expect(pdfValues.f15Bezeichnung.value).toBe("Teure Sache");
expect(pdfValues.f15Bezeichnung.value).toBe("Art: Teure Sache");
expect(pdfValues.f16RueckkaufswertoderVerkehrswertinEUR.value).toBe(
"100000",
);
Expand Down Expand Up @@ -329,7 +331,9 @@ describe("F_besitz", () => {
expect(pdfValues.f14InhaberA.value).toBe(undefined);
expect(pdfValues.f14InhaberB.value).toBe(undefined);
expect(pdfValues.f14VermoegenswerteC.value).toBe(undefined);
expect(pdfValues.f15Bezeichnung.value).toBe(newPageHint);
expect(pdfValues.f15Bezeichnung.value).toBe(
SEE_IN_ATTACHMENT_DESCRIPTION,
);
expect(pdfValues.f16RueckkaufswertoderVerkehrswertinEUR.value).toBe(
undefined,
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { BeratungshilfeFormularContext } from "~/flows/beratungshilfeFormular";
import { newPageHint } from "~/services/pdf/attachment";
import { SEE_IN_ATTACHMENT_DESCRIPTION } from "~/services/pdf/attachment";
import { getBeratungshilfeParameters } from "~/services/pdf/beratungshilfe";
import { fillKraftfahrzeug } from "~/services/pdf/beratungshilfe/sections/F_besitz/fillKraftfahrzeug";
import { pdfFillReducer } from "~/services/pdf/fillOutFunction";
Expand Down Expand Up @@ -80,7 +80,7 @@ describe("fillKraftfahrzeug", () => {
expect(pdfValues.f10KraftfahrzeugeA.value).toBe(undefined);
expect(pdfValues.f10KraftfahrzeugB.value).toBe(undefined);
expect(pdfValues.f10KraftfahrzeugC.value).toBe(undefined);
expect(pdfValues.f11Fahrzeugart.value).toBe(newPageHint);
expect(pdfValues.f11Fahrzeugart.value).toBe(SEE_IN_ATTACHMENT_DESCRIPTION);
expect(pdfValues.f12Verkehrswert.value).toBe(undefined);

expect(attachment[0]).toEqual({ title: "Kraftfahrzeuge", level: "h3" });
Expand Down Expand Up @@ -146,7 +146,7 @@ describe("fillKraftfahrzeug", () => {
expect(pdfValues.f10KraftfahrzeugeA.value).toBe(undefined);
expect(pdfValues.f10KraftfahrzeugB.value).toBe(undefined);
expect(pdfValues.f10KraftfahrzeugC.value).toBe(undefined);
expect(pdfValues.f11Fahrzeugart.value).toBe(newPageHint);
expect(pdfValues.f11Fahrzeugart.value).toBe(SEE_IN_ATTACHMENT_DESCRIPTION);
expect(pdfValues.f12Verkehrswert.value).toBe(undefined);

expect(attachment[0]).toEqual({ title: "Kraftfahrzeuge", level: "h3" });
Expand Down
Loading

0 comments on commit 646b0c1

Please sign in to comment.