Zum Inhalt

Immohai Reporting-Spezifikation

Status: verbindlich
Spezifikationsversion: 1.1.0
Modellbezug: 0.6.2
Implementierungsbezug: frontend-mvp-0.2.5
Stand: 2026-07-05

1. Zweck

Reporting erklärt vorhandene Analyseergebnisse. Es erzeugt keine eigene Berechnungslogik.

Ein Report beantwortet:

Welche Eingaben und Annahmen wurden verwendet?
Welche Werte sind manuell, geschätzt, importiert oder Default?
Welche Felder sind fixed, scenario_adjustable oder sensitivity_only?
Welche Presets oder Sliderwerte wurden für Best und Stress verwendet?
Wie sehen Best, Base und Stress aus?
Wie hoch sind Finanzierung, Cashflow und Liquiditätsbedarf?
Wie schneidet die Immobilie nach modelliertem Exit gegen ETF ab?
Welche Daten- und Modellrisiken bestehen?
Welche Prüfungen sind noch offen?

2. Fachliche Quellen

Formeln und KPIs:      docs/calculations/model-specification.md
Feldverträge:          docs/specification/data-quality-and-validation/data-model.md
Schnittstellen:        docs/specification/model-and-calculations/calculation-interfaces.md
Rating:                docs/specification/model-and-calculations/kpi-assessments.md
Datenqualität:         docs/specification/data-quality-and-validation/data-quality-assessment.md
Mietschätzung:         docs/specification/product-domains-and-workflows/rent-analysis.md

Reports dürfen keine abweichenden Definitionen einführen.

3. Zulässige Reportquellen

Reportvorschau:
  unveränderbarer aktueller AnalysisResult-Snapshot

Gespeicherter Objektbericht:
  PropertyRecord-Snapshot

Objektvergleich:
  ausschließlich PropertyRecord-Snapshots

Das aktuelle Formular ist keine Reportquelle, solange es nicht bewusst neu berechnet wurde.

4. Grundsatz

Berechnungsengine bewertet.
ReportDataBuilder strukturiert vorhandene Werte.
Report rendert und erklärt.

Reports dürfen nicht:

Formeln neu implementieren
KPI-Schwellen verändern
Plausibilitätschecks erzeugen
ScenarioRatings neu ableiten
InvestmentRating neu ableiten
alte PropertyRecords still neu berechnen
unberechnete Formularwerte mit einem älteren Ergebnis mischen
Kaufempfehlungen aussprechen

5. ReportData

report_meta
property_summary
input_summary
scenario_summary
financing_summary
cashflow_summary
wealth_summary
rent_estimate_summary
rating_summary
data_quality_summary
assumption_origins
scenario_policies
scenario_controls
warnings
open_checks
decision_summary_text
model_limits

Der Begriff recommendation_text wird nicht verwendet.

6. Report-Metadaten

report_id
report_type
created_at
analysis_result_id
object_id optional
model_version
calculation_engine_version
property_input_schema_version
analysis_result_schema_version
property_record_schema_version optional
default_assumptions_version
scenario_presets_version
object_types_version
market_rent_schema_version optional
rent_estimate_schema_version optional
analysis_data_quality_method_version
rent_reference_dataset_id optional
rent_reference_dataset_version optional
rent_reference_dataset_scope_id optional

Legacy-Lesealiase:

property_record_id -> object_id
scenario_preset_version -> scenario_presets_version
object_type_config_version -> object_types_version
schema_version -> property_input_schema_version
source_dataset_id -> rent_reference_dataset_id
source_dataset_version -> rent_reference_dataset_version

Neue Reports schreiben ausschließlich kanonische Feldnamen.

7. Zentrale Kennzahlen

Mindestens anzeigen:

