Energie-Bonus aufgeteilt in Sofort + Neukunden

EnergyContractDetails.bonus war ein einzelnes Feld. Strom-/Gas-
Verträge haben aber typischerweise zwei Boni (Sofort beim Wechsel
+ Neukunden-Bonus nach 12 Monaten), die getrennt verbucht werden
müssen.

Migration 20260524100000_split_energy_bonus:
- ADD COLUMN IF NOT EXISTS instantBonus, newCustomerBonus
- bestehende `bonus`-Werte → instantBonus (Annahme: Sofort)
- DROP COLUMN IF EXISTS bonus

UI:
- ContractForm zeigt zwei Input-Felder
- Detail-Ansicht zeigt beide einzeln + Gesamtbonus
- Kostenvorschau listet beide einzeln, dann Gesamt, dann effektive
  Jahreskosten

Cost-Calc: calculateCosts() bekommt beide Boni; CostCalculation
liefert instantBonus, newCustomerBonus, totalBonus.

PDF-Template: drei neue Variablen energyDetails.instantBonus,
.newCustomerBonus, .totalBonus.

Live-verifiziert auf dev: PUT mit beiden Werten → DB persistiert,
GET liefert zurueck.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-24 14:27:54 +02:00
parent 92c3b0dc95
commit 20d42c5270
10 changed files with 143 additions and 29 deletions
+6 -3
View File
@@ -218,7 +218,8 @@ interface ContractCreateData {
annualConsumption?: number;
basePrice?: number;
unitPrice?: number;
bonus?: number;
instantBonus?: number;
newCustomerBonus?: number;
previousProviderName?: string;
previousCustomerNumber?: string;
};
@@ -710,7 +711,8 @@ export async function createFollowUpContract(previousContractId: number) {
previousContract.energyDetails.annualConsumption ?? undefined,
basePrice: previousContract.energyDetails.basePrice ?? undefined,
unitPrice: previousContract.energyDetails.unitPrice ?? undefined,
bonus: previousContract.energyDetails.bonus ?? undefined,
instantBonus: previousContract.energyDetails.instantBonus ?? undefined,
newCustomerBonus: previousContract.energyDetails.newCustomerBonus ?? undefined,
previousProviderName: previousContract.providerName ?? undefined,
previousCustomerNumber:
previousContract.customerNumberAtProvider ?? undefined,
@@ -898,7 +900,8 @@ export async function createRenewalContract(previousContractId: number) {
basePrice: ed.basePrice,
unitPrice: ed.unitPrice,
unitPriceNt: ed.unitPriceNt,
bonus: ed.bonus,
instantBonus: ed.instantBonus,
newCustomerBonus: ed.newCustomerBonus,
previousProviderName: ed.previousProviderName,
previousCustomerNumber: ed.previousCustomerNumber,
},