Compare commits
3 commits
7a8bd339be
...
34c325e419
| Author | SHA1 | Date | |
|---|---|---|---|
| 34c325e419 | |||
| 1be2ad075d | |||
| cf8c7bf1fd |
6 changed files with 187 additions and 106 deletions
|
|
@ -112,6 +112,19 @@ class _HeatmapPageState extends State<HeatmapPage> {
|
|||
'${e.norm.jurabk} ${e.norm.paragraph}',
|
||||
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,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
63
assets/branding/reclaim-lockup.svg
Normal file
63
assets/branding/reclaim-lockup.svg
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<?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>
|
||||
|
After Width: | Height: | Size: 2 KiB |
28
assets/branding/reclaim-mark.svg
Normal file
28
assets/branding/reclaim-mark.svg
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?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>
|
||||
|
After Width: | Height: | Size: 812 B |
39
flows/durchstich-from-file.yaml
Normal file
39
flows/durchstich-from-file.yaml
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# 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,131 +1,53 @@
|
|||
# Vertikaler Durchstich Phase 0 — eine Norm (GewO §14) durch
|
||||
# alle 8 law*-Schritte + Juristen-Approval + Audit.
|
||||
# Phase-0 vertikaler Durchstich für GewO §14.
|
||||
#
|
||||
# Voraussetzung:
|
||||
# chain install text.akoma_normalize text.deontic_extract \
|
||||
# graph.citation_extract text.readability_score \
|
||||
# stats.cohort_size graph.shapley_attribution \
|
||||
# econ.skm_score law.benefit_score \
|
||||
# http.request system.approval
|
||||
# Minimaler Pfad zum ersten echten flow.completed-Event im
|
||||
# Audit-Log — http.request → text.akoma_normalize →
|
||||
# stats.cohort_size → system.approval. Beweist, dass die
|
||||
# Recl∆Im-Pipeline live gegen den Ch∆In-Hub läuft. Die
|
||||
# komplexen Bewertungs-Schritte (econ.skm_score,
|
||||
# law.benefit_score, graph.shapley_attribution) bündeln wir in
|
||||
# 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:
|
||||
# chain run flows/durchstich-gewo-14.yaml \
|
||||
# --input norm_url=https://www.gesetze-im-internet.de/gewo/__14.xml \
|
||||
# --input cohort_id=berlin-kmu
|
||||
|
||||
inputs:
|
||||
norm_url:
|
||||
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
|
||||
name: durchstich-gewo-14
|
||||
|
||||
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' }}
|
||||
inputs:
|
||||
norm_url: text
|
||||
cohort_id: text
|
||||
|
||||
steps:
|
||||
- id: pull
|
||||
use: http.request@^0
|
||||
with:
|
||||
url: ${{ inputs.norm_url }}
|
||||
method: GET
|
||||
etag_cache: true
|
||||
url: $inputs.norm_url
|
||||
method: "GET"
|
||||
|
||||
- id: normalize
|
||||
use: text.akoma_normalize@^0
|
||||
with:
|
||||
content: ${{ pull.body }}
|
||||
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 }}
|
||||
content: $pull.body
|
||||
mime: "application/xml"
|
||||
|
||||
- id: cohort
|
||||
use: stats.cohort_size@^0
|
||||
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
|
||||
use: system.approval@^0
|
||||
with:
|
||||
title: "Recl∆Im (F∆I) — Review ${{ normalize.norm.eli }}"
|
||||
payload:
|
||||
norm: ${{ normalize.norm }}
|
||||
skm: ${{ skm.report }}
|
||||
benefit: ${{ benefit.score }}
|
||||
frust: ${{ frust.score }}
|
||||
cohort: ${{ cohort.cohort }}
|
||||
title: "Recl∆Im — Review GewO §14"
|
||||
payload: $normalize.norm
|
||||
|
||||
outputs:
|
||||
norm: $normalize.norm
|
||||
cohort: $cohort.cohort
|
||||
decision: $review.decision
|
||||
|
|
|
|||
16
flows/test-cohort.yaml
Normal file
16
flows/test-cohort.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# 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