Rework real estate model: purchase price + mortgage + amortization only, no appreciation; amortization counts against savings quota; sale price/tax entered at transition time with correct mortgage payoff; carry over income/expenses to new phases
Deploy App / deploy (push) Successful in 1m31s

This commit is contained in:
2026-07-08 21:35:10 +02:00
parent 9609de67ae
commit e9dacc2026
12 changed files with 204 additions and 145 deletions
@@ -0,0 +1,10 @@
-- AlterTable: RealEstate vereinfacht (Kaufpreis statt Marktwert, keine Wertsteigerung
-- mehr, Verkaufspreis/-steuer wandern in PhaseTransitionItem)
ALTER TABLE "RealEstate" RENAME COLUMN "marketValue" TO "purchasePrice";
ALTER TABLE "RealEstate" DROP COLUMN "valueGrowth";
ALTER TABLE "RealEstate" DROP COLUMN "salePrice";
ALTER TABLE "RealEstate" DROP COLUMN "saleTaxRate";
ALTER TABLE "RealEstate" ADD COLUMN "carriedFromRealEstateId" TEXT;
-- AlterTable: Verkaufssteuer wird beim Immobilien-Verkauf im Uebergang selbst erfasst
ALTER TABLE "PhaseTransitionItem" ADD COLUMN "saleTaxRate" DOUBLE PRECISION;
+16 -12
View File
@@ -176,19 +176,21 @@ model Security {
transitionItems PhaseTransitionItem[]
}
// Eine Immobilie innerhalb einer Phase
// Eine Immobilie innerhalb einer Phase. Vereinfachtes Modell: kein Wertsteigerungsfeld,
// der Kaufpreis bleibt ueber die Haltedauer fix -- einzig die Hypothek sinkt durch
// Amortisation. Verkaufspreis/-steuer werden nicht hier, sondern erst im Uebergangs-
// Screen im Moment des Verkaufs erfasst (siehe PhaseTransitionItem).
model RealEstate {
id String @id @default(cuid())
phaseId String
phase Phase @relation(fields: [phaseId], references: [id], onDelete: Cascade)
name String
marketValue Float
mortgage Float
valueGrowth Float
amortization Float
salePrice Float?
// Geschaetzte Grundstueckgewinnsteuer (%), direkt am ausloesenden Ereignis erfasst (Kap. 9)
saleTaxRate Float @default(20)
id String @id @default(cuid())
phaseId String
phase Phase @relation(fields: [phaseId], references: [id], onDelete: Cascade)
name String
purchasePrice Float
mortgage Float
amortization Float
// Verweist auf die Immobilie der Vorphase, aus der automatisch uebernommen wurde
// (nur intern zur Deduplizierung bei wiederholtem Speichern des Uebergangs, kein FK).
carriedFromRealEstateId String?
transitionItems PhaseTransitionItem[]
}
@@ -242,4 +244,6 @@ model PhaseTransitionItem {
realEstate RealEstate? @relation(fields: [realEstateId], references: [id], onDelete: Cascade)
decision TransitionDecision
salePrice Float?
// Nur bei Immobilien-Verkauf erfasst (Grundstueckgewinnsteuer in %), siehe RealEstate.
saleTaxRate Float?
}