App-Domänen, Analysewege und Datenflüsse¶
Status: verbindlicher Zielentwurf
Spezifikationsversion: 1.0.2
Modellbezug: 0.6.2
Implementierungsbezug: frontend-mvp-0.2.5
Stand: 2026-07-05
1. Zweck¶
Diese Spezifikation trennt verbindlich:
Einzelanalyse
Batch-Analyse
Meine Objekte
Marktmiet-Daten
Die Bereiche dürfen gemeinsame UI-Komponenten und dieselbe Berechnungsengine verwenden. Datenmodelle, Speicherbereiche, Statuswerte und fachliche Verantwortlichkeiten bleiben getrennt.
2. Zielbild¶
Immohai besitzt zwei Analysewege:
Einzelanalyse
Batch-Analyse
Beide erzeugen normalisierte PropertyInput-Objekte und verwenden dieselbe Single-Property-Engine.
Ausgewählte Ergebnisse können bewusst in die persönliche Sammlung übernommen werden:
Meine Objekte
Marktmiet-Daten bilden einen separaten Bereich und liefern RentEstimate-Werte an beide Analysewege.
3. Navigation¶
Normale App:
Einzelanalyse
Batch-Analyse
Meine Objekte
Dokumentation
Technische Seiten:
/ Einzelanalyse
/batch.html Batch-Analyse
/objects.html Meine Objekte
Separater Adminbereich:
/admin.html
/admin-data-import.html
4. Domäne Einzelanalyse¶
manuelle Objektdaten
-> optionale Marktmietschätzung
-> PropertyInput
-> Single-Property-Engine
-> AnalysisResult
-> optional bewusst zu Meine Objekte hinzufügen
Eine Berechnung wird nicht automatisch dauerhaft gespeichert.
Mietwerte können stammen aus manueller Eingabe, Ist-Miete, veröffentlichtem Marktmiet-Dataset, offizieller Referenz oder WG-Schätzung. Herkunft, rent_basis, Confidence und Szenario-Policy bleiben sichtbar.
5. Domäne Batch-Analyse¶
CSV-Kaufobjektdatei
-> BatchImportRun
-> Spaltenzuordnung
-> Validierung
-> NormalizedListing[]
-> optionales RentEstimate
-> Pre-Screening
-> Auswahl und FinancingProfile
-> PropertyInput[]
-> Single-Property-Engine je Objekt
-> BatchAnalysisResult[]
-> Filter, Ranking und Export
-> bewusste Auswahl zu Meine Objekte
Pre-Screening ist keine vollständige Investmentberechnung. Ohne Finanzierungsprofil sind keine Finanzierungs-KPIs und kein Investment Rating zulässig.
Temporäre Batch-Ergebnisse bleiben außerhalb von Meine Objekte, bis sie ausdrücklich übernommen werden.
6. Domäne Meine Objekte¶
Meine Objekte ist die persönliche Sammlung bewusst gespeicherter Investitionsanalysen.
Herkunft:
manual_analysis
batch_analysis
imported_analysis
Funktionen:
Speichern
Laden
Status pflegen
Filtern
Sortieren
Pagination
Mehrfachauswahl
Vergleichen
Exportieren
Auswerten
Notizen
Tags
Reports
Status:
watchlist
in_review
rejected
archived
Keine Portfolio-Summen über Kaufpreise, Darlehen, Eigenkapital oder Zuschussbedarf. Zulässig sind Anzahlen, Quoten, Mediane, Verteilungen, Rankings und Segmentauswertungen.
7. Domäne Marktmiet-Daten¶
CSV-Mietdaten
-> RentImportRun
-> RentObservation[]
-> Validierung
-> Dublettenprüfung
-> Ausreißerprüfung
-> Aggregation
-> RentAreaStats[]
-> RentReferenceDataset
-> bewusste Veröffentlichung innerhalb eines Scope
-> RentEstimate
Nur published innerhalb seines scope_id darf automatisch verwendet werden.
Gemeinsame Schnittstelle:
RentEstimate
-> PropertyInput.rental.monthly_cold_rent
Persönliche Analysen fließen nicht automatisch als Mietreferenzen zurück.
8. Marktmiet-Segmentierung¶
Automatisch verwendbare Standardsegmente trennen mindestens:
rent_type
market_type
unit_scope
furnished
property_type
city
Angebotsmieten, Bestandsmieten und offizielle Referenzen werden nicht unkommentiert vermischt. Zimmer- und Wohnungsmieten sowie möblierte und unmöblierte Daten bleiben getrennt.
9. Datenmodelle¶
Analyse:
PropertyInput
ScenarioInput
AnnualProjectionRow
ScenarioAssessment
ScenarioRating
ScenarioResult
AnalysisResult
PropertyRecord
Batch:
BatchImportRun
BatchImportRow
NormalizedListing
FinancingProfile
BatchAnalysisResult
Marktmiet-Daten:
RentImportRun
RentObservation
RentAreaStats
RentReferenceDataset
RentEstimate
Die vollständigen Feldverträge stehen in docs/specification/data-quality-and-validation/data-model.md und den jeweiligen führenden Detail-Spezifikationen.
10. Metadatenbegriffe¶
Nicht als universelles source_type vermischen:
analysis_origin: fachlicher Analyseweg
input_channel: technischer Eingangskanal
value_origin: Herkunft eines einzelnen Werts
source_reference: konkrete Quellenreferenz
source_kind: Art der externen Quelle
PropertyRecord.source_type bleibt als gespeicherte Analyseherkunft kompatibel und verwendet ausschließlich manual_analysis, batch_analysis oder imported_analysis.
11. Getrennte Speicherbereiche¶
Aktuell:
immohai.propertyRecords.v1
immohai.marketRentDatabase.v1
Konzeptionell:
MyObjectsStore
RentReferenceStore
BatchWorkspaceStore
Bestehende Storage Keys werden nicht ohne Migration umbenannt.
12. Dataset-Lifecycle¶
draft
published
archived
Pro scope_id darf genau eine Version published sein. Ein neuer veröffentlichter Stand archiviert nur die bisher veröffentlichte Version desselben Scope.
13. Statusarten bleiben getrennt¶
Meine Objekte:
watchlist, in_review, rejected, archived
Mietbeobachtungen:
valid, warning, outlier, excluded, duplicate, incomplete
Mietdatasets:
draft, published, archived
Batch-Zeilen:
imported, invalid, normalized, enriched, pre_screened, calculated, failed
14. Wiederverwendbare UI-Komponenten¶
DataTable
FilterToolbar
ActiveFilterChips
Pagination
SelectionActions
CsvExport
SummaryCards
DistributionChart
SegmentTable
Grundsatz:
UI wiederverwenden
Datenmodelle und Status trennen
15. Übernahmeregeln¶
Einzelanalyse zu Meine Objekte:
gültige Berechnung
bewusste Nutzeraktion
gebundenen PropertyInput- und Ergebnis-Snapshot speichern
Analyseherkunft manual_analysis
Batch zu Meine Objekte:
nur vollständig berechnete Ergebnisse
bewusste Nutzeraktion
Analyseherkunft batch_analysis
batch_run_id und batch_row_id speichern
Marktmiet-Daten zu Analyse:
nur published Dataset innerhalb seines Scope
RentEstimate mit Quelle, confidence und confidence_level
bewusste Übernahme oder transparenter Enrichment-Schritt
manueller Override bleibt möglich
16. Umsetzungsreihenfolge¶
Die verbindliche Reihenfolge steht ausschließlich in docs/roadmap/roadmap.md. Diese Architekturdatei definiert keine abweichende Priorisierung.
17. Abnahmekriterien¶
Einzel- und Batch-Vollanalyse verwenden dieselbe Engine.
Batch-Ergebnisse werden nicht automatisch persönliche Objekte.
Meine Objekte enthält keine Marktmiet-Rohdaten.
Marktmiet-Daten enthält keine persönlichen Investitionsstatus.
Nur veröffentlichte Mietdatasets innerhalb ihres Scope liefern automatische RentEstimate-Werte.
PropertyRecord und RentObservation bleiben getrennt.
UI-Komponenten können ohne Vermischung der Domänen wiederverwendet werden.