Captures m's 2026-05-18 ratification of the new fristenrechner proceeding-code convention `<jurisdiction>.<X>.<Y>` and the 5 sub-decisions: ccr.cfi is an illustrative peer that routes back to inf.cfi with with_ccr; damages-appeal stays bundled into upc.apl.merits; NZB at BGH is a flag, not a separate proceeding; DPMA appeals stay generic with source differentiation at rule level. This document is the source of truth for mig 096 (lands next) and the post-mig proceeding_mapping.go.
9.0 KiB
Proceeding-code taxonomy (t-paliad-204 ratified 2026-05-18)
Source of truth for
paliad.proceeding_types.code. Every active row'scodeMUST conform to the convention below. This document anchors migration 096 (internal/db/migrations/096_proceeding_code_rename.up.sql) and the post-migration determinator + fristenrechner mapping ininternal/services/proceeding_mapping.go.
0. Why we renamed
The historical code strings (UPC_INF, DE_INF, EPA_OPP, …) were
UPPER_SNAKE jurisdiction-glued-to-acronym slugs. They were structurally
opaque and the taxonomy grew unevenly as more proceedings entered the
fristenrechner — UPC_APP covers all UPC appeals, DE_INF_OLG /
DE_INF_BGH carry the instance hint inline, EP_GRANT is the only EPA
row with no EPA_ prefix at all. The mapping in
internal/services/proceeding_mapping.go had to special-case appeal
ambiguities (no instance hint on UPC_APP, none on the DE side either).
After mig 095 landed the t-paliad-205 fristen gap-fill, m and paliadin
ratified a uniform convention for the corpus, captured here.
0.1 Convention
Active proceeding codes are lowercase, dot-separated, three positions:
<jurisdiction>.<X>.<Y>
<jurisdiction>— one ofupc,de,epa,dpma.<X>/<Y>— contextual; for first-instance proceedings they are<substantive-type>.<forum>(e.g.de.inf.lgfor Verletzungsklage am Landgericht). For appeals they are<appeal-type>.<scope>(e.g.upc.apl.merits,upc.apl.cost,upc.apl.order).- The CHECK constraint installed by mig 096 enforces
code ~ '^[a-z]+\.[a-z]+\.[a-z]+$'on every active row, with a carve-out for the legacy_archived_litigationbucket (code ~ '^_archived_').
The convention is forward-looking: any new fristenrechner row added after mig 096 MUST conform — no further UPPER_SNAKE codes.
0.2 Ratified taxonomy
UPC
| New code | Old code | id | Notes |
|---|---|---|---|
upc.inf.cfi |
UPC_INF |
8 | Verletzungsverfahren, CFI |
upc.rev.cfi |
UPC_REV |
9 | Nichtigkeitsverfahren, CFI |
upc.ccr.cfi |
new | new | Widerklage auf Nichtigkeit — illustrative peer of upc.inf.cfi. Rules live on upc.inf.cfi with with_ccr=true. See §1 sub-decision S1. |
upc.pi.cfi |
UPC_PI |
10 | Einstweilige Maßnahmen |
upc.dmgs.cfi |
UPC_DAMAGES |
17 | Schadensbemessung |
upc.disc.cfi |
UPC_DISCOVERY |
18 | Bucheinsicht |
upc.apl.merits |
UPC_APP |
11 | Hauptberufung — covers inf + rev + ccr + damages-merits appeals |
upc.apl.order |
UPC_APP_ORDERS |
20 | 15-Tage-Beschwerde gegen Anordnungen (R.220 (1)(c)) |
upc.apl.cost |
UPC_COST_APPEAL |
19 | Kostenbeschwerde |
DE
| New code | Old code | id | Notes |
|---|---|---|---|
de.inf.lg |
DE_INF |
12 | Verletzungsklage am Landgericht |
de.inf.olg |
DE_INF_OLG |
25 | Berufung am OLG |
de.inf.bgh |
DE_INF_BGH |
26 | Revision + NZB merged — with_nzb flag on NZB-detour rules |
de.null.bpatg |
DE_NULL |
13 | Nichtigkeitsverfahren am BPatG |
de.null.bgh |
DE_NULL_BGH |
27 | Nichtigkeitsberufung am BGH |
EPA
| New code | Old code | id | Notes |
|---|---|---|---|
epa.grant.exa |
EP_GRANT |
16 | EP-Erteilungsverfahren |
epa.opp.opd |
EPA_OPP |
14 | Einspruchsverfahren |
epa.opp.boa |
EPA_APP |
15 | Einspruchsbeschwerde (Board of Appeal) |
DPMA
| New code | Old code | id | Notes |
|---|---|---|---|
dpma.opp.dpma |
DPMA_OPP |
28 | Einspruch beim DPMA |
dpma.appeal.bpatg |
DPMA_BPATG_BESCHWERDE |
29 | Beschwerde am BPatG (generic — source differentiated at rule level) |
dpma.appeal.bgh |
DPMA_BGH_RB |
30 | Rechtsbeschwerde am BGH (generic — source differentiated at rule level) |
Archived
| Code | id | Notes |
|---|---|---|
_archived_litigation |
32 | Unchanged — Pipeline-A retired corpus |
IDs are stable. Only the code STRING changes. The FKs
deadline_rules.proceeding_type_id, projects.proceeding_type_id, and
deadline_rules.spawn_proceeding_type_id reference IDs, so the existing
rule corpus and spawn wiring (incl. mig 095's spawn_proceeding_type_id=11)
continue to work unchanged.
0.3 Sub-decisions (m's calls, 2026-05-18)
S1 — upc.ccr.cfi visibility
is_active=true, visible in the determinator + dropdowns. No rules
attached. When the determinator surfaces it, the UI shows the hint:
"Regeln liegen auf upc.inf.cfi (with_ccr=true); wir leiten Sie dorthin weiter."
Routing logic lands in internal/services/proceeding_mapping.go — when
the cascade resolves to upc.ccr.cfi, the mapping returns the
upc.inf.cfi id (=8) with with_ccr=true as a default flag. The peer
exists for taxonomic completeness so users searching for
"Widerklage" find an entry; it is not a separate rule namespace.
S2 — Abbreviations
dmgs for damages, disc for discovery. m's call: short form keeps the
codes terse and the dot-separated shape readable.
S3 — Damages appeal
NO separate code. upc.apl.merits covers damages appeals — the
spawn rules from upc.dmgs.cfi (none seeded today) would carry their
own spawn_label. Avoids a code like upc.apl.dmgs whose rules would
be empty for the foreseeable future.
S4 — NZB at BGH
Single bucket de.inf.bgh. Rules diverging in the NZB-detour-path
(Nichtzulassungsbeschwerde when the OLG didn't grant Revision) use a
with_nzb flag instead of a separate proceeding type. Keeps the dropdown
list shorter and matches how m practitioners think about the BGH
instance — same destination, two ways to arrive.
S5 — DPMA appeals
Generic dpma.appeal.bpatg / dpma.appeal.bgh — source-of-decision
differentiation (was it a DPMA decision being appealed? a BPatG
decision being further appealed to BGH?) lives at the rule level, not
the proceeding-type level. Keeps the code namespace flat.
0.4 Spawn-FK invariant
After mig 096, the spawn FK invariant from mig 095 still holds:
deadline_rules.spawn_proceeding_type_id = 11
↔ paliad.proceeding_types[id=11].code = 'upc.apl.merits'
Spawn rules from upc.inf.cfi / upc.rev.cfi chain to the appeal-merits
proceeding without code-string awareness. Same for any future spawn FK.
0.5 Not in scope
paliad.event_categories.slugsegments (upc-inf,de-bgh-null, …) are NOT renamed. They are stable identifiers in a separate taxonomy and their kebab form is presentation-layer (it appears in URL fragments). Mig 096 only updates theproceeding_type_codetext column onpaliad.event_category_conceptsrows so the soft join throughevent_category_concepts → proceeding_types.codekeeps resolving.- Fee-table keys (
EPA_OPPOSITION,UPC_APPEAL, …) ininternal/calc/fees.goare NOT proceeding codes — they are fee-table bucket keys with their own naming. Untouched. - Forum bucket slugs (
upc_cfi,de_lg, …) inForumToProceedingCodesare presentation buckets, not codes. The values inside (UPC_INF, …) are the codes being renamed.
0.6 References
internal/db/migrations/096_proceeding_code_rename.up.sql— the migration that lands this rename.internal/services/proceeding_mapping.go— post-mig 096 mapping with the ccr-routing helper (S1).internal/services/proceeding_codes_shape_test.go— Go test asserting every active fristenrechner-category code matches the new shape regex.- mig 095 (
internal/db/migrations/095_fristen_gap_fill.up.sql) — the immediate predecessor; spawn_proceeding_type_id=11 carries through.