Files
skrift-programme/Produktion/skrift-agent
Lucas Orth 6232cecdb1 Produktion: Format-Warteschlangen, Sammeldruck, Webhook, Preis-a/e
Produktions-Board:
- Massenauswahl (+ "Alle auswählen") mit Sammel-Druck und Sammel-Status
- Warteschlange je Maschine nach Format gebündelt; Formatabfrage
  (machines.current_format) statt automatischem Anschluss
- resiliente Ladeabfragen (Board bleibt ohne neue Felder nutzbar)

Agent (skrift-agent):
- druckt strikt ein Dokument nach dem anderen (Idle-Gate) -> behebt
  Verlust von Folgejobs während eines laufenden Drucks
- druckt nur Jobs des eingelegten Formats (current_format), kein Auto-Anschluss
- Heartbeat gedrosselt (nur bei Statuswechsel / alle 60 s)

Neues Modul "Manueller Druck" (skrift-neuauftrag):
- interner Auftrag ohne Zahlung, Vorschau, Platzhalter/Excel-Import,
  Felder bleiben nach dem Absenden stehen

Backend/Endpunkte (skrift-orders):
- jobs tragen format/format_label; /enqueue-bulk für Sammeldruck
- Webhook /inbound/:kind (JetFormBuilder) mit Token + tolerantem Body-Parser
- Kleinmengen-Aufschlag je Produkt über Faktoren a (Deckel) und e (Exponent)
- Fix: norm()-Shadowing in calculatePrice (norm is not a function)

Bootstrap:
- jobs.format/format_label, machines.current_format
- products.price_factor_a/e; Multiplikator-Formel auf a/e umgestellt inkl.
  verhaltensneutraler Migration bestehender Formel/Produkte

skrift-app (Konfigurator):
- Zeilenumbrüche im Textfeld erlaubt; Umschlag-Individualtext als Textfeld
- Platzhalter-Tabelle im Text-Schritt immer verfügbar (auch Sammelversand
  ohne Kuvert) inkl. Excel-Upload nur für Platzhalterwerte
- Danke-Seite: Button zurück zu skrift.de
- z-index-Fix: Platzhalter-Tabelle überlagert die Vorschau nicht mehr

WordPress-Preisrechner: a/e-Faktoren in PHP- und JS-Rechnung
Directus: SKRIFT_WEBHOOK_TOKEN in compose/.env.example

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 11:51:24 +02:00
..

Skrift Produktions-Agent

Schlanker lokaler Agent (Windows) neben dem Plotter. Steuerung läuft über Directus – der Agent macht nur: Heartbeat → Job holen → drucken → melden.

Einrichtung

  1. In Directus einen Nutzer der Rolle Service anlegen und einen statischen Token erzeugen.
  2. Die Maschine in Directus unter Einstellungen → Maschinen anlegen (base_url, ggf. mid/Login). Die numerische ID der Maschine ist die machine_id für die Agent-Config.
  3. config.example.json → config.json kopieren und ausfüllen (directus_url, directus_token, machine_id).
  4. Abhängigkeiten installieren und starten:
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python agent.py

Ablauf

  • Der Agent meldet zyklisch machines.status + last_seen (Heartbeat).
  • Er zieht den nächsten jobs-Eintrag seiner Maschine mit status=queued (sortiert nach priority, dann Alter).
  • Er lädt die SVGs des Auftrags passend zum Job-Typ (Schriftstück/Umschlag) über den Directus-Datei-Endpoint (/skrift-orders/files/...) und schickt sie mit den Template-Werten (Maße/Position/Rotation) an den Plotter.
  • Status zurück: printing → printed bzw. failed (+ Fehlermeldung).
  • Bei Maschinenfehler (z. B. Papierende) ruft er recover_write auf.

Jobs entstehen

Über den Admin-Trigger POST /skrift-orders/enqueue { order, machine } (bzw. später ein Button in der Webapp). Pro Auftrag entsteht ein Brief-Job und – falls Kuvert beschriftet – ein Umschlag-Job, jeweils mit aufgelöstem Template.

Signaturen / AutoRecover

Der Signatur-Service bleibt vorerst unberührt. Das win32-AutoRecover (klickt das Java-Fenster) kann weiter separat laufen; der Agent nutzt zusätzlich den API-recover_write der Maschine.