Ausschliesslich Zeilenenden. Nachgewiesen mit "git diff --cached --ignore-cr-at-eol": Der Diff ist leer, es hat sich kein Zeichen Inhalt geaendert. Deshalb ein eigener Commit: 7448 geaenderte Zeilen in einem Commit mit echten Aenderungen zu verstecken, macht die Historie an dieser Stelle unlesbar. So laesst er sich beim Durchsehen ueberspringen. Refs #26
150 lines
5.5 KiB
TypeScript
150 lines
5.5 KiB
TypeScript
import { notFound } from 'next/navigation'
|
|
import { Trash2 } from 'lucide-react'
|
|
import { SeitenKopf } from '@/components/seiten-kopf'
|
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
|
|
import { AktionMitRueckfrage } from '@/components/sozialhilfe/bausteine'
|
|
import { BescheidFormular } from '@/components/sozialhilfe/bescheid-formular'
|
|
import { BescheidPruefung } from '@/components/sozialhilfe/bescheid-pruefung'
|
|
import { oeffnen } from '@/lib/crypto/feld'
|
|
import { db, nichtGeloescht } from '@/lib/db'
|
|
import { alsIsoTag, heuteAlsTag } from '@/lib/fristen/datum'
|
|
import { BESCHEID_ART_BESCHRIFTUNG } from '@/lib/sozialhilfe/bescheide'
|
|
import { betragFormatieren } from '@/lib/finanzen/betrag'
|
|
import {
|
|
fristAmpel,
|
|
rechtsbehelfsfristBerechnen,
|
|
zugangsvermutung,
|
|
} from '@/lib/sozialhilfe/rechtsbehelf'
|
|
import { sozialhilfeKontext } from '@/lib/sozialhilfe/zugang'
|
|
import { bescheidLoeschen } from '@/server/actions/sozialhilfe'
|
|
import { formatDatum } from '@/lib/utils'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
/**
|
|
* Bescheid-Prüfung.
|
|
*
|
|
* Der Rechenweg der Widerspruchsfrist steht ausgeschrieben da - die
|
|
* Anwendung kann sich irren, und wer eine Frist verpasst, soll sehen
|
|
* können, wo die Rechnung abgebogen ist.
|
|
*/
|
|
export default async function BescheidSeite({
|
|
params,
|
|
}: {
|
|
params: Promise<{ antragId: string; bescheidId: string }>
|
|
}) {
|
|
const { antragId, bescheidId } = await params
|
|
const { betreuteId, darfSchreiben } = await sozialhilfeKontext()
|
|
|
|
const bescheid = await db.bescheid.findFirst({
|
|
where: { id: bescheidId, antragId, antrag: { betreuteId }, ...nichtGeloescht },
|
|
include: { antrag: { select: { id: true, traeger: true, aktenzeichen: true } } },
|
|
})
|
|
if (!bescheid) notFound()
|
|
|
|
const offen = oeffnen('Bescheid', bescheid)
|
|
const heute = heuteAlsTag()
|
|
|
|
const ergebnis = rechtsbehelfsfristBerechnen({
|
|
zugegangenAm: bescheid.zugegangenAm,
|
|
bescheidVom: bescheid.bescheidVom,
|
|
fristMonate: bescheid.rechtsbehelfsfristMonate,
|
|
heute,
|
|
})
|
|
|
|
const vorschlag = zugangsvermutung(bescheid.bescheidVom)
|
|
|
|
return (
|
|
<div className="space-y-8">
|
|
<SeitenKopf
|
|
titel={`${BESCHEID_ART_BESCHRIFTUNG[bescheid.art]} vom ${formatDatum(bescheid.bescheidVom)}`}
|
|
beschreibung={
|
|
<>
|
|
{bescheid.antrag.traeger}
|
|
{bescheid.antrag.aktenzeichen ? ` · Az. ${bescheid.antrag.aktenzeichen}` : ''} · Zugang{' '}
|
|
{formatDatum(bescheid.zugegangenAm)}
|
|
</>
|
|
}
|
|
pfad={[
|
|
{ titel: 'Start', href: '/heute' },
|
|
{ titel: 'Sozialhilfe', href: '/sozialhilfe' },
|
|
{ titel: 'Antragsakte', href: `/sozialhilfe/${antragId}` },
|
|
{ titel: 'Bescheid' },
|
|
]}
|
|
/>
|
|
|
|
<BescheidPruefung
|
|
bescheidId={bescheid.id}
|
|
pruefStatus={bescheid.pruefStatus}
|
|
widerspruchEingelegtAm={
|
|
bescheid.widerspruchEingelegtAm ? alsIsoTag(bescheid.widerspruchEingelegtAm) : ''
|
|
}
|
|
darfSchreiben={darfSchreiben}
|
|
rechenweg={{
|
|
berechenbar: ergebnis.berechenbar,
|
|
widerspruchMoeglichBis: ergebnis.widerspruchMoeglichBis
|
|
? alsIsoTag(ergebnis.widerspruchMoeglichBis)
|
|
: null,
|
|
rechnerischesEnde: ergebnis.rechnerischesEnde
|
|
? alsIsoTag(ergebnis.rechnerischesEnde)
|
|
: null,
|
|
verschoben: ergebnis.verschoben,
|
|
tageVerbleibend: ergebnis.tageVerbleibend,
|
|
abgelaufen: ergebnis.abgelaufen,
|
|
ampel: fristAmpel(ergebnis),
|
|
schritte: ergebnis.schritte,
|
|
hinweise: ergebnis.hinweise,
|
|
}}
|
|
/>
|
|
|
|
{offen.notizen && (
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Notizen</CardTitle>
|
|
<CardDescription>Verschlüsselt gespeichert.</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<p className="whitespace-pre-line text-sm">{offen.notizen}</p>
|
|
</CardContent>
|
|
</Card>
|
|
)}
|
|
|
|
{darfSchreiben && (
|
|
<section className="space-y-4">
|
|
<h2 className="text-lg font-semibold">Bescheid bearbeiten</h2>
|
|
<BescheidFormular
|
|
antragId={antragId}
|
|
zugangsvorschlag={{ datum: alsIsoTag(vorschlag.datum), hinweis: vorschlag.hinweis }}
|
|
werte={{
|
|
id: bescheid.id,
|
|
art: bescheid.art,
|
|
bescheidVom: alsIsoTag(bescheid.bescheidVom),
|
|
zugegangenAm: bescheid.zugegangenAm ? alsIsoTag(bescheid.zugegangenAm) : '',
|
|
zeitraumVon: bescheid.zeitraumVon ? alsIsoTag(bescheid.zeitraumVon) : '',
|
|
zeitraumBis: bescheid.zeitraumBis ? alsIsoTag(bescheid.zeitraumBis) : '',
|
|
betrag: bescheid.betragCent === null ? '' : betragFormatieren(bescheid.betragCent),
|
|
rechtsbehelfsfristMonate: bescheid.rechtsbehelfsfristMonate,
|
|
widerspruchEingelegtAm: bescheid.widerspruchEingelegtAm
|
|
? alsIsoTag(bescheid.widerspruchEingelegtAm)
|
|
: '',
|
|
notizen: offen.notizen ?? '',
|
|
}}
|
|
/>
|
|
|
|
<div className="border-t pt-6">
|
|
<AktionMitRueckfrage
|
|
aktion={bescheidLoeschen.bind(null, bescheid.id)}
|
|
frage="Diesen Bescheid in den Papierkorb legen? Er bleibt dort 30 Tage."
|
|
variant="outline"
|
|
size="default"
|
|
>
|
|
<Trash2 aria-hidden="true" />
|
|
Bescheid löschen
|
|
</AktionMitRueckfrage>
|
|
</div>
|
|
</section>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|