Zum Hauptinhalt springen

Digitaler Rechnungseingang (Invoice-Intake)

Zweck

Der digitale Rechnungseingang ist ein öffentliches Portal (/rechnungseingang, ohne Login), über das Lieferanten — oder Sie selbst — E-Rechnungen einreichen. SpeamCore prüft die Datei normkonform nach EN 16931 (XRechnung/ZUGFeRD) und legt bei Annahme automatisch eine Eingangsrechnung (documentType = 'incomingInvoice') samt Lieferant und Positionen an. Diese erscheint anschließend zur Freigabe im Cockpit und wird nach dem Verbuchen zum offenen Posten in den Verbindlichkeiten.

Das Feature hat drei Bausteine:

BausteinRoute / EndpointZugang
Einreich-Portal/rechnungseingangöffentlich (kein Login)
Konfiguration/settings/rechnungseingangAdmin (Settings)
Eingereichte RechnungenGET /invoice-intake-submissionsInvoiceIntakeSubmission:view

Das öffentliche Portal

So sieht das Einreich-Portal aus (Beispiel-Mandant „Speam"):

Öffentliches Rechnungseingang-Portal: Kopf „Digitaler Rechnungseingang" mit Erklärtext, links die Karten „Akzeptierte Formate" (XRechnung UBL/CII, ZUGFeRD/Factur-X PDF) und „Pflichtangaben" (Käuferreferenz/Bestellreferenz BT-10), rechts die Karte „Rechnung prüfen & einreichen" mit Datei-Upload und den Buttons Prüfen/Einreichen, darunter ein FAQ-Bereich „Gut zu wissen".

Aufbau der Seite:

  • Kopf: Titel „Digitaler Rechnungseingang" mit kurzer Anleitung (Datei hochladen, in Sekunden prüfen, dann einreichen).
  • Karte „Akzeptierte Formate": XRechnung (UBL / CII) und ZUGFeRD / Factur-X (PDF).
  • Karte „Pflichtangaben": zeigt die vom Mandanten geforderten Pflichtfelder, z. B. Käuferreferenz / Bestellreferenz (BT-10) — konfigurierbar (siehe Konfiguration).
  • Karte „Rechnung prüfen & einreichen": Drag-&-Drop-Feld („Datei hierher ziehen oder klicken (XML / PDF)") plus zwei Buttons:
    • Prüfen — validiert die Datei (Vorabprüfung), ohne sie zu speichern.
    • Einreichen — erst nach erfolgreicher Prüfung freigeschaltet („Bitte zuerst ‚Prüfen'. Das Einreichen wird nach erfolgreicher Prüfung freigegeben.").
  • FAQ „Gut zu wissen": Aufklapp-Fragen rund um die E-Rechnung (Was ist eine E-Rechnung? · Warum? · Welche Angaben sind nötig? · Wie läuft die Prüfung? · Was passiert nach dem Einreichen?).
  • Fuß: Impressum / Datenschutzerklärung / AGB; Hinweis „Prüfung nach EN 16931 und XRechnung (KoSIT). Das Ergebnis ist eine Vorabprüfung." sowie „powered by SpeamCore".
Diese Dokumentationsseite (`docs.speamcore.com/rechnungseingang`) **beschreibt** das Feature. Das **echte Portal** läuft in der SpeamCore-Anwendung unter `/rechnungseingang` des jeweiligen Mandanten (z. B. `https://.speamcore.com/rechnungseingang`) — dort findet der eigentliche Upload statt.

Voraussetzungen

- Das Portal ist im Mandanten **aktiviert** (Konfiguration unter `/settings/rechnungseingang`). - Für die **Konfiguration:** `view:FE_Settings`, `view:Settings`, zum Speichern `update:Settings`. - Für die **Einsicht der Einreichungen:** `view:InvoiceIntakeSubmission`. - Das Einreichen selbst braucht **keine** Berechtigung (öffentlicher Endpoint).

Berechtigungen (CASL)

ActionSubjectWirkung
Einreichen (/rechnungseingang, check/submit) ist öffentlich, ohne Anmeldung
viewFE_Settings, SettingsKonfigurationsseite aufrufbar
updateSettingsPortal-Konfiguration speichern (Formate, Regeln, aktiv/inaktiv)
viewInvoiceIntakeSubmissionListe/Detail der eingereichten Rechnungen einsehen

Schritt-für-Schritt — eine E-Rechnung einreichen

  1. Portal öffnen (/rechnungseingang) — ohne Login erreichbar.

  2. Datei wählen (XRechnung-XML, ZUGFeRD-PDF). Über Prüfen (POST /public-invoice-intake/check) wird die Datei nur validiert (noch nicht gespeichert) — das Ergebnis zeigt Format und etwaige Fehler.

  3. Ist die Rechnung angenommen, über Einreichen (POST /public-invoice-intake/submit) absenden.

  4. SpeamCore speichert die Einreichung (InvoiceIntakeSubmission) und legt bei Annahme automatisch an:

    • den Lieferanten (anhand USt-IdNr./Name; bestehender wird wiederverwendet),
    • eine Eingangsrechnung (PurchaseDocument, incomingInvoice) mit Positionen, hergeleitetem Zahlungsziel und vorbelegtem Aufwandskonto,
    • die Verknüpfung zur Bestellung, falls eine Bestellreferenz (purchaseOrderReference) angegeben ist.

    Zwei Feinheiten der Auto-Anlage (seit Juni 2026): Das Zahlungsziel wird, wenn es nicht strukturiert in der E-Rechnung steht, aus dem Freitext-Zahlungshinweis abgeleitet (z. B. „Innerhalb 14 Tagen" → 14 Tage; ohne Skonto). Beim Übernehmen der Positionen wird als Verkaufspreis automatisch der Einkaufspreis + 10 % angesetzt (VK = EK × 1,10) — als Vorbelegung, jederzeit überschreibbar.

  5. Die neue Eingangsrechnung erscheint im Cockpit (Tab Eingangsrechnungen) zur Prüfung und Freigabe.

Die automatische Anlage übernimmt Beträge, Lieferant und Konto-Vorbelegung aus der E-Rechnung. Die **fachliche Kontrolle und Freigabe** bleibt beim Sachbearbeiter — vor dem Verbuchen Lieferant, Beträge, Steuer und Aufwandskonto im Cockpit gegenprüfen.

Validierung (EN 16931 / XRechnung)

Die Prüfung läuft in drei Stufen; jede liefert eine Liste von Befunden (issues):

StufeFeldPrüft
SchemaschemaIst die Datei wohlgeformt und schema-valide (UBL/CII)?
GeschäftsregelnbusinessRulesEN-16931-/XRechnung-Geschäftsregeln (Schematron).
AnnahmeacceptanceMandanten-Annahmeregeln aus der Konfiguration.

Erkannte Formate: xrechnung-ubl, xrechnung-cii, zugferd — nicht erkennbare Dateien werden als unknown abgewiesen. Das Gesamtergebnis ist accepted (true/false); der Datensatz erhält status = 'accepted' bzw. 'rejected'.

Felder — InvoiceIntakeSubmission

Jede Einreichung wird protokolliert (read-only):

FeldnameDatentypBedeutung
formatStringErkanntes Format (xrechnung-ubl / xrechnung-cii / zugferd / unknown).
statusStringaccepted oder rejected.
invoiceNumberStringRechnungsnummer aus der E-Rechnung.
issueDateStringRechnungsdatum.
currencyStringWährung.
sellerName / sellerTaxId / sellerEmailStringLieferanten-Stammdaten aus der Rechnung.
sellerEndpointId / buyerEndpointIdStringLeitweg-/Endpoint-IDs (Peppol/Leitweg).
buyerReferenceStringKäufer-Referenz (z. B. Leitweg-ID).
purchaseOrderReferenceStringBestellreferenz — verknüpft die Rechnung mit der Bestellung.
submitterEmailStringE-Mail des Einreichenden.
purchaseDocumentIdUUIDVerweis auf die erzeugte Eingangsrechnung.
issuesJSONValidierungsreport (schema / businessRules / acceptance).

Konfiguration (/settings/rechnungseingang)

Admins konfigurieren das Portal unter Einstellungen → Rechnungseingang (eigener Tab neben Allgemeine Daten, Firmeneinstellungen, Öffentliche Seiten u. a.). Gespeichert wird über PUT /public-invoice-intake/config (update:Settings).

Folgende Optionen gibt es (verifiziert an SettingsInvoiceIntakePage.tsx):

EinstellungFeldWirkung
Seite aktivierenenabledSchaltet das öffentliche Portal an/aus (erreichbar unter /rechnungseingang). Ist es aus, ist die Seite nicht aufrufbar.
EinleitungstextintroTextFreitext, der oben auf dem Portal angezeigt wird (z. B. eigene Hinweise an Lieferanten).
Alle Postfächer scannenscanAllMailboxesForInvoicesWenn aktiv, durchsucht der Rechnungseingang alle konfigurierten Postfächer nach E-Rechnungen (statt nur eines designierten).
Eingereichte bzw. aus Postfächern gezogene Rechnungen werden über einen **Hintergrund-Worker** (Queue `invoice-intake`) asynchron verarbeitet — Parsing, Validierung und Auto-Anlage laufen entkoppelt vom Upload, damit Portal und Mail-Abruf nicht blockieren. Wird der Postfach-Scan für eine Mailbox aktiviert, merkt sich SpeamCore den **Aktivierungszeitpunkt** (`scanToInvoiceActivatedAt`, automatisch gesetzt). Verarbeitet werden nur Mails mit **Empfangsdatum ab diesem Zeitpunkt** — ältere Mails (z. B. ein voller Outlook-Bestand) werden **übersprungen** (`skipReason = before-activation`) und nicht rückwirkend als Rechnungen erfasst.

Akzeptierte Formate — welche E-Rechnungs-Formate angenommen werden:

FormatHinweis
XRechnung (UBL / CII)Standard-XML-Formate.
ZUGFeRD / Factur-X (PDF)Hybrid-PDF mit eingebettetem XML.
PEPPOLnur Infomaterial (kein direkter Upload-Kanal).

Akzeptanzregeln (Pflichtfelder) — welche Angaben eine eingereichte Rechnung zwingend enthalten muss; fehlt eine aktivierte Pflichtangabe, wird die Rechnung in der acceptance-Stufe abgewiesen:

RegelFeldPflichtangabe
Käuferreferenz (BT-10)requireBuyerReferenceLeitweg-/Käufer-Referenz.
Leitweg-ID / EndpointID (BT-49)requireLeitwegIdEmpfänger-Endpoint (Peppol/Leitweg).
Bestellnummer (BT-13)requirePurchaseOrderBestellreferenz (verknüpft die Rechnung mit der Bestellung).
IBAN (BT-84) und USt-IdNr. (BT-31)requireIbanAndTaxIdBank- und Steuerangaben.

Über Seite öffnen ↗ (nur bei aktiver Seite) gelangt man direkt zum Portal; Speichern schreibt die Konfiguration.

Workflow — vom Upload zum offenen Posten

Verknüpfungen zu anderen Modulen

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/public-invoice-intakePortal-Konfiguration (öffentlich)
POST/api/public-invoice-intake/checkDatei nur validieren (kein Speichern)
POST/api/public-invoice-intake/submitEinreichen: validieren, speichern, Eingangsrechnung anlegen
PUT/api/public-invoice-intake/configPortal konfigurierenupdate Settings
GET/api/invoice-intake-submissionsListe der Einreichungenview InvoiceIntakeSubmission
GET/api/invoice-intake-submissions/:idEinzelne Einreichungview InvoiceIntakeSubmission

Häufige Fehler und Lösungen

FehlerLösung
„Format unknown / abgewiesen"Datei ist keine valide XRechnung/ZUGFeRD — beim Lieferanten ein normkonformes Format (UBL/CII) anfordern.
Rechnung angenommen, aber keine Eingangsrechnung sichtbarIm Cockpit Tab Eingangsrechnungen prüfen; ggf. view:PurchaseDocument fehlt.
Geschäftsregel-Fehler (businessRules)Pflichtangaben der E-Rechnung fehlen (z. B. Leitweg-ID, USt-IdNr.) — der issues-Report nennt die konkrete Regel.
Portal nicht erreichbarUnter /settings/rechnungseingang aktivieren (update:Settings).

Versionshinweise

  • 2026-06-22: Aktivierungszeitpunkt (scanToInvoiceActivatedAt) dokumentiert — Postfach-Scan zieht nur Mails ab dem Aktivierungszeitpunkt ein, ältere werden übersprungen (before-activation). Verifiziert an mailbox.model.ts, mailToInvoiceIntake.service.ts.
  • 2026-06-12: Konfig-Option „Alle Postfächer scannen" (scanAllMailboxesForInvoices) und Hinweis zur asynchronen Verarbeitung über den invoice-intake-Hintergrund-Worker ergänzt. Verifiziert an invoice-intake-worker.ts.
  • 2026-06-03 (nachmittags): Konfigurations-Optionen vollständig dokumentiert (Seite aktivieren, Einleitungstext, Akzeptierte Formate inkl. PEPPOL-Infomaterial, Akzeptanzregeln BT-10/BT-49/BT-13/BT-84+BT-31) — verifiziert an SettingsInvoiceIntakePage.tsx. Echter Screenshot des öffentlichen Portals (Mandant „Speam") + Abschnitt „Das öffentliche Portal" mit den realen UI-Elementen. Klarstellung Doku-Seite ↔ App-Portal.
  • 2026-06-03 (Nacht-Drop): Initiale Veröffentlichung. Öffentliches Einreich-Portal (/rechnungseingang), EN-16931-/XRechnung-Validierung (3-stufig: schema/businessRules/acceptance), Auto-Anlage Lieferant + Eingangsrechnung, Admin-Konfiguration + Submissions-Liste. Verifiziert an invoiceIntake.router.ts, invoiceIntake.controller.ts, incomingInvoice.service.ts, invoiceIntakeSubmission.model.ts.