Veröffentlicht

The Hausordnung is now data

Every AOZ resident signs a two-page paper Hausordnung on moving in. Until today, the app's org-level rule catalog was a plausible approximation of it — written from domain knowledge, not from the document. Approximation is the wrong relationship for a rule book to have with reality. Three examples of what "plausible" got wrong:

Topic App said Signed document says
Overnight guests allowed with permission no overnight guests
Pets allowed with written permission not permitted
Quiet hours 22:00–07:00 22:00–07:00 and 12:00–13:00 and Sun/holidays

A resident who reads a softer rule in the app than the one they signed is being set up for a warning — or worse, for a conflict with a neighbor who knows the real rule. In a product whose entire job is preventing conflicts, the rule book being wrong is not a content bug; it is a product bug.

What shipped

  • The org catalog (ORG_RULE_CATALOG) was rewritten section-by-section against the signed document (Stand Januar 2026): Ruhezeiten, Besucher, Sauberkeit (incl. daily airing), Gemeinschaftsräume (appliances, laundry drying), Abfall/Recycling (Züri-Säcke, ERZ), Ausbau & Geräte, Sicherheit & Feuerschutz (incl. unattended cooking, entrance doors, keys), Haustiere, Meldewege & Kostenfolgen, Zutrittsregelung, Erreichbarkeit.
  • Nobody is silently re-bound. Amended wording bumps the rule's version; the acknowledgement system asks every affected resident to read exactly the rules that changed. That machinery existed before today — this is the event it was built for.
  • The delegation hierarchy survived contact with reality. The paper document is all obligations, but the layered model still fits: quiet hours and guest rules stay UNIT_MAY_STRENGTHEN (a house may go stricter, never looser), cleaning organization stays with the house, and the non-negotiables (pets, keys, cooking supervision) are FIXED — pinned by a new test so a refactor can't quietly soften them.
  • Real phone numbers. The help page used to show invented-but-plausible contact details. It now shows the channels from the signed document — Bewirtschaftung 044 415 67 31 / bewirtschaftung@aoz.ch (09:00–11:00, 14:00–16:00), emergency 044 415 63 30 outside office hours — from one config (src/lib/config/organization.ts). A resident in trouble will dial whatever number we print; printing a guessed one is worse than printing none.
  • Consequences ship with the rules. The Sanktionen ladder (warning → fristlose Kündigung) from the document now renders at the bottom of the portal rule book. A consequence nobody was told about is not a consequence, it is a surprise.

The platform lesson

Nothing in this change touched application code paths — it edited two config files, one label file, and one page section. That is the test the architecture is supposed to pass: an organization's actual rulebook, with its city-specific details (blue Züri bags, ERZ collection points), is a seed, not a feature. The next organization brings its own signed document, and it should land the same way: as data.