Files
compras/app/Console/Commands/ReplenishmentHealth.php
T
2026-11-03 11:51:44 +02:00

38 lines
1.7 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\ReplenishmentQueue;
use Illuminate\Console\Command;
use Throwable;
class ReplenishmentHealth extends Command
{
protected $signature = 'sgc:replenishment-health {--json : Resultado técnico para integração operacional}';
protected $description = 'Consultar o estado técnico da reposição sem processar trabalhos ou aprovar compras';
public function handle(ReplenishmentQueue $queue): int
{
try {
$result = $queue->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;
}
}