# barox Support

Internes Ticketsystem der barox AG/GmbH — Eigenentwicklung als Ersatz für
Zammad. Laravel-Anwendung, live unter `support.barox.io`.

## Funktionsumfang (Stand/Phasen)

| Phase | Umfang | Status |
|---|---|---|
| 1 | Ticket-CRUD, Webformular-Intake, Staff-Login (Azure AD), Design-System-UI | ✅ |
| 2 | Postfach-Ingestion via Microsoft Graph (**Shadow-Modus**: nur lesen, kein Mailversand) | ✅ |
| — | Historischer Zammad-Import (einmalig, siehe unten) | ✅ |
| 3 | Kundenportal, Kategorien-Verwaltung | offen |
| 4 | Claude-KI-Integration (Kategorisierung, Antwortvorschläge) | offen |
| 5 | S/MIME (Signieren/Verschlüsseln, Zertifikate aus Zammad übernehmen) | offen |
| 6 | SelectLine-Sync (Kunden/Firmen) | offen |

## Setup

```bash
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
```

Kein Node/Vite nötig — das barox-Design-System (`assets/design-system/`) wird
direkt eingebunden (`public/assets` ist ein Symlink auf das Projekt-`assets/`).

## Wichtige `.env`-Blöcke

- `AZURE_*` — Microsoft Entra ID (OIDC), Staff-Login. Redirect-URI:
  `https://support.barox.io/auth/microsoft/callback`.
- `GRAPH_*` — Microsoft Graph, App-only (Client-Credentials) für den
  Postfach-Zugriff. Braucht in Azure eine **Application Permission**
  `Mail.Read` mit Admin-Zustimmung (unabhängig von den Delegated-Permissions,
  die z.B. Zammad nutzt).
- `ZAMMAD_*` — für den einmaligen historischen Import, siehe unten.
- `ANTHROPIC_*`, `SELECTLINE_*`, `SMIME_*` — spätere Phasen, aktuell ungenutzt.

## Postfach-Ingestion (Phase 2, Shadow-Modus)

`php artisan mailbox:poll` (per Scheduler alle 2 Min., `routes/console.php`)
fragt das gemeinsame Postfach rein lesend per Graph-Delta-Query ab und legt
Tickets an. Es wird **bewusst keine Mail verschickt** — Zammad bleibt bis zum
Cutover das kundensichtbare System. Zammad markiert verarbeitete Mails nur als
gelesen (keine Verschiebung/Löschung); da wir per Delta-Link statt `isRead`
synchronisieren, beeinflussen sich beide Systeme nicht gegenseitig.

## Zammad-Import (einmalig)

`php artisan zammad:import-tickets [--limit=N]` importiert alle Zammad-Tickets
(offen **und** archiviert/geschlossen) inkl. Verlauf, Anhängen, Kunden und
Firmen. Quelle: Zammad-REST-API (`ZAMMAD_BASE_URL`, `ZAMMAD_API_TOKEN`, Token
mit Lese-Zugriff auf Tickets/Organizations/Users).

**Vor einem vollständigen Lauf**: einmal mit `--limit=1` oder `--limit=5`
testen und das Ergebnis in der Ticket-Oberfläche prüfen (Status/Priorität
korrekt gemappt? Kunde/Firma korrekt zugeordnet? Anhänge lesbar?) — siehe
Annahmen/Mapping-Tabellen im Docblock von
`app/Services/Zammad/ZammadImportService.php`. Diese gehen von Zammads
Standard-States/-Prioritäten aus; bei abweichender Konfiguration ggf. die
`STATE_MAP`/`PRIORITY_MAP`-Konstanten anpassen.

Der Import ist **abbruchsicher und wiederholbar**: jedes Ticket wird in einer
eigenen DB-Transaktion importiert (schlägt es fehl, bleibt nichts davon
zurück) und anhand von `tickets.zammad_ticket_id` übersprungen, wenn es schon
existiert — ein erneuter Lauf holt nur nach, was noch fehlt oder zuvor
fehlgeschlagen ist. Fehler pro Ticket landen in `storage/logs/laravel.log`,
brechen den Gesamtlauf aber nicht ab.

Nicht übernommen: Zammad-Gruppen (Queues) werden nicht auf Kategorien gemappt
(inhaltlich nicht deckungsgleich); Agenten-Autorenschaft auf importierten
Nachrichten wird nur gesetzt, wenn ein bestehender barox-support-User mit
derselben E-Mail existiert.

## Tests

```bash
php artisan test
```
