'integer', 'rule_set_id' => 'integer', 'is_official' => 'boolean', 'result_type' => 'string', 'progress_total' => 'integer', 'progress_done' => 'integer', 'scope' => 'array', 'started_at' => 'datetime', 'finished_at' => 'datetime', ]; public function round(): BelongsTo { return $this->belongsTo(Round::class); } public function logResults(): HasMany { return $this->hasMany(LogResult::class); } public function qsoResults(): HasMany { return $this->hasMany(QsoResult::class); } public function evaluationLocks(): HasMany { return $this->hasMany(EvaluationLock::class); } public function events(): HasMany { return $this->hasMany(EvaluationRunEvent::class); } public function ruleSet(): BelongsTo { return $this->belongsTo(EvaluationRuleSet::class, 'rule_set_id'); } public function createdBy(): BelongsTo { return $this->belongsTo(User::class, 'created_by_user_id'); } public function isCanceled(): bool { return strtoupper((string) $this->status) === 'CANCELED'; } public static function isCanceledRun(int $runId): bool { return static::where('id', $runId)->value('status') === 'CANCELED'; } }