DE proceedings: one combined timeline per type (Verletzungsverfahren = LG→OLG→BGH, Nichtigkeitsverfahren = BPatG→BGH) #41
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Surfaced by: t-paliad-207 interactive session (fermi, 2026-05-18, parent of Path A label-consistency fix on the same branch).
m's vision
Today's 5 DE tiles model each instance as a standalone proceeding-type with no chain-through. Per-instance entry remains useful (a user joining at the appeal stage shouldn't have to walk LG first), but the top-level mental model should be the type (Verletzung / Nichtigkeit) with the instance chain rendered as one combined timeline.
Why this isn't just a UI fix — three intertwined sub-decisions
1. Spawn rules for DE (corpus, parallels mig 095's UPC pattern)
Verified via SQL 2026-05-18: zero of 39 active DE rules have
is_spawn=trueorspawn_proceeding_type_idset. Selecting a single 'Verletzungsverfahren' tile today would only ever show LG's rules — there is no rule-data chain to OLG/BGH. The 3 spawn rules to add (mirroringinf.appeal_spawn/rev.appeal_spawnfrom mig 095):de.inf.lg.berufung_spawnde.inf.lg.urteilDE.ZPO.517de.inf.olg(id 25)de.inf.olg.revision_spawnde.inf.olg.urteil_olgDE.ZPO.548de.inf.bgh(id 26)de.null.bpatg.berufung_spawnde.null.bpatg.urteilDE.PatG.111.1de.null.bgh(id 27)All three would be
priority='optional'+is_spawn=true+ always-fire (nocondition_expr) — same shape m blessed for UPC in t-paliad-203 F2.3 ("appeal is always a possibility").2. De-duplication call
The rule corpus today seeds the same act from two angles:
de.inf.lg.berufung(deadline TO appeal, anchored on LG-urteil, 1mo)de.inf.olg.berufung(Berufungsschrift AS the first step of the appeal proceeding)Same for
de.inf.lg.beruf_begr↔de.inf.olg.begruendungand the BPatG → BGH analogue. In a unified chain, ONE side has to go. Cleanest choice:de.inf.lg.*) keeps the spawn rule — represents "deadline you face if you're running the LG case".de.inf.olg.*) loses its.berufung+.begruendungroots — its real root becomesurteil_lg(the trigger event = service of LG judgment); the appeal-window deadlines were already covered by the spawn rule firing from the source.Alternative: keep both, but mark one set as
priority='informational'so save-modal doesn't double-write. m's call.3. Multi-instance UI
The spawn chain renders correctly via
projection_serviceon the SmartTimeline (Akte-bound) path. The standalone/tools/fristenrechner+/tools/verfahrensablaufabstract-browse calls go throughFristenrechnerService.Calculatewhich loads rules WHEREproceeding_type_id = <pt>— it does NOT followspawn_proceeding_type_id. Two options:Calculateto follow spawn FKs when the caller opts in (newCalcOptions.ChainSpawn bool). Wire the Verletzungsverfahren combined tile to set it. Per-instance tiles default off.B-UI-1 is the literal answer to m's vision; B-UI-2 is the lighter-footprint compromise.
Other UX consequences if B-UI-1 ships
urteilautomatically.Scope split
FristenrechnerService.Calculatespawn-follow opt-in (Option B-UI-1) + tests.Each slice independently shippable; Slice 1 alone unblocks the SmartTimeline path even if Slice 2/3 take longer.
Dependencies / related
internal/db/migrations/095_fristen_gap_fill.up.sql) — the UPC pattern the DE spawn rules would mirror.legal_sourceset from the start.mai/fermi/interactive-session. Path A holds even if Path B never ships.