reclaim/app/lib/pages/about_page.dart
flemming-it 8ee6a294a1 feat: initial F∆I Law-Heatmap Phase 0 scaffold
First end-to-end-buildable cut of the pflicht-/graph-basierte
Wirkungsanalyse von Rechtsnormen, running on Ch∆In. Demo runs
without external dependencies and without a hub connection so
the methodology + UI stack can be reviewed before any Verbands-
Kooperation or Beirats-Validierung kicks in.

Tree layout

  MACHBARKEITSSTUDIE.md       v0.3 — pflicht-basierte Methodik,
                              4-Tier-Evidenz, 8 law*-Module
                              auf Ch∆In statt der alten F∆I-
                              Plattform.
  RUN.md                      one-page how-to-run.
  flows/durchstich-gewo-14.yaml
                              vertical Phase-0 flow: pull →
                              normalize → duties → citations →
                              cohort → skm → frust → benefit →
                              attribution → system.approval.
  app/                        Flutter macOS client, design
                              language pulled from fai_web
                              (ink #08090A, paper #F4F3EF,
                              petrol signal #2E8F9E). Mock
                              repository ships five fixture
                              norms with real source URLs and a
                              permanent T4 demo-banner so no
                              figure can be mistaken for a
                              validated one.

Module repos (separate, see chain-modules*/):

  text-akoma-normalize, text-deontic-extract, graph-citation-
  extract, text-readability-score, stats-cohort-size, graph-
  shapley-attribution, econ-skm-score, law-benefit-score.

What runs today

  - flutter analyze: 0 issues
  - flutter test: 2/2 (landing + nav-to-shell smoke)
  - flutter build macos (via app/build-macos.sh) and ad-hoc
    codesign, app launches and the Dart VM service comes up
  - native cargo test green on every module
  - cargo build --release --target wasm32-wasip2 produces a
    130 KiB artefact for text-akoma-normalize

What is deliberately mock / stub

  - gRPC wire from the client to a chain serve hub (Repository
    abstraction is in place; live impl is the next step)
  - NKR Bürokratiekosten-Datenbank ingestion (for the canonical
    h-Werte that close out the Engpass per Studie §6.7)
  - DESTATIS GENESIS-API adapter for stats.cohort_size

License: Apache-2.0. Author/contact in MACHBARKEITSSTUDIE.md.
Signed-off-by: flemming-it <sf@flemming.it>
2026-06-18 11:26:28 +02:00

129 lines
5.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import '../theme/lawheatmap_tokens.dart';
import '../widgets/lawheatmap_card.dart';
class AboutPage extends StatelessWidget {
const AboutPage({super.key});
@override
Widget build(BuildContext context) {
final t = Theme.of(context).textTheme;
return SingleChildScrollView(
padding: const EdgeInsets.all(LawHeatmapSpace.xl),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Methodik & Quellen', style: t.displaySmall),
const SizedBox(height: LawHeatmapSpace.xs),
Text(
'Wie das System bewertet, woran es sich messen lässt.',
style: t.bodyLarge?.copyWith(color: LawHeatmapColors.mute),
),
const SizedBox(height: LawHeatmapSpace.lg),
LawHeatmapCard(
accent: true,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Drei nicht verhandelbare Sätze',
style: t.headlineSmall),
const SizedBox(height: LawHeatmapSpace.md),
Text(
'1. Wir bewerten Pflichten, nicht Gesetze.\n'
'2. Jede Zahl trägt die Tier-Stufe ihres schwächsten '
'Bestandteils. Kein figürlich-runder Wert ohne Quelle.\n'
'3. Kein Output verlässt das System ohne Juristen-Gate '
'(`system.approval@^0`).',
style: t.bodyLarge?.copyWith(height: 1.7),
),
],
),
),
const SizedBox(height: LawHeatmapSpace.lg),
LawHeatmapCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Methodische Vorbilder', style: t.headlineSmall),
const SizedBox(height: LawHeatmapSpace.sm),
_bullet(t,
'Standardkostenmodell (SKM) — Nationaler Normenkontrollrat. P × F × T × h.'),
_bullet(t,
'Coupette / Katz / Bommarito 2021 — Netzwerkanalyse deutsches Bundesrecht (Graph-Schema).'),
_bullet(t,
'Mercatus QuantGov / RegData — NLP-basierte Pflicht-Klassifikation (must/shall/may).'),
_bullet(t,
'EU Better Regulation Toolbox + REFIT — Cost-Benefit + Evaluations-Methodik.'),
_bullet(t,
'Akoma Ntoso 1.0 (OASIS) + LegalRuleML — XML-Format und Deontik-Datenmodell.'),
_bullet(t,
'UK Better Regulation Framework — Regulatory Policy Committee als unabhängige Letzt-Validierung.'),
],
),
),
const SizedBox(height: LawHeatmapSpace.lg),
LawHeatmapCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('4-Tier-Evidenz-Modell', style: t.headlineSmall),
const SizedBox(height: LawHeatmapSpace.sm),
_bullet(t,
'T1 — amtlich/peer-reviewed: NKR, DESTATIS, ifo, ZEW, BMWK, SVR, IfM Bonn.'),
_bullet(t,
'T2 — Verbands-Erhebung: DIHK, IHK Berlin, ZDH, BDI Mittelstand, BVMW, HDE.'),
_bullet(t,
'T3 — eigene strukturierte Erhebung (Phase 2/3, DSGVO-anonymisiert).'),
_bullet(t,
'T4 — qualitatives Signal: Petitionen, openPetition, mein.berlin.de, Foren — nur Pain-Indikator.'),
],
),
),
const SizedBox(height: LawHeatmapSpace.lg),
LawHeatmapCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Plattform', style: t.headlineSmall),
const SizedBox(height: LawHeatmapSpace.sm),
Text(
'Ch∆In v0.16.0 (vormals F∆I-Plattform) — Vendor: '
'F∆I = Flemming.AI. Hub. Module. Flow. Deterministisch, '
'WASM-sandboxed, tamper-evident Audit-Log '
'(CHAIN-EVENT-V3), Apache 2.0, CRA-ready.',
style: t.bodyLarge?.copyWith(height: 1.6),
),
],
),
),
],
),
);
}
Widget _bullet(TextTheme t, String text) {
return Padding(
padding: const EdgeInsets.only(bottom: LawHeatmapSpace.sm),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 6, right: 10),
child: Container(
width: 5,
height: 5,
decoration: const BoxDecoration(
color: LawHeatmapColors.signal,
shape: BoxShape.circle,
),
),
),
Expanded(
child: Text(text, style: t.bodyLarge?.copyWith(height: 1.6)),
),
],
),
);
}
}