Kaufpreis
Erwerbsnebenkosten
Investitionsbedarf nach Kauf
Gesamtinvestition
Eingesetztes Eigenkapital
Darlehen
über den Kaufpreis hinaus finanzierter Betrag
Anfangs-LTV
LTV Ende Jahr 1
Jahresbruttokaltmiete Jahr 1
gross_yield_y1
NOI-Rendite Jahr 1
Kapitaldienst Jahr 1
DSCR Jahr 1
Cashflow Jahr 1
Minimum Cashflow
Kumulativer Zuschussbedarf
Dauerhaft selbsttragend ab
Immobilienvermögen vor Exit
Verkaufskosten
Terminales Immobilienvermögen nach Exit
ETF-Wert Ende
Net vs ETF vor Exit
Net vs ETF nach Exit
Dauerhafter ETF Break-even

Jahresbruttokaltmiete Jahr 1 bezeichnet gross_rent_y1.

Net vs ETF vor Exit bezeichnet net_vs_etf_before_exit_end. Die Bezeichnung „vor Exitkosten“ wird nicht verwendet.

8. Szenariovergleich

Best, Base und Stress zeigen dieselben KPI-Gruppen.

Base basiert auf aufgelösten Annahmen ohne Szenario-Delta.
Best und Stress verändern nur scenario_adjustable-Felder.
fixed-Felder bleiben unverändert.
ETF-Rendite bleibt zwischen Szenarien konstant.

Jeder Case zeigt:

ScenarioAssessment
ScenarioRating
Begründung des Case Ratings

Nur AnalysisResult zeigt das vollständige Investment Rating. Das Case Rating wird als separate Vergleichsampel gekennzeichnet und nicht als Kaufentscheidung dargestellt.

9. Szenarioeinstellungen

Der Report zeigt:

control_mode = preset oder custom_sliders
verwendete Preset-Version
oder gespeicherte Sliderwerte
wirksame Best-/Stress-Annahmen

Sliderwerte werden aus dem gebundenen PropertyInput gelesen, nicht aus dem aktuellen UI-Zustand.

10. Finanzierung

Gesamtinvestition
Eigenkapitalbeitrag
Darlehen
über den Kaufpreis hinaus finanzierter Betrag
Initialzins und interest_basis
Anfangstilgung
Zinsreset nach Jahr
Reset-Zins und interest_reset_basis
Anfangs-LTV
Restschuldverlauf
Kapitaldienstverlauf
DSCR
Cash-Reserve nach Kauf als Informationsfeld

Pflichthinweis:

Annuitätsnahe Modellnäherung, kein verbindlicher Bank-Tilgungsplan.

Ein Darlehen ohne Kapitaldienst wird als harter kritischer Befund ausgewiesen.

11. Cashflow

NOI:
  Nettokaltmiete
  - Leerstand
  - nicht umlagefähige Betriebskosten

Cashflow vor Steuer:
  NOI
  - Reservebeitrag
  - wiederkehrender CAPEX
  - Sonder-CAPEX
  - Kapitaldienst

Der Report zeigt die gewählte CAPEX-Methode. Hausgeld darf nicht zusätzlich abgezogen werden, wenn relevante Komponenten separat modelliert sind.

Bei equity_contributed = 0 werden keine scheinbaren Prozentwerte gegen einen fiktiven Eigenkapitalnenner dargestellt. Der Report erklärt stattdessen die absoluten Null-Eigenkapitalregeln.

12. Kostenabgrenzung

Reservebeitrag:
  tatsächliche laufende Zuführung

Wiederkehrender CAPEX:
  zusätzliche laufende Investitionen

Sonder-CAPEX:
  nominale Einzelmaßnahme im Ereignisjahr

Doppelzählungsrisiken werden als offene Prüfung ausgewiesen.

13. ETF und Exit

Der Report unterscheidet:

net_vs_etf_before_exit_end
terminal_net_vs_etf_after_exit

Die Hauptaussage verwendet den terminalen Vergleich nach modellierten Verkaufskosten und Restschuld.

Zusätzlich erklären:

