Webseite & Shop
sites
core_platform
🛡️ RLS Protected
Webseite & Shop — aus Code abgeleitete Prozess- und API-Dokumentation.
⚡ Workflows & Lifecycles
Benutzerbefehl: website agent
plan:command_website_agent
Geprüfter Durable-Plan (durable_plan), Start: manual_command.
⚙️ Fachprozesse & Capabilities (System-Fachlogik)
Registrierte Fachoperationen und System-Capabilities dieses Moduls zur Steuerung von Workflows, Kaskaden und KI-Agenten.
| Capability & Schlüssel | Fachliche Bezeichnung | Ausführung / Coverage | Risikostufe & Freigabe | Effekte & Kaskaden |
|---|---|---|---|---|
Agent-Einstieg website_agent
agent_entry:website_agent
|
Agent-Einstieg website_agent
Quelle:
code:module_agent_map
|
manual_entry |
✓ Auto
|
Keine Seiteneffekte deklariert |
Rechtstext-Vorlage erzeugen
capability:sites.legal.draft
Op:
sites.legal.draft
|
Intent:
sites_legal_draft
Quelle:
code:capability_registry
|
⚙️ Engine |
✓ Auto
Risiko:
metadata
|
|
Rechtstext veröffentlichen
capability:sites.legal.publish
Op:
sites.legal.publish
|
Intent:
sites_legal_publish
Quelle:
code:capability_registry
|
⚙️ Engine |
🔒 Freigabe nötig
Risiko:
external_effect
|
|
Shop-Artikel veröffentlichen
capability:sites.offering.save
Op:
sites.offering.save
|
Intent:
sites_offering_save
Quelle:
code:capability_registry
|
⚙️ Engine |
✓ Auto
Risiko:
business_record
|
|
Shop-Bestellung ans ERP übergeben
capability:sites.order.handover
Op:
sites.order.handover
|
Intent:
sites_order_handover
Quelle:
code:capability_registry
|
⚙️ Engine |
✓ Auto
Risiko:
business_record
|
|
Shop-Bestellstatus ändern
capability:sites.order.transition
Op:
sites.order.transition
|
Intent:
sites_order_transition
Quelle:
code:capability_registry
|
⚙️ Engine |
🔒 Freigabe nötig
Risiko:
business_record
|
|
Webseiten-Entwurf anlegen
capability:sites.page.draft
Op:
sites.page.draft
|
Intent:
sites_page_draft
Quelle:
code:capability_registry
|
⚙️ Engine |
✓ Auto
Risiko:
business_record
|
|
Webseite veröffentlichen
capability:sites.page.publish
Op:
sites.page.publish
|
Intent:
sites_page_publish
Quelle:
code:capability_registry
|
⚙️ Engine |
🔒 Freigabe nötig
Risiko:
external_effect
|
|
Webseite/Shop schalten
capability:sites.site.publish
Op:
sites.site.publish
|
Intent:
sites_site_publish
Quelle:
code:capability_registry
|
⚙️ Engine |
🔒 Freigabe nötig
Risiko:
external_effect
|
|
Design anwenden
capability:sites.theme.apply
Op:
sites.theme.apply
|
Intent:
sites_theme_apply
Quelle:
code:capability_registry
|
⚙️ Engine |
✓ Auto
Risiko:
metadata
|
|
Benutzerbefehl: website agent
plan:command_website_agent
|
Benutzerbefehl: website agent
Quelle:
code:reviewed_execution_plan
|
durable_plan |
✓ Auto
|
Keine Seiteneffekte deklariert |
🧠 Fachprozess-Erzählung & Dual Knowledge Architektur
Synthese aus der ideologischen Blaupause (Meta-Fachlogik / Soll), der faktischen System-Implementierung (System-Fachlogik / Ist) und No-Code Customizing für KI-Consultants.
Der durchgängige Businessprozess im Detail (End-to-End Fließtext-Erzählung)
Vom Seitenentwurf bis zur bezahlten Shop-Bestellung
1. Webseite einrichten und gestalten
Die Webseite (sites) trägt Name, Sprachen, Kontakt, Preisanzeige (brutto/netto), Versand und Formularschalter.
Das Design kommt aus acht Themes (app.modules.sites.themes), die in hellem und dunklem Modus WCAG-AA-Kontrast
erreichen; eigene Marken- und Akzentfarben werden gegen dieselben Paare geprüft (brand_problems), bevor sie
gespeichert werden. Das Speichern des Designs verändert weder Veröffentlichungs- noch Shop-Status
(cap:sites.theme.apply).
2. Seiten bauen
Seiten (site_pages) bestehen aus typisierten Bausteinen: Hero, Text, Bild + Text, Produktraster, Kontakt,
Rechtstexte-Links, Kontaktformular, Newsletter, Aktion. Texte werden beim Speichern bereinigt (kein Script,
kein Style, Links nur https/mailto/tel oder seiteninterne Pfade). Slugs sind je Sprache eindeutig; reservierte
Pfade (shop, checkout, order, legal, form, cart, sitemap.xml) sind gesperrt. Entwürfe entstehen manuell oder
KI-unterstützt (tool:generate_site_page_content, semantischer Einstieg site_page.generate mit Intent
sites_page_generate); persistiert wird immer über cap:sites.page.draft, veröffentlicht wird mit dem
Verwaltungsrecht (cap:sites.page.publish). Ohne KI-Provider erzeugt ein deterministischer Fallback den Entwurf.
3. Rechtstexte versionieren
Impressum, AGB, Widerrufsbelehrung, Datenschutz und Versandinformationen (legal_texts) entstehen als
Gliederung aus den Stammdaten (cap:sites.legal.draft). Veröffentlichen (cap:sites.legal.publish) friert die
Version mit Datum und Person ein; die Vorversion wird abgelöst, nicht überschrieben. Ohne alle Pflichttexte lässt
sich die Webseite nicht veröffentlichen (cap:sites.site.publish).
4. Sortiment und Preise
Shop-Artikel (shop_product_offerings) verweisen auf Katalogprodukte. Preise sind Netto-Katalogpreise mit
optionaler Netto-Überschreibung; der Steuersatz kommt vom Produkt oder aus der Mandanten-Standardregel. Die
Anzeige folgt der Einstellung „brutto“ oder „netto“ mit Versandhinweis. Bestand begrenzt die Bestellmenge, außer
der Artikel erlaubt Nachlieferung (allow_backorder).
5. Bestellen
Der Warenkorb wird serverseitig bepreist (POST /site/{slug}/{lang}/cart/price), inklusive Gutscheinrabatt
(PromotionService) als negativer Position je Steuersatz und Versandposition. Der Checkout ist idempotent über ein
signiertes Formular-Token, die Schaltfläche lautet „Zahlungspflichtig bestellen“. Bestellnummern werden unter
Sperre vergeben; die Bestellung erhält ein Zugriffstoken, gespeichert wird nur dessen Hash. Gutscheine werden mit
Bezug shop:{Bestellnummer} eingelöst; Klick-IDs werden nur mit Tracking-Einwilligung übernommen.
6. Bezahlen
Stripe Checkout und PayPal Orders werden über ihre Webhooks (/site/hooks/stripe/{slug},
/site/hooks/paypal/{slug}) bestätigt; Betrag und Währung müssen exakt zur Bestellung passen, Stripe-Signaturen
älter als 300 Sekunden werden verworfen. Vorkasse/Rechnung bleibt „bestellt“. Den Status „bezahlt“ setzt nie eine
Person von Hand und nie ein Agent.
7. Übergabe ins ERP und Marketing
Bei „bezahlt“ oder „bestellt“ übergibt SiteService.handover_to_erp die Bestellung: Kunde finden oder anlegen,
Angebot anlegen und annehmen (portal_kind order, Kundenreferenz shop:{Nummer}), Ereignis QUOTE_ACCEPTED.
Zusätzlich entsteht SHOP_ORDER_PAID; die MarketingEventBridge bildet daraus die Conversion und bestätigt sie
finanziell. Storno und Erstattung kehren Gutscheineinlösungen um.
8. Formulare
Kontaktformular → Lead über LeadMarketingService (Honigtopf, Mindestausfüllzeit, Ratenbegrenzung).
Newsletter → Bestätigungsmail; die Einwilligung wird erst beim bestätigenden POST gespeichert (Double-Opt-in).
Meta-Fachlogik: Ideologische Blaupause, Soll-Weltbild & Normen
Meta-Fachlogik
- Der Shop ist Kanal, nicht Buchhaltung: Bestellungen werden zu Angeboten und Aufträgen im ERP; Rechnungen, Zahlungsabgleich und Bestand bleiben in ihren Modulen.
- Keine optimistischen Zustände: „bezahlt“ nur mit verifiziertem Anbieter-Webhook und passendem Betrag.
- Recht ist versioniert: Veröffentlichte Rechtstexte werden nie überschrieben; jede Bestellung zeigt die zum Zeitpunkt gültige Fassung.
- Privacy by Design: Kein Cookie, keine IP-Speicherung; Tracking nur mit Einwilligung je Zweck.
- KI assistiert: Entwürfe und Vorschläge; Veröffentlichen, Design anwenden, Bestellstatus und Zahlung bleiben menschlich.
Normbezug für sites
Prüfkatalog Standards-Registry v2026.10.1. Dieser Abschnitt ordnet Prüfreferenzen zu und stellt nicht fest, dass das Modul eine Norm einhält; keine Kataloganforderung ist als PASS bewertet.
Geführte Prüfreferenzen:
wcag-2.2, Web Content Accessibility Guidelines (WCAG) 2.2, Ausgabe W3C Recommendation 2023-10-05. Art: normative. Öffentlicher Text. Die Nennung ist keine Klauselprüfung. Keine modulspezifische Kataloganforderung. Die Zuordnung bleibt eine Prüfreferenz.en-301-549-4.1.1, EN 301 549 V4.1.1 – Accessibility requirements for ICT products and services, Ausgabe V4.1.1 (2026-09-07). Art: normative. Nur öffentliche Zusammenfassung. Keine Volltextprüfung. Keine modulspezifische Kataloganforderung. Die Zuordnung bleibt eine Prüfreferenz.iso-iec-25010-2023, ISO/IEC 25010:2023 Systems and software engineering — SQuaRE — Product quality model, Ausgabe ISO/IEC 25010:2023 (2023). Art: normative. Nur öffentliche Zusammenfassung. Keine Volltextprüfung. Keine modulspezifische Kataloganforderung. Die Zuordnung bleibt eine Prüfreferenz.
Plattformweite Katalogwerke mit Geltungsbereich all (unter anderem WCAG 2.2, EN 301 549 V4.1.1, ISO 9241-110:2020, ISO 9241-210:2019, ISO/IEC 25010:2023, ISO 9001:2026, ISO/IEC 27001:2022, APQC PCF 8.0, DSGVO, EU AI Act) umfassen dieses Modul mit. Wo der Volltext fehlt, bleibt der Zugang ohne Quelle, lizenzpflichtig oder nur als öffentliche Zusammenfassung gekennzeichnet. Auch diese Nennung weist keine eingehaltene Vorgabe nach.
Systemische Fachlogik: Faktische Umsetzung in Centurio ERP & Capabilities
Systemische Fachlogik
- Services:
SiteService, Themesapp.modules.sites.themes, Zahlungenapp.modules.sites.payments, Storefrontapp.modules.sites.public, Backofficeapp.modules.sites.web. - Tabellen:
sites,site_pages,legal_texts,shop_product_offerings,shop_orders,shop_order_events,shop_payment_settings(Geheimnisse verschlüsselt). - Ereignisse:
SHOP_ORDER_PAID,QUOTE_ACCEPTED; Marketing-Bridge bestätigt die Conversion. - Rechte: Modul
sites; Veröffentlichen und Zahlungseinstellungen erfordern Verwaltungsrecht. - KI: Agent
website_agent, Capabilitiessites_ops, Werkzeuggenerate_site_page_content, semantischer Einstiegsite_page.generate(Intentsites_page_generate), Rollewebsite_editor. - Custom Fields/No-Code: Sites-Objekte sind nicht in
CUSTOMIZABLE_OBJECTSundFORM_SURFACES, solange kein geprüfter Lese-/Schreibadapter mit echter Formularfläche existiert; es werden keine Scheinfelder angeboten.
KI-Consultant Leitfaden: Customizing- & No-Code-Konzept (Soll-Ist-Synthese)
KI-Consultant Blueprint
- Stand lesen (
tool:get_site_overview,tool:get_site_readiness) und fehlende Pflichtpunkte nennen. - Theme passend zur Branche vorschlagen (
tool:suggest_site_theme) mit Kontrastnachweis. - Seitenentwurf per KI-Auftrag (
tool:generate_site_page_content) oder aus Bausteinen (tool:draft_site_page), Rechtstext-Gliederung (tool:draft_legal_from_stammdaten) nur nach Bestätigung anlegen – nie veröffentlichen. - Sortimentslücken zeigen (
tool:suggest_shop_articles); Auswahl bleibt menschlich. - Keine Rechtsberatung; auf die Prüfung der Rechtstexte durch Fachleute hinweisen.
📚 Operative Prozessbegriffe & Transaktionsschnittstellen
- Stammdaten des Mandanten
- Katalogprodukte mit Preis und Steuersatz
- Zahlungsanbieter-Zugänge
- Gutscheincodes aus dem Marketing
- Veröffentlichte Webseite mit Sitemap
- Shop-Bestellungen
- Angenommene Angebote im ERP
- Leads und Newsletter-Einwilligungen
- Marketing-Conversions
- shop order paid -> SHOP_ORDER_PAID -> conversion_confirmed
- shop order paid/ordered -> handover -> QUOTE_ACCEPTED
- shop order cancelled/refunded -> promotion_redemption_reversed
- contact form -> crm_lead + marketing_lead_profile
- newsletter confirm -> consent_record
- Rechtstext-Aktualisierung
- Bestellnachschlag per Token oder E-Mail
- Ratenbegrenzung
- Preisanzeige nach Zielgruppe wählen
- Versandpauschale immer mit Steuersatz
- Pflicht-Rechtstexte vor Veröffentlichung prüfen lassen
- Zahlungsanbieter im Testmodus prüfen
- Newsletter nur mit Double-Opt-in aktivieren
🗄️ Data Models & Fields
🔌 Entry Points (UI & APIs)
| Art | Method | Endpoint / Path | Titel & Zweck | Required Role |
|---|---|---|---|---|
| ⚡ REST API | GET | /site/{slug}/ |
site_root
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/sitemap.xml |
sitemap
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/ |
site_home
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/checkout/return |
checkout_return
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/form/newsletter-confirm |
newsletter_confirm_page
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/legal/{kind} |
site_legal
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/order/{order_number} |
order_status
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/shop |
shop_catalog_page
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /site/{slug}/{lang}/{page_slug} |
site_page
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites |
sites_dashboard
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/legal |
sites_legal
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/legal/{legal_id} |
sites_legal_edit
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/orders |
sites_orders
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/orders/{order_id} |
sites_order_detail
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/pages |
sites_pages
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/pages/new |
sites_page_new
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/pages/{page_id} |
sites_page_edit
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/payments |
sites_payments
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | GET | /sites/shop |
sites_shop
Semantic binding: inventory_only; mutation=False
|
sites
|
| ⚡ REST API | POST | /site/hooks/paypal/{slug} |
paypal_webhook
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/hooks/stripe/{slug} |
stripe_webhook
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/{slug}/{lang}/cart/price |
cart_price
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/{slug}/{lang}/checkout |
checkout_submit
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/{slug}/{lang}/form/contact |
contact_submit
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/{slug}/{lang}/form/newsletter |
newsletter_submit
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /site/{slug}/{lang}/form/newsletter-confirm |
newsletter_confirm
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/legal/seed |
sites_legal_seed
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/legal/{legal_id}/save |
sites_legal_save
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/orders/{order_id}/handover |
sites_order_handover
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/orders/{order_id}/transit |
sites_order_transit
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/pages/ai-draft |
sites_page_ai_draft
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/pages/save |
sites_page_save
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/pages/{page_id}/ai-content |
sites_page_ai_content
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/pages/{page_id}/delete |
sites_page_delete
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/payments/save |
sites_payments_save
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/settings |
sites_settings
Semantic binding: operator_surface; mutation=True
|
sites
|
| ⚡ REST API | POST | /sites/shop/save |
sites_shop_save
Semantic binding: operator_surface; mutation=True
|
sites
|
🛡️ Regulatory & Compliance
Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:
- GoBD Nachvollziehbarkeit
- Mandanten-Isolation (PostgreSQL RLS)