Quickstart für Projektverantwortliche¶
Ziel: in etwa dreißig Minuten den End-to-End-Empfang von einem Lieferanten aufsetzen und die erste valide Lieferung annehmen. Das Beispiel unten verwendet den FIBU-Import-Fall (deutsche Hausverwaltung). Dieselbe Struktur gilt für jede andere Domäne.
Diese Seite ist bewusst auf hoher Flughöhe — jeder Schritt verweist auf die ausführliche Anleitung. Wenn Sie zuerst das Vokabular brauchen, lesen Sie Konzepte.
Voraussetzungen¶
- Ein Organisations-Administrator hat Sie in Ihre Organisation eingeladen, mindestens mit der Rolle Projektverantwortliche.
- Sie wissen, in welcher Form die Daten am Ende vorliegen sollen — also welche Spalten das nachgelagerte System erwartet.
- Eine Beispieldatei von mindestens einem Lieferanten, damit Sie durchgehend gegen echte Eingaben prüfen können.
Die Konsolen-Verweise unten gehen davon aus, dass Sie an Ihrer
Expecto-Instanz angemeldet sind. Die API-Verweise gehen davon aus,
dass $EXPECTO_BASE_URL und $EXPECTO_API_KEY gesetzt sind, wie im
Entwickler-Quickstart beschrieben.
Schritt 1 — Projekt anlegen¶
Ein Projekt bündelt alles für einen Empfangs-Use-Case: Entities, Verträge, Transformer, Geschäftsregeln, Exporte, Lieferanten.
In der Konsole: Projekte → Create Project. Vergeben Sie einen Namen
wie FIBU 2026 und eine kurze Beschreibung. Belassen Sie die
Voreinstellungen für Approval Mode (Dual Approval) und
Session Creation (Both), sofern Sie keinen Grund für etwas
anderes haben.

Das neue Projekt erscheint sofort in der Liste:

Oder per API:
curl -sS -X POST \
-H "X-API-Key: $EXPECTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "FIBU 2026", "description": "Monatlicher Buchhaltungs-Empfang"}' \
"$EXPECTO_BASE_URL/api/projects" | jq .
Speichern Sie die zurückgegebene id als PROJECT_ID.
Schritt 2 — Ziel-Entity definieren¶
Eine Entity ist das Schema, in dem Ihre Daten nach der Normalisierung landen — eine Zieltabelle mit Spaltentypen und Zeilen-Validierungsregeln.
In der Konsole: Entities → Add Entity. Nennen Sie es Buchung und
geben Sie eine kurze Beschreibung.

Öffnen Sie die Entity und definieren Sie ihre Spalten (z. B. konto
Text, betrag Decimal, buchungstext Text, belegdatum Datum). Fügen
Sie mindestens eine Validierungsregel hinzu, damit die Pipeline
offenkundig fehlerhafte Zeilen ablehnen kann.

Beispielregel, in der Ausdruckssprache (was Sie in den Regel-Editor eingeben):
len(konto) == 6 and matches(konto, '^[0-9]+$')
Meldung:
{"en": "Konto must be 6 digits", "de": "Konto muss 6 Ziffern sein"}
Die Plattform übersetzt das im Hintergrund in eine DuckDB-Abfrage zur Suche von Verstößen; siehe Ausdruckssprache (Coming soon.) für die vollständige Operatorenliste und eingebaute Funktionen.
Äquivalent per API. Regeln sind ihrer Entity untergeordnet, daher steht
die Entity-ID im Pfad (exportieren Sie sie als ENTITY_ID aus der
angelegten Entity). Das Feld expression ist ein vorkompiliertes DuckDB
SELECT, das die verletzenden Zeilen zurückgibt:
curl -sS -X POST \
-H "X-API-Key: $EXPECTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "konto_6_digits",
"level": "error",
"expression": "SELECT * FROM data WHERE LENGTH(TRIM(konto)) != 6 OR konto !~ '\''^[0-9]+$'\''",
"message": {"de": "Konto muss 6 Ziffern sein"}
}' \
"$EXPECTO_BASE_URL/api/entities/$ENTITY_ID/rules" | jq .
Schritt 3 — DataContract verfassen¶
Ein DataContract beschreibt, was ein bestimmter Lieferant zu liefern zusagt — Dateitypen, erwartete Spalten, Rolle jeder Datei. Es ist die Vereinbarung mit dem Lieferanten, unabhängig davon, wie Sie die Daten später transformieren.
In der Konsole: Öffnen Sie im Projekt den Tab Data Contracts und
wählen Sie New Data Contract. Vergeben Sie einen Namen wie
Hausverwaltung X — FIBU v1 und setzen Sie die Supplier-ID.

Öffnen Sie den Vertrag und fügen Sie Quellen (Sources) hinzu — eine pro Datei-Rolle. Für FIBU sind das typischerweise zwei:
buchungsdatei(CSV, Semikolon-getrennt, deutsche Kodierung) mit Spalten wieKonto,Betrag,Buchungstext,Belegdatum.saldendatei(CSV) mitKonto,Saldo.
Die Vertrags-Detailseite hat die Tabs Sources, Revisions und Transformers; die aktuelle Revision ist zunächst ein Entwurf, bis Sie sie aktivieren.

