'array', 'metadata' => 'array', 'assignments' => 'array', 'scope_tags' => 'array', 'captured_at' => 'datetime', ]; public function previous(): ?self { return $this->policy ? $this->policy ->versions() ->where('version_number', '<', $this->version_number) ->orderByDesc('version_number') ->first() : null; } public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class); } public function policy(): BelongsTo { return $this->belongsTo(Policy::class); } public function scopePruneEligible($query, int $days = 90) { return $query ->whereNull('deleted_at') ->where('captured_at', '<', now()->subDays($days)) ->whereRaw( 'policy_versions.version_number < (select max(pv2.version_number) from policy_versions pv2 where pv2.policy_id = policy_versions.policy_id and pv2.deleted_at is null)' ); } }