Files
SGF/scripts/sgf-hr-readable-proof.php
2026-11-11 15:04:01 +02:00

5 lines
2.4 KiB
PHP

<?php
require __DIR__.'/sgf-hr-personnel-proof-bootstrap.php';$before=[$host->table('hp_versions')->count(),$host->table('hp_commands')->count(),$host->table('identity_audit')->count()];$select(17);$rows=$host->table('hp_versions')->where('state','approved')->orderBy('id')->get();$seen=[];foreach($rows as$row){if(isset($seen[$row->kind]))continue;$seen[$row->kind]=true;$out=$hp->readable($hrActor(17),$row->id);$d=json_decode($row->data,true);$ok($out['source_sha256']===$d['artifact_sha256']&&hash('sha256',$out['bytes'])===$out['sha256'],'readable SHA and frozen source '.$row->kind);$ok(str_starts_with($out['bytes'],"\xEF\xBB\xBF")&&!str_contains($out['bytes'],'{""')&&str_contains($out['bytes'],'não é documento legal'),'UTF8 view not raw JSON '.$row->kind);$sample=(array)$row;$sample['data']=$d;$sample['reason']=" =HYPERLINK(\"qa\")\r\nTeste";$bytes=App\Modules\HumanResources\PersonnelReadableCsv::render($sample);$ok(str_contains($bytes,"' =HYPERLINK(\"\"qa\"\")"),'free text CSV formula prefix escaped '.$row->kind);}
$ok($seen===['contract'=>true,'day'=>true,'entitlement'=>true,'leave'=>true],'all available regression source kinds rendered');$select(17);$reject(fn()=>$hp->readable($hrActor(17),2147483647),403,'unknown or foreign readable version refused');$prepared=$host->table('hp_versions')->where('state','prepared')->first();$reject(fn()=>$hp->readable($hrActor(17),$prepared->id),403,'prepared readable view refused');
$host->beginTransaction();try{$r=$host->table('hp_versions')->where(['kind'=>'contract','state'=>'approved'])->first();$data=json_decode($r->data,true)['input'];$data['operation']='amend';[$a]=$hpCommand(13,$hpInput('contract',$r->record_key,$r->version,$data));$event=$host->table('identity_audit')->orderByDesc('id')->first();$ok($event->action==='human_resources.contracts.prepare'&&json_decode($event->details,true)['area']==='contracts','new contract audit classified in correct area');}finally{$host->rollBack();}$ok([$host->table('hp_versions')->count(),$host->table('hp_commands')->count(),$host->table('identity_audit')->count()]===$before,'reads and audit test preserve all accepted facts');file_put_contents($work.'/hp-readable-result.json',json_encode(['passed'=>true,'checks'=>$checks,'business_writes_8085'=>0,'new_grants'=>0],JSON_PRETTY_PRINT));echo json_encode(['passed'=>true,'checks'=>count($checks),'proof'=>$work.'/hp-readable-result.json']).PHP_EOL;