// Shared data — mock Swiss property management const CITIES = ['Zürich','Bern','Basel','Luzern','Winterthur','St. Gallen','Thun','Biel/Bienne']; const PROPERTIES = [ {id:'L-001', street:'Rämistrasse 42', plz:'8001', city:'Zürich', units:12, vacant:1, hauswart:'M. Brunner', built:1962, pic:'#2A3B55'}, {id:'L-002', street:'Länggassstrasse 78', plz:'3012', city:'Bern', units:8, vacant:0, hauswart:'P. Aeschlimann', built:1978, pic:'#3A4A66'}, {id:'L-003', street:'Spalenring 134', plz:'4055', city:'Basel', units:16, vacant:2, hauswart:'T. Hofmann', built:1958, pic:'#2F4052'}, {id:'L-004', street:'Tribschenstrasse 21', plz:'6005', city:'Luzern', units:6, vacant:0, hauswart:'M. Brunner', built:1984, pic:'#334A5E'}, {id:'L-005', street:'Zürcherstrasse 205', plz:'8406', city:'Winterthur', units:14, vacant:1, hauswart:'S. Keller', built:1971, pic:'#2A3848'}, {id:'L-006', street:'Rorschacher Strasse 92', plz:'9000', city:'St. Gallen', units:9, vacant:0, hauswart:'T. Hofmann', built:1965, pic:'#3D4D68'}, ]; const MIETER = [ {id:'U-101', name:'Andrea Meier', email:'a.meier@bluewin.ch', unit:'L-001 · 2. OG links', since:'2021-03-01', initials:'AM'}, {id:'U-102', name:'Reto Huber', email:'reto.huber@gmail.com', unit:'L-001 · 3. OG rechts', since:'2019-08-15', initials:'RH'}, {id:'U-103', name:'Sandra Frei', email:'s.frei@hispeed.ch', unit:'L-001 · 1. OG links', since:'2023-01-01', initials:'SF'}, {id:'U-104', name:'Marco Gasser', email:'mgasser@gmx.ch', unit:'L-001 · EG rechts', since:'2018-05-01', initials:'MG'}, {id:'U-105', name:'Nicole Bühler', email:'n.buehler@bluewin.ch', unit:'L-002 · 2. OG', since:'2022-11-01', initials:'NB'}, {id:'U-106', name:'Daniel Zimmermann', email:'dzimmermann@gmail.com', unit:'L-003 · 4. OG links', since:'2020-07-01', initials:'DZ'}, {id:'U-107', name:'Claudia Steiner', email:'c.steiner@gmx.ch', unit:'L-003 · 1. OG', since:'2024-02-15', initials:'CS'}, ]; const UNITS_L001 = [ {id:'L-001-01', label:'EG links', floor:'EG', rooms:2.5, qm:64, mzs:1850, nk:220, status:'vermietet', mieter:'—'}, {id:'L-001-02', label:'EG rechts', floor:'EG', rooms:3.5, qm:82, mzs:2280, nk:280, status:'vermietet', mieter:'M. Gasser'}, {id:'L-001-03', label:'1. OG links', floor:'1.OG', rooms:2.5, qm:64, mzs:1950, nk:220, status:'vermietet', mieter:'S. Frei'}, {id:'L-001-04', label:'1. OG rechts', floor:'1.OG', rooms:3.5, qm:82, mzs:2350, nk:280, status:'vermietet', mieter:'—'}, {id:'L-001-05', label:'2. OG links', floor:'2.OG', rooms:3.5, qm:84, mzs:2420, nk:290, status:'vermietet', mieter:'A. Meier'}, {id:'L-001-06', label:'2. OG rechts', floor:'2.OG', rooms:3.5, qm:82, mzs:2390, nk:280, status:'vermietet', mieter:'—'}, {id:'L-001-07', label:'3. OG links', floor:'3.OG', rooms:2.5, qm:64, mzs:2050, nk:220, status:'gekündigt', mieter:'—'}, {id:'L-001-08', label:'3. OG rechts', floor:'3.OG', rooms:3.5, qm:82, mzs:2480, nk:280, status:'vermietet', mieter:'R. Huber'}, {id:'L-001-09', label:'DG links', floor:'DG', rooms:4.5, qm:110, mzs:2980, nk:340, status:'vermietet', mieter:'—'}, {id:'L-001-10', label:'DG rechts', floor:'DG', rooms:4.5, qm:108, mzs:2920, nk:340, status:'leer', mieter:'—'}, {id:'L-001-11', label:'Attika', floor:'ATT', rooms:5.5, qm:168, mzs:4650, nk:480, status:'vermietet', mieter:'—'}, {id:'L-001-12', label:'Studio UG', floor:'UG', rooms:1.5, qm:38, mzs:1280, nk:160, status:'vermietet', mieter:'—'}, ]; const TICKETS = [ // neu {id:'SM-0384', title:'Wasserhahn Küche tropft stark', cat:'Sanitär', urgency:'normal', status:'neu', unit:'L-001 · 2. OG links', mieter:'A. Meier', prop:'Rämistrasse 42', date:'Vor 3 Std.', comments:0, photos:2}, {id:'SM-0383', title:'Rolladen im Schlafzimmer klemmt', cat:'Fenster/Türen', urgency:'normal', status:'neu', unit:'L-003 · 4. OG', mieter:'D. Zimmermann', prop:'Spalenring 134', date:'Vor 5 Std.', comments:0, photos:1}, {id:'SM-0382', title:'Waschmaschine pumpt nicht ab', cat:'Geräte', urgency:'dringend', status:'neu', unit:'L-001 · EG', mieter:'M. Gasser', prop:'Rämistrasse 42', date:'Gestern', comments:1, photos:3}, // gesichtet {id:'SM-0381', title:'Schimmel in Badezimmer-Ecke', cat:'Schimmel', urgency:'dringend', status:'gesichtet', unit:'L-005 · 3. OG', mieter:'B. Lehmann', prop:'Zürcherstrasse 205', date:'Vor 2 Tagen', comments:4, photos:5}, {id:'SM-0380', title:'Heizung Wohnzimmer wird nicht warm', cat:'Heizung', urgency:'dringend', status:'gesichtet', unit:'L-002 · 2. OG', mieter:'N. Bühler', prop:'Länggass. 78', date:'Vor 2 Tagen', comments:2, photos:1}, // auftrag {id:'SM-0379', title:'Steckdose Küche ohne Strom', cat:'Elektro', urgency:'dringend', status:'auftrag', unit:'L-001 · 1. OG', mieter:'S. Frei', prop:'Rämistrasse 42', date:'Vor 3 Tagen', comments:3, photos:2, assignee:'Elektro Bürgi AG'}, {id:'SM-0378', title:'Lift klemmt zwischen 1. und 2. OG', cat:'Allgemein', urgency:'notfall', status:'auftrag', unit:'Allgemeinbereich', mieter:'Mehrere', prop:'Spalenring 134', date:'Vor 3 Tagen', comments:8, photos:0, assignee:'Schindler Service'}, // termin {id:'SM-0377', title:'Kühlschrank-Dichtung ersetzen', cat:'Geräte', urgency:'normal', status:'termin', unit:'L-003 · 1. OG', mieter:'C. Steiner', prop:'Spalenring 134', date:'Vor 5 Tagen', comments:2, photos:1, assignee:'Hauswart', when:'Di 28.04. 09:00'}, {id:'SM-0376', title:'Balkontür schliesst nicht dicht', cat:'Fenster/Türen', urgency:'normal', status:'termin', unit:'L-001 · DG links', mieter:'F. Widmer', prop:'Rämistrasse 42', date:'Vor 6 Tagen', comments:2, photos:3, assignee:'Schreinerei Koch', when:'Do 30.04. 14:00'}, // erledigt {id:'SM-0375', title:'Briefkasten-Schloss defekt', cat:'Allgemein', urgency:'normal', status:'erledigt', unit:'Allgemeinbereich', mieter:'R. Huber', prop:'Rämistrasse 42', date:'10 Tage', comments:3, photos:2, assignee:'Hauswart'}, {id:'SM-0374', title:'Tropfender Duschkopf', cat:'Sanitär', urgency:'normal', status:'erledigt', unit:'L-002 · 3. OG', mieter:'J. Stucki', prop:'Länggass. 78', date:'12 Tage', comments:2, photos:1, assignee:'Hauswart'}, {id:'SM-0373', title:'Wohnungstür-Scharnier lose', cat:'Fenster/Türen', urgency:'normal', status:'erledigt', unit:'L-001 · 1. OG', mieter:'S. Frei', prop:'Rämistrasse 42', date:'14 Tage', comments:1, photos:2, assignee:'Hauswart'}, ]; const STATUS_LABELS = { neu: {label:'Neu / Gemeldet', tone:'badge-crit', idx:0}, gesichtet:{label:'Gesichtet', tone:'badge-warn', idx:1}, auftrag: {label:'Auftrag erteilt', tone:'badge-info', idx:2}, termin: {label:'Termin vereinbart', tone:'badge-info', idx:3}, erledigt: {label:'Erledigt', tone:'badge-ok', idx:4}, }; const URGENCY = { normal:{l:'Normal', b:'badge-neutral'}, dringend:{l:'Dringend', b:'badge-warn'}, notfall:{l:'Notfall', b:'badge-crit'}, }; const CHAT_MESSAGES = [ {id:1, from:'Peter Aeschlimann', role:'Hauswart', me:false, text:'Guten Morgen zäme, nur kurz zur Info: Die Waschküche ist heute Nachmittag wegen Service ab 14 Uhr gesperrt. Ab morgen wieder normal buchbar.', time:'08:14', initials:'PA'}, {id:2, from:'Nicole Bühler', role:'Mieterin', me:false, text:'Danke für die Info!', time:'08:22', initials:'NB'}, {id:3, from:'Johannes Stucki', role:'Mieter', me:false, text:'Hat jemand den Schlüssel vom Veloraum gesehen? Der am Haken fehlt seit gestern.', time:'10:05', initials:'JS'}, {id:4, from:'Peter Aeschlimann', role:'Hauswart', me:false, text:'@Johannes schau ich nach - ich hatte den eventuell noch. Melde mich gleich.', time:'10:11', initials:'PA'}, {id:5, from:'Sie', role:'Sachbearbeiterin', me:true, text:'Kurze Erinnerung: Heizungswartung am 15.05. Die Monteure kommen zwischen 09:00 und 12:00 in jede Wohnung. Bitte daheim sein oder Schlüssel hinterlegen.', time:'11:34', initials:'LK'}, {id:6, from:'Andrea Meier', role:'Mieterin', me:false, text:'Muss ich persönlich da sein oder reicht der Schlüssel vom Hauswart?', time:'11:48', initials:'AM'}, {id:7, from:'Sie', role:'Sachbearbeiterin', me:true, text:'Hauswart-Schlüssel reicht völlig. Peter koordiniert das.', time:'11:50', initials:'LK'}, ]; const NEWS = [ {id:1, type:'urgent', title:'Wasserhaupt­leitung Rämistrasse 42 – Unterbruch Mi 23.04. 9–12 Uhr', body:'Wegen Reparaturarbeiten am Hauptstrang ist das Wasser am Mittwochvormittag unterbrochen. Bitte vorher mit Trinkwasser eindecken. Warmwasser funktioniert ab ca. 13 Uhr wieder normal.', author:'Laura Keller · Verwaltung', date:'Gestern 14:32', read:8, total:11}, {id:2, type:'event', title:'Heizungs­wartung Frühling – 15.05.2026', body:'Wie jedes Jahr steht die Heizungs­wartung an. Die Monteure von Tobler Haustechnik AG arbeiten zwischen 09:00–12:00 Uhr pro Wohnung ca. 20 Minuten. Entweder anwesend sein oder Schlüssel beim Hauswart hinterlegen.', author:'Peter Aeschlimann · Hauswart', date:'Vor 2 Tagen', read:11, total:11}, {id:3, type:'info', title:'Neue Hausordnung ab 1. Mai 2026', body:'Die überarbeitete Hausordnung ist angehängt. Wesentliche Änderung: Ruhezeiten neu ab 22:00 statt 22:30. Bitte zur Kenntnis nehmen und bestätigen.', author:'Laura Keller · Verwaltung', date:'Vor 4 Tagen', read:9, total:11, doc:'Hausordnung_2026.pdf'}, ]; const EVENTS = [ {id:1, day:5, month:4, title:'Heizungs­wartung', type:'gold', time:'09:00'}, {id:2, day:7, month:4, title:'Besichtigung 3.OG', type:'default', time:'14:00'}, {id:3, day:12, month:4, title:'Handwerker Elektro', type:'default', time:'10:30'}, {id:4, day:15, month:4, title:'Wasser­unterbruch', type:'red', time:'09–12'}, {id:5, day:18, month:4, title:'Hausbesprechung', type:'green', time:'19:00'}, {id:6, day:22, month:4, title:'Lift-Service', type:'gold', time:'08:00'}, {id:7, day:28, month:4, title:'Schreinerei Koch', type:'default', time:'14:00'}, ]; const DOCS = [ {name:'Mietvertrag_Meier_2021.pdf', kind:'Mietvertrag', unit:'2.OG links', size:'421 KB', date:'01.03.2021'}, {name:'Wohnungsübergabe_Meier.pdf', kind:'Protokoll', unit:'2.OG links', size:'2.1 MB', date:'28.02.2021'}, {name:'NK_Abrechnung_2024.pdf', kind:'Nebenkosten', unit:'2.OG links', size:'184 KB', date:'15.03.2025'}, {name:'Hausordnung_2026.pdf', kind:'Reglement', unit:'Alle', size:'96 KB', date:'01.05.2026'}, {name:'Waschküchenplan.pdf', kind:'Reglement', unit:'Allgemein', size:'72 KB', date:'01.01.2025'}, {name:'Gebäudeversicherung_2026.pdf', kind:'Versicherung', unit:'Gebäude', size:'310 KB', date:'01.01.2026'}, ]; const HAUSWART_TASKS = [ {id:'T-1', title:'Treppenhaus Rämistrasse 42 – Reinigung', type:'Reinigung', due:'Heute', prop:'L-001', done:false}, {id:'T-2', title:'SM-0375 – Briefkasten-Schloss montieren', type:'Reparatur', due:'Heute', prop:'L-001', done:true, ticket:'SM-0375'}, {id:'T-3', title:'Gartenpflege Länggassstrasse 78', type:'Aussen', due:'Heute', prop:'L-002', done:false}, {id:'T-4', title:'SM-0377 – Kühlschrank-Dichtung ersetzen', type:'Reparatur', due:'Di 28.04.', prop:'L-003', done:false, ticket:'SM-0377'}, {id:'T-5', title:'Container-Rollen Veloraum ölen', type:'Unterhalt', due:'Mi 29.04.', prop:'L-001', done:false}, {id:'T-6', title:'Waschküche Monats-Service', type:'Unterhalt', due:'Fr 01.05.', prop:'L-004', done:false}, ]; const WASCH_DAYS = ['Mo 21.','Di 22.','Mi 23.','Do 24.','Fr 25.','Sa 26.','So 27.']; const WASCH_SLOTS = ['07–10','10–13','13–16','16–19','19–22']; // taken[day][slot] = null | 'mine' | initials const WASCH_DATA = [ // Mo ['P. Aeschl.', null, 'S. Frei', null, 'R. Huber'], // Di [null, 'A. Meier', null, 'M. Gasser', null], // Mi ['J. Stucki', null, 'mine', null, null], // Do [null, null, 'N. Bühler', null, 'service'], // Fr ['S. Frei', null, null, 'mine', null], // Sa [null, 'A. Meier', null, null, 'M. Gasser'], // So [null, null, null, null, null], ]; Object.assign(window, { CITIES, PROPERTIES, MIETER, UNITS_L001, TICKETS, STATUS_LABELS, URGENCY, CHAT_MESSAGES, NEWS, EVENTS, DOCS, HAUSWART_TASKS, WASCH_DAYS, WASCH_SLOTS, WASCH_DATA, });