Accept isolated budget versus actual trial with documented capture limitation

This commit is contained in:
2026-10-28 17:07:37 +02:00
parent 4a94e8a054
commit 04870f012d
28 changed files with 774 additions and 9 deletions
+12
View File
@@ -10,6 +10,14 @@ Route::get('/', function () {
});
Route::get('/api/session', [IdentityController::class, 'session']);
// Read-only diagnostic for the explicitly isolated manual proof; no business data or secrets.
Route::get('/api/industrial-budget-proof/environment', function () {
abort_unless(app()->environment('browser-testing'),404);
\App\Modules\Industry\IndustrialBudgets::guard();
$db=\Illuminate\Support\Facades\DB::selectOne('SELECT current_database() AS database,current_user AS role,inet_server_port() AS port');
abort_unless($db->database==='sgf_tempo_test'&&$db->role==='sgf_test_runner'&&(int)$db->port===55432,403);
return response()->json(['environment'=>app()->environment(),'database'=>$db->database,'role'=>$db->role,'database_port'=>(int)$db->port,'session_driver'=>config('session.driver'),'session_cookie'=>config('session.cookie'),'cache_store'=>config('cache.default'),'synthetic_only'=>true])->header('Cache-Control','no-store, private');
});
Route::post('/api/login', [IdentityController::class, 'login']);
Route::middleware(['auth', RequireValidSession::class])->group(function (): void {
Route::post('/api/logout', [IdentityController::class, 'logout']);
@@ -17,6 +25,10 @@ Route::middleware(['auth', RequireValidSession::class])->group(function (): void
Route::middleware(RequireCompanyContext::class)->group(function (): void {
Route::get('/api/workshop', [\App\Modules\Workshop\Http\WorkshopController::class,'index']);
Route::get('/api/direct-costs', [\App\Modules\Workshop\Http\DirectCostsController::class,'index']);
Route::get('/api/industrial-budgets', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'index']);
Route::post('/api/industrial-budgets/lots/{id}/proposals', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'propose'])->whereNumber('id');
Route::post('/api/industrial-budgets/lots/{id}/decisions', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'decide'])->whereNumber('id');
Route::post('/api/industrial-budgets/lots/{id}/comparisons', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'compare'])->whereNumber('id');
Route::get('/api/industrial-costs', [\App\Modules\Industry\Http\IndustrialCostsController::class,'index']);
Route::post('/api/industrial-costs/lots', [\App\Modules\Industry\Http\IndustrialCostsController::class,'open']);
Route::post('/api/industrial-costs/lots/{id}/inputs', [\App\Modules\Industry\Http\IndustrialCostsController::class,'input'])->whereNumber('id');