'array', 'last_seen_at' => 'datetime', ]; } public function organization(): BelongsTo { return $this->belongsTo(Organization::class, 'organization_id'); } public function branch(): BelongsTo { return $this->belongsTo(Branch::class, 'branch_id'); } public function vitalSigns(): HasMany { return $this->hasMany(VitalSign::class, 'device_id'); } public function isOnline(int $staleMinutes = 10): bool { return $this->status === self::STATUS_ACTIVE && $this->last_seen_at && $this->last_seen_at->gte(now()->subMinutes($staleMinutes)); } public function requiresAgent(): bool { return $this->connection_mode === self::MODE_AGENT || in_array($this->type, config('care.device_agent_types', []), true); } public function hasToken(): bool { return filled($this->device_token_hash); } }