Hängen Sie pro Quelle ein Frictionless-Table-Schema mit Spaltennamen und Typen an, damit strukturelle Fehler bereits vor der Transformation erkannt werden.
Oder per API:
curl -sS -X POST \
-H "X-API-Key: $EXPECTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Hausverwaltung X — FIBU v1",
"supplier_id": "hv-x",
"project_id": "'"$PROJECT_ID"'"
}' \
"$EXPECTO_BASE_URL/api/data-contracts" | jq .
Speichern Sie die id als CONTRACT_ID. Über die Source-Endpunkte
unter dem Vertrag (/api/data-contracts/{id}/sources) fügen Sie jede
Datei-Rolle hinzu.
Bis Sie ihn aktivieren, bleibt der Vertrag im Zustand draft. Die
Aktivierung sperrt ihn als Revision 1 und führt eine Kompatibilitäts-
prüfung gegen alle damit verbundenen Transformer aus.
Schritt 4 — Transformer bauen¶
Ein Transformer bildet die Quellen eines Vertrags auf eine Entity ab.
Jede Spalte der Entity bekommt einen Mapping-Ausdruck — einen
DuckDB-Ausdruck, der auf ein Quellfeld zeigt, mit der Möglichkeit, ihn
zu bereinigen (TRIM, LPAD, Type-Cast, Wörterbuch-Lookups).
In der Konsole: Im Projekt unter Transformer → Neuer Transformer.
Wählen Sie die Entity (Buchung) und die DataContract-Revision. Dann
geben Sie pro Quellrolle die Mappings für jede Zielspalte ein:
| Zielspalte (Entity) | Mapping (DuckDB-Ausdruck auf die Quelle) |
|---|---|
konto |
LPAD(TRIM("Konto"), 6, '0') |
betrag |
CAST(REPLACE("Betrag", ',', '.') AS DECIMAL(18,4)) |
buchungstext |
TRIM("Buchungstext") |
belegdatum |
STRPTIME("Belegdatum", '%d.%m.%Y') |
Aktivieren Sie den Transformer, sobald seine Mappings jede erforderliche Entity-Spalte abdecken.
Per API sind Transformer ihrem DataContract untergeordnet. Die Mappings
stehen in mappings_per_role, geschlüsselt nach Quellrolle:
curl -sS -X POST \
-H "X-API-Key: $EXPECTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Buchung von Hausverwaltung X v1",
"data_contract_id": "'"$CONTRACT_ID"'",
"data_contract_revision": 1,
"entity_id": "'"$ENTITY_ID"'",
"mappings_per_role": {
"buchungsdatei": { "...": "RoleMapping-Objekt" }
}
}' \
"$EXPECTO_BASE_URL/api/data-contracts/$CONTRACT_ID/transformers"
Schritt 5 — Exportformat konfigurieren¶
Setzen Sie im Projekt output_format auf das, was Ihr nachgelagertes
System erwartet. Eingebaute Formate: sap_v46 (SAP Interface V4.6),
zip_csv (eine CSV pro Entity in einem ZIP), excel_workbook. Das
ist der Output, der erzeugt wird, sobald eine Session approved ist.
In der Konsole: in der Projekt-Overview unter Output Format auf Configure klicken. Wählen Sie Formattyp und Optionen (Trennzeichen, Kodierung, Kopfzeile bei CSV-basierten Formaten).

Schritt 6 — Datenlieferanten einladen¶
Bevor Sie einem Lieferanten Zugang gewähren, kann niemand Daten einreichen.
In der Konsole: Öffnen Sie im Projekt den Tab Providers und laden Sie einen Lieferanten ein. Wählen (oder erstellen) Sie die Lieferanten-Organisation und gewähren Sie Zugriff auf dieses Projekt und diesen konkreten Vertrag. Der Lieferant erhält eine Einladungs-E-Mail und sieht beim Login eine zweckgebundene Einreichungsansicht.

Schritt 7 — Erste Session prüfen¶
Sobald der Lieferant Dateien hochlädt, erscheint eine Session im Tab
Sessions des Projekts, verfolgt nach Health und Pipeline-Stufe. Die
Pipeline durchläuft automatisch parse → transform → check (oder per
Trigger, je nach Projektkonfiguration).

Öffnen Sie eine Session und prüfen Sie:
statusundhealth— in welcher Phase befinden wir uns und ist irgendetwas blockiert?- Tab Verstöße (Violations) — Liste der abgelehnten Zeilen je Regel.
- Vorschau — die transformierten Entity-Zeilen, so wie sie nachgelagert ankommen würden.
Wenn alles passt, bestätigen Sie die Session und dann freigeben. Die Freigabe erzeugt das Exportpaket im konfigurierten Format.
Wenn etwas nicht passt, können Sie:
- Die Session kommentieren, sodass der Lieferant es sieht.
- Sie ablehnen und eine erneute Einreichung verlangen.
- Ein Mapping im Transformer korrigieren (erzeugt eine neue Revision) und die Pipeline gegen dieselben Dateien neu laufen lassen.
Wohin als Nächstes¶
| Wenn Sie… | Hier weitermachen |
|---|---|
| Mehr Validierungsregeln sicher verfassen wollen | Golden Sessions für sichere Regeländerungen nutzen — Coming soon. |
| Abstimmung (Reconciliation) über Dateien hinweg hinzufügen wollen | Abstimmung einrichten — Coming soon. |
| Einen reicheren Transformer mit Wörterbuch-Lookups bauen wollen | Transformer bauen — Coming soon. |
| Mehrere Vertragsrevisionen verwalten wollen | Vertrags-Revision aktivieren — Coming soon. |
| Das Domain-Modell durchgehend verstehen wollen | Konzepte |