SubscriptionStatusEnum::class, 'trial_ends_at' => 'datetime', 'ends_at' => 'datetime', ]; public function planner(): BelongsTo { return $this->belongsTo(Planner::class); } public function isValid(): bool { if ($this->status->allowsAccess()) { return true; } // Canceled but still in grace period if ($this->status === SubscriptionStatusEnum::CANCELED && $this->ends_at?->isFuture()) { return true; } return false; } }