['correct_prepare','correct_post','period_prepare','period_close'],'validate'=>['correct_validate','period_validate']] as $role=>$actions)foreach($actions as $action)DB::table('permission_grants')->insert($scope+['user_id'=>$f['actors'][$role],'permission'=>'general_ledger.'.$action,'created_at'=>now(),'updated_at'=>now()]); foreach(['prepare'=>['payments_view','payment_prepare','allocation_prepare','reversal_prepare'],'validate'=>['payments_view','payment_confirm','allocation_confirm','reversal_confirm'],'read'=>['payments_view']] as $role=>$actions)foreach($actions as $action)DB::table('pa_access')->insert($scope+['user_id'=>$f['actors'][$role],'action'=>$action,'person'=>'sgf-history-person-'.$f['actors'][$role]]); $cash=DB::table('gl_accounts')->insertGetId($scope+['code'=>'QA-LIQUIDACAO','label'=>'Contrapartida artificial de liquidação; sem execução monetária','is_movement'=>true,'currency'=>'MZN']); foreach(['QA-ALLOCATION'=>['allocation.confirmed',$credit,$cash],'QA-REVERSAL'=>['allocation.reversed',$cash,$credit],'QA-CORRECTION-REVERSE'=>['journal.reversal',$credit,$debit],'QA-CORRECTION-REPLACE'=>['journal.replacement',$debit,$credit]] as $key=>[$type,$d,$cId])DB::table('gl_rules')->insert($scope+$common+['rule_key'=>$key,'version'=>1,'policy'=>Tempo\Finance\GeneralLedger\PayableJournal::POLICY,'effect_type'=>$type,'currency'=>'MZN','valid_from'=>'2026-10-01','valid_to'=>'2026-10-31','debit_account_id'=>$d,'credit_account_id'=>$cId]);