Gegen "530 Login incorrect" trotz korrekter Daten (FileZilla ok): host/
user/password werden von versehentlich umschliessenden Anfuehrungszeichen
und CR/LF bereinigt (haeufige .env-/docker-env_file-Fallen unter Windows).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
/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>
Der taegliche 03:00-FTP-Buendel-Lauf laeuft nur noch, wenn
SKRIFT_BATCH_FTP_CRON=true gesetzt ist. Ohne Flag kein automatischer
FTP-Upload; Uebermittlungen laufen ueber die Uebernahme ins Board.
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>
Ist kein Brieftext vorhanden, wird das Postkarten-Dokument nicht mehr erzeugt –
analog zum bereits übersprungenen Brief. So entsteht bei „nur Kuverts" wirklich
nur das Kuvert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Absendergröße folgt der „Absender-Größe" (senderScale), Empfängergröße folgt
der „Schriftgröße Kuvert" (recipientScale). Empfänger schrumpft weiter automatisch,
wenn er nicht ins Adressfeld passt (Codierzone bleibt frei).
- Text beginnt nur noch ~2 mm unter dem tatsächlichen Absenderblock (statt fix 18 mm).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Trennstrich jetzt Single-Stroke (stroke-width 0.6, non-scaling, keine Füllung)
wie die Handschrift statt 1,2-mm-Balken.
- Brieftext beginnt bei y≈18 mm (statt 14) → mehr Luft nach dem Absender.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Überlauf nur noch am Brieftext messen (echte lineCount/lineLimit statt 0/0) –
behebt die Meldung „1 Zeile zu lang – 0 statt max. 0".
- Empfänger-Adresse wird automatisch verkleinert, wenn sie nicht ins sichere
Adressfeld passt → Codierzone bleibt immer frei, keine Blockade der Vorschau.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der Empfänger-Adressblock (Kuvert mit Absender) hielt rechts nur ~8 mm Abstand –
der Plotter braucht mehr Greiffläche. Startpunkt leicht nach links (0.55) und
Textbreite so begrenzt, dass rechts RAND_RECHTS_MM (15 mm) frei bleiben. Dieselbe
Konstante nutzt jetzt auch das Postkarten-Layout.
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>
signaledMisses-Sperre entfernt (blockierte das Nachladen, wenn die Drossel griff),
Nachlade-Drossel 30s -> 5s. Neue Formate greifen so binnen Sekunden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Positionierung ueber Hoehen-/Breiten-Anteile statt ueber den grossen Kuvert-Rand
(marginTop bis ~50% der Hoehe): Absender ~14% oben/6% links, Empfaenger ~65-80%
unten/rechts. Vorher klebten beide im mittleren Band.
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>
Fixe 18er-Batches sprengen bei langen/mehrseitigen Texten das InputText-Limit der
Scriptalizer-API (32000 Zeichen) -> 'Input length limit 32000 exceeded'. Jetzt werden
Batches nach kumulativer Zeichenlaenge (max 28000, Sicherheitsabstand) gebildet, die
Anzahl 18 bleibt als zusaetzlicher Deckel.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Behebt gefuellte Signaturen bei Illustrator-Exporten (<style>-Klasse .cls-1 ging beim
Path-Extrahieren verloren -> fill:black). Skalierung nun auf die eigene viewBox der
Signatur statt fix auf den 600x160-Zeichen-Canvas; Punkt (<circle>) bleibt erhalten.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>