MaLo-ID an die Lieferadresse (Strom/Gas) + Address-owner-Regression gefixt

MaLo-ID (Marktlokation) gehoert zur (Liefer-)Adresse, nicht zum Vertrag.
Address bekommt maloIdElectricity + maloIdGas (getrennte Marktlokationen je
Sparte), pflegbar im AddressModal (nur Lieferadresse). Im Vertrag ist die
MaLo-ID jetzt ein Lesefeld, das je nach Vertragstyp die MaLo der gewaehlten
Lieferadresse zeigt; ContractDetail/-Modal ebenso.

Schema + Migration 20260814100000: 2 Spalten (idempotent) + Daten-Migration
(bestehende EnergyContractDetails.maloId -> jeweilige Lieferadresse,
ELECTRICITY->maloIdElectricity / GAS->maloIdGas). Migrationslogik verifiziert.

Dabei einen selbst verursachten Regressions-Bug gefixt: beim R156-Umbau waren
die 10 owner*-Adressfelder aus der Address-Whitelist gefallen -> Eigentuemer-
Sektion speicherte seit cb21a2c nicht mehr. Address-Whitelist jetzt via
Pick-Helper, programmatisch gegen alle DB-Spalten abgeglichen (owner* + MaLo
drin, id/customerId/Timestamps raus). BankCard/Document gegengeprueft: ok
(nur documentPath bewusst upload-only ausgeschlossen).

Verifiziert: tsc+build gruen; owner + maloId speichern wieder, Injection
(id/customerId) blockiert; Daten-Migration Strom->Strom / Gas->Gas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 14:38:16 +02:00
co-authored by Claude Opus 4.8
parent e01c793b58
commit 1a45c24abf
9 changed files with 168 additions and 42 deletions
@@ -2490,6 +2490,8 @@ function AddressModal({
city: address?.city || '',
country: address?.country || 'Deutschland',
isDefault: address?.isDefault || false,
maloIdElectricity: address?.maloIdElectricity || '',
maloIdGas: address?.maloIdGas || '',
ownerCompany: address?.ownerCompany || '',
ownerFirstName: address?.ownerFirstName || '',
ownerLastName: address?.ownerLastName || '',
@@ -2605,6 +2607,31 @@ function AddressModal({
Als Standard setzen
</label>
{/* Marktlokations-IDs (nur Lieferadresse) – gehören zur Adresse, nicht
zum Vertrag; im Vertrag werden sie je Sparte nur noch angezeigt. */}
{formData.type === 'DELIVERY_RESIDENCE' && (
<div className="pt-4 border-t">
<h4 className="text-sm font-medium text-gray-700 mb-1">Marktlokations-IDs (MaLo)</h4>
<p className="text-xs text-gray-500 mb-3">
Je Sparte getrennt. Wird im Strom-/Gasvertrag automatisch aus dieser Lieferadresse angezeigt.
</p>
<div className="grid grid-cols-2 gap-3">
<Input
label="MaLo-ID Strom"
value={formData.maloIdElectricity}
onChange={(e) => setFormData({ ...formData, maloIdElectricity: e.target.value })}
placeholder="z.B. 11XXXXXXXXXXX"
/>
<Input
label="MaLo-ID Gas"
value={formData.maloIdGas}
onChange={(e) => setFormData({ ...formData, maloIdGas: e.target.value })}
placeholder="z.B. 11XXXXXXXXXXX"
/>
</div>
</div>
)}
{/* Eigentümer (optional, nur bei Liefer-/Meldeadresse) */}
{formData.type === 'DELIVERY_RESIDENCE' && (
<div className="pt-4 border-t">