commit d4001afd53090232478ed26dd669ef04dd0fe066 Author: Marek Lenczewski Date: Sat Apr 4 13:52:48 2026 +0200 Initial commit diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..139e3dd --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,44 @@ +# Shopsystem — Projektrichtlinien + +## Projekt + +Custom E-Commerce Shopsystem (B2C + B2B), weltweit einsetzbar, als verkaufbares Produkt geplant. + +## Architektur + +- **App-basiertes System**: Jede Funktion ist eine App mit Manifest (Abhängigkeiten, Konflikte, Pflicht/Optional) +- **Core**: Minimaler Kern (Auth, API-Router, App-Loader, Event-Bus, DI-Container) +- **Kommunikation zwischen Apps**: Events (lose Kopplung) und Dependency Injection (keine direkten Imports) +- **Dritt-Entwickler** können eigene Apps bauen (Marketplace-Konzept) + +## Tech-Stack + +- **Backend**: Python + FastAPI +- **Datenbank**: PostgreSQL (Write-Store) + Redis (Read-Store) +- **Frontend**: React (Next.js) + TypeScript +- **Suche**: Meilisearch (Standard), austauschbar per Such-Abstraktion für Enterprise-Kunden +- **DB-Migrationen**: Alembic (SQLAlchemy) +- **Jede App** bringt eigene Migrationen, API-Endpunkte und Frontend-Komponenten mit + +## Datenfluss + +- PostgreSQL ist die Quelle der Wahrheit (alle Schreiboperationen) +- Redis ist die Lese-Schicht (Frontend liest NUR aus Redis) +- Sync: Sofort-Aktualisierung bei Änderungen + Scheduler als Sicherheitsnetz +- Frontend sieht nie die DB-Komplexität, nur schnelle Redis-Reads + +## Umgebungen + +- `APP_ENV=dev|staging|production` steuert Verhalten +- Dev: Seed-Daten, Mock-Services, Hot-Reload, Debug-Logging +- Staging: Stripe Testmodus, Catch-All E-Mails +- Production: Echte Zahlungen, Caching an + +## Analyse-Dokument + +- `shopsystem-analyse.tex` — Vollständige Analyse (34 Seiten), nicht mehr anpassen + +## Arbeitsweise + +- Antworten kompakt halten +- KI-gestützter Workflow: Prototyp → Refactoring → Refactoring diff --git a/shopsystem-analyse.aux b/shopsystem-analyse.aux new file mode 100644 index 0000000..1051ee2 --- /dev/null +++ b/shopsystem-analyse.aux @@ -0,0 +1,165 @@ +\relax +\providecommand\babel@aux[2]{} +\@nameuse{bbl@beforestart} +\catcode `"\active +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\babel@aux{ngerman}{} +\@writefile{toc}{\contentsline {section}{\numberline {1}Einleitung}{3}{section.1}\protected@file@percent } +\newlabel{sec:einleitung}{{1}{3}{Einleitung}{section.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Projektzielsetzung}{3}{subsection.1.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Systemarchitektur -- Überblick}{3}{subsection.1.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Methodik}{3}{subsection.1.3}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Technologie-Analyse}{4}{section.2}\protected@file@percent } +\newlabel{sec:technologie}{{2}{4}{Technologie-Analyse}{section.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Backend-Frameworks}{4}{subsection.2.1}\protected@file@percent } +\newlabel{subsec:backend}{{2.1}{4}{Backend-Frameworks}{subsection.2.1}{}} +\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Backend-Framework-Vergleich}}{4}{table.1}\protected@file@percent } +\newlabel{tab:backend}{{1}{4}{Backend-Framework-Vergleich}{table.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Frontend-Frameworks}{4}{subsection.2.2}\protected@file@percent } +\newlabel{subsec:frontend}{{2.2}{4}{Frontend-Frameworks}{subsection.2.2}{}} +\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Frontend-Framework-Vergleich}}{5}{table.2}\protected@file@percent } +\newlabel{tab:frontend}{{2}{5}{Frontend-Framework-Vergleich}{table.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Datenbanken}{5}{subsection.2.3}\protected@file@percent } +\newlabel{subsec:datenbanken}{{2.3}{5}{Datenbanken}{subsection.2.3}{}} +\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Datenbank-Vergleich}}{5}{table.3}\protected@file@percent } +\newlabel{tab:datenbanken}{{3}{5}{Datenbank-Vergleich}{table.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Suchmaschinen}{6}{subsection.2.4}\protected@file@percent } +\newlabel{subsec:suche}{{2.4}{6}{Suchmaschinen}{subsection.2.4}{}} +\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Such-Engine-Vergleich}}{6}{table.4}\protected@file@percent } +\newlabel{tab:suche}{{4}{6}{Such-Engine-Vergleich}{table.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Zahlungsanbieter}{6}{subsection.2.5}\protected@file@percent } +\newlabel{subsec:zahlung}{{2.5}{6}{Zahlungsanbieter}{subsection.2.5}{}} +\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces Payment-Provider-Vergleich}}{6}{table.5}\protected@file@percent } +\newlabel{tab:zahlung}{{5}{6}{Payment-Provider-Vergleich}{table.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Infrastruktur \& Deployment}{7}{subsection.2.6}\protected@file@percent } +\newlabel{subsec:infrastruktur}{{2.6}{7}{Infrastruktur \& Deployment}{subsection.2.6}{}} +\@writefile{lot}{\contentsline {table}{\numberline {6}{\ignorespaces Infrastruktur-Vergleich}}{7}{table.6}\protected@file@percent } +\newlabel{tab:infrastruktur}{{6}{7}{Infrastruktur-Vergleich}{table.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Empfohlener Technologie-Stack}{8}{section.3}\protected@file@percent } +\newlabel{sec:stack}{{3}{8}{Empfohlener Technologie-Stack}{section.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Gewichtete Entscheidungsmatrix}{8}{subsection.3.1}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {7}{\ignorespaces Gewichtete Entscheidungsmatrix -- Technologie-Stacks}}{9}{table.7}\protected@file@percent } +\newlabel{tab:matrix}{{7}{9}{Gewichtete Entscheidungsmatrix -- Technologie-Stacks}{table.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Empfehlung: Stack 1}{10}{subsection.3.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Detaillierter Stack-Überblick}{10}{subsection.3.3}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {8}{\ignorespaces Detaillierter Technologie-Stack}}{10}{table.8}\protected@file@percent } +\newlabel{tab:stackdetail}{{8}{10}{Detaillierter Technologie-Stack}{table.8}{}} +\gdef \LT@i {\LT@entry + {1}{31.81458pt}\LT@entry + {4}{164.21698pt}\LT@entry + {4}{118.3726pt}\LT@entry + {1}{85.5237pt}} +\@writefile{toc}{\contentsline {section}{\numberline {4}Feature-Analyse}{11}{section.4}\protected@file@percent } +\newlabel{sec:features}{{4}{11}{Feature-Analyse}{section.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Pflicht-Features (\textcolor {mustgreen}{\textbf {PFLICHT}})}{11}{subsection.4.1}\protected@file@percent } +\newlabel{subsec:must}{{4.1}{11}{Pflicht-Features (\must )}{subsection.4.1}{}} +\@writefile{lot}{\contentsline {table}{\numberline {9}{Pflicht-Features -- Übersicht}}{11}{table.9}\protected@file@percent } +\newlabel{tab:must}{{9}{11}{Pflicht-Features -- Übersicht}{table.9}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}P01 -- Produktverwaltung}{11}{subsubsection.4.1.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}P02 -- Benutzer \& Authentifizierung}{12}{subsubsection.4.1.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3}P03 -- Warenkorb \& Checkout}{12}{subsubsection.4.1.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.4}P04 -- Bestellverwaltung}{12}{subsubsection.4.1.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.5}P05 -- Zahlungsabwicklung}{13}{subsubsection.4.1.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.6}P06 -- Versand \& Lieferung}{13}{subsubsection.4.1.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.7}P07 -- Steuerberechnung}{13}{subsubsection.4.1.7}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.8}P08 -- Sicherheit \& DSGVO}{14}{subsubsection.4.1.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.9}P09 -- Produktsuche}{14}{subsubsection.4.1.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.10}P10 -- Responsives Design}{14}{subsubsection.4.1.10}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.11}P11 -- Mehrsprachigkeit (i18n)}{15}{subsubsection.4.1.11}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.12}P12 -- Mehrwährungsfähigkeit}{15}{subsubsection.4.1.12}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.13}P13 -- Admin-Panel}{15}{subsubsection.4.1.13}\protected@file@percent } +\gdef \LT@ii {\LT@entry + {1}{31.81458pt}\LT@entry + {4}{158.57394pt}\LT@entry + {4}{118.3726pt}\LT@entry + {1}{85.5237pt}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Soll-Features (\textcolor {shouldblue}{\textbf {SOLL}})}{16}{subsection.4.2}\protected@file@percent } +\newlabel{subsec:should}{{4.2}{16}{Soll-Features (\should )}{subsection.4.2}{}} +\@writefile{lot}{\contentsline {table}{\numberline {10}{Soll-Features -- Übersicht}}{16}{table.10}\protected@file@percent } +\newlabel{tab:should}{{10}{16}{Soll-Features -- Übersicht}{table.10}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.1}S01 -- B2B-Preisgestaltung}{16}{subsubsection.4.2.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2}S02 -- Erweiterte Suche \& Filter}{16}{subsubsection.4.2.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.3}S03 -- Aktionen \& Rabatte}{17}{subsubsection.4.2.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.4}S04 -- Wunschliste}{17}{subsubsection.4.2.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.5}S05 -- Bewertungen \& Rezensionen}{17}{subsubsection.4.2.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.6}S06 -- E-Mail-Benachrichtigungen}{17}{subsubsection.4.2.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.7}S07 -- SEO-Optimierung}{18}{subsubsection.4.2.7}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.8}S08 -- Analytics \& Reporting}{18}{subsubsection.4.2.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.9}S09 -- CMS / Blog}{18}{subsubsection.4.2.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.10}S10 -- Multi-Warehouse-Inventar}{19}{subsubsection.4.2.10}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.11}S11 -- Retouren \& RMA}{19}{subsubsection.4.2.11}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.12}S12 -- REST/GraphQL API}{19}{subsubsection.4.2.12}\protected@file@percent } +\gdef \LT@iii {\LT@entry + {4}{32.87961pt}\LT@entry + {4}{208.39511pt}\LT@entry + {4}{118.3726pt}\LT@entry + {1}{85.5237pt}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Kann-Features (\textcolor {canyellow}{\textbf {KANN}})}{20}{subsection.4.3}\protected@file@percent } +\newlabel{subsec:can}{{4.3}{20}{Kann-Features (\can )}{subsection.4.3}{}} +\@writefile{lot}{\contentsline {table}{\numberline {11}{Kann-Features -- Übersicht}}{20}{table.11}\protected@file@percent } +\newlabel{tab:can}{{11}{20}{Kann-Features -- Übersicht}{table.11}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.1}K01 -- Treueprogramm / Bonuspunkte}{20}{subsubsection.4.3.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}K02 -- Abonnements / Wiederkehrende Bestellungen}{20}{subsubsection.4.3.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}K03 -- Marktplatz (Multi-Vendor)}{20}{subsubsection.4.3.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.4}K04 -- KI-gestützte Empfehlungen}{21}{subsubsection.4.3.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.5}K05 -- Live-Chat / Chatbot}{21}{subsubsection.4.3.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.6}K06 -- Social-Media-Integration}{21}{subsubsection.4.3.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.7}K07 -- Geschenkkarten}{21}{subsubsection.4.3.7}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.8}K08 -- EDI / PunchOut (Enterprise B2B)}{22}{subsubsection.4.3.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.9}K09 -- A/B-Testing}{22}{subsubsection.4.3.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.10}K10 -- PWA-Support}{22}{subsubsection.4.3.10}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.11}K11 -- Multi-Tenant / Multi-Store}{22}{subsubsection.4.3.11}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Nicht benötigte Features (\textcolor {notgray}{\textbf {NICHT BENÖTIGT}})}{22}{subsection.4.4}\protected@file@percent } +\newlabel{subsec:notneed}{{4.4}{22}{Nicht benötigte Features (\notneed )}{subsection.4.4}{}} +\@writefile{lot}{\contentsline {table}{\numberline {12}{\ignorespaces Abgrenzung -- Nicht benötigte Features}}{23}{table.12}\protected@file@percent } +\newlabel{tab:notneed}{{12}{23}{Abgrenzung -- Nicht benötigte Features}{table.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5}B2B-spezifische Anforderungen}{24}{section.5}\protected@file@percent } +\newlabel{sec:b2b}{{5}{24}{B2B-spezifische Anforderungen}{section.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}B2B vs. B2C -- Fundamentale Unterschiede}{24}{subsection.5.1}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {13}{\ignorespaces B2B vs. B2C -- Feature-Vergleich}}{24}{table.13}\protected@file@percent } +\newlabel{tab:b2bvsb2c}{{13}{24}{B2B vs. B2C -- Feature-Vergleich}{table.13}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Firmenkonten \& Rollenmanagement}{24}{subsection.5.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Genehmigungsworkflows}{24}{subsection.5.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Zahlungsbedingungen}{25}{subsection.5.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.5}Schnellbestellung \& CSV-Upload}{25}{subsection.5.5}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6}Internationalisierung}{26}{section.6}\protected@file@percent } +\newlabel{sec:i18n}{{6}{26}{Internationalisierung}{section.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Übersicht der Anforderungen}{26}{subsection.6.1}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {14}{\ignorespaces Internationalisierungsanforderungen}}{26}{table.14}\protected@file@percent } +\newlabel{tab:i18n}{{14}{26}{Internationalisierungsanforderungen}{table.14}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Mehrsprachigkeit (i18n)}{26}{subsection.6.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Mehrwährungsfähigkeit}{27}{subsection.6.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.4}Regionale Rechtsanforderungen}{27}{subsection.6.4}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {7}Sicherheit \& Compliance}{28}{section.7}\protected@file@percent } +\newlabel{sec:sicherheit}{{7}{28}{Sicherheit \& Compliance}{section.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}DSGVO / GDPR}{28}{subsection.7.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}PCI-DSS Compliance}{28}{subsection.7.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.3}OWASP Top 10 -- Maßnahmen}{28}{subsection.7.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {7.4}Authentifizierung \& Autorisierung}{28}{subsection.7.4}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {15}{\ignorespaces Sicherheitsmaßnahmen gegen OWASP Top 10}}{29}{table.15}\protected@file@percent } +\newlabel{tab:owasp}{{15}{29}{Sicherheitsmaßnahmen gegen OWASP Top 10}{table.15}{}} +\@writefile{toc}{\contentsline {section}{\numberline {8}Open-Source-Referenzarchitekturen}{29}{section.8}\protected@file@percent } +\newlabel{sec:referenz}{{8}{29}{Open-Source-Referenzarchitekturen}{section.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Learnings für unser System}{29}{subsection.8.1}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {16}{\ignorespaces Open-Source-Referenzplattformen im Vergleich}}{30}{table.16}\protected@file@percent } +\newlabel{tab:referenz}{{16}{30}{Open-Source-Referenzplattformen im Vergleich}{table.16}{}} +\@writefile{toc}{\contentsline {section}{\numberline {9}Architektur-Übersicht}{30}{section.9}\protected@file@percent } +\newlabel{sec:architektur}{{9}{30}{Architektur-Übersicht}{section.9}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.1}Architekturansatz: Modularer Monolith}{30}{subsection.9.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {9.2}System-Komponenten}{30}{subsection.9.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {9.3}API-Design}{30}{subsection.9.3}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {17}{\ignorespaces Architektur-Komponenten}}{31}{table.17}\protected@file@percent } +\newlabel{tab:architektur}{{17}{31}{Architektur-Komponenten}{table.17}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.4}Datenbank-Schema (Kernentitäten)}{31}{subsection.9.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {9.5}Event-Driven Architecture}{31}{subsection.9.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {9.6}Caching-Strategie}{32}{subsection.9.6}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {10}Zusammenfassung \& Empfehlung}{33}{section.10}\protected@file@percent } +\newlabel{sec:zusammenfassung}{{10}{33}{Zusammenfassung \& Empfehlung}{section.10}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {10.1}Empfohlener Stack (Zusammenfassung)}{33}{subsection.10.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {10.2}Phasenplan}{33}{subsection.10.2}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {18}{\ignorespaces Implementierungs-Phasenplan}}{33}{table.18}\protected@file@percent } +\newlabel{tab:phasen}{{18}{33}{Implementierungs-Phasenplan}{table.18}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {10.3}Nächste Schritte}{33}{subsection.10.3}\protected@file@percent } +\gdef \@abspage@last{34} diff --git a/shopsystem-analyse.log b/shopsystem-analyse.log new file mode 100644 index 0000000..d60c95b --- /dev/null +++ b/shopsystem-analyse.log @@ -0,0 +1,1236 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.4.26) 3 APR 2026 09:55 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**shopsystem-analyse.tex +(./shopsystem-analyse.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2023/05/17 v1.4n Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +) +\c@part=\count187 +\c@section=\count188 +\c@subsection=\count189 +\c@subsubsection=\count190 +\c@paragraph=\count191 +\c@subparagraph=\count192 +\c@figure=\count193 +\c@table=\count194 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2021/02/14 v1.3d Input encoding file +\inpenc@prehook=\toks17 +\inpenc@posthook=\toks18 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2021/04/29 v2.0v Standard LaTeX package +) +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2024/01/07 v24.1 The Babel package +\babel@savecnt=\count195 +\U@D=\dimen141 +\l@unhyphenated=\language89 + +(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) +\bbl@readstream=\read2 +\bbl@dirlevel=\count196 + +(/usr/share/texlive/texmf-dist/tex/generic/babel-german/ngerman.ldf +Language: ngerman 2024/01/19 v2.14 German support for babel (post-1996 orthogra +phy) + +(/usr/share/texlive/texmf-dist/tex/generic/babel-german/ngermanb.ldf +Language: ngermanb 2024/01/19 v2.14 German support for babel (post-1996 orthogr +aphy) +Package babel Info: Making " an active character on input line 122. +))) +(/usr/share/texlive/texmf-dist/tex/generic/babel/locale/de/babel-ngerman.tex +Package babel Info: Importing font and identification data for ngerman +(babel) from babel-de.ini. Reported on input line 11. +) +(/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.sty +Package: csquotes 2022-09-14 v5.2n context-sensitive quotations (JAW) + +(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count197 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks19 +) +\csq@reset=\count198 +\csq@gtype=\count199 +\csq@glevel=\count266 +\csq@qlevel=\count267 +\csq@maxlvl=\count268 +\csq@tshold=\count269 +\csq@ltx@everypar=\toks20 + +(/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.def +File: csquotes.def 2022-09-14 v5.2n csquotes generic definitions (JAW) +) +Package csquotes Info: Trying to load configuration file 'csquotes.cfg'... +Package csquotes Info: ... configuration file loaded successfully. + +(/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.cfg +File: csquotes.cfg +)) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2020/01/02 v5.9 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. + +(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2022/02/03 v1.0f TeX engine tests +)) +\Gm@cnth=\count270 +\Gm@cntv=\count271 +\c@Gm@tempcnt=\count272 +\Gm@bindingoffset=\dimen142 +\Gm@wd@mp=\dimen143 +\Gm@odd@mp=\dimen144 +\Gm@even@mp=\dimen145 +\Gm@layoutwidth=\dimen146 +\Gm@layoutheight=\dimen147 +\Gm@layouthoffset=\dimen148 +\Gm@layoutvoffset=\dimen149 +\Gm@dimlist=\toks21 +) +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +Package: fancyhdr 2022/11/09 v4.1 Extensive control of page headers and footers + +\f@nch@headwidth=\skip50 +\f@nch@O@elh=\skip51 +\f@nch@O@erh=\skip52 +\f@nch@O@olh=\skip53 +\f@nch@O@orh=\skip54 +\f@nch@O@elf=\skip55 +\f@nch@O@erf=\skip56 +\f@nch@O@olf=\skip57 +\f@nch@O@orf=\skip58 +) +(/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +Package: titlesec 2023/10/27 v2.16 Sectioning titles +\ttl@box=\box51 +\beforetitleunit=\skip59 +\aftertitleunit=\skip60 +\ttl@plus=\dimen150 +\ttl@minus=\dimen151 +\ttl@toksa=\toks22 +\titlewidth=\dimen152 +\titlewidthlast=\dimen153 +\titlewidthfirst=\dimen154 +) +(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.sty +Package: microtype 2023/03/13 v3.1a Micro-typographical refinements (RS) +\MT@toks=\toks23 +\MT@tempbox=\box52 +\MT@count=\count273 +LaTeX Info: Redefining \noprotrusionifhmode on input line 1059. +LaTeX Info: Redefining \leftprotrusion on input line 1060. +\MT@prot@toks=\toks24 +LaTeX Info: Redefining \rightprotrusion on input line 1078. +LaTeX Info: Redefining \textls on input line 1368. +\MT@outer@kern=\dimen155 +LaTeX Info: Redefining \textmicrotypecontext on input line 1988. +\MT@listname@count=\count274 + +(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype-pdftex.def +File: microtype-pdftex.def 2023/03/13 v3.1a Definitions specific to pdftex (RS) + +LaTeX Info: Redefining \lsstyle on input line 902. +LaTeX Info: Redefining \lslig on input line 902. +\MT@outer@space=\skip61 +) +Package microtype Info: Loading configuration file microtype.cfg. + +(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.cfg +File: microtype.cfg 2023/03/13 v3.1a microtype main configuration file (RS) +)) +(/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty +Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments + +(/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) +))) +(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty +Package: booktabs 2020/01/12 v1.61803398 Publication quality tables +\heavyrulewidth=\dimen156 +\lightrulewidth=\dimen157 +\cmidrulewidth=\dimen158 +\belowrulesep=\dimen159 +\belowbottomsep=\dimen160 +\aboverulesep=\dimen161 +\abovetopsep=\dimen162 +\cmidrulesep=\dimen163 +\cmidrulekern=\dimen164 +\defaultaddspace=\dimen165 +\@cmidla=\count275 +\@cmidlb=\count276 +\@aboverulesep=\dimen166 +\@belowrulesep=\dimen167 +\@thisruleclass=\count277 +\@lastruleclass=\count278 +\@thisrulewidth=\dimen168 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2023-11-01 v4.19 Multi-page Table package (DPC) +\LTleft=\skip62 +\LTright=\skip63 +\LTpre=\skip64 +\LTpost=\skip65 +\LTchunksize=\count279 +\LTcapwidth=\dimen169 +\LT@head=\box53 +\LT@firsthead=\box54 +\LT@foot=\box55 +\LT@lastfoot=\box56 +\LT@gbox=\box57 +\LT@cols=\count280 +\LT@rows=\count281 +\c@LT@tables=\count282 +\c@LT@chunks=\count283 +\LT@p@ftn=\toks25 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty +Package: tabularx 2023/07/08 v2.11c `tabularx' package (DPC) + +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +Package: array 2023/10/16 v2.5g Tabular extension package (FMi) +\col@sep=\dimen170 +\ar@mcellbox=\box58 +\extrarowheight=\dimen171 +\NC@list=\toks26 +\extratabsurround=\skip66 +\backup@length=\skip67 +\ar@cellbox=\box59 +) +\TX@col@width=\dimen172 +\TX@old@table=\dimen173 +\TX@old@col=\dimen174 +\TX@target=\dimen175 +\TX@delta=\dimen176 +\TX@cols=\count284 +\TX@ftn=\toks27 +) +(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +Package: multirow 2021/03/15 v2.8 Span multiple rows of a table +\multirow@colwidth=\skip68 +\multirow@cntb=\count285 +\multirow@dima=\skip69 +\bigstrutjot=\dimen177 +) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 274. + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. +Package xcolor Info: Model `RGB' extended on input line 1366. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. +) +(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty +Package: colortbl 2022/06/20 v1.0f Color table columns (DPC) +\everycr=\toks28 +\minrowclearance=\skip70 +\rownum=\count286 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/dvipsnam.def +File: dvipsnam.def 2016/06/17 v3.0m Driver-dependent file (DPC,SPQR) +) +(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty +Package: enumitem 2019/06/20 v3.9 Customized lists +\labelindent=\skip71 +\enit@outerparindent=\dimen178 +\enit@toks=\toks29 +\enit@inbox=\box60 +\enit@count@id=\count287 +\enitdp@description=\count288 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count289 +\lst@gtempboxa=\box61 +\lst@token=\toks30 +\lst@length=\count290 +\lst@currlwidth=\dimen179 +\lst@column=\count291 +\lst@pos=\count292 +\lst@lostspace=\dimen180 +\lst@width=\dimen181 +\lst@newlines=\count293 +\lst@lineno=\count294 +\lst@maxwidth=\dimen182 + +(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) +\c@lstnumber=\count295 +\lst@skipnumbers=\count296 +\lst@framebox=\box62 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2023/02/27 1.9 listings configuration +)) +Package: listings 2023/02/27 1.9 (Carsten Heinz) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. +) +\Gin@req@height=\dimen183 +\Gin@req@width=\dimen184 +) +(/usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty +Package: pdflscape 2022-10-27 v0.13 Display of landscape pages in PDF + +(/usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape-nometadata.sty +Package: pdflscape-nometadata 2022-10-28 v0.13 Display of landscape pages in PD +F (HO) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty +Package: lscape 2020/05/28 v3.02 Landscape Pages (DPC) +) +Package pdflscape Info: Auto-detected driver: pdftex on input line 81. +)) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2024-01-20 v7.01h Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO +) + +(/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +)) +(/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count297 +) +\@linkdim=\dimen185 +\Hy@linkcounter=\count298 +\Hy@pagecounter=\count299 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2024-01-20 v7.01h Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +(/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +\Hy@SavedSpaceFactor=\count300 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2024-01-20 v7.01h Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Hyper figures OFF on input line 4179. +Package hyperref Info: Link nesting OFF on input line 4184. +Package hyperref Info: Hyper index ON on input line 4187. +Package hyperref Info: Plain pages OFF on input line 4194. +Package hyperref Info: Backreferencing OFF on input line 4199. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4446. +\c@Hy@tempcnt=\count301 + +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip16 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 4784. +\XeTeXLinkMargin=\dimen186 + +(/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count302 +\Field@Width=\dimen187 +\Fld@charsize=\dimen188 +Package hyperref Info: Hyper figures OFF on input line 6063. +Package hyperref Info: Link nesting OFF on input line 6068. +Package hyperref Info: Hyper index ON on input line 6071. +Package hyperref Info: backreferencing OFF on input line 6078. +Package hyperref Info: Link coloring OFF on input line 6083. +Package hyperref Info: Link coloring with OCG OFF on input line 6088. +Package hyperref Info: PDF/A mode OFF on input line 6093. + +(/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty +Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi +package with kernel methods +) +\Hy@abspage=\count303 +\c@Item=\count304 +\c@Hfootnote=\count305 +) +Package hyperref Info: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2024-01-20 v7.01h Hyperref driver for pdfTeX + +(/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty +Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac +kage +with kernel methods +) +\Fld@listcount=\count306 +\c@bookmark@seq@number=\count307 + +(/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +85. +) +\Hy@SectionHShift=\skip72 +) +Package hyperref Info: Option `colorlinks' set `true' on input line 66. +Package csquotes Info: Checking for multilingual support... +Package csquotes Info: ... found 'babel' package. +Package csquotes Info: Adjusting default style. +Package csquotes Info: Redefining alias 'default' -> 'ngerman'. + +(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count308 +\l__pdf_internal_box=\box63 +) +(./shopsystem-analyse.aux) +\openout1 = `shopsystem-analyse.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 98. +LaTeX Font Info: ... okay on input line 98. + +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt) +* v-part:(T,H,B)=(71.13188pt, 702.78308pt, 71.13188pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=455.24411pt +* \textheight=702.78308pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-38.1381pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=35.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +LaTeX Info: Redefining \microtypecontext on input line 98. +Package microtype Info: Applying patch `item' on input line 98. +Package microtype Info: Applying patch `toc' on input line 98. +Package microtype Info: Applying patch `eqnum' on input line 98. +Package microtype Info: Applying patch `footnote' on input line 98. +Package microtype Info: Applying patch `verbatim' on input line 98. +Package microtype Info: Generating PDF output. +Package microtype Info: Character protrusion enabled (level 2). +Package microtype Info: Using default protrusion set `alltext'. +Package microtype Info: Automatic font expansion enabled (level 2), +(microtype) stretch: 20, shrink: 20, step: 1, non-selected. +Package microtype Info: Using default expansion set `alltext-nott'. +LaTeX Info: Redefining \showhyphens on input line 98. +Package microtype Info: No adjustment of tracking. +Package microtype Info: No adjustment of interword spacing. +Package microtype Info: No adjustment of character kerning. +(/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-cmr.cfg +File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman +(RS) +) +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count309 +\scratchdimen=\dimen189 +\scratchbox=\box64 +\nofMPsegments=\count310 +\nofMParguments=\count311 +\everyMPshowfont=\toks31 +\MPscratchCnt=\count312 +\MPscratchDim=\dimen190 +\MPnumerator=\count313 +\makeMPintoPDFobject=\count314 +\everyMPtoPDFconversion=\toks32 +) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +\c@lstlisting=\count315 +Package hyperref Info: Link coloring ON on input line 98. + +(./shopsystem-analyse.out) (./shopsystem-analyse.out) +\@outlinefile=\write3 +\openout3 = `shopsystem-analyse.out'. + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 119. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 119. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 119. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/usr/share/texmf/fonts/enc/ +dvips/cm-super/cm-super-t1.enc}] (./shopsystem-analyse.toc + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + + +pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has +been already used, duplicate ignored + + \relax +l.46 ...mm / Bonuspunkte}{20}{subsubsection.4.3.1} + % [1]) +\tf@toc=\write4 +\openout4 = `shopsystem-analyse.toc'. + + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[2] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[3{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] +Underfull \hbox (badness 3724) in paragraph at lines 227--227 +[]|\T1/cmr/bx/n/10.95 (+20) Rust (Ac- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 227--227 +[]|\T1/cmr/m/n/10.95 (+20) Medusa, + [] + + +Overfull \hbox (3.38792pt too wide) in paragraph at lines 235--237 +[]\T1/cmr/bx/n/12 (-20) FastAPI (Py-thon) \T1/cmr/m/n/12 (-20) über-zeugt durch + schnel-le Ent-wick-lung und na-ti-ve Async-Unterstützung. + [] + + +Overfull \hbox (0.63976pt too wide) in paragraph at lines 238--241 +\T1/cmr/m/n/12 (-20) Panel und Si-cher-heits-fea-tu-res. Sa-le-or, ei-ne der re +ifs-ten Open-Source-Commerce-Plattformen, + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 273--273 +[]|\T1/cmr/bx/n/10.95 (+20) Next.js (Re- + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[4] +Underfull \hbox (badness 10000) in paragraph at lines 316--316 +[]|\T1/cmr/m/n/10.95 (+20) JSON (ein-ge- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 316--316 +[]|\T1/cmr/m/n/10.95 (+20) Vertikal + Read- + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[5] +! Undefined control sequence. + ...¼hren (EU) & 1,5\% + 0,25\euro + {} & 1,2--2,9\% & Intercha... +l.391 \end{tabularx} + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. + ...¼hren (EU) & 1,5\% + 0,25\euro + {} & 1,2--2,9\% & Intercha... +l.391 \end{tabularx} + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. + ...¼hren (EU) & 1,5\% + 0,25\euro + {} & 1,2--2,9\% & Intercha... +l.391 \end{tabularx} + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[6] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[7] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[8] +Underfull \hbox (badness 4144) in paragraph at lines 481--481 +[]|\T1/cmr/bx/n/10.95 (+20) Stack 1: Nest-JS + + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[9 + +] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[10 + +] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[11] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[12] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[13] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[14] +LaTeX Font Info: Trying to load font information for T1+cmtt on input line 7 +72. + (/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 2023/04/13 v2.5m Standard LaTeX font definitions +) +Package microtype Info: Loading generic protrusion settings for font family +(microtype) `cmtt' (encoding: T1). +(microtype) For optimal results, create family-specific settings. +(microtype) See the microtype manual for details. + +! Undefined control sequence. +l.788 ...ung pro Locale (\$100.00 vs. 100,00~\euro + {} vs. Â¥100) +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[15] +! Undefined control sequence. +l.852 ...preise: 1--10 Stk. $\rightarrow$ 10~\euro + {}, 11--50 Stk. $\rightarr... +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.852 ...euro{}, 11--50 Stk. $\rightarrow$ 9~\euro + {}, 50+ Stk. $\rightarrow$... +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.852 ...9~\euro{}, 50+ Stk. $\rightarrow$ 8~\euro + {} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[16] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[17] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[18] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[19] +! Undefined control sequence. +l.1058 \item Punktesystem: 1 Punkt pro 1~\euro + {} Umsatz +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[20] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[21] +Underfull \hbox (badness 1019) in paragraph at lines 1235--1235 +\T1/cmr/m/n/10.95 (+20) spruchs-voll, schnell ver-al-tet. + [] + + +Underfull \hbox (badness 2269) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (+20) DATEV, sev-Desk, le-x-of-fi-ce, + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (+20) Lagerverwaltung (Picking, + [] + + +Underfull \hbox (badness 1776) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (+20) PCI-DSS Le-vel 1 er-for-dert + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1235--1235 +\T1/cmr/m/n/10.95 (+20) jähr-li-che Au-dits ($50K-- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (+20) Spezialisierte Tools bie-ten + [] + + +Underfull \hbox (badness 3428) in paragraph at lines 1235--1235 +\T1/cmr/m/n/10.95 (+20) Seg-men-tie-rung, Au-to-ma-ti-on + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (+20) Mailchimp, Bre-vo (ex- + [] + + +Overfull \hbox (3.39027pt too wide) in paragraph at lines 1235--1235 +[]|\T1/cmr/m/n/10.95 (-20) Kundenbeziehungsmanagement + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[22] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[23] +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Einheitlich für al-le + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Preisgruppen-Engine, + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (-2) Genehmigungspflichtig + [] + + +Underfull \hbox (badness 1803) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Workflow-Engine mit + [] + + +Underfull \hbox (badness 4779) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Auf Rech-nung (Net + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Kreditlimit-Prüfung, + [] + + +Underfull \hbox (badness 1622) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Firma mit meh-re-ren + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) Company-Account- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1298--1298 +[]|\T1/cmr/m/n/10.95 (+20) MOQ, Staf-fel-prei-se, + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[24] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[25] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[26] +! Undefined control sequence. +l.1450 \item Deutschland: 1.000,00~\euro + {} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[27] +Underfull \hbox (badness 10000) in paragraph at lines 1556--1556 +[]|\T1/cmr/m/n/10.95 (+20) Parameterisierte Que-ries, kein + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1556--1556 +[]|\T1/cmr/m/n/10.95 (+20) Security-Header, Dependency- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1556--1556 +[]|\T1/cmr/m/n/10.95 (+20) Argon2 (Pass-wör-ter), AES-256 + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[28] +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Modular (Plugin- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Erweiterbarkeit, DX, + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Saubere NestJS- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +\T1/cmr/m/n/10.95 (+20) Architektur, Type- + [] + + +Underfull \hbox (badness 2359) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Weniger Fea-tu-res als + [] + + +Underfull \hbox (badness 4779) in paragraph at lines 1647--1647 +\T1/cmr/m/n/10.95 (+20) Sa-le-or, B2B braucht + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Kleinste Com-mu-ni-ty, + [] + + +Underfull \hbox (badness 2134) in paragraph at lines 1647--1647 +[]|\T1/cmr/m/n/10.95 (+20) Mittel -- Architektur- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1647--1647 +[]|\T1/cmr/bx/n/10.95 (+20) Hoch \T1/cmr/m/n/10.95 (+20) -- NestJS- + [] + + +Overfull \hbox (49.81612pt too wide) in paragraph at lines 1660--1662 +[]\T1/cmr/m/n/12 (-20) GraphQL-Schema-Design für E-Commerce. Aus-ge-reif-te Mul +ti-Currency/Multi- + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[29] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[30] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[31] + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[32] +Underfull \hbox (badness 10000) in paragraph at lines 1878--1878 +[]|\T1/cmr/m/n/10.95 (+20) Priorisierte Soll-Features: B2B- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1878--1878 +\T1/cmr/m/n/10.95 (+20) Preisgestaltung (S01), Er-wei-ter-te + [] + + +Underfull \hbox (badness 3612) in paragraph at lines 1878--1878 +\T1/cmr/m/n/10.95 (+20) Su-che (S02), Ra-bat-te (S03), E-Mail- + [] + + +Underfull \hbox (badness 1609) in paragraph at lines 1878--1878 +\T1/cmr/m/n/10.95 (+20) Benachrichtigungen (S06), SEO (S07), + [] + + +Overfull \hbox (5.66446pt too wide) in paragraph at lines 1890--1892 +[]\T1/cmr/bx/n/12 (-20) Projektsetup \T1/cmr/m/n/12 (-20) -- Re-po-si-to-ry, CI +/CD-Pipeline, Docker-Konfiguration, Coding-Standards, + [] + + +Package fancyhdr Warning: \headheight is too small (12.0pt): +(fancyhdr) Make it at least 13.59999pt, for example: +(fancyhdr) \setlength{\headheight}{13.59999pt}. +(fancyhdr) You might also make \topmargin smaller to compensate: + +(fancyhdr) \addtolength{\topmargin}{-1.59999pt}. + +[33] (./shopsystem-analyse.aux) + *********** +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> + *********** +Package rerunfilecheck Info: File `shopsystem-analyse.out' has not changed. +(rerunfilecheck) Checksum: 1887C5C48E4B23EF7E53E59B4D803B5E;16191. + ) +Here is how much of TeX's memory you used: + 16670 strings out of 474222 + 261684 string characters out of 5748733 + 2119975 words of memory out of 5000000 + 38350 multiletter control sequences out of 15000+600000 + 577299 words of font info for 148 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 69i,13n,79p,1207b,2016s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on shopsystem-analyse.pdf (34 pages, 416815 bytes). +PDF statistics: + 783 PDF objects out of 1000 (max. 8388607) + 708 compressed objects within 8 object streams + 199 named destinations out of 1000 (max. 500000) + 36521 words of extra memory for PDF output out of 42996 (max. 10000000) + diff --git a/shopsystem-analyse.out b/shopsystem-analyse.out new file mode 100644 index 0000000..a236f60 --- /dev/null +++ b/shopsystem-analyse.out @@ -0,0 +1,85 @@ +\BOOKMARK [1][-]{section.1}{\376\377\000E\000i\000n\000l\000e\000i\000t\000u\000n\000g}{}% 1 +\BOOKMARK [2][-]{subsection.1.1}{\376\377\000P\000r\000o\000j\000e\000k\000t\000z\000i\000e\000l\000s\000e\000t\000z\000u\000n\000g}{section.1}% 2 +\BOOKMARK [2][-]{subsection.1.2}{\376\377\000S\000y\000s\000t\000e\000m\000a\000r\000c\000h\000i\000t\000e\000k\000t\000u\000r\000\040\040\023\000\040\000\334\000b\000e\000r\000b\000l\000i\000c\000k}{section.1}% 3 +\BOOKMARK [2][-]{subsection.1.3}{\376\377\000M\000e\000t\000h\000o\000d\000i\000k}{section.1}% 4 +\BOOKMARK [1][-]{section.2}{\376\377\000T\000e\000c\000h\000n\000o\000l\000o\000g\000i\000e\000-\000A\000n\000a\000l\000y\000s\000e}{}% 5 +\BOOKMARK [2][-]{subsection.2.1}{\376\377\000B\000a\000c\000k\000e\000n\000d\000-\000F\000r\000a\000m\000e\000w\000o\000r\000k\000s}{section.2}% 6 +\BOOKMARK [2][-]{subsection.2.2}{\376\377\000F\000r\000o\000n\000t\000e\000n\000d\000-\000F\000r\000a\000m\000e\000w\000o\000r\000k\000s}{section.2}% 7 +\BOOKMARK [2][-]{subsection.2.3}{\376\377\000D\000a\000t\000e\000n\000b\000a\000n\000k\000e\000n}{section.2}% 8 +\BOOKMARK [2][-]{subsection.2.4}{\376\377\000S\000u\000c\000h\000m\000a\000s\000c\000h\000i\000n\000e\000n}{section.2}% 9 +\BOOKMARK [2][-]{subsection.2.5}{\376\377\000Z\000a\000h\000l\000u\000n\000g\000s\000a\000n\000b\000i\000e\000t\000e\000r}{section.2}% 10 +\BOOKMARK [2][-]{subsection.2.6}{\376\377\000I\000n\000f\000r\000a\000s\000t\000r\000u\000k\000t\000u\000r\000\040\000\046\000\040\000D\000e\000p\000l\000o\000y\000m\000e\000n\000t}{section.2}% 11 +\BOOKMARK [1][-]{section.3}{\376\377\000E\000m\000p\000f\000o\000h\000l\000e\000n\000e\000r\000\040\000T\000e\000c\000h\000n\000o\000l\000o\000g\000i\000e\000-\000S\000t\000a\000c\000k}{}% 12 +\BOOKMARK [2][-]{subsection.3.1}{\376\377\000G\000e\000w\000i\000c\000h\000t\000e\000t\000e\000\040\000E\000n\000t\000s\000c\000h\000e\000i\000d\000u\000n\000g\000s\000m\000a\000t\000r\000i\000x}{section.3}% 13 +\BOOKMARK [2][-]{subsection.3.2}{\376\377\000E\000m\000p\000f\000e\000h\000l\000u\000n\000g\000:\000\040\000S\000t\000a\000c\000k\000\040\0001}{section.3}% 14 +\BOOKMARK [2][-]{subsection.3.3}{\376\377\000D\000e\000t\000a\000i\000l\000l\000i\000e\000r\000t\000e\000r\000\040\000S\000t\000a\000c\000k\000-\000\334\000b\000e\000r\000b\000l\000i\000c\000k}{section.3}% 15 +\BOOKMARK [1][-]{section.4}{\376\377\000F\000e\000a\000t\000u\000r\000e\000-\000A\000n\000a\000l\000y\000s\000e}{}% 16 +\BOOKMARK [2][-]{subsection.4.1}{\376\377\000P\000f\000l\000i\000c\000h\000t\000-\000F\000e\000a\000t\000u\000r\000e\000s\000\040\000\050\000P\000F\000L\000I\000C\000H\000T\000\051}{section.4}% 17 +\BOOKMARK [3][-]{subsubsection.4.1.1}{\376\377\000P\0000\0001\000\040\040\023\000\040\000P\000r\000o\000d\000u\000k\000t\000v\000e\000r\000w\000a\000l\000t\000u\000n\000g}{subsection.4.1}% 18 +\BOOKMARK [3][-]{subsubsection.4.1.2}{\376\377\000P\0000\0002\000\040\040\023\000\040\000B\000e\000n\000u\000t\000z\000e\000r\000\040\000\046\000\040\000A\000u\000t\000h\000e\000n\000t\000i\000f\000i\000z\000i\000e\000r\000u\000n\000g}{subsection.4.1}% 19 +\BOOKMARK [3][-]{subsubsection.4.1.3}{\376\377\000P\0000\0003\000\040\040\023\000\040\000W\000a\000r\000e\000n\000k\000o\000r\000b\000\040\000\046\000\040\000C\000h\000e\000c\000k\000o\000u\000t}{subsection.4.1}% 20 +\BOOKMARK [3][-]{subsubsection.4.1.4}{\376\377\000P\0000\0004\000\040\040\023\000\040\000B\000e\000s\000t\000e\000l\000l\000v\000e\000r\000w\000a\000l\000t\000u\000n\000g}{subsection.4.1}% 21 +\BOOKMARK [3][-]{subsubsection.4.1.5}{\376\377\000P\0000\0005\000\040\040\023\000\040\000Z\000a\000h\000l\000u\000n\000g\000s\000a\000b\000w\000i\000c\000k\000l\000u\000n\000g}{subsection.4.1}% 22 +\BOOKMARK [3][-]{subsubsection.4.1.6}{\376\377\000P\0000\0006\000\040\040\023\000\040\000V\000e\000r\000s\000a\000n\000d\000\040\000\046\000\040\000L\000i\000e\000f\000e\000r\000u\000n\000g}{subsection.4.1}% 23 +\BOOKMARK [3][-]{subsubsection.4.1.7}{\376\377\000P\0000\0007\000\040\040\023\000\040\000S\000t\000e\000u\000e\000r\000b\000e\000r\000e\000c\000h\000n\000u\000n\000g}{subsection.4.1}% 24 +\BOOKMARK [3][-]{subsubsection.4.1.8}{\376\377\000P\0000\0008\000\040\040\023\000\040\000S\000i\000c\000h\000e\000r\000h\000e\000i\000t\000\040\000\046\000\040\000D\000S\000G\000V\000O}{subsection.4.1}% 25 +\BOOKMARK [3][-]{subsubsection.4.1.9}{\376\377\000P\0000\0009\000\040\040\023\000\040\000P\000r\000o\000d\000u\000k\000t\000s\000u\000c\000h\000e}{subsection.4.1}% 26 +\BOOKMARK [3][-]{subsubsection.4.1.10}{\376\377\000P\0001\0000\000\040\040\023\000\040\000R\000e\000s\000p\000o\000n\000s\000i\000v\000e\000s\000\040\000D\000e\000s\000i\000g\000n}{subsection.4.1}% 27 +\BOOKMARK [3][-]{subsubsection.4.1.11}{\376\377\000P\0001\0001\000\040\040\023\000\040\000M\000e\000h\000r\000s\000p\000r\000a\000c\000h\000i\000g\000k\000e\000i\000t\000\040\000\050\000i\0001\0008\000n\000\051}{subsection.4.1}% 28 +\BOOKMARK [3][-]{subsubsection.4.1.12}{\376\377\000P\0001\0002\000\040\040\023\000\040\000M\000e\000h\000r\000w\000\344\000h\000r\000u\000n\000g\000s\000f\000\344\000h\000i\000g\000k\000e\000i\000t}{subsection.4.1}% 29 +\BOOKMARK [3][-]{subsubsection.4.1.13}{\376\377\000P\0001\0003\000\040\040\023\000\040\000A\000d\000m\000i\000n\000-\000P\000a\000n\000e\000l}{subsection.4.1}% 30 +\BOOKMARK [2][-]{subsection.4.2}{\376\377\000S\000o\000l\000l\000-\000F\000e\000a\000t\000u\000r\000e\000s\000\040\000\050\000S\000O\000L\000L\000\051}{section.4}% 31 +\BOOKMARK [3][-]{subsubsection.4.2.1}{\376\377\000S\0000\0001\000\040\040\023\000\040\000B\0002\000B\000-\000P\000r\000e\000i\000s\000g\000e\000s\000t\000a\000l\000t\000u\000n\000g}{subsection.4.2}% 32 +\BOOKMARK [3][-]{subsubsection.4.2.2}{\376\377\000S\0000\0002\000\040\040\023\000\040\000E\000r\000w\000e\000i\000t\000e\000r\000t\000e\000\040\000S\000u\000c\000h\000e\000\040\000\046\000\040\000F\000i\000l\000t\000e\000r}{subsection.4.2}% 33 +\BOOKMARK [3][-]{subsubsection.4.2.3}{\376\377\000S\0000\0003\000\040\040\023\000\040\000A\000k\000t\000i\000o\000n\000e\000n\000\040\000\046\000\040\000R\000a\000b\000a\000t\000t\000e}{subsection.4.2}% 34 +\BOOKMARK [3][-]{subsubsection.4.2.4}{\376\377\000S\0000\0004\000\040\040\023\000\040\000W\000u\000n\000s\000c\000h\000l\000i\000s\000t\000e}{subsection.4.2}% 35 +\BOOKMARK [3][-]{subsubsection.4.2.5}{\376\377\000S\0000\0005\000\040\040\023\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g\000e\000n\000\040\000\046\000\040\000R\000e\000z\000e\000n\000s\000i\000o\000n\000e\000n}{subsection.4.2}% 36 +\BOOKMARK [3][-]{subsubsection.4.2.6}{\376\377\000S\0000\0006\000\040\040\023\000\040\000E\000-\000M\000a\000i\000l\000-\000B\000e\000n\000a\000c\000h\000r\000i\000c\000h\000t\000i\000g\000u\000n\000g\000e\000n}{subsection.4.2}% 37 +\BOOKMARK [3][-]{subsubsection.4.2.7}{\376\377\000S\0000\0007\000\040\040\023\000\040\000S\000E\000O\000-\000O\000p\000t\000i\000m\000i\000e\000r\000u\000n\000g}{subsection.4.2}% 38 +\BOOKMARK [3][-]{subsubsection.4.2.8}{\376\377\000S\0000\0008\000\040\040\023\000\040\000A\000n\000a\000l\000y\000t\000i\000c\000s\000\040\000\046\000\040\000R\000e\000p\000o\000r\000t\000i\000n\000g}{subsection.4.2}% 39 +\BOOKMARK [3][-]{subsubsection.4.2.9}{\376\377\000S\0000\0009\000\040\040\023\000\040\000C\000M\000S\000\040\000/\000\040\000B\000l\000o\000g}{subsection.4.2}% 40 +\BOOKMARK [3][-]{subsubsection.4.2.10}{\376\377\000S\0001\0000\000\040\040\023\000\040\000M\000u\000l\000t\000i\000-\000W\000a\000r\000e\000h\000o\000u\000s\000e\000-\000I\000n\000v\000e\000n\000t\000a\000r}{subsection.4.2}% 41 +\BOOKMARK [3][-]{subsubsection.4.2.11}{\376\377\000S\0001\0001\000\040\040\023\000\040\000R\000e\000t\000o\000u\000r\000e\000n\000\040\000\046\000\040\000R\000M\000A}{subsection.4.2}% 42 +\BOOKMARK [3][-]{subsubsection.4.2.12}{\376\377\000S\0001\0002\000\040\040\023\000\040\000R\000E\000S\000T\000/\000G\000r\000a\000p\000h\000Q\000L\000\040\000A\000P\000I}{subsection.4.2}% 43 +\BOOKMARK [2][-]{subsection.4.3}{\376\377\000K\000a\000n\000n\000-\000F\000e\000a\000t\000u\000r\000e\000s\000\040\000\050\000K\000A\000N\000N\000\051}{section.4}% 44 +\BOOKMARK [3][-]{subsubsection.4.3.1}{\376\377\000K\0000\0001\000\040\040\023\000\040\000T\000r\000e\000u\000e\000p\000r\000o\000g\000r\000a\000m\000m\000\040\000/\000\040\000B\000o\000n\000u\000s\000p\000u\000n\000k\000t\000e}{subsection.4.3}% 45 +\BOOKMARK [3][-]{subsubsection.4.3.2}{\376\377\000K\0000\0002\000\040\040\023\000\040\000A\000b\000o\000n\000n\000e\000m\000e\000n\000t\000s\000\040\000/\000\040\000W\000i\000e\000d\000e\000r\000k\000e\000h\000r\000e\000n\000d\000e\000\040\000B\000e\000s\000t\000e\000l\000l\000u\000n\000g\000e\000n}{subsection.4.3}% 46 +\BOOKMARK [3][-]{subsubsection.4.3.3}{\376\377\000K\0000\0003\000\040\040\023\000\040\000M\000a\000r\000k\000t\000p\000l\000a\000t\000z\000\040\000\050\000M\000u\000l\000t\000i\000-\000V\000e\000n\000d\000o\000r\000\051}{subsection.4.3}% 47 +\BOOKMARK [3][-]{subsubsection.4.3.4}{\376\377\000K\0000\0004\000\040\040\023\000\040\000K\000I\000-\000g\000e\000s\000t\000\374\000t\000z\000t\000e\000\040\000E\000m\000p\000f\000e\000h\000l\000u\000n\000g\000e\000n}{subsection.4.3}% 48 +\BOOKMARK [3][-]{subsubsection.4.3.5}{\376\377\000K\0000\0005\000\040\040\023\000\040\000L\000i\000v\000e\000-\000C\000h\000a\000t\000\040\000/\000\040\000C\000h\000a\000t\000b\000o\000t}{subsection.4.3}% 49 +\BOOKMARK [3][-]{subsubsection.4.3.6}{\376\377\000K\0000\0006\000\040\040\023\000\040\000S\000o\000c\000i\000a\000l\000-\000M\000e\000d\000i\000a\000-\000I\000n\000t\000e\000g\000r\000a\000t\000i\000o\000n}{subsection.4.3}% 50 +\BOOKMARK [3][-]{subsubsection.4.3.7}{\376\377\000K\0000\0007\000\040\040\023\000\040\000G\000e\000s\000c\000h\000e\000n\000k\000k\000a\000r\000t\000e\000n}{subsection.4.3}% 51 +\BOOKMARK [3][-]{subsubsection.4.3.8}{\376\377\000K\0000\0008\000\040\040\023\000\040\000E\000D\000I\000\040\000/\000\040\000P\000u\000n\000c\000h\000O\000u\000t\000\040\000\050\000E\000n\000t\000e\000r\000p\000r\000i\000s\000e\000\040\000B\0002\000B\000\051}{subsection.4.3}% 52 +\BOOKMARK [3][-]{subsubsection.4.3.9}{\376\377\000K\0000\0009\000\040\040\023\000\040\000A\000/\000B\000-\000T\000e\000s\000t\000i\000n\000g}{subsection.4.3}% 53 +\BOOKMARK [3][-]{subsubsection.4.3.10}{\376\377\000K\0001\0000\000\040\040\023\000\040\000P\000W\000A\000-\000S\000u\000p\000p\000o\000r\000t}{subsection.4.3}% 54 +\BOOKMARK [3][-]{subsubsection.4.3.11}{\376\377\000K\0001\0001\000\040\040\023\000\040\000M\000u\000l\000t\000i\000-\000T\000e\000n\000a\000n\000t\000\040\000/\000\040\000M\000u\000l\000t\000i\000-\000S\000t\000o\000r\000e}{subsection.4.3}% 55 +\BOOKMARK [2][-]{subsection.4.4}{\376\377\000N\000i\000c\000h\000t\000\040\000b\000e\000n\000\366\000t\000i\000g\000t\000e\000\040\000F\000e\000a\000t\000u\000r\000e\000s\000\040\000\050\000N\000I\000C\000H\000T\000\040\000B\000E\000N\000\326\000T\000I\000G\000T\000\051}{section.4}% 56 +\BOOKMARK [1][-]{section.5}{\376\377\000B\0002\000B\000-\000s\000p\000e\000z\000i\000f\000i\000s\000c\000h\000e\000\040\000A\000n\000f\000o\000r\000d\000e\000r\000u\000n\000g\000e\000n}{}% 57 +\BOOKMARK [2][-]{subsection.5.1}{\376\377\000B\0002\000B\000\040\000v\000s\000.\000\040\000B\0002\000C\000\040\040\023\000\040\000F\000u\000n\000d\000a\000m\000e\000n\000t\000a\000l\000e\000\040\000U\000n\000t\000e\000r\000s\000c\000h\000i\000e\000d\000e}{section.5}% 58 +\BOOKMARK [2][-]{subsection.5.2}{\376\377\000F\000i\000r\000m\000e\000n\000k\000o\000n\000t\000e\000n\000\040\000\046\000\040\000R\000o\000l\000l\000e\000n\000m\000a\000n\000a\000g\000e\000m\000e\000n\000t}{section.5}% 59 +\BOOKMARK [2][-]{subsection.5.3}{\376\377\000G\000e\000n\000e\000h\000m\000i\000g\000u\000n\000g\000s\000w\000o\000r\000k\000f\000l\000o\000w\000s}{section.5}% 60 +\BOOKMARK [2][-]{subsection.5.4}{\376\377\000Z\000a\000h\000l\000u\000n\000g\000s\000b\000e\000d\000i\000n\000g\000u\000n\000g\000e\000n}{section.5}% 61 +\BOOKMARK [2][-]{subsection.5.5}{\376\377\000S\000c\000h\000n\000e\000l\000l\000b\000e\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000\046\000\040\000C\000S\000V\000-\000U\000p\000l\000o\000a\000d}{section.5}% 62 +\BOOKMARK [1][-]{section.6}{\376\377\000I\000n\000t\000e\000r\000n\000a\000t\000i\000o\000n\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g}{}% 63 +\BOOKMARK [2][-]{subsection.6.1}{\376\377\000\334\000b\000e\000r\000s\000i\000c\000h\000t\000\040\000d\000e\000r\000\040\000A\000n\000f\000o\000r\000d\000e\000r\000u\000n\000g\000e\000n}{section.6}% 64 +\BOOKMARK [2][-]{subsection.6.2}{\376\377\000M\000e\000h\000r\000s\000p\000r\000a\000c\000h\000i\000g\000k\000e\000i\000t\000\040\000\050\000i\0001\0008\000n\000\051}{section.6}% 65 +\BOOKMARK [2][-]{subsection.6.3}{\376\377\000M\000e\000h\000r\000w\000\344\000h\000r\000u\000n\000g\000s\000f\000\344\000h\000i\000g\000k\000e\000i\000t}{section.6}% 66 +\BOOKMARK [2][-]{subsection.6.4}{\376\377\000R\000e\000g\000i\000o\000n\000a\000l\000e\000\040\000R\000e\000c\000h\000t\000s\000a\000n\000f\000o\000r\000d\000e\000r\000u\000n\000g\000e\000n}{section.6}% 67 +\BOOKMARK [1][-]{section.7}{\376\377\000S\000i\000c\000h\000e\000r\000h\000e\000i\000t\000\040\000\046\000\040\000C\000o\000m\000p\000l\000i\000a\000n\000c\000e}{}% 68 +\BOOKMARK [2][-]{subsection.7.1}{\376\377\000D\000S\000G\000V\000O\000\040\000/\000\040\000G\000D\000P\000R}{section.7}% 69 +\BOOKMARK [2][-]{subsection.7.2}{\376\377\000P\000C\000I\000-\000D\000S\000S\000\040\000C\000o\000m\000p\000l\000i\000a\000n\000c\000e}{section.7}% 70 +\BOOKMARK [2][-]{subsection.7.3}{\376\377\000O\000W\000A\000S\000P\000\040\000T\000o\000p\000\040\0001\0000\000\040\040\023\000\040\000M\000a\000\337\000n\000a\000h\000m\000e\000n}{section.7}% 71 +\BOOKMARK [2][-]{subsection.7.4}{\376\377\000A\000u\000t\000h\000e\000n\000t\000i\000f\000i\000z\000i\000e\000r\000u\000n\000g\000\040\000\046\000\040\000A\000u\000t\000o\000r\000i\000s\000i\000e\000r\000u\000n\000g}{section.7}% 72 +\BOOKMARK [1][-]{section.8}{\376\377\000O\000p\000e\000n\000-\000S\000o\000u\000r\000c\000e\000-\000R\000e\000f\000e\000r\000e\000n\000z\000a\000r\000c\000h\000i\000t\000e\000k\000t\000u\000r\000e\000n}{}% 73 +\BOOKMARK [2][-]{subsection.8.1}{\376\377\000L\000e\000a\000r\000n\000i\000n\000g\000s\000\040\000f\000\374\000r\000\040\000u\000n\000s\000e\000r\000\040\000S\000y\000s\000t\000e\000m}{section.8}% 74 +\BOOKMARK [1][-]{section.9}{\376\377\000A\000r\000c\000h\000i\000t\000e\000k\000t\000u\000r\000-\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{}% 75 +\BOOKMARK [2][-]{subsection.9.1}{\376\377\000A\000r\000c\000h\000i\000t\000e\000k\000t\000u\000r\000a\000n\000s\000a\000t\000z\000:\000\040\000M\000o\000d\000u\000l\000a\000r\000e\000r\000\040\000M\000o\000n\000o\000l\000i\000t\000h}{section.9}% 76 +\BOOKMARK [2][-]{subsection.9.2}{\376\377\000S\000y\000s\000t\000e\000m\000-\000K\000o\000m\000p\000o\000n\000e\000n\000t\000e\000n}{section.9}% 77 +\BOOKMARK [2][-]{subsection.9.3}{\376\377\000A\000P\000I\000-\000D\000e\000s\000i\000g\000n}{section.9}% 78 +\BOOKMARK [2][-]{subsection.9.4}{\376\377\000D\000a\000t\000e\000n\000b\000a\000n\000k\000-\000S\000c\000h\000e\000m\000a\000\040\000\050\000K\000e\000r\000n\000e\000n\000t\000i\000t\000\344\000t\000e\000n\000\051}{section.9}% 79 +\BOOKMARK [2][-]{subsection.9.5}{\376\377\000E\000v\000e\000n\000t\000-\000D\000r\000i\000v\000e\000n\000\040\000A\000r\000c\000h\000i\000t\000e\000c\000t\000u\000r\000e}{section.9}% 80 +\BOOKMARK [2][-]{subsection.9.6}{\376\377\000C\000a\000c\000h\000i\000n\000g\000-\000S\000t\000r\000a\000t\000e\000g\000i\000e}{section.9}% 81 +\BOOKMARK [1][-]{section.10}{\376\377\000Z\000u\000s\000a\000m\000m\000e\000n\000f\000a\000s\000s\000u\000n\000g\000\040\000\046\000\040\000E\000m\000p\000f\000e\000h\000l\000u\000n\000g}{}% 82 +\BOOKMARK [2][-]{subsection.10.1}{\376\377\000E\000m\000p\000f\000o\000h\000l\000e\000n\000e\000r\000\040\000S\000t\000a\000c\000k\000\040\000\050\000Z\000u\000s\000a\000m\000m\000e\000n\000f\000a\000s\000s\000u\000n\000g\000\051}{section.10}% 83 +\BOOKMARK [2][-]{subsection.10.2}{\376\377\000P\000h\000a\000s\000e\000n\000p\000l\000a\000n}{section.10}% 84 +\BOOKMARK [2][-]{subsection.10.3}{\376\377\000N\000\344\000c\000h\000s\000t\000e\000\040\000S\000c\000h\000r\000i\000t\000t\000e}{section.10}% 85 diff --git a/shopsystem-analyse.pdf b/shopsystem-analyse.pdf new file mode 100644 index 0000000..d38c012 Binary files /dev/null and b/shopsystem-analyse.pdf differ diff --git a/shopsystem-analyse.tex b/shopsystem-analyse.tex new file mode 100644 index 0000000..105b919 --- /dev/null +++ b/shopsystem-analyse.tex @@ -0,0 +1,1899 @@ +% ============================================================================= +% Analyse und Planung eines Custom E-Commerce Shopsystems +% B2C & B2B -- Weltweiter Einsatz +% Erstellt: April 2026 +% ============================================================================= + +\documentclass[a4paper,12pt]{article} + +% --- Sprache & Encoding --- +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} +\usepackage{csquotes} + +% --- Layout --- +\usepackage[margin=2.5cm]{geometry} +\usepackage{fancyhdr} +\usepackage{titlesec} +\usepackage{microtype} +\usepackage{parskip} + +% --- Tabellen --- +\usepackage{booktabs} +\usepackage{longtable} +\usepackage{tabularx} +\usepackage{array} +\usepackage{multirow} + +% --- Farben --- +\usepackage[table,dvipsnames]{xcolor} +\definecolor{mustgreen}{HTML}{2E7D32} +\definecolor{shouldblue}{HTML}{1565C0} +\definecolor{canyellow}{HTML}{F9A825} +\definecolor{notgray}{HTML}{757575} +\definecolor{stackhighlight}{HTML}{E3F2FD} +\definecolor{sectioncolor}{HTML}{1A237E} +\definecolor{linkcolor}{HTML}{0D47A1} + +% --- Listen --- +\usepackage{enumitem} + +% --- Code --- +\usepackage{listings} +\lstset{ + basicstyle=\ttfamily\small, + breaklines=true, + frame=single, + backgroundcolor=\color{gray!5}, + rulecolor=\color{gray!30}, +} + +% --- Sonstiges --- +\usepackage{graphicx} +\usepackage{pdflscape} +\usepackage{hyperref} + +% --- Hyperref-Setup --- +\hypersetup{ + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=linkcolor, + pdftitle={Analyse und Planung eines Custom E-Commerce Shopsystems}, + pdfsubject={Technologie-Evaluierung, Feature-Analyse und Architekturempfehlung}, + pdfkeywords={E-Commerce, B2C, B2B, NestJS, Next.js, PostgreSQL, Shopsystem}, +} + +% --- Header/Footer --- +\pagestyle{fancy} +\fancyhf{} +\fancyhead[L]{\small\textit{Shopsystem-Analyse}} +\fancyhead[R]{\small\textit{B2C \& B2B}} +\fancyfoot[C]{\thepage} +\renewcommand{\headrulewidth}{0.4pt} + +% --- Custom Commands --- +\newcommand{\must}{\textcolor{mustgreen}{\textbf{PFLICHT}}} +\newcommand{\should}{\textcolor{shouldblue}{\textbf{SOLL}}} +\newcommand{\can}{\textcolor{canyellow}{\textbf{KANN}}} +\newcommand{\notneed}{\textcolor{notgray}{\textbf{NICHT BENÖTIGT}}} +\newcommand{\pro}{\textcolor{mustgreen}{\checkmark}} +\newcommand{\con}{\textcolor{red}{$\times$}} +\newcommand{\neutral}{\textcolor{canyellow}{$\sim$}} + +% --- Abschnittsformatierung --- +\titleformat{\section} + {\Large\bfseries\color{sectioncolor}}{\thesection}{1em}{} +\titleformat{\subsection} + {\large\bfseries\color{sectioncolor!80}}{\thesubsection}{1em}{} +\titleformat{\subsubsection} + {\normalsize\bfseries\color{sectioncolor!60}}{\thesubsubsection}{1em}{} + +% --- Neue Spaltentypen --- +\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} +\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} + +% ============================================================================= +\begin{document} + +% --- Titelseite --- +\begin{titlepage} + \centering + \vspace*{3cm} + + {\Huge\bfseries\color{sectioncolor} Analyse und Planung eines\\[0.3em] + Custom E-Commerce Shopsystems\par} + + \vspace{1.5cm} + + {\Large Technologie-Evaluierung, Feature-Analyse\\[0.3em] + und Architekturempfehlung\par} + + \vspace{1cm} + + {\large\textbf{B2C \& B2B -- Weltweiter Einsatz}\par} + + \vspace{3cm} + + \begin{tabular}{ll} + \textbf{Dokumenttyp:} & Technische Analyse \\ + \textbf{Version:} & 1.0 \\ + \textbf{Datum:} & April 2026 \\ + \textbf{Status:} & Entwurf \\ + \end{tabular} + + \vfill + + {\small Dieses Dokument dient als Entscheidungsgrundlage für die Technologieauswahl + und Feature-Priorisierung eines maßgeschneiderten E-Commerce-Systems.} +\end{titlepage} + +% --- Inhaltsverzeichnis --- +\setcounter{tocdepth}{3} +\tableofcontents +\newpage + + +% ============================================================================= +% KAPITEL 1: EINLEITUNG +% ============================================================================= +\section{Einleitung} +\label{sec:einleitung} + +\subsection{Projektzielsetzung} + +Ziel dieses Projekts ist die Entwicklung eines maßgeschneiderten E-Commerce-Shopsystems, +das sowohl B2C- (Business-to-Consumer) als auch B2B-Geschäftsmodelle (Business-to-Business) +unterstützt. Das System soll weltweit einsetzbar sein und sich durch eine moderne, +skalierbare Architektur auszeichnen. + +Im Gegensatz zu bestehenden SaaS-Lösungen (Shopify, WooCommerce) oder +Open-Source-Plattformen (Magento, PrestaShop) bietet ein Custom-System folgende Vorteile: + +\begin{itemize}[leftmargin=2em] + \item \textbf{Volle Kontrolle} über Funktionalität, Datenhoheit und Geschäftslogik + \item \textbf{Keine GMV-Gebühren} oder plattformabhängige Einschränkungen + \item \textbf{Maßgeschneiderte B2B-Workflows}, die in Standard-Plattformen oft fehlen + \item \textbf{Skalierbarkeit} ohne Plattform-Limits + \item \textbf{Unabhängigkeit} von Drittanbieter-Roadmaps und Lizenzänderungen +\end{itemize} + +\subsection{Systemarchitektur -- Überblick} + +Das System besteht aus drei Hauptkomponenten: + +\begin{description}[leftmargin=2em, labelwidth=2em] + \item[Backend] RESTful API (optional GraphQL) mit Geschäftslogik, Datenbankzugriff, + Authentifizierung und Integration externer Dienste (Zahlungen, Versand, Steuern). + \item[Frontend] Server-Side-Rendered (SSR) Webshop für Endkunden (B2C) und + Geschäftskunden (B2B) mit optimierter Performance und SEO. + \item[Admin] Verwaltungsoberfläche für Produkte, Bestellungen, Kunden, Einstellungen + und Reporting -- separates Deployment mit eigenem Berechtigungssystem. +\end{description} + +\subsection{Methodik} + +Die Technologiebewertung in diesem Dokument basiert auf folgenden Kriterien: + +\begin{enumerate}[leftmargin=2em] + \item \textbf{Ecosystem-Größe} -- Verfügbarkeit von Paketen, Plugins und Community-Support + \item \textbf{TypeScript-Unterstützung} -- Typsicherheit für weniger Fehler und bessere DX + \item \textbf{Skalierbarkeit} -- Fähigkeit, mit wachsender Last umzugehen + \item \textbf{Time-to-Market} -- Geschwindigkeit der Entwicklung bis zum MVP + \item \textbf{B2B-Eignung} -- Unterstützung komplexer Geschäftslogik + \item \textbf{Internationalisierung} -- Multi-Sprache, Multi-Währung, Multi-Region + \item \textbf{Entwickler-Verfügbarkeit} -- Einstellbarkeit von qualifizierten Entwicklern + \item \textbf{Langfristige Wartbarkeit} -- Clean Code, Testbarkeit, Modularität +\end{enumerate} + +Features werden nach dem MoSCoW-Prinzip priorisiert: +\must{} (Pflicht), \should{} (Soll), \can{} (Kann) und \notneed{} (Nicht benötigt). + + +% ============================================================================= +% KAPITEL 2: TECHNOLOGIE-ANALYSE +% ============================================================================= +\newpage +\section{Technologie-Analyse} +\label{sec:technologie} + +\subsection{Backend-Frameworks} +\label{subsec:backend} + +Die Wahl des Backend-Frameworks bestimmt maßgeblich die Architektur, Entwicklungsgeschwindigkeit +und Skalierbarkeit des gesamten Systems. Für ein E-Commerce-System mit hohen Anforderungen +an Datenintegrität, API-Performance und B2B-Geschäftslogik wurden fünf Frameworks evaluiert. + +\begin{table}[htbp] + \centering + \caption{Backend-Framework-Vergleich} + \label{tab:backend} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X X X} + \toprule + \textbf{Kriterium} & \textbf{NestJS} & \textbf{FastAPI} & \textbf{Django} & \textbf{Go (Gin)} & \textbf{Rust (Actix)} \\ + \midrule + Sprache & TypeScript & Python & Python & Go & Rust \\ + Typsicherheit & Hoch & Mittel & Gering & Hoch & Sehr hoch \\ + Performance & Gut & Gut & Mittel & Sehr gut & Exzellent \\ + Ecosystem & Sehr groß & Groß & Sehr groß & Mittel & Klein \\ + Lernkurve & Mittel & Niedrig & Mittel & Mittel & Hoch \\ + B2B-Eignung & Sehr gut & Gut & Gut & Gut & Gut \\ + Time-to-Market & Schnell & Schnell & Mittel & Mittel & Langsam \\ + E-Commerce-Ref. & Medusa, Vendure & Saleor & Saleor & -- & -- \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{NestJS (Node.js/TypeScript)} ist die ausgereifteste Wahl für ein modernes E-Commerce-Backend. +Es bietet Enterprise-Patterns wie Dependency Injection, modulare Architektur, Guards und Interceptors. +Die TypeScript-Durchgängigkeit mit dem Frontend eliminiert Kontextwechsel. +Medusa.js und Vendure -- zwei führende Open-Source-E-Commerce-Plattformen -- basieren auf diesem Stack. + +\textbf{FastAPI (Python)} überzeugt durch schnelle Entwicklung und native Async-Unterstützung. +Ideal, wenn KI/ML-Features (Produktempfehlungen, Preisoptimierung) im Vordergrund stehen. + +\textbf{Django (Python)} bietet ein \enquote{Batteries-included}-Konzept mit eingebautem ORM, +Admin-Panel und Sicherheitsfeatures. Saleor, eine der reifsten Open-Source-Commerce-Plattformen, +nutzt Django als Basis. + +\textbf{Go} und \textbf{Rust} bieten überlegene Rohperformance, eignen sich jedoch eher für +spezialisierte Microservices (Zahlungsverarbeitung, Echtzeit-Inventar) als für die gesamte +Anwendungsschicht. Die kleineren Ecosystems erhöhen den Entwicklungsaufwand. + + +\subsection{Frontend-Frameworks} +\label{subsec:frontend} + +Für ein weltweit eingesetztes E-Commerce-Frontend sind Server-Side Rendering (SSR), +SEO-Optimierung und Performance entscheidend. Vier Frameworks wurden verglichen. + +\begin{table}[htbp] + \centering + \caption{Frontend-Framework-Vergleich} + \label{tab:frontend} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X X} + \toprule + \textbf{Kriterium} & \textbf{Next.js (React)} & \textbf{Nuxt (Vue)} & \textbf{SvelteKit} & \textbf{Angular} \\ + \midrule + SSR/SSG & Exzellent (ISR) & Sehr gut & Gut & Gut \\ + Ecosystem & Sehr groß & Groß & Wachsend & Groß \\ + TypeScript & Nativ & Nativ & Nativ & Nativ \\ + Bundle-Größe & Mittel & Mittel & Sehr klein & Groß \\ + SEO & Exzellent & Sehr gut & Gut & Mittel \\ + Komponentenbib. & Sehr viele & Viele & Wenige & Viele \\ + Lernkurve & Mittel & Niedrig & Niedrig & Hoch \\ + Arbeitsmarkt & Sehr groß & Groß & Klein & Groß \\ + E-Commerce-Eig. & Exzellent & Sehr gut & Gut & Mittel \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{Next.js (React)} ist der klare Favorit für E-Commerce: +\begin{itemize}[leftmargin=2em] + \item \textbf{Incremental Static Regeneration (ISR)} ermöglicht gecachte Produktseiten mit automatischer Aktualisierung + \item \textbf{Server Components} reduzieren die Bundle-Größe und verbessern die Ladezeit + \item \textbf{Image Optimization} ist eingebaut -- kritisch für Produktfotografie + \item Der \textbf{größte Arbeitsmarkt} vereinfacht die Teambildung +\end{itemize} + +\textbf{Nuxt (Vue)} ist eine starke Alternative mit einfacherer Lernkurve, besonders in Europa beliebt. + +\textbf{SvelteKit} liefert die kleinsten Bundle-Größen -- ideal für Mobile-First-Strategien -- +hat aber ein kleineres Ecosystem und weniger E-Commerce-spezifische Bibliotheken. + + +\subsection{Datenbanken} +\label{subsec:datenbanken} + +E-Commerce-Daten erfordern ACID-Konformität (Zahlungen, Bestellungen), flexible +Attributspeicherung (Produktvarianten) und performante Suchabfragen. + +\begin{table}[htbp] + \centering + \caption{Datenbank-Vergleich} + \label{tab:datenbanken} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X} + \toprule + \textbf{Kriterium} & \textbf{PostgreSQL} & \textbf{MySQL 8.x} & \textbf{MongoDB} \\ + \midrule + ACID-Konformität & Vollständig & Vollständig & Eingeschränkt \\ + JSON-Unterstützung & JSONB (indexiert) & JSON (eingeschränkt) & Nativ \\ + Volltextsuche & Eingebaut & Eingebaut & Eingebaut \\ + Relationale Integrität & Exzellent & Gut & Keine (FK) \\ + Skalierbarkeit & Vertikal + Read-Replicas & Vertikal + Replikation & Horizontal (Sharding) \\ + Analytische Queries & Sehr performant & Mittel & Langsam \\ + Multi-Tenancy & Schemas möglich & Datenbanken & Collections \\ + E-Commerce-Eignung & Exzellent & Gut & Eingeschränkt \\ + ORM-Support & Prisma, TypeORM & Prisma, TypeORM & Mongoose \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{PostgreSQL} ist die empfohlene Wahl: +\begin{itemize}[leftmargin=2em] + \item JSONB-Spalten ermöglichen flexible Produktattribute bei voller Indexierung + \item ACID-Konformität sichert finanzielle Datenintegrität + \item 65--80\% kürzere Ausführungszeiten bei komplexen Filterabfragen gegenüber MongoDB + \item Alle führenden E-Commerce-Plattformen (Medusa, Saleor, Vendure) nutzen PostgreSQL +\end{itemize} + +\textbf{MongoDB} eignet sich \textit{nicht} als primäre Datenbank für E-Commerce aufgrund +fehlender referentieller Integrität und langsamerer analytischer Abfragen. Die Flexibilität +für Produktvarianten wird durch PostgreSQL JSONB gleichwertig abgedeckt. + + +\subsection{Suchmaschinen} +\label{subsec:suche} + +Eine leistungsfähige Produktsuche ist umsatzkritisch. Kunden, die die Suche nutzen, +konvertieren 2--3x häufiger als Browser. Vier Suchmaschinen wurden verglichen. + +\begin{table}[htbp] + \centering + \caption{Such-Engine-Vergleich} + \label{tab:suche} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X X} + \toprule + \textbf{Kriterium} & \textbf{Meilisearch} & \textbf{Elasticsearch} & \textbf{Algolia} & \textbf{Typesense} \\ + \midrule + Antwortzeit & $<$50ms & $>$100ms & $<$100ms & $<$100ms \\ + Setup & Einfach & Komplex & SaaS (einfach) & Einfach \\ + Self-Hosted & Ja & Ja & Nein (SaaS) & Ja \\ + Kosten & Kostenlos (OSS) & Kostenlos (OSS) & Teuer & Günstig \\ + Tippfehler-Tol. & Ja (Standard) & Konfigurierbar & Ja & Ja \\ + Facettierung & Ja & Ja (mächtig) & Ja & Ja \\ + Mehrsprachigkeit & Gut & Sehr gut & Sehr gut & Gut \\ + Eignung & Ideal für E-Com. & Enterprise & Premium & Gute Alternative \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{Meilisearch} ist die Empfehlung für den Start: +In Rust geschrieben, liefert es Antwortzeiten unter 50ms mit eingebauter Tippfehlertoleranz. +Self-Hosted und kostenlos, mit einfacher REST-API. Für Enterprise-Szenarien mit +10M+ Produkten kann später auf Elasticsearch gewechselt werden. + + +\subsection{Zahlungsanbieter} +\label{subsec:zahlung} + +Für weltweiten Einsatz muss das System mehrere Zahlungsanbieter unterstützen, +da regionale Präferenzen stark variieren (SEPA in EU, Alipay in Asien, ACH in USA). + +\begin{table}[htbp] + \centering + \caption{Payment-Provider-Vergleich} + \label{tab:zahlung} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X X} + \toprule + \textbf{Kriterium} & \textbf{Stripe} & \textbf{Mollie} & \textbf{Adyen} & \textbf{PayPal} \\ + \midrule + Länder & 195+ & EU-fokussiert & 187 & Weltweit \\ + Zahlungsmethoden & Sehr viele & EU-Methoden & 250+ & PayPal + Karten \\ + B2B (Rechnung) & Stripe Billing & Klarna, SEPA & Ja & Nein \\ + API-Qualität & Exzellent & Sehr gut & Gut & Mittel \\ + PCI-Compliance & SAQ-A & SAQ-A & SAQ-A & SAQ-A \\ + Gebühren (EU) & 1,5\% + 0,25\euro{} & 1,2--2,9\% & Interchange++ & 1,5--3,5\% \\ + Marktplatz-Support & Connect & -- & for Platforms & -- \\ + Eignung & Primär & EU-Ergänzung & Enterprise & Ergänzung \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{Empfehlung:} Stripe als primärer Provider (beste API, weltweite Abdeckung), +Mollie als Ergänzung für europäische Zahlungsmethoden (iDEAL, Bancontact, EPS, Giropay). +Für B2B-Kauf auf Rechnung: Stripe Billing oder Klarna B2B über Mollie. + +\textbf{Wichtig:} Keine eigene Zahlungsabwicklung implementieren -- die PCI-DSS-Anforderungen +sind zu aufwändig. Stattdessen Tokenisierung über den jeweiligen Provider nutzen (SAQ-A Level). + + +\subsection{Infrastruktur \& Deployment} +\label{subsec:infrastruktur} + +\begin{table}[htbp] + \centering + \caption{Infrastruktur-Vergleich} + \label{tab:infrastruktur} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X X} + \toprule + \textbf{Kriterium} & \textbf{Hetzner} & \textbf{DigitalOcean} & \textbf{AWS} & \textbf{GCP} \\ + \midrule + Kosten & Sehr günstig & Günstig & Mittel--Hoch & Mittel \\ + EU-Rechenzentren & Ja (DE, FI) & Ja & Ja & Ja \\ + DSGVO & Exzellent (DE) & Gut & Gut & Gut \\ + Managed Services & Begrenzt & Mittel & Sehr viele & Viele \\ + Skalierbarkeit & Manuell & Gut & Exzellent & Exzellent \\ + Kubernetes & Nein & Ja (DOKS) & Ja (EKS) & Ja (GKE) \\ + Eignung Start & MVP/Start & Wachstum & Enterprise & Enterprise \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{Empfohlener Deployment-Stack:} +\begin{itemize}[leftmargin=2em] + \item \textbf{Containerisierung:} Docker + Docker Compose (Standard für alle Umgebungen) + \item \textbf{CI/CD:} GitHub Actions (automatisierte Tests, Linting, Deployment) + \item \textbf{Phase 1:} Hetzner Cloud oder DigitalOcean (kosteneffizient, EU-Rechenzentren) + \item \textbf{Phase 2+:} Migration zu AWS ECS oder Kubernetes bei Bedarf + \item \textbf{CDN:} Cloudflare (kostenloser Tier, DDoS-Schutz, globale Edge-Server) + \item \textbf{Dateispeicher:} S3-kompatibel (MinIO self-hosted oder AWS S3) +\end{itemize} + + +% ============================================================================= +% KAPITEL 3: EMPFOHLENER TECHNOLOGIE-STACK +% ============================================================================= +\newpage +\section{Empfohlener Technologie-Stack} +\label{sec:stack} + +\subsection{Gewichtete Entscheidungsmatrix} + +Vier Stack-Kombinationen wurden nach neun Kriterien bewertet (Skala 1--10). +Die Gewichtung reflektiert die Prioritäten des Projekts: schnelle Markteinführung, +B2B-Fähigkeit und weltweite Einsetzbarkeit. + +\begin{landscape} +\begin{table}[htbp] + \centering + \caption{Gewichtete Entscheidungsmatrix -- Technologie-Stacks} + \label{tab:matrix} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\linewidth}{l C{1.2cm} X X X X} + \toprule + \textbf{Kriterium} & \textbf{Gew.} & + \textbf{Stack 1: NestJS + Next.js + PG} & + \textbf{Stack 2: FastAPI + React + PG} & + \textbf{Stack 3: Nuxt + Node + Mongo} & + \textbf{Stack 4: Go + React + PG} \\ + \midrule + Time-to-Market & 20\% & 9 \quad (1,80) & 7 \quad (1,40) & 8 \quad (1,60) & 5 \quad (1,00) \\ + TypeScript-Durchgäng. & 15\% & 10 \quad (1,50) & 5 \quad (0,75) & 8 \quad (1,20) & 4 \quad (0,60) \\ + Ecosystem \& Pakete & 15\% & 9 \quad (1,35) & 8 \quad (1,20) & 7 \quad (1,05) & 6 \quad (0,90) \\ + Perform. \& Skalierb. & 15\% & 7 \quad (1,05) & 7 \quad (1,05) & 6 \quad (0,90) & 10 \quad (1,50) \\ + B2B-Eignung & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 6 \quad (0,60) & 7 \quad (0,70) \\ + Entwickler-Verfügb. & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 7 \quad (0,70) & 5 \quad (0,50) \\ + AI/ML-Integration & 5\% & 6 \quad (0,30) & 10 \quad (0,50) & 5 \quad (0,25) & 6 \quad (0,30) \\ + Community \& Support & 5\% & 9 \quad (0,45) & 8 \quad (0,40) & 7 \quad (0,35) & 6 \quad (0,30) \\ + Wartbarkeit & 5\% & 8 \quad (0,40) & 7 \quad (0,35) & 7 \quad (0,35) & 8 \quad (0,40) \\ + \midrule + \textbf{Gesamtpunktzahl} & \textbf{100\%} & + \cellcolor{stackhighlight}\textbf{8,65} & + \textbf{7,25} & + \textbf{7,00} & + \textbf{6,20} \\ + \bottomrule + \end{tabularx} +\end{table} +\end{landscape} + + +\subsection{Empfehlung: Stack 1} + +\begin{center} +\colorbox{stackhighlight}{% + \parbox{0.9\textwidth}{% + \centering\large\bfseries + NestJS + Next.js + PostgreSQL + Redis + Meilisearch + Stripe/Mollie + }% +} +\end{center} + +\vspace{0.5em} + +\textbf{Begründung:} +\begin{enumerate}[leftmargin=2em] + \item \textbf{Eine Sprache (TypeScript)} über den gesamten Stack -- Backend, Frontend, Admin. + Kein Kontextwechsel, gemeinsame Typdefinitionen, Code-Sharing zwischen Schichten. + \item \textbf{NestJS} liefert Enterprise-Architektur (Dependency Injection, Module, Guards, + Interceptors) -- ideal für komplexe B2B-Geschäftslogik wie Genehmigungsworkflows + und kundenspezifische Preisgestaltung. + \item \textbf{Next.js} bietet SSR, ISR und Server Components für optimale SEO und + Performance -- kritisch für Produktseiten und internationale Reichweite. + \item \textbf{Größtes Ecosystem} und Arbeitsmarkt -- einfachere Teambildung und + schnellere Problemlösung durch Community-Support. + \item \textbf{Direkte Referenzarchitekturen}: Medusa.js (Node.js/TypeScript) und + Vendure (NestJS/TypeScript) als bewährte Vorbilder. +\end{enumerate} + + +\subsection{Detaillierter Stack-Überblick} + +\begin{table}[htbp] + \centering + \caption{Detaillierter Technologie-Stack} + \label{tab:stackdetail} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l l l X} + \toprule + \textbf{Schicht} & \textbf{Technologie} & \textbf{Version} & \textbf{Bemerkung} \\ + \midrule + Backend & NestJS + TypeScript & 10.x+ & Modulare Architektur, DI \\ + Frontend (Shop) & Next.js + React & 15.x+ & App Router, Server Components \\ + Frontend (Admin) & Next.js + React & 15.x+ & Separates Deployment \\ + ORM & Prisma & 6.x+ & Type-safe Database Access \\ + Datenbank & PostgreSQL & 16+ & JSONB für flexible Attribute \\ + Cache & Redis & 7+ & Sessions, Cart, Rate-Limiting \\ + Suche & Meilisearch & 1.x+ & Produkt- und Inhaltssuche \\ + Zahlungen & Stripe + Mollie & -- & Stripe primär, Mollie für EU \\ + Job-Queue & BullMQ & 5.x+ & E-Mails, Importe, Exporte \\ + Dateispeicher & S3-kompatibel & -- & MinIO oder AWS S3 \\ + Deployment & Docker Compose & -- & Kubernetes optional später \\ + CI/CD & GitHub Actions & -- & Automatisierte Tests + Deploy \\ + CDN & Cloudflare & -- & Edge-Caching, DDoS-Schutz \\ + Validierung & Zod & 3.x+ & TypeScript-native Validierung \\ + Testing & Jest + Playwright & -- & Unit-, Integration-, E2E-Tests \\ + \bottomrule + \end{tabularx} +\end{table} + + +% ============================================================================= +% KAPITEL 4: FEATURE-ANALYSE +% ============================================================================= +\newpage +\section{Feature-Analyse} +\label{sec:features} + +Dieses Kapitel listet alle Features nach Priorität geordnet. Jede Kategorie enthält +konkrete Einzelfeatures mit Zuordnung zu den Systemkomponenten (Backend, Frontend, Admin). + +% --------------------------------------------------------------------------- +\subsection{Pflicht-Features (\must)} +\label{subsec:must} + +Die folgenden 13 Feature-Kategorien sind für ein funktionsfähiges E-Commerce-System +unabdingbar. Ohne sie kann kein Verkauf stattfinden oder das System entspricht nicht +den gesetzlichen Anforderungen. + +\begin{longtable}{c l l c} + \caption{Pflicht-Features -- Übersicht} \label{tab:must} \\ + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endfirsthead + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endhead + \bottomrule + \endfoot + P01 & Produktverwaltung & Backend + Admin & Hoch \\ + P02 & Benutzer \& Authentifizierung & Backend + Frontend & Mittel \\ + P03 & Warenkorb \& Checkout & Alle & Hoch \\ + P04 & Bestellverwaltung & Backend + Admin & Hoch \\ + P05 & Zahlungsabwicklung & Backend + Frontend & Hoch \\ + P06 & Versand \& Lieferung & Backend + Admin & Mittel \\ + P07 & Steuerberechnung & Backend & Hoch \\ + P08 & Sicherheit \& DSGVO & Alle & Hoch \\ + P09 & Produktsuche & Backend + Frontend & Mittel \\ + P10 & Responsives Design & Frontend & Mittel \\ + P11 & Mehrsprachigkeit (i18n) & Alle & Mittel \\ + P12 & Mehrwährungsfähigkeit & Backend + Frontend & Mittel \\ + P13 & Admin-Panel & Admin & Hoch \\ +\end{longtable} + + +\subsubsection{P01 -- Produktverwaltung} + +Grundlage jedes E-Commerce-Systems. Ohne Produkte kein Verkauf. + +\begin{itemize}[leftmargin=2em] + \item Produktanlage mit Titel, Beschreibung (Rich Text), SKU, EAN/GTIN + \item Varianten-Management (Größe, Farbe, Material) mit eigenen SKUs und Preisen + \item Digitale und physische Produkte unterscheiden + \item Produktbilder mit Galerie, Zoom und Alt-Texten + \item Hierarchische Kategorien und Tags + \item Produktattribute (filterbar): Gewicht, Maße, Material, Marke + \item Lagerbestandsverwaltung: Bestand pro Variante, Reservierung bei Checkout + \item Produkt-Status: Entwurf, Aktiv, Archiviert + \item Massenimport/-export (CSV/JSON) + \item B2B: Kundenspezifische Produktsichtbarkeit (Katalogbeschränkung) +\end{itemize} + + +\subsubsection{P02 -- Benutzer \& Authentifizierung} + +Erforderlich für Bestellhistorie, gespeicherte Adressen und Personalisierung. + +\begin{itemize}[leftmargin=2em] + \item E-Mail/Passwort-Registrierung mit E-Mail-Verifizierung + \item Passwort-Zurücksetzen (tokenbasiert, zeitlich begrenzt) + \item Optionaler Social Login (Google, Apple) + \item Kundenprofil: Name, Adressen (Rechnung/Lieferung), Telefon + \item B2B: Firmenkonten mit Mitarbeiterverwaltung und Rollenkonzept + \item Gastbestellung (ohne Registrierung) + \item Session-Management und sichere Token-Verwaltung (JWT + Refresh-Tokens) + \item Rate-Limiting auf Login-Versuche (Brute-Force-Schutz) + \item Multi-Faktor-Authentifizierung (MFA) für Admin-Zugänge +\end{itemize} + + +\subsubsection{P03 -- Warenkorb \& Checkout} + +Der kritischste Conversion-Pfad. Jeder Reibungspunkt kostet Umsatz. + +\begin{itemize}[leftmargin=2em] + \item Warenkorb: Hinzufügen, Entfernen, Mengenänderung + \item Persistenter Warenkorb (Session + Datenbank für eingeloggte Nutzer) + \item Warenkorb-Zusammenführung bei Login (Gast-Cart $\rightarrow$ User-Cart) + \item Mehrstufiger oder Single-Page-Checkout + \item Rechnungs-/Lieferadresse (getrennt oder identisch) + \item Versandmethoden-Auswahl mit Echtzeitpreisen + \item Zahlungsmethoden-Auswahl + \item Gutscheincode-Eingabe + \item Bestellübersicht vor Abschluss + \item B2B: Bestellnummer (PO-Number) eingeben, Genehmigungsworkflow + \item Warenkorbabbruch-Tracking für spätere Wiederansprache +\end{itemize} + + +\subsubsection{P04 -- Bestellverwaltung} + +Kerngeschäftsdatensatz. Rechtlich erforderliche Aufbewahrung der Bestellhistorie. + +\begin{itemize}[leftmargin=2em] + \item Automatische Bestellnummer-Generierung + \item Status-Workflow: Ausstehend $\rightarrow$ Bestätigt $\rightarrow$ In Bearbeitung $\rightarrow$ Versendet $\rightarrow$ Zugestellt + \item Kundenseitige Statusanzeige mit Sendungsverfolgung + \item Admin: Bestellliste mit Filter, Suche, Sortierung + \item Admin: Bestelldetails, manuelle Statusänderung + \item Nachbestellung aus Bestellhistorie (Re-Order) + \item B2B: Erweiterte Status (Genehmigung ausstehend, Freigegeben, Gesperrt) + \item Rechnungserstellung (PDF) pro Bestellung + \item Bestellnotizen (intern und kundensichtbar) +\end{itemize} + + +\subsubsection{P05 -- Zahlungsabwicklung} + +Unterstützung mehrerer Zahlungsmethoden ist für weltweiten Einsatz unerlässlich. + +\begin{itemize}[leftmargin=2em] + \item Stripe-Integration: Kreditkarte, SEPA, Apple Pay, Google Pay + \item Mollie-Integration: iDEAL, Bancontact, EPS, Giropay, Klarna + \item PayPal als optionaler dritter Provider + \item Provider-Abstraktion: einheitliches Interface für alle Zahlungsanbieter + \item Tokenisierung (keine Kartendaten im System speichern) + \item 3D Secure 2.0 für Kreditkartenzahlungen + \item Webhook-Verarbeitung für asynchrone Zahlungsbestätigungen + \item Teil- und Vollrückerstattungen + \item B2B: Kauf auf Rechnung (Net 30/60/90), SEPA-Lastschrift + \item Mehrwährungsfähige Zahlungen +\end{itemize} + + +\subsubsection{P06 -- Versand \& Lieferung} + +Verschiedene Produkte, Gewichte und Zielorte erfordern unterschiedliche Versandoptionen. + +\begin{itemize}[leftmargin=2em] + \item Mehrere Versanddienstleister (DHL, DPD, UPS, FedEx, lokale Carrier) + \item Echtzeit-Versandkostenberechnung oder feste Versandkostentabellen + \item Adressvalidierung (länderspezifisch) + \item Versandetikett-Generierung + \item Sendungsverfolgungsnummern mit Carrier-Tracking-Links + \item Kostenloser Versand ab Bestellwert (konfigurierbar) + \item B2B: Speditionsversand für Großbestellungen + \item Internationale Versandregeln und Zolldeklarationen +\end{itemize} + + +\subsubsection{P07 -- Steuerberechnung} + +Gesetzliche Pflicht. Fehlerhafte Steuerberechnung führt zu Bußgeldern. + +\begin{itemize}[leftmargin=2em] + \item Automatische MwSt-Berechnung nach Kundenstandort + \item EU-MwSt: 15--27\% je nach Land, OSS-Regelung für digitale Güter + \item US Sales Tax: Bundesstaat- und City-Level (2000+ Jurisdiktionen) + \item UK VAT: 20\% Standard nach Brexit + \item Steuersätze pro Produktkategorie (Normalsatz, ermäßigt, befreit) + \item B2B: Reverse-Charge-Verfahren bei gültiger USt-IdNr + \item USt-IdNr-Validierung über VIES (EU) + \item Steuerberichte für Buchhaltung (Export CSV/PDF) + \item Integration mit TaxJar oder Avalara für automatisierte Steuerberechnung +\end{itemize} + + +\subsubsection{P08 -- Sicherheit \& DSGVO} + +Nicht verhandelbar. DSGVO-Verstöße: bis zu 20 Mio. EUR oder 4\% des Jahresumsatzes. + +\begin{itemize}[leftmargin=2em] + \item HTTPS/TLS 1.3 für gesamte Kommunikation + \item Passwort-Hashing mit bcrypt oder Argon2 + \item Verschlüsselung sensibler Daten (PII) in der Datenbank + \item DSGVO: Einwilligungsmanagement, Cookie-Banner, Datenschutzerklärung + \item Recht auf Löschung (Konto- und Datenlöschung auf Anfrage) + \item Datenportabilität (Export persönlicher Daten als JSON/CSV) + \item Audit-Logging aller Admin-Aktionen + \item CORS, CSP, HSTS und weitere Security-Header + \item Rate-Limiting und DDoS-Schutz + \item Regelmäßige Dependency-Updates (Sicherheitspatches) +\end{itemize} + + +\subsubsection{P09 -- Produktsuche} + +Kunden erwarten schnelle, relevante Suchergebnisse. + +\begin{itemize}[leftmargin=2em] + \item Volltextsuche über Produktnamen, Beschreibungen, SKUs + \item Autocomplete/Suchvorschläge während der Eingabe + \item Tippfehlertoleranz (Fuzzy-Matching) + \item Antwortzeit unter 200ms + \item Ergebnis-Paginierung + \item B2B: Suche nach SKU, Artikelnummer, interner Bezeichnung + \item Indexierung über Meilisearch mit automatischer Synchronisation +\end{itemize} + + +\subsubsection{P10 -- Responsives Design} + +Über 50\% des E-Commerce-Traffics kommt von Mobilgeräten. + +\begin{itemize}[leftmargin=2em] + \item Mobile-First responsive Design + \item Touch-optimierte Buttons und Interaktionen + \item Lazy Loading für Bilder + \item Optimierte Ladezeit auf 3G/4G-Verbindungen ($<$3 Sekunden) + \item Mobile-Wallet-Support (Apple Pay, Google Pay) + \item Testen auf verschiedenen Geräten und Bildschirmgrößen +\end{itemize} + + +\subsubsection{P11 -- Mehrsprachigkeit (i18n)} + +60\% der Onlinekäufer kaufen selten auf englischsprachigen Seiten. +13\% höhere Conversion bei muttersprachlicher Darstellung. + +\begin{itemize}[leftmargin=2em] + \item UI-Lokalisierung: alle Texte, Fehlermeldungen, E-Mails + \item Produktbeschreibungen in mehreren Sprachen + \item Spracherkennung (Accept-Language Header + GeoIP) + \item Sprachumschalter ohne Session-Verlust + \item URL-Struktur: \texttt{/de/produkte}, \texttt{/en/products}, \texttt{/fr/produits} + \item RTL-Unterstützung für Arabisch + \item i18next oder react-intl als Frontend-Bibliothek + \item Anbindung an Übersetzungsmanagement-Plattform (Crowdin, Lokalise) +\end{itemize} + + +\subsubsection{P12 -- Mehrwährungsfähigkeit} + +Kunden erwarten Preise in ihrer lokalen Währung. + +\begin{itemize}[leftmargin=2em] + \item Automatische Währungserkennung (GeoIP-basiert) + \item Manueller Währungsumschalter + \item Basiswährung + automatische Umrechnung über Echtzeit-Wechselkurse + \item Alternativ: feste Preise pro Währung (wichtig für B2B-Verträge) + \item Korrekte Währungsformatierung pro Locale (\$100.00 vs. 100,00~\euro{} vs. Â¥100) + \item Unterstützung gängiger Währungen: EUR, USD, GBP, CHF, JPY, CNY etc. + \item Währungsspezifische Zahlungsabwicklung +\end{itemize} + + +\subsubsection{P13 -- Admin-Panel} + +Zentrale Verwaltungsoberfläche für den täglichen Betrieb. + +\begin{itemize}[leftmargin=2em] + \item Dashboard: Umsatz, Bestellungen, Neukunden, Topseller + \item Produktverwaltung: CRUD, Massenbearbeitung, Bildupload + \item Bestellverwaltung: Liste, Detail, Statusänderung, Rückerstattung + \item Kundenverwaltung: Übersicht, Bestellhistorie, Notizen + \item Einstellungen: Shop-Name, Währung, Steuersätze, Versandoptionen + \item E-Mail-Template-Verwaltung + \item Benutzerrollen und Berechtigungen (Admin, Manager, Support) + \item Einfache Berichte (Umsatz nach Zeitraum, Kategorie, Kunde) + \item Export-Funktionen (CSV/PDF) +\end{itemize} + + +% --------------------------------------------------------------------------- +\subsection{Soll-Features (\should)} +\label{subsec:should} + +Diese 12 Feature-Kategorien verbessern das System erheblich und sind für ein +wettbewerbsfähiges Produkt wichtig. Sie sollten in Phase 2 implementiert werden. + +\begin{longtable}{c l l c} + \caption{Soll-Features -- Übersicht} \label{tab:should} \\ + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endfirsthead + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endhead + \bottomrule + \endfoot + S01 & B2B-Preisgestaltung & Backend + Admin & Hoch \\ + S02 & Erweiterte Suche \& Filter & Backend + Frontend & Mittel \\ + S03 & Aktionen \& Rabatte & Backend + Admin & Mittel \\ + S04 & Wunschliste & Backend + Frontend & Niedrig \\ + S05 & Bewertungen \& Rezensionen & Backend + Frontend & Mittel \\ + S06 & E-Mail-Benachrichtigungen & Backend & Mittel \\ + S07 & SEO-Optimierung & Frontend + Backend & Mittel \\ + S08 & Analytics \& Reporting & Admin + Backend & Mittel \\ + S09 & CMS / Blog & Alle & Mittel \\ + S10 & Multi-Warehouse-Inventar & Backend + Admin & Hoch \\ + S11 & Retouren \& RMA & Backend + Admin & Mittel \\ + S12 & REST/GraphQL API & Backend & Mittel \\ +\end{longtable} + + +\subsubsection{S01 -- B2B-Preisgestaltung} + +Kern-Feature für B2B. Ohne kundenspezifische Preise kein ernsthafter B2B-Betrieb. + +\begin{itemize}[leftmargin=2em] + \item Kundengruppen-basierte Preise (Händler, Großhändler, VIP) + \item Kundenspezifische Preislisten (vertraglich vereinbart) + \item Staffelpreise: 1--10 Stk. $\rightarrow$ 10~\euro{}, 11--50 Stk. $\rightarrow$ 9~\euro{}, 50+ Stk. $\rightarrow$ 8~\euro{} + \item Rabatte auf Kategorie- oder Produktebene pro Kundengruppe + \item Netto-Preisanzeige für B2B-Kunden, Brutto für B2C + \item Mindestbestellmenge (MOQ) pro Produkt konfigurierbar + \item Angebotsanfrage (RFQ) für individuelle Preisverhandlung +\end{itemize} + + +\subsubsection{S02 -- Erweiterte Suche \& Filter} + +Verbessert die Conversion um 10--20\% durch gezieltes Finden. + +\begin{itemize}[leftmargin=2em] + \item Facettierte Suche: Preis, Kategorie, Marke, Farbe, Größe, Bewertung + \item Dynamische Filteranzahl (zeigt verfügbare Produkte pro Filter) + \item Sortierung: Relevanz, Preis, Neuheit, Beliebtheit, Bewertung + \item Gespeicherte Suchen (besonders für B2B-Wiederholungskäufe) + \item Filterbare Produktlisten in Kategorieseiten +\end{itemize} + + +\subsubsection{S03 -- Aktionen \& Rabatte} + +Marketing-Werkzeug zur Umsatzsteigerung und Kundengewinnung. + +\begin{itemize}[leftmargin=2em] + \item Gutscheincodes: prozentual, absolut, kostenloser Versand + \item Einmal- oder Mehrfachverwendung, ablaufdatumbasiert + \item Automatische Kampagnen: Zeitraum, Kategorie, Mindestbestellwert + \item Warenkorb-Aktionen: \enquote{Kaufe 2, erhalte 3. gratis} + \item Bundle-Rabatte: Produktkombinationen günstiger + \item Treuestufen: Rabatt basierend auf Gesamtumsatz des Kunden +\end{itemize} + + +\subsubsection{S04 -- Wunschliste} + +Erhöht Wiederbesuchsrate. Kunden speichern Produkte für späteren Kauf. + +\begin{itemize}[leftmargin=2em] + \item Produkte zur Wunschliste hinzufügen/entfernen + \item Wunschliste teilen (URL-basiert) + \item Benachrichtigung bei Preissenkung oder Wiederverfügbarkeit + \item Produktvergleich (2--5 Produkte nebeneinander) +\end{itemize} + + +\subsubsection{S05 -- Bewertungen \& Rezensionen} + +Social Proof steigert Conversion. Bewertungen sind wertvoller SEO-Content. + +\begin{itemize}[leftmargin=2em] + \item 5-Sterne-Bewertung + Freitextrezension + \item Nur nach Kaufabschluss bewertbar (verifizierte Käufe) + \item Admin-Moderation vor Veröffentlichung + \item \enquote{Hilfreich}-Markierung durch andere Kunden + \item Durchschnittsbewertung auf Produktseite und in Suchergebnissen + \item Antwortfunktion für den Shopbetreiber +\end{itemize} + + +\subsubsection{S06 -- E-Mail-Benachrichtigungen} + +Reduziert Support-Anfragen und hält Kunden informiert. + +\begin{itemize}[leftmargin=2em] + \item Bestellbestätigung (sofort nach Bestellabschluss) + \item Zahlungsbestätigung + \item Versandbestätigung mit Tracking-Link + \item Zustellungsbenachrichtigung + \item Passwort-Zurücksetzen, Kontobestätigung + \item Optionale Warenkorbabbruch-E-Mail + \item Template-Engine mit Variablen (Bestellnummer, Kundenname, Produkte) + \item Anbindung an E-Mail-Service (SendGrid, AWS SES, Brevo) +\end{itemize} + + +\subsubsection{S07 -- SEO-Optimierung} + +Kritisch für organisches Wachstum. Produktseiten müssen in Suchmaschinen gefunden werden. + +\begin{itemize}[leftmargin=2em] + \item Individuelle Meta-Tags (Title, Description) pro Seite + \item Saubere URL-Struktur: \texttt{/produkte/rote-laufschuhe} + \item Automatische XML-Sitemap-Generierung + \item Structured Data / JSON-LD (Product, BreadcrumbList, Organization) + \item Canonical-Tags zur Vermeidung von Duplicate Content + \item Open Graph und Twitter Cards für Social Sharing + \item Bildoptimierung mit Alt-Texten und WebP-Format + \item hreflang-Tags für mehrsprachige Seiten +\end{itemize} + + +\subsubsection{S08 -- Analytics \& Reporting} + +Datenbasierte Entscheidungen für Sortiment, Preise und Marketing. + +\begin{itemize}[leftmargin=2em] + \item Umsatz-Dashboard: Tages-, Wochen-, Monatsumsatz, YoY-Vergleich + \item Top-Produkte, Kategorie-Performance + \item Kundenanalyse: Neukunden vs. Wiederkäufer, Customer Lifetime Value + \item Bestandsberichte: Slow-Mover, Out-of-Stock-Rate + \item Conversion-Funnel: Besucher $\rightarrow$ Warenkorb $\rightarrow$ Checkout $\rightarrow$ Kauf + \item Google Analytics 4 (GA4) Integration + \item Export in CSV/PDF für Buchhaltung und Management +\end{itemize} + + +\subsubsection{S09 -- CMS / Blog} + +Content-Marketing treibt organischen Traffic und baut Autorität auf. + +\begin{itemize}[leftmargin=2em] + \item Statische Seiten (Über uns, Kontakt, AGB, Datenschutz) + \item WYSIWYG-Editor für Seiteninhalt + \item Blog mit Kategorien, Tags, Autor, Veröffentlichungsdatum + \item Zeitgesteuerte Veröffentlichung (Scheduled Publishing) + \item Wiederverwendbare Content-Blöcke (Testimonials, Feature-Boxen) + \item SEO-Felder pro Seite/Beitrag +\end{itemize} + + +\subsubsection{S10 -- Multi-Warehouse-Inventar} + +Für skalierende Unternehmen mit mehreren Lagerstandorten. + +\begin{itemize}[leftmargin=2em] + \item Mehrere Lagerorte anlegen + \item Bestand pro Variante und Lagerort verwalten + \item Automatische Lagerort-Auswahl bei Bestellung (Nähe zum Kunden) + \item Lagerumzüge zwischen Standorten tracken + \item Verfügbarkeitsanzeige: verfügbar, reserviert, verkaufbar + \item Nachbestellpunkte und Bestandsalarme +\end{itemize} + + +\subsubsection{S11 -- Retouren \& RMA} + +Kunden erwarten einen einfachen Rückgabeprozess. Gute Retourenpolitik erhöht Conversion. + +\begin{itemize}[leftmargin=2em] + \item Retourenanfrage aus Bestellhistorie erstellen + \item RMA-Nummern-Generierung + \item Retourenetikett-Generierung + \item Rückgabefrist konfigurierbar (z.B. 30 Tage) + \item Teilretouren (einzelne Artikel einer Bestellung) + \item Rückerstattung oder Gutschrift nach Wareneingang + \item Zustandsbewertung zurückgesendeter Ware +\end{itemize} + + +\subsubsection{S12 -- REST/GraphQL API} + +Ermöglicht Mobile Apps, Drittanbieter-Integrationen und headless Betrieb. + +\begin{itemize}[leftmargin=2em] + \item REST API für alle Kernressourcen (Produkte, Bestellungen, Kunden, Cart) + \item OpenAPI/Swagger-Dokumentation (automatisch generiert) + \item Optional: GraphQL-Endpunkt für flexiblere Frontend-Abfragen + \item API-Versionierung (v1, v2) für Abwärtskompatibilität + \item API-Key-Authentifizierung und OAuth 2.0 + \item Rate-Limiting pro API-Key + \item Webhooks für Events (Bestellung erstellt, Zahlung bestätigt, Versand) + \item Webhook-Retry-Mechanismus und Logging +\end{itemize} + + +% --------------------------------------------------------------------------- +\subsection{Kann-Features (\can)} +\label{subsec:can} + +Diese 11 Feature-Kategorien sind Nice-to-have und sollten in Phase 3 oder +bedarfsgesteuert implementiert werden. Sie bieten Mehrwert, sind aber nicht +geschäftskritisch. + +\begin{longtable}{c l l c} + \caption{Kann-Features -- Übersicht} \label{tab:can} \\ + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endfirsthead + \toprule + \textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\ + \midrule + \endhead + \bottomrule + \endfoot + K01 & Treueprogramm / Bonuspunkte & Alle & Mittel \\ + K02 & Abonnements / Wiederkehrende Best. & Backend + Frontend & Hoch \\ + K03 & Marktplatz (Multi-Vendor) & Alle & Sehr hoch \\ + K04 & KI-gestützte Empfehlungen & Backend + Frontend & Hoch \\ + K05 & Live-Chat / Chatbot & Frontend & Mittel \\ + K06 & Social-Media-Integration & Frontend & Niedrig \\ + K07 & Geschenkkarten & Backend + Frontend & Mittel \\ + K08 & EDI / PunchOut (Enterprise) & Backend & Hoch \\ + K09 & A/B-Testing & Frontend + Backend & Mittel \\ + K10 & PWA-Support & Frontend & Mittel \\ + K11 & Multi-Tenant / Multi-Store & Alle & Sehr hoch \\ +\end{longtable} + + +\subsubsection{K01 -- Treueprogramm / Bonuspunkte} + +Steigert Customer Lifetime Value und Wiederkaufrate. + +\begin{itemize}[leftmargin=2em] + \item Punktesystem: 1 Punkt pro 1~\euro{} Umsatz + \item Punkte einlösen gegen Rabatte oder Gratisprodukte + \item Ablaufdatum für Punkte (konfigurierbar) + \item Mitgliedsstufen: Bronze, Silber, Gold mit steigenden Vorteilen + \item Empfehlungsprogramm: Belohnung für Weiterempfehlung +\end{itemize} + + +\subsubsection{K02 -- Abonnements / Wiederkehrende Bestellungen} + +Wiederkehrender Umsatz, Kundenkomfort bei Verbrauchsartikeln. + +\begin{itemize}[leftmargin=2em] + \item Abo-Produkte mit flexiblen Intervallen (wöchentlich, monatlich, quartalsweise) + \item Pausieren, Überspringen, Kündigen durch Kunden + \item Automatische Verlängerung und Zahlung + \item Erinnerung vor Verlängerung + \item Mengenänderung zwischen Zyklen +\end{itemize} + + +\subsubsection{K03 -- Marktplatz (Multi-Vendor)} + +Erweitert das Sortiment ohne eigenes Inventar. Erfordert erheblichen Zusatzaufwand. + +\begin{itemize}[leftmargin=2em] + \item Vendor-Registrierung und -Freischaltung + \item Vendor-Dashboard: eigene Produkte, Bestellungen, Umsatz + \item Provisionsmodell (konfigurierbar pro Vendor) + \item Admin-Genehmigung neuer Produkte + \item Vendor-Auszahlungsmanagement + \item Separate Vendor-Bewertungen +\end{itemize} + + +\subsubsection{K04 -- KI-gestützte Empfehlungen} + +Erhöht den durchschnittlichen Bestellwert durch personalisierte Vorschläge. + +\begin{itemize}[leftmargin=2em] + \item \enquote{Ähnliche Produkte} auf Produktseiten + \item \enquote{Häufig zusammen gekauft} im Warenkorb + \item Personalisierte Empfehlungen basierend auf Kauf- und Browsinghistorie + \item Collaborative Filtering oder Content-Based Algorithmen + \item Empfehlungen in E-Mails +\end{itemize} + + +\subsubsection{K05 -- Live-Chat / Chatbot} + +Echtzeit-Support verbessert Kundenzufriedenheit und reduziert Warenkorbabbrüche. + +\begin{itemize}[leftmargin=2em] + \item Chat-Widget auf der Website + \item KI-Chatbot für häufige Fragen (FAQ, Bestellstatus) + \item Eskalation an menschlichen Mitarbeiter + \item Offline-Nachrichtenerfassung + \item Chat-Verlaufshistorie +\end{itemize} + + +\subsubsection{K06 -- Social-Media-Integration} + +Kostenloser Marketing-Kanal durch Social Sharing. + +\begin{itemize}[leftmargin=2em] + \item Social Login (Facebook, Google, Apple) + \item Produkt-Teilen auf Social Media + \item Instagram/TikTok Shopping-Integration + \item Social-Media-Pixel für Remarketing (Meta, TikTok) +\end{itemize} + + +\subsubsection{K07 -- Geschenkkarten} + +Zusätzliche Umsatzquelle und Geschenkoption. + +\begin{itemize}[leftmargin=2em] + \item Digitale Geschenkkarten mit festen oder individuellen Beträgen + \item E-Mail-Zustellung mit personalisierter Nachricht + \item Einlösung im Checkout + \item Restguthaben-Verwaltung + \item Optionales Ablaufdatum +\end{itemize} + + +\subsubsection{K08 -- EDI / PunchOut (Enterprise B2B)} + +Für Integration mit Großkunden-Beschaffungssystemen (SAP Ariba, Coupa). + +\begin{itemize}[leftmargin=2em] + \item EDI-Nachrichtenformate (X12, EDIFACT) empfangen und verarbeiten + \item PunchOut-Katalog: Produktkatalog über cXML bereitstellen + \item Automatische Bestellverarbeitung aus Procurement-Systemen + \item Authentifizierung gegenüber Einkaufssystem des Kunden +\end{itemize} + + +\subsubsection{K09 -- A/B-Testing} + +Datengesteuerte Optimierung von Conversion-Raten. + +\begin{itemize}[leftmargin=2em] + \item Test-Framework: Varianten von UI, Preisen, Content ausspielen + \item Traffic-Splitting zwischen Varianten + \item Statistische Auswertung (Signifikanzniveau) + \item Gewinner-Deklaration und automatisches Rollout +\end{itemize} + + +\subsubsection{K10 -- PWA-Support} + +App-ähnliche Erfahrung ohne App-Store-Installation. + +\begin{itemize}[leftmargin=2em] + \item Service Worker für Offline-Funktionalität + \item Install-Prompt (Manifest.json, App-Icon, Splashscreen) + \item Push-Notifications für Bestellstatus und Angebote + \item Cache-Strategien für häufig besuchte Seiten +\end{itemize} + + +\subsubsection{K11 -- Multi-Tenant / Multi-Store} + +Mehrere Shops/Marken aus einer Instanz betreiben. Hohe architektonische Komplexität. + +\begin{itemize}[leftmargin=2em] + \item Separate Stores mit eigenen Produkten, Preisen, Einstellungen + \item Datenisolierung pro Store (Kunden, Bestellungen) + \item Geteilte Ressourcen: Produktkatalog mit store-spezifischen Preisen + \item Ein Admin-Panel für alle Stores + \item Store-spezifische Domains, Währungen, Sprachen +\end{itemize} + + +% --------------------------------------------------------------------------- +\subsection{Nicht benötigte Features (\notneed)} +\label{subsec:notneed} + +Die folgenden Funktionen liegen außerhalb des Systemscopes. Sie werden besser +durch spezialisierte Drittanbieter abgedeckt und per API angebunden. + +\begin{table}[htbp] + \centering + \caption{Abgrenzung -- Nicht benötigte Features} + \label{tab:notneed} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X} + \toprule + \textbf{Kategorie} & \textbf{Begründung} & \textbf{Alternative (Integration)} \\ + \midrule + Eigene Buchhaltung / ERP & + Zu komplex, regulatorisch anspruchsvoll, + schnell veraltet. Besser als Integration. & + DATEV, sevDesk, lexoffice, Xero, NetSuite \\ + Vollständiges WMS & + Lagerverwaltung (Picking, Packing, Routenoptimierung) + ist hochspezialisiert. & + ShipHero, Fulfillmenttools, externe WMS per API \\ + Eigene Zahlungsabwicklung & + PCI-DSS Level 1 erfordert jährliche Audits + (\$50K--\$500K). Unverhältnismäßig. & + Stripe, Mollie, Adyen (Tokenisierung) \\ + E-Mail-Marketing-Plattform & + Spezialisierte Tools bieten Segmentierung, + Automation und Analytics auf Enterprise-Niveau. & + Mailchimp, Brevo (ex-Sendinblue), Klaviyo \\ + Social-Media-Management & + Nicht Kernaufgabe eines Shopsystems. + Separater Workflow und Tools. & + Buffer, Hootsuite, Later \\ + Vollständiges CRM & + Kundenbeziehungsmanagement umfasst + Sales-Pipeline, Ticketing, Anrufmanagement. & + HubSpot, Salesforce, Pipedrive \\ + \bottomrule + \end{tabularx} +\end{table} + +\textbf{Prinzip:} Das Shopsystem stellt für jede dieser Kategorien +Schnittstellen (REST API, Webhooks) bereit, über die Drittanbieter +angebunden werden. Es implementiert diese Funktionen nicht selbst. + + +% ============================================================================= +% KAPITEL 5: B2B-SPEZIFISCHE ANFORDERUNGEN +% ============================================================================= +\newpage +\section{B2B-spezifische Anforderungen} +\label{sec:b2b} + +Der gleichzeitige Support von B2C und B2B ist eine der größten Herausforderungen +des Systems. B2B-Kunden haben fundamental andere Anforderungen als Endverbraucher. + +\subsection{B2B vs. B2C -- Fundamentale Unterschiede} + +\begin{table}[htbp] + \centering + \caption{B2B vs. B2C -- Feature-Vergleich} + \label{tab:b2bvsb2c} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X} + \toprule + \textbf{Aspekt} & \textbf{B2C} & \textbf{B2B} & \textbf{Implementierung} \\ + \midrule + Preisgestaltung & + Einheitlich für alle Kunden & + Kundenspezifisch, vertraglich & + Preisgruppen-Engine, Preislisten \\ + Preisanzeige & + Brutto (inkl. MwSt) & + Netto (zzgl. MwSt) & + Toggle basierend auf Kontotyp \\ + Bestellprozess & + Sofortkauf, keine Genehmigung & + Genehmigungspflichtig ab Betrag X & + Workflow-Engine mit Eskalation \\ + Zahlung & + Sofort (Karte, PayPal) & + Auf Rechnung (Net 30/60/90) & + Kreditlimit-Prüfung, Invoicing \\ + Konto & + Einzelperson & + Firma mit mehreren Mitarbeitern & + Company-Account-Hierarchie \\ + Bestellmenge & + Einzelstücke & + Großmengen, Paletten & + MOQ, Staffelpreise, Schnellbestellung \\ + Katalog & + Gesamtes Sortiment & + Kundenspezifischer Katalog & + Katalogzuweisung pro Kundengruppe \\ + Kaufentscheidung & + Emotional, schnell & + Rational, mehrere Entscheider & + Angebotssystem, Verhandlung \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{Firmenkonten \& Rollenmanagement} + +\begin{itemize}[leftmargin=2em] + \item \textbf{Company Account:} Übergeordnetes Konto mit Firmendaten + (Name, USt-IdNr, Adresse, Zahlungsbedingungen) + \item \textbf{Mitarbeiter-Accounts:} Zugeordnet zum Company Account, mit individuellen Rollen: + \begin{description}[leftmargin=2em] + \item[Einkäufer] Kann bestellen bis zu einem Betragslimit + \item[Genehmiger] Kann Bestellungen freigeben + \item[Admin] Kann Mitarbeiter verwalten, Rollen zuweisen + \item[Finanz] Kann Rechnungen einsehen und Zahlungen verwalten + \item[Viewer] Nur Lesezugriff auf Bestellhistorie und Katalog + \end{description} + \item \textbf{Einladungsworkflow:} Admin lädt Mitarbeiter per E-Mail ein + \item \textbf{Budgetlimits:} Pro Mitarbeiter oder Abteilung konfigurierbar +\end{itemize} + + +\subsection{Genehmigungsworkflows} + +\begin{enumerate}[leftmargin=2em] + \item Einkäufer legt Bestellung an und übermittelt zur Genehmigung + \item System prüft: Bestellwert $>$ Limit $\rightarrow$ Genehmigung erforderlich + \item Genehmiger erhält E-Mail-Benachrichtigung + \item Genehmiger: Freigeben, Ablehnen oder Kommentieren + \item Bei Mehrstufigkeit: Eskalation an nächste Ebene + \item Nach Freigabe: automatische Zahlungsauslösung und Bestellverarbeitung +\end{enumerate} + + +\subsection{Zahlungsbedingungen} + +\begin{itemize}[leftmargin=2em] + \item \textbf{Kauf auf Rechnung:} Net 30, Net 60, Net 90 (pro Kunde konfigurierbar) + \item \textbf{Kreditlimit:} Maximaler offener Rechnungsbetrag pro Firma + \item \textbf{SEPA-Lastschrift:} Einmaliges Mandat, wiederkehrende Einzüge + \item \textbf{Vorkasse:} Überweisung mit automatischer Zuordnung (IBAN-Referenz) + \item \textbf{Skonto:} 2\% Rabatt bei Zahlung innerhalb von 10 Tagen + \item \textbf{Zahlungserinnerungen:} Automatisiert bei Fälligkeit und Überfälligkeit +\end{itemize} + + +\subsection{Schnellbestellung \& CSV-Upload} + +B2B-Kunden kennen ihre Artikelnummern und wollen schnell große Bestellungen aufgeben: + +\begin{itemize}[leftmargin=2em] + \item \textbf{Quick-Order-Formular:} SKU + Menge eingeben, direkt in den Warenkorb + \item \textbf{CSV-Upload:} Bestellliste hochladen (SKU, Menge) für Massenbestellungen + \item \textbf{Bestellvorlagen:} Wiederkehrende Bestellungen als Template speichern + \item \textbf{Nachbestellung:} Ein-Klick-Wiederholung vergangener Bestellungen +\end{itemize} + + +% ============================================================================= +% KAPITEL 6: INTERNATIONALISIERUNG +% ============================================================================= +\newpage +\section{Internationalisierung} +\label{sec:i18n} + +Für weltweiten Einsatz muss das System von Beginn an auf Internationalisierung +ausgelegt sein. Nachträgliches Hinzufügen ist um ein Vielfaches aufwändiger. + +\subsection{Übersicht der Anforderungen} + +\begin{table}[htbp] + \centering + \caption{Internationalisierungsanforderungen} + \label{tab:i18n} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X} + \toprule + \textbf{Aspekt} & \textbf{Ansatz} & \textbf{Technologie} \\ + \midrule + Übersetzungen & + Key-Value mit Pluralisierung und ICU Message Format & + i18next / next-intl \\ + Währungen & + Echtzeit-Kurse + manuell gepflegte Preise pro Währung & + Open Exchange Rates API \\ + Datumsformate & + Locale-basierte Formatierung & + Intl API (ECMAScript) \\ + Zahlenformate & + Locale-basiert (1.000,50 vs. 1,000.50) & + Intl.NumberFormat \\ + Adressen & + Länderspezifische Adressfelder und Validierung & + Google Address Validation API \\ + Rechtstexte & + Separate AGB, Widerrufsbelehrung, Datenschutz pro Land & + CMS mit Sprachzuordnung \\ + Maßeinheiten & + Metrisch (EU) vs. Imperial (US, UK) & + Konfiguration pro Region \\ + RTL-Support & + Arabisch, Hebräisch: Right-to-Left Layout & + CSS logical properties, dir-Attribut \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{Mehrsprachigkeit (i18n)} + +\textbf{URL-Strategie:} Sprachpräfix im Pfad (empfohlen für SEO): +\begin{lstlisting} +example.com/de/produkte/rote-schuhe +example.com/en/products/red-shoes +example.com/fr/produits/chaussures-rouges +\end{lstlisting} + +\textbf{Vorteile:} Eine Domain, zentralisierte Domain-Autorität, +einfachere Verwaltung als Subdomains. + +\textbf{Spracherkennung (Priorität):} +\begin{enumerate}[leftmargin=2em] + \item URL-Pfad (\texttt{/de/...}) + \item Gespeicherte Benutzerpräferenz (Cookie/Account) + \item Accept-Language Header des Browsers + \item GeoIP-basierter Fallback +\end{enumerate} + +\textbf{Übersetzungsmanagement:} +\begin{itemize}[leftmargin=2em] + \item Entwickler pflegen Schlüssel in JSON-Dateien (Standardsprache: Englisch) + \item Professionelle Übersetzer arbeiten über Plattform (Crowdin, Lokalise) + \item Automatischer Pull der Übersetzungen ins Repository via CI/CD + \item Produktbeschreibungen: mehrsprachige Felder in der Datenbank +\end{itemize} + + +\subsection{Mehrwährungsfähigkeit} + +\textbf{Zwei Strategien (beide unterstützen):} + +\begin{description}[leftmargin=2em] + \item[Automatische Umrechnung] Basiswährung (EUR) + Echtzeit-Wechselkurse. + Gut für B2C mit vielen Märkten. Preise können zwischen Seitenbesuchen schwanken. + \item[Feste Preise pro Währung] Manuell gepflegte Preise in jeder Währung. + Wichtig für B2B-Verträge und Preiskonsistenz. Höherer Pflegeaufwand. +\end{description} + +\textbf{Währungsformatierung} muss locale-korrekt sein: +\begin{itemize}[leftmargin=2em] + \item USA: \$1,000.00 + \item Deutschland: 1.000,00~\euro{} + \item Japan: Â¥1,000 (keine Dezimalstellen) + \item Schweiz: CHF 1'000.00 +\end{itemize} + + +\subsection{Regionale Rechtsanforderungen} + +\begin{itemize}[leftmargin=2em] + \item \textbf{EU:} DSGVO, Widerrufsbelehrung, Preisangabenverordnung (Grundpreis), + Impressumspflicht, Cookie-Consent + \item \textbf{Deutschland:} Buttonlösung (\enquote{Zahlungspflichtig bestellen}), + Fernabsatzgesetz, Verpackungsgesetz + \item \textbf{UK:} UK GDPR (post-Brexit), Consumer Rights Act, VAT-Regeln + \item \textbf{USA:} CCPA/CPRA (Kalifornien), CAN-SPAM Act, keine einheitliche Datenschutzregelung + \item \textbf{Weitere:} LGPD (Brasilien), PIPA (Südkorea), APPI (Japan) +\end{itemize} + + +% ============================================================================= +% KAPITEL 7: SICHERHEIT & COMPLIANCE +% ============================================================================= +\newpage +\section{Sicherheit \& Compliance} +\label{sec:sicherheit} + +\subsection{DSGVO / GDPR} + +Die DSGVO gilt für alle Unternehmen, die personenbezogene Daten von EU-Bürgern +verarbeiten -- unabhängig vom Firmensitz. + +\textbf{Kernprinzipien und ihre Umsetzung im System:} + +\begin{itemize}[leftmargin=2em] + \item \textbf{Datenminimierung:} Nur erforderliche Daten erheben. + Keine Pflichtfelder für nicht-benötigte Informationen. + \item \textbf{Zweckbindung:} Daten nur für den angegebenen Zweck verwenden. + Klare Trennung von Bestelldaten und Marketingdaten. + \item \textbf{Einwilligungsmanagement:} Explizites Opt-in für Newsletter, + Cookie-Tracking, personalisierte Werbung. Kein Pre-Checked-Checkbox. + \item \textbf{Recht auf Löschung:} Kundenkonto vollständig löschbar. + Bestelldaten anonymisieren (gesetzliche Aufbewahrungsfristen beachten). + \item \textbf{Datenportabilität:} Export aller persönlichen Daten als JSON/CSV. + \item \textbf{Auftragsverarbeitung:} DPA (Data Processing Agreement) + mit allen Drittanbietern (Stripe, Meilisearch Cloud, etc.). + \item \textbf{Datenschutzerklärung:} Detailliert, verständlich, pro Sprache/Land. +\end{itemize} + + +\subsection{PCI-DSS Compliance} + +Da keine Kartendaten im System gespeichert oder verarbeitet werden +(Tokenisierung über Stripe/Mollie), gilt \textbf{SAQ-A} -- das niedrigste +Compliance-Level: + +\begin{itemize}[leftmargin=2em] + \item Zahlungsformulare werden als iFrames der Payment-Provider eingebettet + \item Keine Kartendaten berühren das eigene Backend + \item TLS 1.2+ für alle Verbindungen + \item Regelmäßige Vulnerability-Scans +\end{itemize} + + +\subsection{OWASP Top 10 -- Maßnahmen} + +\begin{table}[htbp] + \centering + \caption{Sicherheitsmaßnahmen gegen OWASP Top 10} + \label{tab:owasp} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X} + \toprule + \textbf{Bedrohung} & \textbf{Maßnahme} & \textbf{Implementierung} \\ + \midrule + Injection & + Parameterisierte Queries, kein String-Concatenation & + Prisma ORM (prepared statements) \\ + Broken Auth & + Sichere Token-Verwaltung, MFA für Admin & + JWT + Refresh-Token, Passport.js \\ + XSS & + Output-Encoding, Content Security Policy & + React (auto-escaping), Helmet.js \\ + CSRF & + SameSite-Cookies, CSRF-Tokens & + NestJS CSRF-Guard \\ + SSRF & + URL-Validierung, Allowlist für externe Requests & + Input-Validierung mit Zod \\ + Security Misc. & + Security-Header, Dependency-Updates & + Helmet.js, Dependabot/Renovate \\ + Insecure Design & + Threat Modeling, Security Reviews & + Architektur-Review vor Deployment \\ + Broken Access & + RBAC, Ressourcen-basierte Autorisierung & + NestJS Guards + CASL-Bibliothek \\ + Crypto Failures & + Starke Hashing-Algorithmen, Verschlüsselung & + Argon2 (Passwörter), AES-256 (PII) \\ + Logging/Monitor. & + Zentrale Logs, Alerting bei Anomalien & + Winston + Loki oder CloudWatch \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{Authentifizierung \& Autorisierung} + +\begin{description}[leftmargin=2em] + \item[JWT + Refresh-Token] Access-Token (15 Min. Gültigkeit) + Refresh-Token + (7 Tage, in httpOnly-Cookie). Token-Rotation bei jedem Refresh. + \item[OAuth 2.0] Für API-Zugriff durch Drittanbieter. Authorization Code Flow + mit PKCE für öffentliche Clients. + \item[RBAC] Role-Based Access Control mit feingranularen Berechtigungen. + Rollen: Super-Admin, Shop-Admin, Support, B2B-Admin, B2B-Einkäufer, B2B-Genehmiger. + \item[MFA] Pflicht für Admin-Zugänge. Optional (empfohlen) für B2B-Genehmiger. + TOTP-basiert (Google Authenticator, Authy). +\end{description} + + +% ============================================================================= +% KAPITEL 8: OPEN-SOURCE-REFERENZARCHITEKTUREN +% ============================================================================= +\newpage +\section{Open-Source-Referenzarchitekturen} +\label{sec:referenz} + +Drei führende Open-Source-E-Commerce-Plattformen dienen als Referenz für +Architekturentscheidungen. Ziel ist nicht die Übernahme einer Plattform, +sondern das Lernen aus bewährten Mustern. + +\begin{table}[htbp] + \centering + \caption{Open-Source-Referenzplattformen im Vergleich} + \label{tab:referenz} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l X X X} + \toprule + \textbf{Kriterium} & \textbf{Medusa.js} & \textbf{Saleor} & \textbf{Vendure} \\ + \midrule + Sprache & + TypeScript (Node.js) & + Python (Django) & + TypeScript (NestJS) \\ + API & + REST (+ GraphQL geplant) & + GraphQL & + GraphQL \\ + Datenbank & + PostgreSQL & + PostgreSQL & + PostgreSQL / MySQL \\ + Architektur & + Modular (Plugin-System) & + Monolith (modular) & + Plugin-basiert \\ + Multi-Currency & + Ja (Multi-Region) & + Ja (sehr ausgereift) & + Ja (Plugin) \\ + B2B-Support & + Begrenzt (Custom) & + Begrenzt (Extension) & + Plugin möglich \\ + Admin-Panel & + Eigenes (React) & + Dashboard (React) & + Angular Admin UI \\ + GitHub-Stars & + $\sim$31K & + $\sim$21K & + $\sim$6K \\ + \midrule + \textbf{Stärken} & + Erweiterbarkeit, DX, + größte Community & + Multi-Channel, GraphQL, + i18n out-of-the-box & + Saubere NestJS-Architektur, + Type-Safety \\ + \textbf{Schwächen} & + Weniger Features als Saleor, + B2B braucht Custom-Code & + Python (anderer Stack), + kleinere Community & + Kleinste Community, + Angular-Admin \\ + \textbf{Relevanz} & + \textbf{Hoch} -- gleicher Stack & + Mittel -- Architektur-Referenz & + \textbf{Hoch} -- NestJS-Referenz \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{Learnings für unser System} + +\begin{description}[leftmargin=2em] + \item[Von Medusa.js lernen:] + Modulares Plugin-System, bei dem jedes Modul (Produkte, Bestellungen, Zahlungen) + unabhängig ersetzt werden kann. Multi-Region-Konzept für länderspezifische + Einstellungen (Währung, Steuern, Lager). + + \item[Von Saleor lernen:] + GraphQL-Schema-Design für E-Commerce. Ausgereifte Multi-Currency/Multi-Language-Implementierung. + Channel-basiertes Multi-Store-Konzept. + + \item[Von Vendure lernen:] + NestJS-spezifische Patterns: Dependency Injection für Service-Layer, + Custom Decorators für Autorisierung, Event-Bus für lose Kopplung. + State-Machine für Bestellstatus. +\end{description} + +\textbf{Wichtig:} Keine dieser Plattformen als Fork übernehmen. Die Abweichung +von der Upstream-Codebasis macht Updates nach 3--6 Monaten praktisch unmöglich. +Stattdessen: eigenes System bauen, Patterns und API-Design als Referenz nutzen. + + +% ============================================================================= +% KAPITEL 9: ARCHITEKTUR-ÜBERSICHT +% ============================================================================= +\newpage +\section{Architektur-Übersicht} +\label{sec:architektur} + +\subsection{Architekturansatz: Modularer Monolith} + +Das System startet als \textbf{modularer Monolith} -- ein einzelnes Deployment +mit klar getrennten internen Modulen. Dieser Ansatz kombiniert: + +\begin{itemize}[leftmargin=2em] + \item \textbf{Einfachheit eines Monolithen:} Ein Deployment, ein Repository, + einfaches Debugging, keine Netzwerk-Latenz zwischen Modulen + \item \textbf{Modularität für spätere Zerlegung:} Jedes Modul hat klare Grenzen + (eigenes Interface, eigene DTOs), sodass es bei Bedarf als Microservice + extrahiert werden kann +\end{itemize} + +\textbf{Kein Microservice-Start!} Microservices verursachen bei kleinen Teams +mehr Overhead als Nutzen (Network Calls, Distributed Tracing, Service Discovery, +Deployment-Komplexität). Die Zerlegung erfolgt erst bei konkretem Bedarf. + + +\subsection{System-Komponenten} + +\begin{table}[htbp] + \centering + \caption{Architektur-Komponenten} + \label{tab:architektur} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l l X} + \toprule + \textbf{Komponente} & \textbf{Technologie} & \textbf{Verantwortlichkeit} \\ + \midrule + API-Server & + NestJS & + REST-Endpunkte, Middleware, Guards, Validierung \\ + Produkt-Modul & + NestJS Module & + Katalog, Varianten, Kategorien, Attribute, Suche \\ + Bestell-Modul & + NestJS Module & + Cart, Checkout, Bestellungen, Status-Workflow \\ + Zahlungs-Modul & + NestJS Module & + Provider-Abstraktion (Strategy Pattern), Webhooks \\ + Kunden-Modul & + NestJS Module & + Auth, Profile, Firmenkonten, Rollen \\ + B2B-Modul & + NestJS Module & + Preislisten, Genehmigungen, Zahlungsbedingungen \\ + Versand-Modul & + NestJS Module & + Carrier-Integration, Tracking, Etiketten \\ + Such-Service & + Meilisearch & + Produkt-Indexierung und -Abfragen \\ + Cache-Layer & + Redis & + Sessions, Warenkörbe, Rate-Limiting, Caching \\ + Job-Queue & + BullMQ (Redis) & + E-Mails, Import/Export, Bildverarbeitung \\ + Datei-Speicher & + S3 / MinIO & + Produktbilder, Dokumente, Exporte \\ + Event-Bus & + NestJS EventEmitter & + Lose Kopplung zwischen Modulen \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{API-Design} + +\textbf{Primär: REST API} mit klarer Ressourcen-Struktur: + +\begin{lstlisting} +GET /api/v1/products # Produktliste (paginiert, filterbar) +GET /api/v1/products/:id # Produktdetails +POST /api/v1/cart/items # Artikel zum Warenkorb hinzufuegen +POST /api/v1/checkout # Checkout starten +GET /api/v1/orders # Bestellhistorie +POST /api/v1/orders/:id/return # Retoure anfragen +\end{lstlisting} + +\textbf{Optional: GraphQL} als zweiter Endpunkt für Frontend-Entwickler, +die flexiblere Abfragen benötigen (z.B. Produktseite mit Reviews, +Related Products und Inventory in einem Request). + +\textbf{Webhooks} für asynchrone Events: +\begin{lstlisting} +POST /webhooks/stripe # Stripe-Zahlungsbestaetigung +POST /webhooks/shipping # Carrier-Tracking-Updates +\end{lstlisting} + + +\subsection{Datenbank-Schema (Kernentitäten)} + +\begin{lstlisting} +Produkt 1 --- N Variante +Produkt N --- M Kategorie +Variante 1 --- N Lagereintrag (pro Lagerort) +Kunde 1 --- N Adresse +Kunde 1 --- N Bestellung +Kunde N --- 1 Firma (B2B) +Firma 1 --- N Mitarbeiter (Kunde mit Rolle) +Bestellung 1 --- N Bestellposition +Bestellung 1 --- 1 Zahlung +Bestellung 1 --- N Versand +Bestellung 1 --- N Rechnung +Preisliste N --- M Kundengruppe +Preisliste 1 --- N Preislisteneintrag (Produkt + Preis) +\end{lstlisting} + + +\subsection{Event-Driven Architecture} + +Module kommunizieren über Events statt direkter Aufrufe: + +\begin{lstlisting} +order.created -> E-Mail-Service (Bestellbestaetigung senden) +order.created -> Inventar-Service (Bestand reservieren) +payment.confirmed -> Bestell-Service (Status aktualisieren) +order.shipped -> E-Mail-Service (Versandbestaetigung senden) +order.shipped -> Tracking-Service (Tracking-Updates starten) +\end{lstlisting} + +\textbf{Vorteil:} Module kennen einander nicht direkt. Neue Features +(z.B. Analytics, Loyalty-Punkte) können als Listener hinzugefügt werden, +ohne bestehenden Code zu ändern. + + +\subsection{Caching-Strategie} + +\begin{description}[leftmargin=2em] + \item[Produktkatalog] Redis-Cache mit TTL (5--15 Min.), Invalidierung bei Admin-Änderung + \item[Warenkorb] Redis mit Session-ID als Key. TTL: 7 Tage (Gast), unbegrenzt (eingeloggt) + \item[Suchergebnisse] Meilisearch hat eigenes Caching. Zusätzlich CDN-Caching für häufige Queries + \item[Seitencaching] Next.js ISR für Produktseiten, Kategorieseiten, Blog-Beiträge + \item[API-Responses] ETag-basiertes Caching für unveränderliche Ressourcen +\end{description} + + +% ============================================================================= +% KAPITEL 10: ZUSAMMENFASSUNG & EMPFEHLUNG +% ============================================================================= +\newpage +\section{Zusammenfassung \& Empfehlung} +\label{sec:zusammenfassung} + +\subsection{Empfohlener Stack (Zusammenfassung)} + +\begin{center} +\colorbox{stackhighlight}{% + \parbox{0.92\textwidth}{% + \textbf{Backend:} NestJS + TypeScript + Prisma + PostgreSQL \\ + \textbf{Frontend:} Next.js + React + TypeScript \\ + \textbf{Admin:} Next.js + React (separates Deployment) \\ + \textbf{Suche:} Meilisearch \quad \textbf{Cache:} Redis \quad \textbf{Queue:} BullMQ \\ + \textbf{Zahlungen:} Stripe (primär) + Mollie (EU) \\ + \textbf{Deployment:} Docker Compose + GitHub Actions + Cloudflare CDN + }% +} +\end{center} + + +\subsection{Phasenplan} + +\begin{table}[htbp] + \centering + \caption{Implementierungs-Phasenplan} + \label{tab:phasen} + \rowcolors{2}{gray!8}{white} + \small + \begin{tabularx}{\textwidth}{l l X l} + \toprule + \textbf{Phase} & \textbf{Zeitraum} & \textbf{Features} & \textbf{Team} \\ + \midrule + Phase 1 (MVP) & + Monat 1--6 & + Alle Pflicht-Features (P01--P13): + Produktverwaltung, Auth, Cart/Checkout, Bestellungen, Zahlungen, + Versand, Steuern, Sicherheit, Suche, Responsive Design, + i18n, Multi-Currency, Admin-Panel & + 3--4 Entwickler \\ + Phase 2 & + Monat 7--12 & + Priorisierte Soll-Features: + B2B-Preisgestaltung (S01), Erweiterte Suche (S02), + Rabatte (S03), E-Mail-Benachrichtigungen (S06), + SEO (S07), Analytics (S08), API (S12) & + 3--5 Entwickler \\ + Phase 3 & + Ab Monat 13 & + Verbleibende Soll-Features (S04, S05, S09--S11) + und bedarfsgesteuerte Kann-Features (K01--K11) & + 4--6 Entwickler \\ + \bottomrule + \end{tabularx} +\end{table} + + +\subsection{Nächste Schritte} + +Nach Genehmigung dieses Analysedokuments folgen: + +\begin{enumerate}[leftmargin=2em] + \item \textbf{Detaillierte technische Spezifikation} -- Datenbankschema, + API-Endpunkte, Modulstruktur + \item \textbf{UI/UX-Design} -- Wireframes und Prototypen für Shop, Checkout, Admin + \item \textbf{Projektsetup} -- Repository, CI/CD-Pipeline, Docker-Konfiguration, + Coding-Standards, Linting + \item \textbf{Sprint-Planung} -- Aufgaben für Phase 1 in 2-Wochen-Sprints aufteilen + \item \textbf{Infrastruktur} -- Hosting einrichten, Datenbank provisionieren, + Staging-Umgebung deployen +\end{enumerate} + + +% ============================================================================= +\end{document} diff --git a/shopsystem-analyse.toc b/shopsystem-analyse.toc new file mode 100644 index 0000000..97fdce2 --- /dev/null +++ b/shopsystem-analyse.toc @@ -0,0 +1,86 @@ +\babel@toc {ngerman}{}\relax +\contentsline {section}{\numberline {1}Einleitung}{3}{section.1}% +\contentsline {subsection}{\numberline {1.1}Projektzielsetzung}{3}{subsection.1.1}% +\contentsline {subsection}{\numberline {1.2}Systemarchitektur -- Überblick}{3}{subsection.1.2}% +\contentsline {subsection}{\numberline {1.3}Methodik}{3}{subsection.1.3}% +\contentsline {section}{\numberline {2}Technologie-Analyse}{4}{section.2}% +\contentsline {subsection}{\numberline {2.1}Backend-Frameworks}{4}{subsection.2.1}% +\contentsline {subsection}{\numberline {2.2}Frontend-Frameworks}{4}{subsection.2.2}% +\contentsline {subsection}{\numberline {2.3}Datenbanken}{5}{subsection.2.3}% +\contentsline {subsection}{\numberline {2.4}Suchmaschinen}{6}{subsection.2.4}% +\contentsline {subsection}{\numberline {2.5}Zahlungsanbieter}{6}{subsection.2.5}% +\contentsline {subsection}{\numberline {2.6}Infrastruktur \& Deployment}{7}{subsection.2.6}% +\contentsline {section}{\numberline {3}Empfohlener Technologie-Stack}{8}{section.3}% +\contentsline {subsection}{\numberline {3.1}Gewichtete Entscheidungsmatrix}{8}{subsection.3.1}% +\contentsline {subsection}{\numberline {3.2}Empfehlung: Stack 1}{10}{subsection.3.2}% +\contentsline {subsection}{\numberline {3.3}Detaillierter Stack-Überblick}{10}{subsection.3.3}% +\contentsline {section}{\numberline {4}Feature-Analyse}{11}{section.4}% +\contentsline {subsection}{\numberline {4.1}Pflicht-Features (\textcolor {mustgreen}{\textbf {PFLICHT}})}{11}{subsection.4.1}% +\contentsline {subsubsection}{\numberline {4.1.1}P01 -- Produktverwaltung}{11}{subsubsection.4.1.1}% +\contentsline {subsubsection}{\numberline {4.1.2}P02 -- Benutzer \& Authentifizierung}{12}{subsubsection.4.1.2}% +\contentsline {subsubsection}{\numberline {4.1.3}P03 -- Warenkorb \& Checkout}{12}{subsubsection.4.1.3}% +\contentsline {subsubsection}{\numberline {4.1.4}P04 -- Bestellverwaltung}{12}{subsubsection.4.1.4}% +\contentsline {subsubsection}{\numberline {4.1.5}P05 -- Zahlungsabwicklung}{13}{subsubsection.4.1.5}% +\contentsline {subsubsection}{\numberline {4.1.6}P06 -- Versand \& Lieferung}{13}{subsubsection.4.1.6}% +\contentsline {subsubsection}{\numberline {4.1.7}P07 -- Steuerberechnung}{13}{subsubsection.4.1.7}% +\contentsline {subsubsection}{\numberline {4.1.8}P08 -- Sicherheit \& DSGVO}{14}{subsubsection.4.1.8}% +\contentsline {subsubsection}{\numberline {4.1.9}P09 -- Produktsuche}{14}{subsubsection.4.1.9}% +\contentsline {subsubsection}{\numberline {4.1.10}P10 -- Responsives Design}{14}{subsubsection.4.1.10}% +\contentsline {subsubsection}{\numberline {4.1.11}P11 -- Mehrsprachigkeit (i18n)}{15}{subsubsection.4.1.11}% +\contentsline {subsubsection}{\numberline {4.1.12}P12 -- Mehrwährungsfähigkeit}{15}{subsubsection.4.1.12}% +\contentsline {subsubsection}{\numberline {4.1.13}P13 -- Admin-Panel}{15}{subsubsection.4.1.13}% +\contentsline {subsection}{\numberline {4.2}Soll-Features (\textcolor {shouldblue}{\textbf {SOLL}})}{16}{subsection.4.2}% +\contentsline {subsubsection}{\numberline {4.2.1}S01 -- B2B-Preisgestaltung}{16}{subsubsection.4.2.1}% +\contentsline {subsubsection}{\numberline {4.2.2}S02 -- Erweiterte Suche \& Filter}{16}{subsubsection.4.2.2}% +\contentsline {subsubsection}{\numberline {4.2.3}S03 -- Aktionen \& Rabatte}{17}{subsubsection.4.2.3}% +\contentsline {subsubsection}{\numberline {4.2.4}S04 -- Wunschliste}{17}{subsubsection.4.2.4}% +\contentsline {subsubsection}{\numberline {4.2.5}S05 -- Bewertungen \& Rezensionen}{17}{subsubsection.4.2.5}% +\contentsline {subsubsection}{\numberline {4.2.6}S06 -- E-Mail-Benachrichtigungen}{17}{subsubsection.4.2.6}% +\contentsline {subsubsection}{\numberline {4.2.7}S07 -- SEO-Optimierung}{18}{subsubsection.4.2.7}% +\contentsline {subsubsection}{\numberline {4.2.8}S08 -- Analytics \& Reporting}{18}{subsubsection.4.2.8}% +\contentsline {subsubsection}{\numberline {4.2.9}S09 -- CMS / Blog}{18}{subsubsection.4.2.9}% +\contentsline {subsubsection}{\numberline {4.2.10}S10 -- Multi-Warehouse-Inventar}{19}{subsubsection.4.2.10}% +\contentsline {subsubsection}{\numberline {4.2.11}S11 -- Retouren \& RMA}{19}{subsubsection.4.2.11}% +\contentsline {subsubsection}{\numberline {4.2.12}S12 -- REST/GraphQL API}{19}{subsubsection.4.2.12}% +\contentsline {subsection}{\numberline {4.3}Kann-Features (\textcolor {canyellow}{\textbf {KANN}})}{20}{subsection.4.3}% +\contentsline {subsubsection}{\numberline {4.3.1}K01 -- Treueprogramm / Bonuspunkte}{20}{subsubsection.4.3.1}% +\contentsline {subsubsection}{\numberline {4.3.2}K02 -- Abonnements / Wiederkehrende Bestellungen}{20}{subsubsection.4.3.2}% +\contentsline {subsubsection}{\numberline {4.3.3}K03 -- Marktplatz (Multi-Vendor)}{20}{subsubsection.4.3.3}% +\contentsline {subsubsection}{\numberline {4.3.4}K04 -- KI-gestützte Empfehlungen}{21}{subsubsection.4.3.4}% +\contentsline {subsubsection}{\numberline {4.3.5}K05 -- Live-Chat / Chatbot}{21}{subsubsection.4.3.5}% +\contentsline {subsubsection}{\numberline {4.3.6}K06 -- Social-Media-Integration}{21}{subsubsection.4.3.6}% +\contentsline {subsubsection}{\numberline {4.3.7}K07 -- Geschenkkarten}{21}{subsubsection.4.3.7}% +\contentsline {subsubsection}{\numberline {4.3.8}K08 -- EDI / PunchOut (Enterprise B2B)}{22}{subsubsection.4.3.8}% +\contentsline {subsubsection}{\numberline {4.3.9}K09 -- A/B-Testing}{22}{subsubsection.4.3.9}% +\contentsline {subsubsection}{\numberline {4.3.10}K10 -- PWA-Support}{22}{subsubsection.4.3.10}% +\contentsline {subsubsection}{\numberline {4.3.11}K11 -- Multi-Tenant / Multi-Store}{22}{subsubsection.4.3.11}% +\contentsline {subsection}{\numberline {4.4}Nicht benötigte Features (\textcolor {notgray}{\textbf {NICHT BENÖTIGT}})}{22}{subsection.4.4}% +\contentsline {section}{\numberline {5}B2B-spezifische Anforderungen}{24}{section.5}% +\contentsline {subsection}{\numberline {5.1}B2B vs. B2C -- Fundamentale Unterschiede}{24}{subsection.5.1}% +\contentsline {subsection}{\numberline {5.2}Firmenkonten \& Rollenmanagement}{24}{subsection.5.2}% +\contentsline {subsection}{\numberline {5.3}Genehmigungsworkflows}{24}{subsection.5.3}% +\contentsline {subsection}{\numberline {5.4}Zahlungsbedingungen}{25}{subsection.5.4}% +\contentsline {subsection}{\numberline {5.5}Schnellbestellung \& CSV-Upload}{25}{subsection.5.5}% +\contentsline {section}{\numberline {6}Internationalisierung}{26}{section.6}% +\contentsline {subsection}{\numberline {6.1}Übersicht der Anforderungen}{26}{subsection.6.1}% +\contentsline {subsection}{\numberline {6.2}Mehrsprachigkeit (i18n)}{26}{subsection.6.2}% +\contentsline {subsection}{\numberline {6.3}Mehrwährungsfähigkeit}{27}{subsection.6.3}% +\contentsline {subsection}{\numberline {6.4}Regionale Rechtsanforderungen}{27}{subsection.6.4}% +\contentsline {section}{\numberline {7}Sicherheit \& Compliance}{28}{section.7}% +\contentsline {subsection}{\numberline {7.1}DSGVO / GDPR}{28}{subsection.7.1}% +\contentsline {subsection}{\numberline {7.2}PCI-DSS Compliance}{28}{subsection.7.2}% +\contentsline {subsection}{\numberline {7.3}OWASP Top 10 -- Maßnahmen}{28}{subsection.7.3}% +\contentsline {subsection}{\numberline {7.4}Authentifizierung \& Autorisierung}{28}{subsection.7.4}% +\contentsline {section}{\numberline {8}Open-Source-Referenzarchitekturen}{29}{section.8}% +\contentsline {subsection}{\numberline {8.1}Learnings für unser System}{29}{subsection.8.1}% +\contentsline {section}{\numberline {9}Architektur-Übersicht}{30}{section.9}% +\contentsline {subsection}{\numberline {9.1}Architekturansatz: Modularer Monolith}{30}{subsection.9.1}% +\contentsline {subsection}{\numberline {9.2}System-Komponenten}{30}{subsection.9.2}% +\contentsline {subsection}{\numberline {9.3}API-Design}{30}{subsection.9.3}% +\contentsline {subsection}{\numberline {9.4}Datenbank-Schema (Kernentitäten)}{31}{subsection.9.4}% +\contentsline {subsection}{\numberline {9.5}Event-Driven Architecture}{31}{subsection.9.5}% +\contentsline {subsection}{\numberline {9.6}Caching-Strategie}{32}{subsection.9.6}% +\contentsline {section}{\numberline {10}Zusammenfassung \& Empfehlung}{33}{section.10}% +\contentsline {subsection}{\numberline {10.1}Empfohlener Stack (Zusammenfassung)}{33}{subsection.10.1}% +\contentsline {subsection}{\numberline {10.2}Phasenplan}{33}{subsection.10.2}% +\contentsline {subsection}{\numberline {10.3}Nächste Schritte}{33}{subsection.10.3}%