Ablehnungskategorien live aus der DB (rejection_categories)

/richtlinien rendert jetzt alle aktiven Kategorien aus der neuen
rejection_categories-Tabelle (stabiler code als Anker, public_label/desc,
optionale Beispiele) statt der statischen K1-K6-Liste. Kategorien werden
nie geloescht, nur deaktiviert; neue Kategorien erscheinen ohne
Textaenderung und ohne neue AGB-Version (AGB par. 7 Abs. 3 verweist nicht
abschliessend). Seeder legt K1-K6 idempotent an; Versionszeile der Seite
kommt aus legal_documents. Go-Live-Checkliste um beide Seeder ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-06 09:25:16 +00:00
parent 7510e7633e
commit 0bec71ffa5
8 changed files with 213 additions and 18 deletions

View file

@ -4,22 +4,20 @@
@section('meta_description', 'Veröffentlichungsrichtlinien für Pressemitteilungen auf presseecho.de und businessportal24.com: Prüfverfahren, Anforderungen und Ablehnungskategorien.')
@php
// Rechtstexte-Architektur E3: Rahmentext v0.1 (03.07.2026). Die
// Ablehnungskategorien sind hier zum Launch statisch (K1–K6); das
// rejection_categories-System (live aus der DB) ist R3.1-Backlog.
// Rechtstexte-Architektur E3: statischer Rahmentext + dynamische
// Kategorienliste aus rejection_categories — neue/angepasste Kategorien
// erscheinen ohne Textänderung. Version/Stand aus legal_documents.
$host = request()->getHost();
$isHub = str_contains($host, 'pressekonto');
$brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24');
$contactEmail = (string) config('legal.contact_email');
$rejectionCategories = [
['code' => 'K1', 'label' => 'Rechtswidrige Inhalte', 'desc' => 'Inhalte, die gegen geltendes Recht verstoßen — etwa strafbare Inhalte, Verstöße gegen das Wettbewerbs- oder Heilmittelwerberecht, Angebote verbotener Produkte oder Dienstleistungen.'],
['code' => 'K2', 'label' => 'Explizite oder jugendgefährdende Inhalte', 'desc' => 'Pornografische, gewaltverherrlichende oder anderweitig jugendgefährdende Darstellungen in Text oder Bild.'],
['code' => 'K3', 'label' => 'Hass und Diskriminierung', 'desc' => 'Inhalte, die Menschen wegen ihrer Herkunft, Religion, Geschlechtsidentität, sexuellen Orientierung, Behinderung oder vergleichbarer Merkmale herabwürdigen oder zu Hass aufrufen.'],
['code' => 'K4', 'label' => 'Irreführung und Falschbehauptung', 'desc' => 'Nachweislich falsche Tatsachenbehauptungen, erfundene Studien oder Zitate, Täuschung über den Absender sowie gesundheits- oder finanzbezogene Heilsversprechen ohne Grundlage.'],
['code' => 'K5', 'label' => 'Rechte Dritter', 'desc' => 'Verletzung von Urheber-, Marken- oder Persönlichkeitsrechten — etwa fremde Texte oder Bilder ohne Lizenz, unbefugte Namensnennung, herabsetzende Aussagen über Dritte.'],
['code' => 'K6', 'label' => 'Kein Pressecharakter / Spam', 'desc' => 'Reine Werbe- oder Verkaufstexte ohne Nachrichtenwert, Keyword-Spam, automatisch generierte Masseninhalte ohne inhaltliche Substanz, Duplikate bereits veröffentlichter Mitteilungen.'],
];
$rejectionCategories = \App\Models\RejectionCategory::query()->active()->ordered()->get();
$guidelinesDocument = \App\Models\LegalDocument::current(\App\Models\LegalDocument::TYPE_RICHTLINIEN);
$guidelinesStand = $guidelinesDocument
? 'Stand: '.$guidelinesDocument->effectiveFromFormatted().' · Version '.$guidelinesDocument->version
: 'Stand: 3. Juli 2026 · Version 0.1';
@endphp
@section('content')
@ -27,7 +25,7 @@
eyebrow="Rechtliches"
title="Veröffentlichungsrichtlinien"
breadcrumb="Richtlinien"
updated="Stand: 3. Juli 2026 · Version 0.1"
updated="{{ $guidelinesStand }}"
>
<div class="pm-body max-w-[760px]">
<p>
@ -69,12 +67,15 @@
<div class="max-w-[760px] mt-4 border border-bg-rule divide-y divide-bg-rule">
@foreach ($rejectionCategories as $category)
<div id="{{ $category['code'] }}" class="px-5 py-4 scroll-mt-6">
<div id="{{ $category->code }}" class="px-5 py-4 scroll-mt-6">
<div class="flex items-baseline gap-3">
<span class="font-mono text-[12px] font-bold text-ink-3 flex-shrink-0">{{ $category['code'] }}</span>
<span class="font-mono text-[12px] font-bold text-ink-3 flex-shrink-0">{{ $category->code }}</span>
<div>
<h3 class="text-[14.5px] font-semibold text-ink m-0">{{ $category['label'] }}</h3>
<p class="text-[13px] leading-[1.6] text-ink-2 mt-1.5 mb-0">{{ $category['desc'] }}</p>
<h3 class="text-[14.5px] font-semibold text-ink m-0">{{ $category->public_label }}</h3>
<p class="text-[13px] leading-[1.6] text-ink-2 mt-1.5 mb-0">{{ $category->public_desc }}</p>
@if ($category->examples)
<p class="text-[12px] leading-[1.6] text-ink-3 mt-1.5 mb-0">Beispiele: {{ $category->examples }}</p>
@endif
</div>
</div>
</div>