{# Die Auftragsseite `/a/{token}` in zwei Spalten (Leinwand «Handwerker · Einzelseite», Spec §5): links, was zu tun ist; rechts, wo der Auftrag steht. Am Telefon eine Spalte: Termin, Gut zu wissen, Arbeit, Checkliste, Dateien, Handlung, Rueckmeldung, Kontakt, Wo, Status. Die Spalten werden dort zu `display: contents`, und `order` auf den Karten ordnet neu (`portal.css`). Das ordnet das BILD, nicht den Baum: Tab- und Vorlesereihenfolge bleiben die des Markups (linke Spalte, dann rechte), und die ist fuer sich lesbar. Ein flaches Markup in Telefonreihenfolge mit Rasterflaechen am Schreibtisch liesse die Spalten nicht getrennt stapeln (jede Zeile so hoch wie ihre hoechste Karte); das ist der Preis, und er ist hier bewusst bezahlt. **Die Dateien-Karte hat kein Ablagefeld**, anders als das Bild: Die Datei bleibt im Rueckmeldeformular (ein Vorgang, ein Knopf; gemessen 2026-08-23, sieben Rueckmeldungen und null Uploads). Checkliste und Dateien stehen ausserhalb der Stufen: Lesen ist keine Stufe, nur das Abhaken ist eine. Zwei Werte gingen bis zum 2026-09-02 roh in Attribute (`x.quelle`, `x.id`); hier escapt die Vorlage und kodiert `|pfadteil`. Die Dateien-Karte heisst `anhaenge`, nicht `dateien`: `.dateien` ist der Chip-Behaelter des Meldeformulars (Skript) und `display: flex`; Titel und Liste standen nebeneinander (Sichtprobe 2026-09-03). Der Name `` in «Wo» ist ein Block, darum kein `
` danach. Ohne Dateien steht kein «(0)» am Titel: Der Satz darunter sagt es schon, und zweimal «nichts» liest sich wie ein Fehler. **Lesen vor Handeln**, links wie am Telefon: Arbeit, Checkliste, Dateien, dann erst die Handlung. Der Handwerker soll ueber Annahme oder Absage entscheiden, nachdem er Plan und Schadenfoto gesehen hat (Vorgabe 2026-08-22, im Umbau kurz verloren). Und «Gut zu wissen» steht rechts DIREKT nach dem Termin, nicht zuletzt: Was drinsteht, ist der Zugang, und den braucht man, bevor man losfaehrt (Vorgabe des Auftraggebers 2026-08-23; die Leinwand setzt die Karte ans Ende, das Handbuch die Vorgabe). Beides sind Abweichungen vom Bild, mit Grund. `stufen` sind die fuenf Teile der Dreierkette aus `_stufen` in `main.py`, jeder ein fertiges Markup; die Seite setzt sie an ihren Ort. `role="status"` und nicht `alert` fuer die Quittung: Es ist eine Quittung, keine Warnung. Sie steht im Markup ganz oben, auch wenn sie am Bildschirm schwebt, damit der Screenreader sie beim Laden mitliest. #} {% import "bausteine/bausatz.html" as b %} {% import "bausteine/symbol.html" as s %} {% if ok %}
Danke. Ihre Rückmeldung ist bei der Bewirtschaftung eingegangen.×
{% endif %}{% if fehlertext %}{{ b.meldung("gefahr", fehlertext) }}{% endif +%}

Auftrag {{ a.nummer }}{% if a.get('liegenschaft_name') %} · {{ a.liegenschaft_name }}{% endif %}

{{ a.titel }}

Guten Tag {{ a.firma }}, dieser Auftrag wurde an Sie vergeben.

{{ b.kapsel(a.status_label, ton) }}{% if prio_text %}{{ b.kapsel("Priorität: " ~ prio_text) }}{% endif %}{{ b.knopf("Auftragsschein drucken", "zweit", href="/a/" ~ (token|pfadteil) ~ "/schein", klasse="klein schein") }}
{% call b.kasten("Status", klasse="status-karte") %}{{ stufen.zeitstrahl }}{% endcall %} {{ stufen.termin }} {% if a.get('notiz') %} {% call b.kasten("Gut zu wissen", klasse="notiz-karte") %}

{{ a.notiz }}

{% endcall %} {% endif %} {#- **Hinweise zur Anlage** (Epic 8, Spec Notizen 8.5): die Notizen «für den Handwerker» an der Anlage dieses Auftrags, direkt unter «Gut zu wissen». Am Telefon hat er seine eigene Nummer gleich danach (`portal.css`, `tests/test_stufen.py`). Nur Text, mit Zeilenumbrüchen über `.notiz`; ohne Hinweise kein Kasten, und nach dem Ende der Hinweise liefert die API keine. -#} {% if a.get('anlage_hinweise') %} {% call b.kasten("Hinweise zur Anlage " ~ (a.get('anlage_name') or ''), klasse="anlage-hinweise") %}{% for h in a.anlage_hinweise %}

{{ h.text }}

{% endfor %}{% endcall %} {% endif %} {#- **Hinweise zur Liegenschaft**: die freigegebenen Notizen aus dem Immotool, im freigegebenen Wortlaut. Ist drüben nichts abrufbar, nur der Satz und nie ein Text (`_liegenschaftshinweis` in `main.py`). -#} {% if liegenschaft_hinweis %} {% call b.kasten("Hinweise zur Liegenschaft", klasse="liegenschaft-hinweise") %}{% if liegenschaft_hinweis.satz %}{% include "handwerker/hinweis_satz.html" %}{% else %}{% for e in liegenschaft_hinweis.eintraege %}

{{ e.titel }}{% if e.text %}{{ "\n" }}{{ e.text }}{% endif %}

{% endfor %}{% endif %}{% endcall %} {% endif %} {% if a.get('liegenschaft_name') or ort_zeilen %} {% call b.kasten("Wo", klasse="wo") %}

{% if a.get('liegenschaft_name') %}{{ a.liegenschaft_name }}{% endif %}{% for z in ort_zeilen %}{{ z }}{% if not loop.last %}
{% endif %}{% endfor %}

{% endcall %} {% endif %} {% if a.get('ansprechperson_name') or a.get('ansprechperson_telefon') or a.get('auftraggeber_name') %} {% call b.kasten("Ansprechpersonen", klasse="kontakt") %}
    {% if a.get('ansprechperson_name') or a.get('ansprechperson_telefon') %}
  • Vor Ort{{ a.get('ansprechperson_name') or '' }}{% if ansprech_tel %}{{ s.symbol("telefon", 14) }}{{ ansprech_tel }}{% endif %}
  • {% endif %}{% if a.get('auftraggeber_name') %}
  • Auftraggeber{{ a.auftraggeber_name }}
  • {% endif %}
{% endcall %} {% endif %}
{{ rueckfrage }}