Files
compras/app/Services/PeopleContractHandoff.php
2026-11-02 08:08:05 +02:00

30 lines
1.5 KiB
PHP

<?php
namespace App\Services;
use App\Models\PeopleProcess;
/** Future RH boundary: no transport, dispatch, employee creation or legal validation. */
class PeopleContractHandoff
{
/** @return array<string,mixed> */
public function envelope(PeopleProcess $process): array
{
abort_if($process->isDirty(), 409, 'A ligação a RH exige uma versão persistida do contrato formalizado.');
// Selection approval and today's contract draft must never cross this boundary.
abort_unless($process->exists && $process->getAttribute('work_context_key') === 'people.internal'
&& $process->status === 'contract_formalized'
&& ($process->contract['status'] ?? null) === 'formalized'
&& ! empty($process->contract['formalized_at'])
&& ! empty($process->contract['reference'])
&& $process->selected_application_id !== null, 409, 'A ligação a RH exige contrato interno formalizado.');
return ['schema' => 'sgc.people.contract_formalized.v1',
'idempotency_key' => 'sgc:'.$process->tenant_id.':people:'.$process->id.':contract:'.$process->version,
'tenant_id' => $process->tenant_id, 'process_id' => $process->id, 'process_version' => $process->version,
'application_id' => $process->selected_application_id, 'kind' => $process->kind,
'work_context_key' => $process->getAttribute('work_context_key'),
'contract' => $process->contract];
}
}