Batch-Buendelung (Phase 2): xlsx + Sammel-PDF + FTP + Cron
All checks were successful
Build & Deploy / deploy (push) Successful in 25s

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>
This commit is contained in:
s4luorth
2026-09-28 09:11:42 +02:00
parent c7fb778a8d
commit a39ae8cffd
6 changed files with 209 additions and 2 deletions

View File

@@ -55,5 +55,18 @@ module.exports = {
clientSecret: process.env.PAYPAL_CLIENT_SECRET || '',
// 'sandbox' oder 'live'
environment: process.env.PAYPAL_ENVIRONMENT || 'sandbox'
}
},
// Alternativer Übermittlungsweg (batch_submissions): Ziel-FTP für die täglichen
// Bündel (xlsx + Sammel-Druck-PDF). Passwort NUR über ENV.
ftp: {
host: process.env.SKRIFT_FTP_HOST || '',
port: parseInt(process.env.SKRIFT_FTP_PORT, 10) || 21,
user: process.env.SKRIFT_FTP_USER || '',
password: process.env.SKRIFT_FTP_PASSWORD || '',
// explizites FTP über TLS (wie im FTP-Client eingestellt). 'false' schaltet ab.
secure: String(process.env.SKRIFT_FTP_SECURE || 'true').toLowerCase() !== 'false',
// Selbstsigniertes Zertifikat zulassen (viele FTP-Server) – auf 'false' setzen für strikte Prüfung.
rejectUnauthorized: String(process.env.SKRIFT_FTP_REJECT_UNAUTHORIZED || 'false').toLowerCase() === 'true',
},
};