id(); $table->foreignId('tenant_id')->constrained()->restrictOnDelete(); $table->foreignId('requisition_id')->constrained()->restrictOnDelete(); $table->foreignId('created_by')->constrained('users')->restrictOnDelete(); $table->unsignedInteger('revision'); $table->json('criteria'); $table->json('snapshot'); $table->string('basis_hash', 64); $table->text('reason'); $table->timestamp('created_at'); $table->unique(['requisition_id', 'revision']); }); Schema::create('qualification_assessments', function (Blueprint $table) { $table->id(); $table->foreignId('tenant_id')->constrained()->restrictOnDelete(); $table->foreignId('qualification_set_id')->constrained()->restrictOnDelete(); $table->foreignId('quotation_id')->constrained()->restrictOnDelete(); $table->foreignId('analyst_id')->constrained('users')->restrictOnDelete(); $table->unsignedInteger('revision'); $table->json('answers'); $table->json('snapshot'); $table->text('reason'); $table->timestamp('created_at'); $table->unique(['qualification_set_id', 'quotation_id', 'analyst_id', 'revision'], 'qualification_assessment_version_unique'); }); } public function down(): void { throw new LogicException('Preservar requisitos, análises e versões documentais.'); } };