health(); } catch (Throwable $error) { report($error); $result = ['checked_at' => now()->toIso8601String(), 'ok' => false, 'reasons' => ['unavailable']]; } if ($this->option('json')) { $this->line(json_encode($result, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR)); } else { $this->line($result['ok'] ? 'Reposição: verificação técnica sem pendências observadas.' : 'Reposição: verificação técnica requer atenção.'); $labels = ['not_installed' => 'Reposição durável não instalada nesta composição.', 'not_recent' => 'Sem passagem recente confirmada.', 'last_run_not_successful' => 'Última passagem sem sucesso confirmado.', 'pending_signals' => 'Existem sinais duráveis por processar.', 'failed_work' => 'Existem trabalhos a recuperar.', 'unbound_observation' => 'Passagem sem associação confirmada a esta instalação/base.', 'unavailable' => 'Não foi possível consultar. Verifique o registo técnico.']; foreach ($result['reasons'] as $reason) { $this->line($labels[$reason]); } } return $result['ok'] ? self::SUCCESS : self::FAILURE; } }