Concerns A + B + C from m/paliad#81:
A. Browse-a-proceeding (/tools/verfahrensablauf) gains a side selector
(Kläger/Beklagter/Beide) and an appellant selector. The side selector
swaps which column labels which user-side; the appellant selector
collapses party='both' rules into the appellant's column (no mirror)
so role-swap proceedings (Appeal, etc.) stop showing every row
twice in the timeline. Both selectors are URL-driven (?side= +
?appellant=) and re-render without a backend round-trip.
The appellant row hides itself for proceedings without an appellant
axis (first-instance Inf/Rev/Opp) via a small allowlist.
B. UPC Appeal trigger-event caption now reads "Anfechtbare Entscheidung"
/ "Appealable Decision" instead of falling back to the proceeding
name ("Berufungsverfahren" / "Appeal"). Implemented as an optional
trigger_event_label_{de,en} column on paliad.proceeding_types (mig
121); the frontend prefers it over the proceedingName fallback that
fires when no rule has IsRootEvent=true. No new deadline rules, no
slug changes (hard rule from the issue).
C. Parameter contract for the column projection is unified in
bucketDeadlinesIntoColumns(deadlines, {side, appellant}) — a pure
helper extracted from renderColumnsBody so the routing behaviour
stays unit-testable without a DOM. Tests cover the default mirror,
appellant-collapse for both sides, side-swap of column ownership,
the combined case, and row alignment by dueDate.
Verification
- go build ./... clean
- go test ./... all green
- bun run build (frontend) clean
- bun test (frontend/src) 110/110 pass (12 new + 98 prior)
- Migration 121 applied to paliad schema; UPC Appeal proceeding now
carries the curated trigger label pair.
Out of scope (filed for follow-up): per-rule role tagging so
respondent-side filings (Response to Appeal, Cross-Appeal) land in
the respondent's column when an appellant is selected. The current
issue scope (one-row-per-deadline collapse) is delivered; the
realistic-per-row routing needs a deadline_rules schema bump that
the hard rules of #81 excluded.
28 lines
1.4 KiB
SQL
28 lines
1.4 KiB
SQL
-- t-paliad-250 / m/paliad#81 — Concern B: UPC Appeal trigger-event label.
|
|
--
|
|
-- The /tools/verfahrensablauf "Auslösendes Ereignis" caption falls back
|
|
-- to `paliad.proceeding_types.name` whenever the calculator finds no
|
|
-- root rule (duration_value=0 + parent_id=NULL + !is_court_set). For
|
|
-- UPC Appeal (upc.apl.merits) all rules carry a non-zero duration off
|
|
-- the trigger date, so the caption reads "Berufungsverfahren" /
|
|
-- "Appeal" — the proceeding itself — instead of the appealable
|
|
-- decision that actually starts the clock.
|
|
--
|
|
-- Fix: add an optional `trigger_event_label_de` / `trigger_event_label_en`
|
|
-- pair on proceeding_types. When set, the calculator surfaces it on the
|
|
-- response (TriggerEventLabel{,EN}) and the frontend prefers it over
|
|
-- proceedingName. No deadline-rule additions, no slug changes; existing
|
|
-- proceeding_type.code stays stable (hard rule from the issue).
|
|
|
|
ALTER TABLE paliad.proceeding_types
|
|
ADD COLUMN IF NOT EXISTS trigger_event_label_de text,
|
|
ADD COLUMN IF NOT EXISTS trigger_event_label_en text;
|
|
|
|
-- UPC Appeal: the trigger date is the date of the appealable first-instance
|
|
-- decision (per UPC RoP R.224(1)(a) the 2-month appeal clock runs from
|
|
-- service of the decision per R.220.1(a)/(b)).
|
|
UPDATE paliad.proceeding_types
|
|
SET trigger_event_label_de = 'Anfechtbare Entscheidung',
|
|
trigger_event_label_en = 'Appealable Decision'
|
|
WHERE code = 'upc.apl.merits';
|