Zum Inhalt

Marktmiet-Daten: CSV-Import, Beobachtungen und Veröffentlichung

Status: verbindlich
Spezifikationsversion: 1.1.0
Modellbezug: 0.6.2
Marktmiet-Schema: 0.3.0
Stand: 2026-07-05

1. Zweck

Marktmiet-Daten ist der getrennte Datenbereich für Mietbeobachtungen und daraus erzeugte Referenzwerte.

CSV-Import
-> Normalisierung
-> Validierung
-> Dubletten- und Ausreißerprüfung
-> fachlich getrennte Aggregation
-> draft
-> bewusste Veröffentlichung
-> published innerhalb eines Scope
-> RentEstimate

PropertyRecords, Investment Ratings und persönliche Objektstatus gehören nicht in diesen Bereich.

2. Datenstrukturen

RentImportRun
RentObservation
RentAreaStats
RentReferenceDataset
RentEstimate

Der führende RentEstimate-Vertrag steht in docs/specification/product-domains-and-workflows/rent-analysis.md.

3. Unterstützter Importweg

Der aktuelle verbindliche Importweg ist:

CSV

Zulässige technische Quelltypen:

csv_import
manual_import
other_import

Nicht Teil des aktuellen Vertrags:

direkter XLSX-Import
automatisches Scraping
automatische Portal-API

4. Nutzung

Nur ein für seinen Scope aktives published RentReferenceDataset darf automatisch über einen RentEstimate in Einzel- oder Batch-Analyse einfließen.

5. RentObservation

Pflichtfelder:

observation_id
source_date
city
rent_type
market_type
unit_scope
rent_eur
living_area_sqm

Empfohlene Felder:

source_id
source_name
source_url
district
postal_code
street_or_area
rent_eur_per_sqm
rooms
construction_year
condition_class
furnished
property_type
validation_status
quality_score
quality_flags
is_outlier
is_duplicate
is_included
notes

6. Klassifikation

rent_type:

cold
warm
unknown

market_type:

asking_rent
existing_rent
official_reference
unknown

unit_scope:

apartment
room
commercial_unit
unknown

Für eine automatische Veröffentlichung und Investment-Marktmiete sind nur eindeutig klassifizierte Nettokaltmieten zulässig.

7. Standardsegment

Ein automatisch verwendbares Segment trennt mindestens:

rent_type = cold
market_type
unit_scope
furnished
property_type
city

Nicht vermischen:

asking_rent, existing_rent und official_reference
apartment, room und commercial_unit
furnished und unfurnished

Offizielle Referenzen und Angebotsmarktmieten dürfen gemeinsam angezeigt, aber nicht in denselben Median gemischt werden.

8. Normalisierung

rent_eur_per_sqm = rent_eur / living_area_sqm

Normalisierung umfasst Zahlen- und Datumsformate, Lagebezeichnungen, Postleitzahlen, Objekttypen, Zustand, Möblierung, Mietart, Marktart und Einheit. Rohwert und normalisierter Wert bleiben nachvollziehbar.

9. Datenqualität

Beobachtungsstatus:

valid
warning
outlier
excluded
duplicate
incomplete

Typische Flags:

missing_city
source_date_missing
rent_type_unknown
warm_rent_not_eligible
market_type_unknown
unit_scope_unknown
missing_or_invalid_rent
missing_or_invalid_living_area
invalid_rent_per_sqm_low
invalid_rent_per_sqm_high
condition_unknown
furnished_unknown
possible_duplicate
outlier_low
outlier_high

10. Dubletten und Ausreißer

Dubletten werden markiert und standardmäßig ausgeschlossen, nicht automatisch gelöscht.

Ausreißermethode:

Q1 = P25
Q3 = P75
IQR = Q3 - Q1
untere Grenze = Q1 - 1,5 × IQR
obere Grenze = Q3 + 1,5 × IQR

