ti&m e-gov-framework

6 Laufzeitsicht

6.1 Szenario 1 — Schreiboperation via Command Pattern

Ablauf einer typischen Schreiboperation (z.B. Anlegen einer neuen Entität) in einer Fachapplikation:

Sachbearbeiter → REST-Controller (consuming App)
  → DomainCommandFactory.getCommand(action, dto, parameters)
    → Command.status = INITIATED (persistiert in egov_cmd_command)
  → BaseExecutor.execute(command)
    → RuleSetService.getApplicableRuleSet(command)      ← DB-Abfrage egov_iam_*
    → ValidationEngine.validate(ruleSet, dto, action)
      → Validierungsregeln rekursiv ausgewertet → ValidationTriple
    → [FAILED] → Command.status = HARD_VALIDATION_FAILED, ResponseExceptionBody zurückgegeben
    → [OK]     → Command.status = VALIDATED
               → BaseRepositoryImpl.saveWithTx(entity)
                  → Command.status = EXECUTED
                  → HTTP 200 / 201

Beteiligte Bausteine: REST-Controller (App), DomainCommandFactory, BaseExecutor, ValidationEngine, RuleSetService, BaseRepositoryImpl

6.2 Szenario 2 — Gefilterte Listenabfrage mit Row-based Security

Ablauf einer paginierten GET-Anfrage mit Filterausdruck:

Sachbearbeiter → REST-Controller (consuming App)
  → BaseRepositoryImpl.find(parameters)
    → QueryBuilder.buildBaseQuery(parameters, entity, config)
      → FilterParser.parse(parameters.filter)       ← Filter-DSL → AST
      → PermissionBuilder.append(query, userId)     ← Rollen-WHERE aus egov_iam_permission_definition
      → Sortierung + LIMIT/OFFSET angefügt
    → Native SQL via JDBC ausgeführt
    → PaginatedResult<T> zurückgegeben
  → HTTP 200 mit Datenliste (ausschliesslich berechtigte Zeilen)

Beteiligte Bausteine: REST-Controller, BaseRepositoryImpl, QueryBuilder, FilterParser, PermissionBuilder, DataHolder

6.3 Szenario 3 — Authentication-Flow (Vorgelagertes IAM)

Sachbearbeiter → Azure AD (Login)
  → F5-Firewall setzt EGOV_TOKEN-Cookie
  → HTTP-Request mit Cookie → ContextInterceptor (Framework)
    → UserIdProvider.getUserId(request)   ← Implementierung in consuming App
    → DataHolder.setUserId(userId)        ← ThreadLocal für Request-Dauer
  → Alle nachgelagerten Permission-Checks lesen userId aus DataHolder

Beteiligte Bausteine: Azure AD (extern), F5-Firewall (extern), ContextInterceptor, UserIdProvider (consuming App), DataHolder

6.4 Szenario 4 — AI-gestützte Regelgenerierung

Ablauf der Generierung einer neuen Validierungsregel aus natürlicher Sprache:

Framework-Entwickler / Admin → RuleModificationController (POST)
  → RuleGenerator.generate(freitextBeschreibung)
    → Azure OpenAI API aufgerufen
    → Prompt enthält Grammatik der erlaubten Validierungsfunktionen
  → RuleTranslator.translate(llmResponse)
    → JSON → Framework-Validierungsregel-Format
  → Regel in egov_iam_rule_set persistiert
  → HTTP 200 mit generierter Regel

Beteiligte Bausteine: RuleModificationController, RuleGenerator, RuleTranslator, Azure OpenAI (extern), RuleSetService