From 37854d02318bf9ffd2736df8718d468392c3a20a Mon Sep 17 00:00:00 2001 From: nala Date: Tue, 10 Nov 2026 18:00:06 +0200 Subject: [PATCH] Complete APIEX documentary preparation and private contextual SWOT in existing dossiers --- .../InvestmentPreparationController.php | 50 + .../InvestmentPreparationWorkspace.php | 489 ++++++ app/Services/InvestorPath.php | 16 +- .../unification/traceability-and-manual.md | 18 + docs/investmoz/v2/auditoria-portal/backlog.md | 12 + .../v2/auditoria-portal/matriz-requisitos.csv | 18 +- .../visao-consolidada-modulos.md | 12 + resources/js/lib/investment-preparation.ts | 143 ++ resources/js/lib/profile-json.ts | 2 + .../js/pages/investor-path/preparation.tsx | 1417 +++++++++++++++++ resources/js/pages/investor-path/show.tsx | 78 +- .../investments/preparation-index.blade.php | 20 + routes/investor-path.php | 6 + .../InvestmentPreparationWorkspaceTest.php | 302 ++++ .../frontend/investment-preparation.test.mjs | 354 ++++ tools/investment-preparation-proof.mjs | 18 + tools/investment-preparation-qa.php | 51 + 17 files changed, 2982 insertions(+), 24 deletions(-) create mode 100644 app/Http/Controllers/InvestmentPreparationController.php create mode 100644 app/Services/InvestmentPreparationWorkspace.php create mode 100644 resources/js/lib/investment-preparation.ts create mode 100644 resources/js/pages/investor-path/preparation.tsx create mode 100644 resources/views/investments/preparation-index.blade.php create mode 100644 tests/Feature/InvestmentPreparationWorkspaceTest.php create mode 100644 tests/frontend/investment-preparation.test.mjs create mode 100644 tools/investment-preparation-proof.mjs create mode 100644 tools/investment-preparation-qa.php diff --git a/app/Http/Controllers/InvestmentPreparationController.php b/app/Http/Controllers/InvestmentPreparationController.php new file mode 100644 index 00000000..74602a78 --- /dev/null +++ b/app/Http/Controllers/InvestmentPreparationController.php @@ -0,0 +1,50 @@ +validate(['opportunity' => 'nullable|string|max:150', 'history_scope' => 'nullable|in:dossier', 'history_before' => 'nullable|integer|min:1']); + $data = $workspace->view($request->user(), $id, $request->query('opportunity'), $request->filled('history_before') ? $request->integer('history_before') : null, $request->query('history_scope') === 'dossier'); + + return $request->expectsJson() ? response()->json($data) : Inertia::render('investor-path/preparation', ['workspace' => $data]); + } + + public function change(Request $request, string $id, InvestmentPreparationWorkspace $workspace): JsonResponse + { + return response()->json($workspace->change($request->user(), $id, $request->all())); + } + + public function preview(Request $request, string $id, InvestmentPreparationWorkspace $workspace): \Illuminate\Http\Response + { + $request->validate(['opportunity' => 'nullable|string|max:150', 'history_scope' => 'nullable|in:dossier']); + $data = $workspace->view($request->user(), $id, $request->query('opportunity'), null, $request->query('history_scope') === 'dossier'); + + return response()->view('investments.preparation-index', ['workspace' => $data, 'manifest' => null])->header('Content-Security-Policy', "sandbox; default-src 'none'; style-src 'unsafe-inline'")->header('X-Content-Type-Options', 'nosniff'); + } + + public function download(Request $request, string $id, string $exportId, InvestmentPreparationWorkspace $workspace): \Illuminate\Http\Response + { + $request->validate(['opportunity' => 'nullable|string|max:150', 'history_scope' => 'nullable|in:dossier']); + $bundle = $workspace->bundle($request->user(), $id, $request->query('opportunity'), $exportId, $request->query('history_scope') === 'dossier'); + + return response($bundle['bytes'], 200, ['Content-Type' => 'application/zip', 'Content-Disposition' => 'attachment; filename="preparacao-apiex-'.$id.'.zip"', 'X-Export-Id' => $exportId, 'X-Content-Type-Options' => 'nosniff']); + } + + public function export(Request $request, string $id, InvestmentPreparationWorkspace $workspace): \Illuminate\Http\Response + { + $body = [...$request->all(), 'action' => 'apiex_export']; + $state = $workspace->change($request->user(), $id, $body); + $bundle = $workspace->bundle($request->user(), $id, $state['opportunity'], $body['operation_key']); + + return response($bundle['bytes'], 200, ['Content-Type' => 'application/zip', 'Content-Disposition' => 'attachment; filename="preparacao-apiex-'.$id.'.zip"', 'X-Export-Id' => $bundle['export_id'], 'X-Content-Type-Options' => 'nosniff']); + } +} diff --git a/app/Services/InvestmentPreparationWorkspace.php b/app/Services/InvestmentPreparationWorkspace.php new file mode 100644 index 00000000..8aadbfd9 --- /dev/null +++ b/app/Services/InvestmentPreparationWorkspace.php @@ -0,0 +1,489 @@ +> */ + private function rows(mixed $value): array + { + if (! is_array($value)) { + throw new \LogicException('Dossier list is not recoverable; original retained.'); + } + $rows = []; + foreach ($value as $row) { + if (! is_array($row)) { + throw new \LogicException('Dossier row is not recoverable; original retained.'); + } $rows[] = $row; + } + + return $rows; + } + + /** @param array $data */ + private function hash(array $data): string + { + return hash('sha256', json_encode(Arr::sortRecursive($data), JSON_THROW_ON_ERROR)); + } + + private function events(string $id, ?string $opportunity): Builder + { + return DB::table('audit_events')->where('source_system', self::SOURCE)->where('entity_type', 'desk_cases')->where('entity_id', $id) + ->where('after_data->scope', $opportunity ?? 'dossier'); + } + + /** @return array */ + private function decode(?\stdClass $event): array + { + return $event ? json_decode(Crypt::decryptString(json_decode($event->after_data, true, 512, JSON_THROW_ON_ERROR)['snapshot']), true, 512, JSON_THROW_ON_ERROR) + : ['version' => 0, 'apiex' => ['additional_documents' => [], 'note' => '', 'review' => null, 'exports' => [], 'external' => []], + 'swot' => ['object_key' => '', 'scope' => '', 'rows' => [], 'source_fingerprint' => '', 'review' => null, 'actions' => []]]; + } + + /** @return array */ + private function current(string $id, ?string $opportunity): array + { + return $this->decode($this->events($id, $opportunity)->orderByRaw("(after_data->>'version')::integer DESC")->first()); + } + + /** @return array{0: \stdClass, 1: array, 2: ?string, 3: array, 4: bool} */ + private function context(User $actor, string $id, ?string $opportunity, bool $initialScope = false): array + { + abort_unless(app(InvestorPath::class)->available() && app(PrivateInvestmentPreparation::class)->available(), 404); + $case = $this->desk->case($actor, $id); + abort_unless($this->desk->owns($actor, $case, false) || $actor->can('manage-portal'), 403); + $context = app(InvestorContext::class)->state($case); + $scope = app(InvestmentConsumerScope::class); + $historical = false; + abort_if($initialScope && ! $this->events($id, null)->exists(), 404); + $choices = array_column(array_column($context['opportunity_choices'] ?? [], 'opportunity'), 'key'); + if ((($opportunity && ! in_array($opportunity, $choices, true)) || ($initialScope && $choices)) && $this->events($id, $opportunity)->exists()) { + $saved = $this->current($id, $opportunity); + $last = $saved['apiex']['exports'] ? $saved['apiex']['exports'][array_key_last($saved['apiex']['exports'])] : null; + $oldContext = $saved['context_snapshot'] ?? $last['prepared']['context'] ?? $saved['swot']['sources_snapshot']['context'] ?? null; + abort_unless(is_array($oldContext), 409, 'Contexto histórico conservado; snapshot de consulta indisponível.'); + $context = $oldContext; + $historical = true; + } else { + $opportunity = $scope->key($context, $opportunity, true); + $context = $scope->context($context, $opportunity); + } + + $documents = app(InvestorContext::class)->preparationDocuments($id); + // Reuse request-level document authorization, including for a dossier team member. + $documents = array_values(array_filter($documents, function ($document) use ($actor, $id) { + $link = DB::table('desk_documents')->where('id', $document['id'])->where('case_id', $id)->first(); + if ($link?->request_id) { + try { + $this->desk->request($actor, $link->request_id); + } catch (HttpException $e) { + if (in_array($e->getStatusCode(), [403, 404], true)) { + return false; + } throw $e; + } + } + + return true; + })); + foreach ($documents as &$document) { + $record = DB::table('documents')->where('id', $document['document_id'])->first(); + $document['available'] = $record && $record->status === 'active' && $record->malware_scan_status === 'clean' + && hash_equals(trim($record->sha256), trim((string) $record->malware_scanned_sha256)); + } + unset($document); + + $unique = []; + foreach ($documents as $document) { + $unique[$document['document_id']] = $document; + } + + return [$case, $context, $opportunity, array_values($unique), $historical]; + } + + /** @param array $context + * @return array */ + private function sources(User $actor, \stdClass $case, array $context, string $object): array + { + $objects = [['key' => 'investment:'.$case->id, 'label' => $case->title, 'kind' => 'investment']]; + $evidence = []; + $refs = array_values($context['selection'] ?? []); + foreach ($context['opportunity_choices'] ?? [] as $choice) { + $refs[] = $choice['opportunity']; + } + foreach ($refs as $ref) { + if (! is_array($ref) || empty($ref['key'])) { + continue; + } + try { + $live = app(InvestorContext::class)->reference($ref['key']); + } catch (ModelNotFoundException|HttpException $e) { + $live = ['key' => $ref['key'], 'unavailable' => true]; + } + $evidence[$ref['key']] = ['key' => $ref['key'], 'label' => $ref['title'] ?? $ref['key'], 'consulted' => $ref, 'current' => $live]; + if (in_array($ref['kind'] ?? '', ['territory', 'sector'], true)) { + $objects[] = ['key' => $ref['key'], 'label' => $ref['title'], 'kind' => $ref['kind']]; + } + if (($ref['kind'] ?? '') === 'portfolio') { + $portfolio = InvestmentPortfolioController::visible()->whereKey($ref['id'])->first(); + if ($portfolio?->cluster_id) { + $cluster = EconomicCluster::find($portfolio->cluster_id); + if ($cluster) { + $objects[] = ['key' => 'cluster:'.$cluster->id, 'label' => $cluster->getAttribute('name'), 'kind' => 'cluster']; + } + } + } + } + // Sector/territory may have been deliberately entered rather than selected as a source. + foreach ([['sector', 'sector_id'], ['territory', 'province_id'], ['territory', 'district_id'], ['territory', 'admin_post_id'], ['territory', 'locality_id']] as [$kind, $field]) { + if (! empty($context['fields'][$field])) { + $key = $kind.':'.$context['fields'][$field]; + try { + $ref = app(InvestorContext::class)->reference($key); + $objects[] = ['key' => $key, 'label' => $ref['title'], 'kind' => $kind]; + $evidence[$key] = ['key' => $key, 'label' => $ref['title'], 'consulted' => $ref, 'current' => $ref]; + } catch (ModelNotFoundException|HttpException $e) { /* Keep the declared context; do not invent evidence. */ + } + } + } + // A manually chosen cluster must already be a public, visible portfolio association. + if (str_starts_with($object, 'cluster:')) { + $clusterId = substr($object, 8); + $visible = InvestmentPortfolioController::visible()->where('cluster_id', $clusterId)->exists(); + $cluster = $visible ? EconomicCluster::find($clusterId) : null; + $objects[] = ['key' => $object, 'label' => $cluster ? $cluster->getAttribute('name') : 'Cluster da análise guardada — fonte actual indisponível', 'kind' => 'cluster']; + } + foreach ($objects as $item) { + if ($item['kind'] === 'cluster') { + $evidence[$item['key']] = ['key' => $item['key'], 'label' => 'Competitividade — '.$item['label'], + 'current' => InvestmentPortfolioController::visible()->where('cluster_id', substr($item['key'], 8))->exists() ? app(ClusterCompetitiveness::class)->publicData(substr($item['key'], 8)) : null, 'notice' => 'Versão pública aprovada; ausência de análise não prova ausência de oferta/concorrência.']; + } + } + + $unique = []; + foreach ($objects as $item) { + $unique[$item['key']] = $item; + } + + return [array_values($unique), array_values($evidence)]; + } + + /** @return array */ + public function view(User $actor, string $id, ?string $opportunity = null, ?int $historyBefore = null, bool $initialScope = false): array + { + [$case, $context, $opportunity, $documents, $historical] = $this->context($actor, $id, $opportunity, $initialScope); + $state = $this->current($id, $opportunity); + [$objects, $sources] = $this->sources($actor, $case, $context, $state['swot']['object_key']); + $payload = $this->desk->decode($case->payload); + $reused = ['investor' => Arr::only($payload, ['name', 'email']), 'profile' => Arr::only($payload['profile'] ?? [], ['phone', 'nuit', 'address', 'country_code', 'nationality', 'residence_country_code']), 'company' => Arr::only($payload['company'] ?? [], ['id', 'name', 'nuit', 'registration', 'address', 'type']), 'company_version' => $payload['company_version'] ?? null, 'notice' => 'Valores autorizados conservados no dossier; não foram substituídos por dados recentes de outra origem.']; + if ($historical && isset($state['reused_snapshot'])) { + $reused = $state['reused_snapshot']; + } + foreach ($documents as $document) { + $sources[] = ['key' => 'document:'.$document['document_id'], 'label' => $document['file_name'], 'current' => $document, 'notice' => 'Documento privado do dossier; disponibilidade não certifica o conteúdo.']; + } + $assessment = app(PrivateInvestmentPreparation::class)->assess($context, $documents); + $issues = $assessment['missing_labels']; + if (! $assessment['enabled'] || ! $assessment['period_covered'] || ! $assessment['scope_covered'] || $assessment['mode'] === 'indeterminate') { + $issues[] = 'Completar o enquadramento da preparação existente.'; + } + foreach ($assessment['requirements'] as &$requirement) { + $document = collect($this->rows($documents))->firstWhere('document_id', $requirement['document_id']); + $requirement['available'] = $document['available'] ?? false; + if ($requirement['state'] === 'indeterminate' || ($requirement['required'] && ! $requirement['available'])) { + $issues[] = $requirement['label']; + } + } + unset($requirement); + $selected = array_values(array_unique([...collect($this->rows($assessment['requirements']))->where('required', true)->pluck('document_id')->filter()->all(), ...$state['apiex']['additional_documents']])); + foreach ($selected as $doc) { + if (! (collect($this->rows($documents))->firstWhere('document_id', $doc)['available'] ?? false)) { + $issues[] = 'Anexo indisponível: '.$doc; + } + } + $documentary = array_values(array_filter($documents, fn ($d) => in_array($d['document_id'], $selected, true))); + $fingerprint = $this->hash(['context' => $context, 'reused' => $reused, 'assessment' => $assessment, 'documents' => $documentary, 'note' => $state['apiex']['note']]); + $swotFingerprint = $this->hash($this->sourceSnapshot($context, $reused, $sources, $state['swot']['object_key'], $state['swot']['rows'])); + $external = collect($this->rows($state['apiex']['external'])); + $apiState = $external->contains('kind', 'decision') ? 'decision_received' : ($external->contains('kind', 'delivery') ? 'delivery_recorded' : (! $issues && ($state['apiex']['review']['fingerprint'] ?? null) === $fingerprint ? 'ready' : 'preparing')); + $query = $opportunity ? '?opportunity='.urlencode($opportunity) : ''; + $editQuery = $historical ? '' : $query; + + $savedScopes = DB::table('audit_events')->where('source_system', self::SOURCE)->where('entity_type', 'desk_cases')->where('entity_id', $id)->selectRaw("DISTINCT after_data->>'scope' as scope")->get()->map(fn ($row) => ['key' => $row->scope, 'label' => $row->scope === 'dossier' ? 'Contexto inicial do dossier' : $row->scope, 'href' => '/investimentos/'.$id.'/preparacao?'.($row->scope === 'dossier' ? 'history_scope=dossier' : 'opportunity='.urlencode($row->scope))])->all(); + $historyRows = $this->events($id, $opportunity)->when($historyBefore !== null, fn ($q) => $q->whereRaw("(after_data->>'version')::integer < ?", [$historyBefore]))->orderByRaw("(after_data->>'version')::integer DESC")->limit(26)->get(); + $history = $historyRows->take(25)->map(fn ($e) => ['version' => json_decode($e->after_data, true)['version'], 'action' => $e->action, 'at' => $e->occurred_at, 'actor' => $e->actor_user_id, 'operation_key' => $e->correlation_id])->values()->all(); + + return ['case' => ['id' => $id, 'title' => $case->title, 'closed' => $case->closed_at !== null], 'opportunity' => $opportunity, 'opportunity_label' => $context['selection']['opportunity']['title'] ?? null, + 'historical' => $historical, 'initial_scope' => $initialScope, 'saved_scopes' => $savedScopes, 'version' => $state['version'], 'apiex' => $state['apiex'], 'swot' => $state['swot'], 'assessment' => $assessment, 'context' => $context, 'reused' => $reused, + 'documents' => $documents, 'selected_documents' => $documentary, 'api_issues' => array_values(array_unique($issues)), 'api_state' => $apiState, + 'api_fingerprint' => $fingerprint, 'swot_fingerprint' => $swotFingerprint, + 'swot_review_required' => $state['swot']['source_fingerprint'] !== $swotFingerprint || ($state['swot']['review']['fingerprint'] ?? null) !== $swotFingerprint, + 'objects' => $objects, 'sources' => $sources, 'can_write' => ! $historical && ! $case->closed_at && $this->desk->owns($actor, $case), + 'can_review' => ! $historical && ! $case->closed_at && ($this->desk->owns($actor, $case) || $actor->can('manage-portal')), + 'links' => ['dossier' => '/investimentos/'.$id.$editQuery, 'context' => '/investimentos/'.$id.'/contexto/editar'.$editQuery, + 'documents' => '/balcao-virtual/dossiers/'.$id.$query, 'partners' => '/parcerias/painel?context='.$id.($opportunity ? '&opportunity='.urlencode($opportunity) : ''), + 'library' => '/documentos?context='.$id.($opportunity ? '&opportunity='.urlencode($opportunity) : ''), + 'editorial' => '/acesso-gestao', 'idea' => '/investimentos/'.$id.'/contexto/editar'.$query.'#project-summary', 'opportunity' => '/investimentos/'.$id.'/contexto/editar'.$query.'#project-summary', 'risk' => '/investimentos/'.$id.$query.'#tarefas'], + 'history' => $history, 'history_next' => $historyRows->count() > 25 ? ($history[count($history) - 1]['version'] ?? null) : null]; + } + + /** @param array $context + * @param array $reused + * @param array $sources + * @param array $rows + * @return array */ + private function sourceSnapshot(array $context, array $reused, array $sources, string $object, array $rows): array + { + $used = array_column($rows, 'source_key'); + $tracked = array_values(array_filter($sources, fn ($source) => ! str_starts_with($source['key'], 'document:') || in_array($source['key'], $used, true))); + + return ['context' => $context, 'reused' => $reused, 'sources' => $tracked, 'object' => $object]; + } + + /** @return array|null */ + public function continuation(User $actor, string $id, ?string $opportunity, mixed $actionId): ?array + { + if (! is_string($actionId) || ! Str::isUuid($actionId)) { + return null; + } + [, , $scope] = $this->context($actor, $id, $opportunity); + + return collect($this->rows($this->current($id, $scope)['swot']['actions']))->firstWhere('id', $actionId); + } + + /** @return list */ + public function taskKeys(User $actor, string $id, string $opportunity): array + { + [, , $scope] = $this->context($actor, $id, $opportunity); + + return array_values(array_map(fn ($action) => 'swot:'.$action['id'], $this->current($id, $scope)['swot']['actions'])); + } + + /** @param array $input + * @param array $view + * @return array */ + private function draft(array $input, array $view): array + { + $data = Validator::make($input, ['object_key' => ['required', Rule::in(array_column($view['objects'], 'key'))], 'scope' => 'present|nullable|string|max:4000', + 'source_fingerprint' => 'present|string|size:64', 'rows' => 'present|array|list|max:80', 'rows.*' => 'array:id,dimension,text,reference,source_key,date,classification', + 'rows.*.id' => 'required|uuid|distinct', 'rows.*.dimension' => 'required|in:strength,weakness,opportunity,threat', + 'rows.*.classification' => 'required|in:documented_fact,hypothesis,unconfirmed', 'rows.*.text' => 'present|nullable|string|max:4000', + 'rows.*.reference' => 'present|nullable|string|max:4000', 'rows.*.source_key' => ['nullable', Rule::in(array_column($view['sources'], 'key'))], 'rows.*.date' => 'nullable|date_format:Y-m-d'])->validate(); + + $snapshot = $this->sourceSnapshot($view['context'], $view['reused'], $view['sources'], $data['object_key'], $data['rows']); + + return [...$data, 'sources_snapshot' => $snapshot, 'snapshot_fingerprint' => $this->hash($snapshot), 'review' => null, 'actions' => $view['swot']['actions']]; + } + + /** @param array $input + * @return array */ + public function change(User $actor, string $id, array $input): array + { + $control = Validator::make($input, ['opportunity' => 'nullable|string|max:150', 'version' => 'required|integer|min:0', 'operation_key' => 'required|uuid', + 'action' => 'required|in:apiex_save,apiex_review,apiex_export,external,swot_save,swot_review,swot_action,swot_restore', 'reason' => 'required|string|min:3|max:4000'])->validate(); + + return DB::transaction(function () use ($actor, $id, $input, $control) { + $case = $this->desk->case($actor, $id, false, true); + $this->desk->assertOpen($case); + $view = $this->view($actor, $id, $control['opportunity'] ?? null); + $review = in_array($control['action'], ['apiex_review', 'swot_review'], true); + abort_unless($review ? $view['can_review'] : $view['can_write'], 403); + $requestHash = $this->hash([...$input, 'actor' => $actor->id]); + $prior = $this->events($id, $view['opportunity'])->where('correlation_id', $control['operation_key'])->first(); + if ($prior) { + abort_unless(hash_equals(json_decode($prior->after_data, true)['request_hash'], $requestHash), 409, 'A tentativa já tem outro conteúdo.'); + + return [...$this->view($actor, $id, $view['opportunity']), 'replayed' => true]; + } + abort_unless((int) $control['version'] === $view['version'], 409, 'Existe outra versão. Os seus campos foram preservados; consulte e compare antes de substituir.'); + $state = Arr::only($view, ['version', 'apiex', 'swot']); + $receipt = ['actor' => $actor->id, 'at' => now()->toISOString(), 'reason' => $control['reason']]; + switch ($control['action']) { + case 'apiex_save': + $data = Validator::make($input, ['note' => 'present|nullable|string|max:6000', 'additional_documents' => 'present|array|list|max:60', 'additional_documents.*' => ['required', 'distinct', Rule::in(array_column($view['documents'], 'document_id'))]])->validate(); + $state['apiex'] = [...$state['apiex'], ...$data, 'review' => null]; + break; + case 'apiex_review': + abort_if($view['api_issues'], 422, 'Complete os requisitos e documentos aplicáveis.'); + abort_unless(($input['fingerprint'] ?? '') === $view['api_fingerprint'], 409, 'O dossier/documentos mudaram; reveja a versão actual.'); + foreach ($view['selected_documents'] as $document) { + $record = DB::table('documents')->where('id', $document['document_id'])->whereNull('deleted_at')->lockForUpdate()->first(); + abort_unless($record !== null, 404); + app(VerifiedDocumentBinary::class)->respond($record); + } + $state['apiex']['review'] = [...$receipt, 'fingerprint' => $view['api_fingerprint']]; + break; + case 'apiex_export': + abort_if($view['api_issues'] || ($state['apiex']['review']['fingerprint'] ?? '') !== $view['api_fingerprint'], 409, 'Reveja a preparação actual antes de exportar.'); + $prepared = Arr::only($view, ['case', 'opportunity', 'context', 'reused', 'assessment', 'selected_documents']); + $prepared['apiex'] = Arr::only($state['apiex'], ['note', 'review']); + $state['apiex']['exports'][] = [...$receipt, 'id' => $control['operation_key'], 'fingerprint' => $view['api_fingerprint'], 'context_revision' => $view['context']['revision'], 'documents' => $view['selected_documents'], 'prepared' => $prepared]; + break; + case 'external': + $data = Validator::make($input, ['kind' => 'required|in:delivery,clarification,response,decision', 'date' => 'required|date_format:Y-m-d|before_or_equal:today', 'reference' => 'required|string|max:2000', + 'proof_document' => ['required', Rule::in(collect($this->rows($view['documents']))->where('available', true)->pluck('document_id')->all())], 'export_id' => 'required|uuid', 'related_id' => 'nullable|uuid', 'outcome' => 'nullable|in:approved,refused,conditional,other'])->validate(); + abort_unless(collect($this->rows($state['apiex']['exports']))->contains('id', $data['export_id']), 422, 'Escolha a versão exportada deste dossier/oportunidade.'); + $same = collect($this->rows($state['apiex']['external']))->where('export_id', $data['export_id']); + if ($data['kind'] !== 'delivery') { + abort_unless($same->contains('kind', 'delivery'), 422, 'Registe a entrega externa desta versão.'); + } + if ($data['kind'] === 'response') { + abort_unless($same->where('kind', 'clarification')->contains('id', $data['related_id'] ?? ''), 422, 'Identifique o pedido de esclarecimento a que responde.'); + } + if ($data['kind'] === 'decision') { + abort_unless(! empty($data['outcome']), 422, 'Identifique a decisão efectivamente recebida.'); + } + $record = DB::table('documents')->where('id', $data['proof_document'])->whereNull('deleted_at')->lockForUpdate()->first(); + abort_unless($record !== null, 404); + app(VerifiedDocumentBinary::class)->respond($record); + $state['apiex']['external'][] = [...$data, ...$receipt, 'id' => $control['operation_key'], 'proof_snapshot' => collect($this->rows($view['documents']))->firstWhere('document_id', $data['proof_document'])]; + break; + case 'swot_save': + $state['swot'] = $this->draft($input['draft'] ?? [], $view); + break; + case 'swot_review': + $swot = $state['swot']; + abort_unless(($input['fingerprint'] ?? '') === $view['swot_fingerprint'], 409, 'As fontes mudaram; compare antes de rever.'); + abort_unless(trim($swot['scope'] ?? '') !== '' && in_array($swot['object_key'], array_column($view['objects'], 'key'), true), 422, 'Identifique objecto e âmbito.'); + foreach (['strength', 'weakness', 'opportunity', 'threat'] as $dimension) { + abort_unless(collect($this->rows($swot['rows']))->contains('dimension', $dimension), 422, 'Trate as quatro dimensões; incerteza deve ficar classificada.'); + } + foreach ($swot['rows'] as $row) { + abort_unless(trim($row['text'] ?? '') !== '' && trim($row['reference'] ?? '') !== '' && ! empty($row['date']), 422, 'Cada conclusão exige fonte, data e classificação; desconhecido não é ausência.'); + } + $state['swot']['source_fingerprint'] = $view['swot_fingerprint']; + $state['swot']['sources_snapshot'] = $this->sourceSnapshot($view['context'], $view['reused'], $view['sources'], $state['swot']['object_key'], $state['swot']['rows']); + $state['swot']['snapshot_fingerprint'] = $view['swot_fingerprint']; + $state['swot']['review'] = [...$receipt, 'fingerprint' => $view['swot_fingerprint'], 'version' => $state['version'] + 1]; + break; + case 'swot_action': + abort_if($view['swot_review_required'], 409, 'Reveja a análise e as fontes antes de ligar uma acção.'); + $data = Validator::make($input, ['conclusion_id' => ['required', Rule::in(array_column($state['swot']['rows'], 'id'))], 'kind' => 'required|in:idea,opportunity,partners,risk', 'title' => 'required|string|min:3|max:200'])->validate(); + $href = $view['links'][$data['kind']]; + if ($data['kind'] === 'risk') { + $href = str_replace('#tarefas', (str_contains($href, '?') ? '&' : '?').'swot_action='.$control['operation_key'].'#tarefas', $href); + } + $state['swot']['actions'][] = [...$data, ...$receipt, 'id' => $control['operation_key'], 'case_id' => $id, 'opportunity' => $view['opportunity'], 'review_version' => $state['swot']['review']['version'], 'href' => $href]; + break; + case 'swot_restore': + $data = Validator::make($input, ['revision' => 'required|integer|min:1'])->validate(); + $event = $this->events($id, $view['opportunity'])->where('after_data->version', $data['revision'])->first(); + abort_unless($event !== null, 404); + $old = $this->decode($event)['swot']; + $state['swot'] = [...$old, 'review' => null, 'actions' => $state['swot']['actions']]; + break; + } + $state['context_snapshot'] = $view['context']; + $state['reused_snapshot'] = $view['reused']; + $state['version']++; + DB::table('audit_events')->insert(['source_system' => self::SOURCE, 'entity_type' => 'desk_cases', 'entity_id' => $id, 'external_id' => $id.':'.hash('sha256', $view['opportunity'] ?? 'dossier').':'.$state['version'], + 'correlation_id' => $control['operation_key'], 'actor_user_id' => $actor->id, 'action' => $control['action'], 'data_classification' => 'restricted', + 'before_data' => json_encode(['version' => $view['version']], JSON_THROW_ON_ERROR), 'after_data' => json_encode(['version' => $state['version'], 'scope' => $view['opportunity'] ?? 'dossier', 'request_hash' => $requestHash, 'snapshot' => Crypt::encryptString(json_encode($state, JSON_THROW_ON_ERROR))], JSON_THROW_ON_ERROR)]); + + return [...$this->view($actor, $id, $view['opportunity']), 'replayed' => false]; + }, 3); + } + + /** Export uses the existing verified binary reader, never a browser-supplied path. + * @return array{bytes:string,export_id:string} */ + public function bundle(User $actor, string $id, ?string $opportunity, string $exportId, bool $initialScope = false): array + { + return DB::transaction(function () use ($actor, $id, $opportunity, $exportId, $initialScope) { + $this->desk->case($actor, $id, false, true); + if ($opportunity === null && ! $initialScope) { + $scopes = DB::table('audit_events')->where('source_system', self::SOURCE)->where('entity_type', 'desk_cases')->where('entity_id', $id)->where('correlation_id', $exportId)->where('action', 'apiex_export')->selectRaw("DISTINCT after_data->>'scope' as scope")->get(); + abort_unless($scopes->count() === 1, 422, 'Identifique o âmbito da exportação preservada.'); + $scope = $scopes->first()->scope; + $initialScope = $scope === 'dossier'; + $opportunity = $initialScope ? null : $scope; + } + $view = $this->view($actor, $id, $opportunity, null, $initialScope); + $export = collect($this->rows($view['apiex']['exports']))->firstWhere('id', $exportId); + abort_unless($export !== null, 404); + $records = []; + foreach ($export['documents'] as $document) { + abort_unless(collect($this->rows($view['documents']))->contains('document_id', $document['document_id']), 403); + $record = DB::table('documents')->where('id', $document['document_id'])->whereNull('deleted_at')->lockForUpdate()->first(); + abort_unless($record !== null && $record->status === 'active' && $record->malware_scan_status === 'clean' && hash_equals(trim($document['sha256']), trim($record->sha256)) && hash_equals(trim($record->sha256), trim((string) $record->malware_scanned_sha256)), 404, 'Documento da versão preparada indisponível para descarga; o histórico foi preservado.'); + app(VerifiedDocumentBinary::class)->authorizeOpportunityAttachment($record); + $records[$document['document_id']] = $record; + } + $disk = Storage::disk('local'); + $key = 'investor-preparations/'.$id.'/'.hash('sha256', $view['opportunity'] ?? 'dossier').'/'.$exportId.'.zip.enc'; + if ($disk->exists($key)) { + try { + $sealed = json_decode(Crypt::decryptString($disk->get($key)), true, 512, JSON_THROW_ON_ERROR); + } catch (DecryptException|\JsonException $e) { + abort(404, 'Pacote preservado indisponível; não foi substituído.'); + } + abort_unless(($sealed['case_id'] ?? '') === $id && ($sealed['opportunity'] ?? null) === $view['opportunity'] && ($sealed['export_id'] ?? '') === $exportId && ($sealed['fingerprint'] ?? '') === $export['fingerprint'], 404); + $bytes = base64_decode($sealed['binary'] ?? '', true); + abort_unless(is_string($bytes) && hash_equals($sealed['sha256'] ?? '', hash('sha256', $bytes)), 404); + + return ['bytes' => $bytes, 'export_id' => $exportId]; + } + $prepared = $export['prepared']; + abort_unless(is_array($prepared), 409, 'Snapshot de exportação indisponível; original conservado.'); + $file = tempnam(sys_get_temp_dir(), 'investmoz-apiex-'); + abort_unless(is_string($file), 503); + $zip = new \ZipArchive; + $open = false; + try { + abort_unless($zip->open($file, \ZipArchive::OVERWRITE) === true, 503); + $open = true; + $manifest = ['format' => 'investmoz-apiex-preparation/1', 'case_id' => $id, 'opportunity' => $view['opportunity'], 'export' => $export, 'context' => $prepared['context'], 'reused' => $prepared['reused'], 'assessment' => $prepared['assessment'], 'notice' => 'Preparação para entrega externa. Não é formulário oficial, submissão electrónica ou aprovação.']; + $index = view('investments.preparation-index', ['workspace' => $prepared, 'manifest' => $manifest])->render(); + abort_unless($zip->addFromString('indice.html', $index), 503); + abort_unless($zip->addFromString('manifesto.json', json_encode($manifest, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)), 503); + foreach ($export['documents'] as $n => $document) { + $record = $records[$document['document_id']]; + $response = app(VerifiedDocumentBinary::class)->respond($record); + $bytes = $response instanceof BinaryFileResponse ? file_get_contents($response->getFile()->getPathname()) : $response->getContent(); + abort_unless(is_string($bytes), 503); + abort_unless($zip->addFromString('anexos/'.sprintf('%02d-', $n + 1).preg_replace('/[^\pL\pN._-]+/u', '-', basename($document['file_name'])), $bytes), 503); + } + abort_unless($zip->close(), 503); + $open = false; + + $bytes = file_get_contents($file); + abort_unless(is_string($bytes), 503); + $sealed = ['case_id' => $id, 'opportunity' => $view['opportunity'], 'export_id' => $exportId, 'fingerprint' => $export['fingerprint'], 'sha256' => hash('sha256', $bytes), 'binary' => base64_encode($bytes)]; + $temporary = $key.'.'.Str::uuid().'.tmp'; + try { + abort_unless($disk->put($temporary, Crypt::encryptString(json_encode($sealed, JSON_THROW_ON_ERROR))) && $disk->move($temporary, $key), 503, 'Não foi possível preservar o pacote; repita a mesma exportação.'); + } finally { + $disk->delete($temporary); + } + + return ['bytes' => $bytes, 'export_id' => $exportId]; + } finally { + if ($open) { + $zip->close(); + } + if (is_file($file)) { + unlink($file); + } + } + }); + } +} diff --git a/app/Services/InvestorPath.php b/app/Services/InvestorPath.php index 7f440381..9a6b6ab2 100644 --- a/app/Services/InvestorPath.php +++ b/app/Services/InvestorPath.php @@ -160,7 +160,9 @@ final class InvestorPath $next = ['code' => 'S06', 'title' => $preparation['next'], 'action' => 'Preparar', 'href' => '/investimentos/'.$id.'/contexto/editar#preparation-questions']; } - return ['private_investment' => $preparation, 'case' => ['id' => $id, 'title' => $case->title, 'version' => $case->version, 'closed' => $case->closed_at !== null], + $preparationTaskKeys = $opportunity !== null && ($owner || $manager) && app(PrivateInvestmentPreparation::class)->available() ? app(InvestmentPreparationWorkspace::class)->taskKeys($actor, $id, $opportunity) : null; + + return ['preparation_action' => ($owner || $manager) && app(PrivateInvestmentPreparation::class)->available() ? app(InvestmentPreparationWorkspace::class)->continuation($actor, $id, $opportunity, request()->query('swot_action')) : null, 'private_investment' => $preparation, 'case' => ['id' => $id, 'title' => $case->title, 'version' => $case->version, 'closed' => $case->closed_at !== null], 'journey_id' => $journey->id, 'definition_id' => $version->id, 'definition_version' => $version->version_no, 'source_sha256' => $definition['source_sha256'], 'phases' => $definition['phases'], 'steps' => $steps, 'facts' => $facts, 'fact_reasons' => $factReasons, 'context_opportunity' => $opportunity, 'opportunity_options' => $allChoices, @@ -174,10 +176,12 @@ final class InvestorPath 'content_sources' => ($owner || $manager) ? ($path['content_sources'] ?? []) : [], 'tasks' => DB::table('tasks')->where('desk_case_id', $id) ->whereNull('deleted_at') + ->when($preparationTaskKeys !== null, fn ($q) => $q->where(fn ($p) => $p->whereNull('guidance_key')->orWhere('guidance_key', 'not like', 'swot:%')->orWhereIn('guidance_key', $preparationTaskKeys ?? []))) ->when(! $owner && ! $manager, fn ($q) => $q->where('assignee_user_id', $actor->id)) ->get(['id', 'title', 'status', 'version_no', 'due_at', 'assignee_user_id']), 'services' => app(DeskServiceAvailability::class)->current()->get()->map(fn ($s) => ['id' => $s->id, 'title' => json_decode($s->definition, true)['title'], 'effective_from' => $s->effective_from ?? null]), 'tools' => ['simulator' => (int) $case->user_id === $actor->id ? '/simulador-fiscal?context='.$id.($case->simulation_id ? '&draft='.$case->simulation_id : '').($opportunity ? '&opportunity='.urlencode($opportunity) : '') : null, + 'preparation' => ($owner || $manager) && app(PrivateInvestmentPreparation::class)->available() ? '/investimentos/'.$id.'/preparacao'.($opportunity ? '?opportunity='.urlencode($opportunity) : '') : null, 'company' => '/investimentos/'.$id.'/forma-juridica', 'desk' => '/balcao-virtual/dossiers/'.$id.($opportunity ? '?opportunity='.urlencode($opportunity) : ''), 'guidance' => '/balcao-virtual/dossiers/'.$id.'/orientacao', 'library' => '/documentos?context='.$id, 'opportunities' => '/oportunidades?context='.$id, 'territory' => '/zonas?context='.$id, 'partners' => '/parcerias/painel?context='.$id, @@ -337,12 +341,16 @@ final class InvestorPath public function task(User $actor, string $id, array $input): string { $data = Validator::make($input, ['version' => 'required|integer|min:1', 'code' => ['required', Rule::in(array_map(fn ($n) => sprintf('S%02d', $n), range(1, 19)))], + 'preparation_action' => 'nullable|uuid', 'opportunity' => 'nullable|string|max:150', 'title' => 'required|string|min:3|max:200', 'due_at' => 'required|date|after:now', 'consent' => 'accepted'])->validate(); return DB::transaction(function () use ($actor, $id, $data): string { $case = $this->desk->case($actor, $id, true, true); abort_if($case->closed_at, 409); - $key = 'path:'.$data['code']; + if (!empty($data['preparation_action'])) { app(InvestmentConsumerScope::class)->key(app(InvestorContext::class)->state($case), $data['opportunity'] ?? null, true); } + $origin = !empty($data['preparation_action']) ? app(InvestmentPreparationWorkspace::class)->continuation($actor, $id, $data['opportunity'] ?? null, $data['preparation_action']) : null; + abort_if(!empty($data['preparation_action']) && (!$origin || $origin['kind'] !== 'risk'), 422, 'A acção SWOT não pertence a este dossier/oportunidade ou não é uma acção de risco.'); + $key = $origin ? 'swot:'.$origin['id'] : 'path:'.$data['code']; $existing = DB::table('tasks')->where('desk_case_id', $id)->where('guidance_key', $key)->first(); if ($existing) { abort_unless($existing->title === $data['title'] && (int) $existing->accepted_by === $actor->id @@ -351,12 +359,12 @@ final class InvestorPath return $existing->id; } $this->writable($actor, $id, $data['version']); - $step = $this->findStep($this->view($actor, $id), $data['code']); + $step = $this->findStep($this->view($actor, $id, $origin['opportunity'] ?? null), $data['code']); abort_unless($step !== null && $step['preparation_allowed'], 422); $task = CrmTask::create(['desk_case_id' => $id, 'guidance_key' => $key, 'title' => $data['title'], 'due_at' => $data['due_at'], 'status' => 'open', 'assignee_user_id' => $actor->id, 'accepted_by' => $actor->id, 'accepted_at' => now(), 'external_sync_status' => 'pending_authorization', 'data_classification' => 'confidential', 'source_system' => 'investor-path']); - $this->desk->event($case, $actor, 'path_task_accepted', ['task_id' => $task->id, 'code' => $data['code'], 'scope' => 'internal_crm']); + $this->desk->event($case, $actor, 'path_task_accepted', ['task_id' => $task->id, 'code' => $data['code'], 'scope' => 'internal_crm', 'preparation_action' => $origin['id'] ?? null, 'opportunity' => $origin['opportunity'] ?? null, 'swot_review_version' => $origin['review_version'] ?? null]); return $task->id; }); diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md index 6a313653..7bb1ed92 100644 --- a/docs/investmoz/unification/traceability-and-manual.md +++ b/docs/investmoz/unification/traceability-and-manual.md @@ -1,3 +1,21 @@ +## 10/11/2026 — APIEX e SWOT no dossier existente: QA concluído, instalação pendente + +**Instalado:** `7476dc343098f15a7982e9d7581bf4f59d43bc1a` em https://teste-investidor.tempo.co.mz, promovido às14:28:12UTC e conferido às14:29:07UTC (16:29 locais). Transporte CBF15 deixa de ser pendência de instalação. Delta14hashes Git/HTTPS, root/up/login/revision200, configuração intacta, zero migrations/importações; backup/restauro190tabelas e369ficheiros conferidos. Recibos `outputs/cbf15-carry-delivery-20261110/`; release anterior e pacotes preservados. + +**Implementado em QA, ainda não instalado — APIEX:** dossier existente → requisitos fundamentados disponíveis/em falta/não aplicáveis/indeterminados → documentos existentes e complementos → revisão → prévia/ZIP com índice e anexos íntegros → registo da entrega externa, esclarecimento, resposta e decisão com data/referência/comprovativo. Dados do investidor/empresa/contexto/localização/oportunidade reutilizados. Estados em preparação/pronto para entrega/entrega registada/decisão recebida distintos; exportar não submete nem aprova. Snapshot preparado, versões, SHA e pacote privado cifrado preservados; recuperação devolve os mesmos bytes após alteração do contexto, revalidando acesso e segurança dos documentos. Ausência de recepção electrónica APIEX, segundo a orientação Tempo, não bloqueia este percurso; nenhum conector fictício ou formulário oficial inventado. Reutiliza o avaliador e modelos/fontes aceites; períodos/regimes fora do âmbito actualmente mapeado ficam indeterminados, sem conclusão normativa presumida. + +**Implementado em QA, ainda não instalado — SWOT:** no mesmo dossier/oportunidade, objecto explícito investimento/território/sector/cluster, evidências do contexto/análise proactiva e Competitividade pública aprovada, quatro dimensões internas/externas, fonte/data/classificação de cada conclusão (facto documentado/hipótese/por confirmar). Sem pontuação, IA ou inferência de ausência pela falta de registos. Gravação/recuperação/histórico paginado e revisão pela equipa com permissões existentes. Alteração/retirada de fontes assinala revisão, conserva fotografia consultada e edições deliberadas. Acções ideia/oportunidade/parceiros/risco continuam no mesmo dossier; risco liga à tarefa nativa com origem própria e repetição sem duplicação. Privado por defeito; publicação exige o fluxo editorial existente, nunca automática. Contextos retirados ficam no histórico privado de leitura, sem reactivação. + +Provas sintéticas no QA55441 existente, com rollback: seis casos API/211asserções;16casos frontend dirigidos (incluindo transporte e cabeçalho comum147páginas), tipos, análise estática e lint aprovados. `outputs/investment-preparation-20261110/verification.json`, ZIP/índice/anexos, recuperação SWOT e provas de isolamento/histórico/segurança. Pacote Git agrupado `outputs/entrega-apiex-swot-20261110.zip`, base exacta7476dc34, reversão de código sem apagar auditoria, pacotes privados ou tarefas posteriores. Nenhuma migration/base/porta/conta real nova, submissão real ou publicação. Compilação QA separada; provas anteriores reutilizadas. + +**Saldo concreto:** APIEX e SWOT acima encerrados em implementação QA; instalação deste conjunto e conferência visual continuam pendentes. O conector mantém “The browser access host is unavailable”; SSR/testes não substituem visual, sem novo ciclo de reinícios. Os restantes módulos conservam o saldo anterior, incluindo resíduos L1–L7, restanteL8 e L9–L16. Isto não declara o portal integralmente concluído. + +### Utilização — preparação APIEX e SWOT + +Abra o dossier autorizado e escolha **Preparação APIEX e SWOT** nas ferramentas/documentos. Se houver várias oportunidades, escolha primeiro o contexto; o título e histórico identificam sempre essa escolha. Em APIEX, confira o resumo reutilizado e use **Alterar** para corrigir no editor existente. Confira os requisitos e os documentos disponíveis, complete os que faltam na biblioteca existente, guarde e reveja. A prévia apresenta o índice; exporte e conserve o ZIP. Registe depois a entrega efectivamente realizada externamente, com data, referência e comprovativo; esclarecimentos/respostas/decisão são eventos separados ligados à exportação. Uma decisão recebida não implica aprovação. + +Na aba SWOT, escolha objecto/âmbito, consulte as evidências e preencha as quatro dimensões com fonte/data/classificação. Guarde, peça/recolha a revisão com as permissões actuais e associe uma acção à conclusão. A ligação de risco abre a tarefa no mesmo dossier, sem substituir tarefas anteriores. Histórico permite recuperar versões; restauro de SWOT cria novo rascunho sem eliminar entregas externas ou acções. Se uma gravação tiver resposta incerta, repita a mesma intenção ou consulte e compare a versão guardada; a substituição das edições locais é explícita. Fontes alteradas exigem nova revisão, sem reescrever conclusões. Análises ficam privadas; eventual divulgação passa pelo fluxo editorial existente. + ## 10/11/2026 — transporte documental CBF15 em QA Homologação mantém `d216830b`; este delta ainda não está instalado. Tipos/lint/Pint/buildQA aprovados; pacote com aplicação/reversão exactas,sem migrations/dados/credenciais. Pendência encerrada no recorte normal residente2026/ano civil/MZN: crédito de investimento de origem anterior do mesmo contribuinte/projecto/local/regime, com activo/documento/parcela, exercício de origem, NUIT/projecto de origem, taxa original e qualificação históricas documentados. Exercício de origem anterior a2026,dentro da janela original e não anterior à aquisição; no projecto em funcionamento,a aquisição não precede o início aplicável. Não renova o prazo nem recalcula origem a outra taxa. Valor corrente/ausência e uso efectivo agregado exigem reconciliação explícita; histórico de simulações não equivale a utilização fiscal. diff --git a/docs/investmoz/v2/auditoria-portal/backlog.md b/docs/investmoz/v2/auditoria-portal/backlog.md index 85148dba..4dd4ebbc 100644 --- a/docs/investmoz/v2/auditoria-portal/backlog.md +++ b/docs/investmoz/v2/auditoria-portal/backlog.md @@ -1,3 +1,15 @@ +## 10/11/2026 — APIEX e SWOT no dossier existente: QA concluído, instalação pendente + +**Instalado:** `7476dc343098f15a7982e9d7581bf4f59d43bc1a` em https://teste-investidor.tempo.co.mz, promovido às14:28:12UTC e conferido às14:29:07UTC (16:29 locais). Transporte CBF15 deixa de ser pendência de instalação. Delta14hashes Git/HTTPS, root/up/login/revision200, configuração intacta, zero migrations/importações; backup/restauro190tabelas e369ficheiros conferidos. Recibos `outputs/cbf15-carry-delivery-20261110/`; release anterior e pacotes preservados. + +**Implementado em QA, ainda não instalado — APIEX:** dossier existente → requisitos fundamentados disponíveis/em falta/não aplicáveis/indeterminados → documentos existentes e complementos → revisão → prévia/ZIP com índice e anexos íntegros → registo da entrega externa, esclarecimento, resposta e decisão com data/referência/comprovativo. Dados do investidor/empresa/contexto/localização/oportunidade reutilizados. Estados em preparação/pronto para entrega/entrega registada/decisão recebida distintos; exportar não submete nem aprova. Snapshot preparado, versões, SHA e pacote privado cifrado preservados; recuperação devolve os mesmos bytes após alteração do contexto, revalidando acesso e segurança dos documentos. Ausência de recepção electrónica APIEX, segundo a orientação Tempo, não bloqueia este percurso; nenhum conector fictício ou formulário oficial inventado. Reutiliza o avaliador e modelos/fontes aceites; períodos/regimes fora do âmbito actualmente mapeado ficam indeterminados, sem conclusão normativa presumida. + +**Implementado em QA, ainda não instalado — SWOT:** no mesmo dossier/oportunidade, objecto explícito investimento/território/sector/cluster, evidências do contexto/análise proactiva e Competitividade pública aprovada, quatro dimensões internas/externas, fonte/data/classificação de cada conclusão (facto documentado/hipótese/por confirmar). Sem pontuação, IA ou inferência de ausência pela falta de registos. Gravação/recuperação/histórico paginado e revisão pela equipa com permissões existentes. Alteração/retirada de fontes assinala revisão, conserva fotografia consultada e edições deliberadas. Acções ideia/oportunidade/parceiros/risco continuam no mesmo dossier; risco liga à tarefa nativa com origem própria e repetição sem duplicação. Privado por defeito; publicação exige o fluxo editorial existente, nunca automática. Contextos retirados ficam no histórico privado de leitura, sem reactivação. + +Provas sintéticas no QA55441 existente, com rollback: seis casos API/211asserções;16casos frontend dirigidos (incluindo transporte e cabeçalho comum147páginas), tipos, análise estática e lint aprovados. `outputs/investment-preparation-20261110/verification.json`, ZIP/índice/anexos, recuperação SWOT e provas de isolamento/histórico/segurança. Pacote Git agrupado `outputs/entrega-apiex-swot-20261110.zip`, base exacta7476dc34, reversão de código sem apagar auditoria, pacotes privados ou tarefas posteriores. Nenhuma migration/base/porta/conta real nova, submissão real ou publicação. Compilação QA separada; provas anteriores reutilizadas. + +**Saldo concreto:** APIEX e SWOT acima encerrados em implementação QA; instalação deste conjunto e conferência visual continuam pendentes. O conector mantém “The browser access host is unavailable”; SSR/testes não substituem visual, sem novo ciclo de reinícios. Os restantes módulos conservam o saldo anterior, incluindo resíduos L1–L7, restanteL8 e L9–L16. Isto não declara o portal integralmente concluído. + ## 10/11/2026 — transporte documental CBF15 em QA Homologação mantém `d216830b`; este delta ainda não está instalado. Tipos/lint/Pint/buildQA aprovados; pacote com aplicação/reversão exactas,sem migrations/dados/credenciais. Pendência encerrada no recorte normal residente2026/ano civil/MZN: crédito de investimento de origem anterior do mesmo contribuinte/projecto/local/regime, com activo/documento/parcela, exercício de origem, NUIT/projecto de origem, taxa original e qualificação históricas documentados. Exercício de origem anterior a2026,dentro da janela original e não anterior à aquisição; no projecto em funcionamento,a aquisição não precede o início aplicável. Não renova o prazo nem recalcula origem a outra taxa. Valor corrente/ausência e uso efectivo agregado exigem reconciliação explícita; histórico de simulações não equivale a utilização fiscal. diff --git a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv index e86ed200..1cc3fb82 100644 --- a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv +++ b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv @@ -31,7 +31,7 @@ RF-CLU-001,"Administrar clusters, subclusters, cadeias de valor, taxonomias e ve [Executável 82dab3719ffc] P3 staging privado completo; P4 nominal destino real 27 refs/25 territórios, zero geometrias. Pré-condições fontes conferidas; pacote para decisão, não aplicado. Reversão após uso só manifesto/build, backend e dados retidos. Adaptador ensaiado só em clone: rollback/recuperação após commit e repetição sem duplicações; aplicação 56 fontes inalterada. Acesso público e diferenças visuais/login continuam abertos. Saldo remoto delimitado 4–7 h; sem alterações remotas. [Executável 312965f2c653] P3 staging privado completo; P4 nominal destino real 27 refs/25 territórios, zero geometrias. Pré-condições fontes conferidas; pacote para decisão, não aplicado. Reversão após uso só manifesto/build, backend e dados retidos. Adaptador ensaiado só em clone: rollback/recuperação após commit e repetição sem duplicações; aplicação 56 fontes inalterada. Acesso público e diferenças visuais/login continuam abertos. Saldo remoto delimitado 4–7 h; sem alterações remotas. [Homologação 312965f2c653 executada] Autorização Tempo; 30 fichas privadas/30 locais/31 suportes/11 relações/2 originais e 2 definições internas, 233 caminhos conferidos. Dados anteriores/permissões preservados; zero publicação/migrations/geometrias/P7. Saldo delimitado de execução concluído. Dossier legítimo, oito lacunas e questões de autenticação/visual separadas. RECIBO-EXECUCAO-312965.json.",território,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",resources/js/components/investment-territory.tsx; app/Http/Controllers/InvestmentTerritoryController.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InvestmentTerritoryTest, TerritorialRegistryTest, InvestmentTerritorialTraceabilityTest, InvestmentZoneTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,," | QA01: prova positiva delimitada de atividade/cadeia e operações do lote concluída, conservando as aceitações anteriores e a semântica privada/confirmada/pública. | ATIVO01: instalação/importação/publicação autenticadas, scan, repetição idempotente, recuperação pública do ramo A/01/011/0112/01120 e preservação operacional concluídos. Provas funcionais QA aceites reutilizadas, sem repetição."," | QA01: divergência documental 600/579 e edição normativa abertas; cadeia editorial; publicação canónica com pré-condições sintéticas; save legado transacional; sem volume ou recuperação de payload legado cifrado; reversão parcial com sete fontes funcionais. Sem decisão ativa presumida. | ATIVO01: não encerra CAE integral ou divergência 600/579/edição normativa; cadeia exclusivamente editorial. Nenhuma classificação ou relação de investimento real alterada/divulgada. Limites QA anteriores e reversão parcial compatível mantidos; editor UUID ativo de /negocios continua não demonstrado e não bloqueante. Parques, duplicados e regulação Fintech separados.","0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,, -RF-CLU-002,"Relacionar o cluster com projectos, oportunidades, actores e territórios.",upgrade v4 SHA f0b9815…; p. 513; requirements-audit.csv,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: 11 fontes e 161 ficheiros de build entregues; sem migrations, grants, classificações reais ou divulgação. Catálogo público mantém zero negócios e seis oportunidades. Suplemento de compilação para repor InvesteMoz no título preparado apenas em QA, pendente de decisão. | 16/10/2026 — fecho operacional consolidado: negocios-classificacao-QA-53311df2f59c e suplemento de nome negocios-compilacao-nome-QA-7ef0facd0e27 autorizados e entregues: mesmas 11 fontes, 161 build, título InvesteMoz observado. Sem escrita de negócio/classificação/divulgação.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-CLU-002: As relações com projectos, negócios, empresas âncora, PME, fornecedores, compradores, financiadores, reguladores e instituições indicam papel, prioridade, período e estado, sem duplicar os registos de origem e com navegação nos dois sentidos.",P1,RF-CLU-002: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-CLU-002,1,"[{""id"":""RF-CLU-002"",""pedido"":""Relacionar o cluster com projectos, oportunidades, actores e territórios."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 513; requirements-audit.csv""],""aceitacao"":""As relações com projectos, negócios, empresas âncora, PME, fornecedores, compradores, financiadores, reguladores e instituições indicam papel, prioridade, período e estado, sem duplicar os registos de origem e com navegação nos dois sentidos."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 15/10/2026 — incremento de classificação multidimensional em QA: Relações tipadas de uma oportunidade com cluster, projeto e território recuperadas; múltiplos atores empresariais não cadastrados nem inventados. | 15/10/2026 — Tempo autorizou e foi disponibilizada a candidata classificacao-multidimensional-QA-64ab05e20b95 DOC01: 17 fontes/174 build, backup/restauro fresco, cache de dados preservada e reversão compatível. Recorte parcial; restantes limites conservados. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Associação tipada com cluster e recuperação do mesmo anúncio demonstradas; múltiplos atores e navegação bidirecional integral não foram demonstrados neste recorte. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Backup/restauro fresco 295 tabelas/31 sequências/2341 ficheiros/29 documentos; clone arrancou em leitura. Conferência operacional de GET/assets e área privada pela conta 2, sem guardar. Dados, papéis e histórico iguais; não encerra a cláusula integral.","Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada. | Disponibilização DOC01 executada. Limitação operacional concreta: Editor no ativo: não demonstrado nesta conferência. O utilizador informou não ter acesso à conta de Promotora interna Aurora Chachuaio. A sessão efetiva Osmane Nala, conta 2, recebeu 403 em GET /minhas-oportunidades/create; não existe elevação operacional ativa. Os papéis Promotor/Validador dessa conta permanecem atribuídos; as funções de autorização v1 conferem exatamente com a versão anterior à entrega. Existem seis oportunidades legadas e nenhuma do workflow de promotor no ativo. A mensagem 403 genérica não expõe o motivo; o diagnóstico fica registado, sem alterar permissões, credenciais ou acrescentar uma correção fora do pacote autorizado. Mantêm-se as provas funcionais QA aceites do editor.; limites do critério integral: Relações tipadas de uma oportunidade com cluster, projeto e território recuperadas; múltiplos atores empresariais não cadastrados nem inventados. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Recorte QA concluído; disponibilização deste incremento exige decisão específica. Associação tipada com cluster e recuperação do mesmo anúncio demonstradas; múltiplos atores e navegação bidirecional integral não foram demonstrados neste recorte. As quatro outras lacunas conservam o seu estado; provas aceites não se repetem. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Recuperação UUID no ativo não observada: conta 2 sem anúncio próprio; dois rascunhos pertencem a outro titular. Não criar dados nem alargar acesso para preencher esta limitação. Cadeia sem caso positivo, sem ensaio volumétrico e limite do payload sintético da reversão mantêm-se. Outras quatro lacunas inalteradas.","OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.","Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: A autorização base foi executada. Suplemento negocios-compilacao-nome-QA-7ef0facd0e27, zero fontes/161 build para título InvesteMoz, aguarda autorização específica por ter novos hashes de build. Não reabrir QA funcional aceite. | 16/10/2026 — fecho operacional consolidado: Autorizações base e do suplemento executadas. Saldo operacional zero. Não classificar anúncios reais nem divulgar relações. Limites QA e ausência de UUID próprio para observação no ativo conservados; outras quatro lacunas inalteradas.",Incremento parcial disponibilizado; aceitação QA preservada e lacunas integrais delimitadas,"Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: 10–16 h era a estimativa inicial agora executada neste recorte. Saldo QA zero para a cobertura demonstrada. Operação futura estimada 90–180 min após autorização, partilhada pelo lote, não somar por requisito.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | outputs/investmoz-classificacao-multidimensional-QA-20261015/RELATORIO-QA.md; HTTP-DELTA-QA.json (44); SERVICOS-DELTA-QA.json (22); REVERSAO-COMPAT-QA.json (6); INTERFACE-QA.json | outputs/investmoz-classificacao-ativacao-20261015/RELATORIO-ENTREGA.md; RECIBO-FINAL.json; FRESH-BACKUP.json; ARRANQUE-CLONE-RESTAURADO.json; FONTES-COMPILACAO.json; HTTP-AFTER.json; PRESERVACAO-AFTER.json; INTERFACE-OPERACIONAL.json | outputs/investmoz-negocios-classificacao-QA-20261016/RELATORIO-QA.md; HTTP-QA.json (36/50 HTTP); SCOPES-QA.json (10); INTERFACE-QA.json; REVERSAO-APOS-EDICAO-ANTERIOR.json; PRESERVACAO-FINAL.json; MANIFESTO.json | outputs/investmoz-negocios-classificacao-ativacao-20261016/RELATORIO-ENTREGA.md; AUTORIZACAO-TEMPO.json; FRESH-BACKUP.json; ARRANQUE-CLONE-RESTAURADO.json; TROCA.json; HTTP-AFTER.json; PRESERVACAO-APOS-AUTENTICACAO.json; INTERFACE-OPERACIONAL.json; RECIBO-FINAL.json | outputs/investmoz-negocios-classificacao-ativacao-20261016/RELATORIO-FINAL.md; AUTORIZACAO-EXTENSAO-NOME.json; FRESH-BACKUP-NOME.json; ARRANQUE-CLONE-NOME.json; TROCA-NOME.json; HTTP-APOS-NOME.json; PRESERVACAO-APOS-NOME.json; INTERFACE-NOME-ATIVO.json; RECIBO-CONSOLIDADO.json,oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada, | management_draft.canonical.relations/enterprise_size; workflow_context.classification_decisions/publication.classification/canonical_items; mestres existentes por ID; sem migrations. | /negocios: existing_business_revisions.snapshot.context.multidimensional; mesmo UUID e payload principal intacto; decisões por relação/evidência; snapshot de divulgação separado.," | Recuperação noutra sessão, nove relações/quatro dimensões, evidência/decisão por hash, exclusão privada, filtros/map matched_count, reversão compatível. Publicação é fixture sintético; transição editorial aceite não repetida. | Clone principal publicado/v26, referência publicada/v12 intacta; recuperação/validação/divulgação e filtros dirigidos; edição posterior pelo código anterior preserva o suplemento; ver relatório para fixture secundário sintético.",Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,, +RF-CLU-002,"Relacionar o cluster com projectos, oportunidades, actores e territórios.",upgrade v4 SHA f0b9815…; p. 513; requirements-audit.csv,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","[APIEX-SWOT-20261110] Homologação7476dc34 instalada; preparação APIEX e SWOT no dossier existente implementadas em QA, não instaladas. | Histórico anterior preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: 11 fontes e 161 ficheiros de build entregues; sem migrations, grants, classificações reais ou divulgação. Catálogo público mantém zero negócios e seis oportunidades. Suplemento de compilação para repor InvesteMoz no título preparado apenas em QA, pendente de decisão. | 16/10/2026 — fecho operacional consolidado: negocios-classificacao-QA-53311df2f59c e suplemento de nome negocios-compilacao-nome-QA-7ef0facd0e27 autorizados e entregues: mesmas 11 fontes, 161 build, título InvesteMoz observado. Sem escrita de negócio/classificação/divulgação.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-CLU-002: As relações com projectos, negócios, empresas âncora, PME, fornecedores, compradores, financiadores, reguladores e instituições indicam papel, prioridade, período e estado, sem duplicar os registos de origem e com navegação nos dois sentidos.",P1,RF-CLU-002: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-CLU-002,1,"[{""id"":""RF-CLU-002"",""pedido"":""Relacionar o cluster com projectos, oportunidades, actores e territórios."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 513; requirements-audit.csv""],""aceitacao"":""As relações com projectos, negócios, empresas âncora, PME, fornecedores, compradores, financiadores, reguladores e instituições indicam papel, prioridade, período e estado, sem duplicar os registos de origem e com navegação nos dois sentidos."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 15/10/2026 — incremento de classificação multidimensional em QA: Relações tipadas de uma oportunidade com cluster, projeto e território recuperadas; múltiplos atores empresariais não cadastrados nem inventados. | 15/10/2026 — Tempo autorizou e foi disponibilizada a candidata classificacao-multidimensional-QA-64ab05e20b95 DOC01: 17 fontes/174 build, backup/restauro fresco, cache de dados preservada e reversão compatível. Recorte parcial; restantes limites conservados. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Associação tipada com cluster e recuperação do mesmo anúncio demonstradas; múltiplos atores e navegação bidirecional integral não foram demonstrados neste recorte. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Backup/restauro fresco 295 tabelas/31 sequências/2341 ficheiros/29 documentos; clone arrancou em leitura. Conferência operacional de GET/assets e área privada pela conta 2, sem guardar. Dados, papéis e histórico iguais; não encerra a cláusula integral.","[APIEX-SWOT-20261110] Competitividade pública aprovada reutilizada na SWOT contextual privada; versões consultadas conservadas e alteração/retirada sinaliza revisão sem apagar conclusões. Não declara todas as cláusulas de clusters satisfeitas. Restam instalação deste delta e visual; períodos/regimes não mapeados continuam indeterminados. Recepção electrónica APIEX não é requisito actual nem bloqueio. Restantes critérios originais mantidos. | Histórico anterior preservado: Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada. | Disponibilização DOC01 executada. Limitação operacional concreta: Editor no ativo: não demonstrado nesta conferência. O utilizador informou não ter acesso à conta de Promotora interna Aurora Chachuaio. A sessão efetiva Osmane Nala, conta 2, recebeu 403 em GET /minhas-oportunidades/create; não existe elevação operacional ativa. Os papéis Promotor/Validador dessa conta permanecem atribuídos; as funções de autorização v1 conferem exatamente com a versão anterior à entrega. Existem seis oportunidades legadas e nenhuma do workflow de promotor no ativo. A mensagem 403 genérica não expõe o motivo; o diagnóstico fica registado, sem alterar permissões, credenciais ou acrescentar uma correção fora do pacote autorizado. Mantêm-se as provas funcionais QA aceites do editor.; limites do critério integral: Relações tipadas de uma oportunidade com cluster, projeto e território recuperadas; múltiplos atores empresariais não cadastrados nem inventados. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Recorte QA concluído; disponibilização deste incremento exige decisão específica. Associação tipada com cluster e recuperação do mesmo anúncio demonstradas; múltiplos atores e navegação bidirecional integral não foram demonstrados neste recorte. As quatro outras lacunas conservam o seu estado; provas aceites não se repetem. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Recuperação UUID no ativo não observada: conta 2 sem anúncio próprio; dois rascunhos pertencem a outro titular. Não criar dados nem alargar acesso para preencher esta limitação. Cadeia sem caso positivo, sem ensaio volumétrico e limite do payload sintético da reversão mantêm-se. Outras quatro lacunas inalteradas.","OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.","Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: A autorização base foi executada. Suplemento negocios-compilacao-nome-QA-7ef0facd0e27, zero fontes/161 build para título InvesteMoz, aguarda autorização específica por ter novos hashes de build. Não reabrir QA funcional aceite. | 16/10/2026 — fecho operacional consolidado: Autorizações base e do suplemento executadas. Saldo operacional zero. Não classificar anúncios reais nem divulgar relações. Limites QA e ausência de UUID próprio para observação no ativo conservados; outras quatro lacunas inalteradas.",Incremento parcial disponibilizado; aceitação QA preservada e lacunas integrais delimitadas,"Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: 10–16 h era a estimativa inicial agora executada neste recorte. Saldo QA zero para a cobertura demonstrada. Operação futura estimada 90–180 min após autorização, partilhada pelo lote, não somar por requisito.","[APIEX-SWOT-20261110] outputs/investment-preparation-20261110/verification.json e artefactos sintéticos; seis casos API/211asserções,16frontend dirigidos, tipos/análise/lint. outputs/entrega-apiex-swot-20261110.zip, base7476dc34, sem migrations. Manual e saldo no início dos registos existentes. | Histórico anterior preservado: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | outputs/investmoz-classificacao-multidimensional-QA-20261015/RELATORIO-QA.md; HTTP-DELTA-QA.json (44); SERVICOS-DELTA-QA.json (22); REVERSAO-COMPAT-QA.json (6); INTERFACE-QA.json | outputs/investmoz-classificacao-ativacao-20261015/RELATORIO-ENTREGA.md; RECIBO-FINAL.json; FRESH-BACKUP.json; ARRANQUE-CLONE-RESTAURADO.json; FONTES-COMPILACAO.json; HTTP-AFTER.json; PRESERVACAO-AFTER.json; INTERFACE-OPERACIONAL.json | outputs/investmoz-negocios-classificacao-QA-20261016/RELATORIO-QA.md; HTTP-QA.json (36/50 HTTP); SCOPES-QA.json (10); INTERFACE-QA.json; REVERSAO-APOS-EDICAO-ANTERIOR.json; PRESERVACAO-FINAL.json; MANIFESTO.json | outputs/investmoz-negocios-classificacao-ativacao-20261016/RELATORIO-ENTREGA.md; AUTORIZACAO-TEMPO.json; FRESH-BACKUP.json; ARRANQUE-CLONE-RESTAURADO.json; TROCA.json; HTTP-AFTER.json; PRESERVACAO-APOS-AUTENTICACAO.json; INTERFACE-OPERACIONAL.json; RECIBO-FINAL.json | outputs/investmoz-negocios-classificacao-ativacao-20261016/RELATORIO-FINAL.md; AUTORIZACAO-EXTENSAO-NOME.json; FRESH-BACKUP-NOME.json; ARRANQUE-CLONE-NOME.json; TROCA-NOME.json; HTTP-APOS-NOME.json; PRESERVACAO-APOS-NOME.json; INTERFACE-NOME-ATIVO.json; RECIBO-CONSOLIDADO.json",oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada, | management_draft.canonical.relations/enterprise_size; workflow_context.classification_decisions/publication.classification/canonical_items; mestres existentes por ID; sem migrations. | /negocios: existing_business_revisions.snapshot.context.multidimensional; mesmo UUID e payload principal intacto; decisões por relação/evidência; snapshot de divulgação separado.," | Recuperação noutra sessão, nove relações/quatro dimensões, evidência/decisão por hash, exclusão privada, filtros/map matched_count, reversão compatível. Publicação é fixture sintético; transição editorial aceite não repetida. | Clone principal publicado/v26, referência publicada/v12 intacta; recuperação/validação/divulgação e filtros dirigidos; edição posterior pelo código anterior preserva o suplemento; ver relatório para fixture secundário sintético.",Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,, RF-CLU-003,Representar a cadeia de valor e identificar lacunas de investimento.,"upgrade v4 SHA f0b9815…; p. 517; requirements-audit.csv Pedido expresso da Tempo, 23/10/2026, nesta retoma: corrigir integração de complementos no percurso actual, com identidade, cadeia de valor, localização e relações documentadas.",cartografia/relações,/api/v1/geo/drafts; /api/v1/geo/search; /api/v1/geo/sources; /api/v1/geo/sources/{id}/transitions; /api/v1/geo/territories; /api/v1/geo/territories/{id}; /api/v1/geo/territories/{id}/transitions; /api/v1/geo/territories/{type}/{id}; /api/v1/geo/{collection}; /api/v1/investment/compare; /api/v1/investment/export; /api/v1/investment/favourites/{id},"InvestmentGeography, campos TerritoryFields/ProvinceSelect, geo_locations/geo_geometries e importador autenticado. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","28/10/2026: base comparativa privada carregada e código servido6d147693;435observações distintas em Gurué,237repetições fora da contagem;serviço aplicado com perfil existente,anónimo401. Conferência visual pendente. Disponibilidade histórica preservada: 28/10/2026: consulta/comparação pelas listas apenas em QA; activo mantém569a1cd7, uso ainda não demonstrado. Registo anterior preservado: Percurso proactivo instalado em9fda6d6e,incluindo56c0c6a7;análises/pilotos reais permanecem privados,sem publicação automática. | Histórico preservado: 27/10 identidade proactivaQA 3439f350,sem instalação ou análise económica real;L8 14360748 preservada. | Histórico preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: 11 fontes e 161 ficheiros de build entregues; sem migrations, grants, classificações reais ou divulgação. Catálogo público mantém zero negócios e seis oportunidades. Suplemento de compilação para repor InvesteMoz no título preparado apenas em QA, pendente de decisão. | 16/10/2026 — fecho operacional consolidado: negocios-classificacao-QA-53311df2f59c e suplemento de nome negocios-compilacao-nome-QA-7ef0facd0e27 autorizados e entregues: mesmas 11 fontes, 161 build, título InvesteMoz observado. Sem escrita de negócio/classificação/divulgação. | 28/10/2026:destino569a1cd7/teste_investidor;consumidor proactivo com evidência/oferta manual,sem consulta destas listas identificada. Não extrapolar cadastros/contagens para ausência de mercado ou perda noutros ambientes.","Caso CB-METROLOGIA-20261027: ficha401→dossier894343c7-c33d-452e-a6a5-b6675f77ee23; cinco evidências recuperadas e relatório; consulta anónima recusada. Provas técnicas1afab4a2 reutilizadas. | Histórico preservado: 14API/139asserções;7relatório;UI Laravel login/MFA,criar/guardar/recuperar/editar,divulgar sóQA,anónimo,dossier,recarregar/retomar;tipos/build. | Histórico preservado: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.","28/10/2026: instalado6d147693;delta técnico conferido;conferência visual autenticada pendente;requisito amplo continua parcial. Histórico anterior preservado: 28/10/2026: integração da oferta demonstrada em QA/Gurué, ainda sem instalação; cobertura nacional parcial. Estado anterior do restante requisito preservado: Uso das listas como base comparativa: não demonstrado — conferência28/10/2026;percurso proactivo entregue e provas anteriores preservados. | Estado anterior preservado: Parcial — primeiro caso com fontes reais aplicado em QA; necessidade comercial ainda hipótese, não publicado. | Histórico preservado: Parcial — primeiro percurso proactivo editorial demonstrado emQA;demais cláusulas originais conservadas. | Histórico preservado: Sem evidência suficiente | Registo da linha entregue (continuacao): Parcial — primeiro caso com fontes reais aplicado em QA; necessidade comercial ainda hipótese, não publicado. | Histórico preservado: Parcial — primeiro percurso proactivo editorial demonstrado emQA;demais cláusulas originais conservadas. | Histórico preservado: Sem evidência suficiente","28/10/2026: instalação/carregamento concluídos;restam conferência visual autenticada e pendências nacionais/comerciais delimitadas.361464observações não são empresas únicas;147165repetições não inflam contagens/comparações. Lacuna histórica preservada: 28/10/2026: ligado o catálogo interno à comparação e ao mesmo dossier em QA. Restam instalação, correspondência territorial/classificação completa, reconciliação das identidades e confirmação comercial actual; ausência de registos é informação insuficiente. Pendência anterior conservada no seu âmbito: Demonstrar consumidor: pesquisar→selecionar→gravar→nova sessão→renderizar limite correto; conservar pai, código e fonte. Critério individual original preservado; cobertura atual ainda não individualizada. | 28/10/2026: não demonstrados carregamento/classificação e consumidor destas listas para oferta→comparação→necessidade→oportunidade. Descrição manual de oferta ou entrega do percurso não encerram esse uso.","QA408/581INE; ativo0geometrias;173correspondências por nome/edição/pai, Mandie ambíguo. Publicação é ação separada. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-CLU-003: O cluster apresenta fornecimento, produção, transformação, logística, comercialização, serviços e mercados; cada lacuna possui localização, capacidade necessária, justificação, estado e chamada para acção.",P2,RF-CLU-003: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-CLU-003,1,"[{""id"":""RF-CLU-003"",""pedido"":""Representar a cadeia de valor e identificar lacunas de investimento."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 517; requirements-audit.csv""],""aceitacao"":""O cluster apresenta fornecimento, produção, transformação, logística, comercialização, serviços e mercados; cada lacuna possui localização, capacidade necessária, justificação, estado e chamada para acção."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""cartografia/relações""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.geo_locations: 1990 registos; public.geo_geometries: 0 registos; public.project_locations: 28 registos; public.cluster_projects: 13 registos; public.opportunity_projects: 0 registos; public.opportunity_clusters: 0 registos,"Interface autónoma entregue no âmbito demonstrado. Songo pendente de respostas externas;Gurué mantém hipótese agrícola. Instalação não confirma procura,contrato ou sustentabilidade. | Histórico preservado: 27/10: autonomia pela interface demonstrada com perfil QA autorizado: resposta anexada/recuperada,ideia revista e mesmo dossier actualizado sem publicação. Songo/Gurué intactos;sem sessão de formação real presumida. | Histórico preservado: 27/10: Songo pronto para prospecção,privado e pendente de respostas;ficha da equipa disponível. Novo piloto Gurué402/contexto1:apoio à colheita e qualidade do chá como hipótese,sem procura ou viabilidade confirmadas. | Histórico preservado: Caso regional401v3:Vulcan,EDM eNacalaLogistics são prospectos adicionais;ligação accionistaVulcan/Nacala preservada;projecto futuro fora da base. O responsável confirmou ausência de dados comerciais;sustentabilidade não demonstrada. | Histórico preservado: Cahora Bassa: actividade HCB documentada; calibração planeada2026; apoio associado no Songo como hipótese. Prazos do plano passados; sem adjudicação, ausência de oferta ou viabilidade inferidas. | Histórico preservado: Reutiliza rascunhos/auditoria/promoção/catálogo/dossier/contextos existentes;sem novos mestres ou permissões. Equipa interna prepara sem promotor real conhecido;outros âmbitos preservados. | Histórico preservado: A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 15/10/2026 — incremento de classificação multidimensional em QA: Vínculo à cadeia existente e etapa documentada disponíveis; cenário têxtil apenas sintético, sem empresas ou capacidades reais. Identificação económica integral de lacunas não demonstrada. | 15/10/2026 — Tempo autorizou e foi disponibilizada a candidata classificacao-multidimensional-QA-64ab05e20b95 DOC01: 17 fontes/174 build, backup/restauro fresco, cache de dados preservada e reversão compatível. Recorte parcial; restantes limites conservados. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Preparação do contrato/filtro de cadeia disponível; caso positivo não demonstrado porque não existe cadeia consultável na QA. Cadeia integral e lacunas de investimento continuam abertas. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Backup/restauro fresco 295 tabelas/31 sequências/2341 ficheiros/29 documentos; clone arrancou em leitura. Conferência operacional de GET/assets e área privada pela conta 2, sem guardar. Dados, papéis e histórico iguais; não encerra a cláusula integral. | 16/10/2026 — mapa prévio de referências económicas, QA sem implementação: Leitura READ ONLY de dois clones: destino restaurado com 12 setores/6 raízes editoriais/8 clusters/zero elos e ligações; QA aceite tem ainda três níveis sintéticos em setores distintos. UNIQUE economic_activities_sector_uq impede várias atividades por setor; escolha técnica, não regra identificada da Tempo. Fontes oficiais aceites preservadas, sem revalidação. | 16/10/2026 — DOC01 do mapa económico, revisão documental sem autorização de execução: 600 versus 579 é divergência documental a reconciliar, não escolha arbitrária da Tempo. Recomendações recebidas: limitar QA aos cinco nós do exemplar por hash/versão; divisão 01 como subsector e 01120 como atividade com cinco níveis; CLU-01 como modelo editorial. Não se declara conformidade normativa integral nem execução/aceitação QA. [RECONCILIACAO-43-20261019] 4: Gestão /management/economic-references/lot-01 ainda exige gate global. Catálogo restante requer reconciliação por identidade/edição e lote, não inferência por contagens.","Conferência desta entrega: Gurué→consultar oferta→comparar ideia→guardar→recuperar no mesmo dossier,com fonte/data/incertezas;435observações não empresas únicas,listas internas,cobertura parcial,hipótese. Não confundir com pendências nacionais amplas anteriores. Histórico preservado: 28/10/2026: conferência visual autenticada do percurso instalado;correspondência nacional parcial(205608semterritório único,336sóprovíncia,82864semCAE,113880divergências de denominação/identificador);confirmar oferta/procura/viabilidade actual sem inferir mercado desocupado. Critérios históricos preservados no âmbito restante: 28/10/2026: conferir entrega activa;reconciliar205608 observações sem território único,336 só com província,82864 sem designação CAE e113880 com divergências de denominação/identificador;confirmar oferta/procura actual sem inferir mercado desocupado;uso real da equipa pendente. Restantes critérios anteriores preservados: Concluir apenas com evidência económica local por caso;provar participação/contrato/acesso quando alegados. Automatização e quantificação futura dependem de dados/pressupostos explícitos;sem fecho global deste requisito. | Histórico preservado: Demonstrar consumidor: pesquisar→selecionar→gravar→nova sessão→renderizar limite correto; conservar pai, código e fonte. Critério individual original preservado; cobertura atual ainda não individualizada. | Disponibilização DOC01 executada. Limitação operacional concreta: Editor no ativo: não demonstrado nesta conferência. O utilizador informou não ter acesso à conta de Promotora interna Aurora Chachuaio. A sessão efetiva Osmane Nala, conta 2, recebeu 403 em GET /minhas-oportunidades/create; não existe elevação operacional ativa. Os papéis Promotor/Validador dessa conta permanecem atribuídos; as funções de autorização v1 conferem exatamente com a versão anterior à entrega. Existem seis oportunidades legadas e nenhuma do workflow de promotor no ativo. A mensagem 403 genérica não expõe o motivo; o diagnóstico fica registado, sem alterar permissões, credenciais ou acrescentar uma correção fora do pacote autorizado. Mantêm-se as provas funcionais QA aceites do editor.; limites do critério integral: Vínculo à cadeia existente e etapa documentada disponíveis; cenário têxtil apenas sintético, sem empresas ou capacidades reais. Identificação económica integral de lacunas não demonstrada. | 16/10/2026 — negocios-classificacao-QA-53311df2f59c, exclusivamente QA: Recorte QA concluído; disponibilização deste incremento exige decisão específica. Preparação do contrato/filtro de cadeia disponível; caso positivo não demonstrado porque não existe cadeia consultável na QA. Cadeia integral e lacunas de investimento continuam abertas. As quatro outras lacunas conservam o seu estado; provas aceites não se repetem. | 16/10/2026 — disponibilização autorizada de negocios-classificacao-QA-53311df2f59c: Recuperação UUID no ativo não observada: conta 2 sem anúncio próprio; dois rascunhos pertencem a outro titular. Não criar dados nem alargar acesso para preencher esta limitação. Cadeia sem caso positivo, sem ensaio volumétrico e limite do payload sintético da reversão mantêm-se. Outras quatro lacunas inalteradas. | 16/10/2026 — mapa prévio de referências económicas, QA sem implementação: Preparar manifesto fechado, adaptar cardinalidade/hierarquia sem copiar mestres, demonstrar preview/idempotência/recusas e caso positivo de cadeia nos dois consumidores; recuperação, decisão independente, divulgação expressa, filtros AND e reversão após edição pelo código anterior com compatibilidade. Nada demonstrado/encerrado por este mapa. | 16/10/2026 — DOC01 do mapa económico, revisão documental sem autorização de execução: Implementação/provas funcionais e operacionais apenas após decisão QA. Incluir HTTP com esquema ausente, importação privada, publicação e retirada distintas, recusas de identidade/MFA/CSRF/hash, replay/concorrência e motivos visíveis. Reversão após uso é parcial e compatível: schema/dados, seis fontes funcionais, manifesto e build de compatibilidade coerente permanecem; provar edição posterior. Caso positivo de cadeia segue pendente nos dois consumidores. @@ -5649,16 +5649,16 @@ B7-LEGACY-BUSINESS-PROFILES, B7-FINITE-PROGRESS","FILTERS: Filas ensaiadas: cate [B7 três funções QA] Visual cenário7L4 aberto. Ponte sócompany_sale, grantorgrestrito não ampliado por texto; mandato é referência privada, não upload/scan. Regra v1 de três funções alinhada àTempo; recusas/dupla de pessoas em provas anteriores são fase antiga, não exigência final.","2–8 h de reconciliação/ensaio por consumidor agrupado, pressupondo dados sintéticos/perfis preparados. Alteração: estimar após reprodução concreta; variante integral pode exceder esta faixa.",,, AUD-DESK-01,Criar/editar/recuperar dossier e pedido com feedback,"Pedido direto 09/10/2026, auditoria §1–4; fontes específicas descritas em relatorio-executivo.md | Pedido direto 09/10/2026, lote 3: ações por perfil, países/seletores, geometria por consumidor, navegador, ativação separada e PDFs diretos; sem jornadas educativas novas -[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] SEG-bf26caee-p114 §1.0.2; SEG-bf26caee-p124 §1.0.2; SEG-bf26caee-p129 §1.0.2; SEG-bf26caee-p134 §1.0.2; SEG-bf26caee-p469 §3.2; SEG-bf26caee-p470 §3.2; SEG-bf26caee-p471 §3.2; SEG-bf26caee-p472 §3.2; SEG-bf26caee-p473 §3.2; SEG-bf26caee-p474 §3.2; SEG-bf26caee-p475 §3.2; SEG-bf26caee-p476 §3.2; SEG-bf26caee-p477 §3.2; SEG-bf26caee-p618 §6",Balcão/orientação,/balcao-virtual/painel; /balcao-virtual/dossiers/{id}; /balcao-virtual/pedidos/{id},"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.","[CONCLUSAO-INTEGRAL-20261110] Fontes até ff726e57 na homologação teste-investidor. Não confundir instalação do código com nova concessão, habilitação nominal ou prova visual integral. | Histórico anterior preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.","outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.",Implementado parcialmente,"03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: Gravacao, recuperacao e contexto da oportunidade nos recortes aceites entregues em 6b544548, 55136b44 e 8036b9b0. Sem falha conhecida aberta nesse lote; fechos operacionais/documentais nao demonstrados continuam no componente 25 do inventario, sem serem declarados concluidos.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","AUD-DESK-01: Criar uma vez, guardar versão, recuperar em sessão nova, corrigir 422, transições e mensagem explícitas",P1,"AUD-DESK-01: Relatórios históricos mantidos; estado ativo apurado por leitura nesta auditoria +[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] SEG-bf26caee-p114 §1.0.2; SEG-bf26caee-p124 §1.0.2; SEG-bf26caee-p129 §1.0.2; SEG-bf26caee-p134 §1.0.2; SEG-bf26caee-p469 §3.2; SEG-bf26caee-p470 §3.2; SEG-bf26caee-p471 §3.2; SEG-bf26caee-p472 §3.2; SEG-bf26caee-p473 §3.2; SEG-bf26caee-p474 §3.2; SEG-bf26caee-p475 §3.2; SEG-bf26caee-p476 §3.2; SEG-bf26caee-p477 §3.2; SEG-bf26caee-p618 §6",Balcão/orientação,/balcao-virtual/painel; /balcao-virtual/dossiers/{id}; /balcao-virtual/pedidos/{id},"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.","[APIEX-SWOT-20261110] Homologação7476dc34 instalada; preparação APIEX e SWOT no dossier existente implementadas em QA, não instaladas. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Fontes até ff726e57 na homologação teste-investidor. Não confundir instalação do código com nova concessão, habilitação nominal ou prova visual integral. | Histórico anterior preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.","outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.",Implementado parcialmente,"03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: Gravacao, recuperacao e contexto da oportunidade nos recortes aceites entregues em 6b544548, 55136b44 e 8036b9b0. Sem falha conhecida aberta nesse lote; fechos operacionais/documentais nao demonstrados continuam no componente 25 do inventario, sem serem declarados concluidos.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","AUD-DESK-01: Criar uma vez, guardar versão, recuperar em sessão nova, corrigir 422, transições e mensagem explícitas",P1,"AUD-DESK-01: Relatórios históricos mantidos; estado ativo apurado por leitura nesta auditoria [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Fases0–4 do §2 são releases de desenvolvimento, não as cinco fases/19 etapas. Agrupamentos §3.3.1 não convertem categorias. Papéis genéricos §3.1 não concedem permissão. §6 contém estados documentais, não prova do ambiente atual. §7p811 não reabre credibilidade das fontes oficiais. SLA/ofertas/competências continuam decisões separadas. Disponibilidade do guia/modelos só por URL/exemplar verificado.",AUD-DESK-01; SEG-bf26caee-p114; SEG-bf26caee-p124; SEG-bf26caee-p129; SEG-bf26caee-p134; SEG-bf26caee-p469; SEG-bf26caee-p470; SEG-bf26caee-p471; SEG-bf26caee-p472; SEG-bf26caee-p473; SEG-bf26caee-p474; SEG-bf26caee-p475; SEG-bf26caee-p476; SEG-bf26caee-p477; SEG-bf26caee-p618,15,"[{""id"": ""AUD-DESK-01"", ""pedido"": ""Criar/editar/recuperar dossier e pedido com feedback"", ""fontes"": [""Pedido direto 09/10/2026, auditoria §1–4; fontes específicas descritas em relatorio-executivo.md"", ""Pedido direto 09/10/2026, lote 3: ações por perfil, países/seletores, geometria por consumidor, navegador, ativação separada e PDFs diretos; sem jornadas educativas novas""], ""aceitacao"": ""Criar uma vez, guardar versão, recuperar em sessão nova, corrigir 422, transições e mensagem explícitas"", ""estado"": ""parcial"", ""variantes"": ""Relatórios históricos mantidos; estado ativo apurado por leitura nesta auditoria"", ""modulo"": ""Balcão/orientação"", ""incremento_visual_qa_20261010"": {""atualizado_em"": ""2026-10-10T17:57:54.604301+00:00"", ""ambito"": ""QA18097/55441 exclusivamente"", ""evidencia"": ""Chromium desktop18: dois dossiers próprios A/B criados, guardados e recuperados noutra sessão; cinco fases e19 etapas preservadas. A dispensaS10; B espera externaS10 comS02 independente. Plano contextual guardado/reaberto, resultados devolvidos e recuperados no dossier: ponto de equilíbrio20unidades; défice A0/B70000MZN. Balcão preparado comoDRAFT, paísesPT/origemZA guardados; tarefa interna atribuída/assumida/iniciada/concluída no UI pelo gestor14 e recuperada pelo investidor. Gestor sem acesso a resultados financeiros privados; QA23 dossier403/rascunho404; sem mistura entre projetos. investor-ab-chromium-20261010.json e visual-persistence-qa.json. C80: bloquear edição/avanço enquanto GET do rascunho não terminou; diagnóstico guardado, correção e resposta deliberadamente atrasada no Chromium demonstrados em portal-simulator-loading-visual-qa.cjs/recibo."", ""lacuna_atual"": ""A/B completos para o cenário interno aprovado, em desktop isolado; Balcão apenas preparaçãoDRAFT, não submissão/decisão externa. Restantes contratos, documentos, fiscalidade/parâmetros legais, etapas externas e todos os consumidores/perfis não encerrados. Móvel A/B teve achados anteriores: correção comum verificada com dossier próprioQA21, sem substituir repetição final A/B móvel ou aceitação manual."", ""estado_global_preservado"": ""parcial"", ""ativacao"": false}, ""incremento_ab_paises_20261010"": {""registado_em"": ""2026-10-10T19:30:54.107335+00:00"", ""ambito"": ""QA somente"", ""criterios_ab_internos"": ""concluído e demonstrado em QA"", ""evidencia"": ""A/B internos concluídos em QA: provas anteriores de criação/gravação/nova sessão/permissões compostas com investor-ab-remaining-chromium-20261010.json e investor-ab-remaining-persistence-qa.json. A terra/financiamento=no, S10 dispensada, equilíbrio20, necessidade0MZN; B=yes, S10waiting_external, equilíbrio20, necessidade70000MZN. Resultado/draft/dossier corretos, BalcãoDRAFT com título do dossier/resumo da ferramenta/PT/ZA, tarefaS02done posterior à esperaS10 e preparação independente habilitada; cinco fases/19etapas preservadas. Seis verificações390/320px sem overflow ou violações axe. C88 ação explícita recuperou descrição vazia de A, guardando revisão antiga/fonte(v3)/auditoria. Sem recriar dossiers/resultados/tarefas ou repetir C37. Ativo não alterado."", ""criterios_restantes"": ""A/B demonstram preparação DRAFT e recuperação. Restam submissão quando aplicável, 422 por campo, protocolo/recibo, mensagens, transições e operações documentais por tipo/perfil. DRAFT não equivale a submissão ou decisão externa."", ""ativacao"": false}, ""incremento_consumidores_20261010"": {""at"": ""2026-10-10T20:48:57.129953+00:00"", ""evidencia"": ""consumer-stats-chromium-20261010.json: pedido separado no dossierA, PT/ZA, PUT303→submitted/protocolo→nova sessão→gestãoZA0→1; replay200 conserva protocolo/v2. SQL:uma revisão/um evento submitted. PedidosA/B originais continuamDRAFT. ProvaSQL:consumer-final-persistence-qa.json; QA somente, sem instalação/ativação."", ""criterios_restantes"": ""Preparação A/B e submissão de pedido QA separado com protocolo/recuperação/replay sem duplicação demonstrados. Restam os outros serviços/condições, mensagens/transições, documentos e decisões externas aplicáveis; não repetir A/B ou C37."", ""active"": false}}, {""id"": ""SEG-bf26caee-p114"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""1.0.2"", ""locator"": ""word/document.xml#p114"", ""first_paragraph"": 114, ""last_paragraph"": 118, ""text"": ""Artigo 19 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Obrigações especiais do empresário | INV-001; INV-002; INV-007; §§1.6, 3.2 e 6.1 | Checklist transversal que distingue firma, escrituração, registo e prestação de contas das licenças sectoriais."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p124"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""1.0.2"", ""locator"": ""word/document.xml#p124"", ""first_paragraph"": 124, ""last_paragraph"": 128, ""text"": ""Secção III do Título II, Capítulo II | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Escrituração mercantil | INV-002; INV-007; §§1.6, 6.1 e 7.3 | Requisito documental e de governação ligado à organização da actividade; a numeração artigo a artigo permanece dependente de conferência integral."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p129"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""1.0.2"", ""locator"": ""word/document.xml#p129"", ""first_paragraph"": 129, ""last_paragraph"": 133, ""text"": ""Secção IV do Título II, Capítulo II | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Registo comercial | INV-001; INV-002; INV-007; §§1.6, 1.8 e 6.1 | Formalidade de registo e publicidade tratada separadamente do licenciamento sectorial, com entidade, acto e competência territorial."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p134"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""1.0.2"", ""locator"": ""word/document.xml#p134"", ""first_paragraph"": 134, ""last_paragraph"": 138, ""text"": ""Secção V do Título II, Capítulo II | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Balanço e prestação de contas | INV-002; INV-007; §§1.6, 6.1 e 7.3 | Obrigação empresarial geral ligada ao checklist e à governação documental; não constitui autorização de actividade."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p469"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p469"", ""first_paragraph"": 469, ""last_paragraph"": 469, ""text"": ""Registar-se ou iniciar uma consulta anónima."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p470"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p470"", ""first_paragraph"": 470, ""last_paragraph"": 470, ""text"": ""Definir sector, localização, dimensão, capital previsto e objectivo do investimento."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p471"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p471"", ""first_paragraph"": 471, ""last_paragraph"": 471, ""text"": ""Consultar negócios similares, procura potencial, fundos e oportunidades disponíveis."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p472"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p472"", ""first_paragraph"": 472, ""last_paragraph"": 472, ""text"": ""Seleccionar a forma societária com apoio de um comparador orientado por perguntas."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p473"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p473"", ""first_paragraph"": 473, ""last_paragraph"": 473, ""text"": ""Criar o projecto e receber um roteiro personalizado de constituição, licenciamento, fiscalidade e operação."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p474"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p474"", ""first_paragraph"": 474, ""last_paragraph"": 474, ""text"": ""Preencher formulários, anexar evidências e gerar documentos normalizados."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p475"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p475"", ""first_paragraph"": 475, ""last_paragraph"": 475, ""text"": ""Submeter pedidos e acompanhar estado, pendências, prazos e entidade responsável."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p476"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p476"", ""first_paragraph"": 476, ""last_paragraph"": 476, ""text"": ""Executar simulações fiscais e contributivas, guardar cenários e exportar resultados."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p477"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""3.2"", ""locator"": ""word/document.xml#p477"", ""first_paragraph"": 477, ""last_paragraph"": 477, ""text"": ""Receber alertas e concluir a entrada em operação."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}, {""id"": ""SEG-bf26caee-p618"", ""source"": ""\\\\mac\\home\\Documents\\TEMPO\\Portal Tempo\\Servicos Tempo\\Relatorios\\novos\\segmentar processos v1.docx"", ""sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""section"": ""6"", ""locator"": ""word/document.xml#p618"", ""first_paragraph"": 618, ""last_paragraph"": 623, ""text"": ""INV-002 | Painel com requisitos, documentos, pendências e histórico | Sim | Parcial | QA | Completar etapas, licenças e operação e demonstrar o percurso integral, sem reiniciar actividades já comprovadas."", ""document_state_not_acceptance"": true, ""requested_exemplar_identity_pending"": true}]","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] A /B desktop demonstrados por ações visíveis, incluindo ferramenta, resultado, apoio e acompanhamento. | [Visual QA 10/10/2026] A/B desktop demonstrados por ações visíveis, incluindo ferramenta, resultado, apoio e acompanhamento. | [QA A/B e países 10/10/2026] Chromium, contas QA autorizadas; critérios restantes A/B e apresentação dos dados por formulário demonstrados; screenshots/DOM no recibo específico. | [QA consumidores 10/10/2026] consumer-stats-chromium-20261010.json: pedido separado no dossierA, PT/ZA, PUT303→submitted/protocolo→nova sessão→gestãoZA0→1; replay200 conserva protocolo/v2. SQL:uma revisão/um evento submitted. PedidosA/B originais continuamDRAFT. ProvaSQL:consumer-final-persistence-qa.json; QA somente, sem instalação/ativação.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] Respostas guardadas por método /rota/status , sem corpos de autenticação; QA23 negado 403 /404. | [Visual QA 10/10/2026] Respostas guardadas por método/rota/status, sem corpos de autenticação; QA23 negado403/404. | [QA A/B e países 10/10/2026] Respostas UI e GET de recuperação com destino QA verificado; evidências vinculadas a IDs do mesmo dossier/formulário. Regresso ao Balcão DRAFT, sem decisão externa. | [QA consumidores 10/10/2026] Pedidos de interface e GET de recuperação no servidor18097, header QA conferido antes de escrita; ver respostas/perfis no recibo por consumidor.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] Casos, aplicabilidade, ferramenta, resultado, pedido DRAFT e tarefa guardados pelo UI; originais /histórico preservados. | [Visual QA 10/10/2026] Casos, aplicabilidade, ferramenta, resultado, pedidoDRAFT e tarefa guardados pelo UI; originais/histórico preservados. | [QA A/B e países 10/10/2026] Tabelas/entidades existentes; revisão e proveniência de C88; cinco intakes sintéticos (quatro países + um C90), sem duplicar dossiers ou contas; nenhuma escrita ativa. | [QA consumidores 10/10/2026] Entidades/IDs existentes e uma fixture sintética por caso; SQLQA READONLY liga estados, versões, atores, país/origem e hashes. Sem novas tabelas, contas ou escrita ativa.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] Logout e contexto novo: dossier, resultados, tarefa e inputs próprios da ferramenta recuperados para cada A /B. | [Visual QA 10/10/2026] Logout e contexto novo: dossier, resultados, tarefa e inputs próprios da ferramenta recuperados para cada A/B. | [QA A/B e países 10/10/2026] Dossiers, resultados e pedidos A/B existentes; perfil/negócio/fundiário noutra sessão; protocolos públicos recuperados pela gestão autorizada. | [QA consumidores 10/10/2026] Nova sessão nos consumidores descritos; SQL confirma relações, uma submissão após repetição e preservação dos critérios originaisA/B.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] 20 unidades; défice financeiro A 0 /B70000MZN. Ferramenta e resultado ligados ao dossier correto, sem aprovação /score inventados. | [Visual QA 10/10/2026] 20unidades; défice financeiro A0/B70000MZN. Ferramenta e resultado ligados ao dossier correto, sem aprovação/score inventados. | [QA A/B e países 10/10/2026] A=0/B=70000MZN e equilíbrio20 no dossier correto; preparaçãoBalcão, pendênciaS10 e tarefaS02done; PT/ZA, filtros independentes e estatística positiva; página de entradaC90 distinta. | [QA consumidores 10/10/2026] consumer-stats-chromium-20261010.json: pedido separado no dossierA, PT/ZA, PUT303→submitted/protocolo→nova sessão→gestãoZA0→1; replay200 conserva protocolo/v2. SQL:uma revisão/um evento submitted. PedidosA/B originais continuamDRAFT. ProvaSQL:consumer-final-persistence-qa.json; QA somente, sem instalação/ativação.","Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada | [Visual QA 10 /10/2026 ] Subcritérios atualizados por prova própria; estado global, ID s, fontes, versões e decisões preservados. | [Visual QA 10/10/2026] Subcritérios atualizados por prova própria; estado global, IDs, fontes, versões e decisões preservados. | [QA A/B e países 10/10/2026] Critérios internos A/B concluídos emQA; restantes critérios explicitados por requisito. Estados globais e todas as referências/versões de origem preservados. | [QA consumidores 10/10/2026] Critérios específicos demonstrados; estado global e referências/versões preservados. Não repetir A/B/C37 ou outros critérios aceites. -[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Pedidos relacionados sem novo inventário/backlog paralelo; referência documental acrescentada, critérios anteriores preservados. Confirmar os bytes do v1(3) antes do fecho documental.",parcial,desk_cases: 1; desk_requests: 0; desk_institutional_links: 0; desk_messages: 0,"24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: Capacidades/provas específicas anteriores existem, mas o requisito agregado ainda tem os critérios restantes explicitados; fechos parciais preservados.","[CONCLUSAO-INTEGRAL-20261110] Núcleo do dossier/pedido/resultado, fecho pelo dono, pré-dossier e editor de versões já implementados; fontes até ff726e57 instaladas. Restam consumidores, parametrização transversal e camadas por fonte/âmbito, habilitação nominal só quando exigida e conferência dos recortes sem prova visual. | Histórico anterior preservado: 03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: A/B encerrados no âmbito definido. Restam restantes serviços, documentos/mensagens, transições e perfis do Balcão; executar apenas critérios não demonstrados.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento; desk_payments/desk_documents/eventos cifrados e VerifiedDocumentBinary, mesma referência e declaração sem duplicação; VirtualDesk/assertOpen, autorização existente, closed_at, CRM/tasks e transição cancelled já existente","Decisão do proprietário de03/11 aplicada: o dono executa o fecho/reabertura integral; verificação do acesso efectivo e restante desenvolvimento preservados. Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.","03/11/2026: estado de fecho e autoridade de acesso são eixos distintos; leituras autorizadas continuam. Cancelamento existente não concede poder de fecho/reabertura de dossiers. MFA/perfis e regras CRM de próxima acção preservados. 03/11/2026: completar documentação de declaração manual existente é correcção do percurso já disponível; não confirma dinheiro, não altera alçadas/valores ou activa integração externa. Revisão competente/histórico conservados. Nota anterior: Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Completar critérios restantes sem repetir provas válidas,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,"[CONCLUSAO-INTEGRAL-20261110] Instalação ff726e57: outputs/reviewed-install-20261110/verification.json; fontes aceites e recibos anteriores reutilizados. Saldo por percurso no início de visao-consolidada-modulos.md. 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.",balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"[QA consumidores 10/10/2026] Preparação A/B e submissão de pedido QA separado com protocolo/recuperação/replay sem duplicação demonstrados. Restam os outros serviços/condições, mensagens/transições, documentos e decisões externas aplicáveis; não repetir A/B ou C37. | Antes da reconciliacao de estabilizacao de 24/10/2026: A/B encerrados no âmbito definido. Restam restantes serviços, documentos/mensagens, transições e perfis do Balcão; executar apenas critérios não demonstrados.","Serviço interno real e dono/responsável; primeiro pedido só com dados do utilizador | [Semântica QA 10/10/2026] Leitura ativaREADONLY10/10:020000eBalcão07/190000+08/120000instalados;030000não;040000não;09/190000prepare_investor_pathausente(ledger/2colunas/definição). QA03/04/09-190instalados;definição19etapaspublicada61000919-0000-4000-8000-000000000001 SHAe0acbc723cd3def7e415b2ef7a0173add08387c3cedabac9bb7b86409e4d25bf. 09/190000nãofoi substituída:continuanecessária paraativo e não se repeteQA. 030/040semdependênciaDDL190;190dependeBalcão/journeys/steps/questionnaire_versions;workflowusa020+030+040+tasks/catalogue. Planofuturo:visual/candidata→backup/restaurofrescos→códigoflagsfalse→030autenticada→040instalador/bootstrapautenticadosaindaemfalta→190apenasfaltantesvia/management/balcao-install→dadosreais/perfis→cartografiaprivadaidempotente→flagspercurso/oportunidades→publicaçãoseparada. 0fixturesQAnoativo;readytrueépreparação;semativaçãoautorizada;reversãodesativaflags/preservahistóricoourestaurabackupverificado,nãodropusado.",VirtualDesk; desk_cases/requests/messages; tarefas existentes,"Portal Audit Consumer Lot Test: 2 testes /124 asserções; phpunit-lote 3-final.xml; geometry-consumers-lote3.json : 361 limites reais recuperados em QA, zero divulgação pública; visual não demonstrado | [Semântica QA 10 /10/2026 ] Provasdeledger /colunas/definição : dashboard-active-readonly.json e opportunity-semantic-environment-qa.json ;preservação 18 coleções /MFA18/manifestoativo : profiles-v1-preservation-qa.json . | [Visual QA 10 /10/2026 ] Chromium desktop 18: dois dossiers próprios A /B criados, guardados e recuperados noutra sessão; cinco fases e 19 etapas preservadas. A dispensa S10 ; B espera externa S10 com S02 independente. Plano contextual guardado /reaberto , resultados devolvidos e recuperados no dossier: ponto de equilíbrio 20 unidades; défice A 0 /B70000MZN. Balcão preparado como DRAFT, países PT /origemZA guardados; tarefa interna atribuída /assumida/iniciada/concluída no UI pelo gestor 14 e recuperada pelo investidor. Gestor sem acesso a resultados financeiros privados; QA23 dossier 403 /rascunho404 ; sem mistura entre projetos. investor-ab-chromium-20261010.json e visual-persistence-qa.json . C80 : bloquear edição /avanço enquanto GET do rascunho não terminou; diagnóstico guardado, correção e resposta deliberadamente atrasada no Chromium demonstrados em portal-simulator-loading-visual-qa.cjs /recibo. | [Visual QA 10/10/2026] Chromium desktop18: dois dossiers próprios A/B criados, guardados e recuperados noutra sessão; cinco fases e19 etapas preservadas. A dispensaS10; B espera externaS10 comS02 independente. Plano contextual guardado/reaberto, resultados devolvidos e recuperados no dossier: ponto de equilíbrio20unidades; défice A0/B70000MZN. Balcão preparado comoDRAFT, paísesPT/origemZA guardados; tarefa interna atribuída/assumida/iniciada/concluída no UI pelo gestor14 e recuperada pelo investidor. Gestor sem acesso a resultados financeiros privados; QA23 dossier403/rascunho404; sem mistura entre projetos. investor-ab-chromium-20261010.json e visual-persistence-qa.json. C80: bloquear edição/avanço enquanto GET do rascunho não terminou; diagnóstico guardado, correção e resposta deliberadamente atrasada no Chromium demonstrados em portal-simulator-loading-visual-qa.cjs/recibo. | [QA A/B e países 10/10/2026] A/B internos concluídos em QA: provas anteriores de criação/gravação/nova sessão/permissões compostas com investor-ab-remaining-chromium-20261010.json e investor-ab-remaining-persistence-qa.json. A terra/financiamento=no, S10 dispensada, equilíbrio20, necessidade0MZN; B=yes, S10waiting_external, equilíbrio20, necessidade70000MZN. Resultado/draft/dossier corretos, BalcãoDRAFT com título do dossier/resumo da ferramenta/PT/ZA, tarefaS02done posterior à esperaS10 e preparação independente habilitada; cinco fases/19etapas preservadas. Seis verificações390/320px sem overflow ou violações axe. C88 ação explícita recuperou descrição vazia de A, guardando revisão antiga/fonte(v3)/auditoria. Sem recriar dossiers/resultados/tarefas ou repetir C37. Ativo não alterado. | [QA consumidores 10/10/2026] consumer-stats-chromium-20261010.json: pedido separado no dossierA, PT/ZA, PUT303→submitted/protocolo→nova sessão→gestãoZA0→1; replay200 conserva protocolo/v2. SQL:uma revisão/um evento submitted. PedidosA/B originais continuamDRAFT. ProvaSQL:consumer-final-persistence-qa.json; QA somente, sem instalação/ativação.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] Respostas guardadas por método /rota/status , sem corpos de autenticação; QA23 negado 403 /404. | [Visual QA 10/10/2026] Respostas guardadas por método/rota/status, sem corpos de autenticação; QA23 negado403/404. | [QA A/B e países 10/10/2026] Respostas UI e GET de recuperação com destino QA verificado; evidências vinculadas a IDs do mesmo dossier/formulário. Regresso ao Balcão DRAFT, sem decisão externa. | [QA consumidores 10/10/2026] Pedidos de interface e GET de recuperação no servidor18097, header QA conferido antes de escrita; ver respostas/perfis no recibo por consumidor.",,,,"2–8 h de reconciliação/ensaio por consumidor agrupado, pressupondo dados sintéticos/perfis preparados. Alteração: estimar após reprodução concreta; variante integral pode exceder esta faixa.",,, +[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Pedidos relacionados sem novo inventário/backlog paralelo; referência documental acrescentada, critérios anteriores preservados. Confirmar os bytes do v1(3) antes do fecho documental.",parcial,desk_cases: 1; desk_requests: 0; desk_institutional_links: 0; desk_messages: 0,"24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: Capacidades/provas específicas anteriores existem, mas o requisito agregado ainda tem os critérios restantes explicitados; fechos parciais preservados.","[APIEX-SWOT-20261110] Preparação documental APIEX: requisitos/documentos/revisão/índice+anexos/registo externo e recuperação demonstrados. SWOT privada: quatro dimensões, fontes/data/classificação/revisão/histórico/acção nativa no mesmo dossier demonstrados. Restam instalação deste delta e visual; períodos/regimes não mapeados continuam indeterminados. Recepção electrónica APIEX não é requisito actual nem bloqueio. Restantes critérios originais mantidos. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Núcleo do dossier/pedido/resultado, fecho pelo dono, pré-dossier e editor de versões já implementados; fontes até ff726e57 instaladas. Restam consumidores, parametrização transversal e camadas por fonte/âmbito, habilitação nominal só quando exigida e conferência dos recortes sem prova visual. | Histórico anterior preservado: 03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: A/B encerrados no âmbito definido. Restam restantes serviços, documentos/mensagens, transições e perfis do Balcão; executar apenas critérios não demonstrados.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento; desk_payments/desk_documents/eventos cifrados e VerifiedDocumentBinary, mesma referência e declaração sem duplicação; VirtualDesk/assertOpen, autorização existente, closed_at, CRM/tasks e transição cancelled já existente","Decisão do proprietário de03/11 aplicada: o dono executa o fecho/reabertura integral; verificação do acesso efectivo e restante desenvolvimento preservados. Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.","03/11/2026: estado de fecho e autoridade de acesso são eixos distintos; leituras autorizadas continuam. Cancelamento existente não concede poder de fecho/reabertura de dossiers. MFA/perfis e regras CRM de próxima acção preservados. 03/11/2026: completar documentação de declaração manual existente é correcção do percurso já disponível; não confirma dinheiro, não altera alçadas/valores ou activa integração externa. Revisão competente/histórico conservados. Nota anterior: Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Completar critérios restantes sem repetir provas válidas,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,"[APIEX-SWOT-20261110] outputs/investment-preparation-20261110/verification.json e artefactos sintéticos; seis casos API/211asserções,16frontend dirigidos, tipos/análise/lint. outputs/entrega-apiex-swot-20261110.zip, base7476dc34, sem migrations. Manual e saldo no início dos registos existentes. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Instalação ff726e57: outputs/reviewed-install-20261110/verification.json; fontes aceites e recibos anteriores reutilizados. Saldo por percurso no início de visao-consolidada-modulos.md. 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.",balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"[QA consumidores 10/10/2026] Preparação A/B e submissão de pedido QA separado com protocolo/recuperação/replay sem duplicação demonstrados. Restam os outros serviços/condições, mensagens/transições, documentos e decisões externas aplicáveis; não repetir A/B ou C37. | Antes da reconciliacao de estabilizacao de 24/10/2026: A/B encerrados no âmbito definido. Restam restantes serviços, documentos/mensagens, transições e perfis do Balcão; executar apenas critérios não demonstrados.","Serviço interno real e dono/responsável; primeiro pedido só com dados do utilizador | [Semântica QA 10/10/2026] Leitura ativaREADONLY10/10:020000eBalcão07/190000+08/120000instalados;030000não;040000não;09/190000prepare_investor_pathausente(ledger/2colunas/definição). QA03/04/09-190instalados;definição19etapaspublicada61000919-0000-4000-8000-000000000001 SHAe0acbc723cd3def7e415b2ef7a0173add08387c3cedabac9bb7b86409e4d25bf. 09/190000nãofoi substituída:continuanecessária paraativo e não se repeteQA. 030/040semdependênciaDDL190;190dependeBalcão/journeys/steps/questionnaire_versions;workflowusa020+030+040+tasks/catalogue. Planofuturo:visual/candidata→backup/restaurofrescos→códigoflagsfalse→030autenticada→040instalador/bootstrapautenticadosaindaemfalta→190apenasfaltantesvia/management/balcao-install→dadosreais/perfis→cartografiaprivadaidempotente→flagspercurso/oportunidades→publicaçãoseparada. 0fixturesQAnoativo;readytrueépreparação;semativaçãoautorizada;reversãodesativaflags/preservahistóricoourestaurabackupverificado,nãodropusado.",VirtualDesk; desk_cases/requests/messages; tarefas existentes,"Portal Audit Consumer Lot Test: 2 testes /124 asserções; phpunit-lote 3-final.xml; geometry-consumers-lote3.json : 361 limites reais recuperados em QA, zero divulgação pública; visual não demonstrado | [Semântica QA 10 /10/2026 ] Provasdeledger /colunas/definição : dashboard-active-readonly.json e opportunity-semantic-environment-qa.json ;preservação 18 coleções /MFA18/manifestoativo : profiles-v1-preservation-qa.json . | [Visual QA 10 /10/2026 ] Chromium desktop 18: dois dossiers próprios A /B criados, guardados e recuperados noutra sessão; cinco fases e 19 etapas preservadas. A dispensa S10 ; B espera externa S10 com S02 independente. Plano contextual guardado /reaberto , resultados devolvidos e recuperados no dossier: ponto de equilíbrio 20 unidades; défice A 0 /B70000MZN. Balcão preparado como DRAFT, países PT /origemZA guardados; tarefa interna atribuída /assumida/iniciada/concluída no UI pelo gestor 14 e recuperada pelo investidor. Gestor sem acesso a resultados financeiros privados; QA23 dossier 403 /rascunho404 ; sem mistura entre projetos. investor-ab-chromium-20261010.json e visual-persistence-qa.json . C80 : bloquear edição /avanço enquanto GET do rascunho não terminou; diagnóstico guardado, correção e resposta deliberadamente atrasada no Chromium demonstrados em portal-simulator-loading-visual-qa.cjs /recibo. | [Visual QA 10/10/2026] Chromium desktop18: dois dossiers próprios A/B criados, guardados e recuperados noutra sessão; cinco fases e19 etapas preservadas. A dispensaS10; B espera externaS10 comS02 independente. Plano contextual guardado/reaberto, resultados devolvidos e recuperados no dossier: ponto de equilíbrio20unidades; défice A0/B70000MZN. Balcão preparado comoDRAFT, paísesPT/origemZA guardados; tarefa interna atribuída/assumida/iniciada/concluída no UI pelo gestor14 e recuperada pelo investidor. Gestor sem acesso a resultados financeiros privados; QA23 dossier403/rascunho404; sem mistura entre projetos. investor-ab-chromium-20261010.json e visual-persistence-qa.json. C80: bloquear edição/avanço enquanto GET do rascunho não terminou; diagnóstico guardado, correção e resposta deliberadamente atrasada no Chromium demonstrados em portal-simulator-loading-visual-qa.cjs/recibo. | [QA A/B e países 10/10/2026] A/B internos concluídos em QA: provas anteriores de criação/gravação/nova sessão/permissões compostas com investor-ab-remaining-chromium-20261010.json e investor-ab-remaining-persistence-qa.json. A terra/financiamento=no, S10 dispensada, equilíbrio20, necessidade0MZN; B=yes, S10waiting_external, equilíbrio20, necessidade70000MZN. Resultado/draft/dossier corretos, BalcãoDRAFT com título do dossier/resumo da ferramenta/PT/ZA, tarefaS02done posterior à esperaS10 e preparação independente habilitada; cinco fases/19etapas preservadas. Seis verificações390/320px sem overflow ou violações axe. C88 ação explícita recuperou descrição vazia de A, guardando revisão antiga/fonte(v3)/auditoria. Sem recriar dossiers/resultados/tarefas ou repetir C37. Ativo não alterado. | [QA consumidores 10/10/2026] consumer-stats-chromium-20261010.json: pedido separado no dossierA, PT/ZA, PUT303→submitted/protocolo→nova sessão→gestãoZA0→1; replay200 conserva protocolo/v2. SQL:uma revisão/um evento submitted. PedidosA/B originais continuamDRAFT. ProvaSQL:consumer-final-persistence-qa.json; QA somente, sem instalação/ativação.","Não demonstrado individualmente; localizar critério e executar em QA. | [Visual QA 10 /10/2026 ] Respostas guardadas por método /rota/status , sem corpos de autenticação; QA23 negado 403 /404. | [Visual QA 10/10/2026] Respostas guardadas por método/rota/status, sem corpos de autenticação; QA23 negado403/404. | [QA A/B e países 10/10/2026] Respostas UI e GET de recuperação com destino QA verificado; evidências vinculadas a IDs do mesmo dossier/formulário. Regresso ao Balcão DRAFT, sem decisão externa. | [QA consumidores 10/10/2026] Pedidos de interface e GET de recuperação no servidor18097, header QA conferido antes de escrita; ver respostas/perfis no recibo por consumidor.",,,,"2–8 h de reconciliação/ensaio por consumidor agrupado, pressupondo dados sintéticos/perfis preparados. Alteração: estimar após reprodução concreta; variante integral pode exceder esta faixa.",,, AUD-DESK-02,"Reutilizar investimento, percurso, pedido e responsável no Balcão","Pedido direto 09/10/2026, auditoria §1–4; fontes específicas descritas em relatorio-executivo.md | Proposta consolidação 09/10/2026; DOCX aa13c53138ec15cd808de43d9dc2fc6808da86943d09d3352c9dd0944bdae364; texto P22–P40, estados P76–P88, aprovação P326/P497; proposta-consolidacao-percurso.md | Aprovação expressa da execução I1–I3 exclusivamente QA; execução 09/10/2026, execucao-percurso-i1-i3.md, C25/C26. | Pedido direto 09/10/2026: corrigir HTTP500 POST /two-factor-challenge na QA18097 após conta13; preservar conta/chave/MFA, invalidar sessão exposta e retomar cenárioA. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] SEG-bf26caee-p94 §1.0.2; SEG-bf26caee-p99 §1.0.2; SEG-bf26caee-p104 §1.0.2; SEG-bf26caee-p109 §1.0.2; SEG-bf26caee-p114 §1.0.2; SEG-bf26caee-p119 §1.0.2; SEG-bf26caee-p129 §1.0.2; SEG-bf26caee-p144 §1.2; SEG-bf26caee-p145 §1.2; SEG-bf26caee-p146 §1.2; SEG-bf26caee-p147 §1.2; SEG-bf26caee-p469 §3.2; SEG-bf26caee-p470 §3.2; SEG-bf26caee-p471 §3.2; SEG-bf26caee-p472 §3.2; SEG-bf26caee-p473 §3.2; SEG-bf26caee-p474 §3.2; SEG-bf26caee-p475 §3.2; SEG-bf26caee-p476 §3.2; SEG-bf26caee-p477 §3.2; SEG-bf26caee-p479 §3.2.1; SEG-bf26caee-p571 §5.1; SEG-bf26caee-p574 §5.1; SEG-bf26caee-p577 §5.1; SEG-bf26caee-p580 §5.1; SEG-bf26caee-p583 §5.1; SEG-bf26caee-p586 §5.1; SEG-bf26caee-p589 §5.1; SEG-bf26caee-p592 §5.1; SEG-bf26caee-p597 §5.2; SEG-bf26caee-p598 §5.2; SEG-bf26caee-p599 §5.2; SEG-bf26caee-p600 §5.2; SEG-bf26caee-p601 §5.2; SEG-bf26caee-p612 §6; SEG-bf26caee-p730 §6.1 -[Revisão externa 10/11/2026] Directiva de Implementação Segura v1.0 de 08/11/2026; correecoes ao portal.docx SHA db630ab937cc00686480aa02ef0156a8ac20edadf97306995277a5173d890f51; confronto em revisao-externa-2026-11-10.md.",Balcão/orientação,/balcao-virtual/painel,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.","[CONCLUSAO-INTEGRAL-20261110] Fontes até ff726e57 na homologação teste-investidor. Não confundir instalação do código com nova concessão, habilitação nominal ou prova visual integral. | Histórico anterior preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados. | 22/10/2026 — disponibilizado por autorização Tempo: revisão servida042ffbde (inclui a76369eb/a1fbda06/064296e1 e correcção dirigida da recuperação legada). Percurso habilitado na homologação, versão private-investment-preparation-2026-v1; main ancestral preservado, sem conflitos/force-push. Zero migrations/importações/fixtures; nenhuma nova regra fiscal publicada/activada. Revisão/configuração/rotas conferidas; provas funcionais QA reutilizadas.","outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. +[Revisão externa 10/11/2026] Directiva de Implementação Segura v1.0 de 08/11/2026; correecoes ao portal.docx SHA db630ab937cc00686480aa02ef0156a8ac20edadf97306995277a5173d890f51; confronto em revisao-externa-2026-11-10.md.",Balcão/orientação,/balcao-virtual/painel,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. [DESK-PAYMENT-EVIDENCE-20261103] A declaração manual já existia e permitia comprovativo pendente, mas faltava juntá-lo posteriormente sem repetir a referência. Agora o titular/representante com escrita acrescenta ou corrige o suporte do mesmo pagamento pending/internal_issue por vínculo seleccionado, versão, motivo e consentimento. Referência, montante, moeda e fonte do valor são conservados; a nova associação fica pending, sem confirmação bancária. Registo internal_verified não pode ser substituído pelo titular; eventual problema continua a ser registado pelo revisor independente no percurso existente. Proveniência documental, exemplar, versão/hash registados e validade declarada ficam nos eventos cifrados, sem segunda tabela/migração ou cópia física. Conferência valida o original comum e a correspondência ao exemplar associado; legado sem captura continua desconhecido, sem reconstituição retroactiva. Pesquisa/reutilização anterior preservada. Dossier encerrado mantém leitura dos pagamentos, sem novas operações manuais. 53 Feature/721 asserções e 47 frontend, PHPStan/Pint/tipos/lint/build aprovados; 18 tabelas QA vazias/owner/RLS/índices. Dois processos sobrepostos 0.392022s, em pedidos diferentes com a mesma referência, conservaram 1 declaração/evento; segundo com conflito 409 e pedidos principais intactos. Recibo desk_payment_evidence_increment_20261103, sem escrita activa ou nova migração. [DESK-CLOSED-LIFECYCLE-20261103] Por decisão expressa do proprietário, o dono registado executa agora o encerramento/reabertura, com acesso efectivo, versão, motivo, operação idempotente e histórico. Gestores/outros representantes não recebem esse poder por inferência. Resumo das pendências antes da confirmação e manutenção dos estados/payloads/documentos/tarefas/pagamentos, sem aprovação em cascata. Dossier com closed_at já bloqueava rascunhos/anexos/pagamentos, mas permitia transições, etapas, atribuições, mensagens e actualizações de tarefas. Reproduzidos HTTP200 nesses percursos, incluindo atribuição com MFA válido. Agora a guarda de estado comum e lock do dossier protegem esses comandos, preservando leitura/histórico e as permissões anteriores. Tarefas com vínculo CRM/dossier respeitam o fecho também no CRM; CRM sem tarefas vinculadas não consulta nem exige o Balcão. Listas de triagem/filas excluem encerrados e a interface retira decisões/atribuições/mensagens/etapas/conferência/tarefas sem aplicação. Cancelamento de rascunho/devolvido, já autorizado pelo servidor ao titular com escrita, fica disponível por motivo e confirmação explícita, conservando dados/documentos/histórico e o dossier. Sucesso mostra a versão efectivamente guardada; falha conserva edições. Justificação de correcção só é perguntada num pedido devolvido. 77 Feature/1016 na regressão, 15/202 específicos finais (rondas sobrepostas, não somar),64 frontend e estática/Pint/tipos/lint/build aprovados;20 tabelas QA vazias/owner/RLS/índices. Recibo desk_closed_lifecycle_increment_20261103, sem nova migração/escrita activa.","[APIEX-SWOT-20261110] Homologação7476dc34 instalada; preparação APIEX e SWOT no dossier existente implementadas em QA, não instaladas. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Fontes até ff726e57 na homologação teste-investidor. Não confundir instalação do código com nova concessão, habilitação nominal ou prova visual integral. | Histórico anterior preservado: Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados. | 22/10/2026 — disponibilizado por autorização Tempo: revisão servida042ffbde (inclui a76369eb/a1fbda06/064296e1 e correcção dirigida da recuperação legada). Percurso habilitado na homologação, versão private-investment-preparation-2026-v1; main ancestral preservado, sem conflitos/force-push. Zero migrations/importações/fixtures; nenhuma nova regra fiscal publicada/activada. Revisão/configuração/rotas conferidas; provas funcionais QA reutilizadas.","outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [B QA 13/10/2026] OpçãoB fixada antes de executar. QA190000 já instalada, definição5fases/19etapas; flagQA estavaOFF, ativada isoladamente sem instalação. HTTP13contextos existentes com5/19; acesso a dossier privado alheio403. Casos/journeys/rascunhos anteriores preservados por hash. Provas agrupadas em proof-groups.json e execução-B-QA.md. @@ -5688,11 +5688,11 @@ AUD-DESK-02,"Reutilizar investimento, percurso, pedido e responsável no Balcão [Reconciliação visual14/10/2026 — sem novo ensaio] A/B fechado preservado. Apenas vínculo explícitoC145, quatroseletores/anexos da entidade, linkadministrativoC144 e recursos/recibo/revogaçãoBalcão específicos aguardam visual. Referência: outputs/investmoz-audit-current-20261012/acceptance-396c-visual-reconciliation-20261014.json -[RECONCILIACAO-43-20261019] 10: Motor, contexto e recuperação instalados; falta observação do caso legítimo. Variantes societárias/fiscais/contratuais em11,16,17,22. | 31: Só project-preparationv5 registado. project-change/project-follow-up existem na configuração e faltam versões internas. Gestão/decisão da equipa ainda usa gate global. | 32: Prova positiva no destino exige dossier real autorizado; dependência de verificação/dados, não reconstrução. Ligação documental por referência adicional em39. | 39: Integrar306e3ebc8a70 e31 referências a2 originais. Preservar permissões, versão/citação/hash e compatibilidade de reversão. Dossier legítimo para verificação final. | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.","[CONCLUSAO-INTEGRAL-20261110] Núcleo do dossier/pedido/resultado, fecho pelo dono, pré-dossier e editor de versões já implementados; fontes até ff726e57 instaladas. Restam consumidores, parametrização transversal e camadas por fonte/âmbito, habilitação nominal só quando exigida e conferência dos recortes sem prova visual. | Histórico anterior preservado: 03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: [B8 QA 13/10/2026] Somente oito percursos visuaisL4/C135 e consolidação/backup-restauroQA da revisãofixa restam na checklistB; não há exigência técnica genérica nova. Requisito agregado continua parcial; critérios foraB e ativação separados. +[RECONCILIACAO-43-20261019] 10: Motor, contexto e recuperação instalados; falta observação do caso legítimo. Variantes societárias/fiscais/contratuais em11,16,17,22. | 31: Só project-preparationv5 registado. project-change/project-follow-up existem na configuração e faltam versões internas. Gestão/decisão da equipa ainda usa gate global. | 32: Prova positiva no destino exige dossier real autorizado; dependência de verificação/dados, não reconstrução. Ligação documental por referência adicional em39. | 39: Integrar306e3ebc8a70 e31 referências a2 originais. Preservar permissões, versão/citação/hash e compatibilidade de reversão. Dossier legítimo para verificação final. | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.","[APIEX-SWOT-20261110] Preparação documental APIEX: requisitos/documentos/revisão/índice+anexos/registo externo e recuperação demonstrados. SWOT privada: quatro dimensões, fontes/data/classificação/revisão/histórico/acção nativa no mesmo dossier demonstrados. Restam instalação deste delta e visual; períodos/regimes não mapeados continuam indeterminados. Recepção electrónica APIEX não é requisito actual nem bloqueio. Restantes critérios originais mantidos. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Núcleo do dossier/pedido/resultado, fecho pelo dono, pré-dossier e editor de versões já implementados; fontes até ff726e57 instaladas. Restam consumidores, parametrização transversal e camadas por fonte/âmbito, habilitação nominal só quando exigida e conferência dos recortes sem prova visual. | Histórico anterior preservado: 03/11/2026: coerência do closed_at e cancelamento de rascunhos demonstrados nos percursos identificados, sem alterar regras/perfis ou encerrar dossiers automaticamente. A operação de encerrar/reabrir o dossier completo foi implementada conforme a resposta expressa do proprietário: o dono executa essa acção. Mantêm-se acesso efectivo, motivo, versão e histórico, sem impor que todas as pendências estejam concluídas nem alterar estados de outros processos. Restam restantes consumidores/parametrização/percurso adaptativo, conferência visual/login real e disponibilização no destino. Histórico anterior: 03/11/2026: comprovativo pendente ou corrigido pode completar a declaração existente sem repetir montante/moeda/fonte, com histórico e revisão independente. Restam outros consumidores e origens por formulário, atribuições/próxima acção/documentos por âmbito, parametrização transversal, conferência visual/login real e disponibilização no destino; integração bancária/entrega de mensagens não é declarada por estes registos manuais. Critérios gerais do Balcão/percurso não estão integralmente encerrados. Histórico anterior: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: [B8 QA 13/10/2026] Somente oito percursos visuaisL4/C135 e consolidação/backup-restauroQA da revisãofixa restam na checklistB; não há exigência técnica genérica nova. Requisito agregado continua parcial; critérios foraB e ativação separados. [Reconciliação visual14/10/2026 — sem novo ensaio] A classificação anterior «outrossetepercursos pendentes» é histórica e não invalida critérios visuais válidos. Roteiro atual:12trechos específicos em1/4/5/6/7/8;2/3 sem passos restantes. Sem novo critério, nem fecho global/opçãoB/candidata/ativação. A/B fechado preservado. Apenas vínculo explícitoC145, quatroseletores/anexos da entidade, linkadministrativoC144 e recursos/recibo/revogaçãoBalcão específicos aguardam visual. -[UTILIZACAO-HOMOLOGACAO-20261019] 10: Disponibilidade condicionada conforme limite registado — Início e lista própria abrem; definição de 19 etapas instalada. Não repetidas as 19 etapas aceites. | 31: Disponibilidade condicionada conforme limite registado — Painel e serviço existente abrem; dez tabelas base instaladas, definição interna project-preparation v5 transportada. | 32: Implementado no recorte; falta processo real — Recuperação no clone aceite; vínculo positivo no destino depende de dossier legítimo autorizado. | 39: Disponibilidade condicionada conforme limite registado — Reutilização documental Inhambane/dossier permanece no incremento QA separado. | Recorte executável C concluído em QA. Restantes coberturas sectoriais/benefícios e encaminhamento visual de zona real têm limites concretos no manual; não bloqueiam os ramos já documentados. Integração/habilitação no destino não executadas. | Integração/habilitação deste recorte executadas em22/10/2026; referências anteriores a operação pendente são históricas. Não reabrir as provas aceites.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento; desk_payments/desk_documents/eventos cifrados e VerifiedDocumentBinary, mesma referência e declaração sem duplicação; VirtualDesk/assertOpen, autorização existente, closed_at, CRM/tasks e transição cancelled já existente","Decisão do proprietário de03/11 aplicada: o dono executa o fecho/reabertura integral; verificação do acesso efectivo e restante desenvolvimento preservados. Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.","03/11/2026: estado de fecho e autoridade de acesso são eixos distintos; leituras autorizadas continuam. Cancelamento existente não concede poder de fecho/reabertura de dossiers. MFA/perfis e regras CRM de próxima acção preservados. 03/11/2026: completar documentação de declaração manual existente é correcção do percurso já disponível; não confirma dinheiro, não altera alçadas/valores ou activa integração externa. Revisão competente/histórico conservados. Nota anterior: Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Completar critérios restantes sem repetir provas válidas,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,"[CONCLUSAO-INTEGRAL-20261110] Instalação ff726e57: outputs/reviewed-install-20261110/verification.json; fontes aceites e recibos anteriores reutilizados. Saldo por percurso no início de visao-consolidada-modulos.md. 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. +[UTILIZACAO-HOMOLOGACAO-20261019] 10: Disponibilidade condicionada conforme limite registado — Início e lista própria abrem; definição de 19 etapas instalada. Não repetidas as 19 etapas aceites. | 31: Disponibilidade condicionada conforme limite registado — Painel e serviço existente abrem; dez tabelas base instaladas, definição interna project-preparation v5 transportada. | 32: Implementado no recorte; falta processo real — Recuperação no clone aceite; vínculo positivo no destino depende de dossier legítimo autorizado. | 39: Disponibilidade condicionada conforme limite registado — Reutilização documental Inhambane/dossier permanece no incremento QA separado. | Recorte executável C concluído em QA. Restantes coberturas sectoriais/benefícios e encaminhamento visual de zona real têm limites concretos no manual; não bloqueiam os ramos já documentados. Integração/habilitação no destino não executadas. | Integração/habilitação deste recorte executadas em22/10/2026; referências anteriores a operação pendente são históricas. Não reabrir as provas aceites.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento; desk_payments/desk_documents/eventos cifrados e VerifiedDocumentBinary, mesma referência e declaração sem duplicação; VirtualDesk/assertOpen, autorização existente, closed_at, CRM/tasks e transição cancelled já existente","Decisão do proprietário de03/11 aplicada: o dono executa o fecho/reabertura integral; verificação do acesso efectivo e restante desenvolvimento preservados. Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.","03/11/2026: estado de fecho e autoridade de acesso são eixos distintos; leituras autorizadas continuam. Cancelamento existente não concede poder de fecho/reabertura de dossiers. MFA/perfis e regras CRM de próxima acção preservados. 03/11/2026: completar documentação de declaração manual existente é correcção do percurso já disponível; não confirma dinheiro, não altera alçadas/valores ou activa integração externa. Revisão competente/histórico conservados. Nota anterior: Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Completar critérios restantes sem repetir provas válidas,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,"[APIEX-SWOT-20261110] outputs/investment-preparation-20261110/verification.json e artefactos sintéticos; seis casos API/211asserções,16frontend dirigidos, tipos/análise/lint. outputs/entrega-apiex-swot-20261110.zip, base7476dc34, sem migrations. Manual e saldo no início dos registos existentes. | Histórico anterior preservado: [CONCLUSAO-INTEGRAL-20261110] Instalação ff726e57: outputs/reviewed-install-20261110/verification.json; fontes aceites e recibos anteriores reutilizados. Saldo por percurso no início de visao-consolidada-modulos.md. 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: outputs/investmoz-audit-current-20261012/reused-evidence-integrity.json: 35 recibos anteriores com hashes correspondentes; o âmbito de cada recibo permanece limitado ao critério ensaiado. outputs/investmoz-audit-current-20261012/http-promoter.json; http-validator.json; http-publisher.json; http-manager.json. [B QA 13/10/2026] OpçãoB fixada antes de executar. QA190000 já instalada, definição5fases/19etapas; flagQA estavaOFF, ativada isoladamente sem instalação. HTTP13contextos existentes com5/19; acesso a dossier privado alheio403. Casos/journeys/rascunhos anteriores preservados por hash. Provas agrupadas em proof-groups.json e execução-B-QA.md. @@ -10832,11 +10832,11 @@ AUD-LEG-06,"Preservar contexto ao entrar/regressar ao percurso, URLs existentes [Delta territorial e saldo Tempo 10/11/2026] Directiva de Implementação Segura v1.0 de 08/11/2026; correecoes ao portal.docx SHA db630ab937cc00686480aa02ef0156a8ac20edadf97306995277a5173d890f51; confronto em revisao-externa-2026-11-10.md. -[Entrega conjunta e saldo separado 10/11/2026] Pedido expresso da Tempo de 10/11/2026: preparar entrega conjunta de contador/aliases, compatibilidade main e contexto, conservando S08 separada da revisão visual. Referência: entrega-conjunta-contador-aliases-2026-11-10.md.",biblioteca / conteúdo público / percurso do investidor,/explorar/agronegocio; /agronegocio; /documentos/6; /investimentos/a-partir-de/agronegocio; /investimentos/{id}/conteudos,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Disponibilizado em 15/10/2026, setores-fintech-QA-d5b4dc354265 DOC01: 16 fontes e compilação; sete entradas setoriais e especialização Fintech no dossier; três artigos publicados (recursos reais 27/28/29), imagem 24 reutilizada por identidade/hash. Flags existentes preservadas; sem migrations/categorias novas. B e COUNTRY02 preservados. | 22/10/2026 — disponibilizado por autorização Tempo: revisão servida042ffbde (inclui a76369eb/a1fbda06/064296e1 e correcção dirigida da recuperação legada). Percurso habilitado na homologação, versão private-investment-preparation-2026-v1; main ancestral preservado, sem conflitos/force-push. Zero migrations/importações/fixtures; nenhuma nova regra fiscal publicada/activada. Revisão/configuração/rotas conferidas; provas funcionais QA reutilizadas.","QA aceite reutilizada; execução ativa com backup/restauro, scan real, publicação expressa e HTTP anónimo200. Sem repetir percurso. outputs/investmoz-legado-ativacao-20261015/RESULTADO-FINAL.json; FINAL-READONLY.json; ANONYMOUS-HTTP.json; RECIBO-INTEGRIDADE-FINAL.json; outputs/investmoz-legado-restantes-setores-preparacao-20261015/INVENTARIO-E-RECORTE.json | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.",Implementado parcialmente — entradas setoriais e três artigos ativos,Continuidade de preparacao/dossier por oportunidade e ancora entregue 8036b9b0/cf2ddf21; mapas 066707ec. Os dois originais incompletos e correspondencias documentais nao identificadas conservam o limite proprio do acervo; nao sao falha criada pela regressao dos mapas.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,URL antigo recupera a mesma fonte; login/retorno preservam a escolha; nova sessão recupera; nenhuma mistura entre projetos nem conversão de roteiro legado.,P1,"Legado post171985 modificado2026-04-20; categoria Oportunidades preservada como metadado, entidade guia. Metadados/sitemapInfopublica e área de investimento distintos; não remapear por nome.",USR-LEG-20261010-06,1,"[{""id"":""USR-LEG-20261010-06"",""pedido"":""Preservar contexto ao entrar/regressar ao percurso, URLs existentes e correspondências de migração"",""fontes"":[""Pedido direto10/10/2026 §6""],""aceitacao"":""URL antigo recupera a mesma fonte; login/retorno preservam a escolha; nova sessão recupera; nenhuma mistura entre projetos nem conversão de roteiro legado."",""estado"":""parcial"",""variantes"":""IntegraçãoprogressivaQA, sem substituição de pendências anteriores"",""modulo"":""legado/biblioteca/percurso"",""confirmacao_manual"":{""recebida_em"":""2026-10-10"",""fonte"":""Mensagem do responsável nesta conversa"",""conta"":""não indicada"",""perfil"":""não indicado"",""dispositivo"":""não indicado"",""criterios"":[{""criterio"":""criar_ou_escolher_dossier"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""guardar_referencia"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""nova_sessao"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""recuperar_dossier"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""abrir_artigo"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""}],""exclusoes"":[""móvel"",""acessibilidade"",""outros perfis"",""C37 conta18"",""cenários A/B"",""cobertura integral""]},""incremento_setores_qa_20261010"":{""atualizado_em"":""2026-10-10T16:23:25.695297+00:00"",""ambito"":""QA18097;base55441isolada"",""evidencia"":""22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados."",""estado_requisito_atual"":""parcial"",""exclusoes"":[""ativação"",""C37/QA18"",""A/B"",""móvel"",""acessibilidade"",""cobertura integral""]},""incremento_visual_qa_20261010"":{""atualizado_em"":""2026-10-10T17:57:54.604301+00:00"",""ambito"":""QA18097/55441 exclusivamente"",""evidencia"":""FalhasC77–C83 corrigidas emQA: landmarks, nomeARIA do mapa, hierarquia de títulos do texto legado sem alteraroriginal/hash, tabelas financeiras focáveis por teclado, reflow de tarefas/select/data no dossier, langpt-MZ apenas no routerQA e proteção da recuperação assíncrona do simulador. Após correções15execuções axe/390–320–1440px,0violações automáticas/0overflow e idiomaPT; skiplink primeiroTab→conteúdo em3páginas; tabelas financeiras focadas/teclas no Chromium. Não equivale a leitor de ecrã, zoom/dispositivo real ou cobertura de todo oportal. LegacyContentTest5/84 e rastreioMFA1/14 são provas específicas, não contagem substituta de percursos. visual-followup-chromium-20261010.json e screenshots; históricos de falhas mantidos."",""lacuna_atual"":""Cobertura integral, mais perfis/dispositivos, leitor de ecrã e editor administrativoC74 não demonstrados. Mercado Financeiro permanece privado/corpo vazio confirmado na origem; rotas404. Sem associação automática Turismo→cadastro territorial, sem fundir Energia/Mineração."",""estado_global_preservado"":""parcial"",""ativacao"":false}}]","[Interface legado QA 10 /10/2026 ] Render /cliques observados no Chromium QA, com recuperação noutra sessão /F5 e negação à conta 23. Não é o navegador pessoal do utilizador nem o ensaio C37 /QA18. | Evidência anterior preservada: React preparado e build QA; dados Inertia recuperados. Navegador indisponível; roteiro manual em legado-piloto-qa.md . Aceitação visual pendente. | [Confirmação manual recebida 10 /10/2026 ] Responsável confirmou leitura pública → autenticação → criar /escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta /perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37 /QA18 ou A /B. Ver legado-piloto-qa.md , confirmação manual. | [Setores QA após C71 10 /10/2026 ] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos /recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia 200. Chromium desktop:16 artigos, pesquisa /imagens , Energia e Mineração distintas, C72 título preservado; QA21 criou 4 dossiers, retorno, logout /novaMFA/F5/replay ; QA23 negado 403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP /Chromium , uma referência /evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence} -qa.json ; legacy-financial-origin-20261010 /proof.json. C37 /QA18 ,A /B ,móvel /acessibilidade/cobertura integral não encerrados. | [Visual QA 10 /10/2026 ] Leitura pública /móvel dirigida, teclado e 4 consumidores do mapa demonstrados;15 execuções de acessibilidade sem violação automática. | [Visual QA 10/10/2026] Leitura pública/móvel dirigida, teclado e4consumidores do mapa demonstrados;15execuções de acessibilidade semviolação automática.","GET públicos e escritas autenticadas no servidor18097, alvo real55441 confirmado; publicação separada do importador. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.","Dois recursos na biblioteca existente e referências no payload cifrado do dossier; sem nova tabela/cadastro paralelo. | [Confirmação manual recebida 10/10/2026] Responsável confirmou leitura pública → autenticação → criar/escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta/perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37/QA18 ou A/B. Ver legado-piloto-qa.md, confirmação manual. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.","[Interface legado QA 10/10/2026] Render/cliques observados no Chromium QA, com recuperação noutra sessão/F5 e negação à conta23. Não é o navegador pessoal do utilizador nem o ensaio C37/QA18. | Evidência anterior preservada: Logout/nova sessão FortifyMFA21: fonte/versão/hashes recuperados; outra conta negada e projeto independente sem referência. | [Confirmação manual recebida 10/10/2026] Responsável confirmou leitura pública → autenticação → criar/escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta/perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37/QA18 ou A/B. Ver legado-piloto-qa.md, confirmação manual. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.",Piloto ativo encerrado; restante legado pendente.,Piloto agronegócio: ativo e entrega encerrada. Integração integral do legado: pendente nos mesmos IDs.,parcial,Não disponibilizado; guarda QA/flagfalse. Nenhuma escrita ou divulgação ativa autorizada.,"24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: 23/10/2026: anchor slice delivered in homologation cf2ddf21 after 3fd5128c; installed delta verified, 28 accepted territorial links restored in 13 projects, exact 29 approved fiches unchanged. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Preserved cdf8fcfb/8036b9b0 and earlier closures; no accepted proofs repeated; statistics/AI deferred. | 23/10/2026: anchor integration executable in isolated QA; 4 tests/116 assertions + 2 frontend tests; 28 accepted territorial links recovered in QA, 29 real published fiches preserved. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Homologation still 8036b9b0 until Git installation and exact 28-link recovery; no accepted proofs repeated; statistics/AI deferred. | 15/10/2026: entrega do piloto encerrada; dados/B/COUNTRY02/build preservados. Não equivale a integração integral do legado. | Lote setorial disponibilizado por autorização expressa da Tempo; integração integral continua pendente. | QA 15/10/2026: setores-fintech-QA-d5b4dc354265; sete entradas comerciais/contexto no dossier e três artigos preparados. B/COUNTRY02/aceitações preservados; sem disponibilização ativa. | Disponibilização expressamente autorizada pela Tempo: «Autorizo a disponibilizar». Executada com backup/restauro fresco verificado; apenas conferência operacional, sem repetir aceitação QA. +[Entrega conjunta e saldo separado 10/11/2026] Pedido expresso da Tempo de 10/11/2026: preparar entrega conjunta de contador/aliases, compatibilidade main e contexto, conservando S08 separada da revisão visual. Referência: entrega-conjunta-contador-aliases-2026-11-10.md.",biblioteca / conteúdo público / percurso do investidor,/explorar/agronegocio; /agronegocio; /documentos/6; /investimentos/a-partir-de/agronegocio; /investimentos/{id}/conteudos,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","[APIEX-SWOT-20261110] Homologação7476dc34 instalada; preparação APIEX e SWOT no dossier existente implementadas em QA, não instaladas. | Histórico anterior preservado: Disponibilizado em 15/10/2026, setores-fintech-QA-d5b4dc354265 DOC01: 16 fontes e compilação; sete entradas setoriais e especialização Fintech no dossier; três artigos publicados (recursos reais 27/28/29), imagem 24 reutilizada por identidade/hash. Flags existentes preservadas; sem migrations/categorias novas. B e COUNTRY02 preservados. | 22/10/2026 — disponibilizado por autorização Tempo: revisão servida042ffbde (inclui a76369eb/a1fbda06/064296e1 e correcção dirigida da recuperação legada). Percurso habilitado na homologação, versão private-investment-preparation-2026-v1; main ancestral preservado, sem conflitos/force-push. Zero migrations/importações/fixtures; nenhuma nova regra fiscal publicada/activada. Revisão/configuração/rotas conferidas; provas funcionais QA reutilizadas.","QA aceite reutilizada; execução ativa com backup/restauro, scan real, publicação expressa e HTTP anónimo200. Sem repetir percurso. outputs/investmoz-legado-ativacao-20261015/RESULTADO-FINAL.json; FINAL-READONLY.json; ANONYMOUS-HTTP.json; RECIBO-INTEGRIDADE-FINAL.json; outputs/investmoz-legado-restantes-setores-preparacao-20261015/INVENTARIO-E-RECORTE.json | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.",Implementado parcialmente — entradas setoriais e três artigos ativos,Continuidade de preparacao/dossier por oportunidade e ancora entregue 8036b9b0/cf2ddf21; mapas 066707ec. Os dois originais incompletos e correspondencias documentais nao identificadas conservam o limite proprio do acervo; nao sao falha criada pela regressao dos mapas.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,URL antigo recupera a mesma fonte; login/retorno preservam a escolha; nova sessão recupera; nenhuma mistura entre projetos nem conversão de roteiro legado.,P1,"Legado post171985 modificado2026-04-20; categoria Oportunidades preservada como metadado, entidade guia. Metadados/sitemapInfopublica e área de investimento distintos; não remapear por nome.",USR-LEG-20261010-06,1,"[{""id"":""USR-LEG-20261010-06"",""pedido"":""Preservar contexto ao entrar/regressar ao percurso, URLs existentes e correspondências de migração"",""fontes"":[""Pedido direto10/10/2026 §6""],""aceitacao"":""URL antigo recupera a mesma fonte; login/retorno preservam a escolha; nova sessão recupera; nenhuma mistura entre projetos nem conversão de roteiro legado."",""estado"":""parcial"",""variantes"":""IntegraçãoprogressivaQA, sem substituição de pendências anteriores"",""modulo"":""legado/biblioteca/percurso"",""confirmacao_manual"":{""recebida_em"":""2026-10-10"",""fonte"":""Mensagem do responsável nesta conversa"",""conta"":""não indicada"",""perfil"":""não indicado"",""dispositivo"":""não indicado"",""criterios"":[{""criterio"":""criar_ou_escolher_dossier"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""guardar_referencia"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""nova_sessao"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""recuperar_dossier"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""},{""criterio"":""abrir_artigo"",""estado"":""confirmado manualmente"",""ambito"":""piloto agronegócio QA""}],""exclusoes"":[""móvel"",""acessibilidade"",""outros perfis"",""C37 conta18"",""cenários A/B"",""cobertura integral""]},""incremento_setores_qa_20261010"":{""atualizado_em"":""2026-10-10T16:23:25.695297+00:00"",""ambito"":""QA18097;base55441isolada"",""evidencia"":""22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados."",""estado_requisito_atual"":""parcial"",""exclusoes"":[""ativação"",""C37/QA18"",""A/B"",""móvel"",""acessibilidade"",""cobertura integral""]},""incremento_visual_qa_20261010"":{""atualizado_em"":""2026-10-10T17:57:54.604301+00:00"",""ambito"":""QA18097/55441 exclusivamente"",""evidencia"":""FalhasC77–C83 corrigidas emQA: landmarks, nomeARIA do mapa, hierarquia de títulos do texto legado sem alteraroriginal/hash, tabelas financeiras focáveis por teclado, reflow de tarefas/select/data no dossier, langpt-MZ apenas no routerQA e proteção da recuperação assíncrona do simulador. Após correções15execuções axe/390–320–1440px,0violações automáticas/0overflow e idiomaPT; skiplink primeiroTab→conteúdo em3páginas; tabelas financeiras focadas/teclas no Chromium. Não equivale a leitor de ecrã, zoom/dispositivo real ou cobertura de todo oportal. LegacyContentTest5/84 e rastreioMFA1/14 são provas específicas, não contagem substituta de percursos. visual-followup-chromium-20261010.json e screenshots; históricos de falhas mantidos."",""lacuna_atual"":""Cobertura integral, mais perfis/dispositivos, leitor de ecrã e editor administrativoC74 não demonstrados. Mercado Financeiro permanece privado/corpo vazio confirmado na origem; rotas404. Sem associação automática Turismo→cadastro territorial, sem fundir Energia/Mineração."",""estado_global_preservado"":""parcial"",""ativacao"":false}}]","[Interface legado QA 10 /10/2026 ] Render /cliques observados no Chromium QA, com recuperação noutra sessão /F5 e negação à conta 23. Não é o navegador pessoal do utilizador nem o ensaio C37 /QA18. | Evidência anterior preservada: React preparado e build QA; dados Inertia recuperados. Navegador indisponível; roteiro manual em legado-piloto-qa.md . Aceitação visual pendente. | [Confirmação manual recebida 10 /10/2026 ] Responsável confirmou leitura pública → autenticação → criar /escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta /perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37 /QA18 ou A /B. Ver legado-piloto-qa.md , confirmação manual. | [Setores QA após C71 10 /10/2026 ] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos /recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia 200. Chromium desktop:16 artigos, pesquisa /imagens , Energia e Mineração distintas, C72 título preservado; QA21 criou 4 dossiers, retorno, logout /novaMFA/F5/replay ; QA23 negado 403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP /Chromium , uma referência /evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence} -qa.json ; legacy-financial-origin-20261010 /proof.json. C37 /QA18 ,A /B ,móvel /acessibilidade/cobertura integral não encerrados. | [Visual QA 10 /10/2026 ] Leitura pública /móvel dirigida, teclado e 4 consumidores do mapa demonstrados;15 execuções de acessibilidade sem violação automática. | [Visual QA 10/10/2026] Leitura pública/móvel dirigida, teclado e4consumidores do mapa demonstrados;15execuções de acessibilidade semviolação automática.","GET públicos e escritas autenticadas no servidor18097, alvo real55441 confirmado; publicação separada do importador. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.","Dois recursos na biblioteca existente e referências no payload cifrado do dossier; sem nova tabela/cadastro paralelo. | [Confirmação manual recebida 10/10/2026] Responsável confirmou leitura pública → autenticação → criar/escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta/perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37/QA18 ou A/B. Ver legado-piloto-qa.md, confirmação manual. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.","[Interface legado QA 10/10/2026] Render/cliques observados no Chromium QA, com recuperação noutra sessão/F5 e negação à conta23. Não é o navegador pessoal do utilizador nem o ensaio C37/QA18. | Evidência anterior preservada: Logout/nova sessão FortifyMFA21: fonte/versão/hashes recuperados; outra conta negada e projeto independente sem referência. | [Confirmação manual recebida 10/10/2026] Responsável confirmou leitura pública → autenticação → criar/escolher dossier → guardar referência → nova sessão → recuperar dossier e abrir artigo. Confirmação declarada, sem conta/perfil/dispositivo/data de execução identificados. Não comprova MFA específico, ensaios móveis, acessibilidade, outros perfis, deduplicação, C37/QA18 ou A/B. Ver legado-piloto-qa.md, confirmação manual. | [Setores QA após C71 10/10/2026] 22 originais importados privadamente após prévia renovada, hashes recuperados,22 scans ClamD reais e replay sem novos documentos/recursos/auditoria/scans. Divulgação autenticada separada:16 artigos com texto+5 imagens públicos; Mercado Financeiro privado, vazio confirmado na origem HTML e Inertia200. Chromium desktop:16 artigos, pesquisa/imagens, Energia e Mineração distintas, C72 título preservado; QA21 criou4 dossiers, retorno, logout/novaMFA/F5/replay; QA23 negado403 e anónimo sem contexto. Persistência READ ONLY:8 dossiers HTTP/Chromium, uma referência/evento cada,22 hashes únicos,0 relações geográficas automáticas. legacy-sectors-{apply,replay,http,browser,persistence}-qa.json; legacy-financial-origin-20261010/proof.json. C37/QA18,A/B,móvel/acessibilidade/cobertura integral não encerrados.",Piloto ativo encerrado; restante legado pendente.,Piloto agronegócio: ativo e entrega encerrada. Integração integral do legado: pendente nos mesmos IDs.,parcial,Não disponibilizado; guarda QA/flagfalse. Nenhuma escrita ou divulgação ativa autorizada.,"24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: 23/10/2026: anchor slice delivered in homologation cf2ddf21 after 3fd5128c; installed delta verified, 28 accepted territorial links restored in 13 projects, exact 29 approved fiches unchanged. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Preserved cdf8fcfb/8036b9b0 and earlier closures; no accepted proofs repeated; statistics/AI deferred. | 23/10/2026: anchor integration executable in isolated QA; 4 tests/116 assertions + 2 frontend tests; 28 accepted territorial links recovered in QA, 29 real published fiches preserved. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Homologation still 8036b9b0 until Git installation and exact 28-link recovery; no accepted proofs repeated; statistics/AI deferred. | 15/10/2026: entrega do piloto encerrada; dados/B/COUNTRY02/build preservados. Não equivale a integração integral do legado. | Lote setorial disponibilizado por autorização expressa da Tempo; integração integral continua pendente. | QA 15/10/2026: setores-fintech-QA-d5b4dc354265; sete entradas comerciais/contexto no dossier e três artigos preparados. B/COUNTRY02/aceitações preservados; sem disponibilização ativa. | Disponibilização expressamente autorizada pela Tempo: «Autorizo a disponibilizar». Executada com backup/restauro fresco verificado; apenas conferência operacional, sem repetir aceitação QA. -[RECONCILIACAO-43-20261019] 5: Sem saldo de código no recorte visual aceite. | 8: Outras identidades do legado exigem lotes e eventual adaptação por tipo. Não há autorização genérica para publicar todo o acervo. | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.","24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: [CURRENT ANCHOR SLICE 23/10/2026] Delivered in homologation cf2ddf21; 28 accepted territorial relations recovered, 29 approved fiches preserved; sector/location search and continuity to manifestation, dossier and simulator covered. No identified code/recovery/delivery pending in this slice. Next: Tempo navigation/presentation review. Statistics and AI deferred. Receipt: docs/investmoz/unification/anchor-integration-receipt-20261023.json. This supersedes earlier anchor-analysis/QA/delivery pending statements only; unrelated scopes and historical evidence below remain preserved. | Inventário reconciliado: 20 artigos e cinco imagens publicados; 28 artigos com corpo por integrar (2 setoriais, 8 trabalho doméstico, 18 históricos/noticiosos); Mercado Financeiro vazio e post 74364 sem título separados. Onze variantes de URL e 43 capturas adicionais de artigos já cobertas, sem novas identidades. Demais referências, anexos técnicos e sitemap misto conservam recorte próprio. | Entrega operacional deste delta concluída. Mercado Financeiro geral vazio e restante acervo mantêm os seus estados. Licenças, requisitos e documentos específicos Fintech por atividade permanecem por determinar; não bloqueiam a preparação independente nem se consideram concluídos. | Recorte QA demonstrado, sem encerrar critérios globais. Histórico económico combinado conservado, fora de novas escolhas; oportunidade6 não inferida como Fintech. Sem fusões por nome. Recuperação existente conferida por leitura e hashes; outra sessão/dispositivo e percursos aceites não reensaiados. Conferência dos anexos pelo utilizador pendente. | Recorte aprovado disponibilizado; requisitos globais permanecem abertos. Atividade historica combinada e oportunidade6 sem reclassificacao. Conferencia dos anexos finais pelo utilizador pendente. Sem repetir testes aceites, formularios ou L1. +[RECONCILIACAO-43-20261019] 5: Sem saldo de código no recorte visual aceite. | 8: Outras identidades do legado exigem lotes e eventual adaptação por tipo. Não há autorização genérica para publicar todo o acervo. | 22/10/2026: primeiro incremento QA na branch codex/project-context-continuity-QA; contexto único por dossier/conta, herança com edições preservadas, moeda/IVA mensal e análise territorial explícita. Ver traceability-and-manual.md, secção Continuidade e adaptação contextual. 4 HTTP/74 asserções; 8 frontend; percurso visual A/B e nova sessão. Não encerra adaptação jurídica integral. | 22/10/2026 — percurso privado executável em QA (base52fbb146): condições oficiais seleccionam mero registo/autorização, alternativas documentais e próximos passos; contexto C v4 mero registo após distinção directo/indirecto (Lei14/R13); prévia visual, vínculo inactivo preservado e relatório v3 por autorização conservado como histórico. 3 testes/96 asserções e um teste do novo relatório, tipos/build aprovados. Sem validação jurídica genérica adicional; orientação permanente Tempo em AGENTS. Branch codex/private-investment-path-executable-QA; sem integração main/alteração da homologação/activação fiscal.","[APIEX-SWOT-20261110] Preparação documental APIEX: requisitos/documentos/revisão/índice+anexos/registo externo e recuperação demonstrados. SWOT privada: quatro dimensões, fontes/data/classificação/revisão/histórico/acção nativa no mesmo dossier demonstrados. Restam instalação deste delta e visual; períodos/regimes não mapeados continuam indeterminados. Recepção electrónica APIEX não é requisito actual nem bloqueio. Restantes critérios originais mantidos. | Histórico anterior preservado: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: [CURRENT ANCHOR SLICE 23/10/2026] Delivered in homologation cf2ddf21; 28 accepted territorial relations recovered, 29 approved fiches preserved; sector/location search and continuity to manifestation, dossier and simulator covered. No identified code/recovery/delivery pending in this slice. Next: Tempo navigation/presentation review. Statistics and AI deferred. Receipt: docs/investmoz/unification/anchor-integration-receipt-20261023.json. This supersedes earlier anchor-analysis/QA/delivery pending statements only; unrelated scopes and historical evidence below remain preserved. | Inventário reconciliado: 20 artigos e cinco imagens publicados; 28 artigos com corpo por integrar (2 setoriais, 8 trabalho doméstico, 18 históricos/noticiosos); Mercado Financeiro vazio e post 74364 sem título separados. Onze variantes de URL e 43 capturas adicionais de artigos já cobertas, sem novas identidades. Demais referências, anexos técnicos e sitemap misto conservam recorte próprio. | Entrega operacional deste delta concluída. Mercado Financeiro geral vazio e restante acervo mantêm os seus estados. Licenças, requisitos e documentos específicos Fintech por atividade permanecem por determinar; não bloqueiam a preparação independente nem se consideram concluídos. | Recorte QA demonstrado, sem encerrar critérios globais. Histórico económico combinado conservado, fora de novas escolhas; oportunidade6 não inferida como Fintech. Sem fusões por nome. Recuperação existente conferida por leitura e hashes; outra sessão/dispositivo e percursos aceites não reensaiados. Conferência dos anexos pelo utilizador pendente. | Recorte aprovado disponibilizado; requisitos globais permanecem abertos. Atividade historica combinada e oportunidade6 sem reclassificacao. Conferencia dos anexos finais pelo utilizador pendente. Sem repetir testes aceites, formularios ou L1. -[UTILIZACAO-HOMOLOGACAO-20261019] 5: Disponibilidade condicionada conforme limite registado — Ecrã aberto: dez sectores principais, especialização Fintech sem cartão principal duplicado; 12 registos conservados. | 8: Disponibilidade condicionada conforme limite registado — Adaptador habilitado; artigos/imagens transportados privadamente, sem os publicar. | Recorte executável C concluído em QA. Restantes coberturas sectoriais/benefícios e encaminhamento visual de zona real têm limites concretos no manual; não bloqueiam os ramos já documentados. Integração/habilitação no destino não executadas. | Integração/habilitação deste recorte executadas em22/10/2026; referências anteriores a operação pendente são históricas. Não reabrir as provas aceites. Delta de complementos preparado/verificado em QA; conferência visual e instalação no destino ainda não realizadas. Relações sem oferta identificada permanecem necessidades, sem presumir inexistência no acervo. Cobertura transversal e restantes pendências desta linha mantêm-se. Actualização visual 23/10/2026: supera apenas a pendência visual dos complementos no recorte documentado. Não demonstra contextos específicos de várias oportunidades em zonas/parques, Terra/DUAT, Balcão ou manifestação. Sem disponibilização no destino nem fecho global. | [Saldo corrente 23/10/2026] São três lacunas de integração constatadas por leitura e quatro verificações delimitadas, não sete falhas de execução. Os itens 1–3 determinam a correcção executável seguinte; 4–6 podem ser conferidos independentemente em QA isolado; 7 depende apenas do âmbito corrigido. A contagem refere-se a estes sete recortes, não a cada formato ou campo. Uma verificação que passe encerra o item; uma que falhe regista o defeito concreto na mesma linha da matriz. Não criar outra matriz/backlog nem converter ausência de prova em regressão. Fechos preservados: 6b544548/4098192a; d8224ba8/af926180; 55136b44/b6a626c9. Notas historicas de falta de entrega destes recortes estao superadas. Ver sete recortes no inicio do manual existente. | [QA conjunta 23/10/2026] Itens 1-3 corrigidos: escolha de oportunidade no simulador, aplicabilidade/estados por oportunidade, atalho Terra pelo pedido associado. Provas dirigidas novas nos itens 4-6: retirada da primeira, contactos autorizados, entradas ideia/sector/territorio e login. Word/ZIP gerados; composicao de impressao conferida. Resta PDF nativo efectivamente guardado/paginacao e recorte ancora por analisar. Sem entrega na homologacao desta candidata. Ver estado corrente no inicio do manual; sete itens historicos abaixo nao sao o saldo corrente. Fechos 6b544548, d8224ba8, 55136b44 preservados. Estatisticas e IA adiadas. | [PDF nativo 23/10/2026] Falhas observadas na saida real: not_started e detalhe dos requisitos ausente. Correcao 2856240c sobre candidata 1afdfee8: estados humanos e requisitos apenas da oportunidade aplicavel. Teste novo native-pdf-scope passou; tipos/build passaram; sem repetir Word/ZIP. Saida real revista13, oportunidade309/Manica, valores QA123456/45678/diferenca77778MZN, pronta para gravacao manual. PDF guardado/paginacao pendentes por falta de controlo do dialogo nativo. Integracao/disponibilizacao ja autorizada pela Tempo apos conferencia, ainda nao executada; origin/main55136b44. Estatisticas e IA adiadas. [Analise corrente 23/10/2026] Recorte ancora analisado: duas lacunas de implementacao (filtro sectorial combinado com localizacao e ideia directa a partir de ancora sem oferta); uma reconciliacao de dados/ambiente e uma prova dirigida de interesse/login. Quinze fichas documentais QA mantem texto de sector/localizacao/regiao, sem correspondencias territoriais canonicas nem oferta publica directa nesse clone; ficha SYNTHETIC QA separada. Nao inferir perda na homologacao. Preservar recibo de 29 fichas e continuidade via oportunidade ja aceite. Ver inicio do manual para escopo, fontes e criterios; nenhuma implementacao de ancoras nesta passagem. | [PDF nativo guardado conferido 23/10/2026] Original encontrado na pasta indicada com titulo automatico Relatorio SYNTHETIC QA, extensao .pdf, maquina ONALA/macbook/Console. SHA256010eb4ea12015563c1b2f8bc255b1078c276f824c50690732541d5bffe34b8a6. Dez paginas renderizadas e conferidas: oportunidade309/Manica, cinco requisitos especificos, valores123456/45678/diferenca77778MZN; paginacao e legibilidade aprovadas. Sem regenerar PDF ou repetir Word/ZIP/provas aceites. Condicao satisfeita para1afdfee8+2856240c; disponibilizacao Git autorizada em execucao, ainda a confirmar instalada. Ver inicio do manual e native-pdf-and-anchor-review-20261023.json. Pendencias historicas de ficheiro em falta superadas; saldo de ancoras6985f82e preservado; Estatisticas/IA adiadas. | [Entrega confirmada 23/10/2026] 1afdfee8+2856240c entregues na homologacao8036b9b0. PDF original encontrado pelo titulo automatico na mesma pasta/maquina/sessao: dez paginas e ambito/requisitos/valores/paginacao conferidos, SHA256010eb4ea12015563c1b2f8bc255b1078c276f824c50690732541d5bffe34b8a6, sem regeneracao. Fast-forward55136b44->8036b9b0, instalador installed16:46:13UTC, zero migrations/importacoes. Revisao publica e15hashes funcionais coincidem; delta autenticado na ficha53/dossier958df138 verificado, versao5 preservada, zero novos pedidos/gravacoes/submissoes. Sem repetir provas aceites. Ver treatment-scope-installation-receipt-20261023.json e inicio do manual. Pendencias historicas de PDF/instalacao superadas neste recorte. Complementos e fechos anteriores preservados. Saldo ancora6985f82e mantido; Estatisticas/IA adiadas; sem fecho global.","documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas","Dependências operacionais desta entrega resolvidas: hashes, backup/restauro fresco, conta autenticada, scans e publicações. Dependências regulatórias específicas e editoriais restantes preservadas no critério atual. | Origem: pedido expresso da Tempo de18/10. IDs, especialização por leitura e ponte histórica são escolhas técnicas; sem nova regra organizacional. Ativo inalterado; disponibilização separada. Sem migration/instalação140000/150000; reversão retém somente a rota nova Fintech além dos dados/histórico e associação2→8. Estados e critérios anteriores preservados. | Origem: autorizacao expressa Tempo18/10/2026. Backup/restauro e execucao autenticada concluidos; 140000/150000 presentes uma vez, sem migrations. Reversao parcial preserva dados/auditoria/esquemas e rota compativel Fintech. Matriz/manual/backlog atuais preservados. Ficha integral dos parques separada.","Autorização Tempo para setores-fintech-QA-d5b4dc354265 DOC01 executada, limitada a 16 fontes/compilação e três artigos. Decisões fora deste recorte mantêm-se; nenhuma publicação do restante acervo.",Delta disponibilizado; pendências fora do recorte continuam na mesma matriz.,"Saldo operacional desta entrega: zero. A faixa 1h30–3h era estimativa, não saldo atual. Esforço das lacunas remanescentes depende de delimitação concreta; não repetir aceitações.","24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: 23/10/2026: anchor slice delivered in homologation cf2ddf21 after 3fd5128c; installed delta verified, 28 accepted territorial links restored in 13 projects, exact 29 approved fiches unchanged. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Preserved cdf8fcfb/8036b9b0 and earlier closures; no accepted proofs repeated; statistics/AI deferred. | 23/10/2026: anchor integration executable in isolated QA; 4 tests/116 assertions + 2 frontend tests; 28 accepted territorial links recovered in QA, 29 real published fiches preserved. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Homologation still 8036b9b0 until Git installation and exact 28-link recovery; no accepted proofs repeated; statistics/AI deferred. | outputs/investmoz-legado-ativacao-20261015/RESULTADO-FINAL.json; FINAL-READONLY.json; ANONYMOUS-HTTP.json; RECIBO-INTEGRIDADE-FINAL.json; outputs/investmoz-legado-restantes-setores-preparacao-20261015/INVENTARIO-E-RECORTE.json | 15/10/2026: outputs/investmoz-legado-setores-ativacao-20261015/FINAL-READONLY.json; ANONYMOUS-HTTP.json; SOURCE-DELIVERY.json; FRESH-BACKUP.json. 20 importados privados, scan clean e publicados pela sessão Osmane Nala (2); registos de negócio anteriores preservados. | 15/10/2026: outputs/investmoz-legado-inventario-reconciliado-20261015/SALDO-LEGADO.md; RECONCILIACAO-LEGADO.json; LEITURA-ESTADO.json; inventários existentes atualizados por identidade/versão/hash. | outputs/investmoz-fintech-investimento-QA-20261015/RESULTADO-QA.md; PROVA-DELTA-QA.json; HTTP-DELTA-QA.json; PROVA-FINAL-DELTA-QA.json; HTTP-RECUPERACAO-FINAL-QA.json; MANIFESTO-ENTREGA.json | outputs/investmoz-setores-fintech-ativacao-20261015/RELATORIO-ENTREGA.md; PUBLISHED.json; PRESERVACAO-FINAL.json; HTTP-OPERACIONAL.json; FRESH-BACKUP.json; RECIBO-FINAL.json | 18/10: sectores-duplicacoes-QA-9b6097f97121, organização sectorial/duplicações apenas QA. Energia8/Mineração7; Fintech9 especialização de Mercado6; oportunidade2 reclassificada2→8 sem duplicação; 56HTTP,30serviço,3SQL e5reversão observados. Relatório e manifesto exatos em outputs/investmoz-sectores-duplicacoes-QA-20261018/para-revisao/. | 18/10/2026: disponibilizada sectores-duplicacoes-QA-e9f7d821b6f7 em investemoz:5432, procedimento DOC02. Backup/restauro fresco validado. 34 fontes/167 build. Conta2 com permissao/MFA; oportunidade2 sector2 para8; evento/recibo unicos, operacao27e6a658-d8bc-4d94-ab7b-b977ba56d141. Mesma transacao/ligacao e limpeza SET LOCAL observadas. Provas em outputs/investmoz-sectores-duplicacoes-ativacao-20261018/CONFERENCIA-FINAL.json e para-revisao/RECIBO-EXECUCAO.json. | Homologação teste-investidor 19/10/2026: Sectores e duplicação visual=Instalado mas desabilitado; Legado — conteúdo restante=Instalado mas desabilitado. Saldo derivado e limites em outputs/investmoz-disponibilizacao-integral-20261019/SALDO-E-ACTUALIZACAO-CONSOLIDADA.md. Não substitui estado/provas do activo; trecho documental encerrado, vínculo dossier aberto. | Proposta integral fdcb31f1b5b9: aplicação activa local completa + R2/DOC01/destino reconciliados; schema/build/recuperação de contexto e reversão de apresentação ensaiados no clone isolado. Não instalado remotamente. Inc. QA territoriais/Inhambane/programas separados. Limites e decisões em outputs/investmoz-disponibilizacao-integral-20261019/PROPOSTA-INTEGRAL-PARA-DECISAO.md. | Execução autorizada fdcb31f1b5b9 concluída em teste-investidor: Sectores e duplicação visual=Disponível; Legado — conteúdo restante=Instalado mas desabilitado. 1080 hashes iguais, schema171/88, custódia/scan/recuperação reais. Sem publicação ou papéis novos. Vínculo dossier legítimo pendente; incrementos QA separados. Limites em outputs/investmoz-disponibilizacao-integral-20261019/RESULTADO-DISPONIBILIZACAO-INTEGRAL.md; não encerra critérios globais não demonstrados. +[UTILIZACAO-HOMOLOGACAO-20261019] 5: Disponibilidade condicionada conforme limite registado — Ecrã aberto: dez sectores principais, especialização Fintech sem cartão principal duplicado; 12 registos conservados. | 8: Disponibilidade condicionada conforme limite registado — Adaptador habilitado; artigos/imagens transportados privadamente, sem os publicar. | Recorte executável C concluído em QA. Restantes coberturas sectoriais/benefícios e encaminhamento visual de zona real têm limites concretos no manual; não bloqueiam os ramos já documentados. Integração/habilitação no destino não executadas. | Integração/habilitação deste recorte executadas em22/10/2026; referências anteriores a operação pendente são históricas. Não reabrir as provas aceites. Delta de complementos preparado/verificado em QA; conferência visual e instalação no destino ainda não realizadas. Relações sem oferta identificada permanecem necessidades, sem presumir inexistência no acervo. Cobertura transversal e restantes pendências desta linha mantêm-se. Actualização visual 23/10/2026: supera apenas a pendência visual dos complementos no recorte documentado. Não demonstra contextos específicos de várias oportunidades em zonas/parques, Terra/DUAT, Balcão ou manifestação. Sem disponibilização no destino nem fecho global. | [Saldo corrente 23/10/2026] São três lacunas de integração constatadas por leitura e quatro verificações delimitadas, não sete falhas de execução. Os itens 1–3 determinam a correcção executável seguinte; 4–6 podem ser conferidos independentemente em QA isolado; 7 depende apenas do âmbito corrigido. A contagem refere-se a estes sete recortes, não a cada formato ou campo. Uma verificação que passe encerra o item; uma que falhe regista o defeito concreto na mesma linha da matriz. Não criar outra matriz/backlog nem converter ausência de prova em regressão. Fechos preservados: 6b544548/4098192a; d8224ba8/af926180; 55136b44/b6a626c9. Notas historicas de falta de entrega destes recortes estao superadas. Ver sete recortes no inicio do manual existente. | [QA conjunta 23/10/2026] Itens 1-3 corrigidos: escolha de oportunidade no simulador, aplicabilidade/estados por oportunidade, atalho Terra pelo pedido associado. Provas dirigidas novas nos itens 4-6: retirada da primeira, contactos autorizados, entradas ideia/sector/territorio e login. Word/ZIP gerados; composicao de impressao conferida. Resta PDF nativo efectivamente guardado/paginacao e recorte ancora por analisar. Sem entrega na homologacao desta candidata. Ver estado corrente no inicio do manual; sete itens historicos abaixo nao sao o saldo corrente. Fechos 6b544548, d8224ba8, 55136b44 preservados. Estatisticas e IA adiadas. | [PDF nativo 23/10/2026] Falhas observadas na saida real: not_started e detalhe dos requisitos ausente. Correcao 2856240c sobre candidata 1afdfee8: estados humanos e requisitos apenas da oportunidade aplicavel. Teste novo native-pdf-scope passou; tipos/build passaram; sem repetir Word/ZIP. Saida real revista13, oportunidade309/Manica, valores QA123456/45678/diferenca77778MZN, pronta para gravacao manual. PDF guardado/paginacao pendentes por falta de controlo do dialogo nativo. Integracao/disponibilizacao ja autorizada pela Tempo apos conferencia, ainda nao executada; origin/main55136b44. Estatisticas e IA adiadas. [Analise corrente 23/10/2026] Recorte ancora analisado: duas lacunas de implementacao (filtro sectorial combinado com localizacao e ideia directa a partir de ancora sem oferta); uma reconciliacao de dados/ambiente e uma prova dirigida de interesse/login. Quinze fichas documentais QA mantem texto de sector/localizacao/regiao, sem correspondencias territoriais canonicas nem oferta publica directa nesse clone; ficha SYNTHETIC QA separada. Nao inferir perda na homologacao. Preservar recibo de 29 fichas e continuidade via oportunidade ja aceite. Ver inicio do manual para escopo, fontes e criterios; nenhuma implementacao de ancoras nesta passagem. | [PDF nativo guardado conferido 23/10/2026] Original encontrado na pasta indicada com titulo automatico Relatorio SYNTHETIC QA, extensao .pdf, maquina ONALA/macbook/Console. SHA256010eb4ea12015563c1b2f8bc255b1078c276f824c50690732541d5bffe34b8a6. Dez paginas renderizadas e conferidas: oportunidade309/Manica, cinco requisitos especificos, valores123456/45678/diferenca77778MZN; paginacao e legibilidade aprovadas. Sem regenerar PDF ou repetir Word/ZIP/provas aceites. Condicao satisfeita para1afdfee8+2856240c; disponibilizacao Git autorizada em execucao, ainda a confirmar instalada. Ver inicio do manual e native-pdf-and-anchor-review-20261023.json. Pendencias historicas de ficheiro em falta superadas; saldo de ancoras6985f82e preservado; Estatisticas/IA adiadas. | [Entrega confirmada 23/10/2026] 1afdfee8+2856240c entregues na homologacao8036b9b0. PDF original encontrado pelo titulo automatico na mesma pasta/maquina/sessao: dez paginas e ambito/requisitos/valores/paginacao conferidos, SHA256010eb4ea12015563c1b2f8bc255b1078c276f824c50690732541d5bffe34b8a6, sem regeneracao. Fast-forward55136b44->8036b9b0, instalador installed16:46:13UTC, zero migrations/importacoes. Revisao publica e15hashes funcionais coincidem; delta autenticado na ficha53/dossier958df138 verificado, versao5 preservada, zero novos pedidos/gravacoes/submissoes. Sem repetir provas aceites. Ver treatment-scope-installation-receipt-20261023.json e inicio do manual. Pendencias historicas de PDF/instalacao superadas neste recorte. Complementos e fechos anteriores preservados. Saldo ancora6985f82e mantido; Estatisticas/IA adiadas; sem fecho global.","documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas","Dependências operacionais desta entrega resolvidas: hashes, backup/restauro fresco, conta autenticada, scans e publicações. Dependências regulatórias específicas e editoriais restantes preservadas no critério atual. | Origem: pedido expresso da Tempo de18/10. IDs, especialização por leitura e ponte histórica são escolhas técnicas; sem nova regra organizacional. Ativo inalterado; disponibilização separada. Sem migration/instalação140000/150000; reversão retém somente a rota nova Fintech além dos dados/histórico e associação2→8. Estados e critérios anteriores preservados. | Origem: autorizacao expressa Tempo18/10/2026. Backup/restauro e execucao autenticada concluidos; 140000/150000 presentes uma vez, sem migrations. Reversao parcial preserva dados/auditoria/esquemas e rota compativel Fintech. Matriz/manual/backlog atuais preservados. Ficha integral dos parques separada.","Autorização Tempo para setores-fintech-QA-d5b4dc354265 DOC01 executada, limitada a 16 fontes/compilação e três artigos. Decisões fora deste recorte mantêm-se; nenhuma publicação do restante acervo.",Delta disponibilizado; pendências fora do recorte continuam na mesma matriz.,"Saldo operacional desta entrega: zero. A faixa 1h30–3h era estimativa, não saldo atual. Esforço das lacunas remanescentes depende de delimitação concreta; não repetir aceitações.","[APIEX-SWOT-20261110] outputs/investment-preparation-20261110/verification.json e artefactos sintéticos; seis casos API/211asserções,16frontend dirigidos, tipos/análise/lint. outputs/entrega-apiex-swot-20261110.zip, base7476dc34, sem migrations. Manual e saldo no início dos registos existentes. | Histórico anterior preservado: 24/10/2026 FECHO ESTABILIZACAO: reconciliado com entregas 6b544548, d8224ba8, 55136b44, 8036b9b0, cf2ddf21 e 066707ec; recibos mantidos. Zero novas falhas tecnicas conhecidas nos recortes delimitados. PDF, complementos, contextos por oportunidade, ancoras e mapas nao estao pendentes de entrega. Causa dos mapas limitada ao filtro publico e gate legado; nao explica todas as perdas anteriores. Saldo e limites precisos no inicio de traceability-and-manual.md e preservation-inventory-20261023.json, sem nova matriz/backlog. Preservacao tecnica cabe a Codex/programadores; Tempo avalia utilidade/clareza/apresentacao. Ordem: estabilizacao, simulador fiscal delimitado, Imobiliario, Bens de consumo/franquias, Estatistica/paineis, IA. Historico abaixo nao reabre fechos aceites nem declara todos os criterios agregados concluidos. | Historico preservado: 23/10/2026: anchor slice delivered in homologation cf2ddf21 after 3fd5128c; installed delta verified, 28 accepted territorial links restored in 13 projects, exact 29 approved fiches unchanged. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Preserved cdf8fcfb/8036b9b0 and earlier closures; no accepted proofs repeated; statistics/AI deferred. | 23/10/2026: anchor integration executable in isolated QA; 4 tests/116 assertions + 2 frontend tests; 28 accepted territorial links recovered in QA, 29 real published fiches preserved. Receipt docs/investmoz/unification/anchor-integration-receipt-20261023.json. Homologation still 8036b9b0 until Git installation and exact 28-link recovery; no accepted proofs repeated; statistics/AI deferred. | outputs/investmoz-legado-ativacao-20261015/RESULTADO-FINAL.json; FINAL-READONLY.json; ANONYMOUS-HTTP.json; RECIBO-INTEGRIDADE-FINAL.json; outputs/investmoz-legado-restantes-setores-preparacao-20261015/INVENTARIO-E-RECORTE.json | 15/10/2026: outputs/investmoz-legado-setores-ativacao-20261015/FINAL-READONLY.json; ANONYMOUS-HTTP.json; SOURCE-DELIVERY.json; FRESH-BACKUP.json. 20 importados privados, scan clean e publicados pela sessão Osmane Nala (2); registos de negócio anteriores preservados. | 15/10/2026: outputs/investmoz-legado-inventario-reconciliado-20261015/SALDO-LEGADO.md; RECONCILIACAO-LEGADO.json; LEITURA-ESTADO.json; inventários existentes atualizados por identidade/versão/hash. | outputs/investmoz-fintech-investimento-QA-20261015/RESULTADO-QA.md; PROVA-DELTA-QA.json; HTTP-DELTA-QA.json; PROVA-FINAL-DELTA-QA.json; HTTP-RECUPERACAO-FINAL-QA.json; MANIFESTO-ENTREGA.json | outputs/investmoz-setores-fintech-ativacao-20261015/RELATORIO-ENTREGA.md; PUBLISHED.json; PRESERVACAO-FINAL.json; HTTP-OPERACIONAL.json; FRESH-BACKUP.json; RECIBO-FINAL.json | 18/10: sectores-duplicacoes-QA-9b6097f97121, organização sectorial/duplicações apenas QA. Energia8/Mineração7; Fintech9 especialização de Mercado6; oportunidade2 reclassificada2→8 sem duplicação; 56HTTP,30serviço,3SQL e5reversão observados. Relatório e manifesto exatos em outputs/investmoz-sectores-duplicacoes-QA-20261018/para-revisao/. | 18/10/2026: disponibilizada sectores-duplicacoes-QA-e9f7d821b6f7 em investemoz:5432, procedimento DOC02. Backup/restauro fresco validado. 34 fontes/167 build. Conta2 com permissao/MFA; oportunidade2 sector2 para8; evento/recibo unicos, operacao27e6a658-d8bc-4d94-ab7b-b977ba56d141. Mesma transacao/ligacao e limpeza SET LOCAL observadas. Provas em outputs/investmoz-sectores-duplicacoes-ativacao-20261018/CONFERENCIA-FINAL.json e para-revisao/RECIBO-EXECUCAO.json. | Homologação teste-investidor 19/10/2026: Sectores e duplicação visual=Instalado mas desabilitado; Legado — conteúdo restante=Instalado mas desabilitado. Saldo derivado e limites em outputs/investmoz-disponibilizacao-integral-20261019/SALDO-E-ACTUALIZACAO-CONSOLIDADA.md. Não substitui estado/provas do activo; trecho documental encerrado, vínculo dossier aberto. | Proposta integral fdcb31f1b5b9: aplicação activa local completa + R2/DOC01/destino reconciliados; schema/build/recuperação de contexto e reversão de apresentação ensaiados no clone isolado. Não instalado remotamente. Inc. QA territoriais/Inhambane/programas separados. Limites e decisões em outputs/investmoz-disponibilizacao-integral-20261019/PROPOSTA-INTEGRAL-PARA-DECISAO.md. | Execução autorizada fdcb31f1b5b9 concluída em teste-investidor: Sectores e duplicação visual=Disponível; Legado — conteúdo restante=Instalado mas desabilitado. 1080 hashes iguais, schema171/88, custódia/scan/recuperação reais. Sem publicação ou papéis novos. Vínculo dossier legítimo pendente; incrementos QA separados. Limites em outputs/investmoz-disponibilizacao-integral-20261019/RESULTADO-DISPONIBILIZACAO-INTEGRAL.md; não encerra critérios globais não demonstrados. [UTILIZACAO-HOMOLOGACAO-20261019] Leitura nominal de contas/recursos no destino; saldo18/10; prévia29 sem escrita; comparação de hashes QA separados. outputs/investmoz-disponibilizacao-integral-20261019/UTILIZACAO-EFECTIVA-HOMOLOGACAO.md diff --git a/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md b/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md index 6bf2f800..84c496b7 100644 --- a/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md +++ b/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md @@ -1,3 +1,15 @@ +## 10/11/2026 — APIEX e SWOT no dossier existente: QA concluído, instalação pendente + +**Instalado:** `7476dc343098f15a7982e9d7581bf4f59d43bc1a` em https://teste-investidor.tempo.co.mz, promovido às14:28:12UTC e conferido às14:29:07UTC (16:29 locais). Transporte CBF15 deixa de ser pendência de instalação. Delta14hashes Git/HTTPS, root/up/login/revision200, configuração intacta, zero migrations/importações; backup/restauro190tabelas e369ficheiros conferidos. Recibos `outputs/cbf15-carry-delivery-20261110/`; release anterior e pacotes preservados. + +**Implementado em QA, ainda não instalado — APIEX:** dossier existente → requisitos fundamentados disponíveis/em falta/não aplicáveis/indeterminados → documentos existentes e complementos → revisão → prévia/ZIP com índice e anexos íntegros → registo da entrega externa, esclarecimento, resposta e decisão com data/referência/comprovativo. Dados do investidor/empresa/contexto/localização/oportunidade reutilizados. Estados em preparação/pronto para entrega/entrega registada/decisão recebida distintos; exportar não submete nem aprova. Snapshot preparado, versões, SHA e pacote privado cifrado preservados; recuperação devolve os mesmos bytes após alteração do contexto, revalidando acesso e segurança dos documentos. Ausência de recepção electrónica APIEX, segundo a orientação Tempo, não bloqueia este percurso; nenhum conector fictício ou formulário oficial inventado. Reutiliza o avaliador e modelos/fontes aceites; períodos/regimes fora do âmbito actualmente mapeado ficam indeterminados, sem conclusão normativa presumida. + +**Implementado em QA, ainda não instalado — SWOT:** no mesmo dossier/oportunidade, objecto explícito investimento/território/sector/cluster, evidências do contexto/análise proactiva e Competitividade pública aprovada, quatro dimensões internas/externas, fonte/data/classificação de cada conclusão (facto documentado/hipótese/por confirmar). Sem pontuação, IA ou inferência de ausência pela falta de registos. Gravação/recuperação/histórico paginado e revisão pela equipa com permissões existentes. Alteração/retirada de fontes assinala revisão, conserva fotografia consultada e edições deliberadas. Acções ideia/oportunidade/parceiros/risco continuam no mesmo dossier; risco liga à tarefa nativa com origem própria e repetição sem duplicação. Privado por defeito; publicação exige o fluxo editorial existente, nunca automática. Contextos retirados ficam no histórico privado de leitura, sem reactivação. + +Provas sintéticas no QA55441 existente, com rollback: seis casos API/211asserções;16casos frontend dirigidos (incluindo transporte e cabeçalho comum147páginas), tipos, análise estática e lint aprovados. `outputs/investment-preparation-20261110/verification.json`, ZIP/índice/anexos, recuperação SWOT e provas de isolamento/histórico/segurança. Pacote Git agrupado `outputs/entrega-apiex-swot-20261110.zip`, base exacta7476dc34, reversão de código sem apagar auditoria, pacotes privados ou tarefas posteriores. Nenhuma migration/base/porta/conta real nova, submissão real ou publicação. Compilação QA separada; provas anteriores reutilizadas. + +**Saldo concreto:** APIEX e SWOT acima encerrados em implementação QA; instalação deste conjunto e conferência visual continuam pendentes. O conector mantém “The browser access host is unavailable”; SSR/testes não substituem visual, sem novo ciclo de reinícios. Os restantes módulos conservam o saldo anterior, incluindo resíduos L1–L7, restanteL8 e L9–L16. Isto não declara o portal integralmente concluído. + ## 10/11/2026 — transporte documental CBF15 em QA Homologação mantém `d216830b`; este delta ainda não está instalado. Tipos/lint/Pint/buildQA aprovados; pacote com aplicação/reversão exactas,sem migrations/dados/credenciais. Pendência encerrada no recorte normal residente2026/ano civil/MZN: crédito de investimento de origem anterior do mesmo contribuinte/projecto/local/regime, com activo/documento/parcela, exercício de origem, NUIT/projecto de origem, taxa original e qualificação históricas documentados. Exercício de origem anterior a2026,dentro da janela original e não anterior à aquisição; no projecto em funcionamento,a aquisição não precede o início aplicável. Não renova o prazo nem recalcula origem a outra taxa. Valor corrente/ausência e uso efectivo agregado exigem reconciliação explícita; histórico de simulações não equivale a utilização fiscal. diff --git a/resources/js/lib/investment-preparation.ts b/resources/js/lib/investment-preparation.ts new file mode 100644 index 00000000..27f17492 --- /dev/null +++ b/resources/js/lib/investment-preparation.ts @@ -0,0 +1,143 @@ +import { createOperationKey } from './operation-key.ts'; +export const swotDimensions = { + strength: 'Forças — internas ao objecto', + weakness: 'Fraquezas — internas ao objecto', + opportunity: 'Oportunidades — externas ao objecto', + threat: 'Ameaças — externas ao objecto', +} as const; +export type SwotRow = { + id: string; + dimension: keyof typeof swotDimensions; + text: string; + reference: string; + source_key: string | null; + date: string | null; + classification: 'documented_fact' | 'hypothesis' | 'unconfirmed'; +}; +export type SwotDraft = { + sources_snapshot?: unknown; + snapshot_fingerprint?: string; + object_key: string; + scope: string | null; + rows: SwotRow[]; + source_fingerprint: string; + review?: { reason: string; at: string } | null; + actions: { + id: string; + title: string; + kind: string; + href: string; + review_version: number; + }[]; +}; +export type Workspace = { + historical?: boolean; + initial_scope?: boolean; + saved_scopes?: { key: string; label: string; href: string }[]; + case: { id: string; title: string; closed: boolean }; + opportunity: string | null; + opportunity_label?: string | null; + version: number; + apiex: { + note: string | null; + additional_documents: string[]; + review: { reason: string; at: string; fingerprint: string } | null; + exports: { id: string; at: string; context_revision: number }[]; + external: { + id: string; + kind: string; + date: string; + reference: string; + proof_document: string; + related_id?: string; + export_id: string; + outcome?: string; + }[]; + }; + swot: SwotDraft; + api_state: string; + api_issues: string[]; + api_fingerprint: string; + swot_fingerprint: string; + swot_review_required: boolean; + can_write: boolean; + can_review: boolean; + links: Record; + objects: { key: string; label: string; kind: string }[]; + sources: { + key: string; + label: string; + consulted?: unknown; + current?: unknown; + notice?: string; + }[]; + reused?: Record; + context: { revision: number; fields: Record }; + assessment: { + requirements: { + key: string; + label: string; + state: string; + required: boolean; + available: boolean; + reason: string; + document_id: string | null; + source: { reference: string; url: string }; + }[]; + }; + documents: { + id: string; + document_id: string; + file_name: string; + available: boolean; + version_no: number; + }[]; + history_next?: number | null; + history: { + version: number; + action: string; + at: string; + actor: number; + operation_key?: string; + }[]; +}; +/** A lost response retains the exact intent; editing fields never mutates a retry. */ +export class PreparationAttempt { + private value: Record | null = null; + start( + version: number, + opportunity: string | null, + action: string, + data: Record, + reason: string, + ) { + if (this.value) + throw Error('Resolva a tentativa anterior antes de iniciar outra.'); + this.value = JSON.parse( + JSON.stringify({ + ...data, + version, + opportunity, + action, + reason, + operation_key: createOperationKey(), + }), + ) as Record; + return this.current()!; + } + current() { + return this.value ? structuredClone(this.value) : null; + } + complete() { + this.value = null; + } + canAdopt(view: Pick) { + return ( + !this.value || + view.version > Number(this.value.version) || + view.history.some( + (h) => h.operation_key === this.value?.operation_key, + ) + ); + } +} diff --git a/resources/js/lib/profile-json.ts b/resources/js/lib/profile-json.ts index 84708c3f..8e288cc8 100644 --- a/resources/js/lib/profile-json.ts +++ b/resources/js/lib/profile-json.ts @@ -3,6 +3,7 @@ export class ProfileValidationError extends Error { message: string, public readonly fields: Record, public readonly reauthenticate = false, + public readonly status: number | null = null, ) { super(message); } @@ -67,6 +68,7 @@ export async function profileJson( ]), ), reauthenticate, + response.status, ); return result; } diff --git a/resources/js/pages/investor-path/preparation.tsx b/resources/js/pages/investor-path/preparation.tsx new file mode 100644 index 00000000..5f6cb04d --- /dev/null +++ b/resources/js/pages/investor-path/preparation.tsx @@ -0,0 +1,1417 @@ +import { useEffect, useRef, useState } from 'react'; +import { Link, router } from '@inertiajs/react'; +import { Frame, card, input, button } from '@/pages/investment/shared'; +import { profileJson, ProfileValidationError } from '@/lib/profile-json'; +import { createOperationKey } from '@/lib/operation-key'; +import { + PreparationAttempt, + swotDimensions, + type SwotRow, + type Workspace, +} from '@/lib/investment-preparation'; + +const apiStates: Record = { + preparing: 'Em preparação', + ready: 'Pronto para entrega', + delivery_recorded: 'Entrega registada', + decision_received: 'Decisão recebida', +}; +const externalKinds: Record = { + delivery: 'Entrega externa', + clarification: 'Pedido de esclarecimento', + response: 'Resposta ao esclarecimento', + decision: 'Decisão recebida', +}; +export default function Preparation({ workspace }: { workspace: Workspace }) { + return ( + + ); +} +function PreparationEditor({ initial }: { initial: Workspace }) { + const [view, setView] = useState(initial), + [tab, setTab] = useState<'apiex' | 'swot'>('apiex'); + const [swot, setSwot] = useState({ + ...initial.swot, + object_key: initial.swot.object_key || 'investment:' + initial.case.id, + source_fingerprint: + initial.swot.source_fingerprint || initial.swot_fingerprint, + }); + const [note, setNote] = useState(initial.apiex.note ?? ''), + [additional, setAdditional] = useState( + initial.apiex.additional_documents, + ); + const [reason, setReason] = useState(''), + [busy, setBusy] = useState(false), + [error, setError] = useState(''), + [notice, setNotice] = useState(''), + [pending, setPending] = useState(false), + [recovery, setRecovery] = useState(null); + const [apiDirty, setApiDirty] = useState(false), + [swotDirty, setSwotDirty] = useState(false); + const dirty = tab === 'apiex' ? apiDirty : swotDirty; + function setDirty(value: boolean) { + if (tab === 'apiex') setApiDirty(value); + else setSwotDirty(value); + } + const [external, setExternal] = useState({ + kind: 'delivery', + date: '', + reference: '', + proof_document: '', + export_id: '', + related_id: '', + outcome: '', + }); + const [action, setAction] = useState({ + conclusion_id: '', + kind: 'risk', + title: '', + }); + const attempt = useRef(new PreparationAttempt()), + running = useRef(false); + const base = '/investimentos/' + view.case.id + '/preparacao', + query = view.initial_scope + ? '?history_scope=dossier' + : view.opportunity + ? '?opportunity=' + encodeURIComponent(view.opportunity) + : ''; + useEffect(() => { + const unsaved = apiDirty || swotDirty || pending || busy; + if (!unsaved) return; + const leave = (event: BeforeUnloadEvent) => { + event.preventDefault(); + event.returnValue = ''; + }; + window.addEventListener('beforeunload', leave); + const off = router.on('before', (event) => { + if ( + !window.confirm( + 'Existem campos locais ou uma confirmação pendente. Sair sem os guardar?', + ) + ) + event.preventDefault(); + }); + return () => { + window.removeEventListener('beforeunload', leave); + off(); + }; + }, [apiDirty, swotDirty, pending, busy]); + function download(id: string) { + const a = document.createElement('a'); + a.href = base + '/exportar/' + encodeURIComponent(id) + query; + a.download = ''; + a.click(); + } + async function send(body: Record) { + if (running.current) return; + running.current = true; + setBusy(true); + setError(''); + try { + const next = (await profileJson(base, body)) as Workspace; + setView(next); + attempt.current.complete(); + setPending(false); + setRecovery(null); + if (body.action === 'swot_save' || body.action === 'swot_restore') { + setSwot({ + ...next.swot, + source_fingerprint: + next.swot.source_fingerprint || next.swot_fingerprint, + }); + setSwotDirty(false); + } + if (body.action === 'swot_review') + setSwot((old) => ({ + ...old, + source_fingerprint: next.swot.source_fingerprint, + })); + if (body.action === 'apiex_save') setApiDirty(false); + if (body.action === 'external') + setExternal((old) => ({ + ...old, + date: '', + reference: '', + proof_document: '', + related_id: '', + outcome: '', + })); + if (body.action === 'apiex_export') { + download(String(body.operation_key)); + setExternal((old) => ({ + ...old, + export_id: String(body.operation_key), + })); + setNotice( + 'Pacote preparado para descarga. Exportar não submete nem regista entrega externa.', + ); + } else + setNotice( + 'Versão ' + + next.version + + ' guardada. Dados e histórico anteriores preservados.', + ); + } catch (e) { + setError( + e instanceof Error + ? e.message + : 'Não foi possível confirmar a gravação.', + ); + setPending(true); + if ( + e instanceof ProfileValidationError && + (e.status === null || (e.status >= 400 && e.status < 500 && e.status !== 408)) + ) { + attempt.current.complete(); + setPending(false); + setError(e.message + ' ' + Object.values(e.fields).join(' ')); + } + } finally { + running.current = false; + setBusy(false); + } + } + function act(kind: string, data: Record = {}) { + if (running.current || pending) return; + void send( + attempt.current.start( + view.version, + view.opportunity, + kind, + data, + reason.trim() || + 'Operador confere e guarda esta versão do dossier', + ), + ); + } + async function consult() { + if (running.current) return; + running.current = true; + setBusy(true); + try { + setRecovery( + (await profileJson(base + query, {}, 'GET')) as Workspace, + ); + } catch (e) { + setError(e instanceof Error ? e.message : 'Consulta indisponível'); + } finally { + running.current = false; + setBusy(false); + } + } + function adopt() { + if (!recovery || !attempt.current.canAdopt(recovery)) return; + setView(recovery); + setSwot({ + ...recovery.swot, + object_key: + recovery.swot.object_key || 'investment:' + view.case.id, + source_fingerprint: + recovery.swot.source_fingerprint || recovery.swot_fingerprint, + }); + setNote(recovery.apiex.note ?? ''); + setAdditional(recovery.apiex.additional_documents); + attempt.current.complete(); + setPending(false); + setApiDirty(false); + setSwotDirty(false); + setRecovery(null); + } + async function olderHistory() { + if (running.current || busy || !view.history_next) return; + running.current = true; + setBusy(true); + try { + const next = (await profileJson( + base + + query + + (query ? '&' : '?') + + 'history_before=' + + view.history_next, + {}, + 'GET', + )) as Workspace; + setView((old) => ({ + ...old, + history: [ + ...new Map( + [...old.history, ...next.history].map((h) => [ + h.version, + h, + ]), + ).values(), + ], + history_next: next.history_next, + })); + } catch (e) { + setError( + e instanceof Error + ? e.message + : 'Não foi possível consultar o histórico.', + ); + } finally { + running.current = false; + setBusy(false); + } + } + function keepLocal() { + if (!recovery || !attempt.current.canAdopt(recovery)) return; + setView(recovery); + setApiDirty(true); + setSwotDirty(true); + attempt.current.complete(); + setPending(false); + setRecovery(null); + setNotice( + 'Campos locais mantidos; fontes e versão do servidor actualizadas. Compare,guarde e reveja antes de avançar.', + ); + } + const change = (id: string, patch: Partial) => { + setSwot((old) => ({ + ...old, + rows: old.rows.map((r) => (r.id === id ? { ...r, ...patch } : r)), + })); + setDirty(true); + }; + const exportId = + external.export_id || + (view.apiex.exports.length === 1 ? view.apiex.exports[0].id : ''); + const locked = busy || pending; + return ( + +
+

+ {view.case.title} · Oportunidade:{' '} + {view.opportunity_label ?? 'contexto único do dossier'} · Versão{' '} + {view.version} +

+ + Voltar ao mesmo dossier + + {view.historical && ( +

+ Oportunidade retirada das escolhas actuais. Consulta + histórica preservada; não são alteradas as escolhas nem + os dados actuais do dossier. +

+ )} +

+ Preparação privada. Não há ligação de recepção electrónica + APIEX. Exportação, entrega externa e decisão são registos + distintos. A SWOT apoia a decisão; não produz pontuação + automática. +

+
+ + + +
+ {error && ( +

+ {error} Os campos locais foram conservados. +

+ )} + {notice &&

{notice}

} + {pending && ( +
+

+ A confirmação está pendente. Repetir conserva + exactamente a mesma tentativa,sem duplicar o + registo. +

+ +
+ )} + {recovery && ( +
+

Versão do servidor: {recovery.version}

+

+ Consultar não substitui os campos locais. Compare + antes de recuperar. +

+
+                            {JSON.stringify(
+                                { apiex: recovery.apiex, swot: recovery.swot },
+                                null,
+                                2,
+                            )}
+                        
+ + +
+ )} +
+ + {tab === 'apiex' ? ( + <> +
+

+ 1. Requisitos — {apiStates[view.api_state]} +

+ + Alterar dados e enquadramento reutilizados + +

+ Dados do investidor,empresa,oportunidade e + localização provêm do contexto autorizado. + Não é formulário oficial nem aprovação. +

+
+ + Resumo dos dados reutilizados — + consultar + +
+                                        {JSON.stringify(
+                                            view.context.fields,
+                                            null,
+                                            2,
+                                        )}
+                                    
+
+
    + {view.assessment.requirements.map((r) => ( +
  • + {r.label}:{' '} + {r.state === 'not_applicable' + ? 'Não aplicável' + : r.available + ? 'Disponível' + : r.state === 'indeterminate' + ? 'Por determinar' + : 'Em falta/indisponível'} +

    + {r.reason} ·{' '} + + {r.source.reference} + +

    +
  • + ))} +
+ {!!view.api_issues.length && ( +
+

Falta completar ou conferir

+
    + {view.api_issues.map((v, i) => ( +
  • {v}
  • + ))} +
+
+ )} +
+
+

+ 2. Documentos e modelos existentes +

+ + Completar ou associar documentos no mesmo + dossier + {' '} + + Consultar modelos e documentos na biblioteca + deste contexto + +

+ Os anexos exigidos são incluídos pela + associação existente. Escolha outros + modelos/documentos já disponíveis,sem criar + formulários oficiais. +

+
+ + Anexos adicionais — consultar ou alterar + + {view.documents.map((d) => ( + + ))} +
+