Haufe X360 Auftragsanlage
RUDI legt eingehende Kundenbestellungen automatisch als Kundenaufträge in Haufe X360 an. Diese Seite erklärt den täglichen Arbeitsablauf und die Sicherheit dahinter.
sudo ~/bin/hfx360-disable.sh "Grund der Sperre"
Wirkung sofort – jeder weitere API-Call schlägt fehl. Details im Notfallplan.
Täglicher Ablauf
So läuft es im Alltag ab – Schritt für Schritt. Kein Chat-Befehl nötig.
-
Bestellung kommt per Mail rein
Kunde schickt seine Bestellung aninfo@regiofrucht.de– die Mail landet im normalen Outlook-Posteingang. -
Öffne /hfx360/inbox.html („Neue Bestellungen")
Die Seite zeigt alle Mails aus dem Info-Inbox-Ordner. Zu jeder Mail erkennt RUDI automatisch den Kunden am Absender und zeigt einen Status:
neu = bereit zum Anlegen ✓ KA30833 = schon angelegt gesperrt = Kunde braucht manuelles Review unbekannt = Absender passt zu keinem Kunden -
Klick auf „Vorschau"
Ein Fenster zeigt die erkannten Positionen, Lieferdatum, Produktionsdatum, Warnungen und Fehler. Die Positionen wurden aus PDF oder Mail-Text gelesen und auf unsere Artikelnummern gemappt. Bei Warnungen (z.B. Feiertag in der Nähe, ungewöhnliche Menge) prüfst du kurz ob das passt. -
Klick auf „In HFX360 anlegen"
Jetzt passiert automatisch folgendes – alles in ca. 2 Sekunden:- Kundenauftrag (KA-Nummer) wird in HFX360 erstellt
- Der Auftrag wird sofort nochmal gelesen und mit der Eingabe verglichen (Verify). Bei jeder Abweichung wird der Auftrag automatisch wieder gelöscht.
- Die Original-Mail wird als
.eml-Datei im Kundenauftrag unter Dateien angehängt - Die Mail wird in Outlook von Info-Inbox verschoben nach KUNDENAUFTRAG VON RUDI ERSTELLT
-
Prüfung in HFX360
Öffne den Auftrag in Haufe X360 (der Direkt-Link steht auch auf /hfx360/). Vergleiche Positionen, Mengen, Produktionsdatum, Standort mit dem Original-Mail-Anhang. Alles OK? Zurück zur Übersicht, Button „Prüfen" klicken – setzt den Haken im Audit-Log. -
Finale Ablage in Outlook (manuell)
Nach deiner Prüfung verschiebst du die Mail selbst von KUNDENAUFTRAG VON RUDI ERSTELLT nach KUNDEN-Bestellungen gesammelt. Das ist das Langzeit-Archiv – RUDI fasst es nie an.
Outlook-Ordner (Info-Postfach)
| Ordner | Wer bewegt dort Mails hin? | Bedeutung |
|---|---|---|
| Info-Inbox | Kunde / E-Mail-Server | Neue, unbearbeitete Bestellung |
| KUNDENAUFTRAG VON RUDI ERSTELLT | RUDI automatisch nach Anlage | Auftrag ist in HFX360 angelegt, wartet auf deine Prüfung |
| KUNDEN-Bestellungen gesammelt | Du manuell nach Prüfung | Archiv – Bestellung komplett erledigt |
Frontend-Seiten
| Seite | Zweck |
|---|---|
| /hfx360/inbox.html | Neue Bestellungen – Liste der Info-Inbox mit Kundenerkennung + Vorschau + Anlege-Button |
| /hfx360/ | Übersicht – alle bisher angelegten Aufträge (Audit-Log), Direkt-Link zu HFX360, Prüf-Button |
| /hfx360/auftrag.html?id=N | Auftrag-Detail – Positionen, Warnungen, Verify-Ergebnis |
| /hfx360/kundenregeln.html | Kundenregeln – pro Kunde: Anliefertage, Produktionsdatum-Regel, Whitelist |
| /hfx360/mapping.html | Artikel-Mapping – Kunden-Artikelnummer → unsere Artikelnummer (für Kunden mit eigenem Nummernkreis) |
Unterstützte Kunden
| Kunde | Nr | Format | Besonderheit |
|---|---|---|---|
| BeFlexx GmbH | 22507 | Plain-Text-Mail | Produktionsdatum = Lieferdatum; Stück-Umrechnung via Historie |
| Der Markgräfler | 21204 | HTML-Mail | Eigene Kundennummern (Mapping) |
| FrischeBrüder | 20605 | PDF-Anhang | Eigene Bezeichnungen (Mapping), Aggregation pro Gebinde |
| Europa-Park | 20508 | PDF-Anhang | 5 Standorte (ELAN/COLO/BELL/KRØN/EATR/ZENT), Erdbeer-Split bei Sonntag-Lieferung unter 30kg |
| Backkultur | 20212 | – | review-nötig – noch kein Parser |
| Fruchthof Konstanz | 20632 | – | geplant – Format unbekannt |
Kundenregeln (was pro Kunde hinterlegt ist)
Jeder Kunde hat eine Regel in der DB (kundenregeln) mit diesen Feldern – bearbeitbar unter /hfx360/kundenregeln.html:
| Feld | Bedeutung |
|---|---|
auto_anlage_erlaubt | Darf RUDI für diesen Kunden überhaupt Aufträge anlegen? |
produktionsdatum_offset_tage | Wieviele Tage vor dem Lieferdatum wird produziert (i.d.R. 0 = am selben Tag, BeFlexx: 0) |
wochenend_regel_json | Sonderregel wenn Lieferung am Wochenende (z.B. Erdbeer-Split) |
keine_anliefertage_json | Wochentage an denen der Kunde nicht beliefert wird – Anlage wird blockiert |
standort_whitelist_json | Erlaubte Lager-Standorte (nur relevant bei Mehr-Standort-Kunden wie Europa-Park) |
artikel_whitelist_json | Erlaubte Artikel pro Kunde – wenn gesetzt, wird bei anderen Artikeln gewarnt |
freigabe_status | freigegeben / review-nötig / permanent-blockiert |
Sicherheitsgarantien
Jede Auftragsanlage durchläuft mehrere Stufen. Bei jedem Fehler bricht der gesamte Vorgang ab.
1. Vor-Validierung (bevor überhaupt etwas geschrieben wird)
- Kunde existiert? (
GET /Customer/{id}) - Kundenregel erlaubt Anlage? (nicht blockiert, nicht in review-nötig)
- Anliefertag erlaubt? (Kunde liefert nicht am Wochenende etc.)
- Lieferdatum plausibel? (gültiges Datum, nicht Vergangenheit, max. 30 Tage Zukunft)
- Feiertags-Check (±2 Tage) – gibt Warnung, weil Produktionsdatum-Regel dann oft nicht passt
- Jeder Artikel existiert (
GET /StockItem/{id}) und hat Status aktiv (nicht „No Sales", nicht „Inactive") - Mengen-Plausi – mehr als 5× Median des Kunden → Warnung
- Idempotenz – dieselbe
mail_idkann nie zweimal angelegt werden (Unique-Index)
2. Audit-Eintrag im Auftrag
Im Feld Beschreibung des Kundenauftrags steht automatisch: [Automatisch via RUDI] von <Absender> · Betreff: "..." · E-Mail vom <Datum> · angelegt YYYY-MM-DD HH:MM:SS. So ist jeder RUDI-Auftrag sofort erkennbar.
3. Nach-Verifikation (Verify)
Sofort nach dem Anlegen wird der Auftrag neu gelesen (GET /SalesOrder/KA/{nr}?$expand=Details) und Position für Position mit der Eingabe verglichen. Bei jeder Abweichung (fehlende Position, falsche Menge, falscher Artikel) wird der Auftrag sofort wieder gelöscht und der Fehler gemeldet.
4. Mail-Anhang + Mail-Verschieben
Nach erfolgreicher Verifikation wird die Original-Mail als .eml-Datei an den Auftrag angehängt (Feld „Dateien" in HFX360, per PUT /entity/Default/24.200.001/SalesOrder/KA/{nr}/files/{name}.eml). Danach verschiebt RUDI die Mail im Info-Postfach in den Ordner KUNDENAUFTRAG VON RUDI ERSTELLT.
5. Kein stilles Auto-Handling
- RUDI legt nie automatisch ohne User-Klick an. Entweder über Inbox-Frontend oder über eine explizite Chat-Anweisung.
- Mails werden nie gelöscht, nur verschoben.
- Die finale Archivierung (KUNDEN-Bestellungen gesammelt) bleibt manuell.
Notfallplan
Stufe 1: Kompletter Stopp (Read + Write blockiert)
sudo ~/bin/hfx360-disable.sh "Begründung"
- Legt Kill-Switch-Datei
~/rudi-chat/.hfx360-killswitchan - Setzt Env-Var
HFX360_API_ENABLED=falsein systemd-Override - Löscht Session-Cookie
- Startet
rudi-chatneu
Reaktivieren:
sudo ~/bin/hfx360-enable.sh
Stufe 2: Read-Only (Lesen erlaubt, Schreiben blockiert)
sudo ~/bin/hfx360-readonly.sh # aktivieren
sudo ~/bin/hfx360-readonly.sh off # deaktivieren
Sinnvoll wenn ihr nur keine neuen Anlagen wollt, aber Lookups (Customer, Artikel, Auftrags-Status) weiter erlaubt sein sollen.
Stufe 3: HFX360-seitig sperren
Für echte Notfälle, wenn der Server kompromittiert wäre:
- In HFX360 unter System → Integration → Verbundene Applikationen den RUDI-Client deaktivieren
- Oder den API-User
br@regiofrucht.desperren / Passwort ändern
Logs & Datenbank
Audit-Log in SQLite
Jede Anlage (und jeder Fehler) landet in ~/rudi-chat/hfx360.db, Tabelle hfx360_auftraege_log:
| Spalte | Inhalt |
|---|---|
mail_id | Eindeutige Mail-ID (Unique, verhindert Doppelanlage) |
eingabe_json | Vollständiger PUT-Body der an HFX360 geschickt wurde |
response_json | Antwort von HFX360 (gekürzt auf 20k) |
verifikation_json | Verify-Ergebnis inkl. Abweichungsliste |
status | ok / abweichung-geloescht / fehler |
description | Audit-Text der im Auftrag eingetragen wurde |
order_total | Endsumme aus Response |
geprueft_am / geprueft_von | Wer hat den Auftrag nach Anlage manuell abgehakt |
Schnellabfragen
# Letzte 10 Anlagen
sqlite3 ~/rudi-chat/hfx360.db \
"SELECT erstellt_am, kunden_nr, auftrags_nr, status, order_total
FROM hfx360_auftraege_log ORDER BY erstellt_am DESC LIMIT 10"
# Alle Fehler
sqlite3 ~/rudi-chat/hfx360.db \
"SELECT erstellt_am, mail_id, fehler FROM hfx360_auftraege_log
WHERE status != 'ok' ORDER BY erstellt_am DESC"
# Noch ungeprüfte Aufträge
sqlite3 ~/rudi-chat/hfx360.db \
"SELECT erstellt_am, auftrags_nr, kunden_name FROM hfx360_auftraege_log
WHERE status = 'ok' AND geprueft_am IS NULL ORDER BY erstellt_am DESC"
Service-Logs
sudo journalctl -u rudi-chat -f | grep -i hfx360
Technik (für Admins)
Endpoint + Auth
- Host:
https://regiofrucht.haufe-x360.app - API:
/entity/Default/24.200.001(Acumatica Contract-Based REST, Haufe X360 Build 25.101.x) - Auth: Cookie-Session via
POST /entity/auth/login(Name/Passwort/Company/Branch) - Session-TTL: 25 Min, danach Auto-Re-Login
- Geschwindigkeit: ~1–2 Sekunden pro Auftrag inkl. Validierung + Verify + Mail-Anhang
Wichtige Calls
| Operation | HTTP |
|---|---|
| Auftrag anlegen | PUT /SalesOrder |
| Auftrag lesen (Verify) | GET /SalesOrder/KA/{nr}?$expand=Details&$custom=Document.UsrProdDate |
| Auftrag löschen (bei Abweichung) | DELETE /SalesOrder/KA/{nr} |
| Mail anhängen | PUT /SalesOrder/KA/{nr}/files/{filename} (binary) |
| Customer-Check | GET /Customer/{id} |
| Artikel-Check | GET /StockItem/{id}?$select=InventoryID,Description,BaseUOM,ItemStatus |
Custom-Feld Produktionsdatum
Wird als Acumatica Custom Field gesetzt: SOOrder.UsrProdDate (Typ CustomDateTimeField). Im PUT-Body unter custom.Document.UsrProdDate.
Tools für RUDI im Chat
| Tool | Zweck |
|---|---|
hfx360_auftrag_vorschau | Mail lesen, Kunde erkennen, Positionen umrechnen, Warnungen – kein Schreiben |
hfx360_auftrag_anlegen | Echter PUT mit Validierung + Verify + Mail-Anhang + Verschieben. Nur mit bestaetigt=true. |
hfx360_api_status | Health-Check: Kill-Switch, Endpoint, Login-Test |
Quelldateien
~/rudi-chat/lib/hfx360/api.js– API-Client, Validierung, Anlage, Verify, Mail-Anhang~/rudi-chat/lib/hfx360/parser-router.js– Kunden-Erkennung + Parser-Router~/rudi-chat/lib/hfx360/europapark-parser.js– EP-spezifischer PDF-Parser~/rudi-chat/lib/hfx360/kundenregeln.js– Kundenregeln-Framework~/rudi-chat/lib/hfx360/log.js– Audit-Log-DB-Zugriff~/rudi-chat/lib/tools/handlers/hfx360.js– Chat-Tool-Handler~/rudi-chat/routes/hfx360.js– Backend-Routen für Frontend/var/www/html/hfx360/– Frontend-Seiten