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