'int', 'position' => 'int', 'quantity' => 'int', 'price_per_unit' => 'decimal:2', 'total_price' => 'decimal:2', 'travel_program_id' => 'int', 'fewo_lodging_id' => 'int', 'metadata' => 'array', ]; public function version(): BelongsTo { return $this->belongsTo(OfferVersion::class, 'offer_version_id'); } /** * Aus Menge × Einzelpreis den Positions-Gesamtpreis berechnen * (Rabatte negativ — gehört in den Service-Layer zur Summierung). */ public function calculateTotal(): float { return round($this->quantity * (float) $this->price_per_unit, 2); } }