ETF-Startwert = eingesetztes Eigenkapital
gleiche negative Nachschüsse auf beiden Seiten
jährliche Zahlungen am Jahresende
positive Cashflows im Side Account
Verkaufskosten im Endvergleich
Spekulationssteuer nicht im MVP

ETF-Break-even-Jahre basieren auf einem hypothetischen Verkauf zum jeweiligen Jahresende.

14. Investment Rating

Anzeigen:

Investment Rating der Gesamtanalyse
Begründung
Profitability
Liquidity
Financing
Robustness aus Stress
Data Quality
harte kritische Befunde

Bei UNRATED:

Keine belastbare Ampel wegen fehlender oder unzureichender Datenqualität.
Fehlende oder unsichere Daten zuerst prüfen.

15. Datenqualität und Mietschätzung

Bei Verwendung eines RentEstimate mindestens anzeigen:

verwendete Nettokaltmiete
rent_basis
estimate_type
P25 / Median / P75, soweit für den Schätztyp vorhanden
Samplegröße, soweit vorhanden
rent_reference_dataset_id, soweit vorhanden
rent_reference_dataset_version, soweit vorhanden
rent_reference_dataset_scope_id, soweit vorhanden
data_from und data_until
matched_location_level
confidence
confidence_level
confidence_method_version
Fallback
Warnungen

Nur veröffentlichte Datasets dürfen als aktive automatische Quelle dargestellt werden. Ein fehlender Datenqualitätsscore wird nicht als 100 dargestellt.

16. Decision Summary

decision_summary_text ist eine modellbasierte Zusammenfassung, keine Kaufempfehlung.

Zulässig:

Das Modell zeigt ...
Die Einschätzung hängt stark von ... ab.
Vor einer Entscheidung sollte ... geprüft werden.

Nicht zulässig:

Kaufen
Nicht kaufen
klare Anlageempfehlung
garantierte Rendite

17. Gespeicherte Objekte

Reports aus Meine Objekte verwenden den gespeicherten Snapshot. Bei älterer Modell-, Engine-, Schema- oder Methodenversion wird dies sichtbar angezeigt. Kein stilles Überschreiben und keine automatische Neuberechnung.

18. Legacy-Kompatibilität

Zulässige Lesealiase stehen in docs/specification/data-quality-and-validation/data-model.md. Reports schreiben keine Legacy-Felder neu und verändern den Snapshot nicht.

19. Modellgrenzen

Jeder Report enthält mindestens:

keine Steuerberatung
keine Rechtsberatung
keine Finanzierungszusage
kein Verkehrswertgutachten
keine technische Gebäudeprüfung
keine Garantie erzielbarer Mieten
keine Garantie der ETF-Rendite
Spekulationssteuer nicht im MVP

20. Export

Aktueller lokaler MVP:

Browser-Druck
Print-to-PDF
CSV-Export gespeicherter Objekte
Reportvorschau für One Pager, Investment Report und Bank Report

Später:

serverseitige PDF-Erzeugung
XLSX-Export
Reportversionierung

21. Tests

Reportwerte stimmen exakt mit AnalysisResult oder PropertyRecord überein.
Unberechnete Formularwerte verändern einen Report nicht.
Terminaler ETF-Vergleich enthält Verkaufskosten und Restschuld.
DSCR ohne Darlehen wird als nicht anwendbar dargestellt.
Best, Base und Stress zeigen gespeicherte Case Ratings.
Nur AnalysisResult zeigt das Investment Rating.
UNRATED wird nicht als RED oder YELLOW interpretiert.
Fehlende Datenqualität wird nicht als 100 dargestellt.
Sliderwerte stammen aus dem PropertyInput-Snapshot.
ETF-Break-even wird als hypothetischer Exit erklärt.
CAPEX-Methode und Kostenabgrenzung werden angezeigt.
RentEstimateReference wird mit kanonischen Dataset-Namen ausgewertet.
Ältere PropertyRecords werden nicht still neu berechnet.
Decision Summary enthält keine Kaufempfehlung.