make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap(); use Illuminate\Support\Facades\DB; if(!\App\Modules\Identity\Services\LocalDatabaseGuard::allows())throw new RuntimeException('Own SGF development application database required.'); if(!DB::table('companies')->where(['id'=>1,'tenant_id'=>1,'name'=>'Tempo Lda'])->exists()||!DB::table('units')->where(['id'=>1,'tenant_id'=>1,'company_id'=>1,'name'=>'SEGI'])->exists())throw new RuntimeException('Scope differs.'); $proposals=[];foreach([1=>['workshop_billing.view','workshop_billing.prepare','workshop_billing.generate'],2=>['workshop_billing.view','workshop_billing.review','workshop.view']] as $user=>$rights){if(!DB::table('users')->where('id',$user)->exists()||!DB::table('company_memberships')->where(['user_id'=>$user,'tenant_id'=>1,'company_id'=>1])->exists())throw new RuntimeException('Existing account membership required.');foreach($rights as $permission){$g=['user_id'=>$user,'tenant_id'=>1,'company_id'=>1,'unit_id'=>1,'permission'=>$permission];$proposals[]=$g+['already_granted'=>DB::table('permission_grants')->where($g)->exists()];}} $prerequisites=[];foreach([1,2] as $user){foreach(['clients.view','services.view'] as $permission)$prerequisites[]=['user_id'=>$user,'permission'=>$permission,'unit_id'=>null,'present'=>DB::table('permission_grants')->where(['user_id'=>$user,'tenant_id'=>1,'company_id'=>1,'permission'=>$permission])->whereNull('unit_id')->exists()];}foreach(['workshop.view','service_drafts.view','service_drafts.create','billing_drafts.view','billing_drafts.create'] as $permission)$prerequisites[]=['user_id'=>1,'permission'=>$permission,'unit_id'=>1,'present'=>DB::table('permission_grants')->where(['user_id'=>1,'tenant_id'=>1,'company_id'=>1,'unit_id'=>1,'permission'=>$permission])->exists()]; try{\App\Modules\Workshop\WorkshopBilling::guard();throw new RuntimeException('Real conversion allowed.');}catch(\Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e){if($e->getStatusCode()!==403)throw $e;} echo json_encode(['mode'=>'preview_only','destination'=>'sgf_tempo_dev','migration_120000_applied'=>DB::table('migrations')->where('migration','2026_10_28_120000_create_workshop_billing_drafts')->exists(),'proposed_grants'=>$proposals,'existing_prerequisites'=>$prerequisites,'real_conversion_blocked'=>true,'applied'=>false],JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR).PHP_EOL;