name('home'); Route::get('/', [PortalServicesController::class, 'home'])->name('home'); Route::inertia('/contextos-de-investimento', 'portal/investment-contexts')->name('portal.investment-contexts'); Route::inertia('/politica-de-privacidade', 'portal/privacy-policy')->name('legal.privacy'); Route::inertia('/termos-de-uso', 'portal/terms-of-use')->name('legal.terms'); foreach (['sectores' => 'sectors', 'como-investir' => 'procedures', 'legislacao' => 'legislation', 'documentos' => 'documents', 'apoio' => 'support', 'parcerias' => 'partnerships', 'simulador-fiscal' => 'simulator', 'formularios/investidor' => 'investor', 'formularios/empresa' => 'company'] as $path => $page) { Route::get('/'.$path, [PortalServicesController::class, 'page'])->defaults('page', $page)->name('services.'.$page); } Route::get('/Simulador', [PortalServicesController::class, 'page'])->defaults('page', 'simulator')->name('services.simulator.alias'); Route::get('/documentos/{id}', [PortalServicesController::class, 'showDocument'])->whereNumber('id')->name('services.document'); Route::get('/documentos/{id}/view', [PortalServicesController::class, 'viewDocument'])->whereNumber('id')->name('services.document.view'); Route::get('/documentos/{id}/download', [PortalServicesController::class, 'download'])->whereNumber('id')->name('services.download'); Route::get('/explorar/{sectorSlug}', [LegacyContentController::class, 'landing'])->whereIn('sectorSlug', array_keys(config('legacy_content.groups', []))); Route::get('/{legacySlug}', [LegacyContentController::class, 'article'])->whereIn('legacySlug', array_keys(config('legacy_content.articles', []))); Route::post('/apoio', [PortalServicesController::class, 'submit'])->middleware('throttle:10,1')->name('services.submit'); Route::middleware(['auth', 'verified'])->group(function () { Route::get('/gestao-conteudos', fn (\Illuminate\Http\Request $request) => Inertia::render('management/content-hub', app(\App\Services\ContentManagement::class)->view($request->user())))->name('content-management'); Route::get('/balcao-virtual', [PortalServicesController::class, 'page'])->defaults('page', 'desk')->name('services.desk'); Route::post('/parcerias', [PortalServicesController::class, 'partnership'])->middleware('throttle:10,1')->name('services.partnership'); }); Route::middleware(['auth', 'verified', \App\Http\Middleware\EnsureScopedEditorial::class])->group(function () { Route::get('/management/portal-services/resources/{id}/article', [\App\Http\Controllers\EditorialArticleController::class, 'edit'])->whereNumber('id')->name('editorial.edit'); Route::put('/management/portal-services/resources/{id}/article', [\App\Http\Controllers\EditorialArticleController::class, 'save'])->whereNumber('id')->name('editorial.save'); Route::get('/management/portal-services/resources/{id}/article/preview', [\App\Http\Controllers\EditorialArticleController::class, 'preview'])->whereNumber('id')->name('editorial.preview'); Route::post('/management/portal-services/resources/{id}/article/preview', [\App\Http\Controllers\EditorialArticleController::class, 'previewContent'])->whereNumber('id')->name('editorial.preview-content'); Route::get('/management/editorial-installation', [\App\Http\Controllers\EditorialArticleController::class, 'installation'])->name('editorial.installation'); Route::get('/management/editorial-installation/mfa', [\App\Http\Controllers\EditorialArticleController::class, 'showMfa'])->name('editorial.mfa'); Route::post('/management/editorial-installation/mfa', [\App\Http\Controllers\EditorialArticleController::class, 'confirmMfa'])->middleware('throttle:5,1'); Route::post('/management/editorial-installation', [\App\Http\Controllers\EditorialArticleController::class, 'install'])->name('editorial.install'); Route::post('/management/portal-services/disclosure-authorization/apply', [PortalServicesController::class, 'applyDocumentDisclosureAuthorization'])->name('services.disclosure-authorization.apply'); Route::post('/management/portal-services/resources', [PortalServicesController::class, 'resource'])->name('services.resource'); Route::put('/management/portal-services/resources/{id}', [PortalServicesController::class, 'updateResource'])->whereNumber('id')->name('services.resource.update'); Route::post('/management/portal-services/{type}/{id}', [PortalServicesController::class, 'moderate'])->whereIn('type', ['resources', 'partnerships'])->whereNumber('id')->name('services.moderate'); }); Route::middleware(['auth', 'verified', \App\Http\Middleware\EnsureDocumentManagement::class])->group(function () { Route::get('/management/portal-services', [PortalServicesController::class, 'manage'])->name('services.manage'); Route::get('/management/documents/{id}/download', [PortalServicesController::class, 'downloadForManager'])->whereUuid('id')->name('documents.manage.download'); Route::post('/management/portal-services/upload', [PortalServicesController::class, 'upload'])->middleware('throttle:10,1')->name('services.upload'); Route::post('/management/documents/{id}/malware/retry', [DocumentMalwareController::class, 'retry'])->whereUuid('id')->middleware('throttle:10,1')->name('documents.malware.retry'); }); Route::get('/artigos/{id}', [\App\Http\Controllers\EditorialArticleController::class, 'show'])->whereNumber('id')->name('editorial.show'); Route::get('/carteira', [InvestmentPortfolioController::class, 'index'])->name('portfolio.index'); Route::get('/carteira/{id}', [InvestmentPortfolioController::class, 'show'])->whereUuid('id')->name('portfolio.show'); Route::get('/carteira/{id}/interesse', [InvestmentPortfolioController::class, 'resumeInterest'])->whereUuid('id')->middleware(['auth', \App\Http\Middleware\VerifiedOrSimpleParticipation::class])->name('portfolio.interest'); Route::get('/oportunidades', [InvestmentDiscoveryController::class, 'index'])->name('portal.opportunities'); Route::get('/oportunidades/{slug}', [InvestmentDiscoveryController::class, 'detail'])->name('portal.opportunity'); Route::get('/negocios', [PublicBusinessOpportunityController::class, 'index'])->name('business-marketplace.index'); Route::get('/negocios/{slug}/manifestar-interesse', [PublicBusinessOpportunityController::class, 'interest'])->name('business-marketplace.interest'); Route::get('/negocios/{slug}', [PublicBusinessOpportunityController::class, 'show'])->name('business-marketplace.show'); Route::get('/sectores/mercado-financeiro/fintech', [PublicPortalController::class, 'sector'])->defaults('slug', 'mercado-financeiro/fintech')->name('portal.sector.fintech'); Route::get('/sectores/{slug}', [PublicPortalController::class, 'sector'])->name('portal.sector'); Route::get('/manifestar-interesse/{slug?}', [PublicPortalController::class, 'interest'])->name('portal.interest'); Route::get('/acesso-gestao', fn () => Inertia::render('management-access', [ 'registrationEnabled' => Features::enabled(Features::registration()), ]))->name('management.access'); Route::middleware(['auth', 'verified'])->group(function () { Route::get('/investidor', [InvestorWorkspaceController::class, 'index'])->name('investor.workspace'); Route::post('/investidor/guardar/{id}', [InvestorWorkspaceController::class, 'start'])->whereUuid('id')->name('investor.start'); Route::post('/investidor/{id}/interesse', [InvestorWorkspaceController::class, 'submit'])->whereUuid('id')->middleware('throttle:10,1')->name('investor.submit'); Route::get('dashboard', DashboardController::class)->name('dashboard'); }); require __DIR__.'/settings.php'; require __DIR__.'/investment.php'; require __DIR__.'/land-assistance.php'; Route::middleware(['auth', 'verified', 'can:manage-portal', AiEnabled::class])->group(function () { Route::get('/management/ai', [AiController::class, 'index'])->name('ai.index'); Route::get('/management/ai/runs/{id}', [AiController::class, 'show'])->whereUuid('id')->name('ai.show'); foreach (['api/v1/ai', 'management/ai'] as $prefix) { Route::post($prefix.'/controls/{capability}', [AiController::class, 'control']); Route::prefix($prefix)->middleware('throttle:20,1')->group(function () { Route::post('runs', [AiController::class, 'run']); Route::get('runs/{id}', [AiController::class, 'show'])->whereUuid('id'); Route::post('runs/{id}/feedback', [AiController::class, 'feedback'])->whereUuid('id'); Route::post('runs/{id}/review', [AiController::class, 'review'])->whereUuid('id'); Route::post('sources', [AiController::class, 'source']); Route::post('documents', [AiController::class, 'document']); Route::post('sources/{id}/review', [AiController::class, 'reviewSource'])->whereUuid('id'); }); } }); Route::get('/api/v1/investment/territory-options', [PublicGeographyController::class, 'options'])->middleware('throttle:api'); Route::get('/api/v1/investment/territory-geometries', [InvestmentTerritoryController::class, 'geometries'])->middleware('throttle:api'); // Installation must be reachable before the profile schema/feature is enabled. Route::middleware(['auth', 'verified'])->group(function () { Route::get('/management/profile-install', [PortalProfileInstallationController::class, 'preview']); Route::post('/management/profile-install', [PortalProfileInstallationController::class, 'apply']); Route::post('/management/profile-install/bootstrap', [PortalProfileInstallationController::class, 'bootstrap']); Route::get('/management/profile-install/bootstrap/{id}', [PortalProfileInstallationController::class, 'bootstrapPreview'])->whereUuid('id'); Route::post('/management/profile-install/bootstrap/{id}/confirm', [PortalProfileInstallationController::class, 'confirmBootstrap'])->whereUuid('id'); Route::get('/management/opportunity-resources-install/organization-country', [OpportunityResourceController::class, 'organizationCountryPreview']); Route::post('/management/opportunity-resources-install/organization-country', [OpportunityResourceController::class, 'organizationCountryApply']); }); Route::middleware(['auth', 'verified', EnsurePortalProfileAdministration::class])->group(function () { $profiles = PortalProfileController::class; Route::get('/perfil/promotor', [$profiles, 'requests']); Route::post('/perfil/promotor', [$profiles, 'requestProfile']); Route::get('/perfil/promotor/{id}', [$profiles, 'requestStatus'])->whereUuid('id'); Route::get('/perfis/gestao', [$profiles, 'administration']); Route::get('/perfis/auditoria', [$profiles, 'audit']); Route::post('/perfis/pedidos/{id}/decisao', [$profiles, 'decide'])->whereUuid('id'); Route::get('/perfis/pedidos/{id}/documentos/{documentId}', [$profiles, 'requestDocument'])->whereUuid(['id', 'documentId']); Route::post('/perfis/organizacao-operadora', [$profiles, 'registerOperatorOrganization']); Route::post('/perfis/atribuicoes', [$profiles, 'grant']); Route::post('/perfis/atribuicoes/{id}/revogar', [$profiles, 'revoke'])->whereUuid('id'); Route::post('/perfis/substituicoes', [$profiles, 'replacement']); Route::post('/perfis/seguranca/{id}/aprovar', [$profiles, 'approveSecurity'])->whereUuid('id'); Route::post('/perfis/substituicoes/{id}/aplicar', [$profiles, 'replace'])->whereUuid('id'); Route::post('/perfis/elevacoes', [$profiles, 'elevation']); }); Route::middleware(['auth', 'verified', EnsurePortalProfiles::class])->group(function () { $profiles = PortalProfileController::class; Route::get('/minhas-oportunidades', [$profiles, 'opportunities']); Route::get('/minhas-oportunidades/lotes/agronegocio', [\App\Http\Controllers\CorridorAgribusinessController::class, 'show']); Route::post('/minhas-oportunidades/lotes/agronegocio/cadastrar', [\App\Http\Controllers\CorridorAgribusinessController::class, 'register']); Route::post('/minhas-oportunidades/lotes/agronegocio/previa', [\App\Http\Controllers\CorridorAgribusinessController::class, 'preview']); Route::post('/minhas-oportunidades/lotes/agronegocio/divulgar', [\App\Http\Controllers\CorridorAgribusinessController::class, 'disclose']); Route::get('/minhas-oportunidades/territory-options', [InvestmentTerritoryController::class, 'options']); Route::get('/minhas-oportunidades/territory-geometries', [InvestmentTerritoryController::class, 'geometries']); Route::get('/minhas-oportunidades/create', [$profiles, 'edit']); Route::get('/minhas-oportunidades/{id}/edit', [$profiles, 'edit'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/view', [$profiles, 'edit'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/response', [OpportunityManagementController::class, 'canonicalResponse'])->whereNumber('id'); Route::post('/minhas-oportunidades/drafts', [OpportunityManagementController::class, 'save']); Route::put('/minhas-oportunidades/{id}/draft', [OpportunityManagementController::class, 'save'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/classification', [OpportunityClassificationController::class, 'index'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/classification/review', [OpportunityClassificationController::class, 'review'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/workflow', [$profiles, 'workflow'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/divulgacao', [\App\Http\Controllers\OpportunityPromotionController::class, 'show'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/divulgacao/previa', [\App\Http\Controllers\OpportunityPromotionController::class, 'preview'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/divulgacao/confirmar', [\App\Http\Controllers\OpportunityPromotionController::class, 'confirm'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/contacts', [$profiles, 'contact'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/resources', [OpportunityResourceController::class, 'index'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/library-support', [OpportunityResourceController::class, 'reuseLibrary'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/resources/{kind}', [OpportunityResourceController::class, 'save'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/resources/{kind}/{resourceId}', [OpportunityResourceController::class, 'save'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/resources/{kind}/{resourceId}/lifecycle', [OpportunityResourceController::class, 'lifecycle'])->whereNumber('id'); Route::post('/minhas-oportunidades/{id}/resources/images/{resourceId}/prepare', [OpportunityResourceController::class, 'prepareImage'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/resources/{kind}/{resourceId}/download', [OpportunityResourceController::class, 'download'])->whereNumber('id'); Route::get('/minhas-oportunidades/{id}/resources/images/{resourceId}/preview/{documentId}', [OpportunityResourceController::class, 'previewImage'])->whereNumber('id')->middleware('signed')->name('promoter.opportunity-image-preview'); }); Route::middleware(['auth', 'verified', \App\Http\Middleware\EnsureScopedPortalAdministration::class])->prefix('management')->name('management.')->group(function () { Route::get('economic-references/lot-01', [EconomicReferenceController::class, 'preview']); Route::post('economic-references/lot-01/{operation}', [EconomicReferenceController::class, 'apply'])->whereIn('operation', ['schema', 'import', 'publish', 'withdraw']); Route::get('territory-geometry-import', [TerritoryGeometryImportController::class, 'preview']); Route::post('territory-geometry-import', [TerritoryGeometryImportController::class, 'apply'])->middleware(RequireZoneMfa::class); Route::post('territory-geometry-import/{batch}/reverse', [TerritoryGeometryImportController::class, 'reverse'])->whereUuid('batch')->middleware(RequireZoneMfa::class); Route::get('opportunity-management-install', [OpportunityManagementController::class, 'installation']); Route::post('opportunity-management-install', [OpportunityManagementController::class, 'applyInstallation']); Route::get('opportunity-resources-install', [OpportunityResourceController::class, 'installation']); Route::post('opportunity-resources-install', [OpportunityResourceController::class, 'applyInstallation']); Route::get('opportunities/{id}/resources', [OpportunityResourceController::class, 'index'])->whereNumber('id'); Route::post('opportunities/{id}/resources/images/{resourceId}/prepare', [OpportunityResourceController::class, 'prepareImage'])->whereNumber('id'); Route::get('opportunities/{id}/resources/images/{resourceId}/preview/{documentId}', [OpportunityResourceController::class, 'previewImage'])->whereNumber('id')->middleware('signed')->name('opportunity-image-preview'); Route::post('opportunities/{id}/library-support', [OpportunityResourceController::class, 'reuseLibrary'])->whereNumber('id'); Route::post('opportunities/{id}/resources/{kind}', [OpportunityResourceController::class, 'save'])->whereNumber('id'); Route::post('opportunities/{id}/resources/{kind}/{resourceId}', [OpportunityResourceController::class, 'save'])->whereNumber('id'); Route::post('opportunities/{id}/resources/{kind}/{resourceId}/lifecycle', [OpportunityResourceController::class, 'lifecycle'])->whereNumber('id'); Route::get('opportunities/{id}/resources/{kind}/{resourceId}/download', [OpportunityResourceController::class, 'download'])->whereNumber('id'); Route::get('opportunities', [OpportunityManagementController::class, 'index']); Route::get('opportunities/create', [OpportunityManagementController::class, 'edit']); Route::get('opportunities/{id}/edit', [OpportunityManagementController::class, 'edit'])->whereNumber('id'); Route::get('opportunities/{id}/view', [OpportunityManagementController::class, 'edit'])->whereNumber('id'); Route::post('opportunities/drafts', [OpportunityManagementController::class, 'save']); Route::put('opportunities/{id}/draft', [OpportunityManagementController::class, 'save'])->whereNumber('id'); Route::post('opportunities/{id}/lifecycle', [OpportunityManagementController::class, 'lifecycle'])->whereNumber('id'); Route::get('opportunities/{id}/coordinates', [InvestmentCoordinatesController::class, 'show'])->whereNumber('id'); Route::post('opportunities/{id}/coordinates', [InvestmentCoordinatesController::class, 'save'])->whereNumber('id'); Route::get('territory-options', [InvestmentTerritoryController::class, 'options'])->middleware('throttle:api'); Route::get('territory-geometries', [InvestmentTerritoryController::class, 'geometries'])->middleware('throttle:api'); Route::get('territory-subjects', [InvestmentTerritoryController::class, 'subjects'])->middleware('throttle:api'); Route::get('territory-associations', fn () => Inertia::render('management/territory-associations')); Route::get('territories/{kind}/{id}', [InvestmentTerritoryController::class, 'show']); Route::post('territories/{kind}/{id}', [InvestmentTerritoryController::class, 'save']); $controller = PortalManagementController::class; Route::prefix('education')->name('education.')->middleware(EducationEnabled::class)->group(function () { Route::get('/', [EducationController::class, 'index'])->name('index'); Route::post('catalog/{kind}', [EducationController::class, 'catalog'])->whereIn('kind', ['skills', 'occupations', 'providers', 'courses'])->name('catalog'); Route::post('{kind}', [EducationController::class, 'store'])->whereIn('kind', ['demands', 'capacities'])->name('store'); Route::post('{kind}/{id}/review', [EducationController::class, 'review'])->whereIn('kind', ['demands', 'capacities'])->whereUuid('id')->name('review'); Route::get('demands/{id}/analysis', [EducationController::class, 'analysis'])->whereUuid('id')->name('analysis'); Route::post('demands/{id}/investment', [EducationInvestmentController::class, 'store'])->whereUuid('id')->name('investment'); }); Route::get('portfolio', [InvestmentPortfolioController::class, 'index'])->name('portfolio.index'); Route::get('relationship-repair', [InvestmentRelationshipRepairController::class, 'preview'])->name('relationship-repair.preview'); Route::get('opportunity-origin', [OpportunityOriginReviewController::class, 'index'])->name('opportunity-origin.index'); Route::post('opportunity-origin/preview', [OpportunityOriginReviewController::class, 'preview'])->name('opportunity-origin.preview'); Route::post('opportunity-origin/apply', [OpportunityOriginReviewController::class, 'apply'])->name('opportunity-origin.apply'); Route::post('relationship-repair', [InvestmentRelationshipRepairController::class, 'apply'])->name('relationship-repair.apply'); Route::get('portfolio/{id}', [InvestmentPortfolioController::class, 'show'])->whereUuid('id')->name('portfolio.show'); Route::put('portfolio/{dossier}', [InvestmentPortfolioController::class, 'save'])->name('portfolio.save'); Route::post('portfolio/{dossier}/publish', [InvestmentPortfolioController::class, 'publish'])->name('portfolio.publish'); Route::post('clusters/{cluster}/chain-links', [ClusterValueChainController::class, 'link'])->name('clusters.chain-links.store'); Route::delete('clusters/{cluster}/chain-links/{link}', [ClusterValueChainController::class, 'removeLink'])->name('clusters.chain-links.delete'); Route::post('clusters/{cluster}/gaps', [ClusterValueChainController::class, 'gap'])->name('clusters.gaps.store'); Route::put('clusters/{cluster}/gaps/{gap}', [ClusterValueChainController::class, 'gap'])->name('clusters.gaps.update'); Route::get('{structure}', [InvestmentStructureController::class, 'index'])->whereIn('structure', ['projects', 'clusters', 'corridors'])->name('structures.index'); Route::get('{structure}/create', [InvestmentStructureController::class, 'edit'])->whereIn('structure', ['projects', 'clusters', 'corridors'])->name('structures.create'); Route::get('{structure}/{id}/edit', [InvestmentStructureController::class, 'edit'])->whereIn('structure', ['projects', 'clusters', 'corridors'])->whereUuid('id')->name('structures.edit'); Route::post('{structure}', [InvestmentStructureController::class, 'save'])->whereIn('structure', ['projects', 'clusters', 'corridors'])->name('structures.store'); Route::put('{structure}/{id}', [InvestmentStructureController::class, 'save'])->whereIn('structure', ['projects', 'clusters', 'corridors'])->whereUuid('id')->name('structures.update'); Route::post('clusters/{cluster}/projects', [InvestmentStructureController::class, 'linkProject'])->name('clusters.projects'); Route::post('structure-relations/{kind}', [InvestmentStructureRelationController::class, 'store'])->whereIn('kind', ['cluster-project', 'corridor-project', 'corridor-cluster'])->name('structure-relations.store'); Route::post('structure-relations/{kind}/{id}/{action}', [InvestmentStructureRelationController::class, 'review'])->whereIn('kind', ['cluster-project', 'corridor-project', 'corridor-cluster'])->whereUuid('id')->whereIn('action', ['validate', 'revoke'])->name('structure-relations.review'); Route::post('clusters/{cluster}/chains', [InvestmentStructureController::class, 'saveChain'])->name('clusters.chains.store'); Route::put('clusters/{cluster}/chains/{chain}', [InvestmentStructureController::class, 'saveChain'])->name('clusters.chains.update'); Route::get('crm/investors', [CrmController::class, 'investors'])->name('crm.investors'); Route::get('crm/investors/{investor}', [CrmController::class, 'investor'])->name('crm.investor'); Route::patch('crm/investors/{investor}', [CrmController::class, 'saveInvestor'])->name('crm.investor-update'); Route::patch('crm/investors/{investor}/contacts/{contact}', [CrmController::class, 'saveContact'])->name('crm.contact-update'); Route::get('crm/leads', [CrmController::class, 'index'])->name('crm.leads'); Route::get('crm/convert/{interest}', [CrmController::class, 'prepare'])->name('crm.prepare'); Route::post('crm/convert/{interest}', [CrmController::class, 'convert'])->name('crm.convert'); Route::get('crm/leads/{lead}', [CrmController::class, 'show'])->name('crm.lead'); Route::patch('crm/leads/{lead}', [CrmController::class, 'update'])->name('crm.update'); Route::post('crm/leads/{lead}/tasks', [CrmController::class, 'task'])->name('crm.tasks'); Route::patch('crm/leads/{lead}/tasks/{task}', [CrmController::class, 'updateTask'])->name('crm.task-update'); Route::get('history', [$controller, 'history'])->name('history'); Route::get('interests/atribuicoes', [$controller, 'interestAssignments'])->name('interests.assignments'); Route::post('interests/{interest}/responsavel', [$controller, 'assignInterest'])->name('interests.assign'); Route::get('interests', [$controller, 'interests'])->name('interests'); Route::get('interests/{interest}', [$controller, 'interest'])->name('interest'); Route::patch('interests/{interest}', [$controller, 'review'])->name('review'); Route::patch('interests/{interest}/consent/contact', [$controller, 'withdrawContactConsent'])->name('consent.withdraw-contact'); Route::patch('interests/{interest}/consent/proponent', [$controller, 'withdrawProponentSharingConsent'])->name('consent.withdraw-proponent'); Route::get('{resource}', [$controller, 'catalog'])->whereIn('resource', ['sectors', 'opportunities'])->name('catalog'); Route::get('{resource}/create', [$controller, 'edit'])->whereIn('resource', ['sectors', 'opportunities'])->name('create'); Route::get('{resource}/{id}/edit', [$controller, 'edit'])->whereIn('resource', ['sectors', 'opportunities'])->whereNumber('id')->name('edit'); Route::post('{resource}', [$controller, 'save'])->whereIn('resource', ['sectors', 'opportunities'])->name('store'); Route::put('{resource}/{id}', [$controller, 'save'])->whereIn('resource', ['sectors', 'opportunities'])->whereNumber('id')->name('update'); }); Route::get('/porque-investir', fn () => Inertia::render('portal/why-invest'))->name('portal.why-invest'); require __DIR__.'/investor-path.php'; // Serialize management requests for the same session so background dropdown/coordinate // reads cannot overwrite validation feedback from a concurrent form submission. foreach (Route::getRoutes()->getRoutes() as $managementRoute) { if (str_starts_with($managementRoute->uri(), 'management/')) { $managementRoute->block(10, 10); } } // Existing installation permission and session MFA; no schema installation. Route::middleware(['auth', 'verified'])->group(function () { Route::get('/management/sector-reconciliation', [\App\Http\Controllers\SectorReconciliationController::class, 'preview']); Route::post('/management/sector-reconciliation', [\App\Http\Controllers\SectorReconciliationController::class, 'apply']); }); // Tempo, 19/10/2026: simple participation uses the existing account, without MFA enrollment. Route::get('/participar/entrar', function (\Illuminate\Http\Request $request) { $return = $request->query('return', '/manifestar-interesse'); abort_unless(is_string($return) && str_starts_with($return, '/') && !str_starts_with($return, '//') && !str_contains($return, '\\'), 422); $request->session()->put('url.intended', $return); return redirect($request->user() ? $return : '/register'); });