true,'remunerations.schema_sha256'=>hash_file('sha256',$repo.'/database/sql/remunerations.sql')]); set_exception_handler(function($e){echo json_encode(['passed'=>false,'type'=>get_class($e),'message'=>$e->getMessage(),'frames'=>array_map(fn($f)=>[basename($f['file']??''),$f['line']??0],array_slice($e->getTrace(),0,5))]).PHP_EOL;exit(1);}); config(['human_resources.enabled'=>true,'human_resources.profiles_sha256'=>App\Shared\Installation\HumanResourcesProfiles::fingerprint(App\Shared\Installation\HumanResourcesProfiles::policy())]); $hrProfiles=App\Shared\Installation\HumanResourcesProfiles::registered(); $hrActor=function($alias)use($hrProfiles){$key=[13=>'hr_prepare',14=>'hr_review',17=>'hr_read'][$alias]??null;return$key?(int)collect($hrProfiles)->firstWhere('profile_key',$key)->user_id:$alias;}; $select=function($actor=13,$generation='rm-proof',$module='human_resources')use($app,$hrActor){$actor=$hrActor($actor);Illuminate\Support\Facades\Auth::forgetGuards();Illuminate\Support\Facades\Auth::shouldUse('web');$user=App\Models\User::findOrFail($actor);Illuminate\Support\Facades\Auth::guard('web')->setUser($user);$session=app('session')->driver();$session->start();$session->put('company_context',['tenant_id'=>1,'company_id'=>2,'unit_id'=>2,'module_id'=>$module,'token'=>$generation.'-'.$actor]);$r=Illuminate\Http\Request::create('/api/remunerations');$r->setUserResolver(fn()=>$user);$r->setLaravelSession($session);$r->attributes->set('sgf_module',$module);$app->instance('request',$r);app(App\Shared\Context\CompanyContext::class)->selectFor($actor,1,2,2);}; $rm=app(App\Modules\HumanResources\Remunerations::class);$uuid=fn()=>(string)Illuminate\Support\Str::uuid(); $input=fn($kind,$key,$version,$data,$action='prepare')=>['kind'=>$kind,'action'=>$action,'record_key'=>$key,'version'=>$version,'reason'=>'Decisão individual QA de remuneração artificial sem efeitos financeiros.','data'=>$data]; $preview=function($actor,$d,$key=null)use($select,$rm,$uuid,$hrActor){$select($actor);return$rm->preview($hrActor($actor),$d,$key??$uuid());}; $confirm=function($actor,$token,$gen='rm-proof')use($select,$rm,$hrActor){$select($actor,$gen);return$rm->confirm($hrActor($actor),$token);}; $command=function($actor,$d,$key=null)use($uuid,$preview,$confirm){$key??=$uuid();$p=$preview($actor,$d,$key);return[$confirm($actor,$p['preview']),$p,$key];}; $listing=function($kind='payroll',$extra=[],$actor=17)use($select,$rm,$hrActor){$select($actor);return$rm->listing($hrActor($actor),['kind'=>$kind]+$extra);}; $reject=function($fn,$status,$name)use($ok){try{$fn();throw new RuntimeException('Expected refusal: '.$name);}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e){$ok($e->getStatusCode()===$status,$name);}catch(Illuminate\Validation\ValidationException){$ok($status===422,$name);}}; $workerData=['operation'=>'establish','code'=>'QA-COLABORADOR-01','status'=>'active'];$rulesData=['operation'=>'establish','label'=>'Regras artificiais do exercício QA','valid_from'=>'2026-01-01','valid_to'=>'2026-12-31','worker_rate'=>'3','employer_rate'=>'4','retention_rate'=>'8','source'=>'Parâmetros artificiais de ensaio, sem validade legal de INSS ou IRPS.'];