# Systemkontextdiagramm

Wer interagiert mit PROCUREX und welche externen Systeme sind beteiligt (C4-Ebene 1).

```mermaid
graph TB
    Buyer["Einkäufer<br/>(ROLE_BUYER)"]
    Approver["Genehmiger<br/>(ROLE_APPROVER)"]
    SupplierAdmin["Procurement Admin<br/>(ROLE_SUPPLIER_ADMIN)"]
    Receiving["Wareneingang<br/>(ROLE_RECEIVING)"]
    Finance["Finance<br/>(ROLE_FINANCE)"]

    subgraph PROCUREX["PROCUREX (dieses System)"]
        App["procurex-app<br/>Modularer Spring-Boot-Monolith"]
        FE["procurex-frontend<br/>Angular-22-SPA"]
    end

    subgraph SharedInfra["enterprise-infrastructure (geteilte Plattform, extern)"]
        Keycloak["Keycloak 26.7.0<br/>Realm procurex"]
        Postgres["PostgreSQL 16<br/>DB procurex"]
        Kafka["Kafka / Confluent 7.7.1<br/>Topic-Präfix procurex."]
        Traefik["Traefik<br/>Reverse Proxy"]
        Prometheus["Prometheus + Grafana"]
    end

    Buyer -->|HTTPS| Traefik
    Approver -->|HTTPS| Traefik
    SupplierAdmin -->|HTTPS| Traefik
    Receiving -->|HTTPS| Traefik
    Finance -->|HTTPS| Traefik

    Traefik --> FE
    Traefik --> App
    FE -->|REST /api/v1, OIDC Redirect| App
    FE -->|Authorization Code + PKCE| Keycloak
    App -->|JWT-Validierung| Keycloak
    App -->|JDBC, Schema pro Modul| Postgres
    App -->|Outbox-Events, procurex.*.v1| Kafka
    App -->|/actuator/prometheus| Prometheus
```

**Hinweis:** `enterprise-infrastructure` ist keine PROCUREX-eigene Infrastruktur, sondern eine für mehrere
Lernprojekte gemeinsam genutzte lokale Plattform (siehe Confluence Seite 12, CONFIRMED).
PROCUREX ergänzt dort nur projektspezifische Konfiguration (eigener Realm, eigene DB, eigenes
Topic-Präfix), betreibt aber keine eigene Instanz dieser Bausteine.
