Compare commits
No commits in common. "34c325e4195d302381b3cf1656a3bbfb77db90a5" and "7a8bd339be85307cc52663a45a7b03d84aebd6bf" have entirely different histories.
34c325e419
...
7a8bd339be
6 changed files with 106 additions and 187 deletions
|
|
@ -112,19 +112,6 @@ class _HeatmapPageState extends State<HeatmapPage> {
|
||||||
'${e.norm.jurabk} ${e.norm.paragraph}',
|
'${e.norm.jurabk} ${e.norm.paragraph}',
|
||||||
style: t.labelLarge,
|
style: t.labelLarge,
|
||||||
),
|
),
|
||||||
Text(
|
|
||||||
' · ',
|
|
||||||
style: t.labelLarge?.copyWith(
|
|
||||||
color: ReclaimColors.mute,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
e.norm.title,
|
|
||||||
style: t.labelLarge?.copyWith(
|
|
||||||
color: ReclaimColors.mute,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
Recl∆Im — primary brand lockup
|
|
||||||
Mark (the ∆ triangle with petrol eye) + wordmark on a single row.
|
|
||||||
Single-colour palette so it inverts cleanly on dark/light ink/paper
|
|
||||||
backdrops. ASCII spelling: reclaim.
|
|
||||||
|
|
||||||
Geometry mirrors fai_web's Logo.astro: the eye sits at the geometric
|
|
||||||
centroid of the triangle (a third up from the base). Stroke widths
|
|
||||||
are tuned for legibility down to 24 px tall.
|
|
||||||
|
|
||||||
Author: Dr. Stefan Flemming, F∆I (Flemming.AI). Apache-2.0.
|
|
||||||
-->
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 720 200"
|
|
||||||
role="img"
|
|
||||||
aria-label="Recl∆Im">
|
|
||||||
<defs>
|
|
||||||
<style>
|
|
||||||
:root { color-scheme: light dark; }
|
|
||||||
.ink { fill: #08090A; }
|
|
||||||
.paper { fill: #F4F3EF; }
|
|
||||||
.signal { fill: #2E8F9E; }
|
|
||||||
.stroke-ink { stroke: #08090A; }
|
|
||||||
.stroke-paper { stroke: #F4F3EF; }
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auto-ink { fill: #F4F3EF; }
|
|
||||||
.auto-stroke { stroke: #F4F3EF; }
|
|
||||||
}
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
.auto-ink { fill: #08090A; }
|
|
||||||
.auto-stroke { stroke: #08090A; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Mark: 160 x 160 box at left, triangle inset by 12 px.
|
|
||||||
Stroke 6 px, no fill, petrol eye at (80, 110) radius 10.
|
|
||||||
-->
|
|
||||||
<g transform="translate(20,20)">
|
|
||||||
<polygon class="auto-stroke"
|
|
||||||
points="80,12 148,148 12,148"
|
|
||||||
fill="none"
|
|
||||||
stroke-width="6"
|
|
||||||
stroke-linejoin="miter" />
|
|
||||||
<circle class="signal" cx="80" cy="110" r="10" />
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Wordmark "Recl∆Im" starting at x=210. Hand-fitted glyph
|
|
||||||
positions so the ∆ matches the mark's stroke weight and the I
|
|
||||||
above the ∆ becomes the dot/eye of "i". Petrol on the ∆I block.
|
|
||||||
-->
|
|
||||||
<g font-family="'Space Grotesk', 'Inter', system-ui, sans-serif"
|
|
||||||
font-weight="600"
|
|
||||||
font-size="120"
|
|
||||||
letter-spacing="-4">
|
|
||||||
<text x="210" y="138" class="auto-ink">Recl</text>
|
|
||||||
<text x="430" y="138" class="signal">∆I</text>
|
|
||||||
<text x="546" y="138" class="auto-ink">m</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2 KiB |
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
Recl∆Im — standalone mark (just the ∆ + eye).
|
|
||||||
Use as favicon source, social-share preview, and any context where
|
|
||||||
the wordmark would be too wide.
|
|
||||||
-->
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 160 160"
|
|
||||||
role="img"
|
|
||||||
aria-label="Recl∆Im — Mark">
|
|
||||||
<defs>
|
|
||||||
<style>
|
|
||||||
.signal { fill: #2E8F9E; }
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auto-stroke { stroke: #F4F3EF; }
|
|
||||||
}
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
.auto-stroke { stroke: #08090A; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</defs>
|
|
||||||
<polygon class="auto-stroke"
|
|
||||||
points="80,12 148,148 12,148"
|
|
||||||
fill="none"
|
|
||||||
stroke-width="6"
|
|
||||||
stroke-linejoin="miter" />
|
|
||||||
<circle class="signal" cx="80" cy="110" r="10" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 812 B |
|
|
@ -1,39 +0,0 @@
|
||||||
# Vertikaler Durchstich, Variante "ohne http-Permission".
|
|
||||||
#
|
|
||||||
# Nimmt das Norm-XML als bytes-Input direkt entgegen (statt es
|
|
||||||
# über http.request zu ziehen). Sinnvoll für den ersten end-to-
|
|
||||||
# end-Test gegen den lokal laufenden Hub, wenn dessen Operator-
|
|
||||||
# Policy noch keine Allowlist für gesetze-im-internet.de hat.
|
|
||||||
#
|
|
||||||
# Aufruf:
|
|
||||||
# chain run flows/durchstich-from-file.yaml \
|
|
||||||
# --input content=@/tmp/gewo-14-mini.xml \
|
|
||||||
# --input cohort_id=berlin-kmu
|
|
||||||
|
|
||||||
name: durchstich-from-file
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
content: bytes
|
|
||||||
cohort_id: text
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: normalize
|
|
||||||
use: text.akoma_normalize@^0
|
|
||||||
with:
|
|
||||||
content: $inputs.content
|
|
||||||
mime: "application/xml"
|
|
||||||
|
|
||||||
- id: cohort
|
|
||||||
use: stats.cohort_size@^0
|
|
||||||
with:
|
|
||||||
cohort_id: $inputs.cohort_id
|
|
||||||
|
|
||||||
- id: review
|
|
||||||
use: system.approval@^0
|
|
||||||
with:
|
|
||||||
title: "Recl∆Im — Review GewO §14"
|
|
||||||
payload: $normalize.norm
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
norm: $normalize.norm
|
|
||||||
cohort: $cohort.cohort
|
|
||||||
|
|
@ -1,53 +1,131 @@
|
||||||
# Phase-0 vertikaler Durchstich für GewO §14.
|
# Vertikaler Durchstich Phase 0 — eine Norm (GewO §14) durch
|
||||||
|
# alle 8 law*-Schritte + Juristen-Approval + Audit.
|
||||||
#
|
#
|
||||||
# Minimaler Pfad zum ersten echten flow.completed-Event im
|
# Voraussetzung:
|
||||||
# Audit-Log — http.request → text.akoma_normalize →
|
# chain install text.akoma_normalize text.deontic_extract \
|
||||||
# stats.cohort_size → system.approval. Beweist, dass die
|
# graph.citation_extract text.readability_score \
|
||||||
# Recl∆Im-Pipeline live gegen den Ch∆In-Hub läuft. Die
|
# stats.cohort_size graph.shapley_attribution \
|
||||||
# komplexen Bewertungs-Schritte (econ.skm_score,
|
# econ.skm_score law.benefit_score \
|
||||||
# law.benefit_score, graph.shapley_attribution) bündeln wir in
|
# http.request system.approval
|
||||||
# einem zweiten Flow, wenn dieser hier durchläuft.
|
|
||||||
#
|
|
||||||
# Voraussetzung — alle Module installieren:
|
|
||||||
# chain install --link <fai_chain_modules>/<modul>
|
|
||||||
# für: http-request, text-akoma-normalize, stats-cohort-size
|
|
||||||
#
|
#
|
||||||
# Aufruf:
|
# Aufruf:
|
||||||
# chain run flows/durchstich-gewo-14.yaml \
|
# chain run flows/durchstich-gewo-14.yaml \
|
||||||
# --input norm_url=https://www.gesetze-im-internet.de/gewo/__14.xml \
|
# --input norm_url=https://www.gesetze-im-internet.de/gewo/__14.xml \
|
||||||
# --input cohort_id=berlin-kmu
|
# --input cohort_id=berlin-kmu
|
||||||
|
|
||||||
name: durchstich-gewo-14
|
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
norm_url: text
|
norm_url:
|
||||||
cohort_id: text
|
type: string
|
||||||
|
required: true
|
||||||
|
description: ELI-resolvable URL der Quell-Norm
|
||||||
|
cohort_id:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
description: Adressaten-Kohorte (siehe stats.cohort_size v0.1)
|
||||||
|
tariff_eur_per_hour:
|
||||||
|
type: number
|
||||||
|
default: 35.0
|
||||||
|
description: SKM-Tarif T
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
norm: ${{ normalize.norm }}
|
||||||
|
duties: ${{ duties.duties }}
|
||||||
|
citations: ${{ citations.citations }}
|
||||||
|
cohort: ${{ cohort.cohort }}
|
||||||
|
skm: ${{ skm.report }}
|
||||||
|
frust: ${{ frust.score }}
|
||||||
|
benefit: ${{ benefit.score }}
|
||||||
|
attribution: ${{ attribution.attribution }}
|
||||||
|
reviewed: ${{ review.decision == 'approve' }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- id: pull
|
- id: pull
|
||||||
use: http.request@^0
|
use: http.request@^0
|
||||||
with:
|
with:
|
||||||
url: $inputs.norm_url
|
url: ${{ inputs.norm_url }}
|
||||||
method: "GET"
|
method: GET
|
||||||
|
etag_cache: true
|
||||||
|
|
||||||
- id: normalize
|
- id: normalize
|
||||||
use: text.akoma_normalize@^0
|
use: text.akoma_normalize@^0
|
||||||
with:
|
with:
|
||||||
content: $pull.body
|
content: ${{ pull.body }}
|
||||||
mime: "application/xml"
|
mime: application/xml
|
||||||
|
|
||||||
|
- id: duties
|
||||||
|
use: text.deontic_extract@^0
|
||||||
|
with:
|
||||||
|
norm: ${{ normalize.norm }}
|
||||||
|
|
||||||
|
- id: citations
|
||||||
|
use: graph.citation_extract@^0
|
||||||
|
with:
|
||||||
|
norm: ${{ normalize.norm }}
|
||||||
|
|
||||||
- id: cohort
|
- id: cohort
|
||||||
use: stats.cohort_size@^0
|
use: stats.cohort_size@^0
|
||||||
with:
|
with:
|
||||||
cohort_id: $inputs.cohort_id
|
cohort_id: ${{ inputs.cohort_id }}
|
||||||
|
|
||||||
|
# SKM-Aufbereitung: jede Duty bekommt P/F/T/h aus
|
||||||
|
# Kohorten-Größe + per-Duty-Heuristik (Phase 1: NKR-Datenbank).
|
||||||
|
# Hier inline aufgebaut; in Phase 1 wird das ein eigener
|
||||||
|
# `econ.duties_enrich`-Schritt.
|
||||||
|
- id: skm
|
||||||
|
use: econ.skm_score@^0
|
||||||
|
with:
|
||||||
|
duties:
|
||||||
|
duties:
|
||||||
|
- population: ${{ cohort.cohort.count }}
|
||||||
|
frequency: 1.0
|
||||||
|
tariff_eur_per_hour: ${{ inputs.tariff_eur_per_hour }}
|
||||||
|
time_hours_per_case: 0.5
|
||||||
|
source_norm: ${{ normalize.norm.eli }}
|
||||||
|
tier: ${{ cohort.cohort.tier }}
|
||||||
|
|
||||||
|
- id: frust
|
||||||
|
use: text.readability_score@^0
|
||||||
|
with:
|
||||||
|
norm: ${{ normalize.norm }}
|
||||||
|
graph: ${{ citations.citations }}
|
||||||
|
|
||||||
|
- id: benefit
|
||||||
|
use: law.benefit_score@^0
|
||||||
|
with:
|
||||||
|
ratings:
|
||||||
|
schutz: 2.0
|
||||||
|
markt: 3.0
|
||||||
|
rechtssicherheit: 3.5
|
||||||
|
eu_binnenmarkt: 2.0
|
||||||
|
sicherheit: 1.5
|
||||||
|
umwelt: 0.0
|
||||||
|
einnahmen: 2.0
|
||||||
|
_sources:
|
||||||
|
schutz: NKR Stellungnahme zur GewO 2018
|
||||||
|
rechtssicherheit: IHK Berlin Mittelstandsumfrage 2024
|
||||||
|
|
||||||
|
# Attribution-Schritt mit Demo-Graph aus citations.
|
||||||
|
# Phase 1: graph.normalize baut den vollen Norm-Graph hier.
|
||||||
|
- id: attribution
|
||||||
|
use: graph.shapley_attribution@^0
|
||||||
|
with:
|
||||||
|
graph:
|
||||||
|
nodes:
|
||||||
|
- ${{ normalize.norm.eli }}
|
||||||
|
- eli/bund/gewo
|
||||||
|
edges:
|
||||||
|
- from: eli/bund/gewo
|
||||||
|
to: ${{ normalize.norm.eli }}
|
||||||
|
target: ${{ normalize.norm.eli }}
|
||||||
|
|
||||||
|
# Juristen-Gate — Studie §3.3 macht das obligatorisch.
|
||||||
- id: review
|
- id: review
|
||||||
use: system.approval@^0
|
use: system.approval@^0
|
||||||
with:
|
with:
|
||||||
title: "Recl∆Im — Review GewO §14"
|
title: "Recl∆Im (F∆I) — Review ${{ normalize.norm.eli }}"
|
||||||
payload: $normalize.norm
|
payload:
|
||||||
|
norm: ${{ normalize.norm }}
|
||||||
outputs:
|
skm: ${{ skm.report }}
|
||||||
norm: $normalize.norm
|
benefit: ${{ benefit.score }}
|
||||||
cohort: $cohort.cohort
|
frust: ${{ frust.score }}
|
||||||
decision: $review.decision
|
cohort: ${{ cohort.cohort }}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
# Minimal-Test: nur stats.cohort_size, ohne externe Calls.
|
|
||||||
# Beweist, dass meine Module mit dem Hub-ABI kompatibel sind.
|
|
||||||
|
|
||||||
name: test-cohort
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
cohort_id: text
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: cohort
|
|
||||||
use: stats.cohort_size@^0
|
|
||||||
with:
|
|
||||||
cohort_id: $inputs.cohort_id
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
cohort: $cohort.cohort
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue