true,'replayed'=>true,'commands'=>0]).PHP_EOL;exit;} $profiles=json_decode(file_get_contents($s['root'].'/single-profiles.json'),true)['profiles'];$old=json_decode(file_get_contents($s['root'].'/single-commercial.json'),true);$actor=App\Models\User::findOrFail($profiles['commercial_prepare']['user_id']);$reviewer=App\Models\User::findOrFail($profiles['commercial_review']['user_id']); config(['sgf_single_installation.enabled'=>true,'sgf_single_installation.schema_sha256'=>$host->table('sgf_composition_schema')->value('source_hash')]);Auth::guard('web')->setUser($actor);$r=Illuminate\Http\Request::create('/api/a/billing_drafts','POST');$r->attributes->set('sgf_module','commercial');$r->setUserResolver(fn()=>$actor);$session=app('session')->driver();$session->start();$session->put('company_context',$f['scope']+['module_id'=>'commercial','token'=>'document-inputs']);$r->setLaravelSession($session);$app->instance('request',$r);app(CompanyContext::class)->selectFor($actor->id,1,2,2); require_once base_path('tests/Support/IdentityFixture.php');require_once base_path('tests/Support/InvoiceFixture.php'); $before=$host->table('si_invoices')->orderBy('id')->get()->toJson();$grants=$host->table('permission_grants')->orderBy('id')->get()->toJson(); $result=$host->transaction(function()use($old,$actor,$reviewer,$f,$host){$base=$old+['tenant'=>$f['tenant'],'company'=>$f['company'],'unit'=>$f['unit'],'manager'=>$actor,'reader'=>$reviewer];$out=[]; foreach(['credit_invoice','invoice_receipt'] as $name){$created=Tests\Support\InvoiceFixture::additionalDraft($base,'862.07');$s=app(App\Modules\Services\ServiceInvoicing::class);$series=$s->propose($actor->id,['kind'=>'series','identifier'=>'TEST-DOC-'.($name==='credit_invoice'?'NC':'FR').'-2026','data'=>['valid_from'=>$created['start'],'code'=>'TEST-DOC-'.($name==='credit_invoice'?'NC':'FR').'-2026','first_number'=>1,'state'=>'open','evidence'=>'Nova série exclusivamente QA para o bloco documental autorizado.']]);app(CompanyContext::class)->selectFor($reviewer->id,1,2,2);$s->decide($series['id'],$reviewer->id,['version'=>1,'decision'=>'approved','reason'=>'Revisão distinta da nova série QA, sem reiniciar numeração existente.']);app(CompanyContext::class)->selectFor($actor->id,1,2,2); foreach(['service_drafts'=>'source','billing_drafts'=>'draft'] as $area=>$key){$row=$host->table('a_'.$area)->where('id',$created[$key])->firstOrFail();foreach(['finance','accounting'] as $module)ModuleRecords::associate($area,$row->id,$actor->id,$f['scope'],$module,'Conferência individual desta nova origem QA para documentos e mesmo diário.',false,(int)$row->version);} $out[$name]=['draft_id'=>$created['draft'],'source_id'=>$created['source'],'series_id'=>$series['id'],'rule_id'=>$created['rule'],'client_id'=>$created['client'],'total'=>'1000.00','base'=>'862.07','document_tax'=>'137.93']; }return $out; }); if($before!==$host->table('si_invoices')->orderBy('id')->get()->toJson()||$grants!==$host->table('permission_grants')->orderBy('id')->get()->toJson())throw new LogicException('Original invoice or rights changed'); file_put_contents($file,json_encode($result,JSON_PRETTY_PRINT));echo json_encode(['passed'=>true,'book'=>$book,'new_prepared_sources'=>2,'invoices_issued'=>0,'rights_changed'=>false]).PHP_EOL;