'integer', 'effective_date' => 'date', 'is_retrospective' => 'boolean', 'submitted_at' => 'datetime', 'approved_at' => 'datetime', ]; public function items(): HasMany { return $this->hasMany(CourierQuoteChangeItem::class, 'quote_change_id')->orderBy('position'); } public function events(): HasMany { return $this->hasMany(CourierQuoteChangeEvent::class, 'quote_change_id')->orderBy('created_at'); } public function version(): HasOne { return $this->hasOne(CourierQuoteVersion::class, 'source_change_id'); } public function isEditable(): bool { return in_array($this->status, [self::STATUS_DRAFT, self::STATUS_RETURNED], true); } public function isRetrospective(): bool { return (bool) $this->is_retrospective; } public function recalculationStatusLabel(): string { return match ($this->recalculation_status) { self::RECALCULATION_NOT_REQUIRED => '无需追溯', self::RECALCULATION_PENDING => '待追溯核算', self::RECALCULATION_BLOCKED => '核算受阻', default => $this->recalculation_status, }; } public function statusLabel(): string { return match ($this->status) { self::STATUS_DRAFT => '草稿', self::STATUS_PENDING_REVIEW => '待审核', self::STATUS_RETURNED => '已退回', self::STATUS_APPROVED => '已审核', default => $this->status, }; } }