*/ public function facts(PeopleProcess $process, User $actor): array { $access = app(PeopleAccess::class); $contract = $access->can($actor, $process, 'contract') || $access->can($actor, $process, 'contract_view'); $selection = $process->selection ?? []; $state = match ($process->status) { 'selection_review' => 'Proposta por conferir', 'selected', 'contract_draft' => 'Selecção aprovada', default => ($selection['outcome'] ?? null) === 'returned' ? 'Proposta devolvida' : 'Sem proposta de selecção', }; $pending = match ($process->status) { 'draft' => 'Conferir abertura', 'open' => 'Concluir recepção e triagem de candidaturas', 'assessment' => ($selection['outcome'] ?? null) === 'returned' ? 'Rever avaliação e proposta devolvida' : 'Concluir avaliação e preparar proposta', 'selection_review' => 'Conferir proposta por pessoa independente', 'selected' => 'Preparar minuta contratual', 'contract_draft' => 'Minuta preparada; formalização não registada neste percurso', default => 'Consultar processo', }; return ['selection_state' => $state, 'proposed_at' => $selection['created_at'] ?? null, 'decided_at' => $selection['decision_at'] ?? null, 'pending' => $pending, 'contract_visibility' => $contract ? 'Consulta autorizada' : 'Sem acesso aos dados da minuta', 'contract_reference' => $contract ? ($process->contract['reference'] ?? null) : 'Sem acesso', 'contract_prepared_at' => $contract ? ($process->contract['prepared_at'] ?? null) : 'Sem acesso', 'contract_starts_on' => $contract ? ($process->contract['starts_on'] ?? null) : 'Sem acesso']; } }