/api/batch/build akzeptiert jetzt ids:[...] und buendelt genau diese
Uebermittlungen (je Zugang, xlsx + Sammel-PDF + FTP). Der Board-Knopf
"Per FTP hochladen" wirkt damit auf die Auswahl.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neuer Endpunkt POST /api/batch/build (Token) und Cron (03:00 Europe/Berlin):
buendelt offene batch_submissions JE ZUGANG (api_client) zu einer xlsx
(Schema Firma/Vorname/Nachname/Zeile1-3/PLZ/Stadt/Land) + einer Sammel-
Druck-PDF (alle mitgelieferten Druck-PDFs 1:1) und laedt beide per FTP(S)
in die Wurzel. Dateiname <api_client_id>_<YYYY-MM-DD>(.xlsx/.pdf); manuelle
Laeufe mit Uhrzeit-Suffix (kein Ueberschreiben des Tageslaufs). Text-only-
Datensaetze (ohne PDF) bleiben offen (manuelle Schreibvorlage), nicht im
Buendel. Sa+So gemeinsam am Montag (Sonntag-Lauf uebersprungen).
Neue Pakete: exceljs, basic-ftp. FTP-Config via ENV (SKRIFT_FTP_HOST/PORT/
USER/PASSWORD/SECURE), Passwort nur in ENV.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neues render_format-kind 'postkarte'. generatePostcardSVG setzt den Text auf die
linke Kartenhälfte, Absender (klein, oben) und Empfänger (Anschriftzone unten) auf
die rechte Hälfte; oben rechts bleibt das Briefmarkenfeld frei. Ein SVG je Karte
(ein Plotter-Durchlauf), geschrieben als letter_NNN.svg.
- page-layout: kind je Format mitführen + getFormatKind().
- svg-generator: generatePostcardSVG (Body/Absender/Empfänger über Marker
[[pk_abs]]/[[pk_adr]] getrennt, damit alle Teile scriptalisiert werden).
- order-/preview-/directus-controller: type 'postcard' dispatchen, Marker in der
Scriptalisierung erhalten, Postkarten-Dokument aus render_format-kind bauen.
- directus-service: kind aus render_formats mitladen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
generateEnvelopeSVG rendert bei gesetztem Absender den Absender klein oben links und
den Empfaenger unten rechts (sonst unveraendert). Absender wird ueber die Auftrags-/
Vorschau-Pipeline durchgereicht (metadata.envelopeSender, envelope_sender), fetchOrder
laedt das Feld, Kuvert wird bei Absender frisch gerendert statt 1:1 aus der Vorschau.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>