Ausreißer werden markiert und standardmäßig nicht in robuste Referenzwerte einbezogen.

11. Aggregation

Jede Aggregation führt group_fields explizit.

Aktuell verpflichtende Gruppierungsdimensionen:

city
district
property_type
market_type
unit_scope
furnished

Aktuelle Ebenen:

Basis:
  city + district + property_type + market_type + unit_scope + furnished

Zustand:
  Basis + condition_class

Noch nicht Teil des aktuellen Vertrags:

postal_code als eigene Lookup-Ebene
area_bucket
construction_year_bucket

Kennzahlen:

sample_size
inlier_sample_size
outlier_count
duplicate_count
min
max
mean
median
p25
p75
quality_average
confidence_level
data_from
data_until
group_fields

12. Mietniveaus und Confidence

konservativ = P25
Base = Median
optimistisch = P75

Diese Werte sind Mietschätzungsniveaus und nicht automatisch Best- und Stress-Szenarien.

Confidence berücksichtigt Stichprobe, Qualität, Match-Tiefe, Datenalter, Quellenqualität und Ausschlussanteil.

high
medium
low
insufficient

13. Dataset-Scope

Ein Dataset besitzt:

scope_id
dataset_scope

dataset_scope enthält mindestens:

market_type
rent_type
unit_scope
geographic_scope
source_family optional

Regel:

Pro scope_id darf genau eine Dataset-Version published sein.

Mehrere veröffentlichte Datasets sind nur zulässig, wenn ihre scope_id unterschiedlich ist.

14. Dataset-Lifecycle

draft
published
archived
draft:
  nicht automatisch nutzbar

published:
  aktive Grundlage innerhalb des definierten Scope

archived:
  historisch verfügbar, nicht für neue automatische Schätzungen

Beim Veröffentlichen einer neuen Version desselben scope_id wird ausschließlich die bisher veröffentlichte Version dieses Scope archiviert.

15. RentReferenceDataset

dataset_id
scope_id
dataset_scope
name
version
status
created_at
updated_at
published_at
archived_at
source_summary
normalized_records
area_stats
base_area_stats
condition_area_stats
warnings
schema_version = 0.3.0

16. RentEstimate

Der vollständige Vertrag steht ausschließlich in docs/specification/product-domains-and-workflows/rent-analysis.md.

Kanonische Referenzfelder:

rent_reference_dataset_id
rent_reference_dataset_version
rent_reference_dataset_scope_id

17. Matching-Hierarchie

Stadt + Stadtteil + Objekttyp + Zustand
Stadt + Stadtteil + Objekttyp
Stadt + Objekttyp
kein belastbarer Match

Bei jeder Ebene bleiben Marktart, Einheit und Möblierung getrennt. Jeder Fallback wird angezeigt.

18. Beziehung zu Meine Objekte

Ein PropertyRecord kann die verwendete RentEstimateReference speichern. Ein gespeicherter Schätzwert wird nicht automatisch zu einer neuen Mietbeobachtung.

19. Speicher und Schema

immohai.marketRentDatabase.v1
model/schema/market-rent-import.schema.json
frontend/assets/config/market-rent-import.schema.json

Der bestehende Storage Key bleibt erhalten. Inhaltliche Vertragsänderungen werden über schema_version und explizite Lesemigrationen behandelt.

20. Tests

nur CSV ist aktueller Dateiimport
Pflichtspalten und Zahlenformate
Komma und Semikolon
Warmmiete nicht automatisch verwenden
Marktarten nicht vermischen
Einheiten nicht vermischen
Möblierung trennen
Dubletten markieren
Ausreißer markieren
draft nicht im Lookup verwenden
published nur innerhalb seines Scope verwenden
archived nicht verwenden
neue Version archiviert nur den vorherigen published Stand desselben Scope
Dataset-ID, Scope und Version speichern
RentEstimate-Vertrag entspricht rent-analysis.md