# RiccardoAgeCheck – Altersprüfung

Prüft das Alter anhand der Angaben, die auf jedem Ausweis und Pass stehen – **lokal im Shop,
ohne externen Dienst**. Kein Abtippen der ganzen maschinenlesbaren Zone.

## Ablauf im Shop
1. Liegt ein altersbeschränkter Artikel im Warenkorb und fehlt die Prüfung, sperrt der Shop die
   Bestellung (Hinweis im Warenkorb, im Warenkorb-Flyout und an der Kasse).
2. Auf `/altersnachweis` gibt der Kunde drei Werte ein – Dokumentnummer, Geburtsdatum, Ablaufdatum –
   und dazu je die einstellige **Prüfziffer**, die im Dokument direkt hinter dem Wert steht.
   Ein Schaubild zeigt für Ausweis und Pass, wo die Ziffern stehen; der Browser prüft sie sofort mit.
3. Wer die Zeilen schon abgescannt oder kopiert hat, kann sie stattdessen komplett einfügen
   (TD1, TD2 und TD3 werden erkannt).
4. Als Rückfalloption lädt der Kunde ein Foto hoch; die Freigabe erfolgt im Admin.

Gäste werden bei **jeder** Bestellung geprüft (Sitzung), Kundenkonten **einmalig** mit
konfigurierbarer Gültigkeit. Geschäftskunden mit Firmenangabe können ausgenommen werden.

## Was die Prüfung leistet – und was nicht
Die Prüfziffern hängen rechnerisch an den Werten (ICAO 9303, Gewichtung 7-3-1). Ein erfundenes
oder falsch abgetipptes Dokument fällt damit auf – ein Geburtsdatum lässt sich nicht einfach
„passend“ eintragen. Die Prüfung belegt **nicht**, dass das Dokument der bestellenden Person
gehört. Für nikotinhaltige Produkte im Versandhandel bleibt die Prüfung bei der Zustellung
(z. B. DHL Altersprüfung 18+) bzw. eine echte Identprüfung erforderlich; die Stellen dafür sind
im Plugin vorbereitet (Status, Sperre, Protokoll je Bestellung).

## Datenschutz
Gespeichert werden nur Prüfergebnis, Verfahren, Dokumentart, Ausstellerstaat, Alter in Jahren
und Zeitstempel – **nicht** Dokumentnummer, Geburtsdatum oder Name. Optional kann eine
Prüfsumme (HMAC) der Dokumentnummer gespeichert werden, um dasselbe Dokument in mehreren Konten
zu erkennen; Standard ist aus. Hochgeladene Dokumente liegen als private Medien und werden nach
der Entscheidung automatisch gelöscht (abschaltbar). Zu jeder Bestellung wird ein Nachweis-Eintrag
angelegt, damit belegbar ist, dass vor dem Versand geprüft wurde.

## Einstellungen
*Erweiterungen → Riccardo Altersprüfung → Konfigurieren*: aktiv, Mindestalter, betroffene Artikel
(alle oder nur mit Zusatzfeld „Abgabe erst ab 18 Jahren“), Gültigkeit in Monaten, Geschäftskunden
ausnehmen, erlaubte Ausstellerstaaten, Versuche pro Stunde, Upload erlauben, Upload nach
Entscheidung löschen, Prüfsumme speichern.

## Admin
*Kunden → Altersprüfungen*: Liste mit Filter nach Status, Dokument ansehen (private Datei wird über
die Admin-API ausgeliefert), Freigeben, Ablehnen, Dokument löschen.

## Schnittstellen
```
POST   /api/_action/riccardo-age-check/{id}/decide     { approve: bool, reason?: string }
GET    /api/_action/riccardo-age-check/{id}/document   liefert das hochgeladene Dokument
DELETE /api/_action/riccardo-age-check/{id}/document    löscht es
POST   /api/_action/riccardo-age-check/parse           { mrz } – prüft Zeilen, ohne zu speichern
```
Kommando für den Support: `bin/console riccardo:age:check-mrz "<zeile1>\n<zeile2>"`.

## Build
`bin/build-storefront.sh` bzw. `bin/build-administration.sh` (als root, danach `chown -R www-data:www-data`).
