PROCUREX · Statische HTML-Dokumentation

PROCUREX — B2B Procurement Platform

Aus README.md konvertiert – vollständig lokal lesbar.

PROCUREX — B2B Procurement Platform

Fiktives Lernprojekt: eine Beschaffungsplattform (Procure-to-Pay), umgesetzt als modularer

Spring-Boot-Monolith. Projektsteuerung läuft über Jira (PRX auf aydinsude.atlassian.net) und

Confluence (PRX auf aydinsude.atlassian.net/wiki). Dauerhafte Architektur- und

Technologieentscheidungen stehen in PROCUREX-PLANUNGSENTSCHEIDUNGEN.md; der aktuelle

Repository- und Teststatus wird in dieser README und in project.yaml gepflegt.

Projektstatus

Architektur

Modularer Monolith (ein deploybares Artefakt procurex-app), Module nach Bounded Context getrennt,

jedes mit eigenem PostgreSQL-Schema und öffentlichen Port-Interfaces für modulübergreifende Aufrufe

(kein direkter Zugriff auf fremde Schemas). Details: Confluence Seite 09 „Zielarchitektur und

Modulstruktur“.

procurex-platform (Parent-POM)
├── procurex-common       Shared Kernel (Exceptions, Problem-Details, Correlation-ID, Money)
├── procurex-supplier     Lieferantenverwaltung          PRX-3
├── procurex-catalog      Produktkatalog                 PRX-4
├── procurex-requisition  Warenkorb absenden              PRX-2
├── procurex-ordering     Bestellung (Kernaggregat)       PRX-2, PRX-5, PRX-8, PRX-12
├── procurex-approval     Genehmigung                     PRX-5, PRX-8
├── procurex-receiving    Wareneingang                    PRX-10
├── procurex-invoicing    Rechnungsprüfung (3-Way-Match)   PRX-11, PRX-9
└── procurex-app          Spring-Boot-Bootstrap-Modul

procurex-frontend         Angular-22-SPA (Standalone Components)         PRX-20

Jedes Modul hat ein eigenes README.md mit Endpunkten und Geschäftsregeln.

Benachrichtigungen sind im aktuellen Release bewusst abgegrenzt: Der Frontend-

NotificationService erzeugt nur lokale UI-Meldungen. Ein fachliches E-Mail-/Webhook-/Kafka-

Benachrichtigungsmodul ist noch nicht implementiert; die Entscheidung und der spätere

Umsetzungsschnitt stehen in docs/notification-scope.md.

Tech-Stack (bestätigt, siehe Confluence Seite 08)

Java 17 LTS · Spring Boot 3.3.4 · Maven Multi-Module · PostgreSQL 16 · Flyway · Angular ^22 ·

Keycloak 26.7.0 · Kafka (Confluent 7.7.1) — Anbindung an die geteilte lokale Plattform

enterprise-infrastructure (Netzwerk proxy, Hostname-Präfix procurex).

Build & Test

mvn test

Der Maven-Reactor läuft standardmäßig parallel (.mvn/maven.config, -T 1C). Das ist bei diesem

11-Modul-Projekt wichtig, weil die unabhängigen Module und ihre Surefire-Testläufe sonst seriell

gestartet werden. Eine Messung auf dem lokalen Windows-Rechner mit warmem Maven-Cache ergab:

Lauf Ergebnis Zeit
serielles mvn test grün, Unit- und Contract-Tests 156,7 s
paralleles mvn test mit -T 1C grün, Unit- und Contract-Tests 106,2 s

Die Verbesserung beträgt in dieser Umgebung rund 32 %. Die Zeit ist hardware- und cacheabhängig.

Der Hauptgrund für den ursprünglichen langsamen Eindruck war nicht die Contract-Generierung,

sondern der serielle Reactor mit mehreren modulweisen Surefire-Teststarts. Die Contract-Tests

werden nur im Modul procurex-app generiert und waren im Messlauf bereits aktuell.

Der Standardlauf benötigt keine laufende Datenbank oder Docker, weil die drei

Testcontainers-Integrationstests standardmäßig ausgeschlossen sind. Sie werden separat gegen

eine Docker-kompatible Engine ausgeführt. Lokal funktioniert das mit einer gestarteten Podman-

Machine:

podman machine start podman-machine-default
$env:TESTCONTAINERS_RYUK_DISABLED = 'true'
mvn -pl procurex-app -am test "-Dprocurex.integration=true" "-Ddocker.host=npipe:////./pipe/docker_engine"

Damit ist klar getrennt zwischen schnellem Standard-Quality-Gate und den teureren Tests mit echter

PostgreSQL-Instanz. Die Integrationstest-Ausnahme ist in procurex-app/pom.xml dokumentiert; der

