Files
SGF/scripts/sgf-fiscal-rules-proof-bootstrap.php
2026-11-11 09:00:17 +02:00

12 lines
2.3 KiB
PHP

<?php
require __DIR__.'/sgf-ledger-proof-bootstrap.php';
use App\Modules\Services\FiscalRules;use App\Shared\Context\CompanyContext;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Str;
config(['fiscal_rules_qa.enabled'=>true,'fiscal_rules_qa.source_sha256'=>hash_file('sha256',$repo.'/resources/data/fiscal-rule-qa.json')]);
$selectRule=function($actor=13,$generation='rules-proof')use($app){Auth::forgetGuards();Auth::shouldUse('web');$user=App\Models\User::findOrFail($actor);Auth::guard('web')->setUser($user);$session=app('session')->driver();$session->start();$session->put('company_context',['tenant_id'=>1,'company_id'=>2,'unit_id'=>2,'module_id'=>'accounting','token'=>$generation.'-'.$actor]);$r=Illuminate\Http\Request::create('/api/fiscal-rules','POST');$r->setUserResolver(fn()=>$user);$r->setLaravelSession($session);$r->attributes->set('sgf_module','accounting');$app->instance('request',$r);app(CompanyContext::class)->selectFor($actor,1,2,2);return $actor;};
$rules=app(FiscalRules::class);$fixture=$rules->fixture();$def=fn($case)=>$fixture['cases'][$case]['definition']+['source_sha256'=>$fixture['sha256']];
$ruleInput=fn($action,$revision,$data,$target=null,$key='QA-RATE-TRANSVERSAL')=>['action'=>$action,'rule_key'=>$key,'revision'=>$revision,...($target?['target_id'=>$target]:[]),'data'=>$data,'reason'=>'Conferência QA individual da fonte, parâmetros, vigência e versão.'];
$calcInput=fn($id,$date='2026-11-30',$base='1000',$currency='MZN')=>['action'=>'calculate','revision'=>0,'data'=>['rule_event_id'=>$id,'date'=>$date,'base'=>$base,'currency'=>$currency],'reason'=>'Cálculo artificial QA por regra escolhida explicitamente e versão conferida.'];
$rulePreview=function($actor,$in,$key=null)use($rules,$selectRule){$selectRule($actor);return $rules->preview($actor,$in,$key??(string)Str::uuid());};
$ruleCommand=function($actor,$in)use($rules,$rulePreview,$selectRule){$p=$rulePreview($actor,$in);$selectRule($actor);return [$rules->confirm($actor,$p['preview']),$p];};
$reject=function($fn,$status,$name)use($ok){try{$fn();throw new RuntimeException('Expected refusal: '.$name);}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e){$ok($e->getStatusCode()===$status,$name);}catch(Illuminate\Validation\ValidationException){$ok($status===422,$name);}};