Satzart Kuschick-Integration â Entscheidung & Design â
Status: Entschieden â Mandat angenommen Datum: 2026-05-27 Kontext: Partner-Alignment xtoura, Surface 5 (unabhĂ€ngige Buchungsmaske)
Hintergrund â
Satzart braucht eine verbesserte Buchungsmaske fĂŒr den xtoura-PIM-Relaunch, die in das Kuschick-Backend einspeist. Das Deal-Playbook empfahl ursprĂŒnglich, die Freelance-Anfrage abzulehnen, um Fokus auf Busflow zu erhalten. Nach Bewertung im laufenden Termin wurde anders entschieden: das Mandat wird angenommen, weil es bei klarer Scope-Trennung sowohl bezahlte Arbeit, strategische Positionierung als auch Wissens-Reuse fĂŒr Busflow erzeugt.
Entscheidung â
Scope â
- Buchungsmaske: Spezifikation durch Julian (Form-Design, UX-Flow, Datenmodell). Implementierung durch Satzarts Entwickler.
- Endpoint + Kuschick-Integration: Bau als eigenstÀndige IntegrationsfÀhigkeit. Das konkrete Kuschick-Transportprotokoll ist offen und muss vor Implementierung geklÀrt werden.
- SpÀtere Folge-Erweiterung (separates Mandat): Der gleiche Busflow-owned Endpoint soll von der xtoura-App genutzt werden.
Scope-Korrektur nach Busflow-Grill â
Der Service soll nicht mehr primĂ€r als Satzart-/Julian-eigener Endpoint gedacht werden, sondern als Busflow-eigene IntegrationsfĂ€higkeit, die von der xtoura-App oder einer externen Buchungsmaske konsumiert werden kann. Die Kuschick-Anbindung darf ĂŒber den reinen Buchungs-Submit hinausgehen, wenn die zusĂ€tzlichen Satz-Typen direkt auf Busflows Vision einzahlen: Legacy-Coexistence, Zero-Downtime-Migration, Betreiber-Onboarding, Buchungs- und Zahlungsabgleich oder spĂ€tere Ablösung von Kuschick als System of Record.
Arbeitsgrenze: "Mehrere Dinge" heiĂt nicht "vollstĂ€ndiger Kuschick-Klon". Jeder zusĂ€tzliche Satz-Typ braucht einen Busflow-Zweck. Reine Legacy-Portalfunktionen ohne Busflow-Reuse, etwa Kundenkonto-Self-Service, Kataloganfrage oder Gutscheinverkauf ohne konkreten Migrations-/Coexistence-Nutzen, bleiben zunĂ€chst Kandidaten statt Scope.
System-of-Record-Entscheidung â
FĂŒr den aktuellen Satzart-/xtoura-Fall bleibt Kuschick zunĂ€chst System of Record. Die Busflow-eigene API fungiert als kontrollierte Integrationsfassade vor Kuschick: Sie nimmt Form- oder App-Anfragen entgegen, normalisiert sie in Busflow-Begriffe, ĂŒbersetzt sie in Kuschick-Satz-Typen und gibt stabile Antworten an den Client zurĂŒck.
Ein spĂ€terer Two-Way-Sync zwischen Busflow und Kuschick bleibt denkbar, ist aber nicht Teil des ersten Scopes. FĂŒr die aktuelle AufwandsschĂ€tzung zĂ€hlt nur die Richtung: externe OberflĂ€che â Busflow Integration API â Kuschick.
Migration-First Adapter Scope â
Der breitere Kuschick-Adapter wird nicht nach "welche Satz-Typen existieren?" priorisiert, sondern nach "welche Satz-Typen helfen, Busflow automatisch mit Betreiber-Daten zu befĂŒllen?". Besonders relevant sind daher voraussichtlich:
- Produktdaten und Produkte: Grundlage fĂŒr
TourTemplate,TourDepartureund spĂ€tereTourOffering-Projektionen. - Stammdaten Zustiege: Grundlage fĂŒr
BoardingPointund Commerce-seitige verfĂŒgbare Zustiege. - Stammdaten Versicherungen / Zusatzleistungen: mögliche Grundlage fĂŒr
AncillaryCatalogItemoder integrationsspezifische Angebotsoptionen. - VerfĂŒgbarkeit, Zahlungsarten, CRM, Sitzplatz/Sitzplatzauswahl und Buchung: notwendig fĂŒr Coexistence, solange Kuschick operative Wahrheit bleibt.
- Buchungen Ă€ndern / Zahlung2: relevant fĂŒr spĂ€tere Abgleich- und Delta-Szenarien, aber nicht automatisch MVP.
Niedriger priorisiert bleiben Satz-Typen, die vor allem Kuschick-Portal-Funktionen abbilden und Busflow nicht beim Datenaufbau, bei Migration oder bei kontrollierter Coexistence helfen.
Service Boundary: Integration, nicht Domain-Import â
Der Kuschick-Adapter darf Endpunkte und DatenvertrĂ€ge fĂŒr migrationsrelevante Daten vorplanen und bereitstellen, schreibt aber im ersten Schritt nicht direkt in Busflows echte Domain-Tabellen. Langfristig ist eine Ăbernahme in TourTemplate, TourDeparture, BoardingPoint, Commerce-Projektionen usw. möglich, aber diese Materialisierung gehört in eine separate Busflow-Migrations-/Importstrecke.
Die erste Schnittstelle bleibt daher bewusst eine Integrationsfassade:
- Kuschick-Daten abrufen oder Kuschick-Buchungen auslösen.
- Rohantworten und normalisierte DTOs in Busflow-nahen Begriffen bereitstellen.
- Datenhoheit und Zielmodell je Anwendungsfall separat entscheiden.
Datenhoheit je Anwendungsfall â
Es gibt keine globale Antwort auf "Kuschick vs. xtoura/PIM vs. Busflow als fĂŒhrende Datenquelle". Die Datenhoheit hĂ€ngt vom Integrationsszenario ab:
- Aktueller xtoura-App-Fall: Die xtoura-App spricht verschiedene APIs an. Busflow ergÀnzt nur eine eigene API-Fassade; Busflow wird dadurch noch nicht zum System of Record.
- Einmalige Busflow-Migration: Kuschick-Daten können als Quelle fĂŒr initiale Betreiber-Daten dienen, mĂŒssen aber vor Ăbernahme gemappt, geprĂŒft und ggf. angereichert werden.
- Coexistence / Sync-Phase: Kuschick kann weiterhin operative Wahrheit fĂŒr Teile des GeschĂ€fts bleiben, wĂ€hrend Busflow schrittweise einzelne DomĂ€nen ĂŒbernimmt.
- Teilablösung: Ein mögliches Zielbild ist, Buchungs- und Abrechnungsteile aus Kuschick herauszulösen, wÀhrend andere Kuschick-Daten weiterhin gelesen oder synchronisiert werden.
Konsequenz fĂŒr die AufwandsschĂ€tzung: Der aktuelle Service muss flexibel genug sein, mehrere Datenquellen und Zielrichtungen zu bedienen, darf aber nicht so tun, als sei die spĂ€tere Busflow-Migration schon entschieden.
Erster xtoura-App-Flow â
Der erste konkrete xtoura-App-Flow ĂŒber die Busflow-API ist der Kuschick-Buchungsflow. Die API soll dafĂŒr nicht als allgemeiner Datenaggregator fĂŒr Reisecontent auftreten, sondern die fĂŒr eine Buchung notwendigen Vorabfragen und den finalen Submit kapseln:
ADRESSFELDERâ Pflichtfelder fĂŒr Anmelder und Teilnehmer ermitteln.VERFUEGBARKEITâ Reise- und Leistungsstatus, freie Kontingente und Preise prĂŒfen.SITZPLATZ/SITZPLATZAUSWAHLâ SitzplatzwĂŒnsche oder konkrete Sitzplatzauswahl abbilden.ZAHLUNGSARTENâ fĂŒr die Reise verfĂŒgbare Zahlungsarten anzeigen.CRMâ erlaubte CRM-/Marketingaktionen laden, falls im Formular benötigt.BUCHUNGâ nach auĂen alsquote/validateundconfirmmodellieren; intern auf Kuschickbuchungsart=Anfragemit PreisrĂŒckgabe und danachbuchungsart=Buchungmit Speicherung mappen.
Nicht Teil dieses ersten Flows: allgemeines xtoura-Reisecontent-Serving, Kundenkonto-Funktionen, Kataloganfragen, Gutscheinverkauf oder ein vollstÀndiger Legacy-Datenexport.
Quote / Confirm Contract â
Der quote/validate-Schritt erzeugt eine kurzlebige quoteId. confirm darf diese quoteId wiederverwenden, statt direkt vor dem Schreiben alle PrĂŒfungen erneut vom Client auszulösen.
Die quoteId ist ein Validierungsartefakt, keine harte Reservierungsgarantie. Sie bindet mindestens:
- Operator-/Integration-Kontext;
- Reise und relevante Leistungs-IDs;
- Teilnehmerzahl und Zuordnung;
- ausgewÀhlte Unterbringungen, Zusatzleistungen, Zustiege, SitzplÀtze und Zahlungsart;
- berechnete Preis-/Zahlungsbedingungen aus Kuschick;
- Zeitpunkt der Kuschick-PrĂŒfung und kurze TTL, z.B. ca. 5 Minuten.
confirm akzeptiert nur eine gĂŒltige, nicht abgelaufene quoteId und unverĂ€nderte Kernfelder. Wenn der Client relevante Felder Ă€ndert oder die TTL ablĂ€uft, muss ein neuer quote/validate-Schritt laufen. Dadurch bleibt das Frontend schnell, ohne alte FormularzustĂ€nde blind in Kuschick zu schreiben.
Idempotency & Correlation â
Der Adapter soll prĂŒfen, ob Kuschicks fremdvorgang-Feld als externe Referenz fĂŒr Idempotency und Korrelation genutzt werden kann. Wenn Kuschick dieses Feld speichert und in spĂ€teren Antworten oder Suchpfaden wieder auffindbar macht, wird es zum zentralen SchlĂŒssel gegen Doppel-Submits und zur KlĂ€rung von provider outcome unknown.
MVP-Verhalten:
- pro
quote/confirm-Flow eine stabile Busflow-Correlation-ID erzeugen; - diese ID, soweit Kuschick-kompatibel, als
fremdvorgangan Kuschick ĂŒbergeben; - alle Rohrequests, Rohresponses, Partner-Responses und Logs ĂŒber diese ID verknĂŒpfen;
- vor blindem Retry prĂŒfen, ob derselbe
fremdvorgangbereits erfolgreich verarbeitet wurde oder möglicherweise noch offen ist.
Offen: Kuschicks tatsÀchliches Verhalten zu fremdvorgang muss getestet werden. Entscheidend ist, ob das Feld gespeichert, eindeutig behandelt, angezeigt oder per Kunden-/Buchungssuche wieder auffindbar ist.
Credentials & Mandantenmodell â
Kuschick-Zugangsdaten werden pro Veranstalter / Operator modelliert, nicht als globaler Satzart-Zugang. Jeder Operator erhÀlt eine eigene Integration-Konfiguration mit Kuschick-Basis-URL, User und Secret/Passwort bzw. dem daraus abgeleiteten Key-Verfahren.
Das passt zu Busflows Multi-Tenant-Modell und verhindert vermischte Audit-Spuren:
- Requests können eindeutig einem Operator zugeordnet werden.
- Kuschick-Fehler, Buchungsnummern und Retry-Versuche bleiben mandantenscharf nachvollziehbar.
- Ein spÀterer Busflow-Migrationspfad kann dieselbe Operator-Integration wiederverwenden.
- Satzart/xtoura bleibt Client oder Integrationspartner, aber nicht Credential-EigentĂŒmer fĂŒr alle Veranstalter.
Partner API Auth â
FĂŒr den MVP nutzt die xtoura/Satzart-Seite einen API-Key pro Partner-Operator-Integration. Es gibt also keinen globalen Satzart-Key fĂŒr alle Veranstalter. Der Key identifiziert sowohl den Partner-Client als auch die konkrete Operator-Integration, gegen deren Kuschick-Zugang gearbeitet wird.
MVP-Key-Rotation:
- Busflow erzeugt einen neuen zweiten aktiven Key fĂŒr dieselbe Integration.
- Satzart/xtoura deployt den neuen Key.
- FĂŒr eine kurze Ăbergangszeit akzeptiert Busflow alten und neuen Key parallel.
- Busflow deaktiviert den alten Key nach BestÀtigung oder Ablauf der Grace Period.
- Alle Requests bleiben ĂŒber
key_id, Operator, Partner und Integration auditierbar.
Keys werden nur gehasht gespeichert. Responses und Logs dĂŒrfen den Klartext-Key nie enthalten. Jeder Key braucht mindestens Status (ACTIVE, ROTATING, REVOKED), created_at, optional expires_at, last_used_at, Partner-ID, Operator-ID und Rate-Limit-Konfiguration.
OAuth/JWT bleibt ein spĂ€terer Ausbaupfad, wenn Busflow ein gröĂeres Partner-Ăkosystem oder echte Nutzerdelegation braucht. Praktisch wĂŒrde das bedeuten: Satzart registriert sich als OAuth-Client, erhĂ€lt Access Tokens fĂŒr bestimmte Scopes und Operator-Integrationen, und Busflow validiert pro Request Token-Signatur, Scope, Tenant/Operator und Ablaufzeit. Das ist flexibler, aber fĂŒr den ersten Satzart-MVP schwerer als notwendig.
Partner Network Boundary & Rate Limits â
FĂŒr den MVP soll geprĂŒft werden, ob Satzart/xtoura die Busflow-API ausschlieĂlich serverseitig aus einem bekannten Backend aufrufen kann. Wenn ja, ist eine IP-Allowlist zusĂ€tzlich zum API-Key bevorzugt. API-Keys sollen nicht in Browser- oder App-Clients landen.
Die Rate Limits sollen groĂzĂŒgig ausgelegt werden und realistisch etwa 100 gleichzeitige BuchungsvorgĂ€nge pro Operator/Integration tragen können. Trotzdem sollten Limits nach Request-Art getrennt werden:
- read/cache endpoints: groĂzĂŒgig, da diese primĂ€r aus Cache liefern;
- polling endpoints: groĂzĂŒgig, aber mit kurzem Mindestintervall pro
refreshJobId; - refresh triggers: begrenzt, damit ein Client nicht permanent Kuschick live belastet;
quote/validate: ausreichend hoch fĂŒr parallele Formular-AbschlĂŒsse;confirm: geschĂŒtzt und separat limitiert, weil es provider-seitig echte Schreibwirkung hat.
Ziel ist nicht kĂŒnstliche Knappheit, sondern Schutz vor Fehlkonfiguration, Polling-Schleifen und Provider-Ăberlastung.
API Contract Strategy: Lossless Adapter First â
Die externe API soll nicht vorschnell alle Kuschick-Eigenheiten in ein generisches Busflow-Modell pressen. FĂŒr den ersten Anwendungsfall zĂ€hlt, dass keine integrationsrelevanten Daten verloren gehen. Der Adapter darf daher Kuschick-spezifische Konzepte sichtbar halten, solange er sie stabil, dokumentiert und mandantenscharf bereitstellt.
Die Zielarchitektur ist zweischichtig:
- System-specific Adapter API: Kapselt Auth, Transport, Satz-Typen, Fehlercodes und Roh-/Normalantworten pro Zielsystem. Diese Schicht ist verlustarm und kann von Satzart/xtoura sinnvoll genutzt werden.
- Central Busflow Normalization Layer: Ăbersetzt aus einem oder mehreren system-specific Adaptern in Busflow-Domainbegriffe, Import-Jobs, Staging-Modelle oder spĂ€tere Commerce-/Backoffice-Commands.
Konsequenz: Der Kuschick-Adapter darf nur teilweise normalisieren. Er kann gemeinsame Hilfsstrukturen anbieten, etwa einheitliche Request-Metadaten, Cache-Keys, Operator-Kontext, technische FehlerhĂŒllen und grobe DTOs fĂŒr Availability/Booking. Die vollstĂ€ndige Busflow-Domain-Normalisierung passiert spĂ€ter in der zentralen Busflow-Schicht, nicht im ersten Adapter.
API Documentation Requirement â
Die Adapter-API muss von Anfang an maschinenlesbar und partnerfÀhig dokumentiert werden, idealerweise via Swagger/OpenAPI. Das ist kein spÀteres Developer-Experience-Polish, sondern Teil des Scopes: Satzart/xtoura muss verstehen können, welche Kuschick-nahen Felder stabil sind, welche Felder roh durchgereicht werden, welche Felder normalisierte Convenience-Felder sind und welche Fehler-/Offline-ZustÀnde auftreten können.
FĂŒr jeden exponierten Endpunkt braucht die Spezifikation mindestens:
- Request-DTO inklusive Operator-/Integration-Kontext.
- Response-DTO mit getrennten
normalizedundraw/providerAnteilen, soweit sinnvoll. - Cache-Verhalten: live, cached, stale-while-revalidate oder unavailable.
- FehlerhĂŒlle mit provider-spezifischem Code und partnerfĂ€higer Fehlermeldung.
- Dokumentierte Kuschick-Satz-Typen, die intern verwendet werden.
Ein eigenes Admin-/Debug-UI ist fĂŒr den Partner-MVP nicht erforderlich. FĂŒr den ersten Schnitt reichen Swagger/OpenAPI, strukturierte Logs und gespeicherte Rohantworten. SupportfĂ€lle im Satzart-MVP bleiben zunĂ€chst Satzarts Verantwortung; Busflow stellt die technische Nachvollziehbarkeit bereit, aber kein fertiges Support-Cockpit.
Langfristig kann ein Debug-/Integrator-Cockpit ein eigener Busflow-USP werden: entweder als Busflow-Add-on fĂŒr Legacy-Integrationen oder als kleines Mikroprodukt rund um Kuschick-/Legacy-Adapter, Cache-Status, Provider-VerfĂŒgbarkeit, Rohantworten und manuelle KlĂ€rfĂ€lle.
Caching, Preload & Intelligent Composition â
Caching ist ein zentraler Bestandteil des Kuschick-Adapters. Kuschick berechnet Preise und VerfĂŒgbarkeiten nach aktuellem VerstĂ€ndnis einmal tĂ€glich; dieser Prozess ist langsam und fĂŒr interaktive Frontends ungeeignet. Der Adapter soll deshalb nicht nur "durchreichen", sondern die Ausgangslage fĂŒr das Formular intelligent vorbereiten.
Mögliche Strategien:
- Scheduled Import: Ein geplanter Job lĂ€dt produkt-, leistungs-, zustiegs-, zahlungs- und verfĂŒgbarkeitsnahe Ausgangsdaten pro Operator vor. MVP-Takt: zweimal tĂ€glich, z.B. nachts um 02:00 und nachmittags um 14:00, damit die Formular-Ausgangslage bereits warm im Cache liegt.
- On-Demand Cache Fill: Fehlende oder veraltete Daten werden beim ersten Zugriff live geholt und danach zwischengespeichert.
- Booking-triggered Refresh: Wenn eine konkrete Buchung fĂŒr eine Reise gestartet wird, prĂŒft der Adapter, ob reisenahe Daten aktualisiert werden sollten. Die Aktualisierung lĂ€uft möglichst asynchron im Hintergrund und kann spezifisch auf diese Reise begrenzt werden.
- Stale-while-revalidate: Das Frontend erhÀlt schnell vorhandene Daten; der Adapter aktualisiert im Hintergrund, wenn Kuschick erreichbar ist.
- Future Calculation Layer: Langfristig könnte Busflow Berechnungsgrundlagen importieren und Preise on the fly selbst berechnen. Das ist ein eigener Designpfad und nicht automatisch Teil des ersten Adapters.
Ziel fĂŒr das Formular: möglichst wenige blockierende Frontend-LadevorgĂ€nge. Der Adapter darf zusammengesetzte Formular-Initialisierungsdaten liefern, z.B. Pflichtfelder, Zahlungsarten, CRM-Optionen, verfĂŒgbare Zustiege, relevante Leistungen, Sitzplatzoptionen und Cache-Metadaten in einem partnerfĂ€higen Read-Endpoint.
Das Formularmodell soll als UX-orientiertes Composite DTO gestaltet werden, nicht als Sammlung roher Kuschick-Fragmente. Es enthĂ€lt weiterhin provider-spezifische IDs und RohbezĂŒge, aber bereitet sie so auf, dass Satzart/xtoura ein schnelles, intelligentes Formular bauen kann.
Mögliche Inhalte der ersten Formular-Initialisierung:
- technische Buchungsgrundlagen: Reise-ID, Leistungen, Unterbringungen, Zusatzleistungen, Zustiege, Zahlungsarten, CRM-Aktionen;
- UX-Metadaten: Feldgruppen, Feldreihenfolge, Labels, Pflichtfelder, sichtbare/ausblendbare Felder;
- VerfĂŒgbarkeits- und Preisstand: Kontingente, Preise, Cache-Alter, Refresh-Status;
- Sitzplatzmodell: Wunschdimensionen, konkrete Auswahloptionen, ZuschlÀge, provider-spezifische Sitzplan-IDs;
- Validierungsplan: welche Angaben lokal geprĂŒft werden können und welche vor
confirmerneut gegen Kuschick validiert werden mĂŒssen; - Fehlermapping: partnerfĂ€hige Fehlermeldungen plus provider-spezifische Fehlercodes fĂŒr Support;
- Roh-/Provider-Anteil: IDs und Daten, die fĂŒr spĂ€tere Kuschick-Requests verlustfrei erhalten bleiben mĂŒssen.
Damit entsteht der erste konkrete Mehrwert gegenĂŒber Kuschicks eigener OberflĂ€che: Das Frontend muss nicht mehrere langsame Einzelanfragen orchestrieren, sondern bekommt ein vorbereitetes, cache-bewusstes Formularmodell.
FĂŒr interaktive Formularausgangsdaten gilt als Ziel: Die Daten sollen höchstens ca. 5 Minuten alt sein. Wenn ein Client Daten anfragt und der Cache Ă€lter ist, antwortet die API trotzdem schnell mit den besten vorhandenen Daten und löst verpflichtend eine Hintergrundaktualisierung aus. Beim Abschicken validiert Kuschick hart gegen den aktuellen Stand, sofern Kuschick erreichbar ist.
Die API darf einen Hintergrund-Refresh nicht als "zweite Antwort" in derselben normalen HTTP-Response verstecken. DafĂŒr braucht der Contract ein explizites Muster, z.B.:
- schnelle Initialantwort mit
cacheStatus,generatedAt,staleundrefreshJobId; - MVP: Client-Polling auf
refreshJobId; - spĂ€ter optional Server-Sent Events/WebSocket fĂŒr elegantere Live-Updates;
- oder ein gezielter
refresh-Endpoint, wenn das Frontend aktiv eine Aktualisierung anstoĂen will.
Die genaue Polling-Response muss in der API-Spezifikation sichtbar sein: PENDING, SUCCEEDED, FAILED, STALE_PROVIDER_OFFLINE o.Ă€. sowie der aktualisierte Cache-Zeitpunkt.
Raw Response Storage & Offline Resilience â
Kuschick-Rohantworten sollen gespeichert werden. Das dient nicht nur Debugging, sondern ist Teil des Ausfallkonzepts, weil Kuschick erfahrungsgemÀà zeitweise offline sein kann.
Der Adapter braucht daher ein solides Resilience-Modell:
- Rohantworten pro Operator, Satz-Typ, Request-Signatur, Zeitpunkt und Cache-Status speichern.
- Provider-Fehler, Timeouts und leere Antworten getrennt klassifizieren.
- FĂŒr read-only Ausgangsdaten stale Antworten ausliefern, wenn Kuschick offline ist und die Daten noch innerhalb einer akzeptierten Frischegrenze liegen.
- FĂŒr buchende Schreiboperationen keine stillen Cache-Fallbacks verwenden; hier muss klar zwischen "nicht möglich wegen Provider offline" und "Provider hat abgelehnt" unterschieden werden.
- Auditierbare Korrelation zwischen Client-Request, Kuschick-Request, Kuschick-Rohantwort und partnerfÀhiger Response.
Fehlersemantik:
- Read-only: bevorzugt schnelle Cache-Antwort mit
generatedAt,cacheAgeSeconds,cacheStatusund ggf.providerRefreshPending. - Write/confirm: synchron gegen Kuschick ausfĂŒhren. Keine Cache-BestĂ€tigung.
- Provider rejected: Kuschick hat erreichbar und eindeutig abgelehnt. Der Client darf davon ausgehen, dass keine bestÀtigte Buchung angelegt wurde.
- Provider unavailable: Kuschick war nicht erreichbar, bevor eine Schreiboperation gestartet oder angenommen wurde.
- Provider outcome unknown: Die Anfrage wurde an Kuschick gesendet, aber Busflow erhÀlt keine eindeutige Antwort, z.B. Timeout, Verbindungsabbruch oder verzögerte Verarbeitung. Dieser Fall darf nicht als "nicht gebucht" behandelt werden, weil die Buchung in Kuschick spÀter doch existieren könnte.
FĂŒr provider outcome unknown braucht der Adapter einen KlĂ€rpfad: Korrelation ĂŒber Request-Signatur, potenziellen Fremdvorgang/Idempotency-Key, spĂ€tere Suche/Abfrage falls Kuschick das ermöglicht, und ansonsten manuelle PrĂŒfung. Ziel ist, Doppelbuchungen durch blindes Retry zu vermeiden.
Privacy Modes & PII Storage â
FĂŒr den Satzart-MVP soll die PII-Speicherung bewusst einfach und defensiv bleiben. Wenn Busflow hier nur als verarbeitendes Drittsystem ohne eigenes begrĂŒndetes Interesse an langfristiger Speicherung agiert, sollen personenbezogene Buchungsdaten im Zweifel nicht dauerhaft gespeichert werden.
Der Adapter sollte deshalb perspektivisch Privacy Modes pro Integration unterstĂŒtzen:
- No-PII Persistence: Read-only Produkt-, VerfĂŒgbarkeits-, Stammdaten- und Cache-Rohdaten dĂŒrfen gespeichert werden. Buchungsrequests und -responses werden fĂŒr Logs redigiert; PII wird nicht dauerhaft persistiert oder nur flĂŒchtig verarbeitet. Das ist der bevorzugte Satzart-MVP-Modus.
- Encrypted Short Retention: Buchungs-Rohdaten mit PII werden verschlĂŒsselt und nur fĂŒr eine kurze Debug-/KlĂ€rfrist gespeichert. Zugriff ist stark eingeschrĂ€nkt und auditierbar.
- Busflow-owned Processing: FĂŒr spĂ€tere Busflow-eigene Flows kann eine weitergehende Speicherung gerechtfertigt sein, z.B. wenn Busflow selbst Buchungsanfragen annimmt, Migration/Staging betreibt oder als System of Record agiert. Dann gelten Busflows eigene Datenschutz-, Retention- und Löschkonzepte.
UnabhĂ€ngig vom Modus: technische Logs dĂŒrfen keine Klartext-PII enthalten. Korrelation lĂ€uft ĂŒber IDs, Hashes, Request-Signaturen und provider-spezifische Referenzen, nicht ĂŒber Namen, E-Mail-Adressen oder Telefonnummern.
Busflow USP: Partial Independence from Kuschick â
Ein strategischer Busflow-USP ist, Betreiber schrittweise unabhÀngiger von Kuschick zu machen. Das betrifft nicht nur Lesecaches, sondern perspektivisch auch den Buchungsfall: Wenn Kuschick temporÀr offline ist, soll Busflow Buchungsanfragen potenziell trotzdem annehmen können, statt den Vertrieb vollstÀndig zu blockieren.
Diese FÀhigkeit ist bewusst noch nicht final entschieden. Sie braucht einen separaten Drill-down, weil mehrere Verhaltensmodelle möglich sind:
- Strict Provider Confirmation: Buchung gilt erst, wenn Kuschick sie bestÀtigt. Niedriges operatives Risiko, aber keine echte Offline-UnabhÀngigkeit.
- Queued Booking Request: Busflow nimmt die Anfrage entgegen, markiert sie als wartend und synchronisiert spÀter nach Kuschick. Gute Ausfalltoleranz, aber die Kundenerwartung muss klar als Anfrage/Reservierungsversuch formuliert sein.
- Busflow-owned Reservation Hold: Busflow hĂ€lt KapazitĂ€t anhand frischer Cache-Daten und reconciled spĂ€ter gegen Kuschick. Starker USP, aber konfliktanfĂ€llig bei Parallelbuchungen auĂerhalb Busflow.
- Progressive Replacement: Busflow ĂŒbernimmt bestimmte Buchungs-/Abrechnungsfunktionen selbst und nutzt Kuschick nur noch fĂŒr verbleibende Legacy-DomĂ€nen. Strategisch interessant, aber auĂerhalb des Satzart-MVPs.
FĂŒr den Satzart-Wrapper darf diese FĂ€higkeit vorbereitet werden, muss aber in der Partner-API sauber als Zustand modelliert werden. Eine offline angenommene Buchung darf nicht so erscheinen, als sei sie bereits in Kuschick bestĂ€tigt.
FĂŒr die externe Satzart-API gilt zunĂ€chst eine engere Regel: Wenn Kuschick beim finalen confirm nicht erreichbar ist, liefert der Wrapper einen Fehler. Satzart erhĂ€lt keine implizite Offline-Buchungsannahme, weil das Formular sonst Buchungen suggerieren könnte, die nicht in Kuschick angekommen sind.
FĂŒr Busflow-eigene Flows darf das Verhalten anders sein: Wenn Kuschick offline ist, kann Busflow eine Buchungsanfrage als eingegangen, aber Provider-BestĂ€tigung ausstehend aufnehmen. Ein erster manueller KlĂ€rungsprozess kann per E-Mail laufen:
- Bei Kuschick-Ausfall: interne/operatorseitige E-Mail "Kuschick ist nicht erreichbar; neue Buchungsanfrage liegt vor; wir versuchen spÀter erneut zu synchronisieren."
- Bei spÀterem Erfolg: E-Mail "Buchung ist jetzt in Kuschick angelegt."
- Bei spĂ€terer Ablehnung: E-Mail "Buchung konnte nicht automatisch hinzugefĂŒgt werden; bitte manuell ĂŒbernehmen/klĂ€ren."
Diese Busflow-FĂ€higkeit bleibt ein eigenes Produkt- und Prozessdesign und wird nicht automatisch in der Satzart-Partner-API freigeschaltet.
Partner Exposure vs. Busflow USP â
Satzart soll zunĂ€chst nur einen wrapperartigen Zugriff auf die Ausgangslage und den vereinbarten Kuschick-Flow erhalten. FĂ€higkeiten, die Busflow als strategischen USP stĂ€rken, können intern vorbereitet werden, mĂŒssen aber nicht fĂŒr Satzart exponiert werden.
Der Satzart-Flow umfasst den finalen confirm-Schritt, also das Schreiben einer echten Kuschick-Buchung. Ohne diesen Schritt wĂ€re der Wrapper fĂŒr das Buchungsformular nicht ausreichend wertvoll.
Die strategische Grenze liegt anders: Ein tiefer Buchungs-/Abrechnungs-Sync zwischen Kuschick und Busflow ist wertvoll, aber nicht Teil der Satzart-Schnittstelle. Satzart erhĂ€lt den Formular-Wrapper fĂŒr Kuschick; Busflow behĂ€lt weitergehende FĂ€higkeiten wie laufenden Buchungsabgleich, AbrechnungsĂŒbernahme, Delta-Sync oder spĂ€tere Teilablösung als eigene ProduktflĂ€che.
Rechtliche Grundlage â
Werkvertrag ohne zusĂ€tzliche Rechte-Ăbertragungs-Klausel. Nach deutschem Standardrecht beim externen Werkvertrag verbleibt damit das Urheberrecht beim Auftragnehmer (Julian). Satzart erhĂ€lt ein einfaches Nutzungsrecht im Rahmen des vereinbarten Zwecks â keine ExklusivitĂ€t, keine Ausschlussrechte gegen Julians eigene Wiederverwendung.
Konsequenz: Es ist keine kĂŒnstliche Aufspaltung in "Library vs. Microservice" notwendig, um IP zu sichern. Der Service kann grundsĂ€tzlich als von Julian betriebene/besessene Komponente bereitgestellt werden; der Reuse fĂŒr Busflow ist rechtlich unproblematisch.
Technisches Setup â
| Aspekt | Stand |
|---|---|
| Kuschick-Interface | Warnung: bisherige Annahme "SOAP, Standard-WSDL vorhanden" ist nicht durch die vorliegende Spezifikation belegt. Beschreibung XMLAnfrage.pdf beschreibt XML-over-HTTP via xmlanfrage.php?operation=<xmltext> mit Satz-Typen und MD5-Tages-Key. Vor AufwandsschÀtzung und Implementierung muss geklÀrt werden, ob Satzart/Kuschick tatsÀchlich SOAP/WSDL bereitstellt oder ob der Adapter gegen diese XML-Anfrage-Schnittstelle gebaut werden muss. |
| Endpoint-Sprache/Stack | offen â Abstimmung mit Satzarts Stack im Detail-Review |
| Auth zu Kuschick | offen â im Detail-Review klĂ€ren |
| Hosting-Modell | offen â bevorzugt Busflow-owned/betrieben; Satzart-Infra nur, wenn Projekt- oder Datenschutzanforderungen es erzwingen |
Neue Architektur-Erkenntnis â Booking Integration Service â
Der Integrationsservice ist nicht nur ein Formular-Endpoint, sondern der erste reale Spike fĂŒr einen Booking Integration Service: ein buchungsnaher Service, der externe Buchungsmasken entgegennimmt, validiert, normalisiert und in ein Zielsystem schreibt.
Zielbild: Der generische Teil beschreibt die Busflow-nahe Buchungssemantik: Anfrage annehmen, Pflichtfelder validieren, Passenger/Booker/Trip/Seat/Ancillary-Daten normalisieren, Idempotenz sicherstellen, Fehler und Retry-Strategien behandeln, Audit-/Debug-Informationen speichern. Der Kuschick-Teil bleibt bewusst spezifisch: Transportprotokoll (SOAP/WSDL falls vorhanden, sonst XML-over-HTTP), Auth/Key-Generierung, Feldnamen, Pflichtfeldlogik, Statuscodes, proprietÀre Datenkonstrukte und Kuschick-spezifische Workarounds.
Architektur-Hypothese: Nicht alles in einen neutralen "Booking API Wrapper" pressen. Besser ist eine klare Trennung:
- Generic Booking Intake Service â Zielsystem-unabhĂ€ngige Eingangs- und Normalisierungsschicht.
- Kuschick Connector / Sidecar Service â Kuschick-spezifische Ăbersetzung, Transportkommunikation und Betriebslogik.
- Future Busflow Connector â spĂ€tere Zielrichtung, wenn dieselbe oder Ă€hnliche Buchungsmaske direkt in Busflow schreibt.
Diese Trennung hÀlt Wiederverwendung möglich, ohne die RealitÀt zu verstecken: Legacy-Systeme wie Kuschick werden immer spezifische Datenkonstrukte, Pflichtfelder, FehlerfÀlle und Betriebsquirks haben.
Strategischer Nutzen â
- Bezahlte Arbeit + Beziehungspflege â Julian bleibt Go-To Partner fĂŒr Buchungs- und Integrationsthemen bei Satzart.
- Keine echte Konkurrenz zu Busflow â Satzarts Form bleibt ein "kostenloser USP" im PIM-Paket; Busflow arbeitet im eCommerce-/Buchungs-Layer ungleich detaillierter (Payment, Tickets, Dispatch, ...).
- Kuschick-Knowhow auf bezahlter Basis â Transportprotokoll, Auth-/Key-Quirks, Satz-Typen, Datenmodelle, Retry-Strategien werden im Satzart-Projekt aufgebaut. Da das Urheberrecht bei Julian liegt, ist die Wiederverwendung in einem zukĂŒnftigen Busflow-eigenen Kuschick-Konnektor (Migrationsszenarien) unproblematisch.
- Folgeauftrag-Pfad xtoura-App â Der Endpoint ist die Basis fĂŒr eine spĂ€tere Integration mit der xtoura-App. Separater, bezahlter Auftrag.
Risiken & Trade-Offs â
| Risiko | Handhabung |
|---|---|
| OpportunitĂ€tskosten gegenĂŒber Busflow | Akzeptiert unter Bedingung, dass andere, weniger wichtige AktivitĂ€ten priorisiert reduziert werden. Vor Beginn: Audit der eigenen Wochenaufteilung. |
| Dauerhafte Maintenance-Verpflichtung | Service ist im Besitz von Julian â er ist langfristig Ansprechpartner. Bei wachsender Last: Ăbergabe-Option (Code-Ăbertragung an Satzart gegen Aufpreis) offenhalten. |
| Architektonische Festlegung auf Kuschick-Datenmodell | Akzeptiert. Der Service ist explizit Kuschick-spezifisch (kein neutraler Buchungs-API-Wrapper). Migrations-BrĂŒcken zu Busflow entstehen separat. |
Offene Punkte (fĂŒr Detail-Review mit Satzart) â
- [ ] Tech-Stack des Satzart-Microservices / Endpoints
- [ ] Form-Spec: UX-Flow, Datenmodell, Pflichtfelder, Validierungsregeln
- [ ] Endpoint-Schnittstelle: Request/Response-Schema gegen die Form
- [ ] Boundary festlegen: Was gehört in den generischen Booking Intake Service, was in den Kuschick Connector / Sidecar?
- [ ] Kuschick-spezifische Datenkonstrukte katalogisieren: Pflichtfelder, Reise-/Termin-/Teilnehmerstruktur, Sitzplatzlogik, Zusatzleistungen, Agentur-/Kundendaten, Status- und Fehlercodes.
- [ ] Idempotenz- und Konfliktmodell definieren: doppelte Submit-Versuche, bereits belegte PlĂ€tze, Kuschick-originierte Parallelbuchungen, Storno/Ănderung nach Submit.
- [ ] Verbindliches Transportprotokoll klÀren: SOAP/WSDL vs. XML-over-HTTP
xmlanfrage.php?operation=<xmltext>. - [ ] Auth-Mechanismus Richtung Kuschick klÀren: WS-Security/Token/Basic falls SOAP, sonst
user+ MD5-Key aus User, Passwort, Tagesdatum und Satz-Typ. - [ ] Hosting/Deployment-Modell (Satzart-Infra vs. Julian-Infra)
- [ ] Vertrags-Text: BestĂ€tigen, dass keine ExklusivitĂ€ts-/Rechte-Ăbertragungs-Klausel enthalten ist
Parallel-Evaluation (separate Arbeitsspur) â
WĂ€hrend/nach Aufbau des Satzart-Service: bewerten, wie ein zukĂŒnftiger Busflow-eigener Kuschick-Sync gebaut werden kann. Ziel ist Wissens- und ggf. Code-Reuse â nicht Doppelarbeit. Diese Evaluation lĂ€uft auf Busflow-Zeit, nicht auf Satzart-Zeit.
Konkretes TODO fĂŒr Busflow: Aus dem Satzart-Service ein Busflow-taugliches Integrationsmuster extrahieren: Welche Teile werden als generischer Booking Intake wiederverwendbar, welche bleiben pro Legacy-System als Connector/Sidecar spezifisch? Ergebnis sollte spĂ€ter entweder in eine eigene Integrationsspec oder in PRODUCT_migration-and-onboarding.md ĂŒberfĂŒhrt werden.