30 lines
1.5 KiB
PHP
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];
|
|
}
|
|
}
|