{# Das Kontrollbuch (Epic 10, Blöcke 10.2 und 10.3). Was an den allgemeinen Teilen abgeschlossen wurde: Liegenschaft, Datum, was, woran, wer. Die Zeitachse ist die Hauptsicht; die Frage «wann war der Lift dran» beantwortet der Anlagenfilter. **Die Liegenschaft steht in JEDER Zeile**, unabhängig davon, wie viele Häuser die Person hat (Entscheid vom 22.09.2026). Die Kopfzeile nennt die im Wahlschalter AKTIVE Liegenschaft; ohne diese Spalte läse eine Eigentümerin in zwei Häusern die Arbeiten des einen unter dem Namen des anderen. Der Grund gegen die frühere Bedingung «nur bei mehreren Liegenschaften» steht dreifach im Auftrag; der schwerste: Eine Verzweigung, die nur die halbe Zeit greift, ist genau die Sorte ungeprüfter Fall, an der 10.2 gescheitert ist. **Die Überschrift kommt als `titel` herein und steht nicht hier.** Ob der Bereich «Kontrollbuch» heissen soll, ist beim Auftraggeber noch offen (Entwurf 1a und 9): «Gebäudekontrollbuch» ist in VKF 10-15 ein normierter Begriff. Das sichtbare Wort steht darum genau einmal im Code, in `BEREICHE` in `main.py`, und diese Vorlage liest es von dort. **Der Bereich erklärt den Begriff nicht.** Er zeigt Daten. Ein Satz darüber, was ein Gebäudekontrollbuch ist oder wie lange etwas aufzubewahren wäre, ist eine Aussage über eine Norm an Laien; dafür gilt die Zweiprüfung aus `quellen/pruefung/` (Entwurf 1a). **Zwei Leerzustände, zwei Sätze.** Der Bestands-Leerzustand trägt hier mehr als sonst: Nach V1 startet das Kontrollbuch leer und fuellt sich aus dem laufenden Betrieb; ein «Keine Einträge» liest sich dann als «es wurde nichts gemacht». Der Wortlaut ist im Auftrag (`/opt/website/.auftraege/2026-09-21-kontrollbuch-api-und-portal.md`) festgelegt und wird wörtlich übernommen; der Entwurf 5.3 sagt nur, WAS der Leerzustand sagen muss. Der Filter-Leerzustand kam mit den Facetten (10.3) und sagt, dass die Filter zu eng sind. Ein dritter kam mit dem Blättern (U19): «Auf dieser Seite steht nichts mehr.» für eine Seite hinter dem Ende. #} {% import "bausteine/bausatz.html" as b %} {% import "bausteine/filter.html" as fl %} {% import "bausteine/sortkopf.html" as sk %}

{{ titel }}

{#- **Der Untertitel nennt den Bestand, und beim Filtern zwei Zahlen** (`docs/gestaltung.md`, dieselbe Form wie bei den drei anderen Listen). Schneider der Filter nichts weg, steht «2 Einträge gefunden»; **ein Filter ohne Treffer lässt ihn schweigen** (die Hausregel in `_untertitel`, dieselbe wie bei den drei anderen Listen): «0 von 3» erklärte nichts, was der Satz darunter nicht besser sagt. -#} {%+ if untertitel %}

{{ untertitel }}

{% endif +%} {#- Ohne Liegenschaft gibt es nichts zu zeigen und nichts zu melden, wie in den anderen Bereichen. Der Fall kann im gewöhnlichen Ablauf nicht eintreten (der Zutritt verlangt eine Eigentümerrolle), und wenn die Rollen zwischen zwei Aufrufen wegfallen, ist dieser Satz der ehrliche. -#} {%- if not liegenschaften %}

Zu Ihrer Adresse ist derzeit keine Liegenschaft hinterlegt. Bitte wenden Sie sich an Ihre Verwaltung.

{%- else %} {#- **Der Störungskasten und der Banner stehen VOR den Zuständen**, wie in `meldungen.html` und `zahlungen.html`: Eine Lücke und ein Aushang gelten unabhängig davon, was die Liste gerade zeigt. Beides nur im `else`-Zweig zu rendern hiesse, dass ausgerechnet auf der leeren Seite (dem Normalfall der ersten Monate) ein fehlender Mandant nicht gemeldet wird und der Aushang verschwindet. Ohne Liegenschaft gibt es dagegen keine Angaben, die unvollstaendig sein könnten; zwei Sätze über dieselbe Sache wären einer zu viel. -#} {{ unvollstaendig }} {{ banner }} {%- if zustand == 'ausfall' %}
Das Kontrollbuch ist zurzeit nicht abrufbar. Das liegt nicht an Ihnen — bitte versuchen Sie es später noch einmal.
{#- **Der Bestands-Leerzustand: wörtlich der vorgegebene Text.** Der Zusatz «die über diese Anwendung läuft» ist kein Füllwort: Ohne ihn behauptet der Satz Vollständigkeit, und die gibt es nicht. Er erscheint nur, wenn KEIN Filter gilt — sonst wäre «Hier entsteht das Kontrollbuch» die falsche Auskunft über eine Liste, die es gibt und die nur nichts trifft. **Und nur auf der ERSTEN Seite:** Ein Lesezeichen auf `?seite=5` über einem kurzen Bestand ist keine Aussage darüber, dass nie etwas erfasst wurde; dort steht der Seitensatz darunter. -#} {%- elif not eintraege and not gefiltert and seite == 0 %} {{ b.leerzustand("bestand", "Hier entsteht das Kontrollbuch", hinweis="Ab sofort erscheint hier jede abgeschlossene Arbeit an den allgemeinen Teilen, die über diese Anwendung läuft: was gemacht wurde, wann und durch wen. Arbeiten aus der Zeit davor sind nicht erfasst und erscheinen deshalb nicht, auch wenn sie ausgeführt wurden.") }} {%- else %} {#- **Die Facettenleiste steht auch über dem Filter-Leerzustand.** Sie ist der Weg aus einem Filter ohne Treffer — dieselbe Überlegung wie bei den anderen Listen; die Adressen baut `filteradresse` (`fl.leiste`). -#} {#- **Das Suchfeld steht seit U30 vorn** (Wunsch des Auftraggebers 21.10.2026). Der Platzhalter nennt Beispiele statt Spaltennamen (Laienprüfung 22.10.2026: «Woran» und «Wer» sind am Telefon Fragewörter ohne Bezug). -#} {{ fl.leiste(pfad, filter, filterfelder, was='z. B. Lift, Heizung oder Firma') }} {{ fl.kapseln(pfad, filter, kapseln_werte, ohne_filter) }} {#- Die Sortierzeile für das Telefon, wo der Tabellenkopf fehlt; dieselbe Zeile wie bei den Mitteilungen (`SORTIERWORT` kennt jeden Wert). -#}

{{ sortwort }}{% if filter.get('sortierung') %} · Neueste zuerst{% endif %}

{%- if eintraege %}
{#- **Drei der fünf Spalten sortieren** (Produktentscheid 21.10.2026, U30): Liegenschaft, Datum, Was; die Vorgabe bleibt «neueste zuerst». Sortiert wird in der API, vor dem Deckel. Woran und Wer bleiben fest: Dafür gibt es die Filter Anlage und die Suche. Die Liegenschaft steht vorn, weil sie die Zeile einordnet, bevor das Datum sie zeitlich einordnet. -#} {{- sk.kopf("Liegenschaft", "liegenschaft", filter.get('sortierung', ''), sortadresse) }} {{- sk.kopf("Datum", "datum", filter.get('sortierung', ''), sortadresse, vorgabe_ab=true) }} {{- sk.kopf("Was", "titel", filter.get('sortierung', ''), sortadresse) }} {{ zeilen_html }}
{{ titel }}
Woran Wer
{#- **Eine Seite ohne Zeilen ist nicht der Filter-Leerzustand.** Wer über «Ältere» hinausblättert oder ein Lesezeichen auf eine zu hohe Seite hat, sieht den Satz der Seite und darunter den Weg zurück; «Kein Eintrag passt zu diesen Filtern» wäre dort eine falsche Begründung. -#} {%- elif seite > 0 %} {{ b.leerzustand("filter", "Auf dieser Seite steht nichts mehr.", aktion_href=filteradresse(pfad, filter), aktion_wort="Zurück zum Anfang") }} {%- else %} {#- «Ihrer Suche» und der Hinweis stehen dabei, seit es eine Suche gibt (Laienprüfung 22.10.2026, zwei Runden): «Lift» findet keinen «Aufzug», und ein leeres Ergebnis las sich als «der Lift wurde nie gewartet». Der sichere Weg ist der Filter «Anlage»; und Arbeiten vor der Einführung fehlen auch hier, nicht nur im ganz leeren Kontrollbuch. Ein Datum der Einführung nennt der Satz nicht: Es ist nirgends gespeichert. -#} {{ b.leerzustand("filter", "Kein Eintrag passt zu Ihrer Suche oder den Filtern.", hinweis="Die Suche kennt keine anderen Wörter für dieselbe Sache: «Lift» findet keinen «Aufzug». Versuchen Sie ein anderes Wort oder wählen Sie die Anlage im Filter. Arbeiten aus der Zeit, bevor Ihre Verwaltung dieses Kontrollbuch führte, stehen nicht hier; fragen Sie dafür Ihre Verwaltung.", aktion_href=ohne_filter, aktion_wort="Alles zurücksetzen") }} {%- endif %} {#- **Die Blätterzeile steht auch über dem Filter-Leerzustand.** Sie ist der Weg zurück aus einer Seite, die nichts mehr trägt; die Filter reisen mit (`_blaettern_html`). Auf einer kurzen, einzigen Seite ist der Block leer. -#} {{ blaettern }} {%- endif %} {%- endif %}