// Verträge — contract templates: Mietvertrag, Kündigung, Mieterhöhung, etc.
// Templates auto-fill from property + unit + tenant Stammdaten.
const CONTRACT_TEMPLATES = [
{
id: 'mietvertrag-wohn',
title: 'Mietvertrag (Wohnraum)',
category: 'Vertrag',
description: 'Standard-Mietvertrag für Wohnraum nach §§ 535 ff. BGB. Unbefristet, Staffelmiete optional.',
pages: 6,
fields: ['Mieter', 'Objekt', 'Kaltmiete', 'Nebenkosten', 'Kaution', 'Mietbeginn'],
icon: 'doc',
legal: '§§ 535–580a BGB',
},
{
id: 'mietvertrag-gewerbe',
title: 'Mietvertrag (Gewerbe)',
category: 'Vertrag',
description: 'Gewerblicher Mietvertrag mit Indexmiete-Klausel und Konkurrenzschutz.',
pages: 8,
fields: ['Mieter', 'Objekt', 'Nutzungszweck', 'Vertragsdauer', 'Kaltmiete', 'Indexbindung'],
icon: 'doc',
legal: '§§ 535 ff. BGB · HGB',
},
{
id: 'staffelmietvertrag',
title: 'Staffelmietvertrag',
category: 'Vertrag',
description: 'Mietvertrag mit vereinbarten jährlichen Mieterhöhungen (§ 557a BGB).',
pages: 7,
fields: ['Mieter', 'Objekt', 'Startmiete', 'Staffelung', 'Kaution'],
icon: 'doc',
legal: '§ 557a BGB',
},
{
id: 'kuendigung-vermieter',
title: 'Kündigung durch Vermieter',
category: 'Kündigung',
description: 'Ordentliche Kündigung mit Begründung (Eigenbedarf, Pflichtverletzung, wirtschaftl. Verwertung).',
pages: 2,
fields: ['Mieter', 'Objekt', 'Kündigungsgrund', 'Kündigungstermin'],
icon: 'cancel',
legal: '§§ 573, 568 BGB',
},
{
id: 'kuendigung-fristlos',
title: 'Fristlose Kündigung',
category: 'Kündigung',
description: 'Außerordentliche Kündigung wegen Mietrückstand oder erheblicher Pflichtverletzung.',
pages: 2,
fields: ['Mieter', 'Objekt', 'Kündigungsgrund', 'Mietrückstand'],
icon: 'cancel',
legal: '§ 543 BGB',
},
{
id: 'kuendigungsbestaetigung',
title: 'Kündigungsbestätigung',
category: 'Kündigung',
description: 'Bestätigung einer Kündigung durch den Mieter mit Übergabetermin.',
pages: 1,
fields: ['Mieter', 'Objekt', 'Kündigungseingang', 'Auszugstermin'],
icon: 'doc',
legal: '§ 568 BGB',
},
{
id: 'mieterhoehung',
title: 'Mieterhöhung (Mietspiegel)',
category: 'Anpassung',
description: 'Mieterhöhungsverlangen bis zur ortsüblichen Vergleichsmiete.',
pages: 2,
fields: ['Mieter', 'Objekt', 'Aktuelle Miete', 'Neue Miete', 'Mietspiegel-Bezug'],
icon: 'arrow-up',
legal: '§§ 558 ff. BGB',
},
{
id: 'modernisierung',
title: 'Modernisierungsankündigung',
category: 'Anpassung',
description: 'Ankündigung baulicher Maßnahmen mit Fristen und voraussichtlicher Umlage.',
pages: 3,
fields: ['Mieter', 'Objekt', 'Maßnahme', 'Beginn', 'Dauer', 'Umlage'],
icon: 'wrench',
legal: '§§ 555c, 559 BGB',
},
{
id: 'uebergabeprotokoll',
title: 'Übergabeprotokoll',
category: 'Protokoll',
description: 'Wohnungsübergabe bei Ein- oder Auszug mit Zählerständen und Mängelliste.',
pages: 3,
fields: ['Mieter', 'Objekt', 'Datum', 'Zählerstände', 'Schlüssel'],
icon: 'clipboard',
legal: 'Beweissicherung',
},
{
id: 'nebenkostenabrechnung',
title: 'Nebenkostenabrechnung',
category: 'Abrechnung',
description: 'Jahresabrechnung der Betriebskosten nach BetrKV mit Verteilerschlüssel.',
pages: 4,
fields: ['Mieter', 'Objekt', 'Abrechnungszeitraum', 'Vorauszahlungen', 'Verteilerschlüssel'],
icon: 'receipt',
legal: '§ 556 BGB · BetrKV',
},
{
id: 'mahnung',
title: 'Mahnung Mietrückstand',
category: 'Mahnung',
description: 'Erste / zweite Mahnung mit Zahlungsfrist vor Kündigungsandrohung.',
pages: 1,
fields: ['Mieter', 'Objekt', 'Offener Betrag', 'Mahnstufe', 'Frist'],
icon: 'alert',
legal: '§ 286 BGB',
},
{
id: 'mietquittung',
title: 'Mietquittung',
category: 'Bescheinigung',
description: 'Quittung über erhaltene Mietzahlung auf Verlangen des Mieters.',
pages: 1,
fields: ['Mieter', 'Objekt', 'Zeitraum', 'Betrag'],
icon: 'receipt',
legal: '§ 368 BGB',
},
];
const CATEGORY_COLORS = {
'Vertrag': 'var(--accent)',
'Kündigung': 'var(--neg)',
'Anpassung': 'var(--warn)',
'Protokoll': 'var(--ink)',
'Abrechnung': 'var(--ink-3)',
'Mahnung': 'var(--neg)',
'Bescheinigung': 'var(--ink-3)',
};
// Sample generated documents (already-created contracts)
const GENERATED_DOCS = [
{ id: 'g1', templateId: 'mietvertrag-wohn', date: '2024-02-01', recipient: 'Mia Bauer', propertyId: 'p4', unitId: 'u11', status: 'unterzeichnet' },
{ id: 'g2', templateId: 'kuendigungsbestaetigung', date: '2026-04-12', recipient: 'Jens Maier', propertyId: 'p2', unitId: 'u8', status: 'versendet' },
{ id: 'g3', templateId: 'mieterhoehung', date: '2026-03-08', recipient: 'Anna Hofmann', propertyId: 'p1', unitId: 'u1', status: 'entwurf' },
{ id: 'g4', templateId: 'nebenkostenabrechnung', date: '2026-02-28', recipient: 'Familie Schulz', propertyId: 'p1', unitId: 'u3', status: 'versendet' },
{ id: 'g5', templateId: 'modernisierung', date: '2026-01-15', recipient: 'Tobias Lang', propertyId: 'p2', unitId: 'u6', status: 'unterzeichnet' },
{ id: 'g6', templateId: 'mahnung', date: '2026-04-25', recipient: 'Lukas Wolf', propertyId: 'p4', unitId: 'u12', status: 'entwurf' },
];
// ───── Main Page ─────
function ContractsPage({ data, route, setRoute }) {
if (route.contractWizard) {
return
| Datum | Vorlage | Empfänger | Objekt | Status | |
|---|---|---|---|---|---|
| {fmtDateShort(d.date)} |
{tmpl?.title || '—'}
{tmpl?.category}
|
{d.recipient} |
{prop?.name}
{unit?.label}
|
|
zwischen {ownerName}{ownerAddress && ownerAddress !== '—' ? `, ${ownerAddress.replace(/\n/g, ', ')}` : ''} (nachfolgend „Vermieter")
und {fill(form.tenantName)} (nachfolgend „Mieter")
Vermietet wird die Wohnung im Objekt {fill(property?.name)}, gelegen {fill(property?.address)}, {fill(unit?.label)} ({fill(unit?.floor)}), bestehend aus {fill(unit?.rooms + ' Zimmern')} mit einer Wohnfläche von {fill(unit?.size + ' m²')}.
Das Mietverhältnis beginnt am {fill(formatDate(form.startDate))} und läuft auf {form.contractType === 'unbefristet' ? 'unbestimmte Zeit' : 'bestimmte Zeit'}.
Die monatliche Kaltmiete beträgt {fill(fmtEUR(form.coldRent))}. Hinzu kommt eine Vorauszahlung auf die Betriebskosten in Höhe von {fill(fmtEUR(form.operatingCosts))}. Die Gesamtmiete von {fill(fmtEUR(totalRent))} ist monatlich im Voraus, spätestens bis zum dritten Werktag eines Monats, zu entrichten.
{t === 'staffelmietvertrag' && ( <>Die Kaltmiete erhöht sich jährlich zum Jahrestag des Mietbeginns um {fill(fmtEUR(form.staffelStep))}.
> )} {t === 'mietvertrag-gewerbe' && ( <>Die Mieträume werden ausschließlich zum Betrieb von {fill(form.purpose)} überlassen.
{form.indexClause && ( <>Die Miete ist an den Verbraucherpreisindex (VPI) für Deutschland gekoppelt. Anpassungen erfolgen erstmals 12 Monate nach Vertragsbeginn.
> )} > )}Der Mieter leistet eine Kaution in Höhe von {fill(fmtEUR(form.deposit))} ({(form.deposit / form.coldRent).toFixed(1)} Kaltmieten). Die Kaution wird zinsbringend angelegt.
Schönheitsreparaturen werden gemäß §§ 28 II. BV in den allgemein üblichen Fristen vom Mieter durchgeführt.
Betreff: Ordentliche Kündigung des Mietverhältnisses {fill(property?.address)}, {fill(unit?.label)}
Sehr geehrte/r {fill(form.tenantName)},
hiermit kündige ich das zwischen uns bestehende Mietverhältnis über die im Betreff genannte Wohnung ordentlich zum {fill(formatDate(form.terminationDate))}.
Kündigungsgrund: {fill(form.reason)}
{fill(form.reasonDetail)}
Hinweis nach § 574 BGB: Sie können der Kündigung widersprechen, wenn die Beendigung für Sie eine besondere Härte bedeuten würde. Der Widerspruch muss spätestens zwei Monate vor Beendigung schriftlich erklärt werden.
Ich bitte um Bestätigung des Erhalts dieses Schreibens.
Mit freundlichen Grüßen
Betreff: Fristlose Kündigung des Mietverhältnisses {fill(property?.address)}
Sehr geehrte/r {fill(form.tenantName)},
hiermit kündige ich das Mietverhältnis aus wichtigem Grund fristlos gemäß § 543 BGB.
Kündigungsgrund: {fill(form.reason)}
{form.reason === 'Mietrückstand' && (Sie befinden sich mit einem Betrag von {fill(fmtEUR(form.rentArrears))} im Zahlungsverzug, was mehr als zwei Monatsmieten entspricht. Damit ist der Tatbestand des § 543 Abs. 2 Nr. 3 BGB erfüllt.
)}{fill(form.reasonDetail)}
Ich fordere Sie auf, die Wohnung unverzüglich, spätestens innerhalb von 14 Tagen, zu räumen und ordnungsgemäß an mich zu übergeben.
Mit freundlichen Grüßen
Betreff: Mieterhöhungsverlangen für {fill(property?.address)}, {fill(unit?.label)}
Sehr geehrte/r {fill(form.tenantName)},
die ortsübliche Vergleichsmiete für vergleichbare Wohnungen ist gestiegen. Ich beantrage daher gemäß § 558 BGB Ihre Zustimmung zur Erhöhung der Kaltmiete:
| Bisherige Kaltmiete | {fmtEUR(form.currentRent)} |
| Neue Kaltmiete ab {formatDate(form.validFrom)} | {fmtEUR(form.newRent)} |
| Erhöhung | +{fmtEUR(diff)} |
Begründung: {fill(form.reference)}. Die Wartefrist von 15 Monaten seit der letzten Mieterhöhung ist eingehalten. Die Kappungsgrenze von 20 % in 3 Jahren wird nicht überschritten.
Ihre Zustimmung erbitte ich bis zum Ablauf des zweiten Monats nach Zugang dieses Schreibens. Bei Nichtzustimmung kann ich gemäß § 558b BGB Klage auf Zustimmung erheben.
Mit freundlichen Grüßen
Betreff: Bestätigung Ihrer Kündigung — {fill(property?.address)}, {fill(unit?.label)}
Sehr geehrte/r {fill(form.tenantName)},
hiermit bestätige ich den Eingang Ihrer Kündigung vom {fill(formatDate(form.receivedDate))}.
Das Mietverhältnis endet entsprechend zum {fill(formatDate(form.moveOutDate))}. Bitte vereinbaren Sie rechtzeitig einen Termin zur Wohnungsübergabe (mindestens 14 Tage vor Auszug).
Bei der Übergabe werden Zählerstände erfasst, die Wohnung auf Mängel geprüft und sämtliche Schlüssel zurückgenommen. Ihre Kaution rechne ich nach Vorliegen der Nebenkostenabrechnung ab.
Mit freundlichen Grüßen
Betreff: Modernisierungsankündigung gemäß § 555c BGB
Sehr geehrte/r {fill(form.tenantName)},
ich beabsichtige im Objekt {fill(property?.address)} folgende bauliche Maßnahmen durchzuführen:
{fill(form.measure)}
| Voraussichtlicher Beginn | {formatDate(form.beginDate)} |
| Voraussichtliche Dauer | {form.duration} |
| Mieterhöhung nach Maßnahme | +{fmtEUR(form.costAllocation)}/Monat |
Sie können einen Härteeinwand gemäß § 555d BGB binnen eines Monats nach Zugang dieser Ankündigung schriftlich erheben.
Mit freundlichen Grüßen
Objekt: {fill(property?.address)}, {fill(unit?.label)}
Übergabe am: {formatDate(form.handoverDate)}
Mieter: {fill(form.tenantName)}
| Strom (kWh) | {form.meterStrom} |
| Wasser (m³) | {form.meterWater} |
| Heizung | {form.meterHeat} |
Übergeben wurden {form.keyCount} Schlüssel.
{fill(form.defects)}
Mieter: {fill(form.tenantName)}
Objekt: {fill(property?.address)}, {fill(unit?.label)}
Abrechnungszeitraum: {form.period}
Verteilerschlüssel: {form.allocation}
| Geleistete Vorauszahlungen | {fmtEUR(form.prepayments)} |
| Tatsächliche Betriebskosten (Anteil) | {fmtEUR(form.actualCosts)} |
| {balance >= 0 ? 'Guthaben Ihrerseits' : 'Nachzahlungsbetrag'} | = 0 ? 'var(--pos)' : 'var(--neg)' }}>{fmtEUR(Math.abs(balance))} |
{balance >= 0 ? 'Der Betrag wird Ihnen innerhalb von 30 Tagen auf Ihr Konto erstattet.' : 'Bitte überweisen Sie den Nachzahlungsbetrag innerhalb von 30 Tagen.'}
Einsicht in die Belege ist nach Terminvereinbarung möglich.
Betreff: {form.stage}. Mahnung — Mietrückstand {fill(property?.address)}
Sehr geehrte/r {fill(form.tenantName)},
trotz fälliger Zahlung ist auf meinem Konto der Betrag von {fill(fmtEUR(form.amount))} bisher nicht eingegangen (ursprünglich fällig am {fill(formatDate(form.dueDate))}).
Ich bitte Sie, den ausstehenden Betrag bis spätestens {fill(formatDate(form.deadline))} auf folgendes Konto zu überweisen:
DE89 1234 5678 9012 3456 78
Inhaber: {ownerName}
Sollte der Betrag bis zum genannten Termin nicht eingegangen sein, sehe ich mich gezwungen, das Mietverhältnis fristlos zu kündigen (§ 543 BGB).
)}Mit freundlichen Grüßen
Hiermit bestätige ich, von {fill(form.tenantName)} für die Wohnung {fill(property?.address)}, {fill(unit?.label)} folgende Mietzahlung erhalten zu haben:
| Zeitraum | {form.period} |
| Betrag | {fmtEUR(form.amount)} |
Vorschau für diese Vorlage in Vorbereitung.