-- KanzlAI Demo Data -- Creates 1 test tenant, 5 cases with deadlines and appointments -- Run with: psql $DATABASE_URL -f demo_data.sql SET search_path TO mgmt, public; -- Demo tenant INSERT INTO tenants (id, name, slug, settings) VALUES ('a0000000-0000-0000-0000-000000000001', 'Kanzlei Siebels & Partner', 'siebels-partner', '{}') ON CONFLICT (id) DO NOTHING; -- Link both users to the demo tenant INSERT INTO user_tenants (user_id, tenant_id, role) VALUES ('1da9374d-a8a6-49fc-a2ec-5ddfa91d522d', 'a0000000-0000-0000-0000-000000000001', 'owner'), ('ac6c9501-3757-4a6d-8b97-2cff4288382b', 'a0000000-0000-0000-0000-000000000001', 'member') ON CONFLICT DO NOTHING; -- ============================================================ -- Case 1: Patentverletzung (patent infringement) — active -- ============================================================ INSERT INTO cases (id, tenant_id, case_number, title, case_type, court, court_ref, status) VALUES ('c0000000-0000-0000-0000-000000000001', 'a0000000-0000-0000-0000-000000000001', '2026/001', 'TechCorp GmbH ./. InnovatAG — Patentverletzung EP 1234567', 'patent', 'UPC München (Lokalkammer)', 'UPC_CFI-123/2026', 'active'); INSERT INTO parties (id, tenant_id, case_id, name, role, representative) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'TechCorp GmbH', 'claimant', 'RA Dr. Siebels'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'InnovatAG', 'defendant', 'RA Müller'); INSERT INTO deadlines (id, tenant_id, case_id, title, due_date, warning_date, status, source) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'Klageerwiderung einreichen', CURRENT_DATE + INTERVAL '3 days', CURRENT_DATE + INTERVAL '1 day', 'pending', 'manual'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'Beweisangebote nachreichen', CURRENT_DATE + INTERVAL '14 days', CURRENT_DATE + INTERVAL '10 days', 'pending', 'manual'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'Schriftsatz Anspruch 3', CURRENT_DATE - INTERVAL '2 days', CURRENT_DATE - INTERVAL '5 days', 'pending', 'manual'); INSERT INTO appointments (id, tenant_id, case_id, title, start_at, end_at, location, appointment_type) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'Mündliche Verhandlung', CURRENT_DATE + INTERVAL '21 days' + TIME '10:00', CURRENT_DATE + INTERVAL '21 days' + TIME '12:00', 'UPC München, Saal 4', 'hearing'); -- ============================================================ -- Case 2: Markenrecht (trademark) — active -- ============================================================ INSERT INTO cases (id, tenant_id, case_number, title, case_type, court, court_ref, status) VALUES ('c0000000-0000-0000-0000-000000000002', 'a0000000-0000-0000-0000-000000000001', '2026/002', 'BrandHouse ./. CopyShop UG — Markenverletzung DE 30201234', 'trademark', 'LG Hamburg', '315 O 78/26', 'active'); INSERT INTO parties (id, tenant_id, case_id, name, role, representative) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'BrandHouse SE', 'claimant', 'RA Dr. Siebels'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'CopyShop UG', 'defendant', 'RA Weber'); INSERT INTO deadlines (id, tenant_id, case_id, title, due_date, warning_date, status, source) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'Antrag einstweilige Verfügung', CURRENT_DATE + INTERVAL '5 days', CURRENT_DATE + INTERVAL '2 days', 'pending', 'manual'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'Abmahnung Fristablauf', CURRENT_DATE + INTERVAL '30 days', CURRENT_DATE + INTERVAL '25 days', 'pending', 'manual'); INSERT INTO appointments (id, tenant_id, case_id, title, start_at, end_at, location, appointment_type) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'Mandantenbesprechung BrandHouse', CURRENT_DATE + INTERVAL '2 days' + TIME '14:00', CURRENT_DATE + INTERVAL '2 days' + TIME '15:30', 'Kanzlei, Besprechungsraum 1', 'consultation'); -- ============================================================ -- Case 3: Arbeitsgericht (labor law) — active -- ============================================================ INSERT INTO cases (id, tenant_id, case_number, title, case_type, court, court_ref, status) VALUES ('c0000000-0000-0000-0000-000000000003', 'a0000000-0000-0000-0000-000000000001', '2026/003', 'Schmidt ./. AutoWerk Bayern GmbH — Kündigungsschutz', 'labor', 'ArbG München', '12 Ca 456/26', 'active'); INSERT INTO parties (id, tenant_id, case_id, name, role, representative) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'Klaus Schmidt', 'claimant', 'RA Dr. Siebels'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'AutoWerk Bayern GmbH', 'defendant', 'RA Fischer'); INSERT INTO deadlines (id, tenant_id, case_id, title, due_date, warning_date, status, source) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'Kündigungsschutzklage einreichen (3-Wochen-Frist)', CURRENT_DATE + INTERVAL '7 days', CURRENT_DATE + INTERVAL '4 days', 'pending', 'manual'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'Stellungnahme Arbeitgeber', CURRENT_DATE + INTERVAL '28 days', CURRENT_DATE + INTERVAL '21 days', 'pending', 'manual'); INSERT INTO appointments (id, tenant_id, case_id, title, start_at, end_at, location, appointment_type) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'Güteverhandlung', CURRENT_DATE + INTERVAL '35 days' + TIME '09:00', CURRENT_DATE + INTERVAL '35 days' + TIME '10:00', 'ArbG München, Saal 12', 'hearing'); -- ============================================================ -- Case 4: Mietrecht (tenancy) — active -- ============================================================ INSERT INTO cases (id, tenant_id, case_number, title, case_type, court, court_ref, status) VALUES ('c0000000-0000-0000-0000-000000000004', 'a0000000-0000-0000-0000-000000000001', '2026/004', 'Hausverwaltung Zentral ./. Meier — Mietrückstand', 'civil', 'AG München', '432 C 1234/26', 'active'); INSERT INTO parties (id, tenant_id, case_id, name, role, representative) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'Hausverwaltung Zentral GmbH', 'claimant', 'RA Dr. Siebels'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'Thomas Meier', 'defendant', NULL); INSERT INTO deadlines (id, tenant_id, case_id, title, due_date, warning_date, status, source) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'Mahnbescheid beantragen', CURRENT_DATE + INTERVAL '10 days', CURRENT_DATE + INTERVAL '7 days', 'pending', 'manual'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'Räumungsfrist prüfen', CURRENT_DATE + INTERVAL '60 days', CURRENT_DATE + INTERVAL '50 days', 'pending', 'manual'); INSERT INTO appointments (id, tenant_id, case_id, title, start_at, end_at, location, appointment_type) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'Besprechung Hausverwaltung', CURRENT_DATE + INTERVAL '4 days' + TIME '11:00', CURRENT_DATE + INTERVAL '4 days' + TIME '12:00', 'Kanzlei, Besprechungsraum 2', 'meeting'); -- ============================================================ -- Case 5: Erbrecht (inheritance) — closed -- ============================================================ INSERT INTO cases (id, tenant_id, case_number, title, case_type, court, court_ref, status) VALUES ('c0000000-0000-0000-0000-000000000005', 'a0000000-0000-0000-0000-000000000001', '2025/042', 'Nachlass Wagner — Erbauseinandersetzung', 'civil', 'AG Starnberg', '3 VI 891/25', 'closed'); INSERT INTO parties (id, tenant_id, case_id, name, role, representative) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000005', 'Maria Wagner', 'claimant', 'RA Dr. Siebels'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000005', 'Peter Wagner', 'defendant', 'RA Braun'); INSERT INTO deadlines (id, tenant_id, case_id, title, due_date, warning_date, status, source, completed_at) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000005', 'Erbscheinsantrag einreichen', CURRENT_DATE - INTERVAL '30 days', CURRENT_DATE - INTERVAL '37 days', 'completed', 'manual', CURRENT_DATE - INTERVAL '32 days'); -- ============================================================ -- Case events for realistic activity feed -- ============================================================ INSERT INTO case_events (id, tenant_id, case_id, event_type, title, description, created_at, updated_at) VALUES (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'case_created', 'Akte angelegt', 'Patentverletzungsklage TechCorp ./. InnovatAG eröffnet', NOW() - INTERVAL '10 days', NOW() - INTERVAL '10 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'party_added', 'Partei hinzugefügt', 'TechCorp GmbH als Kläger eingetragen', NOW() - INTERVAL '10 days', NOW() - INTERVAL '10 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000002', 'case_created', 'Akte angelegt', 'Markenrechtsstreit BrandHouse ./. CopyShop eröffnet', NOW() - INTERVAL '7 days', NOW() - INTERVAL '7 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000003', 'case_created', 'Akte angelegt', 'Kündigungsschutzklage Schmidt eröffnet', NOW() - INTERVAL '5 days', NOW() - INTERVAL '5 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000004', 'case_created', 'Akte angelegt', 'Mietrückstand Hausverwaltung ./. Meier eröffnet', NOW() - INTERVAL '3 days', NOW() - INTERVAL '3 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000001', 'status_changed', 'Fristablauf überschritten', 'Schriftsatz Anspruch 3 ist überfällig', NOW() - INTERVAL '1 day', NOW() - INTERVAL '1 day'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000005', 'case_created', 'Akte angelegt', 'Erbauseinandersetzung Wagner eröffnet', NOW() - INTERVAL '60 days', NOW() - INTERVAL '60 days'), (gen_random_uuid(), 'a0000000-0000-0000-0000-000000000001', 'c0000000-0000-0000-0000-000000000005', 'status_changed', 'Akte geschlossen', 'Erbscheinsverfahren abgeschlossen', NOW() - INTERVAL '20 days', NOW() - INTERVAL '20 days');