Accept isolated workshop billing draft trial with documented manual evidence

This commit is contained in:
2026-10-28 19:32:10 +02:00
parent 090b7da336
commit 3932b94a16
30 changed files with 633 additions and 1 deletions
@@ -0,0 +1,16 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration {
public function up(): void {
$old=substr(DB::selectOne("SELECT pg_get_constraintdef(oid) AS d FROM pg_constraint WHERE conrelid='permission_grants'::regclass AND conname='permission_grants_scope_check'")->d,6);
DB::statement('ALTER TABLE permission_grants DROP CONSTRAINT permission_grants_scope_check');
DB::statement("ALTER TABLE permission_grants ADD CONSTRAINT permission_grants_scope_check CHECK (($old) OR (permission IN ('workshop_billing.view','workshop_billing.prepare','workshop_billing.review','workshop_billing.generate') AND unit_id IS NOT NULL))");
DB::unprepared(file_get_contents(__DIR__.'/../sql/workshop-billing.sql'));
foreach(['wb_proposals','wb_decisions','wb_generations','wb_claims','wb_commands','wb_events','wb_outbox'] as $t){
DB::statement("CREATE TRIGGER {$t}_immutable BEFORE UPDATE OR DELETE ON {$t} FOR EACH ROW EXECUTE FUNCTION sgf_append_only_audit()");
DB::statement("CREATE TRIGGER {$t}_environment BEFORE INSERT ON {$t} FOR EACH ROW EXECUTE FUNCTION sgf_ic_test_only()");
}
}
public function down(): void {throw new RuntimeException('Workshop commercial history requires reviewed preservation.');}
};