fix(t-paliad-112): i18n leaks — deadline_notes_en, trigger-event DE, Checkliste header

Three i18n bugs from the t-paliad-101 QA sweep, fixed together:

B2 — Fristenrechner deadline notes leaked German into the EN locale.
Migration 032 adds paliad.deadline_rules.deadline_notes_en (TEXT NULL)
and backfills English translations for all 30 rules that carry a
deadline_notes value (UPC RoP / EPC / ZPO terminology). The frontend
prefers _en when locale=EN and falls back to deadline_notes (DE) when
the column is NULL, so future seeds without an EN translation render
in DE rather than empty. UIDeadline DTO gains notesEN. The bulk
"Als Frist(en) speichern" CTA now stores the locale-matched note text
so EN users get an EN note alongside the EN title.

B8 — trigger-event picker labels were English-only when DE locale was
active (102 rows, name_de defaulted to '' in 028, frontend already had
the locale switch but no data). Migration 033 backfills name_de for
all 102 trigger events using standard German UPC RoP terminology
(Klageschrift, Klageerwiderung, Replik, Duplik, Nichtigkeitswiderklage,
Verletzungswiderklage, Berufungsschrift/-begründung, Anschlussberufung,
Schutzschrift, Beweissicherung, etc.).

S3 — frontend/src/client/checklists-instance.ts:154 had a hardcoded
"Project" label in both branches of the locale ternary; the DE branch
now reads "Projekt", matching the surrounding meta-item labels' pattern
(Court / Authority → Gericht / Behörde, Reference → Rechtsgrundlage).
This commit is contained in:
m
2026-05-04 14:36:50 +02:00
parent 7463831932
commit 341fa6c26f
9 changed files with 288 additions and 6 deletions

View File

@@ -151,7 +151,7 @@ function renderHeader() {
parts.push(`<div class="checklist-meta-item"><dt>${refLabel}</dt><dd>${esc(reference)}</dd></div>`);
}
if (instance.project_id) {
const akteLabel = isEN ? "Project" : "Project";
const akteLabel = isEN ? "Project" : "Projekt";
parts.push(`<div class="checklist-meta-item"><dt>${akteLabel}</dt><dd><a href="/projects/${esc(instance.project_id)}">${t("checklisten.instance.akte.open") || "Öffnen"}</a></dd></div>`);
}
document.getElementById("instance-meta")!.innerHTML = parts.join("");

View File

