feat(t-paliad-131): Phase B6 — cross-cutting concepts (Wiedereinsetzung × 4 + Versäumnis + Schriftsatznachreichung + Weiterbehandlung)
PR-7 of the Unified Fristenrechner. Final Phase B migration. Closes
all named cross-procedural deadline gaps in the design.
These concepts fire across many proceedings (any patent application,
any civil case, any opposition, any appeal) and don't naturally belong
to one proceeding-tree timeline. Modelled per design §5.2.4 + §5.3 as
event-trigger-only entries: the user picks the trigger ("the moment
the obstacle was removed", "the date the Versäumnisurteil was served")
and the calculator returns the deadline.
Migration 046 adds 7 trigger_events (ids 200–206, paliad-native space
above the youpc-imported 1–114 range so future resync stays clean) and
7 corresponding event_deadlines + 3 new concepts.
WIEDEREINSETZUNG IN 4 LEGAL CONTEXTS (one shared concept slug
re-establishment-of-rights, seeded in PR-1):
- PatG §123(2): trigger 200, 2 months / max 1 year
- ZPO §234(1): trigger 201, **2 WEEKS** / max 1 year
← critical distinction; the 2-weeks-not-months ZPO
case is the most-confused detail of DE
Wiedereinsetzung. notes_de explicitly capitalises
"WOCHEN" so the user reads it before computing.
- EPC Art.122 + R.136(1): trigger 202, 2 months / max 12 months
- DPMA via PatG §123: trigger 203, 2 months / max 1 year
OTHER CROSS-CUTTING:
- Versäumnisurteil-Einspruch (ZPO §339): trigger 204, 2 weeks
Notfrist — keine Verlängerung möglich.
- Schriftsatznachreichung (ZPO §296a): trigger 205, 3 weeks
(court-set typical; placeholder the user can adjust via
click-to-edit if the court actually set a different period)
- Weiterbehandlung (Art.121 EPÜ + R.135): trigger 206, 2 months
Distinct from Wiedereinsetzung — niedrigere Gebühr, applies
BEFORE final loss of rights.
Three new concepts (slug naming per design §4.4):
- versaeumnisurteil-einspruch (DE-only procedure → DE slug)
- schriftsatznachreichung (DE-only → DE slug)
- weiterbehandlung (EPC-native + DE term dominates HLC vocab → DE slug)
Live-verified all 7 trigger_events on paliad.de (tester@hlc.de) via
the existing /tools/fristenrechner "Was kommt nach…" mode:
trigger 200 → 2026-07-06 (2mo PatG, weekend-shift)
trigger 201 → 2026-05-18 (2 WEEKS ZPO — the critical case)
trigger 204 → 2026-05-18 (2 weeks ZPO §339)
trigger 205 → 2026-05-26 (3 weeks ZPO §296a)
trigger 206 → 2026-07-06 (2mo EPC weiterbehandlung)
Out of scope (no calculator-relevant deadlines, would just be search
clutter): Mahnverfahren-Widerspruch (ZPO §345), Validierungsfristen
national (Art. 65 EPÜ → varies per state), Teilanmeldung (R.36 EPC →
"until end of pending parent" is anchor-on-revocation-of-grant).
Phase B is now complete. Phase C (search backend) + Phase D (concept-
card UI) follow per design.
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
-- Reverses 046_cross_cutting_triggers.
|
||||
|
||||
DELETE FROM paliad.event_deadlines WHERE id BETWEEN 200 AND 206;
|
||||
DELETE FROM paliad.trigger_events WHERE id BETWEEN 200 AND 206;
|
||||
|
||||
DELETE FROM paliad.deadline_concepts
|
||||
WHERE slug IN ('versaeumnisurteil-einspruch','schriftsatznachreichung','weiterbehandlung')
|
||||
AND id NOT IN (SELECT concept_id FROM paliad.deadline_rules WHERE concept_id IS NOT NULL);
|
||||
152
internal/db/migrations/046_cross_cutting_triggers.up.sql
Normal file
152
internal/db/migrations/046_cross_cutting_triggers.up.sql
Normal file
@@ -0,0 +1,152 @@
|
||||
-- t-paliad-131 Phase B6: cross-cutting concepts as trigger_events.
|
||||
--
|
||||
-- These concepts (Wiedereinsetzung, Versäumnisurteil-Einspruch,
|
||||
-- Schriftsatznachreichung, Weiterbehandlung) fire across many proceedings
|
||||
-- and don't naturally belong to any one proceeding-tree timeline. Per
|
||||
-- design §5.2.4 + §5.3, they're best modelled as event-trigger-only
|
||||
-- entries: the user picks the trigger ("the moment the obstacle was
|
||||
-- removed", "the date the Versäumnisurteil was served") and the
|
||||
-- calculator returns the deadline.
|
||||
--
|
||||
-- Wiedereinsetzung gets 4 trigger_events sharing one concept slug
|
||||
-- (`re-establishment-of-rights`, seeded in PR-1 migration 040) — one per
|
||||
-- legal regime since the durations differ:
|
||||
-- * PatG §123(2): 2 months / max 12 months from missed deadline
|
||||
-- * ZPO §234(1): 2 weeks / max 1 year (note: 2 WEEKS, not months —
|
||||
-- the most-confused detail of DE Wiedereinsetzung)
|
||||
-- * EPÜ Art.122 + R.136(1): 2 months / max 12 months
|
||||
-- * DPMA via PatG §123: same as patent national
|
||||
--
|
||||
-- Versäumnisurteil-Einspruch (ZPO §339) and Schriftsatznachreichung
|
||||
-- (ZPO §296a) get their own concepts. Weiterbehandlung (Art.121 EPÜ +
|
||||
-- R.135) is a separate cross-cutting concept (parallel to Wieder-
|
||||
-- einsetzung but distinct legally — applies before final loss of rights,
|
||||
-- different fee).
|
||||
--
|
||||
-- ID-space: trigger_events / event_deadlines are bigint. youpc-imported
|
||||
-- rows occupy 1-111. Using 200+ for paliad-native cross-cutting rows
|
||||
-- leaves headroom for future youpc resync without collision.
|
||||
|
||||
-- ============================================================================
|
||||
-- 1. New concepts (3 new + 1 existing reused for Wiedereinsetzung)
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO paliad.deadline_concepts (slug, name_de, name_en, description, aliases, party, category, sort_order) VALUES
|
||||
('versaeumnisurteil-einspruch', 'Einspruch gegen Versäumnisurteil', 'Objection to Default Judgment',
|
||||
'Einspruch des säumigen Beklagten gegen ein Versäumnisurteil (§ 339 ZPO) — 2 Wochen ab Zustellung des Versäumnisurteils. Setzt das Verfahren in den Stand vor der Versäumnis zurück.',
|
||||
ARRAY['Einspruch Versäumnisurteil', 'Versäumnisurteil Einspruch', 'objection default judgment', 'ZPO 339'],
|
||||
'defendant', 'submission', 46),
|
||||
('schriftsatznachreichung', 'Schriftsatznachreichung', 'Subsequent Written Submission',
|
||||
'Nachreichung eines Schriftsatzes nach mündlicher Verhandlung (§ 296a ZPO) — vom Gericht gesetzte Frist, typischerweise 2-3 Wochen. Beschränkt auf Stellungnahme zu in der Verhandlung aufgeworfenen Punkten.',
|
||||
ARRAY['Schriftsatznachreichung', 'Nachreichung Schriftsatz', 'subsequent submission', 'ZPO 296a'],
|
||||
'both', 'submission', 47),
|
||||
('weiterbehandlung', 'Weiterbehandlung', 'Further Processing',
|
||||
'Antrag auf Weiterbehandlung der EP-Anmeldung nach Fristversäumung (Art. 121 EPÜ + R. 135 EPC) — 2 Monate ab Zustellung der Mitteilung über den Rechtsverlust. Niedrigere Gebühr als Wiedereinsetzung; nicht für alle Fristen verfügbar.',
|
||||
ARRAY['Weiterbehandlung', 'further processing', 'Art. 121 EPÜ', 'R. 135 EPC'],
|
||||
'claimant', 'submission', 48)
|
||||
ON CONFLICT (slug) DO UPDATE SET
|
||||
name_de = EXCLUDED.name_de,
|
||||
name_en = EXCLUDED.name_en,
|
||||
description = EXCLUDED.description,
|
||||
aliases = EXCLUDED.aliases,
|
||||
party = EXCLUDED.party,
|
||||
sort_order = EXCLUDED.sort_order,
|
||||
updated_at = now();
|
||||
|
||||
-- ============================================================================
|
||||
-- 2. Cross-cutting trigger_events (paliad-native, ids 200+)
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO paliad.trigger_events (id, code, name, name_de, description, is_active, concept_id) VALUES
|
||||
(200, 'wegfall_hindernisses_de_patg', 'Removal of obstacle (PatG §123)',
|
||||
'Wegfall des Hindernisses (§ 123 PatG)',
|
||||
'Der Tag, an dem das Hindernis weggefallen ist, das die Einhaltung einer patentrechtlichen Frist verhinderte (§ 123(2) PatG).',
|
||||
true, 're-establishment-of-rights'),
|
||||
(201, 'wegfall_hindernisses_de_zpo', 'Removal of obstacle (ZPO §233)',
|
||||
'Wegfall des Hindernisses (§ 233 ZPO)',
|
||||
'Der Tag, an dem das Hindernis weggefallen ist, das die Einhaltung einer zivilprozessualen Frist verhinderte (§ 234(1) ZPO).',
|
||||
true, 're-establishment-of-rights'),
|
||||
(202, 'wegfall_hindernisses_eu_epc', 'Removal of obstacle (EPC Art.122)',
|
||||
'Wegfall des Hindernisses (Art. 122 EPÜ)',
|
||||
'Der Tag, an dem das Hindernis weggefallen ist, das die Einhaltung einer EPA-Frist verhinderte (Art. 122 EPÜ + R. 136(1) EPÜ).',
|
||||
true, 're-establishment-of-rights'),
|
||||
(203, 'wegfall_hindernisses_dpma', 'Removal of obstacle (DPMA, PatG §123)',
|
||||
'Wegfall des Hindernisses (DPMA, § 123 PatG)',
|
||||
'Der Tag, an dem das Hindernis weggefallen ist, das die Einhaltung einer DPMA-Frist verhinderte (§ 123(2) PatG, gilt auch für DPMA-Verfahren).',
|
||||
true, 're-establishment-of-rights'),
|
||||
(204, 'zustellung_versaeumnisurteil', 'Service of default judgment',
|
||||
'Zustellung Versäumnisurteil',
|
||||
'Zustellung eines Versäumnisurteils — Trigger für die 2-Wochen-Einspruchsfrist (§ 339 ZPO).',
|
||||
true, 'versaeumnisurteil-einspruch'),
|
||||
(205, 'ende_muendl_verhandlung', 'End of oral hearing',
|
||||
'Ende der mündlichen Verhandlung',
|
||||
'Schluss der mündlichen Verhandlung — Trigger für eine ggf. vom Gericht gesetzte Frist zur Schriftsatznachreichung (§ 296a ZPO).',
|
||||
true, 'schriftsatznachreichung'),
|
||||
(206, 'mitteilung_rechtsverlust_eu', 'Loss-of-rights notice (EPC)',
|
||||
'Mitteilung über Rechtsverlust (EPA)',
|
||||
'Zustellung der EPA-Mitteilung nach R. 112(1) EPÜ über den Verlust eines Rechts — Trigger für die 2-Monats-Frist zur Weiterbehandlung (Art. 121 EPÜ).',
|
||||
true, 'weiterbehandlung')
|
||||
ON CONFLICT (id) DO UPDATE SET
|
||||
code = EXCLUDED.code,
|
||||
name = EXCLUDED.name,
|
||||
name_de = EXCLUDED.name_de,
|
||||
description = EXCLUDED.description,
|
||||
concept_id = EXCLUDED.concept_id,
|
||||
is_active = EXCLUDED.is_active;
|
||||
|
||||
-- ============================================================================
|
||||
-- 3. event_deadlines for each cross-cutting trigger
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO paliad.event_deadlines (
|
||||
id, trigger_event_id, title, title_de,
|
||||
duration_value, duration_unit, timing,
|
||||
notes, notes_en, alt_duration_value, alt_duration_unit, combine_op,
|
||||
is_active, legal_source
|
||||
) VALUES
|
||||
(200, 200, 'Petition for re-establishment of rights (PatG §123)', 'Wiedereinsetzungsantrag (§ 123 PatG)',
|
||||
2, 'months', 'after',
|
||||
'Frist beträgt 2 Monate ab Wegfall des Hindernisses (§ 123(2) PatG). Spätestens 1 Jahr nach Ablauf der versäumten Frist; bei Erteilungsfristen + Jahresgebühren keine 1-Jahres-Grenze.',
|
||||
'Period is 2 months from removal of the obstacle (PatG §123(2)). Latest 1 year after expiry of the missed deadline; no 1-year cap for grant deadlines and annual fees.',
|
||||
NULL, NULL, NULL, true, 'DE.PatG.123.2'),
|
||||
(201, 201, 'Petition for re-establishment of rights (ZPO §233)', 'Wiedereinsetzungsantrag (§ 233 ZPO)',
|
||||
2, 'weeks', 'after',
|
||||
'Frist beträgt 2 WOCHEN (nicht Monate!) ab Wegfall des Hindernisses (§ 234(1) ZPO). Spätestens 1 Jahr nach Ablauf der versäumten Frist (§ 234(3) ZPO).',
|
||||
'Period is 2 WEEKS (not months!) from removal of the obstacle (ZPO §234(1)). Latest 1 year after expiry of the missed deadline (ZPO §234(3)).',
|
||||
NULL, NULL, NULL, true, 'DE.ZPO.234.1'),
|
||||
(202, 202, 'Petition for re-establishment of rights (EPC Art.122)', 'Wiedereinsetzungsantrag (Art. 122 EPÜ)',
|
||||
2, 'months', 'after',
|
||||
'Frist beträgt 2 Monate ab Wegfall des Hindernisses (R. 136(1) EPÜ). Spätestens 12 Monate nach Ablauf der versäumten Frist.',
|
||||
'Period is 2 months from removal of the obstacle (Rule 136(1) EPC). Latest 12 months after expiry of the missed deadline.',
|
||||
NULL, NULL, NULL, true, 'EU.EPC-R.136.1'),
|
||||
(203, 203, 'Petition for re-establishment of rights (DPMA)', 'Wiedereinsetzungsantrag (DPMA)',
|
||||
2, 'months', 'after',
|
||||
'Frist beträgt 2 Monate ab Wegfall des Hindernisses (§ 123(2) PatG, gilt auch für DPMA-Verfahren). Spätestens 1 Jahr nach Ablauf der versäumten Frist.',
|
||||
'Period is 2 months from removal of the obstacle (PatG §123(2), also applies to DPMA proceedings). Latest 1 year after expiry of the missed deadline.',
|
||||
NULL, NULL, NULL, true, 'DE.PatG.123.2'),
|
||||
(204, 204, 'Objection to default judgment (ZPO §339)', 'Einspruch gegen Versäumnisurteil (§ 339 ZPO)',
|
||||
2, 'weeks', 'after',
|
||||
'Einspruch innerhalb von 2 Wochen ab Zustellung des Versäumnisurteils (§ 339(1) ZPO). Notfrist — keine Verlängerung möglich.',
|
||||
'Objection within 2 weeks of service of the default judgment (ZPO §339(1)). Statutory deadline — no extension possible.',
|
||||
NULL, NULL, NULL, true, 'DE.ZPO.339.1'),
|
||||
(205, 205, 'Subsequent written submission (ZPO §296a)', 'Schriftsatznachreichung (§ 296a ZPO)',
|
||||
3, 'weeks', 'after',
|
||||
'Vom Gericht gesetzte Frist zur Nachreichung von Schriftsätzen nach Schluss der mündlichen Verhandlung (§ 296a ZPO) — typischerweise 2-3 Wochen. Beschränkt auf Stellungnahme zu in der Verhandlung aufgeworfenen Punkten.',
|
||||
'Court-set deadline for subsequent submissions after close of oral hearing (ZPO §296a) — typically 2-3 weeks. Limited to comments on matters raised at the hearing.',
|
||||
NULL, NULL, NULL, true, 'DE.ZPO.296a'),
|
||||
(206, 206, 'Request for further processing (Art.121 EPC)', 'Weiterbehandlungsantrag (Art. 121 EPÜ)',
|
||||
2, 'months', 'after',
|
||||
'Antrag auf Weiterbehandlung innerhalb von 2 Monaten ab Zustellung der Mitteilung über den Rechtsverlust (R. 135(1) EPÜ). Gebühr pro versäumte Frist. Nicht verfügbar für bestimmte Fristen (z.B. Prioritätsfrist).',
|
||||
'Request for further processing within 2 months of service of the loss-of-rights notice (Rule 135(1) EPC). Fee per missed deadline. Not available for certain deadlines (e.g. priority period).',
|
||||
NULL, NULL, NULL, true, 'EU.EPC-R.135.1')
|
||||
ON CONFLICT (id) DO UPDATE SET
|
||||
trigger_event_id = EXCLUDED.trigger_event_id,
|
||||
title = EXCLUDED.title,
|
||||
title_de = EXCLUDED.title_de,
|
||||
duration_value = EXCLUDED.duration_value,
|
||||
duration_unit = EXCLUDED.duration_unit,
|
||||
timing = EXCLUDED.timing,
|
||||
notes = EXCLUDED.notes,
|
||||
notes_en = EXCLUDED.notes_en,
|
||||
legal_source = EXCLUDED.legal_source,
|
||||
is_active = EXCLUDED.is_active;
|
||||
Reference in New Issue
Block a user