(string)Str::uuid(),'plan'=>(string)Str::uuid(),'charge'=>(string)Str::uuid(),'disposal'=>(string)Str::uuid(),'steps'=>[]];$save=function()use(&$p,$progress){file_put_contents($progress,json_encode($p));};$save(); $step=function($name,Closure $fn)use(&$p,$save,$ok){if(!isset($p['steps'][$name])){$p['steps'][$name]=$fn();$save();}$ok(true,$name.' recorded once');return$p['steps'][$name];}; $cmd=function($name,$actor,$data)use($step,$faCommand){return $step($name,fn()=>$faCommand($actor,$data)[0]);}; $a=['operation'=>'establish','code'=>'QA-ACTIVO-REG-01','description'=>'Equipamento artificial de regressão integrado','origin_reference'=>'QA-ABERTURA-ACTIVO-REG-01','cost'=>'1200.00','residual'=>'0.00','available_on'=>'2026-10-01','location'=>'QA-SALA-A','custodian'=>'QA-RESPONSAVEL-ACTIVO-01','evidence'=>'Origem exclusivamente artificial do ciclo aprovado.']; $reject(fn()=>$faCall(17,'preview',$faInput('asset',$p['asset'],0,$a)),403,'reader cannot prepare');$reject(fn()=>$faCall(15,'preview',$faInput('asset',$p['asset'],0,$a),null,'assets-proof','finance'),403,'wrong module denied');$reject(fn()=>$faCall(13,'index',['kind'=>'asset']),403,'finance actor denied'); $ap=$cmd('asset_prepare',15,$faInput('asset',$p['asset'],0,$a)); if(!isset($p['steps']['asset_review']))$reject(fn()=>$faCall(15,'preview',$faInput('asset',$p['asset'],1,['decision'=>'approved'],'review')),403,'own review denied'); $ar=$cmd('asset_review',16,$faInput('asset',$p['asset'],1,['decision'=>'approved'],'review')); $gl=function($name,$role,$action,$data)use($step,$call){return$step($name,fn()=>$call($role,$action==='effect-prepare'?'prepare':str_replace('-','_',$action),fn($e)=>$e->command($action,$data,(string)Str::uuid())));}; $ad=$gl('admission_prepare','accounting_prepare','effect-prepare',['effect_type'=>'assets.admitted','source_id'=>$ar['id'],'journal_on'=>'2026-10-01','period_key'=>'QA-2026-INTEGRADO','rule_key'=>'QA-ASSET-ADMISSION','reason'=>'Admissão individual artificial revista na regressão.']); $gl('admission_review','accounting_review','validate',['proposal_id'=>$ad['proposal_id'],'revision'=>$ad['revision'],'decision'=>'approved','reason'=>'Revisão distinta da admissão artificial na regressão.']); $aj=$gl('admission_post','accounting_prepare','post',['proposal_id'=>$ad['proposal_id'],'revision'=>$ad['revision'],'reason'=>'Aplicação individual da admissão artificial revista.']); $plan=['operation'=>'establish','asset_key'=>$p['asset'],'life_months'=>12,'status'=>'active','evidence'=>'Plano linear artificial12 meses aprovado explicitamente.'];$cmd('plan_prepare',15,$faInput('plan',$p['plan'],0,$plan));$cmd('plan_review',16,$faInput('plan',$p['plan'],1,['decision'=>'approved'],'review')); $charge=['operation'=>'establish','asset_key'=>$p['asset'],'plan_key'=>$p['plan'],'month'=>'2026-10','evidence'=>'Quota artificial Outubro após admissão, sem automatismo.'];$cmd('charge_prepare',15,$faInput('charge',$p['charge'],0,$charge));$cr=$cmd('charge_review',16,$faInput('charge',$p['charge'],1,['decision'=>'approved'],'review')); $cp=$gl('charge_ledger_prepare','accounting_prepare','effect-prepare',['effect_type'=>'assets.depreciation','source_id'=>$cr['id'],'journal_on'=>'2026-10-31','period_key'=>'QA-2026-INTEGRADO','rule_key'=>'QA-ASSET-DEPRECIATION','reason'=>'Quota Outubro100 artificial revista individualmente.']);$gl('charge_ledger_review','accounting_review','validate',['proposal_id'=>$cp['proposal_id'],'revision'=>$cp['revision'],'decision'=>'approved','reason'=>'Revisão distinta da quota Outubro100 artificial.']);$cj=$gl('charge_ledger_post','accounting_prepare','post',['proposal_id'=>$cp['proposal_id'],'revision'=>$cp['revision'],'reason'=>'Aplicação da quota100 após revisão distinta.']); $balance=app(App\Modules\Accounting\FixedAssets::class)->balance($f['scope'],$p['asset'],$native);if(!isset($p['steps']['correction_post']))$ok($balance['cost_minor']===120000&&$balance['accumulated_minor']===10000&&$balance['carrying_minor']===110000,'cost1200 accumulated100 carrying1100'); file_put_contents($work.'/assets-functional.json',json_encode(['passed'=>true,'checks'=>$checks,'steps'=>array_keys($p['steps']),'new_demo'=>false,'old_suites_reused'=>true],JSON_PRETTY_PRINT));echo json_encode(['passed'=>true,'checks'=>count($checks),'proof'=>$work.'/assets-functional.json']).PHP_EOL;