KI-Kennzeichnung: 2 Optionen im Submit-Modal + Labels auf Detailseite

Submit-Modal auf zwei Auswahloptionen reduziert (kein Label vs.
"Ganz oder ueberwiegend mit generativer KI erstellt"); alle vier
Enum-Werte bleiben fuer API/Bestand gueltig und mappen per formOption()
auf die zwei Gruppen. Oeffentliche Detailseite rendert jetzt Text-Label
("KI-generiert: Nach Angaben ...") und Bild-Badge (KI-generiert/
KI-bearbeitet, abgedunkelter Hintergrund) — fehlte dort bisher komplett.
Bildnachweis-Vorschlag ohne "Foto:"-Praefix (stand sonst doppelt).
Einreich-Toast + FAQ: automatische Pruefung in Minuten statt 24 h.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-07-10 16:51:23 +00:00
parent c8836564e9
commit dc2a3443c1
13 changed files with 172 additions and 50 deletions

View file

@ -41,18 +41,29 @@ function makeAiDeclarationCustomer(): array
}
test('the text declaration maps to the attributed public label per decision update', function () {
// Zwei Gruppen (Vereinfachung 10.07.2026): None/Assisted → kein Label,
// MostlyAi/FullyAi → gemeinsames „KI-generiert"-Label in Einreicher-Stimme.
expect(AiTextDeclaration::None->publicLabel())->toBeNull();
expect(AiTextDeclaration::Assisted->publicLabel())->toBeNull();
expect(AiTextDeclaration::MostlyAi->publicLabel())
->toBe('Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung überwiegend mit generativer KI erstellt.');
->toBe('KI-generiert: Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung ganz oder überwiegend mit generativer KI erstellt.');
expect(AiTextDeclaration::FullyAi->publicLabel())
->toBe('Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung vollständig mit generativer KI erstellt.');
->toBe('KI-generiert: Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung ganz oder überwiegend mit generativer KI erstellt.');
});
test('every stored value maps onto one of the two form options', function () {
expect(AiTextDeclaration::None->formOption())->toBe(AiTextDeclaration::None);
expect(AiTextDeclaration::Assisted->formOption())->toBe(AiTextDeclaration::None);
expect(AiTextDeclaration::MostlyAi->formOption())->toBe(AiTextDeclaration::MostlyAi);
expect(AiTextDeclaration::FullyAi->formOption())->toBe(AiTextDeclaration::MostlyAi);
expect(AiTextDeclaration::formCases())->toBe([AiTextDeclaration::None, AiTextDeclaration::MostlyAi]);
});
test('the image declaration maps to the public image hint per decision update', function () {
// Kurzform als Badge direkt am Bild (User-Entscheidung 10.07.2026).
expect(AiImageDeclaration::Original->publicLabel())->toBeNull();
expect(AiImageDeclaration::AiGenerated->publicLabel())->toBe('Bildhinweis: KI-generierte Illustration.');
expect(AiImageDeclaration::AiEdited->publicLabel())->toBe('Bildhinweis: KI-bearbeitetes Bild.');
expect(AiImageDeclaration::AiGenerated->publicLabel())->toBe('KI-generiert');
expect(AiImageDeclaration::AiEdited->publicLabel())->toBe('KI-bearbeitet');
});
test('submit is blocked without a complete ai declaration', function () {
@ -199,7 +210,7 @@ test('submitting from the create editor persists the declaration and the audit e
expect($pr->ai_text_declaration)->toBe(AiTextDeclaration::FullyAi);
expect($pr->ai_declaration_confirmed_at)->not->toBeNull();
expect($pr->aiTextPublicLabel())
->toBe('Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung vollständig mit generativer KI erstellt.');
->toBe('KI-generiert: Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung ganz oder überwiegend mit generativer KI erstellt.');
$entry = PressReleaseAiDeclaration::query()->sole();
expect($entry->press_release_id)->toBe($pr->id);
@ -254,8 +265,8 @@ test('the submit modal renders the declaration options and the binding confirmat
LivewireVolt::test('customer.press-releases.show', ['id' => $pr->id])
->assertSee('KI-Kennzeichnung')
->assertSee('Ohne generative KI erstellt')
->assertSee('Vollständig KI-generiert (ohne wesentliche menschliche Bearbeitung)')
->assertSee('Ohne generative KI erstellt – oder KI nur als Formulierungshilfe, mit anschließender menschlicher Überarbeitung und Verantwortung.')
->assertSee('Ganz oder überwiegend mit generativer KI erstellt.')
->assertSee('Ich bestätige, dass meine Angaben zum Einsatz generativer KI vollständig und wahrheitsgemäß sind.');
});