Feldregister des Immobiliendatenblatts, Flächenberechnung und Versorgungszuordnung

In Spalten und in JSON gespeicherte Datenblattfelder, typabhängige Sichtbarkeit, Normalisierung, Flächenberechnung nach Raumtypregeln, Versorgungszähler und Zuordnung von Kostenrechnungen.

Das Feldregister liegt SQL-frei in der Bibliothek Dlbtproperty (TYPES, USES, COLUMNS, FIELDS, GROUPS, RETIRED, ROOM_TYPES, UTILITIES, DOC_ROLES, ENERGY_SCALE, COUNTS_AS, AREA_BUCKETS). Die Speicherung gehört dem Eigentümermodell.

Felder

  • In Spalten (durchsuchbar): area_net, area_gross, area_plot, rooms, half_rooms, build_year (1000–2200), floor_level (−5–200), building_floors; dazu area_terrace, area_garden, area_storage, wc_count, bathroom_count.
  • In JSON (details): Auswahl-, Mehrfach-, Ja/Nein- und Datumsfelder der Gruppen (size, building, condition, comfort, parking, energy, energy_cert, plot, development, commercial).
  • Typen: flat, house, terraced, holiday, plot, development, condominium, office, retail, warehouse, garage, agricultural, hospitality, other; Nutzungen: residential, office, retail, hospitality, warehouse, workshop, medical, education.
  • Sichtbarkeit: Ein Feld erscheint, wenn es zu einem gewählten Typ gehört; ohne Typ alle. Text höchstens 255 Zeichen.
  • Stillgelegte Inseratsfelder (RETIRED: available_from, min_rent_months, deposit_months, pets, smoking, common_cost_payer, utility_payer) erscheinen weder im Formular noch im Datenblatt oder Export, frühere Werte werden aber aus versteckten Feldern zurückgeschrieben.
  • Alte Parkwerte: garage_included und garage_optional → garage, none → entfernt.

Normalisierung

normalize(): Nur Felder der gewählten Typen bleiben, Zahlen außerhalb des Bereichs werden NULL (ohne Fehler), Auswahl- und Mehrfachwerte sind auf eine Positivliste beschränkt. normalizeRooms(): leere Zeilen entfallen, unbekannter Typ wird other, negative Fläche 0. normalizeMeters(): Zeilen ohne Kennung entfallen.

Flächenberechnung

  1. computeAreas() rechnet mit den Regeln des Raumtypstamms, wenn Räume und Regeln vorhanden sind; überschreibt area_net, rooms, half_rooms, wc_count, bathroom_count, area_terrace, area_garden, area_storage.
  2. Die Summe Fläche × area_factor der Typen ohne Schwelle ist die Wohnfläche; aus dem Topf der Schwellentypen zählt area_factor bis threshold_pct % der Wohnfläche, darüber factor_over.
  3. Zimmer (counts_as = room): unter half_room_max halbes Zimmer; WC und Bad nach Anzahl.
  4. Ein Gemeinschaftsraum (ownership = common) zählt nicht zu Fläche und Anzahlen der Wohnung, nur zur Gemeinschaftssumme; ein Raum mit unbekanntem Code zählt als „Sonstiges, 100 %“.
  5. Ohne Raumliste bleibt der manuelle Wert. Live-Berechnung: Endpunkt computeareas (edit oder add), vom Formular mit 250 ms Verzögerung aufgerufen; leere Liste liefert empty.

Tabellen

Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation. property_room: property_id, level, room_type, name, area, windowless, sort_order, ownership (private, common). property_meter: property_id, utility, provider, identifier (indiziert), payer (owner, tenant), note. Die Raumtypauswahl bietet die aktiven Typen des Stamms und einen bereits erfassten, inzwischen deaktivierten Typ; vor der Migration die 20 eingebauten Typen.

Zuordnung von Kostenrechnungen

getByMatchValue(): zuerst match_value (aktive Immobilie), sonst property_meter.identifier; dann liefert sie auch utility und payer des Zählers. Ein Aufrufer dieser Methode wurde bei der Quellprüfung nicht gefunden; der Verwendungsort ist aus dem Code nicht feststellbar.