KI-Kennzeichnung (Art. 50 KI-VO): Pflicht-Deklaration für Text & Bilder

Selbstdeklaration des KI-Einsatzes je PM (Text) und je Bild inkl.
Submit-Gate im PressReleaseService, versioniertem Audit-Trail
(press_release_ai_declarations) und öffentlichem KI-Label in
Einreicher-Stimme. Bestätigung im Submit-Modal ist Pflicht.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-07-09 13:54:43 +00:00
parent 1822dcbcd1
commit c387048d7e
16 changed files with 833 additions and 3 deletions

View file

@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\AiTextDeclaration;
use App\Enums\Portal;
use App\Enums\PressReleaseClassification;
use App\Enums\PressReleaseContentTier;
@ -71,6 +72,8 @@ class PressRelease extends Model
'placeholder_variant',
'backlink_url',
'keywords',
'ai_text_declaration',
'ai_declaration_confirmed_at',
'status',
'classification',
'classified_at',
@ -95,6 +98,8 @@ class PressRelease extends Model
return [
'portal' => Portal::class,
'placeholder_variant' => PressReleasePlaceholder::class,
'ai_text_declaration' => AiTextDeclaration::class,
'ai_declaration_confirmed_at' => 'datetime',
'status' => PressReleaseStatus::class,
'classification' => PressReleaseClassification::class,
'classified_at' => 'datetime',
@ -166,6 +171,25 @@ class PressRelease extends Model
return $this->hasMany(PressReleaseStatusLog::class)->orderByDesc('created_at');
}
/**
* Versionierter Audit-Trail der KI-Deklarationen (Art. 50 KI-VO) —
* jeder Submit erzeugt einen neuen, unveränderlichen Eintrag.
*/
public function aiDeclarations(): HasMany
{
return $this->hasMany(PressReleaseAiDeclaration::class)->orderByDesc('created_at');
}
/**
* Öffentliches KI-Label in Einreicher-Stimme — null, wenn nach dem
* deklarierten KI-Grad kein Pflicht-Label fällig ist (ohne KI /
* Formulierungshilfe) oder noch keine Deklaration vorliegt.
*/
public function aiTextPublicLabel(): ?string
{
return $this->ai_text_declaration?->publicLabel();
}
/**
* Öffentliche Detailseiten je Portal, auf dem die PM erscheint
* (bei Portal::Both beide Spokes). Zentrale Quelle für Mail,