separate Lauf ist ein echter Datenbankintegrationsnachweis.

Anwendung starten

Lokal (Maven/ng serve): Backend siehe procurex-app/README.md, Frontend siehe

procurex-frontend/README.md.

Docker (PRX-21): docker-compose.yml im Repo-Root containerisiert Backend und Frontend und

bindet sie über das externe proxy-Netzwerk an den zentralen Traefik aus enterprise-infrastructure an –

erreichbar unter http://procurex.localhost (Frontend) und http://procurex-api.localhost

(Backend). End-to-end getestet: Flyway-Migrationen laufen gegen die geteilte Postgres-Instanz

(procurex_db), CORS-Preflight von procurex.localhost funktioniert. Details und Startreihenfolge:

procurex-app/README.md, Abschnitt „Starten – Docker“.

Sprintübersicht

Die ursprüngliche Planung umfasste vier Sprints. Für die inzwischen vorhandenen Integrations-,

Betriebs- und Quality-Artefakte wurden nachträglich zwei provisorische Lernprojekt-Sprints

dokumentiert:

Sprint Fokus Tickets
1 Grundlagen und Governance PRX-2, PRX-3, PRX-6, PRX-7, PRX-13–19, PRX-28–31
2 Stammdaten und Katalog PRX-4
3 Bestell-Kernprozess PRX-5, PRX-8, PRX-12
4 Wareneingang und Rechnung PRX-9, PRX-10, PRX-11
5 Integration und Betriebsfähigkeit PRX-17, PRX-19, PRX-21, PRX-22, PRX-26, PRX-34
6 Quality Gates und Delivery-Nachweise PRX-24, PRX-32, PRX-33, PRX-35, PRX-36

Die dauerhaften technischen Nachweise stehen bei den jeweiligen Quellen: in Jenkinsfile, docs/quality-gates.md, loadtests/README.md, procurex-frontend/README.md und den Spring-Cloud-Contract-Verträgen.

Umgesetzte Tickets (Sprint 1–6)

Ticket Story/Bug Modul
PRX-2 Warenkorb als Bestellung absenden procurex-requisition, procurex-ordering
PRX-3 Lieferanten prüfen und aktivieren procurex-supplier
PRX-4 Produkte im Katalog finden procurex-catalog
PRX-5 Bestellungen entscheiden (Genehmiger) procurex-approval, procurex-ordering
PRX-8 Doppelte Genehmigungsentscheidung verhindern procurex-approval, procurex-ordering
PRX-9 Rechnung mit Mengenabweichung als Klärfall markieren procurex-invoicing
PRX-10 Liefermengen erfassen (Wareneingang) procurex-receiving
PRX-11 Rechnungen gegen Bestellungen prüfen procurex-invoicing
PRX-12 Bestellungen mit Lieferantenstatus verfolgen procurex-ordering
PRX-20 Angular-Frontend-Struktur und Accessibility-Regeln procurex-frontend
PRX-21 Docker-Compose-Anbindung an enterprise-infrastructure Dockerfiles, docker-compose.yml, CORS-Config
PRX-19 Keycloak/OIDC-Login und Backend-Autorisierung keycloak/, SecurityConfig, Frontend AuthService
PRX-17 Kafka-Event-Publishing (Transactional Outbox) procurex-common/outbox, je Modul ein Relay
PRX-22 Kubernetes/Helm-Deploymentkonzept helm/procurex/ (lint/template validiert, nicht live deployt)
PRX-24 Teststrategie (Unit/Integration/E2E) festlegen siehe PRX-8, PRX-33 sowie procurex-app/README.md
PRX-34 Kafka-Consumer (Audit-Log) procurex-audit
PRX-33 E2E-Frontend-Tests mit Playwright procurex-frontend/e2e
PRX-32 Jenkins CI-Pipeline Jenkinsfile, shared/enterprise-infrastructure/jenkins/casc.yaml
PRX-35 Contract-Tests mit Spring Cloud Contract procurex-app/src/test/resources/contracts, com.procurex.app.contracts
PRX-36 Lasttests mit k6 loadtests/

Der aktuelle E2E-Nachweis umfasst 4/4 Playwright-Tests. Der aktuelle k6-Lauf gegen Podman/

enterprise-infrastructure lief für alle drei Szenarien mit 0 % Fehlern und erfüllten Latenz-Thresholds;

Details stehen in loadtests/README.md.

Nicht Teil dieser Runde (siehe PROCUREX-PLANUNGSENTSCHEIDUNGEN.md): produktives Kubernetes-

Deployment (kein Cluster in dieser Lernumgebung verfügbar).

⌂ Cockpit