*/ protected function casts(): array { return [ 'required' => 'boolean', 'measured_at' => 'datetime', 'freshness_at' => 'datetime', 'summary_payload' => 'array', 'sort_order' => 'integer', ]; } /** * @return BelongsTo */ public function snapshot(): BelongsTo { return $this->belongsTo(EvidenceSnapshot::class, 'evidence_snapshot_id'); } /** * @return BelongsTo */ public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class); } /** * @return list> */ public function canonicalControlReferences(): array { $payload = is_array($this->summary_payload) ? $this->summary_payload : []; $references = $payload['canonical_controls'] ?? []; return is_array($references) ? array_values(array_filter($references, static fn (mixed $reference): bool => is_array($reference))) : []; } }