Zum Inhalt

Batch-Analyse: Import, Pre-Screening und Vollanalyse

Status: verbindlicher Zielentwurf
Spezifikationsversion: 1.0.1
Modellbezug: 0.6.2
Stand: 2026-07-05

1. Zweck

Kaufobjekt-Import
-> Normalisierung
-> Pre-Screening
-> Finanzierungsprofil
-> Vollanalyse
-> Ergebnisliste
-> selektive Übernahme zu Meine Objekte

Batch verarbeitet Kaufobjekte, nicht Mietbeobachtungen.

2. Architektur

Einzelanalyse ─┐
               ├──> PropertyInput -> Single-Property-Engine
Batch-Vollanalyse ─┘

Pre-Screening ist keine zweite vollständige Berechnungsengine.

3. Zielprozess

CSV mit Kaufobjekten
-> BatchImportRun
-> BatchImportRow[]
-> Spaltenmapping
-> Validierung
-> NormalizedListing[]
-> optional RentEstimate
-> Pre-Screening
-> Auswahl und Finanzierungsprofil
-> PropertyInput[]
-> Single-Property-Engine je Objekt
-> BatchAnalysisResult[]
-> Filter, Ranking und Export
-> bewusste Auswahl zu Meine Objekte

CSV ist zunächst das bevorzugte Austauschformat. Direkter XLSX-Import ist nicht Teil des aktuellen Zielvertrags.

4. Batch-Datenstrukturen

BatchImportRun enthält mindestens:

batch_run_id
source
input_channel
file_reference
content_hash
created_at
updated_at
status
row_counts
schema_version
mapping_version

BatchImportRow enthält mindestens:

batch_row_id
batch_run_id
row_number
raw_values
mapped_values
validation_errors
normalization_status
pre_screening_status
calculation_status

Zeilenstatus:

imported
invalid
normalized
enriched
pre_screened
calculated
failed

5. Normalisierung

Rohdaten werden nie direkt berechnet.

BatchImportRow.raw_values
-> NormalizedListing
-> PropertyInput

Mindestens normalisieren:

Kaufpreis
Wohnfläche
Objektdimensionen
Stadt und Stadtteil
Baujahr und Zustand
Nettokaltmiete
Hausgeld und Kosten
Kaufnebenkosten

Jeder relevante Wert erhält Herkunft, Confidence und gegebenenfalls Szenario-Policy.

6. Pre-Screening

Mindestfelder:

purchase_price
living_area_sqm
property_category oder object_type_profile
city oder location_label
monthly_cold_rent oder belastbarer RentEstimate

Immer zulässige Kennzahlen:

Kaufpreis pro m²
Nettokaltmiete pro m²
Bruttomietrendite
Kaufpreisfaktor
Marktmiet-Confidence
Listing-Datenqualität
fehlende Felder
Warnungen

NOI-basierte Kennzahlen sind nur zulässig, wenn zusätzlich transparent vorliegen:

closing_costs_pct
initial_renovation_costs
vacancy_pct
non_recoverable_operating_costs_pa

Fehlende Werte dürfen über versionierte Defaults ergänzt werden. In diesem Fall müssen Herkunft und reduzierte Datenqualität sichtbar bleiben.

Ohne Finanzierungsprofil nicht zulässig:

Darlehen
LTV
DSCR
Kapitaldienst
Cashflow nach Finanzierung
ETF-Vergleich
Investment Rating

7. Marktmiet-Enrichment

NormalizedListing
-> RentReferenceLookup
-> RentEstimate
-> PropertyInput.rental.monthly_cold_rent

Nur veröffentlichte Datasets innerhalb ihres Scope sind zulässig. Marktart, Einheit und Möblierung bleiben getrennt. Manuelle oder importierte Mieten werden nicht still überschrieben.

8. Finanzierungsprofil

Ein FinancingProfile ist eine versionierte Eingabehilfe, kein zweites Rechenmodell.

financing_profile_id
version
name
requested_equity_contribution_rule
interest_initial_pct
interest_basis
amortization_initial_pct
interest_reset_year
interest_reset_pct
interest_reset_basis
optional maximum_equity_contribution
optional minimum_cash_reserve

