oportunidades 4
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-10 07:03:59 +02:00
parent e662230df7
commit 6ddafc95ba
179 changed files with 22750 additions and 933 deletions
@@ -16,6 +16,20 @@ class OpportunityResourceInstallation
$files = [...$files, app_path('Services/CountryCatalogue.php'), app_path('Services/DeclaredOriginStatistics.php'), app_path('Services/VirtualDesk.php'), app_path('Http/Controllers/CrmController.php'), app_path('Http/Controllers/InvestmentWorkspaceController.php'), app_path('Http/Controllers/InvestmentSubmissionController.php'), app_path('Http/Controllers/InvestmentDiscoveryController.php'), app_path('Http/Controllers/VirtualDeskController.php'), resource_path('data/iso3166.tab'), resource_path('js/components/country-select.tsx'), resource_path('js/components/investment-territory.tsx'), resource_path('js/pages/investment/profile.tsx'), resource_path('js/pages/investment/submission.tsx'), resource_path('js/pages/investment/catalogue.tsx'), resource_path('js/pages/desk/request.tsx'), resource_path('js/pages/desk/panel.tsx'), resource_path('js/pages/crm/leads.tsx')];
$files = [...$files, app_path('Http/Controllers/PortalServicesController.php'), app_path('Http/Controllers/PublicPortalController.php'), app_path('Http/Controllers/InvestorWorkspaceController.php'), app_path('Http/Controllers/PublicBusinessOpportunityController.php'), app_path('Http/Controllers/Api/V1/InterestRequestController.php'), app_path('Http/Requests/StoreInterestRequestRequest.php'), resource_path('js/pages/portal/services.tsx'), resource_path('js/pages/PortalInvestidor.tsx'), resource_path('js/pages/portfolio/workspace.tsx'), resource_path('js/pages/investment/business-interest.tsx'), resource_path('js/lib/portal-api.ts')];
$files = [...$files, app_path('Http/Controllers/PortalManagementController.php'), resource_path('js/pages/management/interest.tsx')];
$files = [...$files, app_path('Http/Controllers/Api/V1/ReferenceCatalogController.php'), base_path('routes/api.php'), resource_path('js/components/simulation-form.tsx')];
$files[] = app_path('Http/Requests/StoreSimulationFormDraftRequest.php');
$files = [...$files, app_path('Services/TerritoryGeometry.php'), app_path('Http/Controllers/InvestmentTerritoryController.php'), resource_path('js/components/territory-geometry-preview.tsx'), resource_path('js/components/interactive-investment-map.tsx'), resource_path('js/components/investment-map-panel.tsx')];
$files = [...$files, app_path('Services/OpportunityManagement.php'), app_path('Services/OpportunityMaturity.php'), app_path('Services/BusinessFormSchema.php'), app_path('Http/Controllers/ExistingBusinessController.php'), app_path('Http/Controllers/LandAssistanceController.php'), app_path('Http/Requests/StoreLandAssistanceCaseRequest.php'), resource_path('js/pages/investment/business-wizard.tsx'), resource_path('js/pages/investment/businesses.tsx'), resource_path('js/pages/investment/business.tsx'), resource_path('js/pages/land-assistance/form.tsx'), resource_path('js/pages/management/interests.tsx')];
$files = [...$files, app_path('Services/ExistingBusinessIntake.php'), resource_path('js/pages/land-assistance/case.tsx')];
$files = [...$files, resource_path('js/pages/investment/detail.tsx'), resource_path('js/pages/partnerships/catalogue.tsx')];
$files = [...$files, app_path('Services/VerifiedDocumentBinary.php'), app_path('Services/TerritoryGeometryImport.php'), app_path('Http/Controllers/TerritoryGeometryImportController.php'), config_path('geometry-import.php'), resource_path('js/pages/management/territory-geometry-import.tsx'),
base_path('bootstrap/app.php'), app_path('Providers/FortifyServiceProvider.php'), config_path('fortify.php'),
resource_path('js/pages/auth/login.tsx'), resource_path('js/pages/auth/two-factor-challenge.tsx')];
return hash('sha256', json_encode(array_map(fn ($file) => hash_file('sha256', $file), $files), JSON_THROW_ON_ERROR));
}
@@ -29,7 +43,7 @@ class OpportunityResourceInstallation
$ready = ($proof['restore_verified'] ?? false) && ($proof['compatibility_verified'] ?? false) && ($proof['reversal_verified'] ?? false) && ($proof['qa_passed'] ?? false) && ($proof['code_hash'] ?? '') === $code && ($proof['target']['database'] ?? '') === $identity->database && (int) ($proof['target']['port'] ?? 0) === (int) $identity->port && strtotime($proof['verified_at'] ?? '') >= time() - 86400 && is_file($proof['dump_path'] ?? '') && hash_file('sha256', $proof['dump_path']) === ($proof['sha256'] ?? null);
$installed = app(OpportunityResources::class)->installed();
return ['installed' => $installed, 'ready' => $ready, 'target' => $identity, 'code_hash' => $code, 'hash' => hash('sha256', json_encode([$identity, $code, $ready, $installed], JSON_THROW_ON_ERROR)), 'migration' => self::MIGRATION, 'backupDate' => $proof['verified_at'] ?? null, 'changes' => ['Recursos privados de preparação ligados às oportunidades existentes, documents e geo_locations; nenhum dado existente alterado.', 'Originais cifrados; scan pendente bloqueia acesso aos binários, não preparação de metadados/localizações.', 'Versões, exclusão lógica e restauro com auditoria; nenhuma publicação automática.', 'Pendentes: ClamD real, derivadas seguras/revisão/publicação e compatibilidade com limites oficiais onde ausentes.'], 'rollback' => 'Reversão apenas com tabelas vazias e sem documentos cifrados; após utilização, preservar e reconciliar versões antes de uma ação autorizada.'];
return ['installed' => $installed, 'ready' => $ready, 'target' => $identity, 'code_hash' => $code, 'hash' => hash('sha256', json_encode([$identity, $code, $ready, $installed], JSON_THROW_ON_ERROR)), 'migration' => self::MIGRATION, 'backupDate' => $proof['verified_at'] ?? null, 'changes' => ['Recursos privados de preparação ligados às oportunidades existentes, documents e geo_locations; nenhum dado existente alterado.', 'Originais cifrados; scan pendente bloqueia acesso aos binários, não preparação de metadados/localizações.', 'Versões, exclusão lógica e restauro com auditoria; nenhuma publicação automática.', 'Scan de cada original/derivada, disponibilidade GD/WebP, revisão de divulgação e compatibilidade territorial têm critérios independentes; a instalação não os confirma. Consultar os estados por ficheiro e as evidências QA da revisão.'], 'rollback' => 'Reversão apenas com tabelas vazias e sem documentos cifrados; após utilização, preservar e reconciliar versões antes de uma ação autorizada.'];
}
public function apply(User $actor, string $hash): void