Files
SGF/scripts/sgf-stock-transit-ledger-proof.php
2026-11-11 09:00:17 +02:00

16 lines
3.4 KiB
PHP

<?php
use Illuminate\Support\Str;
require __DIR__.'/sgf-ledger-proof-bootstrap.php';$p=json_decode(file_get_contents($s['root'].'/stock-final-binding.json'),true);$host->beginTransaction();$native->beginTransaction();
try{
foreach($native->table('gl_stock_books')->where($f['scope'])->orderBy('id')->get() as $b){
$unit=$b->stock_item_id===$p['lot_item_id']?2000:5000;$rate=$call('accounting_prepare','prepare',fn($e,$a,$m,$o,$s,$stock)=>$stock->command('rate-prepare',['book_id'=>$b->id,'version'=>0,'unit_minor'=>$unit,'reason'=>'Taxa fictícia revista para reconciliação do trânsito.'],(string)Str::uuid()));$call('accounting_review','validate',fn($e,$a,$m,$o,$s,$stock)=>$stock->command('rate-validate',['rate_id'=>$rate['rate_id'],'version'=>1,'decision'=>'approved','reason'=>'Conferência distinta da propriedade física e da taxa.'],(string)Str::uuid()));
foreach($native->table('stock_movements')->where(['stock_item_id'=>$b->stock_item_id,'warehouse_id'=>$b->warehouse_id])->whereNull('snapshot->sgf_internal_transit')->orderBy('id')->get() as $m){$kind=Tempo\Finance\GeneralLedger\StockValuation::TYPES[$m->movement_type];$proposal=$call('accounting_prepare','prepare',fn($e)=>$e->command('effect-prepare',['effect_type'=>$kind,'source_id'=>$m->id,'journal_on'=>'2026-11-10','period_key'=>'QA-2026-INTEGRADO','rule_key'=>$kind,'reason'=>'Valorização das origens existentes para conferir apenas a nova fronteira de trânsito.'],(string)Str::uuid()));$call('accounting_review','validate',fn($e)=>$e->command('validate',['proposal_id'=>$proposal['proposal_id'],'revision'=>$proposal['revision'],'decision'=>'approved','reason'=>'Revisão distinta do movimento de origem do trânsito.'],(string)Str::uuid()));$call('accounting_prepare','post',fn($e)=>$e->command('post',['proposal_id'=>$proposal['proposal_id'],'revision'=>$proposal['revision'],'reason'=>'Aplicação QA revertida no final desta prova dirigida.'],(string)Str::uuid()));}
}
$count=$native->table('gl_journals')->count();$events=$native->table('sgf_stock_transit_events')->where($f['scope'])->orderBy('id')->get();
foreach($events as $event){$movement=$native->table('stock_movements')->where('id',$event->movement_id)->first();$evidence=(new Tempo\Finance\GeneralLedger\StockTransitEvidence($native,$f['scope']))->movement($movement);$ok($evidence['remaining_milli']===0&&$evidence['ownership_change_minor']===0&&!$evidence['journal_required'],'dispatch or received parcel reconciles as an internal owned location change');}
$period=$call('accounting_prepare','view',fn($e,$a,$b,$o,$s,$stock)=>$stock->period(['period_key'=>'QA-2026-INTEGRADO','starts_on'=>'2026-01-01','ends_on'=>'2026-12-31']));$ok($period['pending']===0,'period includes internal source and destination evidence with zero unclassified physical facts');
$ok($native->table('gl_journals')->count()===$count&&$count===3,'three underlying receipt/issue journals; zero transfer expense journals');
$native->statement('SET CONSTRAINTS ALL IMMEDIATE');$ok(true,'valuation and transit coexist with all deferred journal constraints');
}finally{while($native->transactionLevel()>0)$native->rollBack();while($host->transactionLevel()>0)$host->rollBack();}
file_put_contents($work.'/stock-transit-ledger-result.json',json_encode(['passed'=>true,'checks'=>$checks,'financial_test_rolled_back'=>true],JSON_PRETTY_PRINT));echo json_encode(['passed'=>true,'checks'=>count($checks),'proof'=>$work.'/stock-transit-ledger-result.json']).PHP_EOL;