make(Kernel::class)->bootstrap(); $identity = portalQaAssertTarget($target); $directory = $root.'/storage/app/private/investmoz-v2/portal-audit'; $path = $directory.'/opportunity-workflow-fixtures-qa.json'; if (is_file($path)) { $receipt = json_decode(file_get_contents($path), true, 512, JSON_THROW_ON_ERROR); throw_unless($receipt['target']['database'] === $identity->database && DB::table('economic_activities')->where('id', $receipt['activity_id'])->exists(), RuntimeException::class, 'Existing fixture target/reference mismatch'); echo json_encode(['target' => $identity, 'synthetic_fixture_reused' => true, 'active_writes' => 0]).PHP_EOL; exit; } $orgs = json_decode(file_get_contents($directory.'/profiles-v1-organizations-qa.json'), true, 512, JSON_THROW_ON_ERROR); $receipt = DB::transaction(function () use ($identity, $orgs) { $version = (string) Str::uuid(); DB::table('reference_catalog_versions')->insert(['id' => $version, 'catalog_code' => 'qa-opportunity-synthetic', 'version_no' => 1, 'source_system' => 'qa-synthetic-fixture', 'source_version' => 'qa-20261010', 'source_reference' => 'Synthetic test data only, not an official economic classification', 'status' => 'published', 'created_at' => now(), 'updated_at' => now()]); $previous = null; $ids = []; foreach (['Sector sintético QA', 'Subsector sintético QA', 'Atividade sintética QA'] as $i => $name) { $sector = DB::table('sectors')->insertGetId(['name' => $name, 'slug' => 'qa-workflow-level-'.$i, 'is_active' => true, 'created_at' => now(), 'updated_at' => now()]); $id = (string) Str::uuid(); DB::table('economic_activities')->insert(['id' => $id, 'catalog_version_id' => $version, 'parent_id' => $previous, 'sector_id' => $sector, 'code' => 'qa-level-'.$i, 'label_pt_mz' => $name, 'status' => 'published', 'valid_from' => '2026-10-10', 'created_at' => now(), 'updated_at' => now()]); $ids[] = ['id' => $id, 'sector_id' => $sector]; $previous = $id; } $investor = (string) Str::uuid(); $contact = (string) Str::uuid(); DB::table('investors')->insert(['id' => $investor, 'source_system' => 'qa-synthetic-fixture', 'organization_id' => $orgs['organization'], 'legal_name' => 'Entidade sintética QA — sem validade real', 'investor_type' => 'institutional', 'status' => 'active']); DB::table('contacts')->insert(['id' => $contact, 'source_system' => 'qa-synthetic-fixture', 'full_name' => 'Contacto sintético QA — oportunidade', 'email' => 'workflow-contact@example.invalid']); DB::table('investor_contacts')->insert(['investor_id' => $investor, 'contact_id' => $contact, 'is_primary' => true]); return ['target' => $identity, 'synthetic_only' => true, 'sector_id' => $ids[0]['sector_id'], 'subsector_id' => $ids[1]['id'], 'activity_id' => $ids[2]['id'], 'contact_id' => $contact, 'organization_id' => $orgs['organization'], 'catalog_version_id' => $version, 'active_writes' => 0]; }); file_put_contents($path, json_encode($receipt, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR)); echo json_encode(['target' => $identity, 'synthetic_only' => true, 'canonical_reference_fixture_prepared' => true, 'active_writes' => 0]).PHP_EOL;