36 lines
3.9 KiB
PHP
36 lines
3.9 KiB
PHP
<?php
|
|
// Synthetic, isolated browser proof. Never creates a Tempo account/profile/operation.
|
|
use App\Modules\Services\ServiceFiscal;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
require __DIR__.'/../vendor/autoload.php';
|
|
$app=require __DIR__.'/../bootstrap/app.php';
|
|
$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
|
|
\App\Shared\Testing\TestingDatabaseGuard::assertSafe();
|
|
abort_unless(\App\Modules\Services\ServiceCalculation::isolated(),403);
|
|
$file='C:/laragon/data/sgf-tempo/secrets/browser-fixture.json';
|
|
$f=json_decode(file_get_contents($file),true,32,JSON_THROW_ON_ERROR);
|
|
abort_if(DB::table('a_services')->exists() || DB::table('sf_proposals')->exists(),409,'Fixture não vazia; nenhum dado apagado.');
|
|
$result=DB::transaction(function() use($f) {
|
|
foreach(['manager_id'=>['view','propose'],'reader_id'=>['view','approve']] as $who=>$actions) foreach($actions as $action) \Tests\Support\IdentityFixture::grant($f[$who],$f['tenant'],$f['company'],'service_fiscal.'.$action);
|
|
\Tests\Support\IdentityFixture::grant($f['manager_id'],$f['tenant'],$f['company'],'service_fiscal.calculate',$f['unit']);
|
|
$context=app(\App\Shared\Context\CompanyContext::class);
|
|
$select=function($actor) use($context,$f) { $context->selectFor($actor,$f['tenant'],$f['company'],$f['unit']); };
|
|
$select($f['manager_id']); $w=app(\App\Modules\Services\ServiceWorkflow::class); $actor=$f['manager_id'];
|
|
$client=$w->save('clients',null,$actor,['name'=>'Cliente de prova fiscal'],(string)Str::uuid())['id'];
|
|
$service=$w->save('services',null,$actor,['name'=>'Alojamento mensal — PROVA SINTÉTICA'],(string)Str::uuid())['id'];
|
|
$source=$w->save('service_drafts',null,$actor,['name'=>'Período de prova fiscal','client_id'=>$client,'currency'=>'MZN','lines'=>[['service_id'=>$service,'quantity'=>'1','unit_price'=>'7850.00']]],(string)Str::uuid())['id'];
|
|
$draft=$w->save('billing_drafts',null,$actor,['source_id'=>$source,'name'=>'Prova fiscal condicionada — 7850 sem IVA'],(string)Str::uuid())['id'];
|
|
app(\App\Modules\Services\DocumentPreparation::class)->save('billing_drafts',$draft,$actor,['version'=>0,'draft_version'=>1,'currency'=>'MZN','price_mode'=>'added','period_start'=>'2026-10-26','units'=>['PERIODO'],'payment_instruction_ids'=>[]]);
|
|
$fiscal=app(ServiceFiscal::class);
|
|
$profile=$fiscal->propose($actor,['kind'=>'profile','identifier'=>'PROVA-ALOJAMENTO-16','data'=>['service_id'=>$service,'service_version'=>1,'currency'=>'MZN','price_mode'=>'added','rate_percent'=>'16','valid_from'=>'2026-10-26','treatment'=>'domestic_normal','conditions'=>'EXCLUSIVAMENTE SINTÉTICO — operação interna fictícia.','evidence'=>'Fixture isolada de aceitação; referências da ficha v0.8, sem aplicação à Tempo.']])['id'];
|
|
$select($f['reader_id']); $fiscal->decide($profile,$f['reader_id'],['version'=>1,'decision'=>'approved','reason'=>'Validação sintética do perfil exacto.']);
|
|
$select($actor);
|
|
$temporal=$fiscal->propose($actor,['kind'=>'temporal','identifier'=>'PROVA-PERIODO','data'=>['profile_proposal_id'=>$profile,'draft_id'=>$draft,'draft_version'=>1,'preparation_version'=>1,'reference_date'=>'2026-10-26','reference_basis'=>'Referência contratual explícita para prova; não é exigibilidade.','period_start'=>'2026-10-26','next_billing'=>'2026-11-26','event'=>'pending','evidence'=>'Pendência temporal deliberada; não se presumem fim de cobertura ou emissão.']])['id'];
|
|
$select($f['reader_id']); $fiscal->decide($temporal,$f['reader_id'],['version'=>1,'decision'=>'approved','reason'=>'Aprovado resultado condicionado, sem exigibilidade determinada.']);
|
|
$fiscal->proofActivation($profile,$f['reader_id'],1,true);
|
|
return ['fiscal_draft'=>$draft,'fiscal_profile_proposal'=>$profile,'fiscal_temporal_proposal'=>$temporal];
|
|
});
|
|
file_put_contents($file,json_encode($f+$result,JSON_THROW_ON_ERROR));
|
|
echo "Synthetic fiscal proposals and draft prepared only in sgf_tempo_test; no calculation precomputed.\n";
|