import Link from 'next/link'
import { AlertCircle, FileSearch, Plus, Repeat } from 'lucide-react'
import { Alert, AlertDescription } from '@/components/ui/alert'
import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'
import { Leerzustand, SeitenKopf } from '@/components/seiten-kopf'
import { Betrag } from '@/components/finanzen/bausteine'
import {
AlsGeklaertAbhaken,
ZahlungenZuordnen,
Zurueckholen,
} from '@/components/finanzen/wiederkehrend-aktionen'
import { finanzKontext } from '@/lib/finanzen/seite'
import { wiederkehrendLaden } from '@/lib/finanzen/wiederkehrend-laden'
import {
EINZELZAHLUNG_AB_CENT,
RHYTHMUS_BESCHRIFTUNG,
rhythmusErklaerung,
} from '@/lib/finanzen/wiederkehrend'
import { centZuZahl } from '@/lib/db'
import { formatCent, formatDatum } from '@/lib/utils'
export const metadata = { title: 'Wiederkehrende Zahlungen' }
export const dynamic = 'force-dynamic'
/**
* Wiederkehrende Zahlungen — die Suche nach unbekannten Verträgen.
*
* Am Anfang einer Betreuung weiß niemand, welche Verträge es gibt. Die
* Antwort steht im Kontoauszug: Wer regelmäßig abbucht, hat einen Vertrag.
* Diese Seite macht aus hunderten Buchungszeilen eine Arbeitsliste.
*
* Sie legt von sich aus nichts an. Jede Zeile endet in einer Entscheidung,
* die ein Mensch trifft — Vertrag anlegen oder abhaken.
*/
export default async function WiederkehrendSeite() {
const { betreute, darfSchreiben } = await finanzKontext()
const schreiben = darfSchreiben('FINANZEN')
const bild = await wiederkehrendLaden(betreute.id)
const ohneVertrag = bild.gruppen.filter((gruppe) => gruppe.vertragId === null)
const mitVertrag = bild.gruppen.filter((gruppe) => gruppe.vertragId !== null)
return (
Zu den Buchungen
}
/>
{bild.ausgabenGesamt === 0 ? (
Kontoauszug einlesen
}
/>
) : (
<>
{/* --- Kandidaten ohne Vertrag ----------------------------------- */}
Ohne hinterlegten Vertrag
{ohneVertrag.length > 0 && (
{ohneVertrag.length}
)}
Nach Jahresbetrag sortiert — was am meisten kostet, will man zuerst geklärt haben.
{ohneVertrag.length === 0 ? (
Zu jeder regelmäßigen Abbuchung liegt ein Vertrag in der Akte. Das ist der
Zustand, den man haben will.
) : (
EmpfängerRhythmusje Zahlungim JahrZeitraum
{schreiben && Und jetzt?}
{ohneVertrag.map((gruppe) => (
)}
{formatDatum(gruppe.ersteZahlung)}
bis {formatDatum(gruppe.letzteZahlung)}
{schreiben && (
)}
))}
)}
{/* --- Einzelne groessere Zahlungen ------------------------------ */}
{bild.einzelne.length > 0 && (
Einzelne größere Zahlungen
Kein Vertragsverdacht, sondern eine Merkliste. Die Gruppierung oben braucht
mindestens zwei Zahlungen — eine jährlich abgebuchte Prämie erscheint bei
einem importierten Jahr aber nur einmal. Ausgerechnet Versicherungen werden
oft jährlich gezahlt, deshalb steht hier alles ab{' '}
{formatCent(centZuZahl(EINZELZAHLUNG_AB_CENT))}.
)}
{/* --- Bereits erklaert ------------------------------------------ */}
{mitVertrag.length > 0 && (
Schon einem Vertrag zugeordnet
Erkannt am Namen der Gesellschaft. Steht hier etwas Falsches, stimmt die
Schreibweise am Vertrag nicht mit der auf dem Kontoauszug überein.
{mitVertrag.map((gruppe) => (
{gruppe.anzeigename}
{RHYTHMUS_BESCHRIFTUNG[gruppe.rhythmus]},{' '}
{formatCent(centZuZahl(gruppe.jahresbetragCent))} im Jahr
{/* Der Vertrag liegt vor - dann belegt er auch die
Zahlungen. Einzeln anzuklicken waeren bei drei
Jahren Laufzeit 36 Klicks. */}
{schreiben && gruppe.offeneBuchungIds.length > 0 && (
)}
{gruppe.offeneBuchungIds.length === 0 && (
Alle {gruppe.anzahl} Zahlungen sind dem Vertrag zugeordnet und damit
belegt.
)}
))}
)}
{/* --- Abgehakt --------------------------------------------------- */}
{bild.abgehakt.length > 0 && (
Als „kein Vertrag“ abgehakt
Diese Empfänger bleiben aus der Liste heraus, auch nach dem nächsten Import.
)}
Diese Seite wertet nur aus, sie legt nichts an. Gruppiert wird nach dem Empfänger
aus dem Kontoauszug — Groß- und Kleinschreibung, Satzzeichen und die Rechtsform
werden dabei zusammengefasst. Ähnliche, aber verschiedene Namen bleiben bewusst
getrennt: „Stadtwerke Bamberg“ und „Stadtwerke Bayreuth“ sind zwei Rechnungssteller.
>
)}