recht: Meldeverfahren v2 Phasen 5+7 — DSGVO-Strukturformular, 10-€-Checkout mit KI-Vorprüfung, Triage & Panel-Modal

Phase 7 (Spur D, E2 revidiert): KI-Vorprüfung VOR der Zahlung im Modal —
rot lehnt ohne Zahlung ab, gelb/grün führt zum Stripe-Checkout
(SinglePurchaseType::Change, 10 € netto), nach Zahlungseingang übernimmt
der Webhook die geprüfte Fassung sofort (applyPaid: Snapshot, Sperre,
Verlauf). Nur einmal je PM; Obergrenze legal.change_max_distance_percent
(50 %) verhindert die verdeckte Selbst-Depublizierung.

Phase 5 (Spur B): strukturiertes Schwärzungsformular mit Pflicht-Vorschau
im verifizierten Web-Bereich UND als Modal im Kunden-Panel; Admin-Editor
wird aus payload.redaction vorbefüllt. Umsetzungsmail LegalRequestExecuted
an Antragsteller, Bestätigungsmail PressReleaseChangeApplied (Spur A/D,
neuer abbestellbarer Typ press_release_corrected).

Außerdem:
- Re-Sync-Sperre + Sitemap-Invalidierung fest in depublish() verankert
  (Lücke im bezahlten Webhook-Pfad geschlossen)
- Öffentliche „Rechtliches"-Seite als zweistufige Triage: primär der
  Portal-Anmeldelink, Formular nur Fallback mit Identifizierungs-Hinweis;
  Store auf report/dsgvo/personal_rights gehärtet
- Panel-Button „Ändern/Melden" öffnet Anliegen-Modal (4 Spuren) statt
  des Web-Formulars
- Pressekontakt-Fallback für Legacy-Bestände (30k PMs ohne Verknüpfung):
  Detailseite + pressContactEmail() nutzen PM-Kontakt → Firmen-Kontakt →
  Firmendaten
- Korrektur-Gate entity-fest (Editor-Normalisierung zählt nicht als
  Änderung), toEditorHtml() in Admin-Edit + Korrektur-Panel,
  Wochenlimit-Hinweis in Text und Bremsen-Meldung

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-23 13:02:57 +00:00
parent b4b2e013d6
commit 9afbedddeb
40 changed files with 2507 additions and 169 deletions

View file

@ -446,6 +446,28 @@ return [
'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.',
'dsgvo_terms_label' => 'Details to be removed (one term per line)',
'dsgvo_terms_placeholder' => "Max Mustermann\nMustermann\nmax@company.example\n+49 123 456789",
'dsgvo_terms_hint' => 'Please also include spelling variants (e.g. surname alone, genitive forms). Replacement is whole-word only.',
'dsgvo_detach_contacts' => 'Remove the stored press contact details from this release',
'dsgvo_remove_images' => 'Remove images containing personal data (our team selects the affected images)',
'dsgvo_note' => 'This is a redaction/removal within this publication. Implementation follows a review by our team; copies in search engines or third-party archives may remain available for some time.',
'dsgvo_validation_empty' => 'Please provide at least one term or select one of the removal options.',
'dsgvo_validation_no_hits' => 'The terms you provided do not appear in the release. Please check the spelling (terms are matched whole-word).',
'dsgvo_preview_button' => 'Show redaction preview',
'dsgvo_preview_title' => 'Preview: how the release will look after redaction',
'dsgvo_preview_hits' => 'One occurrence will be replaced.|:hits occurrences will be replaced.',
'dsgvo_preview_field_hits' => 'one replacement|:hits replacements',
'dsgvo_preview_no_text_hits' => 'No text replacements — your request only concerns contact details or images.',
'dsgvo_preview_contacts' => 'Press contact details will be removed.',
'dsgvo_preview_images' => 'Images containing personal data will be removed after review.',
'dsgvo_preview_confirm' => 'Submit bindingly',
'dsgvo_preview_edit_hint' => 'Not correct? Adjust the terms below and open the preview again.',
'dsgvo_field_title' => 'Title',
'dsgvo_field_subtitle' => 'Subtitle',
'dsgvo_field_text' => 'Text',
'dsgvo_field_boilerplate' => 'Company boilerplate',
'dsgvo_field_keywords' => 'Keywords',
],
'cancellation' => [