Replaces the [PLACEHOLDER] entries in the Recht-Tab with the real legal-entity data published on flemming.ai (single source of truth across F∆I surfaces): - Anbieter Dr. Stefan Flemming, Flemming.IT, freiberuflich - Anschrift Dardanellenweg 41, 12109 Berlin - Kontakt contact@flemming.ai, +49 30 66302929 - USt-IdNr. DE269393425 (§ 27a UStG) - Verantw. Dr. Stefan Flemming (§ 18 Abs. 2 MStV) - Hosting Hetzner Online GmbH, Gunzenhausen (AVV nach Art. 28) - Logs max. 14 Tage Also brings the wording in line with the current §-Lage: - § 5 TMG / § 7 Abs. 1 TMG → § 5 DDG / § 7 Abs. 1 DDG (Digitale-Dienste-Gesetz seit Mai 2024 — das TMG existiert in der zitierten Form nicht mehr). - Adds the standard 'Haftung für Inhalte', 'Haftung für Links' und 'Urheberrecht'-Abschnitte des fai_web-Templates, Letzterer verweist auf Abschnitt 3 (§ 5 UrhG amtliche Werke) für die in der App dargestellten Norm-Texte. Recl∆Im ist damit aus Recht-Sicht so weit, wie fai_web es ist — und gleichermaßen reif für eine öffentliche Sichtbarkeit, sobald Methodik-Beirat + Volljuristen-Approval-Kette stehen. Signed-off-by: flemming-it <sf@flemming.it>
357 lines
15 KiB
Dart
357 lines
15 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:url_launcher/url_launcher.dart';
|
||
|
||
import '../theme/reclaim_tokens.dart';
|
||
import '../widgets/reclaim_card.dart';
|
||
|
||
/// Combined legal-information page. Six sections in the order
|
||
/// a careful reader cares about them. The legal-entity data
|
||
/// (Anbieter, Anschrift, USt-IdNr., Hosting-Provider, …) mirrors
|
||
/// the upstream fai_web (`flemming.ai`) authoritative version
|
||
/// to keep the public-facing F∆I posture consistent across
|
||
/// surfaces.
|
||
class LegalPage extends StatelessWidget {
|
||
const LegalPage({super.key});
|
||
|
||
static const _email = 'contact@flemming.ai';
|
||
static const _phone = '+49 30 66302929';
|
||
static const _stand = 'Stand: Juni 2026';
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
final t = Theme.of(context).textTheme;
|
||
return SingleChildScrollView(
|
||
padding: const EdgeInsets.all(ReclaimSpace.xl),
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
Text('Recht & Hinweise', style: t.displaySmall),
|
||
const SizedBox(height: ReclaimSpace.xs),
|
||
Text(
|
||
'Disclaimer, AI-Act-Transparenz, Urheberrecht, '
|
||
'Datenschutz, Impressum, Lizenz.',
|
||
style: t.bodyLarge?.copyWith(color: ReclaimColors.mute),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 1. Disclaimer
|
||
ReclaimCard(
|
||
accent: true,
|
||
child: _Section(
|
||
title: '1. Disclaimer — keine Rechtsberatung',
|
||
children: [
|
||
_p(t,
|
||
'Recl∆Im liefert eine methodisch-strukturierte '
|
||
'Wirkungsanalyse von Rechtsnormen. Die Ergebnisse sind '
|
||
'KEINE Rechtsberatung im Sinne des '
|
||
'Rechtsdienstleistungsgesetzes (RDG) und ersetzen weder '
|
||
'eine individuelle juristische Prüfung noch eine '
|
||
'Auskunft der zuständigen Behörden oder Kammern.'),
|
||
_p(t,
|
||
'Alle Bewertungs-Zahlen tragen eine Evidenz-Tier-Stufe '
|
||
'(T1–T4). Stufen T3/T4 sind nicht peer-reviewed und '
|
||
'dienen ausschließlich als Hinweis-/Anregungs-Wert. '
|
||
'Eine Reform- oder Streichungs-Empfehlung der '
|
||
'Anwendung ist ein methodischer Vorschlag, keine '
|
||
'politische Forderung.'),
|
||
_p(t,
|
||
'Die Demo-Daten (fünf Pilot-Normen) sind '
|
||
'Plausibilitäts-Schätzungen ohne NKR-Validierung. '
|
||
'Bevor eine Zahl in eine politische Vorlage übernommen '
|
||
'wird, ist die zugrundeliegende Quelle einzeln zu '
|
||
'prüfen.'),
|
||
],
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 2. AI Act
|
||
ReclaimCard(
|
||
child: _Section(
|
||
title: '2. EU AI Act — Transparenz nach Art. 50',
|
||
children: [
|
||
_p(t,
|
||
'Recl∆Im setzt Künstliche-Intelligenz-Komponenten ein: '
|
||
'Large-Language-Modelle (LLM) zur Vorschlags-Extraktion '
|
||
'aus Norm-Texten und zur Synthese von Reform-Texten. '
|
||
'Jede LLM-erzeugte Aussage ist kennzeichnungspflichtig '
|
||
'und mit RAG-Quellen-Pflicht hinterlegt; Aussagen ohne '
|
||
'zitierfähige Quelle werden verworfen.'),
|
||
_p(t,
|
||
'Recl∆Im ist KEIN Hochrisiko-KI-System nach Anhang III '
|
||
'der KI-Verordnung. Die Anwendung trifft keine '
|
||
'Verwaltungsentscheidungen, generiert keine Rechtsakte, '
|
||
'beeinflusst nicht direkt Beschäftigungs-, Bildungs- '
|
||
'oder Sozialleistungs-Verfahren. Sie dient ausschließlich '
|
||
'der Recherche, Visualisierung und Vorschlags-Generierung '
|
||
'für menschliche Entscheidungsträger.'),
|
||
_p(t,
|
||
'Jede Bewertung durchläuft vor Veröffentlichung einen '
|
||
'`system.approval@^0`-Schritt (Human-in-the-Loop). '
|
||
'Die menschliche Letztverantwortung ist nicht '
|
||
'überschreibbar.'),
|
||
_p(t,
|
||
'Verwendete Modelle und ihre Digests werden im '
|
||
'tamper-evidenten Audit-Log des Ch∆In-Hubs gespeichert. '
|
||
'Reproduzierbarkeit erfolgt mit Temperature ≤ 0,1 und '
|
||
'festem Prompt-Hash.'),
|
||
],
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 3. Quellen + UrhG
|
||
ReclaimCard(
|
||
child: _Section(
|
||
title: '3. Quellen & Urheberrecht (§ 5 UrhG)',
|
||
children: [
|
||
_p(t,
|
||
'Die in der Anwendung dargestellten Gesetzes- und '
|
||
'Verordnungs-Texte sind amtliche Werke im Sinne des '
|
||
'§ 5 UrhG und damit gemeinfrei. Die kanonischen Quellen '
|
||
'sind verlinkt und durch SHA-256-Prüfsummen im '
|
||
'Audit-Log nachvollziehbar.'),
|
||
_p(t, 'Primärquellen (T1):'),
|
||
_bullet(t,
|
||
'Bundesrecht: gesetze-im-internet.de (BMJ) — § 5 UrhG.'),
|
||
_bullet(t,
|
||
'EU-Recht: EUR-Lex (Europäische Kommission) — '
|
||
'Mehrsprachigkeit nach Verordnung (EU) Nr. 1257/2012.'),
|
||
_bullet(t,
|
||
'Landesrecht Berlin: gesetze.berlin.de / '
|
||
'landesrecht-berlin.de — § 5 UrhG.'),
|
||
_p(t, 'Sekundärquellen (T1/T2):'),
|
||
_bullet(t,
|
||
'Nationaler Normenkontrollrat (NKR) — '
|
||
'Bürokratiekosten-Datenbank, Methodenleitfaden.'),
|
||
_bullet(t,
|
||
'Statistisches Bundesamt (DESTATIS) — '
|
||
'Unternehmensregister, Bürokratiekostenindex.'),
|
||
_bullet(t,
|
||
'DIHK, ZDH, IHK Berlin, BDI — '
|
||
'Verbands-Erhebungen mit Quellen-Angabe.'),
|
||
_p(t,
|
||
'Eigene Methodik und Software-Code sind unter '
|
||
'Apache License 2.0 veröffentlicht; '
|
||
'Code-Repository: git.flemming.ai/fai/reclaim.'),
|
||
],
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 4. Datenschutz
|
||
ReclaimCard(
|
||
child: _Section(
|
||
title: '4. Datenschutzerklärung (DSGVO Art. 13)',
|
||
children: [
|
||
_h(t, 'Verantwortlicher'),
|
||
_p(t,
|
||
'Verantwortlich für die Datenverarbeitung in dieser '
|
||
'Anwendung ist Dr. Stefan Flemming '
|
||
'(Flemming.IT — Beratung und Entwicklung), '
|
||
'Dardanellenweg 41, 12109 Berlin, Deutschland. '
|
||
'Kontakt: $_email'),
|
||
_h(t, 'Hosting & Server-Logs'),
|
||
_p(t,
|
||
'Wird die Anwendung als Webseite bereitgestellt, läuft '
|
||
'sie auf Servern der Hetzner Online GmbH, '
|
||
'Industriestr. 25, 91710 Gunzenhausen, Deutschland. '
|
||
'Beim Aufruf werden technisch notwendige Zugriffsdaten '
|
||
'(IP-Adresse, Datum/Uhrzeit, abgerufene Ressource, '
|
||
'Referrer, User-Agent) in Server-Logfiles verarbeitet. '
|
||
'Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO '
|
||
'(berechtigtes Interesse an Betrieb und Sicherheit). '
|
||
'Mit Hetzner besteht ein Vertrag zur Auftragsverarbeitung '
|
||
'gemäß Art. 28 DSGVO; Server-Logfiles werden nach '
|
||
'spätestens 14 Tagen gelöscht.'),
|
||
_p(t,
|
||
'Im Desktop-/Mock-Modus werden keine personenbezogenen '
|
||
'Daten erhoben; alle Daten verbleiben lokal auf dem '
|
||
'Endgerät.'),
|
||
_h(t, 'Cookies & Tracking'),
|
||
_p(t,
|
||
'Die Anwendung setzt keine Tracking- oder '
|
||
'Marketing-Cookies und bindet keine externen '
|
||
'Analysedienste ein. Eine Cookie-Einwilligung ist daher '
|
||
'nicht erforderlich.'),
|
||
_h(t, 'Kontaktaufnahme'),
|
||
_p(t,
|
||
'Wenn Sie uns per E-Mail kontaktieren, verarbeiten wir '
|
||
'die übermittelten Daten zur Bearbeitung Ihrer Anfrage '
|
||
'(Art. 6 Abs. 1 lit. b bzw. f DSGVO). Die Daten werden '
|
||
'gelöscht, sobald sie für den Zweck nicht mehr '
|
||
'erforderlich sind.'),
|
||
_h(t, 'Ihre Rechte'),
|
||
_p(t,
|
||
'Sie haben das Recht auf Auskunft, Berichtigung, '
|
||
'Löschung, Einschränkung der Verarbeitung, '
|
||
'Datenübertragbarkeit und Widerspruch '
|
||
'(Art. 15–21 DSGVO) sowie das Recht auf Beschwerde '
|
||
'bei einer Aufsichtsbehörde, etwa der Berliner '
|
||
'Beauftragten für Datenschutz und Informationsfreiheit, '
|
||
'Friedrichstr. 219, 10969 Berlin.'),
|
||
_p(t, _stand),
|
||
],
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 5. Impressum
|
||
ReclaimCard(
|
||
child: _Section(
|
||
title: '5. Impressum',
|
||
children: [
|
||
_h(t, 'Angaben gemäß § 5 DDG'),
|
||
_p(t,
|
||
'Dr. Stefan Flemming\n'
|
||
'Flemming.IT — Beratung und Entwicklung, freiberuflich '
|
||
'(www.flemming.it)\n'
|
||
'Dardanellenweg 41\n'
|
||
'12109 Berlin\n'
|
||
'Deutschland'),
|
||
_h(t, 'Kontakt'),
|
||
_p(t, 'E-Mail: $_email\nTelefon: $_phone'),
|
||
_h(t, 'Umsatzsteuer-ID'),
|
||
_p(t,
|
||
'Umsatzsteuer-Identifikationsnummer gemäß § 27a UStG: '
|
||
'DE269393425'),
|
||
_h(t, 'Verantwortlich i.S.d. § 18 Abs. 2 MStV'),
|
||
_p(t, 'Dr. Stefan Flemming, Anschrift wie oben.'),
|
||
_h(t, 'Haftung für Inhalte'),
|
||
_p(t,
|
||
'Als Diensteanbieter sind wir gemäß § 7 Abs. 1 DDG für '
|
||
'eigene Inhalte auf diesen Seiten nach den allgemeinen '
|
||
'Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG sind wir '
|
||
'als Diensteanbieter jedoch nicht verpflichtet, '
|
||
'übermittelte oder gespeicherte fremde Informationen '
|
||
'zu überwachen oder nach Umständen zu forschen, die '
|
||
'auf eine rechtswidrige Tätigkeit hinweisen.'),
|
||
_h(t, 'Haftung für Links'),
|
||
_p(t,
|
||
'Unser Angebot enthält ggf. Links zu externen Websites '
|
||
'Dritter, auf deren Inhalte wir keinen Einfluss haben. '
|
||
'Deshalb können wir für diese fremden Inhalte auch '
|
||
'keine Gewähr übernehmen. Für die Inhalte der '
|
||
'verlinkten Seiten ist stets der jeweilige Anbieter '
|
||
'oder Betreiber verantwortlich.'),
|
||
_h(t, 'Urheberrecht'),
|
||
_p(t,
|
||
'Die durch die Seitenbetreiber erstellten Inhalte und '
|
||
'Werke auf diesen Seiten unterliegen dem deutschen '
|
||
'Urheberrecht. Beiträge Dritter sind als solche '
|
||
'gekennzeichnet. Davon unberührt bleibt § 5 UrhG für '
|
||
'die wiedergegebenen amtlichen Werke (vgl. Abschnitt 3).'),
|
||
_p(t,
|
||
'Plattform der Europäischen Kommission zur '
|
||
'außergerichtlichen Online-Streitbeilegung (Art. 14 '
|
||
'Abs. 1 ODR-VO): ec.europa.eu/consumers/odr. Wir sind '
|
||
'nicht bereit oder verpflichtet, an '
|
||
'Streitbeilegungsverfahren vor einer '
|
||
'Verbraucherschlichtungsstelle teilzunehmen.'),
|
||
_p(t, _stand),
|
||
],
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.lg),
|
||
|
||
// 6. Open Source
|
||
ReclaimCard(
|
||
child: _Section(
|
||
title: '6. Open Source & Lizenz',
|
||
children: [
|
||
_p(t,
|
||
'Recl∆Im ist freie Software, lizenziert unter der '
|
||
'Apache License, Version 2.0. Der Quelltext, die '
|
||
'Module und die Methodik sind öffentlich einsehbar '
|
||
'unter:'),
|
||
InkWell(
|
||
onTap: () => launchUrl(
|
||
Uri.parse('https://git.flemming.ai/fai/reclaim'),
|
||
mode: LaunchMode.externalApplication,
|
||
),
|
||
child: Text(
|
||
'https://git.flemming.ai/fai/reclaim',
|
||
style: t.bodyLarge?.copyWith(
|
||
color: ReclaimColors.signal,
|
||
decoration: TextDecoration.underline,
|
||
fontFamily: ReclaimTypography.mono,
|
||
),
|
||
),
|
||
),
|
||
const SizedBox(height: ReclaimSpace.sm),
|
||
_p(t,
|
||
'Plattform: Ch∆In (Apache 2.0). Methodische Vorbilder '
|
||
'und Lizenz-Hinweise stehen in der Datei NOTICE im '
|
||
'Repository.'),
|
||
_p(t,
|
||
'Beiträge willkommen. DCO Sign-off und Conventional '
|
||
'Commits in Englisch sind Konvention.'),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
class _Section extends StatelessWidget {
|
||
const _Section({required this.title, required this.children});
|
||
|
||
final String title;
|
||
final List<Widget> children;
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
final t = Theme.of(context).textTheme;
|
||
return Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
Text(title, style: t.headlineSmall),
|
||
const SizedBox(height: ReclaimSpace.md),
|
||
...children,
|
||
],
|
||
);
|
||
}
|
||
}
|
||
|
||
Widget _h(TextTheme t, String s) => Padding(
|
||
padding: const EdgeInsets.only(
|
||
top: ReclaimSpace.sm,
|
||
bottom: 4,
|
||
),
|
||
child: Text(s,
|
||
style: t.titleMedium?.copyWith(color: ReclaimColors.signal)),
|
||
);
|
||
|
||
Widget _p(TextTheme t, String s) => Padding(
|
||
padding: const EdgeInsets.only(bottom: ReclaimSpace.sm),
|
||
child: SelectableText(s, style: t.bodyLarge?.copyWith(height: 1.55)),
|
||
);
|
||
|
||
Widget _bullet(TextTheme t, String s) => Padding(
|
||
padding: const EdgeInsets.only(
|
||
left: ReclaimSpace.lg,
|
||
bottom: ReclaimSpace.xs,
|
||
),
|
||
child: Row(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
Padding(
|
||
padding: const EdgeInsets.only(top: 8, right: 10),
|
||
child: Container(
|
||
width: 5,
|
||
height: 5,
|
||
decoration: const BoxDecoration(
|
||
color: ReclaimColors.signal,
|
||
shape: BoxShape.circle,
|
||
),
|
||
),
|
||
),
|
||
Expanded(
|
||
child: SelectableText(s,
|
||
style: t.bodyLarge?.copyWith(height: 1.55)),
|
||
),
|
||
],
|
||
),
|
||
);
|