{# Formblatt-Druck aus dem Prozess-Template — docs/formblatt_druck_plan.md. Bewusst eine DATEI und keine *_HTML-Konstante in Timeline_Anzeige_Browser.py (§2a): das Mockup ist schon eine Datei, der Dateiweg laeuft ueber denselben Jinja-Lader wie sidebar.html, das Deployment kopiert templates/ ohnehin mit — und vor allem entfallen die Escape-Fallen der Python-Strings (verdoppelte Zeilenumbrueche, "*/" im CSS-Kommentar). Hier steht, was beim Browser ankommt. Kein {% include 'sidebar.html' %}: ein Druckblatt hat keine Navigation. Kein _PDF_SHARED_CSS: das ist A4 hoch und ein anderes Dokument. Das Dokument ist durchgehend ENGLISCH. Nur was aus dem Template kommt (Schrittnamen, Anweisungstexte), steht so da, wie es gepflegt ist. Scheibe 2: eine Seite je Schritt, Ueberlauf wird abgeschnitten. Der gemessene Umbruch mit Fortsetzungsseiten kommt in Scheibe 3 — die Klassen und der Aufbau sind schon darauf ausgelegt (.blatt, ol.anweisungen, .bildgitter, .seite-nr/.seiten-gesamt). #} {{ kopf.formnummer or 'Work Sheet' }} — {{ kopf.typ }} {# ── Bausteine, die auf jedem Blatt wiederkehren ─────────────────────────── #}
{% import 'docs/_leiste.html' as ui %} {%- call ui.leiste(etikett=kopf.typ, seiten=true) -%} {%- if kopf.ist_entwurf -%} Entwurf — nicht freigegeben {%- else -%} Revision {{ kopf.revision or '—' }} · gültig ab {{ kopf.gueltig_ab or '—' }} · {{ kopf.freigabe_von }} {%- endif -%} {%- endcall %} {% if kopf.ist_entwurf %}
Dies ist der Entwurf des Typs {{ kopf.typ }}, nicht die geltende Fassung. Er trägt keine Formblattnummer und ist als Arbeitsanweisung nicht gültig.
{% endif %} {# ── Deckblatt ────────────────────────────────────────────────────────── #}
Seite 1 / — Deckblatt
{% if kopf.ist_entwurf %}
DRAFT — NOT FOR USE
{% endif %}
{{ kopf.titel }}
{{ kopf.typ }} · {{ kopf.subtyp_voll }} · {{ kopf.untertitel }}
Form No.
{{ kopf.formnummer or '—' }}
Revision
Revision
{{ kopf.revision or ('DRAFT' if kopf.ist_entwurf else '—') }}
Released By
{{ kopf.freigabe_von or '—' }}
Valid From
{{ kopf.gueltig_ab or '—' }}
Applicability
{{ kopf.typ }} · {{ kopf.subtyp_voll }} · {{ kopf.pruefstand_voll }}
{# Die einzigen leeren Felder im ganzen Dokument. #}
FBI — First Article / First Build
First Engineer
Second Engineer
CS Order
Tryout Mechanic
To be completed for First Article / First Build only.
Notes
{# Die Klassifikationszeile wird erzeugt, nicht redigiert: sie ist Struktur und haengt am Feld. Alles darunter ist Redaktionstext aus db/print_documents.json (Reiter "Dokumente"). #}

Classification: {{ kopf.klassifikation }}{% if kopf.klassifikation_je_typ %} ({{ kopf.typ }}){% endif %} — not for release to third parties.

{% for n in kopf.notes %}

{{ n }}

{% endfor %}
{# Hier wird sichtbar, dass ein Dokument in der Regel nicht unter EINEM Arbeitsplan laeuft. Bei nur einem schrumpft die Tabelle auf eine Zeile — kein Sonderfall im Code. #}
Routing Plans (SAP)
{% for a in arbeitsplaene %} {% else %} {% endfor %}
Routing PlanApplies to
{{ a.nr }} {% for g in a.gilt_fuer %}{{ g.id }} {{ g.name }}{% if not loop.last %} · {% endif %}{% endfor %}
No routing plan assigned.
Applicable Documents
{% for a in arbeitsplaene %} {% endfor %} {% for m in manuals %} {% endfor %} {% for l in laufkarten %} {% endfor %} {% if not arbeitsplaene and not manuals and not laufkarten %} {% endif %}
DocumentReferenceRev.Status / Applicability
Routing Plan{{ a.nr }}SAP · {{ kopf.typ }} {{ kopf.subtyp_voll }}
{{ m.name }}{{ m.code }}{{ m.rev or '—' }}{{ m.datum }}{% if m.subtyp %} · {{ m.subtyp }}{% endif %}
Route Card{{ l.serviceproduct or '—' }}{{ l.name }}
None.
{{ kopf.formnummer or 'DRAFT' }}{% if kopf.revision %} · Rev. {{ kopf.revision }}{% endif %}{% if kopf.gueltig_ab %} · valid from {{ kopf.gueltig_ab }}{% endif %} {{ kopf.fusszeile }} Page 1 /
{# ── Je Unterschritt ein Blatt — gebaut vom Skript unten ───────────────── Server-Rendering kann nicht messen, wie hoch eine Anweisung wird. Der Umbruch laeuft deshalb im Browser, vor dem Druck (§5). Die Schrittblaetter entstehen erst dort; hier steht nur die Flaeche dafuer. #}
{# Die Daten gehen als JSON in die Seite, nicht als fertiges Markup: das Skript baut die Blaetter, weil nur der Browser messen kann, wie hoch eine Anweisung wird. `tojson` escaped auch "<" — der Block ist damit auch dann dicht, wenn in einem Schrittnamen "" steht. #}