recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur

Phase 1: sync_locked_at auf press_releases (Importer überspringt gesperrte
PMs auch bei --force), LegalRequest um Verifikation/Ausführung erweitert,
verschlüsselte Vorher-Snapshots mit Löschfrist (snapshots:purge, täglich).

Phase 2: AnonymizationService (Unicode-Wortgrenzen-Schwärzung, Pflicht-Diff,
transaktionale Ausführung mit Snapshot, Kontakt-Detach, Bild-Löschung,
Sitemap-Invalidierung, Verlauf ohne Klartext-Altwerte); Admin-Queue kann
DSGVO-Anfragen anonymisieren oder depublizieren, inkl. Snapshot-Restore.

Phase 3: Deflektions-Trichter „PM melden/ändern" (melden/pm) mit Kosten-
Tabelle vorab; Magic-Link geht nur an die hinterlegte Pressekontaktadresse
(neuer purpose press_release_report), atomare Verifikation, Anliegen-Auswahl
erzeugt verifizierte Queue-Anfragen; toter-Kanal-Fallback; Owner-Einstieg.

Phase 4: Panel-Abschnitt „Änderung & Korrektur" — Levenshtein-Gate (5 %,
Mini-Edit-Ausnahme ≤ 2 Zeichen) stuft klein/groß ein; kleine Korrektur
kostenlos sofort live (Snapshot, Sperre, Verlauf, Re-Score), größere als
Change-Anfrage (Interim bis 10-€-Checkout, Phase 7).

Entwicklungsplan mit Entscheidungen E1-E8 und offenen Punkten in
docs/Decision-Update; 41 Pest-Tests (tests/Feature/Legal) grün.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-22 15:56:34 +00:00
parent 58c0cc3f23
commit b4b2e013d6
42 changed files with 3868 additions and 1 deletions

View file

@ -414,6 +414,40 @@ return [
'throttle' => 'Too many requests. Please try again in :minutes minutes.',
],
'pm_report' => [
'title' => 'Report or change a press release',
'concerns_title' => 'Your request regarding this press release',
'meta' => 'Change, removal and data-protection requests for a published press release — verified via the press contact address on file.',
'breadcrumb' => 'Report/change release',
'intro' => 'You want to correct or change a published press release, take it offline, or have personal data removed? Paste the URL of the release — we will send a confirmation link to the press contact address on file. Costs are shown upfront:',
'track_correction' => 'Minor correction (typos, contact details)',
'track_correction_desc' => 'Field or text correction without new content.',
'track_dsgvo' => 'Removal of personal data (GDPR)',
'track_dsgvo_desc' => 'Redaction of names and contact details of natural persons; the release stays online. Reviewed by our team.',
'track_depublication' => 'Depublication (take the release offline)',
'track_depublication_desc' => 'The release is taken offline completely (reversible within the revocation window).',
'track_change' => 'Content change',
'track_change_desc' => 'New or rewritten text, image replacement — with a new approval run.',
'cost_free' => 'free of charge',
'verification_note' => 'The confirmation link is always sent to the press contact address on file in the publication — never to an address entered here. This ensures only the genuine contact can initiate changes.',
'submit' => 'Request confirmation link',
'flash_link_sent' => 'We have sent a confirmation link to :email. Please check the mailbox of the press contact address on file.',
'flash_link_invalid' => 'The confirmation link is invalid, expired or has already been used. Please request a new link.',
'flash_session_expired' => 'Your session has expired. Please request a new confirmation link.',
'validation_not_found' => 'No published press release was found at this URL. Please check the link to the detail page.',
'validation_already_open' => 'An open request of this type already exists for this press release. You will receive feedback by email.',
'throttle_release' => 'Several confirmation links have already been requested for this press release today. Please try again tomorrow or check the mailbox.',
'manual_fallback' => 'No reachable press contact address is on file for this press release. Please use the manual review — our team will verify your authorisation based on proof:',
'manual_fallback_link' => 'Go to the manual review form',
'verified_as' => 'Verified via the press contact address :email — you can now submit your request.',
'concern_legend' => 'Which request would you like to submit?',
'label_message' => 'Description of your request',
'placeholder_message' => 'e.g. "Please remove my name Max Mustermann and the phone number from the press contact."',
'concern_note' => 'Free requests are implemented directly after review. For paid requests (depublication, content change) you will receive a payment request before implementation — no costs arise without your confirmation.',
'concern_submit' => 'Submit request',
'flash_concern_received' => 'Thank you. Your request has been received under case number :reference — you will receive a confirmation of receipt by email to the press contact address.',
],
'cancellation' => [
'meta_title' => 'Cancel contracts here',
'meta_description' => 'Cancel your ongoing contract online – without signing in, via the statutory confirmation page pursuant to Section 312k of the German Civil Code (BGB).',