mAi
d913f4fc30
feat(builder): B5 — share + promote-to-project wizard (t-paliad-350)
Litigation Builder slice B5 (m/paliad#153 PRD §2.4 + §2.5 + §5.4 + §10).
Backend (internal/services/scenario_builder_service.go):
- ListSharedWithMe — scenarios shared read-only with the caller (the
"Geteilt mit mir" bucket).
- PromoteScenario — transactional promote-to-project (PRD §10, no partial
promotions). One Postgres tx: INSERT paliad.projects ('case',
origin_scenario_id, proceeding_type_id + scenario_flags from the primary
triplet) → creator team lead + wizard-selected colleagues → parties →
deadlines (filed→completed, planned→pending with computed/actual date,
skipped→none) → flip scenario to 'promoted' + promoted_project_id. The
primary top-level proceeding + its spawned descendants form the one case
file; additional standalone proceedings are reported via
ProceedingsSkipped and stay in the scenario. Planned dates come from the
injected FristenrechnerService.Calculate; court-set/undated planned
events are skipped + counted.
- NewScenarioBuilderService gains a *FristenrechnerService dep (wired in
cmd/server/main.go; nil in tests that don't promote).
Handlers/routes:
- GET /api/builder/scenarios/shared, POST /api/builder/scenarios/{id}/promote.
Frontend:
- builder-shares.ts — share modal (HLC user picker + current-shares list +
revoke).
- builder-promote.ts — 3-step wizard (Bestätigen → Parteien ergänzen →
Akte-Metadaten) → POST /promote → navigate to /projects/{id}.
- builder.ts — bucketed side panel (Aktiv / Geteilt mit mir / Als Projekt
angelegt / Archiviert), read-only chrome (watermark + locked affordances)
for shared/promoted scenarios, wired share + promote buttons, deep-link
auto-load now covers shared scenarios.
- procedures.tsx — enabled buttons, bucket containers, readonly watermark slot.
- global.css — modal scaffold, share UI, promote wizard, buckets, readonly
state. i18n.ts + i18n-keys.ts — DE+EN keys.
Tests: TestScenarioBuilderPromote (live-DB) pins the transactional cascade
+ readonly-after-promote + re-promote rejection. go build/vet/test + bun
build clean. Verified end-to-end via Playwright: Journey E (share → 2nd
user read-only watermark + locked canvas, incl. deep-link) and Journey D
(promote wizard 3 steps → project created with party → navigate → scenario
flipped to promoted).
2026-05-29 20:37:05 +02:00
..
2026-04-30 16:46:31 +02:00
2026-05-26 21:27:00 +02:00
2026-05-20 15:19:48 +02:00
2026-04-22 23:38:03 +02:00
2026-04-30 16:46:31 +02:00
2026-05-20 15:23:28 +02:00
2026-05-20 13:26:23 +02:00
2026-05-20 10:02:36 +02:00
2026-05-25 15:49:39 +02:00
2026-04-29 19:12:11 +02:00
2026-04-30 16:46:31 +02:00
2026-04-18 02:23:50 +02:00
2026-04-30 16:46:31 +02:00
2026-05-25 15:28:37 +02:00
2026-05-07 20:58:57 +02:00
2026-05-28 10:10:33 +02:00
2026-05-07 22:41:18 +02:00
2026-04-30 16:46:31 +02:00
2026-05-13 00:03:45 +02:00
2026-05-13 00:03:45 +02:00
2026-05-01 09:48:25 +02:00
2026-05-20 15:38:30 +02:00
2026-05-20 15:24:06 +02:00
2026-05-22 23:32:12 +02:00
2026-04-30 16:46:31 +02:00
2026-05-20 13:55:56 +02:00
2026-05-20 13:55:56 +02:00
2026-05-20 13:55:56 +02:00
2026-05-15 01:01:28 +02:00
2026-05-21 14:23:04 +02:00
2026-05-06 16:24:31 +02:00
2026-05-06 16:41:41 +02:00
2026-05-29 15:50:42 +02:00
2026-04-14 19:32:07 +02:00
2026-04-30 16:46:31 +02:00
2026-05-25 16:45:21 +02:00
2026-05-15 01:09:20 +02:00
2026-04-30 16:46:31 +02:00
2026-05-04 14:40:53 +02:00
2026-05-07 22:58:44 +02:00
2026-05-20 13:03:57 +02:00
2026-05-26 20:21:12 +02:00
2026-05-20 19:15:32 +02:00
2026-05-26 22:01:10 +02:00
2026-05-26 22:01:10 +02:00
2026-05-28 11:01:49 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-05-29 20:37:05 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-04-26 00:36:33 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-04-30 16:46:31 +02:00
2026-05-08 19:59:44 +02:00
2026-05-26 18:17:33 +02:00
2026-04-30 16:46:31 +02:00
2026-05-07 22:21:45 +02:00
2026-05-22 23:43:15 +02:00
2026-04-20 17:44:45 +02:00
2026-05-29 16:00:27 +02:00
2026-04-26 10:48:27 +02:00
2026-05-21 14:23:04 +02:00
2026-04-30 02:29:09 +02:00
2026-05-29 20:37:05 +02:00
2026-05-27 15:02:01 +02:00
2026-05-26 17:48:56 +02:00
2026-04-22 23:36:10 +02:00
2026-05-20 14:43:42 +02:00
2026-05-26 19:23:40 +02:00
2026-05-26 20:04:40 +02:00
2026-05-29 17:55:31 +02:00
2026-05-26 20:26:53 +02:00
2026-05-25 17:03:34 +02:00
2026-05-26 18:15:01 +02:00
2026-04-30 03:42:25 +02:00
2026-05-20 14:46:36 +02:00
2026-05-29 17:55:31 +02:00
2026-04-30 16:46:31 +02:00
2026-05-27 20:34:54 +02:00
2026-05-07 13:15:55 +02:00
2026-05-07 12:51:37 +02:00