{% import "bausteine/bausatz.html" as b %} {# Eine einzelne Meldung im Bewohnerportal — Verlauf und Antwortfeld. **Dieselben Bausteine wie die Verfolgungsseite** (`bausteine/kommentar`, `bausteine/stand`): Es ist dieselbe Sicht auf dieselbe Meldung, nur hinter einer anderen Tuer. Ein zweiter Satz Bausteine waere ein zweiter Ort, an dem «Bearbeitet» oder das Statuswort vergessen wird. **Die Zusammenfuehrung mit `/v` ist Etappe 2, nicht dieser Block.** Die Verfolgungsseite hat seit Task 4 eine Teilvorlage mit Schnittstelle (`bausteine/verlauf.html`); sie hier zu uebernehmen wuerde den Rumpf aendern, und dieser Block aendert ihn nicht. Die Anhänge nennt die Seite beim Namen und verweist auf die eigene Durchreiche des Bewohnerportals (`/b/meldung//anhang/`). Eine Meldung, deren Fotos unerwähnt bleiben, sieht aus, als seien sie verloren. #}

← Zurück zu meinen Meldungen

{#- **Der Titel ist ein `h1`.** Seit dem Umzug auf den Anwendungs-Grundriss (2026-09-04) trägt die Seite keinen Kopfkasten mehr, der die erste Ebene besetzt hätte; ein `h2` ohne `h1` darüber lässt eine Vorlesesoftware im Leeren beginnen. Die Abschnitte darunter bleiben `h2` — sie sind jetzt die Titel der Kästen. -#}

{{ m.get('titel', '') }}

{{ kasten }}
{#- **Die BREITE Spalte steht links, die Angaben rechts** — die Regel dazu steht in `docs/gestaltung.md`: Wo die grosse Fläche eine Arbeitsfläche ist (Verlauf, Antwortfeld), steht sie links; nur wo sie ein Dokument ist, steht sie rechts. Bis zum 05.09.2026 war es hier umgekehrt und damit gespiegelt zum Backoffice-Ticket, das denselben Vorgang zeigt. Die Beschreibung gehört in diese Spalte, weil sie bis 10 000 Zeichen lang sein darf; in der 22 rem schmalen Nebenspalte stünde sie mehrere Bildschirme hoch. Die Eckwerte dort bleiben, was sie sind: kurz. -#} {#- **Im Kasten «Ihre Meldung» steht, was SIE geschrieben haben.** Der «Stand der Dinge» stand bis zum 05.09.2026 hier ganz oben — vor dem eigenen Text. Der Laientest desselben Tages: «Im Kasten ‹Ihre Meldung› erwarte ich meinen Text, nicht die Antwort der Verwaltung.» **Und er ist ganz weg, nicht bloss verschoben.** Der Stand IST der neueste Statuseintrag des Verlaufs; die API liefert ihn zweimal, einmal als eigenes Feld und einmal in `kommentare`. Ihn über den Verlauf zu setzen hätte denselben Satz zweimal untereinander gezeigt — was der Laientest auch so gemeldet hat (Code-Review 05.09.2026). Im Verlauf trägt er seine Statuskapsel und ist damit auffindbar. **`stand.html` ist weggefallen** (10.09.2026): Die Datei gibt es nicht mehr. Beide Seiten zeigen die ganze Statusgeschichte (`bausteine/statusverlauf.html`), hier in der rechten Spalte, auf `/v` als eigene Karte. Der Satz darüber, `/v` benutze den Stand weiter, stimmte danach nicht mehr und ist im Code-Review desselben Tages aufgefallen. **Ohne Beschreibung und ohne Anhang gibt es den Kasten nicht.** Beides ist freiwillig; übrig bliebe sonst eine Überschrift über nichts. -#} {%- if m.get('beschreibung') or m.get('anhaenge') %} {#- **Dasselbe Zeichen wie der Verlauf darunter, und das ist hier richtig.** Beide Kästen gehören zu einer Sache: Ihr Text und was daraus wurde. Der Unterschied steht in der Überschrift, nicht im Zeichen. Anders als in der rechten Spalte, wo das Zeichen eine eigene Kategorie behauptet hätte (siehe dort). -#} {%- call b.kasten("Ihre Meldung", klasse="bereichskarte", icon="sprechblase") %} {%+ if m.get('beschreibung') %}
{{ m.get('beschreibung')|formatiert }}
{% endif +%} {#- **Die Dateien stehen als Vorschau da, nicht als Aufzählung.** Bis zum 10.09.2026 war das eine Zeile mit Verweisen, und jeder Verweis lud herunter; der Befund des Auftraggebers war entsprechend: «Jetzt muss ich diese herunterladen.» Derselbe Baustein wie auf der Verfolgungsseite. -#} {%+ if m.get('anhaenge') %}{% with dateien = m.anhaenge, dateien_basis = "/b/meldung/" ~ (m.get('id', '')|pfadteil) ~ "/anhang" %}{% include "bausteine/dateiliste.html" %}{% endwith %}{% endif +%} {%- endcall %} {%- endif %} {#- **Derselbe Strang wie auf der Verfolgungsseite** (`bausteine/strang.html`), seit dem 10.09.2026. Vorher setzte diese Seite ihn selbst zusammen und bekam fertiges Markup durchgereicht; der EINTRAG war schon geteilt, die Hülle darum nicht. Reihenfolge, Schwelle und Filter hätten sonst zweimal gebaut werden müssen. -#} {%- call b.kasten("Verlauf", verlauf_gesamt if verlauf_gesamt else "", klasse="bereichskarte", icon="sprechblase") %} {% include "bausteine/strang.html" %} {%- endcall %} {#- **Antworten UNTER dem Verlauf.** Die Reihenfolge muss auf BEIDEN Seiten dieselbe sein — der Code-Review vom 10.09.2026 hat gemessen, dass sie es einmal nicht war. -#} {%- call b.kasten("Antworten", klasse="bereichskarte", icon="pfeil") %} {% include "bausteine/antwortformular.html" %} {%- endcall %}
{#- **Ohne Zeichen.** Es trug `werkzeug`, dasselbe, das jetzt die Meldung selbst trägt, und beide stehen nebeneinander. Von den beiden gehört es der Meldung: Die rechte Spalte ist der Rand des Vorgangs, keine eigene Sache, und ein Zeichen dort behauptet eine Kategorie, die es nicht gibt. -#} {#- **Was hier steht, beantwortet Fragen, die man sonst durch Scrollen beantwortet** (Vorgabe des Auftraggebers, 10.09.2026: «hätten bei Angaben zur Meldung nicht noch mehr Angaben Platz, die für den Nutzer hilfreich sind?»). Vier kamen dazu: Ort und Einheit sagen, WORUM es geht; «Zuletzt» beantwortet «kümmert sich jemand?»; und die Zahl der Nachrichten und Dateien sagt, was einen im Verlauf erwartet, bevor man hineingeht. Jede Zeile steht nur, wenn sie etwas trägt. Ein «Zuständig: —» ist keine Auskunft, sondern eine Zeile. -#} {%- call b.kasten("Angaben zur Meldung", klasse="bereichskarte") %}
{%- if m.get('nummer') %}
Nummer
{{ m.nummer }}
{% endif %} {%- if status %}
Status
{{ b.kapsel(status, statuston) }}
{% endif %} {%- if m.get('bearbeiter_vorname') %}
Zuständig
{{ m.bearbeiter_vorname }}
{% endif %} {%- if m.get('liegenschaft') %}
Liegenschaft
{{ m.liegenschaft }}
{% endif %} {%- if m.get('einheit') %}
Einheit
{{ m.einheit }}
{% endif %} {%- if erfasst %}
Eingegangen
{{ erfasst }}
{% endif %} {#- **«Letzte Rückmeldung» und nicht «Zuletzt».** Das Feld misst, wann jemand zuletzt GESCHRIEBEN hat; ein Statuswechsel ohne Statusmeldung schreibt keine Zeile und wäre darin nicht enthalten. Eine kleinere, wahre Auskunft schlägt eine grössere, die manchmal lügt (Code-Review 10.09.2026). Ohne Rückmeldung entfällt die Zeile. -#} {%- if rueckmeldung %}
Letzte Rückmeldung
{{ rueckmeldung }}
{% endif %} {#- `or []` ist kein Zierrat: `m.get(...)` liefert `None`, wenn das Feld fehlt, und `|length` bricht darauf ab. Der Fall tritt ein, solange irgendwo eine ältere Antwort im Umlauf ist. -#} {%- set n = (m.get('kommentare') or [])|length %} {%- set d = (m.get('anhaenge') or [])|length %} {#- **«0 Nachrichten» wird nicht geschrieben.** Eine Meldung kann Zustandswechsel und eine Datei haben und trotzdem kein Gespräch; dann stand dort «0 Nachrichten · 1 Datei» (Code-Review 10.09.2026). Was null ist, fällt weg. -#} {%- if n or d %}
Umfang
{%- if n %}{{ n }} {{ "Nachricht" if n == 1 else "Nachrichten" }}{% endif -%} {%- if n and d %} · {% endif -%} {%- if d %}{{ d }} {{ "Datei" if d == 1 else "Dateien" }}{% endif -%}
{% endif %}
{%- endcall %} {#- Die Statusgeschichte steht in der RECHTEN Spalte (Vorschlag des Auftraggebers, 10.09.2026) und nicht mehr im Verlauf: Der Verlauf in der Mitte ist damit reines Gespräch. Ohne Zustandswechsel gibt es die Karte nicht — eine Überschrift über nichts ist schlechter als keine. -#} {#- `statusverlauf` kommt aus dem Kontext und NICHT aus `m`, weil `_verlauf_aufbereiten` die Liste normalisiert (fehlendes Feld wird eine leere Liste). GEFILTERT wird sie ausdrücklich nicht — der Filter gehört zur Verlaufskarte, siehe die Begründung dort. -#} {%- if statusverlauf %} {%- call b.kasten("Was bisher geschah", statusverlauf|length, klasse="bereichskarte") %} {% include "bausteine/statusverlauf.html" %} {%- endcall %} {%- endif %}