feat: Immobilie, Versicherungen und Heim mit COPD-Verlauf
Etappe 6. Das leerstehende Haus, die Vertraege und der Gesundheitsverlauf - die drei Bereiche, in denen fuer diesen Fall das meiste Geld und das meiste Risiko liegt. Leerstands-Checkliste mit zehn Punkten, jeder mit Begruendung. Der wichtigste: den Gebaeudeversicherer ueber den Leerstand informieren - sonst droht Leistungsfreiheit, und zwar genau dann, wenn es brennt oder eine Leitung platzt. Dazu Verkehrssicherungspflicht, Frostschutz zum Oktober, Kontrollgaenge, Zaehlerstaende, Schluesselverzeichnis. Der Kuendigungsrechner nennt den spaetesten ABSENDETAG, nicht den Fristablauf: eine Kuendigung wirkt mit dem Zugang, nicht mit dem Abschicken. Drei Tage Postlaufpuffer sind einkalkuliert. Der Kuendigungs-Assistent beantwortet die Genehmigungsfrage nach § 1850 BGB nicht - er stellt sie und verlangt den Gang zum Rechtspfleger. Der Versandnachweis ist Pflichtfeld: ohne ihn kommt die Kuendigung nicht durch die Pruefung. Leistungszuschlag nach § 43c SGB XI mit Stand 01.01.2024 (15/30/50/75 Prozent nach Verweildauer, erst ab Pflegegrad 2). Die Oberflaeche zeigt, ab wann die naechste Stufe greift - das ist bares Geld und wird regelmaessig uebersehen. COPD-Schnellerfassung fuer Exazerbation, Sauerstoff, Sturz, Krankenhaus, Hilfsmittel und Impfungen, mit STIKO-Plan fuer COPD. Beschreibungen verschluesselt. Die Jahresauswertung ueber Exazerbationen und Krankenhaustage wandert in den Jahresbericht und begruendet eine Hoeherstufung. 74 Tests. Etappe: 6 Phase: Substanz
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { notFound, redirect } from 'next/navigation'
|
||||
import { SeitenKopf } from '@/components/seiten-kopf'
|
||||
import { VertragFormular } from '@/components/vertraege/vertrag-formular'
|
||||
import { aktiveBetreute, erfordereBenutzer, erfordereZugang } from '@/lib/auth/sitzung'
|
||||
import { db, nichtGeloescht } from '@/lib/db'
|
||||
import { oeffnen } from '@/lib/crypto/feld'
|
||||
import { alsIsoTag } from '@/lib/fristen/datum'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
/** Cent als Eingabetext: 481255 wird zu "4812,55". */
|
||||
function centAlsText(cent: bigint | null): string {
|
||||
if (cent === null) return ''
|
||||
const negativ = cent < 0n
|
||||
const betrag = negativ ? -cent : cent
|
||||
const euro = betrag / 100n
|
||||
const rest = betrag % 100n
|
||||
return `${negativ ? '-' : ''}${euro},${rest.toString().padStart(2, '0')}`
|
||||
}
|
||||
|
||||
export default async function VertragBearbeiten({
|
||||
params,
|
||||
}: {
|
||||
params: Promise<{ id: string }>
|
||||
}) {
|
||||
const { id } = await params
|
||||
const benutzer = await erfordereBenutzer(`/vertraege/${id}/bearbeiten`)
|
||||
const aktive = await aktiveBetreute(benutzer)
|
||||
if (!aktive) return null
|
||||
|
||||
const { darfSchreiben } = await erfordereZugang(aktive.id, 'VERTRAEGE', 'lesen')
|
||||
if (!darfSchreiben('VERTRAEGE')) redirect(`/vertraege/${id}`)
|
||||
|
||||
const vertrag = await db.vertrag.findFirst({
|
||||
where: { id, betreuteId: aktive.id, ...nichtGeloescht },
|
||||
})
|
||||
if (!vertrag) notFound()
|
||||
|
||||
const offen = oeffnen('Vertrag', vertrag)
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<SeitenKopf
|
||||
titel={`${vertrag.bezeichnung} bearbeiten`}
|
||||
beschreibung="Änderungen werden protokolliert. Die Vertragsnummer wird verschlüsselt gespeichert."
|
||||
pfad={[
|
||||
{ titel: 'Übersicht', href: '/heute' },
|
||||
{ titel: 'Verträge', href: '/vertraege' },
|
||||
{ titel: vertrag.bezeichnung, href: `/vertraege/${id}` },
|
||||
{ titel: 'Bearbeiten' },
|
||||
]}
|
||||
/>
|
||||
|
||||
<VertragFormular
|
||||
betreuteId={aktive.id}
|
||||
werte={{
|
||||
id: vertrag.id,
|
||||
bezeichnung: vertrag.bezeichnung,
|
||||
gesellschaft: vertrag.gesellschaft ?? '',
|
||||
art: vertrag.art,
|
||||
status: vertrag.status,
|
||||
vertragsnummer: offen.vertragsnummer ?? '',
|
||||
beginnAm: vertrag.beginnAm ? alsIsoTag(vertrag.beginnAm) : '',
|
||||
endeAm: vertrag.endeAm ? alsIsoTag(vertrag.endeAm) : '',
|
||||
kuendigungsfristMonate: vertrag.kuendigungsfristMonate?.toString() ?? '',
|
||||
kuendigungZum: vertrag.kuendigungZum ? alsIsoTag(vertrag.kuendigungZum) : '',
|
||||
gekuendigtAm: vertrag.gekuendigtAm ? alsIsoTag(vertrag.gekuendigtAm) : '',
|
||||
beitrag: centAlsText(vertrag.beitragCent),
|
||||
rhythmus: vertrag.rhythmus ?? '',
|
||||
bewertungSozialhilfe: vertrag.bewertungSozialhilfe,
|
||||
bewertungBegruendung: offen.bewertungBegruendung ?? '',
|
||||
notizen: offen.notizen ?? '',
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user