contracts)) { $this->contracts = $this->runFactory('contracts'); } return $this->contracts; } protected array $units; public function units(): array { if (empty($this->units)) { $this->units = $this->runFactory('units'); } return $this->units; } public function value(float $price): float { if ($this->type === Type::FIXED) { return $price + $this->amount; } return $price / (1 - $this->amount); } protected function jsonComplement(): array { return [ 'description' => $this->description, 'amount' => $this->amount, 'start_date' => $this->startDate->format('Y-m-d'), 'end_date' => $this->endDate?->format('Y-m-d'), 'valid_until' => $this->validUntil?->format('Y-m-d'), 'type' => $this->type, 'state' => $this->state, 'contracts' => $this->contracts() ?? [], 'units' => $this->units() ?? [] ]; } }