From 54291f450babf7db7656fb12040bda684f8b0c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Thu, 12 Mar 2026 19:50:48 +0100 Subject: [PATCH] update antrag checklist, scenarios, settings, barrel export, delete obsolete test Co-Authored-By: Claude Opus 4.6 --- .../antrag/components/antrag-checklist.tsx | 39 +++++--- .../components/settings-page.tsx | 22 +++-- src/features/einstellungen/scenarios.ts | 88 ++++++++----------- src/features/kontakte/hooks.ts | 1 + src/features/prozess/index.ts | 8 +- src/shared/db/schema.test.ts | 13 --- 6 files changed, 86 insertions(+), 85 deletions(-) delete mode 100644 src/shared/db/schema.test.ts diff --git a/src/features/antrag/components/antrag-checklist.tsx b/src/features/antrag/components/antrag-checklist.tsx index 7d4f890..6e9c314 100644 --- a/src/features/antrag/components/antrag-checklist.tsx +++ b/src/features/antrag/components/antrag-checklist.tsx @@ -1,4 +1,8 @@ -import { useKontaktStats, useNutzer } from "@/features/prozess/hooks"; +import { + useErstgespraeche, + useKontaktStats, + useNutzer, +} from "@/features/prozess/hooks"; import { Card, CardContent } from "@/shared/components/ui/card"; import { Separator } from "@/shared/components/ui/separator"; import { PdfExportButton } from "./pdf-export-button"; @@ -6,13 +10,15 @@ import { PdfExportButton } from "./pdf-export-button"; interface ChecklistItem { label: string; fulfilled: boolean; + visible: boolean; } export function AntragChecklist() { const { data: nutzerRows, loading: nutzerLoading } = useNutzer(); const { data: statsRows, loading: statsLoading } = useKontaktStats(); + const { data: erstgespraeche, loading: egLoading } = useErstgespraeche(); - if (nutzerLoading || statsLoading) { + if (nutzerLoading || statsLoading || egLoading) { return

Laden…

; } @@ -27,42 +33,51 @@ export function AntragChecklist() { ); } + const hasDiagnose = erstgespraeche.some((e) => e.diagnose != null); + const hasDringlichkeit = erstgespraeche.some((e) => e.dringlichkeitscode); + const items: ChecklistItem[] = [ { - label: "Psychotherapeutische Sprechstunde besucht", - fulfilled: nutzer.aktueller_schritt !== "neu", + label: "Erstgespräch durchgeführt", + fulfilled: hasDiagnose, + visible: true, }, { - label: "Diagnose / Dringlichkeitscode erhalten", - fulfilled: nutzer.dringlichkeitscode, + label: "Dringlichkeitscode erhalten", + fulfilled: hasDringlichkeit, + visible: true, }, { label: "Terminservicestelle (TSS) kontaktiert", - fulfilled: nutzer.tss_beantragt, + fulfilled: nutzer.tss_kontaktiert_datum != null, + visible: hasDringlichkeit, }, { - label: "Eigenständige Therapeutensuche dokumentiert", - fulfilled: stats.absagen + stats.keine_antwort >= 5, + label: "Therapeutensuche dokumentiert", + fulfilled: Number(stats.absagen) + Number(stats.keine_antwort) >= 5, + visible: true, }, { label: "Absagenliste exportiert", fulfilled: false, + visible: true, }, ]; - const fulfilledCount = items.filter((i) => i.fulfilled).length; + const visibleItems = items.filter((i) => i.visible); + const fulfilledCount = visibleItems.filter((i) => i.fulfilled).length; return (

Kostenerstattungs-Assistent

- {fulfilledCount} von {items.length} Voraussetzungen erfüllt + {fulfilledCount} von {visibleItems.length} Voraussetzungen erfüllt

- {items.map((item, index) => ( + {visibleItems.map((item, index) => ( {item.fulfilled ? ( diff --git a/src/features/einstellungen/components/settings-page.tsx b/src/features/einstellungen/components/settings-page.tsx index 1048af4..5158278 100644 --- a/src/features/einstellungen/components/settings-page.tsx +++ b/src/features/einstellungen/components/settings-page.tsx @@ -10,14 +10,16 @@ import { Trash2, } from "lucide-react"; import { useState } from "react"; -import { seedToStep } from "@/features/einstellungen/scenarios"; +import { + type Scenario, + seedToScenario, +} from "@/features/einstellungen/scenarios"; import { deleteAllData } from "@/features/kontakte/hooks"; import { Button } from "@/shared/components/ui/button"; import { Card, CardContent } from "@/shared/components/ui/card"; import { Label } from "@/shared/components/ui/label"; import { Separator } from "@/shared/components/ui/separator"; import { Switch } from "@/shared/components/ui/switch"; -import type { ProzessSchritt } from "@/shared/db/schema"; import { useThemeStore } from "@/shared/hooks/use-theme"; type Theme = "light" | "dark" | "system"; @@ -35,7 +37,7 @@ export function SettingsPage() { const [devMode, setDevMode] = useState( () => localStorage.getItem("tpf-dev-mode") === "true", ); - const [scenarioStep, setScenarioStep] = useState("neu"); + const [scenarioStep, setScenarioStep] = useState("erstgespraech"); const [scenarioStatus, setScenarioStatus] = useState<"idle" | "done">("idle"); const { @@ -178,27 +180,29 @@ export function SettingsPage() { className="flex h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring" value={scenarioStep} onChange={(e) => { - setScenarioStep(e.target.value as ProzessSchritt); + setScenarioStep(e.target.value as Scenario); setScenarioStatus("idle"); }} > - + - -