Merge-Priorität:

1. objektbezogener finaler Wert
2. objektbezogene manuelle Eingabe
3. bewusst gewähltes FinancingProfile
4. globaler Default
5. missing

Das Profil erzeugt ein normales PropertyInput. Es wird nicht direkt von der Engine gelesen.

9. Vollanalyse

Die Vollanalyse benötigt:

vollständiges PropertyInput
Finanzierungsprofil oder vollständige objektbezogene Finanzierung
Szenario-Policies
AnalysisDataQualityAssessment

Sie ruft dieselbe Engine wie die Einzelanalyse auf.

Ein fehlender oder unzureichender Datenqualitätsscore fällt nicht auf 100 zurück. Das Rating lautet UNRATED.

Nur Base beziehungsweise AnalysisResult erhält ein vollständiges Investment Rating. Best und Stress erhalten ScenarioAssessments.

10. Fehlerisolierung

Ein Fehler einer Zeile beendet nicht den gesamten Lauf.

calculated
calculated_with_warnings
not_calculated
failed

11. BatchAnalysisResult

batch_result_id
batch_run_id
batch_row_id
pre_screening_result
property_input optional
analysis_result optional
summary_kpis optional
rating optional
data_quality_assessment
rent_estimate_reference optional
warnings
calculation_status
calculation_error optional
created_at

Bei Vollanalyse wird das vollständige AnalysisResult als gebundener Snapshot referenziert oder eingebettet. Separate scenario_results dürfen nur als abgeleitete Kompatibilitätsansicht geführt werden.

12. Ergebnisliste und Ranking

Gemeinsame UI-Bausteine mit Meine Objekte sind zulässig. Datenverträge und Status bleiben getrennt.

Pre-Screening-Ranking berücksichtigt:

objektbezogene Renditekennzahlen
Datenqualität
Miet-Confidence
fehlende Felder
Warnungen

Vollanalyse-Ranking berücksichtigt zusätzlich:

Investment Rating
Cashflow
Zuschussbedarf
DSCR
Anfangs-LTV
Net vs ETF nach Exit
Stress-Robustheit

UNRATED wird separat behandelt. Rendite darf schlechte Datenqualität oder Liquiditätsrisiken nicht verdecken.

13. Übernahme zu Meine Objekte

BatchAnalysisResult != PropertyRecord

Nur erfolgreich vollständig berechnete und bewusst ausgewählte Ergebnisse werden übernommen.

PropertyRecord speichert zusätzlich:

source_type = batch_analysis
batch_run_id
batch_row_id
gebundenen PropertyInput-Snapshot
gebundenes AnalysisResult

Pre-Screening-Ergebnisse ohne Vollanalyse werden nicht übernommen.

14. Aktueller Stand

Vorhanden:

Batch-Platzhalterseite
Single-Property-Engine
Marktmiet-Struktur
PropertyRecord-Speicherung
Listenmuster

Noch offen:

CSV-Dateiupload
Mapping
Batch-Arbeitsbereich
Pre-Screening
FinancingProfile-Vertrag als Schema
Mehrfachberechnung
Ranking
Übernahme

15. Umsetzungsreihenfolge

Marktmiet-Daten stabilisieren
CSV-Import und Mapping
Normalisierung und Listing-Datenqualität
Pre-Screening
FinancingProfile-Schema
PropertyInput-Erzeugung
Mehrfachberechnung
Ergebnisliste und Ranking
Export
Übernahme zu Meine Objekte

16. Tests

fehlende Pflichtfelder
CSV-Spaltenmapping
Normalisierung
Pre-Screening ohne Finanzierung
NOI-Kennzahl nur mit vollständigen oder transparent defaulted Kosten
keine Finanzierungs-KPIs ohne Profil
FinancingProfile-Merge-Priorität
RentEstimate-Match und Fallback
Marktsegmente nicht vermischen
fehlende Datenqualität ergibt UNRATED
Fehlerisolierung
identische Vollanalyse zu identischem Einzel-PropertyInput
Ranking berücksichtigt Datenqualität
selektive Übernahme
keine automatische Übernahme aller Ergebnisse