@@ -12,6 +12,7 @@ interface CalculatedDeadline {
isMandatory: boolean;
ruleRef: string;
notes?: string;
notesEN?: string;
dueDate: string;
originalDate: string;
wasAdjusted: boolean;
@@ -245,13 +246,15 @@ async function submitSave() {
const idx = Number(cb.dataset.idx);
const dl = lastResponse!.deadlines[idx];
if (!dl || !dl.dueDate) return;
const dlName = getLang() === "en" ? dl.nameEN : dl.name;
const isEN = getLang() === "en";
const dlName = isEN ? dl.nameEN : dl.name;
const dlNotes = isEN ? (dl.notesEN || dl.notes) : dl.notes;
deadlinesPayload.push({
title: dl.ruleRef ? `${dl.ruleRef} \u2014 ${dlName}` : dlName,
due_date: dl.dueDate,
original_due_date: dl.originalDate || undefined,
source: "fristenrechner",
notes: dl.notes || undefined,
notes: dlNotes || undefined,
});
});
if (deadlinesPayload.length === 0) return;
@@ -316,8 +319,9 @@ function renderTimeline(data: DeadlineResponse) {
? `<span class="timeline-rule">${dl.ruleRef}</span>`
: "";
const notes = dl.notes
? `<div class="timeline-notes">${dl.notes}</div>`
const noteText = getLang() === "en" ? (dl.notesEN || dl.notes) : dl.notes;
const notes = noteText
? `<div class="timeline-notes">${noteText}</div>`
: "";
html += `

View File

@@ -0,0 +1,5 @@
-- Reverses 032_deadline_notes_en. Drops the column; the EN backfill is
-- carried in the column itself, so dropping the column removes it.
ALTER TABLE paliad.deadline_rules
DROP COLUMN IF EXISTS deadline_notes_en;

View File

@@ -0,0 +1,130 @@
-- t-paliad-112 B2: Fristenrechner deadline_notes_en column + EN backfill.
--
-- paliad.deadline_rules.deadline_notes was DE-only (12 wrote some German,
-- 029 added more German strings). When the locale flips to EN, the timeline
-- still emitted the German notes — visible leak on /tools/fristenrechner.
--
-- Fix: add a parallel deadline_notes_en column, backfill EN translations
-- for every existing row that has a deadline_notes value (30 rows today).
-- The render path will prefer _en when locale=EN and fall back to the DE
-- column when _en IS NULL (so future rows seeded without an EN translation
-- still render in DE rather than empty).
--
-- A handful of seed rows from 012 had English text in the (DE-named)
-- deadline_notes column already; those are copied verbatim into _en so
-- the EN locale stays consistent. The DE-leak in those 5 rows is a
-- separate bug (DE locale rendering English) and is intentionally not
-- fixed here — out of scope for this bundle.
ALTER TABLE paliad.deadline_rules
ADD COLUMN IF NOT EXISTS deadline_notes_en text;
COMMENT ON COLUMN paliad.deadline_rules.deadline_notes_en IS
'English translation of deadline_notes. Render path prefers this column '
'when the active locale is EN; falls back to deadline_notes (DE) when NULL.';
-- ============================================================================
-- Backfill: 30 rows. Match by id (UUIDs from migrations 012 and 029).
-- Translations follow UPC RoP / EPC / ZPO terminology used elsewhere in the
-- codebase (i18n keys, model docstrings, changelog).
-- ============================================================================
UPDATE paliad.deadline_rules SET deadline_notes_en = CASE id
-- 012 seeds: rows that already carry English text in deadline_notes.
-- Copy verbatim so the EN locale is consistent regardless of DE-leak fix.
WHEN 'a0807104-26e2-4277-95a7-72711817462f'::uuid -- inf.prelim (UPC_INF)
THEN 'Rarely triggers separate decision; usually decided with main case'
WHEN '6db004d3-af14-48db-aa43-a8265bce8360'::uuid -- ccr.interim (UPC_CCR)
THEN 'May be combined with infringement IC'
WHEN '44e1b960-87cf-41e2-a4d2-e83cabdde41c'::uuid -- ccr.reply (UPC_CCR)
THEN 'Timing overlaps with infringement Rejoinder'
WHEN 'c55edf56-f1db-4b49-b094-6dad2cc1a97e'::uuid -- pi.response (UPC_PI)
THEN 'Deadline set by court'
WHEN '0a8946d5-a77b-4d13-b0bd-79c31cda648f'::uuid -- app.grounds (UPC_APP)
THEN 'Anchored on decision date (the trigger), not on filing of notice'
-- 012 seeds: rows with German deadline_notes — translate to EN.
WHEN 'ae12578b-9225-41eb-8c52-e0d19c3c47a6'::uuid -- zpo.vertanz (ZPO_INF)
THEN 'Mandatory time limit (Notfrist); runs from service of the statement of claim'
WHEN 'a9e53ff5-0dd6-4b87-83ff-c9091dbe5d56'::uuid -- zpo.klageerw (ZPO_INF)
THEN 'Set by the court; at least 2 weeks'
WHEN 'cdcc6242-31ab-477f-8f74-831fc07972bf'::uuid -- zpo.berufung (ZPO_INF)
THEN 'Mandatory time limit (Notfrist); runs from service of the full written judgment'
WHEN '7b118633-92b2-4c91-8512-6cb929288f10'::uuid -- inf.interim (internal INF)
THEN 'Hearing date set by the court'
WHEN '37b7792c-a064-4ca0-b93e-636817dee975'::uuid -- inf.cost_app (internal INF)
THEN '1-month period from service of the main decision'
WHEN '30ffe572-aa77-4dcb-9292-a4750289f75c'::uuid -- pi.response (internal PI)
THEN 'Time limit set by the court'
WHEN 'a0f88cd1-7d48-44ed-9ceb-0ad8f585ffb8'::uuid -- app.grounds (internal APP, German variant)
THEN 'Runs from service of the appealed decision; not from filing of the notice of appeal'
WHEN '1bc97653-9844-4520-a143-2447a3287152'::uuid -- app.cross_a (internal APP)
THEN '3-month period from service of the statement of grounds of appeal (R.224.2(a))'
WHEN '9abd66c3-4678-447c-9478-f727721fd4b6'::uuid -- de_inf.erwidg (DE_INF)
THEN 'Standard time limit; extendable on request'
WHEN 'd46d915e-fd46-4167-88b5-6d22bcbb8882'::uuid -- de_inf.replik (DE_INF)
THEN 'Time limit set by the court'
WHEN 'ca9b52cb-e986-4c3a-9e89-e799e6a6ac33'::uuid -- de_inf.duplik (DE_INF)
THEN 'Time limit set by the court'
WHEN '72601b13-1953-474d-91df-47fbae8df31b'::uuid -- de_inf.berufung (DE_INF)
THEN 'Runs from service of the judgment'
WHEN 'ec95d463-6b25-43b8-924d-d88bfb67eb3a'::uuid -- de_null.berufung (DE_NULL)
THEN 'Runs from service of the judgment'
WHEN '02acd5f7-0634-46c8-a895-4399ad17369e'::uuid -- epa_opp.beschwerde (EPA_OPP)
THEN 'Runs from notification of the decision'
WHEN '7f96f4fd-22b0-439c-928f-857eac1102c9'::uuid -- epa_app.begr (EPA_APP)
THEN 'Runs from notification of the decision; not from filing of the notice of appeal'
WHEN 'f1caa3b1-e80d-4277-8433-c8eb454b967f'::uuid -- epa_app.erwidg (EPA_APP)
THEN 'Time limit set by the Board of Appeal'
WHEN '63069ae5-e380-4db5-b020-d1856f31300c'::uuid -- ep_grant.search (EP_GRANT)
THEN 'Indicative; may take longer in practice'
WHEN 'b9fdd819-9195-4930-89ec-c691a192f3b4'::uuid -- ep_grant.publish (EP_GRANT)
THEN 'Runs from priority date (or filing date when no priority is claimed)'
WHEN '540ade94-cddb-465c-9bd8-4d17e2fb39fe'::uuid -- ep_grant.exam_req (EP_GRANT)
THEN 'Runs from communication of the opportunity to request examination (R.70(2) EPC)'
WHEN '83d4bf8a-28d6-4e21-a020-a804d760a6e4'::uuid -- ep_grant.approval (EP_GRANT)
THEN 'Grant and printing fee'
WHEN 'ff63af92-8fee-4d43-a16e-320ca7240fde'::uuid -- cost.leave_app (COST decision)
THEN '15-day period from service of the cost decision'
WHEN '92ec1cb3-2623-477a-95f5-9b830baa0af0'::uuid -- app_ord.with_leave (APP order)
THEN '15-day period from service of the order or the leave-to-appeal decision'
WHEN 'f963419e-ecb5-403b-9f6f-6289a68f9315'::uuid -- app_ord.discretion (APP order)
THEN '15-day period from service of the decision refusing leave to appeal'
WHEN '423f3d50-05b3-4e0f-9043-d4f54157bcf7'::uuid -- app_ord.cross (APP order)
THEN '15-day period from service of the statement of grounds of appeal (R.224.2(b))'
WHEN 'd5aee17d-090c-4141-90aa-1a80c91a1478'::uuid -- app_ord.cross_reply (APP order)
THEN '15-day period from service of the cross-appeal'
ELSE deadline_notes_en
END
WHERE id IN (
'a0807104-26e2-4277-95a7-72711817462f'::uuid,
'6db004d3-af14-48db-aa43-a8265bce8360'::uuid,
'44e1b960-87cf-41e2-a4d2-e83cabdde41c'::uuid,
'c55edf56-f1db-4b49-b094-6dad2cc1a97e'::uuid,
'0a8946d5-a77b-4d13-b0bd-79c31cda648f'::uuid,
'ae12578b-9225-41eb-8c52-e0d19c3c47a6'::uuid,
'a9e53ff5-0dd6-4b87-83ff-c9091dbe5d56'::uuid,
'cdcc6242-31ab-477f-8f74-831fc07972bf'::uuid,
'7b118633-92b2-4c91-8512-6cb929288f10'::uuid,
'37b7792c-a064-4ca0-b93e-636817dee975'::uuid,
'30ffe572-aa77-4dcb-9292-a4750289f75c'::uuid,
'a0f88cd1-7d48-44ed-9ceb-0ad8f585ffb8'::uuid,
'1bc97653-9844-4520-a143-2447a3287152'::uuid,
'9abd66c3-4678-447c-9478-f727721fd4b6'::uuid,
'd46d915e-fd46-4167-88b5-6d22bcbb8882'::uuid,
'ca9b52cb-e986-4c3a-9e89-e799e6a6ac33'::uuid,
'72601b13-1953-474d-91df-47fbae8df31b'::uuid,
'ec95d463-6b25-43b8-924d-d88bfb67eb3a'::uuid,
'02acd5f7-0634-46c8-a895-4399ad17369e'::uuid,
'7f96f4fd-22b0-439c-928f-857eac1102c9'::uuid,
'f1caa3b1-e80d-4277-8433-c8eb454b967f'::uuid,
'63069ae5-e380-4db5-b020-d1856f31300c'::uuid,
'b9fdd819-9195-4930-89ec-c691a192f3b4'::uuid,
'540ade94-cddb-465c-9bd8-4d17e2fb39fe'::uuid,
'83d4bf8a-28d6-4e21-a020-a804d760a6e4'::uuid,
'ff63af92-8fee-4d43-a16e-320ca7240fde'::uuid,
'92ec1cb3-2623-477a-95f5-9b830baa0af0'::uuid,
'f963419e-ecb5-403b-9f6f-6289a68f9315'::uuid,
'423f3d50-05b3-4e0f-9043-d4f54157bcf7'::uuid,
'd5aee17d-090c-4141-90aa-1a80c91a1478'::uuid
);

View File

@@ -0,0 +1,4 @@
-- Reverses 033_trigger_events_de. Resets name_de back to the empty default
-- so a re-run of the up-migration backfills cleanly.
UPDATE paliad.trigger_events SET name_de = '' WHERE name_de <> '';

View File

@@ -0,0 +1,134 @@
-- t-paliad-112 B8: backfill paliad.trigger_events.name_de for the
-- "Was kommt nach…" Fristenrechner mode.
--
-- 028 imported 102 trigger events from youpc data.events with English
-- `name` populated and `name_de` defaulted to '' (per the table comment:
-- "bilingual; backfill in PR-2/follow-up"). The frontend's eventName()
-- helper already prefers name_de when locale=de and falls back to name
-- when name_de is empty — so populating name_de here is a pure data fix
-- with no code changes required.
--
-- Translations follow UPC RoP DE terminology (Klageschrift,
-- Klageerwiderung, Replik, Duplik, Nichtigkeitswiderklage,
-- Verletzungswiderklage, Berufungsschrift, Berufungsbegründung,
-- Anschlussberufung, Schutzschrift, Beweissicherung, etc.) — see
-- the DE youpc translations and standard German UPC literature.
UPDATE paliad.trigger_events SET name_de = CASE id
WHEN 1 THEN 'Klageerwiderung mit Nichtigkeitswiderklage'
WHEN 2 THEN 'Kostenfestsetzungsbeschluss (Regel 157)'
WHEN 3 THEN 'Stellungnahme der einsprechenden Partei'
WHEN 4 THEN 'Duplik zur Replik auf die Erwiderung zur negativen Feststellungsklage'
WHEN 5 THEN 'Klageschrift'
WHEN 6 THEN 'Nichtigkeitsklage'
WHEN 7 THEN 'Klage auf negative Feststellung der Nichtverletzung'
WHEN 8 THEN 'Antrag auf Kostenentscheidung'
WHEN 9 THEN 'Replik auf die Erwiderung zur Nichtigkeitsklage, Erwiderung auf den Patentänderungsantrag, Erwiderung auf die Verletzungswiderklage'
WHEN 10 THEN 'Verletzungswiderklage'
WHEN 11 THEN 'Berufungsschrift gegen eine in Regel 220.1(a) und (b) genannte Entscheidung'
WHEN 12 THEN 'Duplik zur Replik auf die Erwiderung zum Patentänderungsantrag'
WHEN 13 THEN 'Antrag auf Ermessensüberprüfung'
WHEN 14 THEN 'Erwiderung auf den Antrag auf Schadensersatzbemessung'
WHEN 15 THEN 'Anfechtung einer Entscheidung über die Verwerfung der Berufung als unzulässig'
WHEN 16 THEN 'Antrag auf Überprüfung einer verfahrensleitenden Anordnung'
WHEN 17 THEN 'Klärung von Übersetzungsfragen'
WHEN 18 THEN 'Berufung (Anordnungen & mit Zulassung)'
WHEN 19 THEN 'Erwiderung auf den Antrag auf Patentänderung'
WHEN 20 THEN 'Replik auf die Erwiderung zum Patentänderungsantrag'
WHEN 21 THEN 'Replik auf die Erwiderung zur Nichtigkeitsklage'
WHEN 22 THEN 'Replik auf die Erwiderung zur negativen Feststellungsklage'
WHEN 23 THEN 'Entscheidung über die Verwerfung einer Berufung als unzulässig'
WHEN 24 THEN 'Antrag auf Wiederaufnahme (schwerwiegender Verfahrensmangel)'
WHEN 25 THEN 'Antrag auf Vertraulichkeit gegenüber der Öffentlichkeit'
WHEN 26 THEN 'In der Beweissicherungsanordnung des Gerichts bestimmter Zeitpunkt'
WHEN 27 THEN 'Einreichung von Übersetzungen von Schriftstücken'
WHEN 28 THEN 'Klageerwiderung ohne Nichtigkeitswiderklage'
WHEN 29 THEN 'Duplik zur Replik, Replik auf die Erwiderung zum Patentänderungsantrag'
WHEN 30 THEN 'Replik auf die Erwiderung zur Verletzungswiderklage'
WHEN 31 THEN 'Berufungserwiderung (auf die Berufung nach Regel 224.2(a))'
WHEN 32 THEN 'Mitteilung über Beauftragung eines Dolmetschers auf Kosten der Partei'
WHEN 33 THEN 'Erwiderung auf den Antrag auf Patentänderung'
WHEN 34 THEN 'Erwiderung auf die Nichtigkeitsklage'
WHEN 35 THEN 'Antrag auf Aufhebung oder Änderung einer Entscheidung des Amtes'
WHEN 36 THEN 'Antrag auf Folgemaßnahmen aus einer rechtskräftigen Validitätsentscheidung'
WHEN 37 THEN 'In Regel 220.1(a) und (b) genannte Entscheidung'
WHEN 38 THEN 'Antrag auf Patentänderung'
WHEN 39 THEN 'Entscheidung des EPA'
WHEN 40 THEN 'Replik auf die Erwiderung zum Antrag auf Rechnungslegung'
WHEN 41 THEN 'Berichtigung von Entscheidungen und Anordnungen'
WHEN 42 THEN 'Erwiderung auf die Widerklage'
WHEN 43 THEN 'Replik auf die Erwiderung zum Antrag auf Schadensersatzbemessung'
WHEN 44 THEN 'Vollziehung von Beweissicherungsmaßnahmen'
WHEN 45 THEN 'Entscheidung des EPA über die Nichtgewährung der einheitlichen Wirkung'
WHEN 46 THEN 'Erneuerung der Schutzschrift'
WHEN 47 THEN 'Erwiderung auf die Verletzungswiderklage'
WHEN 49 THEN 'Mündliche Verhandlung'
WHEN 50 THEN 'In Regel 220.1(c) genannte Anordnung oder in Regel 220.2 oder 221.3 genannte Entscheidung'
WHEN 52 THEN 'Rechtskräftige Entscheidung der Zentralkammer, des Berufungsgerichts oder des EPA über die Rechtsbeständigkeit des Patents'
WHEN 53 THEN 'Erwiderung auf eine Anschlussberufungsschrift (zur Berufung nach Regel 224.2(b))'
WHEN 54 THEN 'Antrag auf Verweisung an die Zentralkammer'
WHEN 55 THEN 'Schutzschrift'
WHEN 56 THEN 'Ladung zur mündlichen Verhandlung'
WHEN 57 THEN 'Replik auf die Klageerwiderung ohne Nichtigkeitswiderklage'
WHEN 60 THEN 'Berufungsbegründung nach Regel 224.2(b)'
WHEN 61 THEN 'Duplik zur Replik auf die Klageerwiderung'
WHEN 62 THEN 'Antrag auf Rechnungslegung'
WHEN 63 THEN 'Anschlussberufungsschrift (zur Berufung nach Regel 224.2(a))'
WHEN 64 THEN 'Anschlussberufungsschrift (zur Berufung nach Regel 224.2(b))'
WHEN 65 THEN 'Antrag auf Überprüfung der Beweissicherungsanordnung'
WHEN 66 THEN 'In der Anordnung des Gerichts zur einstweiligen Maßnahme bestimmter Zeitpunkt'
WHEN 67 THEN 'Antrag auf Aufhebung einer Entscheidung des EPA, mit der ein Antrag auf einheitliche Wirkung zurückgewiesen wurde'
WHEN 68 THEN 'Vorgängige Einrede'
WHEN 70 THEN 'Erwiderung auf eine Anschlussberufungsschrift (zur Berufung nach Regel 224.2(a))'
WHEN 71 THEN 'Mitteilung der Geschäftsstelle zur Mängelbeseitigung'
WHEN 73 THEN 'Berufungserwiderung (auf die Berufung nach Regel 224.2(b))'
WHEN 74 THEN 'Mängelbeseitigung / Zahlung'
WHEN 75 THEN 'Mitteilung des Gerichts über die Nichtgenehmigung des Antrags, die Patentsprache als Verfahrenssprache zu verwenden'
WHEN 76 THEN 'Erwiderung auf den Antrag auf Rechnungslegung'
WHEN 77 THEN 'Berufungsbegründung gegen eine in Regel 220.1(a) und (b) genannte Entscheidung'
WHEN 78 THEN 'Verfahrensleitende Anordnung (Zustellung)'
WHEN 80 THEN 'Mängelbeseitigung / Einreichung schriftlicher Stellungnahme'
WHEN 81 THEN 'Beginn des Hauptsacheverfahrens'
WHEN 82 THEN 'Antrag auf Schadensersatzbemessung / Angabe nach Regel 131.2'
WHEN 84 THEN 'Klageerwiderung'
WHEN 85 THEN 'Replik auf die Klageerwiderung'
WHEN 86 THEN 'Antrag auf Simultanübersetzung'
WHEN 87 THEN 'Anschlussberufungsschrift nach Regeln 237, 235.1'
WHEN 88 THEN 'Endentscheidung (Zustellung) / gerichtliche Entscheidung über eine Straftat (je nachdem, was später eintritt)'
WHEN 89 THEN 'Berufungsbegründung nach Regel 224.2(a)'
WHEN 90 THEN 'Anschlussberufungsschrift nach Regeln 237, 235.2'
WHEN 92 THEN 'Duplik zur Replik auf die Erwiderung zur Verletzungswiderklage, Duplik zur Replik auf die Erwiderung zum Patentänderungsantrag'
WHEN 93 THEN 'Erwiderung auf die negative Feststellungsklage'
WHEN 95 THEN 'Berufungsbegründung gegen eine in Regel 220.1(c) genannte Anordnung oder eine in Regel 220.2 oder 221.3 genannte Entscheidung'
WHEN 96 THEN 'Antrag auf Wiederaufnahme (Straftat)'
WHEN 97 THEN 'Replik auf die Erwiderung zur Widerklage, Duplik zur Replik auf die Klageerwiderung, Erwiderung auf den Patentänderungsantrag'
WHEN 98 THEN 'Endentscheidung (Zustellung) / Entdeckung des schwerwiegenden Mangels (je nachdem, was später eintritt)'
WHEN 99 THEN 'Versagung der Berufungszulassung innerhalb von 15 Tagen ab der Anordnung'
WHEN 100 THEN 'Erteilte Berufungszulassung'
WHEN 101 THEN 'Nichtigkeitswiderklage'
WHEN 102 THEN 'Erwiderung auf die Nichtigkeitswiderklage und Replik auf die Klageerwiderung'
WHEN 103 THEN 'Duplik zur Replik auf die Erwiderung zum Antrag auf Schadensersatzbemessung'
WHEN 104 THEN 'Sachentscheidung'
WHEN 105 THEN 'Entscheidung oder Anordnung'
WHEN 106 THEN 'Replik auf die Erwiderung zur Widerklage'
WHEN 108 THEN 'Duplik zur Replik auf die Erwiderung zum Antrag auf Rechnungslegung'
WHEN 109 THEN 'Berufungsschrift gegen eine in Regel 220.1(c) genannte Anordnung oder eine in Regel 220.2 oder 221.3 genannte Entscheidung'
WHEN 110 THEN 'Antrag auf Berufungszulassung gegen Kostenentscheidungen'
WHEN 111 THEN 'Erwiderung auf die Verletzungswiderklage'
WHEN 113 THEN 'Anordnung des Berichterstatters zur Einreichung von Übersetzungen'
WHEN 114 THEN 'Duplik zur Replik auf die Erwiderung zur Nichtigkeitsklage'
ELSE name_de
END
WHERE id IN (
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 49, 50, 52,
53, 54, 55, 56, 57, 60, 61, 62, 63, 64,
65, 66, 67, 68, 70, 71, 73, 74, 75, 76,
77, 78, 80, 81, 82, 84, 85, 86, 87, 88,
89, 90, 92, 93, 95, 96, 97, 98, 99, 100,
101, 102, 103, 104, 105, 106, 108, 109, 110, 111,
113, 114
);

View File

@@ -335,6 +335,7 @@ type DeadlineRule struct {
Timing *string `db:"timing" json:"timing,omitempty"`
RuleCode *string `db:"rule_code" json:"rule_code,omitempty"`
DeadlineNotes *string `db:"deadline_notes" json:"deadline_notes,omitempty"`
DeadlineNotesEn *string `db:"deadline_notes_en" json:"deadline_notes_en,omitempty"`
SequenceOrder int `db:"sequence_order" json:"sequence_order"`
ConditionRuleID *uuid.UUID `db:"condition_rule_id" json:"condition_rule_id,omitempty"`
ConditionFlag *string `db:"condition_flag" json:"condition_flag,omitempty"`

View File

@@ -23,7 +23,7 @@ func NewDeadlineRuleService(db *sqlx.DB) *DeadlineRuleService {
const ruleColumns = `id, proceeding_type_id, parent_id, code, name, name_en,
description, primary_party, event_type, is_mandatory, duration_value,
duration_unit, timing, rule_code, deadline_notes, sequence_order,
duration_unit, timing, rule_code, deadline_notes, deadline_notes_en, sequence_order,
condition_rule_id, condition_flag, alt_duration_value, alt_duration_unit, alt_rule_code,
anchor_alt, is_spawn, spawn_label, is_active, created_at, updated_at`

View File

@@ -37,6 +37,7 @@ type UIDeadline struct {
IsMandatory bool `json:"isMandatory"`
RuleRef string `json:"ruleRef"`
Notes string `json:"notes,omitempty"`
NotesEN string `json:"notesEN,omitempty"`
DueDate string `json:"dueDate"`
OriginalDate string `json:"originalDate"`
WasAdjusted bool `json:"wasAdjusted"`
@@ -152,6 +153,9 @@ func (s *FristenrechnerService) Calculate(ctx context.Context, proceedingCode, t
if r.DeadlineNotes != nil {
d.Notes = *r.DeadlineNotes
}
if r.DeadlineNotesEn != nil {
d.NotesEN = *r.DeadlineNotesEn
}
// Zero-duration rules either anchor the timeline (trigger date) or
// represent court-set waypoints with no calculable date.