From 1da273f1f30674c2b368736e8adca609eaad8037 Mon Sep 17 00:00:00 2001
From: nala
Date: Mon, 2 Nov 2026 20:31:15 +0200
Subject: [PATCH] commit16
---
.../Commands/DispatchInvestmentAlerts.php | 25 +
.../Api/V1/OpportunityController.php | 12 +-
.../DeskServiceEditorController.php | 35 +
.../FundingProgrammeController.php | 182 ++
.../InvestmentAlertPreferencesController.php | 20 +
.../InvestmentDiscoveryController.php | 11 +-
.../InvestmentWorkspaceController.php | 53 +-
.../Controllers/ProcurementController.php | 25 +-
.../PublicBusinessOpportunityController.php | 13 +-
.../Controllers/VirtualDeskController.php | 7 +-
.../EnsureScopedPortalAdministration.php | 2 +-
app/Http/Middleware/HandleInertiaRequests.php | 2 +
app/Services/BusinessFormSchema.php | 6 +-
app/Services/DeskServiceEditor.php | 197 ++
app/Services/DocumentManagementAccess.php | 7 +
app/Services/FundingProgrammeReferences.php | 50 +
app/Services/FundingProgrammes.php | 453 +++
app/Services/InvestmentCatalogue.php | 14 +-
app/Services/InvestmentOpportunityAlerts.php | 263 ++
app/Services/InvestmentWorkspace.php | 56 +
app/Services/OpportunityTextSearch.php | 88 +
app/Services/Procurement.php | 44 +-
app/Services/VirtualDesk.php | 84 +-
database/data/funding-references.json | 56 +
...2_190000_investment_opportunity_alerts.php | 54 +
..._11_02_200000_investment_tender_alerts.php | 47 +
..._02_210000_funding_programme_catalogue.php | 50 +
...11_02_220000_investment_funding_alerts.php | 41 +
.../consolidated-review-matrix-2026-10-03.md | 4 +
.../local-validation-20261029.json | 765 +++++
.../unification/traceability-and-manual.md | 278 ++
docs/investmoz/v2/auditoria-portal/backlog.md | 31 +
.../formularios-20261102.json | 2877 +++++++++++++++++
.../v2/auditoria-portal/matriz-requisitos.csv | 24 +-
.../visao-consolidada-modulos.md | 7 +
.../components/catalogue-investment-map.tsx | 72 +
resources/js/components/country-select.tsx | 3 -
.../js/components/desk-service-history.tsx | 228 ++
resources/js/components/dossier-prefill.tsx | 2 +-
.../components/interactive-investment-map.tsx | 325 +-
.../js/components/investment-map-coverage.tsx | 6 +-
.../js/components/investment-map-panel.tsx | 78 +-
.../opportunity-alert-preferences.tsx | 429 +++
.../components/opportunity-contact-form.tsx | 9 +-
.../opportunity-parcel-geometry.tsx | 1 +
.../opportunity-related-results.tsx | 60 +
.../js/components/portal-grouped-menu.tsx | 63 +-
resources/js/components/portal-hero.tsx | 29 +-
.../js/components/similar-businesses.tsx | 239 ++
.../js/components/structure-geography.tsx | 2 +
resources/js/components/tempo-footer.tsx | 2 +-
.../components/territory-geometry-preview.tsx | 108 +-
.../js/components/use-territory-geometry.ts | 57 +
resources/js/hooks/use-interest-draft.ts | 28 +-
resources/js/lib/catalogue-context.ts | 21 +-
resources/js/lib/desk-field-visibility.ts | 23 +
resources/js/lib/investor-context.ts | 21 +-
resources/js/lib/opportunity-selection.ts | 32 +
resources/js/lib/portal-api.ts | 15 +-
resources/js/lib/portal-navigation.ts | 24 +-
resources/js/lib/profile-json.ts | 40 +-
resources/js/lib/public-business-offline.ts | 85 +
.../js/lib/public-opportunity-offline.ts | 87 +
resources/js/lib/public-record-offline.ts | 64 +
resources/js/pages/PortalInvestidor.tsx | 14 +-
resources/js/pages/desk/install.tsx | 18 +-
resources/js/pages/desk/request.tsx | 19 +-
resources/js/pages/desk/service-editor.tsx | 598 ++++
resources/js/pages/funding/edit.tsx | 943 ++++++
resources/js/pages/funding/index.tsx | 212 ++
resources/js/pages/funding/manage.tsx | 64 +
resources/js/pages/funding/reference.tsx | 121 +
resources/js/pages/funding/saved.tsx | 91 +
resources/js/pages/funding/shared.ts | 55 +
resources/js/pages/funding/show.tsx | 332 ++
.../js/pages/investment/business-interest.tsx | 18 +-
.../pages/investment/business-opportunity.tsx | 52 +
resources/js/pages/investment/catalogue.tsx | 93 +-
resources/js/pages/investment/detail.tsx | 25 +
.../js/pages/investment/notifications.tsx | 179 +-
resources/js/pages/investment/profile.tsx | 9 +-
resources/js/pages/investment/shared.tsx | 31 +-
resources/js/pages/investment/submission.tsx | 11 +-
resources/js/pages/investment/zones.tsx | 2 +
resources/js/pages/land-assistance/form.tsx | 4 +-
resources/js/pages/partnerships/catalogue.tsx | 11 +-
resources/js/pages/partnerships/editor.tsx | 2 +-
resources/js/pages/portal/services.tsx | 8 +-
resources/js/pages/portfolio/index.tsx | 2 +
resources/js/pages/portfolio/workspace.tsx | 7 +-
resources/js/pages/procurement/edit.tsx | 8 +-
.../js/pages/profiles/administration.tsx | 4 +-
resources/js/pages/profiles/request.tsx | 2 +-
.../views/desk/receipt-answers.blade.php | 11 +
resources/views/desk/receipt.blade.php | 23 +-
routes/console.php | 1 +
routes/funding.php | 25 +
routes/investment.php | 2 +
routes/virtual-desk.php | 4 +
routes/web.php | 1 +
.../Feature/BusinessMarketplacePublicTest.php | 42 +-
tests/Feature/DeskFormAnalysisScopeTest.php | 107 +
.../Feature/DeskLocationApplicabilityTest.php | 40 +
.../Feature/DeskReceiptCompatibilityTest.php | 28 +
tests/Feature/DeskServiceEditorTest.php | 214 ++
.../Feature/DeskServiceSchemaPrefillTest.php | 67 +
tests/Feature/ExistingBusinessIntakeTest.php | 4 +-
tests/Feature/FundingProgrammesTest.php | 269 ++
tests/Feature/InvestmentFundingAlertsTest.php | 198 ++
.../InvestmentOpportunityAlertsTest.php | 225 ++
tests/Feature/InvestmentTenderAlertsTest.php | 224 ++
tests/Feature/QuickOpportunitySearchTest.php | 89 +
tests/frontend/catalogue-map-layers.test.mjs | 454 +++
.../catalogue-request-errors.test.mjs | 147 +
.../frontend/desk-request-conditions.test.mjs | 129 +
tests/frontend/desk-service-editor.test.mjs | 117 +
tests/frontend/desk-service-history.test.mjs | 186 ++
.../frontend/interest-draft-storage.test.mjs | 72 +
tests/frontend/investment-map-panel.test.mjs | 38 +-
tests/frontend/investor-context-api.test.mjs | 60 +
.../opportunity-alert-preferences.test.mjs | 454 +++
tests/frontend/opportunity-selection.test.mjs | 60 +
tests/frontend/portal-api.test.mjs | 40 +-
tests/frontend/portal-navigation.test.mjs | 76 +
tests/frontend/profile-json.test.mjs | 140 +
.../frontend/public-business-offline.test.mjs | 127 +
.../public-opportunity-offline.test.mjs | 75 +
.../quick-opportunity-search.test.mjs | 133 +
tests/frontend/similar-businesses.test.mjs | 225 ++
tools/prepare-fiscal-preservation-fixture.php | 86 +
tools/verify-funding-concurrency.php | 164 +
131 files changed, 14802 insertions(+), 526 deletions(-)
create mode 100644 app/Console/Commands/DispatchInvestmentAlerts.php
create mode 100644 app/Http/Controllers/DeskServiceEditorController.php
create mode 100644 app/Http/Controllers/FundingProgrammeController.php
create mode 100644 app/Http/Controllers/InvestmentAlertPreferencesController.php
create mode 100644 app/Services/DeskServiceEditor.php
create mode 100644 app/Services/FundingProgrammeReferences.php
create mode 100644 app/Services/FundingProgrammes.php
create mode 100644 app/Services/InvestmentOpportunityAlerts.php
create mode 100644 app/Services/OpportunityTextSearch.php
create mode 100644 database/data/funding-references.json
create mode 100644 database/migrations/2026_11_02_190000_investment_opportunity_alerts.php
create mode 100644 database/migrations/2026_11_02_200000_investment_tender_alerts.php
create mode 100644 database/migrations/2026_11_02_210000_funding_programme_catalogue.php
create mode 100644 database/migrations/2026_11_02_220000_investment_funding_alerts.php
create mode 100644 docs/investmoz/v2/auditoria-portal/formularios-20261102.json
create mode 100644 resources/js/components/catalogue-investment-map.tsx
create mode 100644 resources/js/components/desk-service-history.tsx
create mode 100644 resources/js/components/opportunity-alert-preferences.tsx
create mode 100644 resources/js/components/opportunity-related-results.tsx
create mode 100644 resources/js/components/similar-businesses.tsx
create mode 100644 resources/js/components/use-territory-geometry.ts
create mode 100644 resources/js/lib/desk-field-visibility.ts
create mode 100644 resources/js/lib/opportunity-selection.ts
create mode 100644 resources/js/lib/public-business-offline.ts
create mode 100644 resources/js/lib/public-opportunity-offline.ts
create mode 100644 resources/js/lib/public-record-offline.ts
create mode 100644 resources/js/pages/desk/service-editor.tsx
create mode 100644 resources/js/pages/funding/edit.tsx
create mode 100644 resources/js/pages/funding/index.tsx
create mode 100644 resources/js/pages/funding/manage.tsx
create mode 100644 resources/js/pages/funding/reference.tsx
create mode 100644 resources/js/pages/funding/saved.tsx
create mode 100644 resources/js/pages/funding/shared.ts
create mode 100644 resources/js/pages/funding/show.tsx
create mode 100644 resources/views/desk/receipt-answers.blade.php
create mode 100644 routes/funding.php
create mode 100644 tests/Feature/DeskFormAnalysisScopeTest.php
create mode 100644 tests/Feature/DeskLocationApplicabilityTest.php
create mode 100644 tests/Feature/DeskReceiptCompatibilityTest.php
create mode 100644 tests/Feature/DeskServiceEditorTest.php
create mode 100644 tests/Feature/DeskServiceSchemaPrefillTest.php
create mode 100644 tests/Feature/FundingProgrammesTest.php
create mode 100644 tests/Feature/InvestmentFundingAlertsTest.php
create mode 100644 tests/Feature/InvestmentOpportunityAlertsTest.php
create mode 100644 tests/Feature/InvestmentTenderAlertsTest.php
create mode 100644 tests/Feature/QuickOpportunitySearchTest.php
create mode 100644 tests/frontend/catalogue-map-layers.test.mjs
create mode 100644 tests/frontend/catalogue-request-errors.test.mjs
create mode 100644 tests/frontend/desk-request-conditions.test.mjs
create mode 100644 tests/frontend/desk-service-editor.test.mjs
create mode 100644 tests/frontend/desk-service-history.test.mjs
create mode 100644 tests/frontend/interest-draft-storage.test.mjs
create mode 100644 tests/frontend/opportunity-alert-preferences.test.mjs
create mode 100644 tests/frontend/opportunity-selection.test.mjs
create mode 100644 tests/frontend/profile-json.test.mjs
create mode 100644 tests/frontend/public-business-offline.test.mjs
create mode 100644 tests/frontend/public-opportunity-offline.test.mjs
create mode 100644 tests/frontend/quick-opportunity-search.test.mjs
create mode 100644 tests/frontend/similar-businesses.test.mjs
create mode 100644 tools/prepare-fiscal-preservation-fixture.php
create mode 100644 tools/verify-funding-concurrency.php
diff --git a/app/Console/Commands/DispatchInvestmentAlerts.php b/app/Console/Commands/DispatchInvestmentAlerts.php
new file mode 100644
index 00000000..b41bdbf7
--- /dev/null
+++ b/app/Console/Commands/DispatchInvestmentAlerts.php
@@ -0,0 +1,25 @@
+installed()) {
+ $this->warn('Opportunity alerts schema is not installed.');
+
+ return self::SUCCESS;
+ }
+ $this->info('Matched public catalogue items: '.$alerts->dispatchDue());
+
+ return self::SUCCESS;
+ }
+}
diff --git a/app/Http/Controllers/Api/V1/OpportunityController.php b/app/Http/Controllers/Api/V1/OpportunityController.php
index c62fee4b..17a3333f 100644
--- a/app/Http/Controllers/Api/V1/OpportunityController.php
+++ b/app/Http/Controllers/Api/V1/OpportunityController.php
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\Opportunity;
use App\Services\InvestmentCatalogue;
use App\Services\OpportunityMaturity;
+use App\Services\OpportunityTextSearch;
use App\Services\SectorOrganization;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -41,16 +42,7 @@ class OpportunityController extends Controller
}
if (! empty($validated['q'])) {
- $term = $validated['q'];
- $query->where(fn ($q) => $q
- ->whereLike('title', "%{$term}%")
- ->orWhereLike('description', "%{$term}%")
- ->orWhereLike('summary', "%{$term}%")
- ->orWhereLike('reference', "%{$term}%")
- ->orWhereLike('province', "%{$term}%")
- ->orWhereHas('sector', fn ($sectorQuery) => $sectorQuery
- ->whereLike('name', "%{$term}%")
- ->orWhereLike('slug', "%{$term}%")));
+ app(OpportunityTextSearch::class)->constrain($query, $validated['q']);
}
if (! empty($validated['sector'])) {
diff --git a/app/Http/Controllers/DeskServiceEditorController.php b/app/Http/Controllers/DeskServiceEditorController.php
new file mode 100644
index 00000000..3a4f8d10
--- /dev/null
+++ b/app/Http/Controllers/DeskServiceEditorController.php
@@ -0,0 +1,35 @@
+ $editor->listing()];
+
+ return $request->expectsJson() ? response()->json($data) : Inertia::render('desk/service-editor', $data);
+ }
+
+ public function publish(Request $request, DeskServiceEditor $editor, string $code): JsonResponse|RedirectResponse
+ {
+ $row = $editor->publish($request->user(), $code, $request->all());
+
+ return $request->expectsJson() ? response()->json(['id' => $row->id, 'version' => $row->version], 201)
+ : back()->with('success', 'Nova versão publicada para pedidos futuros. Os pedidos existentes conservam a sua versão.');
+ }
+
+ public function history(Request $request, DeskServiceEditor $editor, string $code): JsonResponse
+ {
+ $data = $request->validate(['page' => ['nullable', 'integer', 'min:1']]);
+
+ return response()->json($editor->history($code, (int) ($data['page'] ?? 1)));
+ }
+}
diff --git a/app/Http/Controllers/FundingProgrammeController.php b/app/Http/Controllers/FundingProgrammeController.php
new file mode 100644
index 00000000..9fe7778b
--- /dev/null
+++ b/app/Http/Controllers/FundingProgrammeController.php
@@ -0,0 +1,182 @@
+ $references->preview($request->user(), $code)])->toResponse($request),
+ static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function prepareReference(Request $request, string $code, FundingProgrammeReferences $references): RedirectResponse
+ {
+ $data = $request->validate(['hash' => 'required|string|size:64']);
+ $result = $references->prepare($request->user(), $code, $data['hash']);
+
+ return redirect('/management/fundos/'.$result['id'])->with('success', $result['created']
+ ? 'Rascunho preparado com as fontes indicadas. Ainda não está publicado.'
+ : 'Esta referência já tem ficha. Aberta a versão existente, sem substituir alterações ou acrescentar chamadas.');
+ }
+
+ public function manage(Request $request, FundingProgrammes $service): \Symfony\Component\HttpFoundation\Response
+ {
+ $service->guard($request->user());
+ $items = DB::table('funding_programmes')->orderByDesc('updated_at')->paginate(20);
+ $items->through(fn ($row) => ['id' => $row->id, 'title' => json_decode($row->draft, true)['title'] ?? 'Rascunho sem título',
+ 'version' => (int) $row->version, 'published' => $row->published_version_id !== null]);
+
+ return tap(Inertia::render('funding/manage', ['items' => $items])->toResponse($request),
+ static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function edit(Request $request, FundingProgrammes $service, ?string $id = null): \Symfony\Component\HttpFoundation\Response
+ {
+ $service->guard($request->user());
+ $row = $id ? DB::table('funding_programmes')->where('id', $id)->firstOrFail() : null;
+ $editable = app(DocumentManagementAccess::class)->documents($request->user())->select('id');
+ $references = ['organizations' => DB::table('organizations')->whereNull('deleted_at')->orderBy('name')->get(['id', 'name']),
+ 'sectors' => Sector::choices()->whereNotNull('published_at')->orderBy('name')->get(['id', 'name']),
+ 'territories' => app(InvestmentGeography::class)->publicReferences()->orderBy('name')->get(['id', 'name']),
+ 'documents' => DB::table('portal_resources as r')->join('documents as d', 'd.id', '=', 'r.document_id')
+ ->whereNull('d.deleted_at')->where(fn ($q) => $q->whereIn('d.id', $editable)
+ ->orWhereIn('r.id', app(Procurement::class)->publicDocuments()->select('r.id')))
+ ->orderBy('r.title')->get(['r.id', 'r.title'])];
+
+ return tap(Inertia::render('funding/edit', ['record' => $row ? ['id' => $row->id, 'code' => $row->code, 'version' => (int) $row->version,
+ 'draft' => json_decode($row->draft, true), 'published' => $row->published_version_id !== null] : null,
+ 'references' => Arr::only($references, ['organizations', 'sectors', 'territories', 'documents']),
+ 'kinds' => FundingProgrammes::KINDS, 'windowModes' => FundingProgrammes::WINDOWS,
+ 'history' => $id ? DB::table('funding_programme_versions')->where('programme_id', $id)->orderByDesc('version')->get(['version', 'reason', 'published_at']) : []])->toResponse($request),
+ static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function save(Request $request, FundingProgrammes $service, ?string $id = null): RedirectResponse
+ {
+ $id = $service->save($request->user(), $id, $request->all());
+
+ return redirect('/management/fundos/'.$id)->with('success', 'Rascunho guardado. Confira a prévia antes de publicar.');
+ }
+
+ public function preview(Request $request, string $id, FundingProgrammes $service): JsonResponse
+ {
+ return response()->json($service->preview($request->user(), $id))->header('Cache-Control', 'private, no-store');
+ }
+
+ public function publish(Request $request, string $id, FundingProgrammes $service): RedirectResponse
+ {
+ $service->publish($request->user(), $id, $request->all());
+
+ return back()->with('success', 'Nova versão publicada. Os interesses anteriores conservam a versão guardada.');
+ }
+
+ public function withdraw(Request $request, string $id, FundingProgrammes $service): RedirectResponse
+ {
+ $data = $request->validate(['version' => 'required|integer|min:1', 'reason' => 'required|string|min:20|max:2000']);
+ $service->withdraw($request->user(), $id, $data['version'], $data['reason']);
+
+ return back()->with('success', 'Publicação retirada. Versões e interesses preservados.');
+ }
+
+ public function saved(Request $request, FundingProgrammes $service): \Symfony\Component\HttpFoundation\Response
+ {
+ abort_unless($service->installed(), 404);
+ $items = DB::table('funding_programme_interests as i')
+ ->join('funding_programme_versions as v', fn ($join) => $join->on('v.id', '=', 'i.version_id')->on('v.programme_id', '=', 'i.programme_id'))
+ ->join('funding_programmes as p', 'p.id', '=', 'i.programme_id')
+ ->where('i.user_id', $request->user()->id)->whereNull('i.removed_at')
+ ->orderByDesc('i.saved_at')->orderBy('i.programme_id')
+ ->paginate(20, ['i.programme_id', 'i.saved_at', 'v.version', 'v.payload', 'p.published_version_id'])->withQueryString();
+ $items->through(function ($row) use ($service) {
+ $current = $service->publicQuery()->where('p.id', $row->programme_id)->first(['v.version']);
+ $snapshot = json_decode($row->payload, true, 512, JSON_THROW_ON_ERROR);
+
+ return ['id' => $row->programme_id, 'title' => $snapshot['title'], 'saved_version' => (int) $row->version,
+ 'saved_at' => $row->saved_at, 'available' => $current !== null, 'current_version' => $current ? (int) $current->version : null];
+ });
+
+ return tap(Inertia::render('funding/saved', ['items' => $items])->toResponse($request),
+ static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function index(Request $request, FundingProgrammes $service): \Symfony\Component\HttpFoundation\Response
+ {
+ $filters = $request->validate(['q' => 'nullable|string|max:150', 'kind' => 'nullable|in:fund,programme,incentive',
+ 'territory' => ['nullable', 'uuid', Rule::in(app(InvestmentGeography::class)->publicReferences()->pluck('id')->all())],
+ 'sector' => ['nullable', 'integer', Rule::in(Sector::choices()->whereNotNull('published_at')->pluck('id')->all())],
+ 'certainty' => 'nullable|in:include_unknown,documented', 'state' => 'nullable|in:open,closed,upcoming,unknown']);
+ $filters = array_filter($filters, fn ($value) => $value !== null && $value !== '');
+ $query = $service->catalogueQuery($filters);
+ if (! empty($filters['q'])) {
+ $term = '%'.str_replace(['\\', '%', '_'], ['\\\\', '\\%', '\\_'], $filters['q']).'%';
+ $query->where(fn ($q) => $q->whereRaw("v.payload->>'title' ilike ?", [$term])->orWhereRaw("v.payload->>'summary' ilike ?", [$term]));
+ }
+ if (! empty($filters['kind'])) {
+ $query->whereRaw("v.payload->>'kind' = ?", [$filters['kind']]);
+ }
+ $items = $query->orderByDesc('v.published_at')->orderBy('p.id')->paginate(20, ['p.id', 'p.code', 'v.id as version_id', 'v.version', 'v.payload', 'v.published_at'])->withQueryString();
+ $items->through(function ($row) use ($service, $filters) {
+ $record = $service->present($row);
+
+ return [...$record, 'filter_explanation' => $service->filterExplanation($record, $filters)];
+ });
+
+ return tap(Inertia::render('funding/index', ['items' => $items, 'filters' => $filters, 'kinds' => FundingProgrammes::KINDS,
+ 'options' => ['territories' => app(InvestmentGeography::class)->publicReferences()->orderBy('name')->get(['id', 'name']),
+ 'sectors' => Sector::choices()->whereNotNull('published_at')->orderBy('name')->get(['id', 'name'])], 'management' => $service->access($request->user())])
+ ->toResponse($request), static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function show(Request $request, string $id, FundingProgrammes $service): \Symfony\Component\HttpFoundation\Response
+ {
+ $record = $service->published($id);
+ $saved = $request->user() ? DB::table('funding_programme_interests as i')->join('funding_programme_versions as v', 'v.id', '=', 'i.version_id')
+ ->where('i.programme_id', $id)->where('i.user_id', $request->user()->id)->whereNull('i.removed_at')->first(['v.version', 'i.saved_at']) : null;
+
+ return tap(Inertia::render('funding/show', ['record' => $record, 'saved' => $saved, 'authenticated' => $request->user() !== null])
+ ->toResponse($request), static fn (\Symfony\Component\HttpFoundation\Response $response) => $response->headers->set('Cache-Control', 'private, no-store'));
+ }
+
+ public function assess(Request $request, string $id, FundingProgrammes $service): JsonResponse
+ {
+ return response()->json($service->assess($id, $request->all()))->header('Cache-Control', 'private, no-store');
+ }
+
+ public function saveInterest(Request $request, string $id, FundingProgrammes $service): RedirectResponse
+ {
+ $data = $request->validate(['version_id' => 'required|uuid', 'consent' => 'required|accepted']);
+ $service->saveInterest($request->user(), $id, $data['version_id'], true);
+
+ return back()->with('success', 'Programa guardado na sua área privada. Consulte a versão indicada na ficha.');
+ }
+
+ public function removeInterest(Request $request, string $id, FundingProgrammes $service): RedirectResponse
+ {
+ abort_unless($service->installed(), 404);
+ $service->removeInterest($request->user(), $id);
+
+ return back()->with('success', 'Interesse removido da sua lista.');
+ }
+
+ public function download(string $id, string $version, int $resource, FundingProgrammes $service): Response|BinaryFileResponse
+ {
+ return $service->download($id, $version, $resource);
+ }
+}
diff --git a/app/Http/Controllers/InvestmentAlertPreferencesController.php b/app/Http/Controllers/InvestmentAlertPreferencesController.php
new file mode 100644
index 00000000..63c06364
--- /dev/null
+++ b/app/Http/Controllers/InvestmentAlertPreferencesController.php
@@ -0,0 +1,20 @@
+save($request->user(), $request->all());
+
+ return $request->expectsJson() ? response()->json($preferences) : back()->with('success', $preferences['enabled']
+ ? 'Preferências guardadas. O acompanhamento considera novas disponibilizações nos catálogos escolhidos.'
+ : 'Alertas dos catálogos cancelados. As notificações anteriores foram conservadas.');
+ }
+}
diff --git a/app/Http/Controllers/InvestmentDiscoveryController.php b/app/Http/Controllers/InvestmentDiscoveryController.php
index 5d95a6d4..4f62f91e 100644
--- a/app/Http/Controllers/InvestmentDiscoveryController.php
+++ b/app/Http/Controllers/InvestmentDiscoveryController.php
@@ -11,6 +11,7 @@ use App\Services\InvestmentComplements;
use App\Services\InvestmentGeography;
use App\Services\InvestmentZones;
use App\Services\OpportunityCorridorExplorer;
+use App\Services\OpportunityTextSearch;
use App\Services\SectorInvestment;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\JsonResponse;
@@ -29,12 +30,20 @@ class InvestmentDiscoveryController extends Controller
if ($request->routeIs('investment.education')) {
$filters['education'] = true;
}
+ $results = $catalogue->query($filters)->paginate(12)->withQueryString()->through(fn ($record) => $catalogue->presentLocation($record));
+ $relatedQuery = $results->total() === 0 ? app(OpportunityTextSearch::class)->relatedQuery($filters['q'] ?? '') : null;
+ $relatedFilters = [...Arr::except($filters, ['page', 'q']), 'q' => $relatedQuery];
+ $related = $relatedQuery === null ? null : [
+ 'query' => $filters['q'], 'subject' => $relatedQuery,
+ 'href' => ($request->routeIs('investment.education') ? '/educacao' : '/oportunidades').'?'.http_build_query($relatedFilters),
+ 'items' => $catalogue->query($relatedFilters)->limit(6)->get()->map(fn ($record) => $catalogue->presentLocation($record)),
+ ];
return Inertia::render('investment/catalogue', ['filters' => $filters, 'catalogueUrl' => $request->routeIs('investment.education') ? '/educacao' : '/oportunidades', 'references' => $catalogue->references(false, $filters),
'corridorGroups' => ($filters['view'] ?? '') === 'corridors' ? app(OpportunityCorridorExplorer::class)->groups($filters) : [],
'territorySelection' => app(InvestmentGeography::class)->selection($filters),
'guides' => app(SectorInvestment::class)->guides(Sector::where('slug', $filters['sector'] ?? '')->where('is_active', true)->whereNotNull('published_at')->first()),
- 'results' => $catalogue->query($filters)->paginate(12)->withQueryString()->through(fn ($record) => $catalogue->presentLocation($record)),
+ 'results' => $results, 'relatedSearch' => $related,
'favourites' => $request->user() ? DB::table('opportunity_favourites')->where('user_id', $request->user()->id)->pluck('opportunity_id') : [],
'territorial' => $this->territorial($filters)]);
}
diff --git a/app/Http/Controllers/InvestmentWorkspaceController.php b/app/Http/Controllers/InvestmentWorkspaceController.php
index 6516abf8..10a08239 100644
--- a/app/Http/Controllers/InvestmentWorkspaceController.php
+++ b/app/Http/Controllers/InvestmentWorkspaceController.php
@@ -3,10 +3,17 @@
namespace App\Http\Controllers;
use App\Models\InvestmentSubmission;
+use App\Models\Opportunity;
+use App\Models\Sector;
use App\Models\User;
use App\Services\CountryCatalogue;
+use App\Services\FundingProgrammes;
+use App\Services\InvestmentGeography;
+use App\Services\InvestmentOpportunityAlerts;
use App\Services\InvestmentWorkspace;
+use App\Services\OpportunityManagement;
use App\Services\OrganizationCountry;
+use App\Services\Procurement;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -119,14 +126,38 @@ class InvestmentWorkspaceController extends Controller
public function notifications(Request $request): Response|JsonResponse
{
$query = DB::table('investment_notifications')->where('user_id', $request->user()->id);
- if (! $request->user()->can('manage-portal')) {
+ $alerts = app(InvestmentOpportunityAlerts::class);
+ $available = $alerts->installed();
+ if ($available) {
+ $query->where(function ($sources) use ($request, $alerts) {
+ $sources->whereIn('opportunity_id', Opportunity::published()->select('id'))
+ ->orWhere(function ($legacy) use ($request) {
+ $legacy->whereNotNull('submission_id');
+ if (! $request->user()->can('manage-portal')) {
+ $legacy->whereIn('submission_id', InvestmentSubmission::where('user_id', $request->user()->id)->select('id'));
+ }
+ });
+ if ($alerts->tendersAvailable()) {
+ $sources->orWhereIn('tender_version_id', app(Procurement::class)->readableVersions()->select('id'));
+ }
+ if ($alerts->fundingAvailable()) {
+ $sources->orWhereIn('funding_version_id', app(FundingProgrammes::class)->readableVersions()->select('id'));
+ }
+ });
+ } elseif (! $request->user()->can('manage-portal')) {
$query->whereIn('submission_id', InvestmentSubmission::where('user_id', $request->user()->id)->select('id'));
}
- $data = ['unread' => (clone $query)->whereNull('read_at')->count(), 'notifications' => $query->orderByDesc('created_at')->paginate(20)->through(function ($row) {
- $row->payload = json_decode(Crypt::decryptString($row->payload), true, 512, JSON_THROW_ON_ERROR);
+ $data = ['alertPreferences' => $available ? $alerts->preferences($request->user()->id) : null,
+ 'alertOptions' => $available ? ['frequencies' => InvestmentOpportunityAlerts::FREQUENCIES,
+ 'sectors' => Sector::choices()->whereNotNull('published_at')->orderBy('name')->get(['slug', 'name']),
+ 'provinces' => app(InvestmentGeography::class)->publicReferences()->where('location_type', 'province')->orderBy('name')->get(['id', 'name']),
+ 'categories' => OpportunityManagement::CATEGORIES, 'tendersAvailable' => $alerts->tendersAvailable(), 'fundingAvailable' => $alerts->fundingAvailable(),
+ 'tenderRegimes' => config('procurement.regimes'), 'tenderActs' => config('procurement.acts')] : null,
+ 'unread' => (clone $query)->whereNull('read_at')->count(), 'notifications' => $query->orderByDesc('created_at')->orderByDesc('id')->paginate(20)->through(function ($row) {
+ $row->payload = json_decode(Crypt::decryptString($row->payload), true, 512, JSON_THROW_ON_ERROR);
- return $row;
- })];
+ return $row;
+ })];
return $request->expectsJson() ? response()->json($data) : Inertia::render('investment/notifications', $data);
}
@@ -135,7 +166,17 @@ class InvestmentWorkspaceController extends Controller
{
$row = DB::table('investment_notifications')->where('id', $id)->where('user_id', $request->user()->id)->first();
abort_unless($row !== null, 404);
- $this->submission($request, $row->submission_id);
+ if ($row->opportunity_id ?? null) {
+ abort_unless(Opportunity::published()->whereKey($row->opportunity_id)->exists(), 404);
+ } elseif ($row->tender_version_id ?? null) {
+ abort_unless(app(InvestmentOpportunityAlerts::class)->tendersAvailable()
+ && app(Procurement::class)->readableVersions()->where('id', $row->tender_version_id)->exists(), 404);
+ } elseif ($row->funding_version_id ?? null) {
+ abort_unless(app(InvestmentOpportunityAlerts::class)->fundingAvailable()
+ && app(FundingProgrammes::class)->readableVersions()->where('id', $row->funding_version_id)->exists(), 404);
+ } else {
+ $this->submission($request, $row->submission_id);
+ }
DB::table('investment_notifications')->where('id', $id)->whereNull('read_at')->update(['read_at' => now()]);
return $request->expectsJson() ? response()->json(['read' => true]) : back();
diff --git a/app/Http/Controllers/ProcurementController.php b/app/Http/Controllers/ProcurementController.php
index ec4e2abd..39e9f226 100644
--- a/app/Http/Controllers/ProcurementController.php
+++ b/app/Http/Controllers/ProcurementController.php
@@ -13,37 +13,16 @@ use Symfony\Component\HttpFoundation\Response;
class ProcurementController extends Controller
{
- private const STATE_SQL = "CASE WHEN v.payload->>'procedural_state' IN ('cancelled','results') THEN v.payload->>'procedural_state' WHEN ((v.payload->>'deadline')::timestamp AT TIME ZONE (v.payload->>'timezone'))<=CURRENT_TIMESTAMP THEN 'deadline_ended' WHEN v.payload->>'extended'='true' THEN 'extended' ELSE 'open' END";
-
private function query(Procurement $service): Builder
{
- abort_unless($service->available(), 404);
-
- return DB::table('portal_tenders as t')->join('portal_tender_versions as v', fn ($q) => $q->on('v.id', '=', 't.published_version_id')->on('v.tender_id', '=', 't.id'))->whereNotNull('v.published_at');
+ return $service->publicQuery();
}
public function index(Request $request, Procurement $service): Response
{
$filters = $request->validate(['q' => 'nullable|string|max:150', 'entity' => 'nullable|uuid', 'sector' => 'nullable|integer', 'territory' => 'nullable|uuid', 'modality' => 'nullable|string|max:200', 'financier' => 'nullable|string|max:200', 'state' => 'nullable|in:open,extended,deadline_ended,cancelled,results', 'deadline_before' => 'nullable|date_format:Y-m-d', 'regime' => 'nullable|in:state,external,private,other']);
$filters = array_filter($filters, fn ($value) => $value !== null && $value !== '');
- $query = $this->query($service);
- if (! empty($filters['q'])) {
- $query->where(fn ($q) => $q->whereRaw("v.payload->>'title' ILIKE ?", ['%'.$filters['q'].'%'])->orWhereRaw("v.payload->>'object' ILIKE ?", ['%'.$filters['q'].'%'])->orWhereRaw("v.payload->>'reference' ILIKE ?", ['%'.$filters['q'].'%']));
- }
- foreach (['entity' => 'organization_id', 'sector' => 'sector_id', 'modality' => 'modality', 'financier' => 'financier', 'regime' => 'regime'] as $filter => $field) {
- if (! empty($filters[$filter])) {
- $query->whereRaw('v.payload->>? = ?', [$field, (string) $filters[$filter]]);
- }
- }
- if (! empty($filters['territory'])) {
- $query->whereRaw("v.payload->>'territory_id' IN (WITH RECURSIVE scope(id,depth) AS (SELECT id,0 FROM geo_locations WHERE id=? AND deleted_at IS NULL UNION ALL SELECT c.id,s.depth+1 FROM geo_locations c JOIN scope s ON c.parent_id=s.id WHERE c.deleted_at IS NULL AND s.depth<4) SELECT id::text FROM scope)", [$filters['territory']]);
- }
- if (! empty($filters['state'])) {
- $query->whereRaw(self::STATE_SQL.' = ?', [$filters['state']]);
- }
- if (! empty($filters['deadline_before'])) {
- $query->whereRaw("left(v.payload->>'deadline',10)<=?", [$filters['deadline_before']]);
- }
+ $query = $service->publicQuery($filters);
$rows = $query->select('t.id', 'v.id as vid')->orderByDesc('v.published_at')->paginate(20)->withQueryString();
$rows->through(fn ($r) => ['id' => $r->id, ...$this->summary($service, $r->vid)]);
$facets = $this->query($service)->get(['v.payload'])->map(fn ($r) => json_decode($r->payload, true));
diff --git a/app/Http/Controllers/PublicBusinessOpportunityController.php b/app/Http/Controllers/PublicBusinessOpportunityController.php
index 0f686587..8808a920 100644
--- a/app/Http/Controllers/PublicBusinessOpportunityController.php
+++ b/app/Http/Controllers/PublicBusinessOpportunityController.php
@@ -87,8 +87,17 @@ class PublicBusinessOpportunityController extends Controller
}
$returnFilters = $this->filters($request);
+ $similarProvince = $record->getAttribute('similar_province_id');
+ if ($similarProvince !== null && ! app(InvestmentGeography::class)->publicReferences()->where('geo_locations.id', $similarProvince)->exists()) {
+ $similarProvince = null;
+ }
return Inertia::render('investment/business-opportunity', ['record' => $resource->resolve($request),
+ 'similarCatalogueUrl' => '/negocios?'.http_build_query(array_filter([
+ 'modality' => $record->modality,
+ 'sector' => $record->sector_id,
+ 'province_id' => $similarProvince,
+ ], fn ($value) => $value !== null && $value !== '')),
'returnUrl' => $returnFilters === [] ? '/negocios' : '/negocios?'.http_build_query($returnFilters),
'interestUrl' => '/negocios/'.rawurlencode($slug).'/manifestar-interesse'.($returnFilters === [] ? '' : '?'.http_build_query($returnFilters))]);
}
@@ -116,7 +125,7 @@ class PublicBusinessOpportunityController extends Controller
->leftJoin('geo_locations as locality', 'locality.id', '=', 'locations.locality_id')
->where('locations.is_public', true)->where('locations.is_primary', true)
->whereNull('province.deleted_at')->whereNull('district.deleted_at')->whereNull('locality.deleted_at')
- ->select('locations.existing_business_id', 'province.name as province')
+ ->select('locations.existing_business_id', 'province.name as province', 'province.id as similar_province_id')
->selectRaw("CASE WHEN locations.precision_level IN ('district','admin_post','locality','exact') THEN district.name ELSE NULL END AS district")
->selectRaw('NULL::text AS locality');
@@ -127,6 +136,6 @@ class PublicBusinessOpportunityController extends Controller
'existing_businesses.currency', 'existing_businesses.amount_min', 'existing_businesses.amount_max',
'existing_businesses.available_percentage', 'existing_businesses.published_at', 'existing_businesses.sector_id',
'existing_businesses.owner_user_id', 'existing_businesses.organization_id', 'existing_businesses.version_no', 'existing_businesses.expires_at', 'existing_businesses.status', 'existing_businesses.modality',
- 'public_location.province', 'public_location.district', 'public_location.locality']);
+ 'public_location.province', 'public_location.district', 'public_location.locality', 'public_location.similar_province_id']);
}
}
diff --git a/app/Http/Controllers/VirtualDeskController.php b/app/Http/Controllers/VirtualDeskController.php
index ca8a8d87..46ad19a0 100644
--- a/app/Http/Controllers/VirtualDeskController.php
+++ b/app/Http/Controllers/VirtualDeskController.php
@@ -152,7 +152,7 @@ class VirtualDeskController extends Controller
'serviceSource' => json_decode(DB::table('desk_service_versions')->where('id', $row->service_version_id)->value('source'), true),
'owner' => $desk->owns($request->user(), $case), 'manager' => app(ScopedPortalAdministration::class)->deskDecision($request->user(), $row), 'analyst' => (int) $row->analyst_id === $request->user()->id,
'fieldsEditable' => in_array($row->status, ['draft', 'returned'], true), 'states' => config('virtual-desk.request_states'), 'transitions' => config('virtual-desk.transitions.'.$row->status, []),
- 'findings' => $desk->findings($payload), 'ai' => config('virtual-desk.ai'), 'documents' => $this->documents($case->id, $request->user())->filter(fn ($d) => ! $d->request_id || $d->request_id === $id)->values(),
+ 'findings' => $desk->findings($payload, $definition), 'ai' => config('virtual-desk.ai'), 'documents' => $this->documents($case->id, $request->user())->filter(fn ($d) => ! $d->request_id || $d->request_id === $id)->values(),
'messages' => DB::table('desk_messages as m')->join('users as u', 'u.id', '=', 'm.actor_id')->where('request_id', $id)->orderBy('m.created_at')->get(['m.id', 'm.actor_id', 'm.body', 'm.created_at', 'u.name'])->map(fn ($m) => [...(array) $m, 'body' => Crypt::decryptString($m->body),
'kind' => $messageKinds[$m->id] ?? 'historical_unclassified']),
'events' => $this->events($case->id, $desk, $request->user())->filter(fn ($e) => $e['request_id'] === $id)->values(),
@@ -245,7 +245,10 @@ class VirtualDeskController extends Controller
$this->auditRead($request, 'desk_requests', $id, 'receipt_downloaded');
if ($format === 'html') {
- return response()->view('desk.receipt', ['record' => $row, 'snapshot' => $snapshot, 'definition' => $desk->definition($row)], 200, ['Cache-Control' => 'private, no-store', 'X-Content-Type-Options' => 'nosniff']);
+ $definition = $desk->definition($row);
+
+ return response()->view('desk.receipt', ['record' => $row, 'snapshot' => $snapshot, 'definition' => $definition,
+ 'applicableFields' => $desk->applicableFields($snapshot['payload'] ?? [], $definition)], 200, ['Cache-Control' => 'private, no-store', 'X-Content-Type-Options' => 'nosniff']);
}
return response()->streamDownload(function () use ($row, $snapshot) {
diff --git a/app/Http/Middleware/EnsureScopedPortalAdministration.php b/app/Http/Middleware/EnsureScopedPortalAdministration.php
index 031448cb..54b06dd5 100644
--- a/app/Http/Middleware/EnsureScopedPortalAdministration.php
+++ b/app/Http/Middleware/EnsureScopedPortalAdministration.php
@@ -24,7 +24,7 @@ final class EnsureScopedPortalAdministration
'management/economic-references/lot-01', 'management/economic-references/lot-01/*',
'management/education', 'management/education/*', 'management/investment/references', 'management/investment/references/*', 'api/v1/investment/admin/references', 'api/v1/investment/admin/references/*',
'management/investment/zones', 'management/investment/zones/*', 'api/v2/investment/admin/zones', 'api/v2/investment/admin/zones/*',
- 'management/balcao/atribuicoes', 'management/balcao/atribuicoes/*', 'management/balcao/servicos',
+ 'management/balcao/atribuicoes', 'management/balcao/atribuicoes/*', 'management/balcao/servicos', 'management/balcao/servicos/*',
'management/balcao/fontes') || ($request->isMethod('GET') && $path === 'management/balcao-install');
$fiscal = $request->is('api/v2/investment/admin/tax-rules', 'api/v2/investment/admin/tax-rules/*',
'api/v2/investment/admin/tax-rule-sources', 'management/investment/tax-rules/*');
diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php
index b221ff27..6c79b244 100644
--- a/app/Http/Middleware/HandleInertiaRequests.php
+++ b/app/Http/Middleware/HandleInertiaRequests.php
@@ -4,6 +4,7 @@ namespace App\Http\Middleware;
use App\Models\ExistingBusiness;
use App\Services\ContentManagement;
+use App\Services\FundingProgrammes;
use App\Services\InvestorPath;
use App\Services\LegacyContent;
use App\Services\OpportunityManagement;
@@ -57,6 +58,7 @@ class HandleInertiaRequests extends Middleware
...parent::share($request),
'name' => config('app.name'),
'procurementEnabled' => app(Procurement::class)->available(),
+ 'fundingEnabled' => app(FundingProgrammes::class)->installed(),
'homologationReserved' => (bool) config('portal.homologation_only', false),
'profileAccess' => app(PortalProfileAccess::class)->navigation($request->user()),
'contentManagementHref' => $contentManagementAccess !== [] ? '/gestao-conteudos' : null,
diff --git a/app/Services/BusinessFormSchema.php b/app/Services/BusinessFormSchema.php
index f4bb7676..216823b8 100644
--- a/app/Services/BusinessFormSchema.php
+++ b/app/Services/BusinessFormSchema.php
@@ -15,7 +15,7 @@ final class BusinessFormSchema
'proponent_type' => ['step' => 1, 'pt' => 'Quem apresenta a oportunidade?', 'en' => 'Who is presenting the opportunity?', 'type' => 'select', 'max' => 30, 'options' => ['organization' => 'Empresa ou organização / Company or organization', 'sole_trader' => 'Empresário em nome individual / Sole trader', 'person' => 'Pessoa singular / Individual', 'public_entity' => 'Entidade pública / Public entity']],
'proponent_name' => ['step' => 1, 'pt' => 'Nome ou denominação', 'en' => 'Name', 'type' => 'text', 'max' => 200],
'country' => ['step' => 1, 'pt' => 'País de origem ou constituição', 'en' => 'Country of origin or incorporation', 'type' => 'country', 'max' => 100],
- 'declared_origin_country_code' => ['step' => 1, 'pt' => 'País de origem declarado desta solicitação (opcional)', 'en' => 'Declared country of origin of this request (optional)', 'type' => 'country', 'max' => 2],
+ 'declared_origin_country_code' => ['step' => 1, 'pt' => 'País de origem do pedido (opcional)', 'en' => 'Country from which you submit this request (optional)', 'type' => 'country', 'max' => 2],
'tax_identifier' => ['step' => 1, 'pt' => 'NUIT ou identificador (interno, quando aplicável)', 'en' => 'NUIT or identifier (internal, when applicable)', 'type' => 'text', 'max' => 50],
'contact_name' => ['step' => 1, 'pt' => 'Nome da pessoa de contacto', 'en' => 'Contact person name', 'type' => 'text', 'max' => 200],
'contact_email' => ['step' => 1, 'pt' => 'Correio electrónico (indique email ou telefone)', 'en' => 'Email (provide email or phone)', 'type' => 'email', 'max' => 254],
@@ -23,8 +23,8 @@ final class BusinessFormSchema
'contact_preference' => ['step' => 1, 'pt' => 'Preferência de contacto', 'en' => 'Contact preference', 'type' => 'select', 'max' => 30, 'options' => ['through_portal' => 'Receber pedidos através da InvestMoz', 'approved_business_contact' => 'Mostrar contacto empresarial aprovado']],
'acting_capacity' => ['step' => 2, 'pt' => 'Qualidade em que actua', 'en' => 'Acting capacity', 'type' => 'select', 'max' => 30, 'options' => ['holder' => 'Titular / Holder', 'representative' => 'Representante / Representative']],
'declared_holder' => ['step' => 2, 'pt' => 'Entidade ou pessoa representada', 'en' => 'Entity or person represented', 'type' => 'text', 'max' => 200],
- 'mandate_reference' => ['step' => 2, 'pt' => 'Referência do documento de autorização', 'en' => 'Authorization document reference', 'type' => 'text', 'max' => 500, 'when' => ['acting_capacity' => ['representative']]],
- 'mandate_document_reference' => ['step' => 2, 'pt' => 'Referência interna do documento de autorização (não carregue aqui)', 'en' => 'Internal authorization document reference (do not upload here)', 'type' => 'text', 'max' => 500, 'when' => ['acting_capacity' => ['representative']]],
+ 'mandate_reference' => ['step' => 2, 'pt' => 'Número ou referência da autorização de representação', 'en' => 'Representation authorization number or reference', 'type' => 'text', 'max' => 500, 'when' => ['acting_capacity' => ['representative']]],
+ 'mandate_document_reference' => ['step' => 2, 'pt' => 'Referência do comprovativo de representação no portal', 'en' => 'Reference of representation evidence in the portal', 'type' => 'text', 'max' => 500, 'when' => ['acting_capacity' => ['representative']]],
'mandate_valid_until' => ['step' => 2, 'pt' => 'Validade do mandato', 'en' => 'Mandate expiry', 'type' => 'date', 'max' => 10, 'when' => ['acting_capacity' => ['representative']]],
'disclosure_scope' => ['step' => 2, 'pt' => 'Limites da autorização de divulgação', 'en' => 'Limits of disclosure authorization', 'type' => 'textarea', 'max' => 2000, 'when' => ['acting_capacity' => ['representative']]],
'legitimacy_declaration' => ['step' => 2, 'pt' => 'Declaro legitimidade para esta submissão', 'en' => 'I declare authority to submit', 'type' => 'select', 'max' => 3, 'options' => ['yes' => 'Sim / Yes', 'no' => 'Não / No']],
diff --git a/app/Services/DeskServiceEditor.php b/app/Services/DeskServiceEditor.php
new file mode 100644
index 00000000..abc2a9bf
--- /dev/null
+++ b/app/Services/DeskServiceEditor.php
@@ -0,0 +1,197 @@
+> */
+ public function listing(): array
+ {
+ $rows = DB::table('desk_service_versions')->selectRaw('DISTINCT ON (code) code, version, definition')
+ ->orderBy('code')->orderByDesc('version')->get()->keyBy('code');
+ $services = [];
+ foreach (config('virtual-desk.services') as $code => $initial) {
+ $row = $rows->get($code);
+ $services[] = ['code' => $code, 'version' => (int) ($row->version ?? 0), 'editable' => true,
+ 'fixedTypes' => array_map(fn (array $field) => $field['type'], $initial['fields']),
+ 'definition' => $row ? json_decode($row->definition, true, 512, JSON_THROW_ON_ERROR) : $initial];
+ }
+ foreach ($rows as $code => $row) {
+ if (! array_key_exists($code, config('virtual-desk.services'))) {
+ $services[] = ['code' => $code, 'version' => (int) $row->version, 'editable' => false,
+ 'definition' => json_decode($row->definition, true, 512, JSON_THROW_ON_ERROR)];
+ }
+ }
+
+ return $services;
+ }
+
+ /** @return array */
+ public function history(string $code, int $requestedPage): array
+ {
+ abort_unless(array_key_exists($code, config('virtual-desk.services')) || DB::table('desk_service_versions')->where('code', $code)->exists(), 404);
+ $query = DB::table('desk_service_versions')->where('code', $code);
+ $total = (clone $query)->count();
+ $pages = max(1, (int) ceil($total / 10));
+ $page = min(max(1, $requestedPage), $pages);
+ $rows = $query->orderByDesc('version')->forPage($page, 10)->get(['id', 'version', 'status', 'author_id', 'published_by', 'published_at', 'definition', 'source']);
+ $events = DB::table('audit_events')->where('source_system', 'virtual-desk')->where('entity_type', 'desk_service_versions')
+ ->where('action', 'service_definition_version_published')->whereIn('entity_id', $rows->pluck('id')->all())
+ ->get(['entity_id', 'after_data'])->keyBy('entity_id');
+
+ return ['page' => $page, 'pages' => $pages, 'total' => $total, 'data' => $rows->map(function ($row) use ($events): array {
+ $event = $events->get($row->id);
+ $audit = $event ? json_decode($event->after_data, true, 512, JSON_THROW_ON_ERROR) : [];
+
+ return ['id' => $row->id, 'version' => (int) $row->version, 'status' => $row->status,
+ 'author_id' => $row->author_id, 'published_by' => $row->published_by, 'published_at' => $row->published_at,
+ 'definition' => json_decode($row->definition, true, 512, JSON_THROW_ON_ERROR),
+ 'source' => json_decode($row->source, true, 512, JSON_THROW_ON_ERROR), 'reason' => $audit['reason'] ?? null];
+ })->all()];
+ }
+
+ /** @param array $input */
+ public function publish(User $actor, string $code, array $input): \stdClass
+ {
+ abort_unless(array_key_exists($code, config('virtual-desk.services')), 404);
+ $data = Validator::make($input, [
+ 'base_version' => ['required', 'integer', 'min:0'], 'confirm' => ['accepted'],
+ 'reason' => ['required', 'string', 'min:20', 'max:2000'],
+ 'definition' => ['required', 'array:title,theme,profile,stage,entity,result,fields'],
+ 'definition.title' => ['required', 'string', 'max:200'],
+ 'definition.theme' => ['required', 'string', 'max:150'],
+ 'definition.profile' => ['required', 'string', 'max:200'],
+ 'definition.stage' => ['required', 'string', 'max:20'],
+ 'definition.entity' => ['required', 'string', 'max:300'],
+ 'definition.result' => ['required', 'string', 'max:2000'],
+ 'definition.fields' => ['required', 'array', 'min:1', 'max:60'],
+ 'definition.fields.*' => ['required', 'array:label,type,required,min,options,when'],
+ 'definition.fields.*.label' => ['required', 'string', 'max:300'],
+ 'definition.fields.*.type' => ['required', Rule::in(['text', 'textarea', 'email', 'tel', 'url', 'number', 'date', 'select', 'territory'])],
+ 'definition.fields.*.required' => ['required', 'boolean'],
+ 'definition.fields.*.min' => ['sometimes', 'numeric', 'min:0', 'max:999999999999'],
+ 'definition.fields.*.options' => ['sometimes', 'array', 'min:1', 'max:100'],
+ 'definition.fields.*.options.*' => ['required', 'string', 'max:300'],
+ 'definition.fields.*.when' => ['sometimes', 'array:field,equals', 'required_array_keys:field,equals'],
+ 'definition.fields.*.when.field' => ['required_with:definition.fields.*.when', 'string', 'max:64'],
+ 'definition.fields.*.when.equals' => ['required_with:definition.fields.*.when', 'string', 'max:1000'],
+ ])->validate();
+ $this->checkFields($data['definition']['fields']);
+
+ return DB::transaction(function () use ($actor, $code, $data): \stdClass {
+ DB::select('select pg_advisory_xact_lock(261008, 2)');
+ $latest = DB::table('desk_service_versions')->where('code', $code)->orderByDesc('version')->first();
+ $previous = $latest ? json_decode($latest->definition, true, 512, JSON_THROW_ON_ERROR) : config('virtual-desk.services.'.$code);
+ if ($data['definition']['stage'] !== $previous['stage']) {
+ throw ValidationException::withMessages(['definition.stage' => 'A etapa pertence ao percurso existente e não pode ser alterada neste editor.']);
+ }
+ foreach (config('virtual-desk.services.'.$code.'.fields') as $key => $canonical) {
+ if (isset($data['definition']['fields'][$key]) && $data['definition']['fields'][$key]['type'] !== $canonical['type']) {
+ throw ValidationException::withMessages(['definition.fields.'.$key.'.type' => 'Este identificador é interpretado pelo motor existente. Conserve o tipo ou acrescente um novo campo com outro identificador.']);
+ }
+ }
+ // Retry of the same confirmed publication preserves the first version and authorship.
+ if ($latest && (int) $latest->version === (int) $data['base_version'] + 1 && $latest->status === 'published'
+ && $this->definitionHash(json_decode($latest->definition, true, 512, JSON_THROW_ON_ERROR)) === $this->definitionHash($data['definition'])) {
+ return $latest;
+ }
+ abort_unless((int) ($latest->version ?? 0) === (int) $data['base_version'], 409, 'O formulário foi alterado. Recarregue e compare a versão actual antes de publicar.');
+ if ($latest && $latest->status === 'published' && $this->definitionHash($previous) === $this->definitionHash($data['definition'])) {
+ throw ValidationException::withMessages(['definition' => 'Não há alterações na definição para publicar uma nova versão.']);
+ }
+ $id = (string) Str::uuid();
+ DB::table('desk_service_versions')->insert([
+ 'id' => $id, 'code' => $code, 'version' => (int) $data['base_version'] + 1, 'status' => 'published',
+ 'definition' => json_encode($data['definition'], JSON_THROW_ON_ERROR),
+ 'source' => $latest->source ?? json_encode(config('virtual-desk.source'), JSON_THROW_ON_ERROR),
+ 'author_id' => $actor->id, 'published_by' => $actor->id, 'published_at' => now(), 'created_at' => now(), 'updated_at' => now(),
+ ]);
+ DB::table('audit_events')->insert([
+ 'source_system' => 'virtual-desk', 'entity_type' => 'desk_service_versions', 'entity_id' => $id, 'actor_user_id' => $actor->id,
+ 'action' => 'service_definition_version_published',
+ 'before_data' => json_encode(['id' => $latest?->id, 'version' => (int) $data['base_version']], JSON_THROW_ON_ERROR),
+ 'after_data' => json_encode(['code' => $code, 'version' => (int) $data['base_version'] + 1, 'reason' => $data['reason'],
+ 'effect' => 'new_requests_only', 'definition_sha256' => $this->definitionHash($data['definition'])], JSON_THROW_ON_ERROR),
+ ]);
+
+ return DB::table('desk_service_versions')->where('id', $id)->firstOrFail();
+ });
+ }
+
+ /** @param array $definition */
+ private function definitionHash(array $definition): string
+ {
+ return hash('sha256', json_encode(Arr::sortRecursive($definition), JSON_THROW_ON_ERROR));
+ }
+
+ /** @param array> $fields */
+ private function checkFields(array $fields): void
+ {
+ foreach ($fields as $key => $field) {
+ $path = 'definition.fields.'.$key;
+ if (! preg_match('/^[a-z][a-z0-9_]{0,63}$/D', (string) $key) || in_array($key, ['country', 'declared_origin_country_code', 'context_reuse', 'context_opportunity', 'context_opportunity_snapshot'], true)) {
+ throw ValidationException::withMessages(['definition.fields' => 'Use identificadores de campo distintos dos campos comuns de país e contexto, com letras minúsculas, números e sublinhado.']);
+ }
+ if ($field['type'] === 'select' && empty($field['options'])) {
+ throw ValidationException::withMessages([$path.'.options' => 'Indique as opções deste campo.']);
+ }
+ if ((isset($field['min']) && $field['type'] !== 'number') || (isset($field['options']) && $field['type'] !== 'select')) {
+ throw ValidationException::withMessages([$path => 'O mínimo aplica-se apenas a números e as opções apenas a listas de respostas.']);
+ }
+ foreach (array_keys($field['options'] ?? []) as $option) {
+ if (! preg_match('/^[a-zA-Z0-9_-]{1,80}$/D', (string) $option)) {
+ throw ValidationException::withMessages([$path.'.options' => 'Use códigos de opção sem espaços ou pontuação especial.']);
+ }
+ }
+ $visited = [$key];
+ $node = $field;
+ while (isset($node['when'])) {
+ $parent = $node['when']['field'];
+ if (! isset($fields[$parent]) || in_array($parent, $visited, true)) {
+ throw ValidationException::withMessages([$path.'.when' => 'A condição deve referir outro campo existente, sem dependências circulares.']);
+ }
+ if ($fields[$parent]['type'] === 'number') {
+ throw ValidationException::withMessages([$path.'.when' => 'As condições actuais comparam respostas exactas. Use uma lista de opções como origem da condição numérica.']);
+ }
+ if ($fields[$parent]['type'] === 'select' && ! array_key_exists($node['when']['equals'], $fields[$parent]['options'] ?? [])) {
+ throw ValidationException::withMessages([$path.'.when' => 'O valor da condição deve corresponder a uma opção do campo escolhido.']);
+ }
+ $visited[] = $parent;
+ $node = $fields[$parent];
+ }
+ }
+ if (isset($fields['territory_id'])) {
+ if (! isset($fields['location_source'])) {
+ throw ValidationException::withMessages(['definition.fields.location_source' => 'A localização exige a respectiva fonte. Mantenha o campo da fonte ou retire também a localização.']);
+ }
+ $locationConditions = $this->conditions('territory_id', $fields);
+ $sourceConditions = $this->conditions('location_source', $fields);
+ if (array_diff_assoc($sourceConditions, $locationConditions) !== []) {
+ throw ValidationException::withMessages(['definition.fields.location_source.when' => 'A fonte tem de estar disponível sempre que a localização se aplica. Use as mesmas condições ou condições mais abrangentes.']);
+ }
+ }
+ }
+
+ /** Conditions have already been checked for valid references and cycles.
+ * @param array> $fields
+ * @return array */
+ private function conditions(string $key, array $fields): array
+ {
+ $conditions = [];
+ while (isset($fields[$key]['when'])) {
+ $when = $fields[$key]['when'];
+ $conditions[$when['field']] = $when['equals'];
+ $key = $when['field'];
+ }
+
+ return $conditions;
+ }
+}
diff --git a/app/Services/DocumentManagementAccess.php b/app/Services/DocumentManagementAccess.php
index 488e21e8..9ea238ff 100644
--- a/app/Services/DocumentManagementAccess.php
+++ b/app/Services/DocumentManagementAccess.php
@@ -11,6 +11,13 @@ use Illuminate\Support\Str;
class DocumentManagementAccess
{
+ /** Existing editorial publication authority; it does not grant financial decision powers. */
+ public function catalogueEditor(?User $actor): bool
+ {
+ return $actor && $actor->hasVerifiedEmail() && ! app(PortalProfileAccess::class)->has($actor, 'auditor')
+ && ($this->full($actor) || $this->editorial($actor));
+ }
+
public function full(User $actor): bool
{
return Gate::forUser($actor)->allows('manage-portal');
diff --git a/app/Services/FundingProgrammeReferences.php b/app/Services/FundingProgrammeReferences.php
new file mode 100644
index 00000000..82e76ac2
--- /dev/null
+++ b/app/Services/FundingProgrammeReferences.php
@@ -0,0 +1,50 @@
+ */
+ public function preview(User $actor, string $code): array
+ {
+ app(FundingProgrammes::class)->guard($actor);
+ $bytes = CheckedFile::read(database_path('data/funding-references.json'));
+ $package = json_decode($bytes, true, 512, JSON_THROW_ON_ERROR);
+ abort_unless($package['format'] === 'investmoz-funding-references-v1', 503);
+ $reference = $package['references'][$code] ?? null;
+ abort_unless(is_array($reference), 404);
+ $plan = ['code' => $code, 'edition' => $reference['edition'], 'draft' => $reference['draft'], 'provenance' => $reference['provenance'],
+ 'package_sha256' => hash('sha256', $bytes)];
+ $plan['hash'] = hash_hmac('sha256', json_encode(Arr::sortRecursive($plan), JSON_THROW_ON_ERROR), config('app.key'));
+
+ return $plan;
+ }
+
+ /** @return array{id:string,created:bool} */
+ public function prepare(User $actor, string $code, string $hash): array
+ {
+ $plan = $this->preview($actor, $code);
+ abort_unless(hash_equals($plan['hash'], $hash), 409, 'As referências mudaram. Recupere a prévia antes de preparar a ficha.');
+
+ return DB::transaction(function () use ($actor, $code, $plan): array {
+ DB::select('select pg_advisory_xact_lock(261102, hashtext(?))', [$code]);
+ $existing = DB::table('funding_programmes')->where('code', $code)->lockForUpdate()->first();
+ if ($existing) {
+ return ['id' => $existing->id, 'created' => false];
+ }
+ $id = app(FundingProgrammes::class)->save($actor, null, ['version' => 0, 'code' => $code,
+ 'reason' => 'Preparação de referência oficial '.$plan['edition'].'; rascunho sem publicação automática.', 'draft' => $plan['draft']]);
+ DB::table('audit_events')->insert(['source_system' => 'funding-catalogue', 'entity_type' => 'funding_programmes', 'entity_id' => $id,
+ 'actor_user_id' => $actor->id, 'action' => 'reference_prepared', 'data_classification' => 'restricted',
+ 'after_data' => json_encode(['edition' => $plan['edition'], 'package_sha256' => $plan['package_sha256'], 'provenance' => $plan['provenance'], 'effect' => 'private_draft_only'], JSON_THROW_ON_ERROR)]);
+
+ return ['id' => $id, 'created' => true];
+ });
+ }
+}
diff --git a/app/Services/FundingProgrammes.php b/app/Services/FundingProgrammes.php
new file mode 100644
index 00000000..3a9c5e32
--- /dev/null
+++ b/app/Services/FundingProgrammes.php
@@ -0,0 +1,453 @@
+ 'Fundo', 'programme' => 'Programa de apoio', 'incentive' => 'Incentivo'];
+
+ public const WINDOWS = ['dated' => 'Datas documentadas', 'rolling' => 'Recepção contínua documentada', 'unknown' => 'Janela por confirmar', 'closed' => 'Encerrada segundo a fonte'];
+
+ public function installed(): bool
+ {
+ return Schema::hasTable('funding_programme_interests') && Schema::hasTable('funding_programme_versions');
+ }
+
+ public function access(?User $actor): bool
+ {
+ return app(DocumentManagementAccess::class)->catalogueEditor($actor);
+ }
+
+ public function guard(?User $actor): void
+ {
+ abort_unless($this->installed(), 404);
+ abort_unless($this->access($actor), 403);
+ }
+
+ public function publicQuery(): Builder
+ {
+ abort_unless($this->installed(), 404);
+
+ return DB::table('funding_programmes as p')->join('funding_programme_versions as v', fn ($join) => $join->on('v.id', '=', 'p.published_version_id')->on('v.programme_id', '=', 'p.id'))
+ ->where('v.published_at', '<=', now());
+ }
+
+ public function readableVersions(): Builder
+ {
+ return DB::table('funding_programme_versions')->where('published_at', '<=', now())
+ ->whereIn('programme_id', $this->publicQuery()->select('p.id'));
+ }
+
+ /** @param array $filters */
+ public function catalogueQuery(array $filters): Builder
+ {
+ $query = $this->publicQuery();
+ $includeUnknown = ($filters['certainty'] ?? 'include_unknown') === 'include_unknown';
+ if (! empty($filters['sector'])) {
+ $query->where(function (Builder $scope) use ($filters, $includeUnknown): void {
+ $scope->whereRaw("v.payload->>'sectors_scope' = 'all'")
+ ->orWhereJsonContains('v.payload->sector_ids', (int) $filters['sector']);
+ if ($includeUnknown) {
+ $scope->orWhereRaw("v.payload->>'sectors_scope' = 'unknown'");
+ }
+ });
+ }
+ if (! empty($filters['territory'])) {
+ $path = array_column(app(InvestmentGeography::class)->path($filters['territory']), 'id');
+ $query->where(function (Builder $scope) use ($filters, $path, $includeUnknown): void {
+ $scope->whereRaw("v.payload->>'coverage' = 'national'")
+ ->orWhereJsonContains('v.payload->territory_ancestor_ids', $filters['territory']);
+ foreach ($path as $id) {
+ $scope->orWhereJsonContains('v.payload->territory_ids', $id);
+ }
+ if ($includeUnknown) {
+ $scope->orWhereRaw("v.payload->>'coverage' = 'unknown'");
+ }
+ });
+ }
+ if (! empty($filters['state'])) {
+ $today = today()->toDateString();
+ $state = $filters['state'];
+ if ($state === 'unknown') {
+ $query->whereRaw("(jsonb_array_length(v.payload->'windows') = 0 OR EXISTS (SELECT 1 FROM jsonb_array_elements(v.payload->'windows') w WHERE w->>'mode' = 'unknown'))");
+ } elseif ($state === 'closed') {
+ $query->whereRaw("EXISTS (SELECT 1 FROM jsonb_array_elements(v.payload->'windows') w WHERE w->>'mode' = 'closed' OR (w->>'mode' = 'dated' AND w->>'end_on' < ?))", [$today]);
+ } elseif ($state === 'upcoming') {
+ $query->whereRaw("EXISTS (SELECT 1 FROM jsonb_array_elements(v.payload->'windows') w WHERE w->>'mode' = 'dated' AND w->>'start_on' > ?)", [$today]);
+ } else {
+ $query->whereRaw("EXISTS (SELECT 1 FROM jsonb_array_elements(v.payload->'windows') w WHERE w->>'mode' IN ('dated','rolling') AND COALESCE(NULLIF(w->>'start_on',''),?) <= ? AND COALESCE(NULLIF(w->>'end_on',''),?) >= ?)", [$today, $today, $today, $today]);
+ }
+ }
+
+ return $query;
+ }
+
+ /** @param array $record
+ * @param array $filters
+ * @return array */
+ public function filterExplanation(array $record, array $filters): array
+ {
+ $payload = $record['payload'];
+ $result = [];
+ if (! empty($filters['sector'])) {
+ $result['sector'] = $payload['sectors_scope'] === 'unknown'
+ ? 'Âmbito sectorial por confirmar; não é uma correspondência confirmada.'
+ : 'O sector está abrangido pelo âmbito documentado do programa.';
+ }
+ if (! empty($filters['territory'])) {
+ $path = array_column(app(InvestmentGeography::class)->path($filters['territory']), 'id');
+ $result['territory'] = $payload['coverage'] === 'unknown' ? 'Cobertura territorial por confirmar; não é uma correspondência confirmada.'
+ : ($payload['coverage'] === 'national' || array_intersect($path, $payload['territory_ids']) !== []
+ ? 'O local está abrangido pela cobertura documentada do programa.'
+ : 'O programa abrange uma parte da área seleccionada; confira os locais na ficha.');
+ }
+
+ return $result;
+ }
+
+ /** @return array */
+ public function published(string $id): array
+ {
+ $row = $this->publicQuery()->where('p.id', $id)->firstOrFail(['p.id', 'p.code', 'v.id as version_id', 'v.version', 'v.payload', 'v.published_at']);
+
+ return $this->present($row);
+ }
+
+ /** @return array */
+ public function present(\stdClass $row): array
+ {
+ $payload = json_decode($row->payload, true, 512, JSON_THROW_ON_ERROR);
+ foreach ($payload['windows'] as &$window) {
+ $window['state'] = $this->windowState($window);
+ }
+ unset($window);
+ $payload['documents'] = array_map(fn ($document) => [...$document,
+ 'available' => app(Procurement::class)->publicDocuments()->where('r.id', $document['resource_id'])->where('d.id', $document['document_id'])
+ ->where('d.sha256', $document['sha256'])->where('d.version_no', $document['version'])->exists(),
+ ], $payload['document_snapshots'] ?? []);
+
+ return ['id' => $row->id, 'code' => $row->code, 'version_id' => $row->version_id, 'version' => (int) $row->version,
+ 'published_at' => $row->published_at, 'payload' => $payload];
+ }
+
+ /** @param array $window */
+ public function windowState(array $window): string
+ {
+ if ($window['mode'] === 'closed') {
+ return 'closed';
+ }
+ if ($window['mode'] === 'unknown') {
+ return 'unknown';
+ }
+ if (! empty($window['end_on']) && $window['end_on'] < today()->toDateString()) {
+ return 'closed';
+ }
+ if (! empty($window['start_on']) && $window['start_on'] > today()->toDateString()) {
+ return 'upcoming';
+ }
+
+ return 'open';
+ }
+
+ /** Resolve only the exact library binary incorporated in the current public version. */
+ public function download(string $id, string $version, int $resource): Response|BinaryFileResponse
+ {
+ $record = $this->published($id);
+ abort_unless($record['version_id'] === $version, 404);
+ $snapshot = null;
+ foreach ($record['payload']['document_snapshots'] ?? [] as $candidate) {
+ if ($candidate['resource_id'] === $resource) {
+ $snapshot = $candidate;
+ break;
+ }
+ }
+ abort_unless($snapshot !== null, 404);
+ $document = app(Procurement::class)->publicDocuments()->where('r.id', $resource)
+ ->where('d.id', $snapshot['document_id'])->where('d.version_no', $snapshot['version'])
+ ->where('d.sha256', $snapshot['sha256'])->first(['d.*']);
+ abort_unless($document !== null, 404);
+
+ return app(VerifiedDocumentBinary::class)->respond($document);
+ }
+
+ /** @param array $input */
+ public function save(User $actor, ?string $id, array $input): string
+ {
+ $this->guard($actor);
+ $data = Validator::make($input, ['version' => 'required|integer|min:0', 'code' => 'required|string|regex:/^[a-z0-9][a-z0-9-]{0,79}$/D',
+ 'reason' => 'required|string|min:20|max:2000', 'draft' => 'required|array'])->validate();
+ $draft = $this->normalize($actor, $data['draft'], false);
+
+ return DB::transaction(function () use ($actor, $id, $data, $draft): string {
+ DB::select('select pg_advisory_xact_lock(261102, hashtext(?))', [$data['code']]);
+ $row = $id ? DB::table('funding_programmes')->where('id', $id)->lockForUpdate()->firstOrFail() : null;
+ abort_unless((int) ($row->version ?? 0) === (int) $data['version'], 409, 'A ficha foi alterada. Recupere a versão actual antes de guardar.');
+ abort_if($row && $row->code !== $data['code'], 422, 'O identificador da ficha é estável.');
+ if (! $row && DB::table('funding_programmes')->where('code', $data['code'])->exists()) {
+ throw ValidationException::withMessages(['code' => 'Este identificador já pertence a uma ficha. Abra-a para actualizar ou acrescentar uma janela.']);
+ }
+ $id ??= (string) Str::uuid();
+ DB::table('funding_programmes')->updateOrInsert(['id' => $id], ['code' => $data['code'], 'version' => (int) $data['version'] + 1,
+ 'draft' => json_encode($draft, JSON_THROW_ON_ERROR), 'created_by' => $row->created_by ?? $actor->id,
+ 'created_at' => $row->created_at ?? now(), 'updated_at' => now()]);
+ $this->audit($actor, $id, 'draft_saved', ['version' => (int) $data['version'] + 1, 'reason' => $data['reason']]);
+
+ return $id;
+ });
+ }
+
+ /** @param array $input
+ * @return array */
+ private function normalize(User $actor, array $input, bool $publishing): array
+ {
+ $required = $publishing ? 'required' : 'nullable';
+ $rules = [
+ 'title' => "$required|string|max:250", 'kind' => ['required', Rule::in(array_keys(self::KINDS))], 'summary' => "$required|string|max:4000",
+ 'manager_name' => 'nullable|string|max:250', 'manager_organization_id' => ['nullable', 'uuid', Rule::exists('organizations', 'id')->whereNull('deleted_at')],
+ 'source_url' => "$required|url:http,https|max:2000", 'source_reference' => "$required|string|max:1500", 'source_checked_on' => "$required|date_format:Y-m-d|before_or_equal:today",
+ 'source_published_on' => 'nullable|date_format:Y-m-d', 'source_status' => 'required|in:identified,unknown,example',
+ 'coverage' => 'required|in:national,territorial,unknown', 'coverage_text' => 'nullable|string|max:2000',
+ 'territory_ids' => 'array|max:30', 'territory_ids.*' => 'required|uuid|distinct',
+ 'sectors_scope' => 'required|in:all,selected,unknown', 'sectors_text' => 'nullable|string|max:2000', 'sector_ids' => 'array|max:40',
+ 'sector_ids.*' => ['required', 'integer', 'distinct', Rule::in(Sector::choices()->whereNotNull('published_at')->pluck('id')->all())],
+ 'resource_ids' => 'array|max:30', 'resource_ids.*' => 'required|integer|distinct|exists:portal_resources,id',
+ 'criteria' => 'array|max:30', 'windows' => 'array|max:20',
+ 'windows.*' => 'required|array:code,title,mode,start_on,end_on,coverage,coverage_text,territory_ids,source_url,source_reference,checked_on,application_url,criteria',
+ 'windows.*.code' => 'required|string|regex:/^[a-z0-9][a-z0-9-]{0,79}$/D|distinct', 'windows.*.title' => "$required|string|max:250",
+ 'windows.*.mode' => ['required', Rule::in(array_keys(self::WINDOWS))], 'windows.*.start_on' => 'nullable|date_format:Y-m-d', 'windows.*.end_on' => 'nullable|date_format:Y-m-d',
+ 'windows.*.coverage' => 'required|in:programme,national,territorial,unknown', 'windows.*.coverage_text' => 'nullable|string|max:2000',
+ 'windows.*.territory_ids' => 'array|max:30', 'windows.*.territory_ids.*' => 'required|uuid|distinct',
+ 'windows.*.source_url' => "$required|url:http,https|max:2000", 'windows.*.source_reference' => "$required|string|max:1500",
+ 'windows.*.checked_on' => "$required|date_format:Y-m-d|before_or_equal:today", 'windows.*.application_url' => 'nullable|url:http,https|max:2000', 'windows.*.criteria' => 'array|max:30',
+ ];
+ foreach (['criteria', 'windows.*.criteria'] as $prefix) {
+ $rules[$prefix.'.*'] = 'required|array:code,question,applies_to,expected,source_reference,explanation';
+ $rules[$prefix.'.*.code'] = 'required|string|regex:/^[a-z0-9][a-z0-9-]{0,79}$/D';
+ $rules[$prefix.'.*.question'] = "$required|string|max:500";
+ $rules[$prefix.'.*.applies_to'] = 'required|in:all,individual,entity';
+ $rules[$prefix.'.*.expected'] = 'required|in:yes,no';
+ $rules[$prefix.'.*.source_reference'] = "$required|string|max:1500";
+ $rules[$prefix.'.*.explanation'] = "$required|string|max:2000";
+ }
+ $data = Validator::make($input, $rules)->validate();
+ $data = [...$data, 'territory_ids' => $data['territory_ids'] ?? [], 'sector_ids' => $data['sector_ids'] ?? [], 'resource_ids' => $data['resource_ids'] ?? [],
+ 'criteria' => $data['criteria'] ?? [], 'windows' => $data['windows'] ?? []];
+ if ($data['coverage'] !== 'territorial' && $data['territory_ids'] !== []) {
+ throw ValidationException::withMessages(['territory_ids' => 'Seleccione cobertura territorial para associar locais específicos.']);
+ }
+ if ($data['sectors_scope'] !== 'selected' && $data['sector_ids'] !== []) {
+ throw ValidationException::withMessages(['sector_ids' => 'Seleccione o âmbito por sectores para associar sectores específicos.']);
+ }
+ if ($publishing && $data['coverage'] === 'territorial' && $data['territory_ids'] === []) {
+ throw ValidationException::withMessages(['territory_ids' => 'Seleccione os locais documentados ou assinale a cobertura como por determinar.']);
+ }
+ if ($data['manager_organization_id'] ?? null) {
+ $data['manager_name'] = DB::table('organizations')->where('id', $data['manager_organization_id'])->value('name');
+ }
+ if ($publishing && empty($data['manager_name'])) {
+ throw ValidationException::withMessages(['manager_name' => 'Seleccione a entidade do cadastro ou identifique o gestor indicado pela fonte.']);
+ }
+ if ($publishing && $data['source_status'] !== 'identified') {
+ throw ValidationException::withMessages(['source_status' => 'Identifique a fonte efectiva. Conteúdo de exemplo ou origem por identificar não confirma um programa real.']);
+ }
+ if ($publishing && $data['sectors_scope'] === 'selected' && $data['sector_ids'] === []) {
+ throw ValidationException::withMessages(['sector_ids' => 'Seleccione os sectores documentados ou assinale o âmbito como por determinar.']);
+ }
+ $territories = $data['territory_ids'];
+ $codes = [];
+ foreach (array_merge([$data['criteria']], array_column($data['windows'], 'criteria')) as $criteria) {
+ foreach ($criteria as $criterion) {
+ if (in_array($criterion['code'], $codes, true)) {
+ throw ValidationException::withMessages(['criteria' => 'Cada critério deve ter um identificador único na ficha, sem repetir perguntas comuns por janela.']);
+ }
+ $codes[] = $criterion['code'];
+ }
+ }
+ foreach ($data['windows'] as $index => &$window) {
+ $window['criteria'] ??= [];
+ $window['territory_ids'] ??= [];
+ if ($window['coverage'] !== 'territorial' && $window['territory_ids'] !== []) {
+ throw ValidationException::withMessages(['windows.'.$index.'.territory_ids' => 'Associe locais apenas numa janela de cobertura territorial.']);
+ }
+ if ($publishing && $window['coverage'] === 'territorial' && $window['territory_ids'] === []) {
+ throw ValidationException::withMessages(['windows.'.$index.'.territory_ids' => 'Seleccione os locais documentados ou assinale a cobertura como por determinar.']);
+ }
+ $territories = array_merge($territories, $window['territory_ids']);
+ if ($publishing && $window['mode'] === 'dated' && empty($window['end_on'])) {
+ throw ValidationException::withMessages(['windows.'.$index.'.end_on' => 'Uma janela com datas documentadas precisa da data-limite.']);
+ }
+ if (! empty($window['start_on']) && ! empty($window['end_on']) && $window['start_on'] > $window['end_on']) {
+ throw ValidationException::withMessages(['windows.'.$index.'.end_on' => 'A data-limite não pode anteceder a abertura.']);
+ }
+ if (in_array($window['mode'], ['rolling', 'unknown'], true) && (! empty($window['start_on']) || ! empty($window['end_on']))) {
+ throw ValidationException::withMessages(['windows.'.$index.'.mode' => 'Conserve datas documentadas ou escolha uma janela sem datas; não misture as duas indicações.']);
+ }
+ }
+ unset($window);
+ foreach (array_unique($territories) as $territory) {
+ if (! app(InvestmentGeography::class)->publicReferences()->where('id', $territory)->exists()) {
+ throw ValidationException::withMessages(['territory_ids' => 'Seleccione referências do cadastro territorial público.']);
+ }
+ }
+ if ($publishing) {
+ $data['territory_paths'] = array_map(fn ($id) => array_map(fn ($node) => ['id' => $node->id, 'name' => $node->name, 'type' => $node->location_type], app(InvestmentGeography::class)->path($id)), $data['territory_ids']);
+ $data['territory_ancestor_ids'] = array_values(array_unique(array_merge([], ...array_map(fn ($path) => array_column($path, 'id'), $data['territory_paths']))));
+ $data['sector_snapshots'] = Sector::choices()->whereIn('id', $data['sector_ids'])->get(['id', 'name'])->toArray();
+ foreach ($data['windows'] as &$window) {
+ $window['territory_paths'] = array_map(fn ($id) => array_map(fn ($node) => ['id' => $node->id, 'name' => $node->name, 'type' => $node->location_type], app(InvestmentGeography::class)->path($id)), $window['territory_ids']);
+ }
+ unset($window);
+ }
+ foreach ($data['resource_ids'] as $resource) {
+ $public = app(Procurement::class)->publicDocuments()->where('r.id', $resource)->first(['r.title', 'd.id', 'd.version_no', 'd.sha256']);
+ $document = DB::table('portal_resources')->where('id', $resource)->value('document_id');
+ if (! $public && ($publishing || ! app(DocumentManagementAccess::class)->documents($actor)->where('id', $document)->exists())) {
+ throw ValidationException::withMessages(['resource_ids' => 'Um documento publicado exige acesso público, direitos e análise de segurança válidos na biblioteca.']);
+ }
+ if ($publishing) {
+ $data['document_snapshots'][] = ['resource_id' => $resource, 'document_id' => $public->id, 'version' => (int) $public->version_no,
+ 'sha256' => trim($public->sha256), 'title' => $public->title];
+ }
+ }
+
+ return $data;
+ }
+
+ /** @return array */
+ public function preview(User $actor, string $id): array
+ {
+ $this->guard($actor);
+ $row = DB::table('funding_programmes')->where('id', $id)->firstOrFail();
+ $payload = $this->normalize($actor, json_decode($row->draft, true, 512, JSON_THROW_ON_ERROR), true);
+ unset($payload['manager_organization_id']);
+ $plan = ['id' => $id, 'code' => $row->code, 'version' => (int) $row->version, 'payload' => $payload];
+ $plan['hash'] = hash_hmac('sha256', json_encode(Arr::sortRecursive($plan), JSON_THROW_ON_ERROR), config('app.key'));
+
+ return $plan;
+ }
+
+ /** @param array $input */
+ public function publish(User $actor, string $id, array $input): string
+ {
+ $this->guard($actor);
+ $data = Validator::make($input, ['version' => 'required|integer|min:1', 'hash' => 'required|string|size:64',
+ 'reason' => 'required|string|min:20|max:2000', 'confirm' => 'accepted'])->validate();
+
+ return DB::transaction(function () use ($actor, $id, $data): string {
+ $row = DB::table('funding_programmes')->where('id', $id)->lockForUpdate()->firstOrFail();
+ $plan = $this->preview($actor, $id);
+ abort_unless((int) $row->version === (int) $data['version'] && hash_equals($plan['hash'], $data['hash']), 409, 'A prévia mudou. Confira novamente antes de publicar.');
+ if ($row->published_version_id) {
+ $previous = DB::table('funding_programme_versions')->where('id', $row->published_version_id)->firstOrFail();
+ if (json_decode($previous->payload, false, 512, JSON_THROW_ON_ERROR) == json_decode(json_encode($plan['payload'], JSON_THROW_ON_ERROR), false, 512, JSON_THROW_ON_ERROR)) {
+ return $previous->id;
+ }
+ }
+ $version = (string) Str::uuid();
+ $publicationNumber = max((int) $row->version, (int) DB::table('funding_programme_versions')->where('programme_id', $id)->max('version') + 1);
+ DB::table('funding_programme_versions')->insert(['id' => $version, 'programme_id' => $id, 'version' => $publicationNumber,
+ 'payload' => json_encode($plan['payload'], JSON_THROW_ON_ERROR), 'reason' => $data['reason'], 'actor_id' => $actor->id, 'published_at' => now()]);
+ DB::table('funding_programmes')->where('id', $id)->update(['published_version_id' => $version, 'updated_at' => now()]);
+ $this->audit($actor, $id, 'published', ['version_id' => $version, 'version' => $publicationNumber, 'draft_version' => (int) $row->version, 'reason' => $data['reason'], 'effect' => 'new_public_version_only']);
+
+ return $version;
+ });
+ }
+
+ public function withdraw(User $actor, string $id, int $version, string $reason): void
+ {
+ $this->guard($actor);
+ Validator::make(['reason' => $reason], ['reason' => 'required|string|min:20|max:2000'])->validate();
+ DB::transaction(function () use ($actor, $id, $version, $reason): void {
+ $row = DB::table('funding_programmes')->where('id', $id)->lockForUpdate()->firstOrFail();
+ abort_unless((int) $row->version === $version, 409);
+ DB::table('funding_programmes')->where('id', $id)->update(['published_version_id' => null, 'version' => $version + 1, 'updated_at' => now()]);
+ $this->audit($actor, $id, 'withdrawn', ['previous_version_id' => $row->published_version_id, 'reason' => $reason]);
+ });
+ }
+
+ /** @param array $input
+ * @return array */
+ public function assess(string $id, array $input): array
+ {
+ $record = $this->published($id);
+ $data = Validator::make($input, ['version_id' => 'required|uuid', 'applicant_kind' => 'required|in:individual,entity,unknown',
+ 'window_code' => 'nullable|string|max:80', 'answers' => 'present|array|max:60', 'answers.*' => 'required|in:yes,no,unknown'])->validate();
+ abort_unless($data['version_id'] === $record['version_id'], 409, 'A versão pública mudou. Recupere os critérios actuais antes de conferir.');
+ $window = null;
+ foreach ($record['payload']['windows'] as $candidate) {
+ if ($candidate['code'] === ($data['window_code'] ?? null)) {
+ $window = $candidate;
+ break;
+ }
+ }
+ abort_if(! empty($data['window_code']) && ! $window, 422);
+ $criteria = array_merge($record['payload']['criteria'], $window['criteria'] ?? []);
+ abort_if(array_diff(array_keys($data['answers']), array_column($criteria, 'code')) !== [], 422, 'A resposta deve pertencer aos critérios desta versão e janela.');
+ $results = [];
+ foreach ($criteria as $criterion) {
+ $status = 'unknown';
+ if ($criterion['applies_to'] !== 'all' && $data['applicant_kind'] !== 'unknown' && $criterion['applies_to'] !== $data['applicant_kind']) {
+ $status = 'not_applicable';
+ } elseif (($criterion['applies_to'] === 'all' || $criterion['applies_to'] === $data['applicant_kind']) && ($data['answers'][$criterion['code']] ?? 'unknown') !== 'unknown') {
+ $status = $data['answers'][$criterion['code']] === $criterion['expected'] ? 'matches' : 'does_not_match';
+ }
+ $results[] = [...$criterion, 'status' => $status];
+ }
+
+ return ['version_id' => $record['version_id'], 'window_code' => $window['code'] ?? null, 'window_state' => $window ? $this->windowState($window) : 'unknown',
+ 'criteria' => $results, 'counts' => array_count_values(array_column($results, 'status')),
+ 'notice' => 'Correspondência preliminar das respostas declaradas com os critérios citados. Não é aprovação, candidatura enviada, concessão de financiamento ou benefício fiscal.'];
+ }
+
+ public function saveInterest(User $actor, string $id, string $version, bool $consent): void
+ {
+ abort_unless($consent, 422, 'Confirme que pretende guardar este programa na sua área privada.');
+ DB::transaction(function () use ($actor, $id, $version): void {
+ // Serialize this person's bookmarks without blocking audit FK KEY SHARE locks.
+ DB::table('users')->where('id', $actor->id)->lock('FOR NO KEY UPDATE')->firstOrFail();
+ DB::table('funding_programmes')->where('id', $id)->lockForUpdate()->firstOrFail();
+ $record = $this->published($id);
+ abort_unless($record['version_id'] === $version, 409, 'A versão pública mudou. Recupere a ficha antes de guardar.');
+ $saved = DB::table('funding_programme_interests')->where('user_id', $actor->id)->where('programme_id', $id)->first();
+ if ($saved && $saved->removed_at === null) {
+ return;
+ }
+ DB::table('funding_programme_interests')->updateOrInsert(['user_id' => $actor->id, 'programme_id' => $id], [
+ 'version_id' => $version, 'saved_at' => now(), 'removed_at' => null,
+ ]);
+ $this->audit($actor, $id, 'interest_saved', ['version_id' => $version, 'scope' => 'private_bookmark_not_application']);
+ });
+ }
+
+ public function removeInterest(User $actor, string $id): void
+ {
+ DB::transaction(function () use ($actor, $id): void {
+ DB::table('users')->where('id', $actor->id)->lock('FOR NO KEY UPDATE')->firstOrFail();
+ if (DB::table('funding_programme_interests')->where('user_id', $actor->id)->where('programme_id', $id)->whereNull('removed_at')->update(['removed_at' => now()])) {
+ $this->audit($actor, $id, 'interest_removed', ['scope' => 'private_bookmark']);
+ }
+ });
+ }
+
+ /** @param array $data */
+ private function audit(User $actor, string $id, string $action, array $data): void
+ {
+ DB::table('audit_events')->insert(['source_system' => 'funding-catalogue', 'entity_type' => 'funding_programmes', 'entity_id' => $id,
+ 'actor_user_id' => $actor->id, 'action' => $action, 'data_classification' => 'restricted', 'after_data' => json_encode($data, JSON_THROW_ON_ERROR)]);
+ }
+}
diff --git a/app/Services/InvestmentCatalogue.php b/app/Services/InvestmentCatalogue.php
index bc0b54c5..96eddf31 100644
--- a/app/Services/InvestmentCatalogue.php
+++ b/app/Services/InvestmentCatalogue.php
@@ -135,19 +135,7 @@ class InvestmentCatalogue
}
}
if (! empty($filters['q'])) {
- $term = '%'.$filters['q'].'%';
- $query->where(fn ($q) => $q->where('title', 'ilike', $term)->orWhere('description', 'ilike', $term)->orWhere('summary', 'ilike', $term)->orWhere('reference', 'ilike', $term)
- ->orWhere('province', 'ilike', $term)->orWhereHas('sector', fn ($s) => $s->where('name', 'ilike', $term))
- ->orWhereExists(fn ($g) => $g->selectRaw('1')->from('geo_locations as search_location')->whereNull('search_location.deleted_at')->where('search_location.data_classification', 'public')
- ->where('search_location.name', 'ilike', $term)->whereIn('search_location.id', app(InvestmentGeography::class)->publicReferences()->select('id'))
- ->where(fn ($direct) => $direct->whereColumn('search_location.id', 'opportunities.primary_territory_id')
- ->orWhereExists(fn ($l) => $l->selectRaw('1')->from('opportunity_locations as search_link')->whereColumn('search_link.opportunity_id', 'opportunities.id')->whereColumn('search_link.geo_location_id', 'search_location.id'))))
- ->orWhereExists(fn ($d) => $d->selectRaw('1')->from('investment_dossiers as searchable_dossier')
- ->whereNull('searchable_dossier.deleted_at')->where('searchable_dossier.publication_status', 'published')
- ->where(fn ($text) => $text->where('searchable_dossier.title', 'ilike', $term)->orWhereRaw('searchable_dossier.content::text ILIKE ?', [$term]))
- ->where(fn ($relation) => $relation
- ->whereExists(fn ($p) => $p->selectRaw('1')->from('opportunity_projects as search_project')->whereColumn('search_project.opportunity_id', 'opportunities.id')->whereColumn('search_project.project_id', 'searchable_dossier.project_id'))
- ->orWhereExists(fn ($c) => $c->selectRaw('1')->from('opportunity_clusters as search_cluster')->whereColumn('search_cluster.opportunity_id', 'opportunities.id')->whereColumn('search_cluster.cluster_id', 'searchable_dossier.cluster_id')))));
+ app(OpportunityTextSearch::class)->constrain($query, $filters['q']);
}
if (! empty($filters['sector'])) {
SectorOrganization::constrain($query, $filters['sector']);
diff --git a/app/Services/InvestmentOpportunityAlerts.php b/app/Services/InvestmentOpportunityAlerts.php
new file mode 100644
index 00000000..c6ab25af
--- /dev/null
+++ b/app/Services/InvestmentOpportunityAlerts.php
@@ -0,0 +1,263 @@
+ 'Na próxima verificação', 'daily' => 'De 24 em 24 horas', 'weekly' => 'De 7 em 7 dias'];
+
+ public function fundingAvailable(): bool
+ {
+ return Schema::hasTable('investment_funding_alert_seen') && Schema::hasColumn('investment_notifications', 'funding_version_id')
+ && app(FundingProgrammes::class)->installed();
+ }
+
+ /** @param array $criteria
+ * @return array */
+ private function fundingFilters(array $criteria): array
+ {
+ return array_filter(['sector' => isset($criteria['sector']) ? Sector::choices()->where('slug', $criteria['sector'])->value('id') : null,
+ 'territory' => $criteria['province_id'] ?? null, 'certainty' => $criteria['funding_certainty'] ?? 'documented',
+ 'state' => $criteria['funding_state'] ?? null], fn ($value) => $value !== null);
+ }
+
+ public function tendersInstalled(): bool
+ {
+ return Schema::hasTable('investment_tender_alert_seen') && Schema::hasColumn('investment_alert_preferences', 'sources')
+ && Schema::hasColumn('investment_notifications', 'tender_version_id');
+ }
+
+ public function tendersAvailable(): bool
+ {
+ return $this->tendersInstalled() && app(Procurement::class)->available();
+ }
+
+ public function installed(): bool
+ {
+ return Schema::hasTable('investment_alert_seen') && Schema::hasTable('investment_alert_preferences') && Schema::hasColumn('investment_notifications', 'opportunity_id');
+ }
+
+ /** @return array */
+ public function preferences(int $user): array
+ {
+ $row = DB::table('investment_alert_preferences')->where('user_id', $user)->first();
+
+ $criteria = $row ? json_decode(Crypt::decryptString($row->criteria), true, 512, JSON_THROW_ON_ERROR) : [];
+ $sources = isset($row->sources) ? json_decode($row->sources, true, 512, JSON_THROW_ON_ERROR) : ['opportunities'];
+ $statuses = [];
+ foreach ($sources as $source) {
+ $statuses[$source] = $this->criteriaAvailable($criteria, $source) && ($source !== 'tenders' || $this->tendersAvailable())
+ && ($source !== 'funding' || $this->fundingAvailable());
+ }
+
+ return ['version' => (int) ($row->version ?? 0), 'enabled' => (bool) ($row->enabled ?? false),
+ 'frequency' => $row->frequency ?? 'as_available', 'channel' => 'in_app', 'next_run_at' => $row->next_run_at ?? null,
+ 'criteria' => $criteria, 'sources' => $sources, 'source_statuses' => $statuses, 'criteria_available' => ! in_array(false, $statuses, true)];
+ }
+
+ /** @param array $criteria */
+ private function criteriaAvailable(array $criteria, string $source): bool
+ {
+ return (! isset($criteria['sector']) || Sector::choices()->whereNotNull('published_at')->where('slug', $criteria['sector'])->exists())
+ && (! isset($criteria['province_id']) || app(InvestmentGeography::class)->publicReferences()->where('location_type', 'province')->where('id', $criteria['province_id'])->exists())
+ && ($source !== 'opportunities' || ! isset($criteria['category']) || in_array($criteria['category'], OpportunityManagement::CATEGORIES, true))
+ && ($source !== 'tenders' || ! isset($criteria['tender_regime']) || array_key_exists($criteria['tender_regime'], config('procurement.regimes')))
+ && ($source !== 'funding' || ((! isset($criteria['funding_certainty']) || in_array($criteria['funding_certainty'], ['documented', 'include_unknown'], true))
+ && (! isset($criteria['funding_state']) || in_array($criteria['funding_state'], ['open', 'closed', 'upcoming', 'unknown'], true))));
+ }
+
+ /** @param array $input
+ * @return array */
+ public function save(User $actor, array $input): array
+ {
+ abort_unless($this->installed(), 503);
+ $enabling = in_array($input['enabled'] ?? null, [true, 1, '1'], true);
+ // Cancelling only needs the actor and version; retired form choices must not prevent it.
+ $validatedInput = $enabling ? $input : ['version' => $input['version'] ?? null, 'enabled' => $input['enabled'] ?? null];
+ if ($enabling) {
+ $validatedInput['sources'] ??= ['opportunities'];
+ if (is_array($validatedInput['sources']) && is_array($validatedInput['criteria'] ?? null)) {
+ if (! in_array('opportunities', $validatedInput['sources'], true)) {
+ unset($validatedInput['criteria']['category']);
+ }
+ if (! in_array('tenders', $validatedInput['sources'], true)) {
+ unset($validatedInput['criteria']['tender_regime']);
+ }
+ if (! in_array('funding', $validatedInput['sources'], true)) {
+ unset($validatedInput['criteria']['funding_certainty'], $validatedInput['criteria']['funding_state']);
+ }
+ }
+ }
+ $data = Validator::make($validatedInput, [
+ 'version' => ['required', 'integer', 'min:0'], 'enabled' => ['required', 'boolean'],
+ 'frequency' => [$enabling ? 'required' : 'sometimes', Rule::in(array_keys(self::FREQUENCIES))], 'channel' => [$enabling ? 'required' : 'sometimes', 'in:in_app'],
+ 'consent' => $enabling ? ['accepted'] : ['nullable', 'boolean'],
+ 'sources' => [$enabling ? 'required' : 'sometimes', 'array', 'min:1', 'max:3'],
+ 'sources.*' => ['required', 'string', 'distinct', Rule::in(['opportunities', 'tenders', 'funding'])],
+ 'criteria' => [$enabling ? 'present' : 'sometimes', 'array:sector,province_id,category,tender_regime,funding_certainty,funding_state'],
+ 'criteria.sector' => ['nullable', 'string', 'max:80', ...($enabling ? [Rule::in(Sector::choices()->whereNotNull('published_at')->pluck('slug')->all())] : [])],
+ 'criteria.province_id' => ['nullable', 'uuid'], 'criteria.category' => ['nullable', Rule::in(OpportunityManagement::CATEGORIES)],
+ 'criteria.tender_regime' => ['nullable', Rule::in(array_keys(config('procurement.regimes')))],
+ 'criteria.funding_certainty' => ['nullable', 'in:documented,include_unknown'], 'criteria.funding_state' => ['nullable', 'in:open,closed,upcoming,unknown'],
+ ])->validate();
+ $sources = $data['sources'] ?? ['opportunities'];
+ sort($sources);
+ if ($enabling && in_array('funding', $sources, true) && ! $this->fundingAvailable()) {
+ throw ValidationException::withMessages(['sources' => 'O catálogo de fundos não está disponível. Pode manter as outras fontes ou cancelar.']);
+ }
+ if ($enabling && in_array('tenders', $sources, true) && ! $this->tendersAvailable()) {
+ throw ValidationException::withMessages(['sources' => 'O catálogo de concursos não está disponível. Pode manter o acompanhamento de oportunidades ou cancelar.']);
+ }
+ $criteria = array_filter($data['criteria'] ?? [], fn ($value) => $value !== null && $value !== '');
+ ksort($criteria);
+ if ($enabling && isset($criteria['province_id']) && ! app(InvestmentGeography::class)->publicReferences()->where('location_type', 'province')->where('id', $criteria['province_id'])->exists()) {
+ throw ValidationException::withMessages(['criteria.province_id' => 'Seleccione uma província do cadastro público.']);
+ }
+
+ return DB::transaction(function () use ($actor, $data, $criteria, $sources): array {
+ // Keep preference writes serialized without blocking notification/audit FK readers.
+ DB::table('users')->where('id', $actor->id)->lock('FOR NO KEY UPDATE')->firstOrFail();
+ $row = DB::table('investment_alert_preferences')->where('user_id', $actor->id)->lockForUpdate()->first();
+ $before = $this->preferences($actor->id);
+ if (! $data['enabled']) {
+ $data['frequency'] = $before['frequency'];
+ $criteria = $before['criteria'];
+ $sources = $before['sources'];
+ }
+ $same = $row && $before['enabled'] === (bool) $data['enabled'] && $before['frequency'] === $data['frequency'] && $before['criteria'] === $criteria && $before['sources'] === $sources;
+ if ($same && in_array((int) $data['version'], [$before['version'], $before['version'] - 1], true)) {
+ return $before;
+ }
+ abort_unless((int) $data['version'] === $before['version'], 409, 'As preferências foram alteradas. Recarregue antes de guardar.');
+ if ($data['enabled'] && (! $before['enabled'] || $criteria !== $before['criteria'] || $sources !== $before['sources'])) {
+ // Existing public identities establish the baseline; no timestamps or backdated publications are guessed.
+ if (in_array('opportunities', $sources, true)) {
+ Opportunity::published()->select('id')->chunkById(500, function ($records) use ($actor): void {
+ DB::table('investment_alert_seen')->insertOrIgnore($records->map(fn ($record) => [
+ 'user_id' => $actor->id, 'opportunity_id' => $record->id, 'observed_at' => now(),
+ ])->all());
+ });
+ }
+ if (in_array('tenders', $sources, true)) {
+ app(Procurement::class)->publicQuery()->select('v.id as version_id')->chunkById(500, function ($records) use ($actor): void {
+ DB::table('investment_tender_alert_seen')->insertOrIgnore($records->map(fn ($record) => [
+ 'user_id' => $actor->id, 'tender_version_id' => $record->version_id, 'observed_at' => now(),
+ ])->all());
+ }, 'v.id', 'version_id');
+ }
+ if (in_array('funding', $sources, true)) {
+ app(FundingProgrammes::class)->publicQuery()->select('v.id as version_id')->chunkById(500, function ($records) use ($actor): void {
+ DB::table('investment_funding_alert_seen')->insertOrIgnore($records->map(fn ($record) => [
+ 'user_id' => $actor->id, 'funding_version_id' => $record->version_id, 'observed_at' => now(),
+ ])->all());
+ }, 'v.id', 'version_id');
+ }
+ }
+ $next = ! $data['enabled'] ? null : (($same || ($row && $before['enabled'] && $before['frequency'] === $data['frequency'])) ? $row->next_run_at : $this->nextRun($data['frequency']));
+ $id = $row->id ?? (string) Str::uuid();
+ DB::table('investment_alert_preferences')->updateOrInsert(['user_id' => $actor->id], [
+ 'id' => $id,
+ 'version' => $before['version'] + 1, 'enabled' => (bool) $data['enabled'], 'frequency' => $data['frequency'], 'channel' => 'in_app',
+ 'criteria' => Crypt::encryptString(json_encode($criteria, JSON_THROW_ON_ERROR)),
+ 'consented_at' => $data['enabled'] ? now() : ($row->consented_at ?? null), 'next_run_at' => $next,
+ 'created_at' => $row->created_at ?? now(), 'updated_at' => now(),
+ ...(Schema::hasColumn('investment_alert_preferences', 'sources') ? ['sources' => json_encode($sources, JSON_THROW_ON_ERROR)] : []),
+ ]);
+ DB::table('audit_events')->insert(['source_system' => 'investment-alerts', 'entity_type' => 'investment_alert_preferences',
+ 'entity_id' => $id, 'actor_user_id' => $actor->id, 'action' => $data['enabled'] ? 'preferences_saved' : 'preferences_cancelled',
+ 'data_classification' => 'restricted', 'before_data' => json_encode(['version' => $before['version'], 'enabled' => $before['enabled']], JSON_THROW_ON_ERROR),
+ 'after_data' => json_encode(['version' => $before['version'] + 1, 'enabled' => (bool) $data['enabled'], 'frequency' => $data['frequency'],
+ 'channel' => 'in_app', 'sources' => $sources, 'criteria_sha256' => hash('sha256', json_encode($criteria, JSON_THROW_ON_ERROR))], JSON_THROW_ON_ERROR)]);
+
+ return $this->preferences($actor->id);
+ });
+ }
+
+ private function nextRun(string $frequency): CarbonImmutable
+ {
+ return match ($frequency) {
+ 'daily' => now()->addDay(), 'weekly' => now()->addWeek(), default => now(),
+ };
+ }
+
+ public function dispatchDue(): int
+ {
+ if (! $this->installed()) {
+ return 0;
+ }
+ $count = 0;
+ DB::table('investment_alert_preferences')->where('enabled', true)->where('next_run_at', '<=', now())
+ ->whereIn('user_id', DB::table('users')->whereNotNull('email_verified_at')->select('id'))
+ ->orderBy('user_id')->chunkById(100, function ($preferences) use (&$count): void {
+ foreach ($preferences as $preference) {
+ $count += DB::transaction(function () use ($preference): int {
+ $row = DB::table('investment_alert_preferences')->where('user_id', $preference->user_id)->lockForUpdate()->first();
+ if (! $row || ! $row->enabled || ! $row->next_run_at || CarbonImmutable::parse($row->next_run_at)->isFuture()) {
+ return 0;
+ }
+ $criteria = json_decode(Crypt::decryptString($row->criteria), true, 512, JSON_THROW_ON_ERROR);
+ $sources = isset($row->sources) ? json_decode($row->sources, true, 512, JSON_THROW_ON_ERROR) : ['opportunities'];
+ $delivered = 0;
+ $more = false;
+ if (in_array('opportunities', $sources, true) && $this->criteriaAvailable($criteria, 'opportunities')) {
+ $records = app(InvestmentCatalogue::class)->query(Arr::except($criteria, ['tender_regime', 'funding_certainty', 'funding_state']))->whereNotExists(fn ($seen) => $seen->selectRaw('1')
+ ->from('investment_alert_seen')->where('user_id', $row->user_id)->whereColumn('opportunity_id', 'opportunities.id'))
+ ->orderBy('opportunities.id')->limit(201)->get();
+ foreach ($records->take(200) as $record) {
+ $notification = app(InvestmentWorkspace::class)->notifyOpportunity((int) $row->user_id, $record, (int) $row->version, $criteria);
+ DB::table('investment_alert_seen')->insert(['user_id' => $row->user_id, 'opportunity_id' => $record->id, 'notification_id' => $notification, 'observed_at' => now()]);
+ }
+ $delivered += min(200, $records->count());
+ $more = $records->count() > 200;
+ }
+ if (in_array('tenders', $sources, true) && $this->tendersAvailable() && $this->criteriaAvailable($criteria, 'tenders')) {
+ $filters = array_filter(['territory' => $criteria['province_id'] ?? null, 'regime' => $criteria['tender_regime'] ?? null], fn ($value) => $value !== null);
+ if (isset($criteria['sector'])) {
+ $filters['sector_ids'] = Sector::whereIn('slug', SectorOrganization::slugs($criteria['sector']))->pluck('id')->all();
+ }
+ $records = app(Procurement::class)->publicQuery($filters)->whereNotExists(fn ($seen) => $seen->selectRaw('1')
+ ->from('investment_tender_alert_seen')->where('user_id', $row->user_id)->whereColumn('tender_version_id', 'v.id'))
+ ->select('t.id as tender_id', 'v.id as version_id', 'v.version', 'v.act', 'v.payload', 'v.published_at')->orderBy('v.id')->limit(201)->get();
+ foreach ($records->take(200) as $record) {
+ $notification = app(InvestmentWorkspace::class)->notifyTender((int) $row->user_id, $record, (int) $row->version, $criteria);
+ DB::table('investment_tender_alert_seen')->insert(['user_id' => $row->user_id, 'tender_version_id' => $record->version_id, 'notification_id' => $notification, 'observed_at' => now()]);
+ }
+ $delivered += min(200, $records->count());
+ $more = $more || $records->count() > 200;
+ }
+ if (in_array('funding', $sources, true) && $this->fundingAvailable() && $this->criteriaAvailable($criteria, 'funding')) {
+ $filters = $this->fundingFilters($criteria);
+ $records = app(FundingProgrammes::class)->catalogueQuery($filters)->whereNotExists(fn ($seen) => $seen->selectRaw('1')
+ ->from('investment_funding_alert_seen')->where('user_id', $row->user_id)->whereColumn('funding_version_id', 'v.id'))
+ ->select('p.id as programme_id', 'v.id as version_id', 'v.version', 'v.payload', 'v.published_at')->orderBy('v.id')->limit(201)->get();
+ foreach ($records->take(200) as $record) {
+ $notification = app(InvestmentWorkspace::class)->notifyFunding((int) $row->user_id, $record, (int) $row->version, $criteria, $filters);
+ DB::table('investment_funding_alert_seen')->insert(['user_id' => $row->user_id, 'funding_version_id' => $record->version_id, 'notification_id' => $notification, 'observed_at' => now()]);
+ }
+ $delivered += min(200, $records->count());
+ $more = $more || $records->count() > 200;
+ }
+ $next = $more ? now() : ($row->frequency === 'as_available' ? now()->addMinutes(5) : $this->nextRun($row->frequency));
+ DB::table('investment_alert_preferences')->where('user_id', $row->user_id)->update(['next_run_at' => $next]);
+
+ return $delivered;
+ });
+ }
+ }, 'user_id');
+
+ return $count;
+ }
+}
diff --git a/app/Services/InvestmentWorkspace.php b/app/Services/InvestmentWorkspace.php
index a7132741..08394c7d 100644
--- a/app/Services/InvestmentWorkspace.php
+++ b/app/Services/InvestmentWorkspace.php
@@ -4,12 +4,68 @@ namespace App\Services;
use App\Models\InvestmentSpecificNeed;
use App\Models\InvestmentSubmission;
+use App\Models\Opportunity;
+use Carbon\CarbonImmutable;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class InvestmentWorkspace
{
+ /** @param array $criteria
+ * @param array $filters */
+ public function notifyFunding(int $userId, \stdClass $record, int $version, array $criteria, array $filters): string
+ {
+ $public = json_decode($record->payload, true, 512, JSON_THROW_ON_ERROR);
+ $event = 'public-funding-version:'.$record->version_id;
+ $id = (string) Str::uuid();
+ $windows = [];
+ foreach ($public['windows'] as $window) {
+ $windows[] = ['title' => $window['title'], 'state' => app(FundingProgrammes::class)->windowState($window), 'end_on' => $window['end_on'] ?? null];
+ }
+ DB::table('investment_notifications')->insertOrIgnore(['id' => $id, 'user_id' => $userId, 'submission_id' => null,
+ 'funding_version_id' => $record->version_id, 'kind' => 'funding_match', 'event_key' => $event,
+ 'payload' => Crypt::encryptString(json_encode(['title' => $public['title'], 'programme_id' => $record->programme_id,
+ 'publication_version' => (int) $record->version, 'source' => 'Catálogo público de fundos e apoios do InvesteMoz',
+ 'published_at' => CarbonImmutable::parse($record->published_at)->toIso8601String(), 'source_url' => $public['source_url'],
+ 'source_reference' => $public['source_reference'], 'source_checked_on' => $public['source_checked_on'], 'window_states' => $windows,
+ 'scope_explanation' => app(FundingProgrammes::class)->filterExplanation(['payload' => $public], $filters),
+ 'preference_version' => $version, 'criteria' => $criteria], JSON_THROW_ON_ERROR)), 'created_at' => now()]);
+
+ return DB::table('investment_notifications')->where('user_id', $userId)->where('event_key', $event)->value('id');
+ }
+
+ /** @param array $criteria */
+ public function notifyTender(int $userId, \stdClass $record, int $version, array $criteria): string
+ {
+ $public = json_decode($record->payload, true, 512, JSON_THROW_ON_ERROR);
+ $event = 'public-tender-version:'.$record->version_id;
+ $id = (string) Str::uuid();
+ DB::table('investment_notifications')->insertOrIgnore(['id' => $id, 'user_id' => $userId, 'submission_id' => null,
+ 'tender_version_id' => $record->version_id, 'kind' => 'tender_match', 'event_key' => $event,
+ 'payload' => Crypt::encryptString(json_encode(['title' => $public['title'], 'reference' => $public['reference'],
+ 'tender_id' => $record->tender_id, 'publication_version' => (int) $record->version, 'act' => $record->act,
+ 'source' => 'Catálogo público de concursos do InvesteMoz', 'published_at' => CarbonImmutable::parse($record->published_at)->toIso8601String(),
+ 'origin_published_at' => $public['origin_published_at'] ?? null, 'preference_version' => $version,
+ 'criteria' => $criteria], JSON_THROW_ON_ERROR)), 'created_at' => now()]);
+
+ return DB::table('investment_notifications')->where('user_id', $userId)->where('event_key', $event)->value('id');
+ }
+
+ /** @param array $criteria */
+ public function notifyOpportunity(int $userId, Opportunity $opportunity, int $version, array $criteria): string
+ {
+ $event = 'public-opportunity:'.$opportunity->id;
+ $id = (string) Str::uuid();
+ DB::table('investment_notifications')->insertOrIgnore(['id' => $id, 'user_id' => $userId, 'submission_id' => null,
+ 'opportunity_id' => $opportunity->id, 'kind' => 'opportunity_match', 'event_key' => $event,
+ 'payload' => Crypt::encryptString(json_encode(['title' => $opportunity->title, 'slug' => $opportunity->slug,
+ 'source' => 'Catálogo público do InvesteMoz', 'published_at' => $opportunity->published_at?->toIso8601String(),
+ 'preference_version' => $version, 'criteria' => $criteria], JSON_THROW_ON_ERROR)), 'created_at' => now()]);
+
+ return DB::table('investment_notifications')->where('user_id', $userId)->where('event_key', $event)->value('id');
+ }
+
/** @param array $payload */
public function notify(int $userId, InvestmentSubmission $submission, string $kind, string $eventKey, array $payload = []): void
{
diff --git a/app/Services/OpportunityTextSearch.php b/app/Services/OpportunityTextSearch.php
new file mode 100644
index 00000000..d145547a
--- /dev/null
+++ b/app/Services/OpportunityTextSearch.php
@@ -0,0 +1,88 @@
+ */
+ public function terms(string $text): array
+ {
+ $parts = preg_split('/[\s,;]+/u', Str::lower(Str::ascii(trim($text)))) ?: [];
+
+ return array_values(array_unique(array_filter(array_map(fn ($part) => trim($part, "\"'"), $parts),
+ fn ($part) => $part !== '' && ! in_array($part, self::STOP_WORDS, true))));
+ }
+
+ /** A secondary query keeps the subject/location; it never relabels processing as cultivation. */
+ public function relatedQuery(string $text): ?string
+ {
+ $terms = $this->terms($text);
+ $subject = array_values(array_diff($terms, self::CULTIVATION));
+
+ return $subject !== [] && count($subject) < count($terms) ? implode(' ', $subject) : null;
+ }
+
+ /** @param literal-string $column
+ * @return literal-string */
+ private function normalized(string $column): string
+ {
+ return "translate(lower(COALESCE($column, '')), 'áàâãäåéèêëíìîïóòôõöúùûüçñýÿ', 'aaaaaaeeeeiiiiooooouuuucnyy')";
+ }
+
+ /** @param Builder $query */
+ public function constrain(Builder $query, string $text): void
+ {
+ $terms = $this->terms($text);
+ if ($terms === []) {
+ $query->whereRaw('false');
+
+ return;
+ }
+ foreach ($terms as $term) {
+ $variants = in_array($term, self::CULTIVATION, true) ? ['plantio', 'plantacao', 'plantacoes', 'cultiv', 'semead', 'semeio'] : [$term];
+ $patterns = array_map(fn ($value) => '%'.addcslashes($value, '%_\\').'%', $variants);
+ $geography = app(InvestmentGeography::class);
+ $locations = $geography->publicReferences()->where(function ($names) use ($patterns): void {
+ foreach ($patterns as $pattern) {
+ $names->orWhereRaw($this->normalized('name').' LIKE ?', [$pattern]);
+ }
+ })->pluck('id');
+ $territories = [];
+ foreach ($locations as $location) {
+ $territories = array_merge($territories, $geography->descendants((string) $location));
+ }
+ $territories = array_values(array_unique($territories));
+ $query->where(function ($matches) use ($patterns, $territories): void {
+ foreach ($patterns as $pattern) {
+ foreach (['opportunities.title', 'opportunities.description', 'opportunities.summary', 'opportunities.reference', 'opportunities.province', 'opportunities.district'] as $column) {
+ $matches->orWhereRaw($this->normalized($column).' LIKE ?', [$pattern]);
+ }
+ $matches->orWhereHas('sector', fn ($sector) => $sector->whereRaw($this->normalized('name').' LIKE ?', [$pattern])
+ ->orWhereRaw($this->normalized('slug').' LIKE ?', [$pattern]));
+ $matches->orWhereExists(fn ($dossier) => $dossier->selectRaw('1')->from('investment_dossiers as searchable_dossier')
+ ->whereIn('searchable_dossier.id', InvestmentPortfolioController::visible()->reorder()->select('investment_dossiers.id'))
+ ->where(fn ($value) => $value->whereRaw($this->normalized('searchable_dossier.title').' LIKE ?', [$pattern])
+ ->orWhereRaw($this->normalized('searchable_dossier.content::text').' LIKE ?', [$pattern]))
+ ->where(fn ($relation) => $relation
+ ->whereExists(fn ($project) => $project->selectRaw('1')->from('opportunity_projects as search_project')->whereColumn('search_project.opportunity_id', 'opportunities.id')->whereColumn('search_project.project_id', 'searchable_dossier.project_id'))
+ ->orWhereExists(fn ($cluster) => $cluster->selectRaw('1')->from('opportunity_clusters as search_cluster')->whereColumn('search_cluster.opportunity_id', 'opportunities.id')->whereColumn('search_cluster.cluster_id', 'searchable_dossier.cluster_id'))));
+ }
+ if ($territories !== []) {
+ $matches->orWhereIn('opportunities.primary_territory_id', $territories)
+ ->orWhereExists(fn ($linked) => $linked->selectRaw('1')->from('opportunity_locations as search_link')
+ ->whereColumn('search_link.opportunity_id', 'opportunities.id')->whereIn('search_link.geo_location_id', $territories));
+ }
+ });
+ }
+ }
+}
diff --git a/app/Services/Procurement.php b/app/Services/Procurement.php
index 98dad432..e17513a9 100644
--- a/app/Services/Procurement.php
+++ b/app/Services/Procurement.php
@@ -16,6 +16,43 @@ use Illuminate\Validation\ValidationException;
/** Publication of notices; never receives bids or changes the linked investment. */
final class Procurement
{
+ private const STATE_SQL = "CASE WHEN v.payload->>'procedural_state' IN ('cancelled','results') THEN v.payload->>'procedural_state' WHEN ((v.payload->>'deadline')::timestamp AT TIME ZONE (v.payload->>'timezone'))<=CURRENT_TIMESTAMP THEN 'deadline_ended' WHEN v.payload->>'extended'='true' THEN 'extended' ELSE 'open' END";
+
+ /** @param array $filters */
+ public function publicQuery(array $filters = []): Builder
+ {
+ abort_unless($this->available(), 404);
+ $query = DB::table('portal_tenders as t')->join('portal_tender_versions as v', fn ($q) => $q->on('v.id', '=', 't.published_version_id')->on('v.tender_id', '=', 't.id'))->whereNotNull('v.published_at');
+ if (! empty($filters['q'])) {
+ $query->where(fn ($q) => $q->whereRaw("v.payload->>'title' ILIKE ?", ['%'.$filters['q'].'%'])->orWhereRaw("v.payload->>'object' ILIKE ?", ['%'.$filters['q'].'%'])->orWhereRaw("v.payload->>'reference' ILIKE ?", ['%'.$filters['q'].'%']));
+ }
+ foreach (['entity' => 'organization_id', 'sector' => 'sector_id', 'modality' => 'modality', 'financier' => 'financier', 'regime' => 'regime'] as $filter => $field) {
+ if (! empty($filters[$filter])) {
+ $query->whereRaw('v.payload->>? = ?', [$field, (string) $filters[$filter]]);
+ }
+ }
+ if (isset($filters['sector_ids'])) {
+ $query->whereIn(DB::raw("v.payload->>'sector_id'"), array_map('strval', $filters['sector_ids']));
+ }
+ if (! empty($filters['territory'])) {
+ $query->whereRaw("v.payload->>'territory_id' IN (WITH RECURSIVE scope(id,depth) AS (SELECT id,0 FROM geo_locations WHERE id=? AND deleted_at IS NULL UNION ALL SELECT c.id,s.depth+1 FROM geo_locations c JOIN scope s ON c.parent_id=s.id WHERE c.deleted_at IS NULL AND s.depth<4) SELECT id::text FROM scope)", [$filters['territory']]);
+ }
+ if (! empty($filters['state'])) {
+ $query->whereRaw(self::STATE_SQL.' = ?', [$filters['state']]);
+ }
+ if (! empty($filters['deadline_before'])) {
+ $query->whereRaw("left(v.payload->>'deadline',10)<=?", [$filters['deadline_before']]);
+ }
+
+ return $query;
+ }
+
+ /** Published historical acts remain readable while their tender remains public. */
+ public function readableVersions(): Builder
+ {
+ return DB::table('portal_tender_versions')->whereNotNull('published_at')->whereIn('tender_id', $this->publicQuery()->select('t.id'));
+ }
+
public const TEXT = ['title', 'reference', 'responsible_unit', 'modality', 'object', 'object_kind', 'quantities', 'financier', 'instrument', 'edition', 'rule_source', 'financing_agreement', 'eligibility', 'requirements', 'proposal_validity', 'guarantee_status', 'guarantees', 'delivery_channel', 'delivery_address', 'delivery_url', 'public_contact', 'dissemination', 'origin_url', 'origin_published_at', 'clarifications_at', 'deadline', 'opening_at', 'timezone', 'minimum_source', 'minimum_edition', 'minimum_modality', 'minimum_day_basis', 'result', 'internal_notes', 'public_reason', 'minimum_working_days', 'minimum_holidays', 'minimum_calendar_source'];
public function available(): bool
@@ -25,12 +62,7 @@ final class Procurement
public function access(?User $actor): bool
{
- if (! $actor || ! $actor->hasVerifiedEmail()) {
- return false;
- }
- $docs = app(DocumentManagementAccess::class);
-
- return ! app(PortalProfileAccess::class)->has($actor, 'auditor') && ($docs->full($actor) || $docs->editorial($actor));
+ return app(DocumentManagementAccess::class)->catalogueEditor($actor);
}
public function guard(?User $actor): void
diff --git a/app/Services/VirtualDesk.php b/app/Services/VirtualDesk.php
index f05cb51f..7b9c48a0 100644
--- a/app/Services/VirtualDesk.php
+++ b/app/Services/VirtualDesk.php
@@ -187,8 +187,12 @@ class VirtualDesk
}
$id = (string) Str::uuid();
$base = $this->decode($case->payload);
- $payload = ['title' => $case->title, 'description' => $base['investment']['objective'] ?? '', 'regime' => 'unknown'];
- if (config('investor-path.enabled') && $case->simulation_id && (int) $case->user_id === $actor->id) {
+ $serviceFields = json_decode($service->definition, true)['fields'];
+ $payload = Arr::only(['title' => $case->title, 'description' => $base['investment']['objective'] ?? ''], array_keys($serviceFields));
+ if (isset($serviceFields['regime']['options']['unknown'])) {
+ $payload['regime'] = 'unknown';
+ }
+ if (isset($serviceFields['description']) && config('investor-path.enabled') && $case->simulation_id && (int) $case->user_id === $actor->id) {
$draftRequest = Request::create('/');
$draftRequest->setUserResolver(fn () => $actor);
$draft = app(SimulationFormDrafts::class)->find($case->simulation_id, $draftRequest);
@@ -197,7 +201,7 @@ class VirtualDesk
$this->event($case, $actor, 'request_prefill_prepared', ['draft_id' => $draft->id, 'draft_version' => $draft->version_no, 'snapshot_sha256' => $draft->snapshot_sha256, 'fields' => ['title', 'description']]);
}
$context = app(InvestorContext::class)->state($case);
- if (count($context['opportunity_choices'] ?? []) > 1 && ! $opportunity) {
+ if (isset($serviceFields['description']) && count($context['opportunity_choices'] ?? []) > 1 && ! $opportunity) {
$payload['description'] = '';
}
$mapped = app(InvestorContext::class)->prefill($context, $opportunity)['desk'];
@@ -205,9 +209,9 @@ class VirtualDesk
$payload['context_opportunity'] = $opportunity;
}
$payload = app(InvestmentConsumerScope::class)->bind($actor, $caseId, $payload);
- $serviceFields = json_decode($service->definition, true)['fields'];
foreach (['territory_id' => 'territory_id', 'location_source' => 'location_source', 'title' => 'title', 'description' => 'description', 'sector' => 'sector', 'province_id' => 'province_id', 'district_id' => 'district_id', 'admin_post_id' => 'admin_post_id', 'locality_id' => 'locality_id'] as $field => $source) {
- if (isset($serviceFields[$field],$mapped[$source]) && (empty($payload[$field]) || in_array($field, ['title', 'description'], true) && $context['revision'] > 0)) {
+ if (isset($serviceFields[$field],$mapped[$source]) && (empty($payload[$field]) || in_array($field, ['title', 'description'], true) && $context['revision'] > 0)
+ && Validator::make(['value' => $mapped[$source]], ['value' => $this->fieldRules($serviceFields[$field], false)])->passes()) {
$payload[$field] = $mapped[$source];
}
}
@@ -272,25 +276,22 @@ class VirtualDesk
'payload.country' => ['nullable', 'string', 'max:100', app(CountryCatalogue::class)->legacyCountryRule()],
'payload.declared_origin_country_code' => ['nullable', 'string', app(CountryCatalogue::class)->rule()]];
foreach ($definition['fields'] as $key => $field) {
- $active = ! isset($field['when']) || ($payload[$field['when']['field']] ?? null) === $field['when']['equals'];
+ $active = $this->fieldApplies((string) $key, $definition['fields'], $payload);
$required = $submitting && ($field['required'] ?? false) && $active;
- $rule = [$required ? 'required' : 'nullable'];
- $rule = [...$rule, ...match ($field['type']) {
- 'number' => ['numeric', 'decimal:0,2', 'min:'.($field['min'] ?? 0), 'max:999999999999'], 'date' => ['date_format:Y-m-d'],
- 'select' => [Rule::in(array_keys($field['options']))], 'territory' => ['uuid'],
- default => ['string', 'max:'.($field['type'] === 'textarea' ? 15000 : 1000)],
- }];
- $rules['payload.'.$key] = $rule;
+ $rules['payload.'.$key] = $this->fieldRules($field, $required);
}
$validated = Validator::make(['payload' => $payload], $rules)->validate()['payload'];
foreach ($definition['fields'] as $key => $field) {
+ if ($field['type'] === 'select' && isset($validated[$key])) {
+ $validated[$key] = (string) $validated[$key];
+ }
if ($field['type'] === 'territory' && ! empty($validated[$key])) {
if (! app(InvestmentGeography::class)->publicReferences()->where('id', $validated[$key])->exists()) {
throw ValidationException::withMessages(['payload.'.$key => 'Seleccione uma localização disponível no cadastro territorial.']);
}
}
}
- if ($validated['territory_id'] ?? null) {
+ if (($validated['territory_id'] ?? null) && $this->fieldApplies('territory_id', $definition['fields'], $validated)) {
if ($submitting && trim($validated['location_source'] ?? '') === '') {
throw ValidationException::withMessages(['payload.location_source' => 'Indique a fonte da localização.']);
}
@@ -299,11 +300,56 @@ class VirtualDesk
return $validated;
}
+ /** @param array $field
+ * @return list */
+ private function fieldRules(array $field, bool $required): array
+ {
+ return [$required ? 'required' : 'nullable', ...match ($field['type']) {
+ 'number' => ['numeric', 'decimal:0,2', 'min:'.($field['min'] ?? 0), 'max:999999999999'], 'date' => ['date_format:Y-m-d'],
+ 'select' => [Rule::in(array_keys($field['options']))], 'territory' => ['uuid'],
+ 'email' => ['string', 'email', 'max:1000'], 'url' => ['string', 'url:http,https', 'max:1000'],
+ default => ['string', 'max:'.($field['type'] === 'textarea' ? 15000 : 1000)],
+ }];
+ }
+
+ /** @param array> $fields
+ * @param array $payload
+ * @param array $ancestors */
+ private function fieldApplies(string $key, array $fields, array $payload, array $ancestors = []): bool
+ {
+ $field = $fields[$key] ?? null;
+ if (! $field || isset($ancestors[$key])) {
+ return false;
+ }
+ if (! isset($field['when'])) {
+ return true;
+ }
+ $parent = $field['when']['field'];
+ $answer = $payload[$parent] ?? null;
+ if (! is_scalar($answer) || (string) $answer !== $field['when']['equals']) {
+ return false;
+ }
+ $ancestors[$key] = true;
+
+ return $this->fieldApplies($parent, $fields, $payload, $ancestors);
+ }
+
/** @param array $payload
+ * @param array $definition
+ * @return array> */
+ public function applicableFields(array $payload, array $definition): array
+ {
+ return array_filter($definition['fields'], fn ($key) => $this->fieldApplies((string) $key, $definition['fields'], $payload), ARRAY_FILTER_USE_KEY);
+ }
+
+ /** @param array $payload
+ * @param array $definition
* @return list> */
- public function findings(array $payload): array
+ public function findings(array $payload, array $definition): array
{
$findings = [];
+ $fields = $this->applicableFields($payload, $definition);
+ $financeApplies = isset($fields['investment_amount'], $fields['own_finance'], $fields['other_finance']);
$amounts = array_map(function ($key) use ($payload) {
$value = (string) ($payload[$key] ?? '');
if (! preg_match('/^\d{1,12}(?:\.\d{1,2})?$/', $value)) {
@@ -313,13 +359,13 @@ class VirtualDesk
return (int) $whole * 100 + (int) str_pad($fraction, 2, '0');
}, ['investment_amount', 'own_finance', 'other_finance']);
- if (! in_array(null, $amounts, true) && $amounts[0] !== $amounts[1] + $amounts[2]) {
+ if ($financeApplies && ! in_array(null, $amounts, true) && $amounts[0] !== $amounts[1] + $amounts[2]) {
$findings[] = ['code' => 'finance_difference', 'severity' => 'error', 'field' => 'investment_amount', 'explanation' => 'A soma do financiamento difere do valor do investimento.', 'recommendation' => 'Confirme valores e moeda.', 'method' => 'deterministic', 'confidence' => null];
}
- if (in_array(null, $amounts, true)) {
+ if ($financeApplies && in_array(null, $amounts, true)) {
$findings[] = ['code' => 'finance_unknown', 'severity' => 'warning', 'field' => 'investment_amount', 'explanation' => 'A coerência do financiamento permanece indeterminada sem os três valores válidos na mesma moeda.', 'recommendation' => 'Complete as fontes de financiamento; valores ausentes não são zero.', 'method' => 'deterministic', 'confidence' => null];
}
- if (! ($payload['territory_id'] ?? null)) {
+ if (isset($fields['territory_id']) && ! ($payload['territory_id'] ?? null)) {
$findings[] = ['code' => 'location_unknown', 'severity' => 'warning', 'field' => 'territory_id', 'explanation' => 'Localização ainda não documentada.', 'recommendation' => 'Complete quando houver fonte.', 'method' => 'deterministic', 'confidence' => null];
}
$findings[] = ['code' => 'official_form_pending', 'severity' => 'warning', 'field' => null, 'explanation' => 'Adaptação digital do plano; não foi identificada uma versão oficial homologada do formulário APIEX no acervo.', 'recommendation' => 'A preparação e análise interna continuam disponíveis; confirme a versão exigida pela entidade para o ato oficial.', 'method' => 'documentary', 'confidence' => null];
@@ -364,7 +410,7 @@ class VirtualDesk
}
abort_if($submit && trim($data['reason'] ?? '') === '', 422, 'Justifique a correção.');
}
- $findings = $this->findings($payload);
+ $findings = $this->findings($payload, $this->definition($request));
if ($submit && array_filter($findings, fn ($f) => $f['severity'] === 'error')) {
throw ValidationException::withMessages(['payload.investment_amount' => $findings[0]['explanation']]);
}
diff --git a/database/data/funding-references.json b/database/data/funding-references.json
new file mode 100644
index 00000000..f6925b2c
--- /dev/null
+++ b/database/data/funding-references.json
@@ -0,0 +1,56 @@
+{
+ "format": "investmoz-funding-references-v1",
+ "references": {
+ "fdel": {
+ "edition": "fdel-br43-20250305-tete20251020-v1",
+ "provenance": [
+ { "url": "https://mpd.gov.mz/wp-content/uploads/2025/10/BR_43_I_SERIE_2025.pdf", "sha256": "0ea99c5f894760e3b715e377e87e9715fad9423e322e5753de1b9bb345c64753", "checked_on": "2026-11-02", "reference": "BR I Série n.º 43, 05/03/2025, pp. 157–160; Decreto n.º 4/2025 e Regulamento anexo" },
+ { "url": "https://cmct.gov.mz/fundo-de-desenvolvimento-economico-local-fdel/", "sha256": "c69c2c3883766aa6a238ae44d8ee3fc99570adca2f3e647e50df59fde2786403", "checked_on": "2026-11-02", "reference": "Aviso municipal FDEL, prazo 20/10/2025" }
+ ],
+ "draft": {
+ "title": "Fundo de Desenvolvimento Económico Local — FDEL",
+ "kind": "fund",
+ "summary": "Apoio reembolsável a iniciativas locais. Extracto informativo; consultar as condições completas. Não confirma candidaturas actualmente abertas.",
+ "manager_name": "Gestão distrital/autárquica; tutelas previstas no Decreto",
+ "source_url": "https://mpd.gov.mz/wp-content/uploads/2025/10/BR_43_I_SERIE_2025.pdf",
+ "source_reference": "Decreto 4/2025; BR I/43, 05/03/2025, pp.157–160; Regulamento: arts.2,13,14,18",
+ "source_checked_on": "2026-11-02",
+ "source_published_on": "2025-03-05",
+ "source_status": "identified",
+ "coverage": "national",
+ "coverage_text": "Nacional; cada chamada tem condições próprias.",
+ "territory_ids": [],
+ "sectors_scope": "unknown",
+ "sectors_text": "Áreas do art.13; cadastro sectorial por associar.",
+ "sector_ids": [],
+ "resource_ids": [],
+ "criteria": [
+ { "code": "nationality-individual", "question": "Tem nacionalidade moçambicana?", "applies_to": "individual", "expected": "yes", "source_reference": "Decreto n.º 4/2025, art. 3", "explanation": "Condição declarada; não substitui a apreciação competente." },
+ { "code": "economic-viability", "question": "O projecto apresenta elementos de viabilidade económica?", "applies_to": "all", "expected": "yes", "source_reference": "Decreto n.º 4/2025, art. 3; Regulamento, art. 13", "explanation": "A avaliação do projecto cabe às entidades competentes." }
+ ],
+ "windows": [
+ {
+ "code": "tete-municipal-2025",
+ "title": "Cidade de Tete — chamada municipal de 2025",
+ "mode": "dated",
+ "end_on": "2025-10-20",
+ "coverage": "unknown",
+ "coverage_text": "Âmbito municipal da Cidade de Tete; referência cartográfica por associar. Não corresponde a toda a província.",
+ "territory_ids": [],
+ "source_url": "https://cmct.gov.mz/fundo-de-desenvolvimento-economico-local-fdel/",
+ "source_reference": "Aviso municipal FDEL, prazo 20/10/2025",
+ "checked_on": "2026-11-02",
+ "application_url": "https://cmct.gov.mz/anexo-5-plano-de-negocio/",
+ "criteria": [
+ { "code": "tete-nuit", "question": "Dispõe de NUIT?", "applies_to": "all", "expected": "yes", "source_reference": "Aviso municipal, Requisitos", "explanation": "Documentação indicada para esta chamada histórica." },
+ { "code": "tete-identity", "question": "Dispõe de cópia do BI?", "applies_to": "individual", "expected": "yes", "source_reference": "Aviso municipal, Candidatos individuais", "explanation": "Aplica-se a pessoas singulares nesta chamada." },
+ { "code": "tete-registration", "question": "A entidade dispõe de comprovativo de registo legal?", "applies_to": "entity", "expected": "yes", "source_reference": "Aviso municipal, Entidades", "explanation": "Aplica-se às entidades indicadas no aviso." },
+ { "code": "tete-idoneity", "question": "Dispõe de atestado de idoneidade emitido pela sede do bairro?", "applies_to": "individual", "expected": "yes", "source_reference": "Aviso municipal, Candidatos individuais", "explanation": "Documento indicado no aviso." },
+ { "code": "tete-national-entity", "question": "A entidade é constituída por cidadãos nacionais?", "applies_to": "entity", "expected": "yes", "source_reference": "Aviso municipal, Entidades", "explanation": "Condição específica desta chamada." }
+ ]
+ }
+ ]
+ }
+ }
+ }
+}
diff --git a/database/migrations/2026_11_02_190000_investment_opportunity_alerts.php b/database/migrations/2026_11_02_190000_investment_opportunity_alerts.php
new file mode 100644
index 00000000..97e60eed
--- /dev/null
+++ b/database/migrations/2026_11_02_190000_investment_opportunity_alerts.php
@@ -0,0 +1,54 @@
+uuid('submission_id')->nullable()->change();
+ $table->foreignId('opportunity_id')->nullable()->constrained('opportunities')->restrictOnDelete();
+ });
+ DB::statement('ALTER TABLE investment_notifications ADD CONSTRAINT investment_notification_origin CHECK ((submission_id IS NOT NULL)::integer + (opportunity_id IS NOT NULL)::integer = 1)');
+ Schema::create('investment_alert_preferences', function (Blueprint $table) {
+ $table->uuid('id')->unique();
+ $table->foreignId('user_id')->primary()->constrained('users')->restrictOnDelete();
+ $table->unsignedInteger('version');
+ $table->boolean('enabled')->default(false);
+ $table->string('frequency');
+ $table->string('channel')->default('in_app');
+ $table->text('criteria');
+ $table->timestampTz('consented_at')->nullable();
+ $table->timestampTz('next_run_at')->nullable();
+ $table->timestampsTz();
+ $table->index(['enabled', 'next_run_at']);
+ });
+ DB::statement("ALTER TABLE investment_alert_preferences ADD CHECK (frequency IN ('as_available','daily','weekly')), ADD CHECK (channel = 'in_app'), ADD CHECK (NOT enabled OR consented_at IS NOT NULL)");
+ Schema::create('investment_alert_seen', function (Blueprint $table) {
+ $table->foreignId('user_id')->constrained('users')->restrictOnDelete();
+ $table->foreignId('opportunity_id')->constrained('opportunities')->restrictOnDelete();
+ $table->foreignUuid('notification_id')->nullable()->constrained('investment_notifications')->restrictOnDelete();
+ $table->timestampTz('observed_at')->useCurrent();
+ $table->primary(['user_id', 'opportunity_id']);
+ });
+ }
+
+ public function down(): void
+ {
+ if (DB::table('investment_alert_preferences')->exists() || DB::table('investment_alert_seen')->exists()
+ || DB::table('investment_notifications')->whereNotNull('opportunity_id')->exists()) {
+ throw new RuntimeException('Preserve alert preferences and notification history before rollback.');
+ }
+ Schema::drop('investment_alert_seen');
+ Schema::drop('investment_alert_preferences');
+ DB::statement('ALTER TABLE investment_notifications DROP CONSTRAINT investment_notification_origin');
+ Schema::table('investment_notifications', function (Blueprint $table) {
+ $table->dropConstrainedForeignId('opportunity_id');
+ $table->uuid('submission_id')->nullable(false)->change();
+ });
+ }
+};
diff --git a/database/migrations/2026_11_02_200000_investment_tender_alerts.php b/database/migrations/2026_11_02_200000_investment_tender_alerts.php
new file mode 100644
index 00000000..b1a22862
--- /dev/null
+++ b/database/migrations/2026_11_02_200000_investment_tender_alerts.php
@@ -0,0 +1,47 @@
+jsonb('sources')->default('["opportunities"]');
+ });
+ DB::statement("ALTER TABLE investment_alert_preferences ADD CONSTRAINT investment_alert_sources CHECK (jsonb_typeof(sources)='array' AND jsonb_array_length(sources) BETWEEN 1 AND 2 AND sources <@ '[\"opportunities\",\"tenders\"]'::jsonb)");
+ Schema::table('investment_notifications', function (Blueprint $table) {
+ $table->foreignUuid('tender_version_id')->nullable()->constrained('portal_tender_versions')->restrictOnDelete();
+ });
+ DB::statement('ALTER TABLE investment_notifications DROP CONSTRAINT investment_notification_origin');
+ DB::statement('ALTER TABLE investment_notifications ADD CONSTRAINT investment_notification_origin CHECK ((submission_id IS NOT NULL)::integer + (opportunity_id IS NOT NULL)::integer + (tender_version_id IS NOT NULL)::integer = 1)');
+ Schema::create('investment_tender_alert_seen', function (Blueprint $table) {
+ $table->foreignId('user_id')->constrained('users')->restrictOnDelete();
+ $table->foreignUuid('tender_version_id')->constrained('portal_tender_versions')->restrictOnDelete();
+ $table->foreignUuid('notification_id')->nullable()->constrained('investment_notifications')->restrictOnDelete();
+ $table->timestampTz('observed_at')->useCurrent();
+ $table->primary(['user_id', 'tender_version_id']);
+ });
+ }
+
+ public function down(): void
+ {
+ if (DB::table('investment_tender_alert_seen')->exists() || DB::table('investment_notifications')->whereNotNull('tender_version_id')->exists()
+ || DB::table('investment_alert_preferences')->whereJsonContains('sources', 'tenders')->exists()) {
+ throw new RuntimeException('Preserve tender alert preferences and notification history before rollback.');
+ }
+ Schema::drop('investment_tender_alert_seen');
+ DB::statement('ALTER TABLE investment_notifications DROP CONSTRAINT investment_notification_origin');
+ Schema::table('investment_notifications', function (Blueprint $table) {
+ $table->dropConstrainedForeignId('tender_version_id');
+ });
+ DB::statement('ALTER TABLE investment_notifications ADD CONSTRAINT investment_notification_origin CHECK ((submission_id IS NOT NULL)::integer + (opportunity_id IS NOT NULL)::integer = 1)');
+ DB::statement('ALTER TABLE investment_alert_preferences DROP CONSTRAINT investment_alert_sources');
+ Schema::table('investment_alert_preferences', function (Blueprint $table) {
+ $table->dropColumn('sources');
+ });
+ }
+};
diff --git a/database/migrations/2026_11_02_210000_funding_programme_catalogue.php b/database/migrations/2026_11_02_210000_funding_programme_catalogue.php
new file mode 100644
index 00000000..9fa4ec50
--- /dev/null
+++ b/database/migrations/2026_11_02_210000_funding_programme_catalogue.php
@@ -0,0 +1,50 @@
+uuid('id')->primary();
+ $table->string('code', 80)->unique();
+ $table->unsignedInteger('version')->default(1);
+ $table->jsonb('draft');
+ $table->uuid('published_version_id')->nullable();
+ $table->foreignId('created_by')->constrained('users')->restrictOnDelete();
+ $table->timestampsTz();
+ });
+ Schema::create('funding_programme_versions', function (Blueprint $table) {
+ $table->uuid('id')->primary();
+ $table->foreignUuid('programme_id')->constrained('funding_programmes')->restrictOnDelete();
+ $table->unsignedInteger('version');
+ $table->jsonb('payload');
+ $table->text('reason');
+ $table->foreignId('actor_id')->constrained('users')->restrictOnDelete();
+ $table->timestampTz('published_at')->useCurrent();
+ $table->unique(['programme_id', 'version']);
+ });
+ Schema::create('funding_programme_interests', function (Blueprint $table) {
+ $table->foreignId('user_id')->constrained('users')->restrictOnDelete();
+ $table->foreignUuid('programme_id')->constrained('funding_programmes')->restrictOnDelete();
+ $table->foreignUuid('version_id')->constrained('funding_programme_versions')->restrictOnDelete();
+ $table->timestampTz('saved_at')->useCurrent();
+ $table->timestampTz('removed_at')->nullable();
+ $table->primary(['user_id', 'programme_id']);
+ });
+ }
+
+ public function down(): void
+ {
+ if (DB::table('funding_programmes')->exists() || DB::table('funding_programme_versions')->exists() || DB::table('funding_programme_interests')->exists()) {
+ throw new RuntimeException('Preserve funding programmes, published versions and saved interests before rollback.');
+ }
+ Schema::drop('funding_programme_interests');
+ Schema::drop('funding_programme_versions');
+ Schema::drop('funding_programmes');
+ }
+};
diff --git a/database/migrations/2026_11_02_220000_investment_funding_alerts.php b/database/migrations/2026_11_02_220000_investment_funding_alerts.php
new file mode 100644
index 00000000..219df8a7
--- /dev/null
+++ b/database/migrations/2026_11_02_220000_investment_funding_alerts.php
@@ -0,0 +1,41 @@
+foreignUuid('funding_version_id')->nullable()->constrained('funding_programme_versions')->restrictOnDelete();
+ });
+ DB::statement('ALTER TABLE investment_notifications DROP CONSTRAINT investment_notification_origin');
+ DB::statement('ALTER TABLE investment_notifications ADD CONSTRAINT investment_notification_origin CHECK ((submission_id IS NOT NULL)::integer + (opportunity_id IS NOT NULL)::integer + (tender_version_id IS NOT NULL)::integer + (funding_version_id IS NOT NULL)::integer = 1)');
+ Schema::create('investment_funding_alert_seen', function (Blueprint $table) {
+ $table->foreignId('user_id')->constrained('users')->restrictOnDelete();
+ $table->foreignUuid('funding_version_id')->constrained('funding_programme_versions')->restrictOnDelete();
+ $table->foreignUuid('notification_id')->nullable()->constrained('investment_notifications')->restrictOnDelete();
+ $table->timestampTz('observed_at')->useCurrent();
+ $table->primary(['user_id', 'funding_version_id']);
+ });
+ }
+
+ public function down(): void
+ {
+ if (DB::table('investment_funding_alert_seen')->exists() || DB::table('investment_notifications')->whereNotNull('funding_version_id')->exists()
+ || DB::table('investment_alert_preferences')->whereJsonContains('sources', 'funding')->exists()) {
+ throw new RuntimeException('Preserve funding alert preferences and notification history before rollback.');
+ }
+ Schema::drop('investment_funding_alert_seen');
+ DB::statement('ALTER TABLE investment_notifications DROP CONSTRAINT investment_notification_origin');
+ Schema::table('investment_notifications', fn (Blueprint $table) => $table->dropConstrainedForeignId('funding_version_id'));
+ DB::statement('ALTER TABLE investment_notifications ADD CONSTRAINT investment_notification_origin CHECK ((submission_id IS NOT NULL)::integer + (opportunity_id IS NOT NULL)::integer + (tender_version_id IS NOT NULL)::integer = 1)');
+ DB::statement('ALTER TABLE investment_alert_preferences DROP CONSTRAINT investment_alert_sources');
+ DB::statement("ALTER TABLE investment_alert_preferences ADD CONSTRAINT investment_alert_sources CHECK (jsonb_typeof(sources)='array' AND jsonb_array_length(sources) BETWEEN 1 AND 2 AND sources <@ '[\"opportunities\",\"tenders\"]'::jsonb)");
+ }
+};
diff --git a/docs/investmoz/consolidated-review-matrix-2026-10-03.md b/docs/investmoz/consolidated-review-matrix-2026-10-03.md
index d661562d..ed47cf8f 100644
--- a/docs/investmoz/consolidated-review-matrix-2026-10-03.md
+++ b/docs/investmoz/consolidated-review-matrix-2026-10-03.md
@@ -1912,6 +1912,10 @@ Antes de executar cada recorte, reconciliar os requisitos e provas existentes pe
| ACT-20261029-15 | Dados abertos/API | APIs e fontes existentes | Inventariar interfaces oficiais, implementar actualização/rastreabilidade e documentar API dos dados divulgáveis. | Consulta de parceiro demonstrada, com contrato, versão, origem/data e permissões respeitadas. | Interfaces oficiais disponíveis e âmbito autorizado dos dados |
| ACT-20261029-16 | Móvel/offline/línguas | Interface móvel e provas anteriores | Conferir percursos em telemóvel/redes lentas; consulta offline seleccionada, sincronização e línguas nacionais prioritárias. | Percurso móvel utilizável; conteúdo seleccionado acessível sem rede; sincronização preserva edições; idiomas escolhidos demonstrados. | Definir línguas prioritárias e conteúdos offline; tradução e regras de sincronização |
+02/11/2026 — ACT-20261029-16, primeiro recorte local parcial: copia HTML de uma ficha publica de negocio seleccionada expressamente, legivel sem rede, com data de captura e origem. Tres testes dirigidos de fidelidade, exclusao de dados privados, proteccao de texto e descarga passaram. Sem instalacao ou prova visual; sincronizacao/edicao offline, cobertura geral e novas linguas continuam pendentes. Ver o manual existente; este recorte nao encerra o criterio amplo.
+
+Continuidade 02/11/2026: copia seleccionada tambem disponivel na ficha publica de oportunidade, com gerador comum, fonte limitada ao portal e projecao explicita sem dossier/anexos privados. Cinco testes offline dos dois formatos passaram; desconhecidos e precisao preservados. Nao encerra sincronizacao, verificacao movel ou idiomas; conferencia visual anterior interrompida pela politica de URLs da ferramenta, sem contorno.
+
## 29/10/2026 — auditoria fiscal InvesteMoz / SGF
Pedido expresso da Tempo: auditar ambos os sistemas e identificar como incorporar no SGF a componente fiscal do InvesteMoz. Auditoria local de código, contratos e recibos concluída; sem prova operacional nova. Relatório e critérios na [especificação fiscal existente do SGF](C:/laragon/www/sgf-tempo/docs/SERVICE_INVOICE_CALCULATION_SPEC.md#10-auditoria-de-incorporação-fiscal-investemoz--sgf--29102026), secção 10. Não altera os 16 recortes ACT-20261029 já registados nem os fechos aceites.
diff --git a/docs/investmoz/unification/local-validation-20261029.json b/docs/investmoz/unification/local-validation-20261029.json
index 8f2b112e..d46a55b9 100644
--- a/docs/investmoz/unification/local-validation-20261029.json
+++ b/docs/investmoz/unification/local-validation-20261029.json
@@ -1515,5 +1515,770 @@
"preservation": "Existing territorial queries, publication/permissions, geometry/source/date values and unlocated links retained. No backend/schema/active data changes, new factual imports or fiscal changes. Prior proofs reused.",
"visual_acceptance": "Pending team candidate browser session and recording for portfolio, opportunity and investment-zone map consumers.",
"installation": "Not triggered; main and active release unchanged."
+ },
+ "desk_forms_increment_20261102": {
+ "recorded_at": "2026-11-02T16:20:05.819Z",
+ "status": "local_qa_uncommitted_not_installed",
+ "requirement": "AUD-CHECKLIST-01",
+ "scope": [
+ "administrative readonly definition history",
+ "cascading applicability of nested questions",
+ "prefill respects version fields and option values"
+ ],
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 22,
+ "passed": 22,
+ "assertions": 416,
+ "duration_ms": 261036,
+ "log": "storage/logs/desk-forms-combined-feature-20261102.log",
+ "sha256": "557b6d77488f08213df4dc7959462979811bf8c87f0dd60d2a66dd516d976550"
+ },
+ "frontend": {
+ "tests": 4,
+ "passed": 4,
+ "command": "node --test tests/frontend/desk-request-conditions.test.mjs tests/frontend/desk-service-editor.test.mjs tests/frontend/desk-service-history.test.mjs",
+ "log": "storage/logs/desk-forms-frontend-20261102.log",
+ "sha256": "39ebbb60e749b473dc4f885b3a0d9264063dfc789c617692393401d5fc529aed"
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_and_format": "passed_without_warnings",
+ "build": "passed_with_existing_font_and_chunk_advisories"
+ },
+ "regressions_before": [
+ "storage/logs/desk-request-conditions-before-20261102.log",
+ "storage/logs/desk-schema-prefill-before-20261102.log"
+ ],
+ "qa": {
+ "host": "127.0.0.1",
+ "port": 55441,
+ "databases": [
+ "desk_editor_20261102_test",
+ "desk_prefill_20261102_test"
+ ],
+ "data": "synthetic_disposable",
+ "active_writes": 0
+ },
+ "limitations": [
+ "visual verification pending browser control limitation",
+ "not installed",
+ "other checklists and transverse configuration not proven",
+ "global fiscal integration not passed"
+ ],
+ "source_sha256": {
+ "app/Services/VirtualDesk.php": "efbe2873fdef1d940098cfae89528812b43ef035e15cf2335ffa66d33b25605d",
+ "app/Services/DeskServiceEditor.php": "f9665f562f6626873948b797174dead2e6cbd67ac20406b397ead5e96e828af9",
+ "app/Http/Controllers/DeskServiceEditorController.php": "d71cc6903a3c7bc95b3fe8f2c3dacb62d144567cfa00d1317c75f80e2d815382",
+ "resources/js/lib/desk-field-visibility.ts": "44a9f024b826b6e41e7d6fd39fb384ebe8d01bc1c42d9eadd9775c1cf64d5aed",
+ "resources/js/pages/desk/request.tsx": "cf3483b63a331cbcd829869d6ca310dc9331e91fa6df4035177e41ca02e2d7e6",
+ "resources/js/pages/desk/service-editor.tsx": "1b17962425ae395a62e36b890798c3dcc5bbfe8d4374b8392e31b6089e24ca4e",
+ "resources/js/components/desk-service-history.tsx": "0eb79aea6d90c8b6e02bd1ad5a98dfa11dcaad63d44e3cbc46f9974fff5479f6",
+ "tests/Feature/DeskServiceEditorTest.php": "f711c850fd2f2f54333593927a18d0e061dc64f702afba53c22d8cac43d7e26b",
+ "tests/Feature/DeskServiceSchemaPrefillTest.php": "e993086c87830a4ab98de0329fc762f4f7e0169cf4d77344fdbaf4d05c5c9a93",
+ "tests/frontend/desk-request-conditions.test.mjs": "fb7b7088e3bb47c6e431ee8b12acd23efeae32c3056b4e78164ac2f3e3e7d7ac",
+ "tests/frontend/desk-service-editor.test.mjs": "f88235311267301a73a7a46c7f5d3be671b78d02a6dab9a3b671dc28e3f89328",
+ "tests/frontend/desk-service-history.test.mjs": "fd0d560876d05b9b9a42c9f404e1cd6ff32e451712d029637fe51a103a56dffa"
+ }
+ },
+ "desk_analysis_scope_increment_20261102": {
+ "recorded_at": "2026-11-02T16:29:07.797Z",
+ "status": "local_qa_uncommitted_not_installed",
+ "requirements": [
+ "AUD-CHECKLIST-01",
+ "Tempo adaptive path 2026-10-23"
+ ],
+ "checks": [
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 25,
+ "passed": 25,
+ "assertions": 467,
+ "duration_ms": 146834,
+ "log": "storage/logs/desk-analysis-schema-combined-20261102.log",
+ "sha256": "c027a928e85d4ec01d55055460a9360e6551043b88bcf4bc01be21558906623f"
+ },
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 1,
+ "passed": 1,
+ "assertions": 6,
+ "duration_ms": 908,
+ "log": "storage/logs/desk-receipt-compatibility-20261102.log",
+ "sha256": "ca76c288728835716bd5e2fab8c3369ce68d88b6e36e5a03fd231193976ed9e3"
+ },
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 1,
+ "passed": 1,
+ "assertions": 5,
+ "duration_ms": 19429,
+ "log": "storage/logs/desk-location-applicability-20261102.log",
+ "sha256": "13f102f6352d9cab5852fc2fdd1cdbf43cd3efc9b9a8e3b77010d54cd3993934"
+ }
+ ],
+ "static_checks": {
+ "phpstan": "passed",
+ "pint": "passed",
+ "js_checks": "prior accepted evidence reused; no JavaScript delta"
+ },
+ "regressions_before": [
+ "storage/logs/desk-form-analysis-before-20261102.log",
+ "storage/logs/desk-location-schema-before-20261102.log"
+ ],
+ "invariants": [
+ "applicable finance contradictions still block",
+ "applicable location still requires source",
+ "hidden answers and submitted snapshot preserved",
+ "old version labels retained",
+ "TXT original and access controls unchanged",
+ "direct receipt rendering remains compatible",
+ "no active data writes"
+ ],
+ "limitations": [
+ "visual verification pending browser control limitation",
+ "not installed",
+ "other checklist consumers and fiscal integration still partial"
+ ],
+ "source_sha256": {
+ "app/Services/VirtualDesk.php": "88f5fb02a7d1d50a5b21c1906f98ecb51fc5d41422665ceae6c477dd29a7a748",
+ "app/Services/DeskServiceEditor.php": "783a64dbb746416e3ea24f71b8343b188a98817f4b58c7d908805ed92565efb5",
+ "app/Http/Controllers/VirtualDeskController.php": "c3d4f8a6be31c1478c9d08424f877ff18f3d1dd5dd94246d068601a900bdac4a",
+ "resources/views/desk/receipt.blade.php": "ee18970047050a92d55e3a39c62961b97fbcea9e9d323e35d2bb1d2ec9da6604",
+ "resources/views/desk/receipt-answers.blade.php": "e1aa2c3c6695942b76e1bc41510a74827d5759be862635c4c9aa7b9004f779b3",
+ "tests/Feature/DeskFormAnalysisScopeTest.php": "a20e58fadce7d4ecd65e0e59499e698ce834c22721284acca0ae690fbc8c8bd4",
+ "tests/Feature/DeskServiceEditorTest.php": "9591a94dc9384ebf61529444e90c28f05ef0fd3cf7d41b3577f3d1aa91cf8c25",
+ "tests/Feature/DeskReceiptCompatibilityTest.php": "7b353020e710c26bc0a830337d1795f0e5e871608f450b9725ae77f9e700cec9",
+ "tests/Feature/DeskLocationApplicabilityTest.php": "aa111a6aa63c70556f42f7253782c8e30ff20f5fe66d7158ebbcbe65f32b82f2"
+ }
+ },
+ "opportunity_alerts_increment_20261102": {
+ "recorded_at": "2026-11-02T16:51:35.750Z",
+ "status": "local_qa_uncommitted_not_installed",
+ "requirements": [
+ "ACT-20261029-11",
+ "MASTER-471012ab-0124"
+ ],
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 16,
+ "passed": 16,
+ "assertions": 253,
+ "duration_ms": 85835,
+ "log": "storage/logs/opportunity-alerts-verified-feature-20261102.log",
+ "sha256": "8d464dca578858c90e1c76049f039a6c15e513d2829578e6ae22a6646e3199a3"
+ },
+ "frontend": {
+ "tests": 2,
+ "passed": 2,
+ "log": "storage/logs/opportunity-alerts-frontend-20261102.log",
+ "sha256": "675fd6293fb7095d651e72c47ecf0d1020af3cf60a99065a6fcf9b1ab93d1a7a"
+ },
+ "checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_and_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "qa": {
+ "host": "127.0.0.1",
+ "port": 55441,
+ "databases": [
+ "desk_editor_20261102_test",
+ "desk_prefill_20261102_test"
+ ],
+ "data": "synthetic_disposable",
+ "active_writes": 0,
+ "external_messages": 0
+ },
+ "coverage": [
+ "explicit opt-in and cancellation",
+ "own account only",
+ "encrypted versioned preferences and audit",
+ "same public catalogue matching rules",
+ "old-public baseline without timestamp cursor",
+ "future/private/incompatible exclusions",
+ "idempotent notifications",
+ "frequency and resubscription baseline",
+ "withdrawn sources not exposed",
+ "unavailable references do not block other recipients",
+ "201-item batch without loss",
+ "atomic failure/retry",
+ "legacy notification migration and guarded rollback",
+ "legacy manifestation notifications retained"
+ ],
+ "limitations": [
+ "public opportunity catalogue only; other tender/incentive sources pending",
+ "in-app channel only",
+ "scheduler activation in destination not verified",
+ "visual verification pending browser control limitation",
+ "not installed"
+ ],
+ "source_sha256": {
+ "database/migrations/2026_11_02_190000_investment_opportunity_alerts.php": "df8494f35f06be6a355f4e71d266c1ad65bfdb65e03ac805fe832f99dbe0ab10",
+ "app/Services/InvestmentOpportunityAlerts.php": "81b610345f2acb48b1f9a0e468fc5c57fe3716a1f1310535e1c81e909daee911",
+ "app/Services/InvestmentWorkspace.php": "07b72139cd53f225403608f2e2c4c0caaf7e49e38c3844da62d0ff60b5180fed",
+ "app/Http/Controllers/InvestmentWorkspaceController.php": "a10afdd5e577c2636fa7048097193155d18b57ab0d28d74cc6b3b5bbade5939f",
+ "app/Http/Controllers/InvestmentAlertPreferencesController.php": "b7e54a303a3cf170c3e96bcc66e65aa0d0fe194bdfa261df322754e04aa12d8a",
+ "app/Console/Commands/DispatchInvestmentAlerts.php": "e8f8d0868cdb4c26988b7a958a6ccd48aac9d902108020baf62db7e7af76445d",
+ "routes/investment.php": "4b3ded8f81a347948278ffc677861d2b9d269f537cafcba61927332c9b470579",
+ "routes/console.php": "d0703e20fdeff03067521ccc5458cb98bd3fe6fcca58ea2b75e6775ab6ff205c",
+ "resources/js/components/opportunity-alert-preferences.tsx": "923a67920d75ff2b9326d516303366868e2f75537849850de63a2e3fc553cc04",
+ "resources/js/pages/investment/notifications.tsx": "8fdc5acd0fcb716adc0032660493d3549038c9bc63cb5dbf89d16bc8a7384e11",
+ "tests/Feature/InvestmentOpportunityAlertsTest.php": "bd98ab57e307c20f6dee0f2390aab69ac6da33febc4f82da65f179ab97dc34d0",
+ "tests/frontend/opportunity-alert-preferences.test.mjs": "3f63d1c8a24b35bd4ced8f186acdfbe1dcf6bd81666dee6104dc2373b0fc7246"
+ }
+ },
+ "quick_opportunity_search_increment_20261102": {
+ "recorded_at": "2026-11-02T17:14:06.679Z",
+ "status": "local_qa_uncommitted_not_installed",
+ "requirement": "MASTER-471012ab-0124",
+ "user_example": "plantio de algodao",
+ "feature_checks": [
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 3,
+ "passed": 3,
+ "assertions": 93,
+ "duration_ms": 19975,
+ "log": "storage/logs/quick-opportunity-search-verified-feature-20261102.log",
+ "sha256": "a6af91950dc9724853ed1c9042a385cafbbf7662816c4208eae1bdea3e8bf595"
+ },
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 6,
+ "passed": 6,
+ "assertions": 112,
+ "duration_ms": 7165,
+ "log": "storage/logs/quick-opportunity-search-compatibility-20261102.log",
+ "sha256": "0541cc518435451204af413dff521f0fee2b1ebd1306ed495358ff51bdadba20"
+ }
+ ],
+ "frontend": {
+ "tests": 5,
+ "passed": 5,
+ "log": "storage/logs/quick-opportunity-search-frontend-20261102.log",
+ "sha256": "e157ff7b14f43458cce046839326847ddfa2a1ad9e93e388904692ad26d3512c"
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_and_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "coverage": [
+ "native GET and actual form/autofill value",
+ "all meaningful words across public fields",
+ "accent and case normalization",
+ "narrow cultivation wording variants",
+ "canonical public province descendants",
+ "legacy and current API consistency",
+ "page map and export consistency",
+ "literal wildcard characters",
+ "related processing separated from cultivation",
+ "additional filters retained",
+ "pending/error related results hidden",
+ "no data mutation"
+ ],
+ "limitations": [
+ "QA uses synthetic fiches, not proof of a real available cultivation offer",
+ "existing cotton source descriptions include processing; no facts or publication invented",
+ "visual verification pending browser control limitation",
+ "not installed remotely",
+ "tender alert integration still in development"
+ ],
+ "source_sha256": {
+ "app/Services/OpportunityTextSearch.php": "5db4e6abe69be0b345c4bc81c5243b6278993f883dc38a5ae1a279fa13e44ab6",
+ "app/Services/InvestmentCatalogue.php": "ef4b28fa8dd060f8b420437aa748a5bba7a184864e2e86dc128881e85caca6d5",
+ "app/Http/Controllers/InvestmentDiscoveryController.php": "b59d458b4b8a1fb666d8176feba98efa7603cf396cc30df3f9d156d2a5a45753",
+ "app/Http/Controllers/Api/V1/OpportunityController.php": "6d86f06234238e9dd99dc19169d4f2cd64a287d02f3d6c3eeb7f0f89fbd07b36",
+ "resources/js/components/portal-hero.tsx": "214fa7ee656148ed05dae49ff7ce27c09623c7f43f29f51f957bcb0da4891489",
+ "resources/js/pages/PortalInvestidor.tsx": "3d2804221b4ef3e284c951b8b772db35fa53a9bf0481146420932e10b5c90fe4",
+ "resources/js/components/opportunity-related-results.tsx": "7d161f39b5e1b20c7ecca32b3ef8589d572981d4d3585f91b957a76e04dd3ae1",
+ "resources/js/pages/investment/catalogue.tsx": "3371679dc219332fa630075bcbe0219fde882c66a250c25adfc7ac3f5929a41c",
+ "tests/Feature/QuickOpportunitySearchTest.php": "78888769a1a93d95f2487ed05e3ff025ad77e986b6809936db51e3a319211a5b",
+ "tests/frontend/quick-opportunity-search.test.mjs": "45d6760e02cfb8deb78cde45faa35149d2259718bc3c74046a79f57a527099cf"
+ }
+ },
+ "tender_alerts_increment_20261102": {
+ "recorded_at": "2026-11-02T17:29:34.033Z",
+ "status": "local_qa_uncommitted_not_installed",
+ "requirements": [
+ "ACT-20261029-11",
+ "MASTER-471012ab-0124"
+ ],
+ "feature_checks": [
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 21,
+ "passed": 21,
+ "assertions": 315,
+ "duration_ms": 151505,
+ "log": "storage/logs/tender-alerts-verified-feature-20261102.log",
+ "sha256": "b6028debfd46056dd6c7844984f6e9898445e86cd9457f1703120b596e37e68b"
+ },
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 1,
+ "passed": 1,
+ "assertions": 7,
+ "duration_ms": 12434,
+ "log": "storage/logs/tender-alerts-batch-fairness-20261102.log",
+ "sha256": "7bb4dba3fd698021abf678f65a5eb13a26d093e24f8fa14396a2a808fabf0bb2"
+ },
+ {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 8,
+ "passed": 8,
+ "assertions": 285,
+ "duration_ms": 87484,
+ "log": "storage/logs/tender-alerts-procurement-compatibility-20261102.log",
+ "sha256": "3d47c295e7fb8441ab46487f450918d0cc81869436dbd0737b9b525bb1e6a78e"
+ }
+ ],
+ "frontend": {
+ "tests": 6,
+ "passed": 6,
+ "log": "storage/logs/tender-alerts-frontend-20261102.log",
+ "sha256": "dc796f6446da72a9449ebb1ad9aa6ef80afdab46419a7e4c041b39907e09b9cc"
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_and_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "coverage": [
+ "explicit source opt-in; old preferences remain opportunities only",
+ "shared public procurement query and existing filters",
+ "source-specific applicable fields",
+ "published current acts only, not drafts",
+ "immutable public notification projection and provenance",
+ "historical acts remain readable with a public tender",
+ "withdrawal and catalogue availability respected",
+ "other source continues while tenders unavailable",
+ "cancellation independent of catalogue choices",
+ "both sources roll back on delivery failure",
+ "bounded batch per catalogue and no starvation",
+ "legacy preference and notification migration preservation",
+ "rollback guard preserves tender preferences/history",
+ "legacy procurement, manifestation and quick-search checks retained"
+ ],
+ "qa": {
+ "host": "127.0.0.1",
+ "port": 55441,
+ "databases": [
+ "desk_editor_20261102_test",
+ "desk_prefill_20261102_test",
+ "simulator_fiscal_delta_20261021_test"
+ ],
+ "data": "synthetic_isolated",
+ "active_writes": 0,
+ "external_messages": 0
+ },
+ "limitations": [
+ "only the current published tender act is considered at each matching run; not every intermediate act",
+ "incentive catalogues and external delivery channels pending",
+ "not installed remotely; destination scheduler not verified",
+ "visual verification pending browser control limitation"
+ ],
+ "source_sha256": {
+ "database/migrations/2026_11_02_200000_investment_tender_alerts.php": "02fda526c23e68775fa21d7576f9208e73ba7363980c17c53b6b8eba49054200",
+ "app/Services/Procurement.php": "9199928aad5ec0abe5718e02a3b52b93dc4ee18834dc453ab354cfe0c81ff2a9",
+ "app/Http/Controllers/ProcurementController.php": "08c3604a4722096ee9d4baf6c4708b7517d04d3173cb750d2c3f9628f38fa626",
+ "app/Services/InvestmentOpportunityAlerts.php": "33a8e58836843a0675164f55cbb5d8676c8043656f05d4d5d8da5fd90b6e2729",
+ "app/Services/InvestmentWorkspace.php": "d3c20ff3c46f471fb32a87931b501419c2e0d5edcf9370b2258a7d28b17f5d8e",
+ "app/Http/Controllers/InvestmentWorkspaceController.php": "236ee42f818a005f5da911cd8f2e6b58f1d8a6caf3e2a0d01486cfd53c482c96",
+ "app/Http/Controllers/InvestmentAlertPreferencesController.php": "619a5ba3578c94ec62fa60c56c587b0b31e5942ce70763035b115e19bbd0bf3a",
+ "app/Console/Commands/DispatchInvestmentAlerts.php": "8c7c0a5dfa3b6c55ee4d9c0c748883b46c84cdc008b698ae702a753e11ae0322",
+ "resources/js/components/opportunity-alert-preferences.tsx": "b13d184bc5b32f07f2237d7b3a0432d5ea0be66ed77121dbd075215a5112bb4f",
+ "resources/js/pages/investment/notifications.tsx": "869e40dc5055a2ca16417ea5a5dd53418b59cdd7576d79c1be99bd79189fe4fe",
+ "tests/Feature/InvestmentTenderAlertsTest.php": "68b381b4832db5b93b0900b2d39210d5e2daa7e596558d7c5a543eb65e1a1f8a",
+ "tests/Feature/InvestmentOpportunityAlertsTest.php": "948506d2c664bd26a66f12de1980997d16e4ca0035aef3c752c5b860202f7ca6",
+ "tests/frontend/opportunity-alert-preferences.test.mjs": "faf08301565fa8c865685f48362be2b96cad16f6240fea8b97633ce334016ff3"
+ }
+ },
+ "funding_editor_increment_20261102": {
+ "recorded_at": "2026-11-02T18:01:06.038Z",
+ "status": "partial_local_qa_not_installed",
+ "requirement": "AUD-FUND-01",
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 4,
+ "passed": 4,
+ "assertions": 91,
+ "duration_ms": 29506,
+ "log": "storage/logs/funding-editor-feature-20261102.log",
+ "sha256": "236b615981c50b34f289c66ce994ee4a93b399a6a9530b9d1b95702e3adc8568"
+ },
+ "types": "passed",
+ "limitations": [
+ "territorial and sector filters pending",
+ "specific document tests and concurrency pending",
+ "real funding references pending",
+ "visual verification pending"
+ ],
+ "source_sha256": {
+ "app/Services/FundingProgrammes.php": "f0b546d9897ebf2ed1bf43b649e088af8463684aea3b70d68fe75c587921458d",
+ "app/Http/Controllers/FundingProgrammeController.php": "8b94bd0b5bfe17071e4252c998817846d3836950ba92e90b808921ad5b649ab1",
+ "routes/funding.php": "215d5d383920faf3d9554426fa907f06c1a8bacb3fcbaf93785ee31f6ac644cd",
+ "resources/js/pages/funding/edit.tsx": "52c834f8c2eb4acc693a319f1d72cdc1435b6acbbd03dd2323db899b284ea509",
+ "tests/Feature/FundingProgrammesTest.php": "39a5f8fa9d8f775886ee29c32b418a3926a0fcab8da104605b8667fbb87c2092"
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "check_logs": {
+ "funding-editor-final-phpstan-20261102.log": "1997495ca8f04c2ec09798d55607d1a2f85e3338b772f258666465bf658032d2",
+ "funding-editor-final-check-20261102.log": "581fd061da7b8d09b02f783d74065580f6451bce8207e850a52041d4c913bbe3",
+ "funding-editor-final-types-20261102.log": "5346ac8a6566c1c38cb0bbda6a029579df58cd78af78e2c4845d9c82b5d1d76c",
+ "funding-editor-build-20261102.log": "e262422c86f54d9c3f09e5d3935bff84d01b4806b0d34fb69b9e026408b25808"
+ }
+ },
+ "funding_filters_increment_20261102": {
+ "recorded_at": "2026-11-02T18:07:36.596Z",
+ "requirement": "AUD-FUND-01",
+ "status": "partial_local_qa_not_installed",
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 6,
+ "passed": 6,
+ "assertions": 204,
+ "duration_ms": 54070
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "logs": {
+ "funding-filters-documents-feature-20261102.log": "ae531b17b9ac4cb58907f41a00811e681ffb4998a1736e8709384eedfe2d1859",
+ "funding-filters-phpstan-20261102.log": "1997495ca8f04c2ec09798d55607d1a2f85e3338b772f258666465bf658032d2",
+ "funding-filters-types-20261102.log": "5346ac8a6566c1c38cb0bbda6a029579df58cd78af78e2c4845d9c82b5d1d76c",
+ "funding-filters-check-20261102.log": "130f12c92dcd68efcf711f13685b60ba1e1d967d2ea250df32b4c6e1163c0399",
+ "funding-filters-build-20261102.log": "45bfb9a5a1e8724c231905912200889347059eb1cbc02aa26966536b295305b7"
+ },
+ "coverage": [
+ "programme scope filters with explicit unknowns",
+ "national, ancestor and partial territorial coverage",
+ "window dates and unknown windows",
+ "immutable territory names and hierarchy snapshots",
+ "document metadata and byte integrity rechecked",
+ "withdrawn, restricted and pending-scan documents refused",
+ "stale document preview refused; previous publication preserved"
+ ],
+ "limitations": [
+ "synthetic metadata states do not prove a real antivirus scan",
+ "no concurrent worker stress test",
+ "real funding references not yet incorporated",
+ "visual and destination deployment pending",
+ "incentive notification integration pending"
+ ],
+ "source_sha256": {
+ "app/Services/FundingProgrammes.php": "b15b76f3265bd764464af391608a9b8eb8234e1aaf0cf12880f96305d6d479fa",
+ "app/Http/Controllers/FundingProgrammeController.php": "a336c733a8fc8090a205edc831351bde7c692c13984bf5e20812f1b8a386a58c",
+ "resources/js/pages/funding/index.tsx": "e3111eb5da3bb49c4b46b4e07908cce723174eb91bc4d532e84aea547050a881",
+ "resources/js/pages/funding/show.tsx": "496fae40f450666a280c8550bff3adc26a9b54eaa9ebf050ad4d5849e2f6f920",
+ "resources/js/pages/funding/shared.ts": "d4c2951b877ec95df076dd1a0a8f0abee008a0ba6cf0a504aa691d7e066296da",
+ "tests/Feature/FundingProgrammesTest.php": "e479973de9ec053af4380171728206a28a0c4502658cac871a1729ae01226062"
+ }
+ },
+ "funding_references_increment_20261102": {
+ "recorded_at": "2026-11-02T18:14:49.937Z",
+ "status": "partial_local_qa_not_installed",
+ "requirement": "AUD-FUND-01",
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 7,
+ "passed": 7,
+ "assertions": 235,
+ "duration_ms": 122371,
+ "log": "storage/logs/funding-references-feature-20261102.log",
+ "sha256": "cc3e54e4a78ace00d1a1fa2272d700599d2e34ba2c44f1bb7a18fdff6fd86a79"
+ },
+ "static_checks": {
+ "phpstan": "passed",
+ "types": "passed",
+ "lint_format": "passed_without_warnings",
+ "build": "passed_with_existing_advisories",
+ "diff": "passed"
+ },
+ "source_manifest": {
+ "recorded_at": "2026-11-02T18:13:31.540Z",
+ "sources": [
+ {
+ "url": "https://mpd.gov.mz/wp-content/uploads/2025/10/BR_43_I_SERIE_2025.pdf",
+ "sha256": "0ea99c5f894760e3b715e377e87e9715fad9423e322e5753de1b9bb345c64753",
+ "checked_on": "2026-11-02",
+ "reference": "BR I Série n.º 43, 05/03/2025, pp. 157–160; Decreto n.º 4/2025 e Regulamento anexo",
+ "path": "storage/app/private/funding-sources-20261102/decreto-4-2025.pdf",
+ "size_bytes": 635378,
+ "classification": "private_development_source_copy",
+ "library_published": false,
+ "antivirus_scan": "not_asserted"
+ },
+ {
+ "url": "https://cmct.gov.mz/fundo-de-desenvolvimento-economico-local-fdel/",
+ "sha256": "c69c2c3883766aa6a238ae44d8ee3fc99570adca2f3e647e50df59fde2786403",
+ "checked_on": "2026-11-02",
+ "reference": "Aviso municipal FDEL, prazo 20/10/2025",
+ "path": "storage/app/private/funding-sources-20261102/tete-fdel-2025.html",
+ "size_bytes": 99145,
+ "classification": "private_development_source_copy",
+ "library_published": false,
+ "antivirus_scan": "not_asserted"
+ }
+ ]
+ },
+ "source_sha256": {
+ "database/data/funding-references.json": "eb340ab228367327bda4a2231c88d056d74cd1b8811006e9343c761cd7cc1f26",
+ "app/Services/FundingProgrammeReferences.php": "a479ce5b645f6b48f2df412c9bf2bda77db1c89d28528e887812f264750eab25",
+ "app/Http/Controllers/FundingProgrammeController.php": "bdbc975c23775094f0597e72d369f2ce4ab003a37950dfe2903433b3a1f0e781",
+ "routes/funding.php": "faaeb262ea7f488d640e2c142262505ba60c69008315081ad3726d3c5a0ed1b7",
+ "resources/js/pages/funding/reference.tsx": "99a62c7d0815fc414f4ae989e2584a2a796ec4e499e10621c8b0a0dc2914b752",
+ "resources/js/pages/funding/manage.tsx": "514b9330750bf919b5cf56972390814819071f2518745ca2cb81dff53d0f2f28",
+ "tests/Feature/FundingProgrammesTest.php": "4c65ba40a5237241f94901e135151090ce3cb422fbda3a0ca449536f4e73176d"
+ },
+ "limitations": [
+ "private source copies are not published or antivirus scanned",
+ "territorial and sector registry associations not inferred",
+ "no concurrent worker test",
+ "visual, notification integration and destination deployment pending"
+ ],
+ "logs": {
+ "funding-references-feature-20261102.log": "cc3e54e4a78ace00d1a1fa2272d700599d2e34ba2c44f1bb7a18fdff6fd86a79",
+ "funding-references-phpstan-20261102.log": "1997495ca8f04c2ec09798d55607d1a2f85e3338b772f258666465bf658032d2",
+ "funding-references-types-20261102.log": "5346ac8a6566c1c38cb0bbda6a029579df58cd78af78e2c4845d9c82b5d1d76c",
+ "funding-references-check-20261102.log": "2fbbedf07f705d3016fe827a296b9f1674db6cb69704a29eca349eafbaec08e0",
+ "funding-references-build-20261102.log": "3dcb04bbd5db34360a853e88863596c3abbeff20d6d844a31572d4fb609b6378"
+ }
+ },
+ "funding_concurrency_increment_20261102": {
+ "recorded_at": "2026-11-02T18:22:27.583Z",
+ "status": "partial_local_qa_not_installed",
+ "requirement": "AUD-FUND-01",
+ "initial_harness_failure": "PG statistics snapshot retained inside observer transaction; corrected by clearing statistics snapshot",
+ "reproduced_product_failure": "SQLSTATE 40P01: account FOR UPDATE lock conflicts with audit foreign-key KEY SHARE during withdrawal vs interest",
+ "correction": "FOR NO KEY UPDATE serializes account bookmarks while permitting audit FK reads",
+ "concurrent": {
+ "result": "passed",
+ "database": "funding_concurrency_20261102c_test",
+ "synthetic": true,
+ "phases": {
+ "reference": {
+ "overlap_observed": [
+ {
+ "pid": 25356,
+ "wait_event": "advisory",
+ "blockers": "{7860}"
+ },
+ {
+ "pid": 9824,
+ "wait_event": "advisory",
+ "blockers": "{7860,25356}"
+ }
+ ],
+ "results": [
+ {
+ "status": "ok",
+ "result": {
+ "id": "f2343e31-141c-4c4c-b01e-05373bb2dc19",
+ "created": true
+ }
+ },
+ {
+ "status": "ok",
+ "result": {
+ "id": "f2343e31-141c-4c4c-b01e-05373bb2dc19",
+ "created": false
+ }
+ }
+ ]
+ },
+ "draft": {
+ "overlap_observed": [
+ {
+ "pid": 15432,
+ "wait_event": "advisory",
+ "blockers": "{7860}"
+ },
+ {
+ "pid": 14596,
+ "wait_event": "advisory",
+ "blockers": "{7860,15432}"
+ }
+ ],
+ "results": [
+ {
+ "status": "ok",
+ "result": {
+ "id": "f2343e31-141c-4c4c-b01e-05373bb2dc19"
+ }
+ },
+ {
+ "status": "conflict",
+ "code": 409
+ }
+ ]
+ },
+ "publication": {
+ "overlap_observed": [
+ {
+ "pid": 23252,
+ "wait_event": "transactionid",
+ "blockers": "{7860}"
+ },
+ {
+ "pid": 27504,
+ "wait_event": "tuple",
+ "blockers": "{23252}"
+ }
+ ],
+ "results": [
+ {
+ "status": "ok",
+ "result": {
+ "version_id": "ba64414b-ec6e-4473-be6c-44fe0615aa21"
+ }
+ },
+ {
+ "status": "ok",
+ "result": {
+ "version_id": "ba64414b-ec6e-4473-be6c-44fe0615aa21"
+ }
+ }
+ ]
+ },
+ "interest": {
+ "overlap_observed": [
+ {
+ "pid": 26936,
+ "wait_event": "transactionid",
+ "blockers": "{7860}"
+ },
+ {
+ "pid": 24988,
+ "wait_event": "tuple",
+ "blockers": "{26936}"
+ }
+ ],
+ "results": [
+ {
+ "status": "ok",
+ "result": {
+ "saved": true
+ }
+ },
+ {
+ "status": "ok",
+ "result": {
+ "saved": true
+ }
+ }
+ ]
+ },
+ "withdrawal_vs_interest": {
+ "overlap_observed": [
+ {
+ "pid": 25628,
+ "wait_event": "transactionid",
+ "blockers": "{7860}"
+ },
+ {
+ "pid": 24716,
+ "wait_event": "tuple",
+ "blockers": "{25628}"
+ }
+ ],
+ "results": [
+ {
+ "status": "ok",
+ "result": {
+ "withdrawn": true
+ }
+ },
+ {
+ "status": "unavailable",
+ "code": 404
+ }
+ ]
+ }
+ },
+ "active_writes": 0,
+ "external_messages": 0
+ },
+ "preservation": {
+ "programmes": 1,
+ "versions": 1,
+ "interests": 1,
+ "private_reference_preserved": 1,
+ "public_programmes": 0,
+ "audit": {
+ "draft_saved": 2,
+ "interest_saved": 1,
+ "published": 1,
+ "reference_prepared": 1,
+ "withdrawn": 1
+ }
+ },
+ "feature": {
+ "tool": "phpunit",
+ "result": "passed",
+ "tests": 7,
+ "passed": 7,
+ "assertions": 235,
+ "duration_ms": 44679
+ },
+ "checks": {
+ "phpstan": "passed",
+ "pint": "passed",
+ "diff": "passed",
+ "frontend": "unchanged; previous reference increment proof retained"
+ },
+ "guards": [
+ "wrong environment refused before database access",
+ "nonempty disposable database refused without resetting records"
+ ],
+ "logs": {
+ "funding-concurrency-before-20261102.log": "6050d857774ae59c2c88a87d4046da108311ae68865dfcce53113968b49fa1e3",
+ "funding-concurrency-baseline-20261102.log": "decdaf79cc743e11666ab59276751aff4d9b877171006f3e9a17423720a8c329",
+ "funding-concurrency-after-20261102.log": "20ff2c0247b5caabd95eb8a1387fad4a023c755ae1c297c0319e05a3003e4c67",
+ "funding-concurrency-feature-20261102.log": "299ad46e67780b013ed9045531be150f41ee9c12030ebb91670b81239d782c72",
+ "funding-concurrency-phpstan-20261102.log": "1997495ca8f04c2ec09798d55607d1a2f85e3338b772f258666465bf658032d2",
+ "funding-concurrency-guard-environment-20261102.log": "3046bfdcaa79a08b0fe157b356c86e2c0354436e5795deaa1561dc4e5fcee93c",
+ "funding-concurrency-guard-existing-20261102.log": "bcfdd95824c0cafc853a8f7be1883451d8882ed393c97f314241c6f8c106ed5e",
+ "funding-concurrency-preservation-20261102.json": "414747162b39d7ac9c1ff9de68198dcf5c52b29518bcde5985edaff1eb01f6ea"
+ },
+ "source_sha256": {
+ "app/Services/FundingProgrammes.php": "b756c530e0fcd1f0ddaab5be422487d746e11e390d41f07fcc89f90fa1e315ae",
+ "tools/verify-funding-concurrency.php": "3c296bd556a908cd0357a29fa4cf2a05ba550d88cbafa3b2196dde2fcc63f1ec"
+ },
+ "limitations": [
+ "two processes per scenario; not a load test or every interleaving",
+ "visual, reference registry associations, incentive alerts and destination deployment pending"
+ ]
}
}
diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md
index 83e2854c..e7098d6d 100644
--- a/docs/investmoz/unification/traceability-and-manual.md
+++ b/docs/investmoz/unification/traceability-and-manual.md
@@ -1,5 +1,138 @@
# Rastreabilidade, utilização e formação
+## 02/11/2026 - reconciliacao das pre-condicoes da suite ampla
+
+A classificacao das falhas foi confrontada com os testes e com a configuracao efectiva. Os quatro 403 do intake de negocios pertenciam ao percurso de listas legadas, mas herdavam a activacao de perfis do ambiente. Com variante legada explicita, passaram nove testes/248 assercoes do intake e das operacoes documentais reais; GD/WebP foi activado apenas pelo argumento PHP -d extension=gd, sem alterar o runtime partilhado. O proprio ExistingBusinessIntakeTest passou a declarar essa variante no setUp, conservando todas as recusas de isolamento, MFA, designacao, auto-aprovacao e estados. Verificacao sem flags externas de perfis: sete testes/154 assercoes passaram. Nenhuma politica do produto foi alargada.
+
+Criadas duas copias descartaveis da base QA sintetica desta sessao, com as identidades exigidas pelos grupos historicos: simulator_fiscal_delta_20261021_test e proactive_investment_20261027_test, sempre em 127.0.0.1:55441. Nenhuma base activa foi lida ou importada. A primeira execucao dos 115 ficheiros na identidade fiscal correcta reportou 186 testes, 32 aprovados e falhas restantes predominantemente por referencias/corpus ausentes; nao foi declarada aprovada. A preparacao passou a reutilizar os seeders de referencias versionadas existentes, com 1921 registos territoriais, sectores e propostas documentais; nao foram inventadas coordenadas ou publicadas ofertas reais.
+
+Os quatro testes IRPC da segunda base exigiam o actor sintetico 1021. A ferramenta tools/prepare-fiscal-preservation-fixture.php cria apenas uma identidade sintetica nominativa nesse alvo QA, sem credencial divulgada nem concessoes; recusa substituir uma identidade diferente. Acrescenta uma base nao vazia nas sete tabelas cujos hashes os testes comparam. O rascunho de base e arquivado: um rascunho activo do mesmo actor bloquearia correctamente a criacao de outro. Documentos dessa base sao metadados sinteticos, sem alegar ficheiros descarregaveis ou scan real. A ferramenta verifica CLI, testing, identidade/host/porta/DB_URL/cache e recusa alvos fora da lista; uma tentativa na base intake_env_20261102_test foi recusada com codigo 1. Referencias-only reutiliza apenas os seeders existentes, nas duas bases QA nomeadas. Ferramenta idempotente no alvo preparado; sem migracoes ou alteracoes activas.
+
+Resultado terminal dos quatro testes IRPC: quatro aprovados/602 assercoes, incluindo conservacao dos livros, historicos e dos registos de base. PHPStan da ferramenta e Pint passaram. A nova execucao dos 110 ficheiros que continham falhas continua no processo proprio (integration-fiscal-reference-retry-20261102.log); nao foi reiniciada por ausencia temporaria de output. Antes das execucoes foram copiadas e calculadas as hashes SHA-256 de 63 provas existentes que os testes podem regravar. As copias estao em storage/app/private/integration-proof-preservation-20261102, manifesto em storage/logs/integration-output-preservation-20261102.json. Conferir e preservar separadamente o resultado novo antes de repor quaisquer bytes originais alterados, quando a execucao terminar. Proxima accao: concluir essa reconciliacao e tratar o saldo real de fixtures/funcionalidades, sem promover falha de ambiente a perda de funcionalidade. Sem publicacao.
+
+## 02/11/2026 - AUD-CHECKLIST-01: editor de formularios versionados do Balcao
+
+Inventario: desk_service_versions e o vinculo desk_requests.service_version_id ja preservavam definicoes por versao; a publicacao administrativa existente lia exclusivamente config/virtual-desk.php. Confirmada a lacuna de edicao pela interface, sem perda das versoes ou dos pedidos anteriores. Implementado /management/balcao/servicos, acessivel pela administracao do Balcao, usando as mesmas competencias administrativas existentes. A nova subrota herda o mesmo ambito; nenhum perfil ou concessao paralela foi criado.
+
+O editor permite alterar identificacao, perguntas, obrigatoriedade, listas/opcoes, limites numericos e condicoes de aplicabilidade, acrescentar/retirar campos e conferir uma comparacao anterior/nova antes da confirmacao. Motivo, versao de origem, autor/publicador e hash canonico ficam auditados. A nova definicao e inserida em desk_service_versions; nao actualiza definicoes antigas, respostas ou snapshots. Fonte anterior conservada; a mudanca e registada como publicacao de definicao interna, nao como aprovacao externa. Rascunhos do editor usam a memoria do formulario por servico/versao; edicoes invalidam a confirmacao precedente.
+
+Servidor verifica competencias pela rota existente, versao concorrente, repeticao idempotente, campos reservados, tipos suportados, opcoes validas e condicoes sem ciclos/referencias ausentes. Etapa do workflow permanece intacta. Identificadores canonicos interpretados pelo motor conservam os seus tipos; outros tipos exigem campo novo, para nao contornar validacao financeira/territorial. Nao sao novas regras organizacionais: sao contratos tecnicos do motor reutilizado. Publicacao sem alteracoes e recusada, e propriedades de configuracao sem efeito no tipo de campo sao rejeitadas. Campos novos de email/URL recebem validacao correspondente no servidor.
+
+Provas iniciais: 18 Feature/325 assercoes do editor e percurso de orientacao passaram em desk_editor_20261102_test:55441, base descartavel distinta da suite ampla em curso. Teste final dirigido comprovou dois percursos/48 assercoes antes da adicao da guarda contra publicacao sem alteracoes; nova verificacao desse delta em curso no log desk-service-editor-final-feature-20261102.log. Inclui pedido v1 efectivamente submetido, publicacao/repeticao v2 sem duplicacao, payload e submitted_snapshot v1 identicos, recuperacao das duas definicoes e submissao v2 com campo email novo valido; estados incompletos/invalidos recusados. Um teste frontend real do editor passou: fonte imutavel, comparacao anterior/nova, confirmacao invalidada e destino/versao do envio. TypeScript, lint e PHPStan dirigidos passaram nas verificacoes registadas; verificacoes finais do delta acompanhadas separadamente. Sem migracoes, escrita activa, instalacao ou prova visual; AUD-CHECKLIST-01 permanece parcial para outros tipos de checklist e configuracao transversal.
+
+ACT-16, resposta do proprietario nesta continuidade: «ainda nao» quanto a linguas prioritarias/traducao aprovada. Essa definicao continua pendente; nao foram inventadas traducoes nem suspenso o desenvolvimento independente.
+
+Verificacao final deste incremento: 19 Feature/339 assercoes passaram em desk_editor_20261102_test, incluindo o percurso existente de orientacao e a nova prova de escolhas numericas recebidas pela API. Estas escolhas sao conservadas como codigos textuais e nao contornam perguntas condicionais obrigatorias; formulario e servidor usam a mesma comparacao. O editor nao configura comparadores numericos: condicoes actuais sao de igualdade de respostas, com listas de opcoes para categorias numericas. TypeScript, PHPStan e lint finais passaram (675 ficheiros formatados; 653 sem avisos/erros). Compilacao ainda em execucao no processo observado; nao se declara resultado antes do termo. A suite Feature ampla anterior continua independente, com resultado ainda pendente. Logs desk-service-editor-final-*20261102.log preservam as provas e os testes iniciais falhados nao sao apresentados como aprovacoes.
+
+Resultados terminais posteriores: compilacao final do editor terminou com codigo 0. A suite ampla development-feature-20261102.log terminou com 707 testes reportados, 467 aprovados, 198 falhados e 7653 assercoes; nao e aceite como suite global aprovada. Classificacao inicial das 198 falhas: 190 associadas a exigencia de identidade/fixture de bases QA historicas, quatro respostas 403 no intake de negocios, uma dependencia GD/WebP e tres fixtures/cobertura territorial. Isto nao demonstra 198 funcionalidades por implementar nem autoriza ignorar as falhas. Proxima accao: recuperar as pre-condicoes QA dos grupos, conferir os 403 com autoridade equivalente e disponibilizar o suporte de imagem exigido, sem relaxar guardas ou usar dados activos. A execucao ampla ocorreu durante evolucao local e nao certifica uma candidata imutavel; as provas dirigidas do editor referem-se ao delta concluido. Objectivo global permanece activo.
+
+## 02/11/2026 - continuidade: fonte dos semelhantes e consulta offline de oportunidades
+
+Delta de classificacao no mesmo consumidor: escolha explicita entre classificacoes divulgadas da ficha. A consulta transporta tipo, alvo e finalidade pelos filtros do servidor existentes; finalidades diferentes para o mesmo alvo nao sao deduplicadas nem confundidas. Mostra a fonte da classificacao, quando conhecida; relacao documental nao prova implantacao/propriedade/capacidade. Mudar de ficha elimina a seleccao anterior. Quatro testes do consumidor passaram, total dirigido desta continuidade dez testes com offline e associacoes. Lint final sem avisos/erros; TypeScript e build finais acompanhados pelos processos da ronda, sem repetir a suite PHP ampla em curso.
+
+Fecho tecnico deste delta: TypeScript e compilacao finais terminaram com codigo 0; git diff --check passou. Lint: 673 ficheiros formatados e 651 sem avisos/erros. Logs development-classification-check-20261102.log e development-classification-build-20261102.log em storage/logs. A suite Feature ampla mantem processo proprio e ainda nao tem resultado terminal; nao foi declarada aprovada. A pergunta sobre linguas prioritarias/traducao aprovada foi enviada sem suspender os restantes incrementos. Objectivo global permanece em execucao, nao concluido.
+
+AUD-MARKET-01: cada resultado semelhante identifica agora o catalogo publico como fonte e a data de publicacao quando fornecida, separada da data dos dados de origem. Data ausente permanece desconhecida. Resposta com ficha malformada gera erro recuperavel, em vez de aparente ausencia de negocios. Tres testes do consumidor passaram, incluindo esta regressao. Proveniencia externa, periodo dos dados de origem e raio continuam pendentes; nao se promove publicacao a validacao factual.
+
+ACT-20261029-16: consulta offline alargada a ficha publica de oportunidade, usando o mesmo gerador HTML das fichas de negocio. Extraido renderer comum de texto escapado, politica restritiva, origem HTTP/HTTPS e ligacao limitada ao proprio portal. A projecao explicita inclui referencia, resumo, descricao, investimento estimado com precisao original, sector, preparacao, contexto territorial indicado, financiamento, impacto esperado e ultima validacao quando conhecida. Nao transporta queries de dossier, anexos, mapas ou propriedades privadas adicionais; contexto territorial nao e confirmado como implantacao. Mensagem apenas confirma preparacao do ficheiro, nao descarga concluida.
+
+Nove testes frontend dirigidos passaram: cinco de ficheiros offline, tres dos semelhantes e um de continuidade das associacoes. A tentativa de conferencia visual anterior terminou por limitacao de politica de URLs do navegador Windows; nao foi contornada. Revisao visual e abertura real sem rede continuam pendentes. Suite PHP Feature iniciada anteriormente permanece em execucao na QA isolada; consultas PostgreSQL activas observadas, sem reiniciar ou declarar resultado prematuro. Nao houve instalacao, publicacao ou alteracao de dados activos.
+
+## 02/11/2026 - ACT-20261029-16: consulta offline seleccionada de ficha publica
+
+Inventario anterior preservado: ficha publica, contacto/interesse, origem, classificacao e catalogo continuam disponiveis. Nao existia consumidor offline neste ecrã. Primeiro recorte implementado localmente: Guardar ficha para consulta offline (.html). Um ficheiro independente contem somente a projeccao explicita dos dados publicos apresentados, valores decimais integrais, localizacao divulgada, publicacao quando conhecida, data da copia e ligacao a ficha de origem. Sem scripts, fontes/imagens remotas, cache geral ou serializacao do objecto/payload privado. Textos escapados, origem HTTP/HTTPS validada, slug codificado, politica de conteudo restritiva e libertacao do URL temporario apos descarga. Resultado do clique informa que o ficheiro foi preparado, sem afirmar que o navegador o guardou.
+
+Tres testes dirigidos passaram: fidelidade/ausencias/precisao, escape de conteudo hostil e exclusao de campos privados adicionais, descarga e libertacao do recurso. Nenhuma escrita no servidor, permissao, publicacao ou dependencia de IA. ACT-16 permanece parcial: nao implementa edicao/sincronizacao offline, novos idiomas ou consulta geral sem rede; nenhuma lingua prioritaria foi inventada. A conferencia real da abertura sem rede e da apresentacao movel continua pendente. Backlog e matriz consolidada actualizados no mesmo ID, conservando criterios e provas anteriores.
+
+## 02/11/2026 - desenvolvimento continuo: primeiro consumidor de negocios semelhantes
+
+Delta territorial posterior no mesmo recorte: a consulta usa tambem a provincia principal divulgada quando essa referencia e consultavel na hierarquia publica existente; local privado, inexistente ou referencia territorial fora desse catalogo nao gera filtro invalido nem criterio geografico apresentado. Teste positivo e teste de local reservado/expiracao/fallback passaram: quatro Feature/190 assercoes no total. A primeira fixture territorial nao pertencia ao catalogo aceite e devolveu 422; a prova levou a proteger tambem o encaminhamento real, preservando a validacao do endpoint em vez de a relaxar. Area provincial nao e distancia nem raio. Fontes/datas individuais e raio continuam pendentes.
+
+Conferidos o backlog, a matriz e os recibos posteriores antes de desenvolver. Existem funcionalidades parciais/por implementar: comparacao de negocios por area/raio/classificacao, dados factuais das camadas do mapa, recomendacoes de nichos e perfis, indicadores/assimetrias, preferencias de alertas e outros recortes ACT. Nem todas as pendencias documentais representam codigo em falta; as provas e entregas anteriores de competitividade, territorio, fiscalidade e navegacao permanecem aceites. Nao foi detectada perda de codigo neste recorte; nao se afirma comparacao integral dos dados activos.
+
+AUD-MARKET-01: confirmada ausencia de consulta de negocios semelhantes na ficha publica. Implementado primeiro consumidor que reutiliza o endpoint, filtros, restricoes de publicacao e recurso publico existentes: mesma modalidade e, quando conhecido, mesmo sector. Mostra ate seis fichas, exclui a origem e repeticoes, explica os criterios e oferece catalogo filtrado; liga ao detalhe conservando filtros. Estados de carregamento, erro/tentativa explicita e ausencia de correspondencias distintos; mudanca de contexto oculta resultados antigos e ignora respostas tardias. Nao cria recomendacao financeira nem infere distancia, localizacao ou ausencia de negocios no mercado. Sem acesso ao payload reservado, novas permissoes ou novo motor de pesquisa. O requisito permanece parcial: area/raio, dados individuais de fonte/data e cobertura geografica ainda por desenvolver; nao se declara a funcionalidade ampla concluida.
+
+Provas: dois testes frontend do componente; tres testes Feature/158 assercoes do catalogo, incluindo o novo vinculo na ficha; TypeScript, lint/formatacao, Pint dirigido, PHPStan dirigido e build passaram. A indisponibilidade QA anterior foi ultrapassada com PostgreSQL 17 descartavel em storage/app/private/qa-database-20261102, limitado a loopback 127.0.0.1:55441; identidade SQL investmoz_test confirmada antes dos testes. Nao foi reutilizada nem alterada a base activa, e as guardas de testing/_test/porta permanecem. Sem publicacao ou prova visual. Registos similar-businesses-*20261102.log em storage/logs. Proxima accao: continuar os recortes autorizados e conferir cobertura territorial publica sem inventar coordenadas ou regras de distancia.
+
+## 02/11/2026 - formularios: redundancias e clareza do preenchimento
+
+Pesquisa estatica transversal a resources/js: 136 declaracoes form/Form e 1963 ocorrencias de controlos/componentes de campos em 199 ficheiros, incluindo pesquisa, autenticacao, perfis, gestao, investimento, balcao, parcerias, contratacao e simulacao. Inventario de caminhos e rotulos literais em docs/investmoz/v2/auditoria-portal/formularios-20261102.json; nao e uma segunda matriz de requisitos. Os numeros sao ocorrencias no codigo, nao formularios distintos apresentados a um perfil. Incluida revisao dirigida dos rotulos dinamicos de BusinessFormSchema. Isto nao demonstra revisao visual nem cobertura semantica integral dos campos gerados por configuracao/servidor.
+
+Corrigidos 16 ficheiros: mensagem duplicada de pesquisa sem paises; linguagem tecnica de snapshots/cadastro mestre nas instrucoes; explicacao de contacto do promotor; pergunta de finalidade do perfil; organizacao representada nas parcerias; modalidade de negocio com rotulos portugueses existentes; pergunta sobre participacao na oportunidade; identificacao visivel do pais do requerente; fuso horario com exemplo utilizavel. Uniformizado o rotulo opcional de origem do pedido e substituidas explicacoes sobre IP/estatisticas por instrucoes de preenchimento. A referencia da autorizacao de representacao distingue-se agora da referencia do comprovativo no portal. Mantidos os dois campos, a origem distinta da residencia/constituicao, valores, consentimentos, obrigatoriedade, regras, permissoes e historico. Nenhuma recolha existente foi removida por mera semelhanca de nome.
+
+Verificacao: 26 testes frontend existentes passaram; TypeScript, sintaxe PHP, formatacao e lint passaram, sem avisos/erros de lint. Compilacao de producao concluida com codigo 0; conservados avisos existentes de tamanho de chunks e fontaine opcional. git diff --check passou. Sem escrita em dados activos ou publicacao. Integração dependente da base QA indisponivel ja registada na ronda anterior; nao repetida para alteracoes editoriais. Proxima accao: conferencia visual por perfil, incluindo campos dinamicos e estado vazio/erro; nao se declara que todos os formularios estejam livres de redundancias.
+
+## 02/11/2026 - pesquisa transversal de erros e correccoes reproduzidas
+
+Pedido da Tempo: pesquisar erros em todo o portal e corrigir os confirmados. Inventario anterior preservado; a pesquisa abrangeu a suite frontend completa, testes unitarios PHP, analise estatica PHP, formatacao/lint e os transportes partilhados. A suite frontend inicial passou com 1230 testes; os 94 testes unitarios PHP passaram com 410 assercoes; PHPStan terminou sem erros. Isto nao equivale a uma inspecao visual integral nem encerra requisitos funcionais da matriz.
+
+Reproduzidas antes da correccao: o transporte publico ignorava CSRF em cookies separados sem espaco, expunha URIError para cookie malformado e a apresentacao de validacao falhava quando a API devolvia errors:null. O contexto de investimento tinha o mesmo problema de separadores/descodificacao. Agora preservam tokens validos, recusam escrita com mensagem de recuperacao da sessao e mantem consultas independentes do cookie. Nenhum pedido de escrita e repetido automaticamente; autorizacao e validacao CSRF no servidor mantidas. No formulario de interesse, armazenamento bloqueado impedia a navegacao para autenticacao e podia transformar uma submissao confirmada em erro ao limpar o rascunho; ambas as operacoes toleram agora a indisponibilidade da persistencia, sem prometer recuperacao entre paginas.
+
+Provas dirigidas posteriores: 40 testes dos transportes, mapas e seleccao passaram, e passou o novo teste de armazenamento bloqueado no formulario de interesse. Os avisos de promessas nao aguardadas nos testes recentes foram corrigidos; verificacao final com 666 ficheiros formatados e 644 ficheiros sem avisos/erros de lint. TypeScript e git diff --check passaram. Compilacao final confirmada com codigo de saida 0 em 24,97 s, com os avisos existentes de chunks e fontaine opcional. Registos desta ronda em storage/logs/*audit*20261102.log, build-audit-verified-20261102.log e frontend-check-final-20261102.log; nao constituem publicacao. Sem alteracao de schema, permissoes ou dados activos.
+
+Limitacao concreta: a suite Feature foi iniciada com a configuracao QA existente mas nao terminou; o processo foi observado com ligacao TCP em SynSent para 127.0.0.1:55441 e log sem resultado. Interrompida apenas esta tentativa de teste. Nao foi usada outra base nem relaxadas as guardas. Proxima accao: restabelecer a disponibilidade da base QA isolada e executar Feature; conferir visualmente os percursos afectados. Nao se declara integracao aprovada nesta ronda nem ausencia de erros em todo o portal.
+
+## 02/11/2026 - retoma e verificacao consolidada do delta local
+
+Retomado o trabalho nesta pasta, preservando as alteracoes em curso e o inventario anterior. Passaram os 40 testes dirigidos de camadas cartograficas, erros do catalogo, seleccao de oportunidades, transporte dos perfis/contexto e navegacao. TypeScript (`npm.cmd run types:check`), compilacao de producao (`npm.cmd run build`, 37,31 s) e `git diff --check` passaram. Usado npm.cmd devido ao bloqueio de npm.ps1 pela politica do PowerShell, sem alterar a politica do sistema. A compilacao conserva avisos de chunks superiores a 500 kB e da dependencia opcional fontaine; nao impediram a geracao dos artefactos. Esta verificacao nao e uma nova suite integral, revisao visual ou publicacao. Proxima accao: conferir visualmente os percursos cartograficos e de regresso ao catalogo ja descritos abaixo; mantem-se pendentes os criterios globais da matriz.
+
+## 02/11/2026 - regresso a pagina do catalogo
+
+Corrigida perda da pagina ao consultar fichas da carteira e zonas: titulo e Consultar ficha conservam agora page no catalogue_query, mantendo filtros aplicados e destino local. Abrange catalogos publicos e de gestao; nao copia parametros alheios da URL nem altera exportacoes. Valores de pagina nao positivos, fraccionarios ou fora do intervalo inteiro seguro sao ignorados. 20 testes de navegacao e territorio e verificacao TypeScript aprovados. Nenhuma alteracao de dados, schema, permissoes ou publicacao; revisao visual pendente.
+
+
+## 02/11/2026 - retoma: sessao dos formularios de perfis
+
+Estado anterior preservado. Leituras profileJson deixam de depender da descodificacao do cookie CSRF; escritas com cookie malformado devolvem ProfileValidationError legivel antes do transporte, mantendo a validacao CSRF do servidor. Cookies separados sem espaco passam a ser lidos correctamente. Credenciais same-origin explicitas. 14 testes focados aprovados, incluindo duas novas regressoes; sem operacoes reais, dados, schema, direitos ou publicacao. Sem nova verificacao visual.
+
+
+## 02/11/2026 - seleccao de oportunidades resiliente
+
+Inventario preservado: escolha multipla, corredores, preparacao com IDs escolhidos e limpeza da seleccao. Corrigido JSON valido com tipo errado que podia bloquear o catalogo: somente listas de inteiros positivos seguros, sem duplicados, sao recuperadas. Falhas de leitura/gravacao/limpeza do sessionStorage nao interrompem a pagina; a escolha em memoria permanece utilizavel e a falha de persistencia e indicada sem prometer conservacao entre paginas. Mantida a chave existente; nenhum outro dado do navegador e apagado. 19 testes focados e TypeScript aprovados. Sem alteracoes de servidor, dados activos, permissoes ou publicacao; revisao visual nao realizada.
+
+
+## 02/11/2026 - robustez fora dos menus: perfis e contexto de investimento
+
+Inventario preservado: formularios e erros por campo de perfis, sinal de reautenticacao, payload Unicode, credenciais, CSRF e limite partilhado de keepalive dos contextos. Corrigidas respostas HTML/JSON invalido nos perfis (mensagem util em vez de SyntaxError), explicacao de sessao expirada e sucesso sem conteudo 204. O contexto de investimento rejeita corpo invalido mesmo com HTTP 200, sem confirmar sucesso nem repetir escritas; a reserva de keepalive e libertada tambem nessa falha. Nenhuma alteracao de dados, schema, direitos ou regras de negocio. 26 testes frontend focados aprovados, incluindo cinco novas regressoes; TypeScript e build de producao aprovados. Evidencia parcial acrescentada ao RF-MN-002 existente, sem encerrar o requisito global. Sem revisao visual ou publicacao; cobertura parcial da aplicacao.
+
+
+## 02/11/2026 - segunda pesquisa de redundancias na navegacao
+
+Conferidos rodape, navegacao lateral, menus por perfil e atalhos do catalogo. Corrigida a designacao Contacto do rodape para Apoio ao investidor, mantendo /apoio; Contacto institucional continua no menu principal. Confirmada coexistencia de navegacao completa no cabecalho e barra lateral das paginas de gestao; mantida nesta ronda para nao retirar destinos sem verificar a experiencia responsiva. Atalhos por dimensao e fichas de estruturas nao sao duplicados exactos e permanecem disponiveis. Pesquisa pelo codigo; sem nova evidencia visual, dados, permissoes ou publicacao.
+
+
+## 02/11/2026 - simplificacao do menu principal
+
+Inventario preservado: destinos publicos e privados, autorizacoes, conta, manifestacoes, idioma e contactos. Entrada de investimento consolidada em Realizacao; removidos do cabecalho meteorologia, redes sociais (mantidas no rodape) e atalho com contador local indevidamente descrito como pedidos recebidos. Manifestacoes continuam acessiveis na conta. Nenhum endpoint, dado ou direito removido. Testes de navegacao e TypeScript; revisao visual indisponivel por falha do host do navegador.
+
+
+## 02/11/2026 - robustez da pesquisa e das respostas da API
+
+Inventario incremental: preservados filtros, resultados, vistas, exportacao, paginacao e mensagens de validacao existentes. A paginacao do catalogo agora oculta ligacoes da pesquisa anterior durante carregamento ou erro, em coerencia com os resultados. O helper API partilhado trata respostas HTML, sessao expirada (419), JSON ausente e sucesso sem conteudo (204); conserva mensagens JSON do servidor, credenciais e CSRF nas escritas, incluindo multipart. GET publico nao depende da descodificacao do cookie CSRF. Cookie malformado em escrita apresenta recuperacao da sessao sem enviar a operacao.
+
+Provas: 25 testes frontend seleccionados aprovados, incluindo 3 novos casos de regressao; TypeScript e build de producao aprovados (29,95 s; aviso de tamanho de chunks). Dados, schema e permissoes inalterados. Sem publicacao ou revisao visual; nao constitui auditoria integral. Evidencia acrescentada ao registo existente RF-GEO-009 para o consumidor catalogo, sem encerrar requisitos globais nem apagar provas anteriores.
+
+
+## 02/11/2026 — revisão dos restantes consumidores cartográficos (RF-GEO-009)
+
+Inventário do delta após o catálogo: o painel partilhado das fichas de oportunidades, zonas públicas (ZEE/ZFI/parques) e investimentos relacionados na carteira repetia o mapa administrativo; o catálogo de parcerias também compunha dois mapas. Foram substituídos pelo mesmo mapa com camadas, fontes expansíveis e avisos, preservando fichas sem coordenadas, contagens/proveniência, truncagem e novas tentativas. A cobertura distingue os registos da pesquisa dos limites adicionais. As caixas antigas do painel não foram mantidas em paralelo com os controlos Leaflet. Ao mudar filtros, dados da resposta anterior ficam ocultos até à resposta correspondente; um geo_location_id genérico já não é tratado como território administrativo sem identificação explícita na hierarquia.
+
+Confirmados dois erros de significado: o perímetro declarado pelo Promotor usava o título/contagem «Contexto administrativo», e locais documentados de projectos/clusters/parcerias usavam «Mapa dos investimentos». A apresentação agora distingue `declared_parcel`, `documented_locations`, limites administrativos e investimentos, incluindo legendas e descrições dos polígonos. Não altera coordenadas, cadastros ou estatutos legais, nem cria pontos para clusters/parcerias sem localização própria.
+
+Mantidos mapas separados quando representam objectos distintos: geografia documental de uma estrutura versus investimentos relacionados na carteira; contextos de locais/parcelas distintos nos formulários; mapa institucional de contacto. A aproximação de um perímetro declarado a um limite administrativo não os funde nem constitui confirmação cadastral. Conservados os endpoints públicos/de gestão/de perfil, as permissões e as fontes existentes; nenhuma alteração de backend/schema/dados.
+
+Verificação local: 17 testes frontend focados aprovados, incluindo composição única nas parcerias, manutenção do território aplicado durante edição dos filtros, máscara de dados antigos, cobertura/fichas, ausência de inferência administrativa, semântica dos três tipos de mapas e regressões territoriais; TypeScript e build de produção aprovados. Matriz existente ampliada no mesmo RF-GEO-009 sem encerrar critérios globais nem apagar as provas anteriores. Sem publicação adicional ou revisão visual do domínio.
+
+## 02/11/2026 — mapa único no catálogo de oportunidades (RF-GEO-009)
+
+Delta autorizado pela Tempo: substituir os dois mapas simultâneos do catálogo por um mapa principal com camadas independentes de oportunidades com coordenadas confirmadas, áreas de investimento cadastradas e limites administrativos. Inventário preservado: filtros/territory_basis, lista e fichas, oportunidades sem coordenadas, proveniência/edição e avisos de cobertura; os restantes ecrãs continuam a poder usar a pré-visualização territorial independente. Não foi identificada perda de dados ou funcionalidade a repor; a duplicação era composição do ecrã.
+
+Nas vistas «Mapa» e «Lista e mapa», as caixas de camadas permitem mostrar/ocultar cada conjunto sem nova pesquisa nem redefinir o zoom. A legenda distingue pontos verdes, áreas em âmbar e limites azuis tracejados. A geometria seleccionada enquadra o mapa; quando só há limites superiores, o aviso é visível e esses limites não são apresentados como a selecção. Nenhuma coordenada é derivada de limites ou centróides. Seleccionar uma oportunidade da lista activa a camada dos pontos se estava oculta. «Fontes e contexto do mapa» expande proveniência, edição e cobertura, preservando as ligações às fichas das áreas.
+
+Reutilizado o endpoint territorial e as suas permissões, com um hook comum e cancelamento/máscara de respostas antigas ao mudar ou limpar a selecção. Falha dos limites mantém as oportunidades acessíveis; falha do mapa de oportunidades não impede consultar o contexto administrativo autorizado. Sem alterações de API, schema, dados, permissões ou classificações territoriais.
+
+Verificação local: 15 testes frontend focados aprovados (incluindo composição única, grupos Leaflet, duplicação de limites, foco territorial, ausência de pontos, fontes/links, respostas tardias e fallback), TypeScript e compilação de produção. Matriz existente actualizada somente em RF-GEO-009, conservando o estado global e as provas anteriores. A compilação local não constitui publicação adicional no servidor nem revisão visual do endereço público; nenhuma dessas validações é declarada concluída neste delta.
+
## 29/10/2026 — reconciliação da pasta principal
Reconciliação local solicitada pela Tempo: ramo
@@ -7735,3 +7868,148 @@ Dois testes frontend dirigidos passaram: contagens/proveniência desconhecida/re
**ACT-02 permanece parcial:** este recorte implementa controlo das camadas já existentes e explicitação de cobertura. Não cria camadas factuais de recursos, infra-estruturas, mão-de-obra ou potencial económico, nem declara completa a cobertura provincial/distrital. Backend, geometrias, divulgação, permissões, fontes, datas e cálculo preservados; sem importações ou escrita no activo.
**Visual pendente pela equipa:** na candidata, conferir os mapas da ficha de oportunidade, carteira e zona de investimento; ocultar/repor cada camada e ambas, conferir contagens de investimentos/marcadores, fonte/data ausentes e fichas sem coordenadas, e mudar filtros territoriais. Registar revisão, perfil, percurso, esperado/observado e evidência nesta matriz. O painel de contexto administrativo separado mantém o seu âmbito. Sem instalação ou avanço de main.
+### 02/11/2026 — histórico administrativo dos formulários do Balcão
+
+AUD-CHECKLIST-01, incremento local parcial: o editor permite consultar definições anteriores, dez por página, com perguntas, condições, fonte, data, motivo e identificadores dos intervenientes quando registados. Inclui serviços históricos retirados da configuração actual, exclusivamente para consulta; não os torna novamente publicáveis. A consulta reutiliza a autorização administrativa existente e não devolve respostas dos requerentes. Pedidos anteriores conservam a versão e o conteúdo submetido. Respostas tardias de outro serviço/página não substituem a selecção actual; falha, histórico vazio e repetição têm estados distintos.
+
+Provas: quatro testes Feature/91 asserções (`storage/logs/desk-service-history-feature-20261102.log`), três testes frontend do editor/histórico, PHPStan sem erros, tipos e lint/formatação aprovados. A conferência visual permanece pendente pela limitação do controlo do navegador já registada. Sem instalação, alterações no activo ou encerramento da parametrização transversal.
+
+Reconciliação da integração: a repetição fiscal com referências preparadas em QA resultou em 162 testes, 106 aprovados, nove falhas e 47 erros (`integration-fiscal-reference-retry-20261102.log`). Persistem dependências de acervos/identidades históricas e casos a investigar; não constitui aprovação global. Conferidos por SHA-256 os 63 artefactos históricos protegidos: quatro alterados pelos ensaios foram repostos, preservando separadamente os resultados novos; zero divergências finais (`integration-output-reconciliation-20261102.json`). Não foram inventadas oportunidades publicadas ou decisões para satisfazer testes. ACT-16: o proprietário respondeu «ainda nao» quanto a prioridades e traduções de línguas nacionais; essa definição continua pendente, sem impedir os restantes desenvolvimentos.
+
+### 02/11/2026 — perguntas encadeadas e preenchimento conforme a versão do formulário
+
+AUD-CHECKLIST-01, continuidade local: reproduzidos dois erros no código anterior. Uma resposta conservada num campo oculto activava uma pergunta descendente na página e tornava-a obrigatória no servidor. A avaliação percorre agora as condições dos antecessores, independentemente da ordem das perguntas; ocultar uma pergunta conserva os valores, e voltar a activar o ramo recupera-os. Perguntas efectivamente aplicáveis continuam obrigatórias na submissão, com rascunhos incompletos permitidos. Não se alteram as definições ou submissões históricas.
+
+A criação de pedidos também preenchia `title`, `description` e `regime` mesmo depois de retirados da nova definição, e podia escolher `unknown` quando essa opção já não existia. O preenchimento respeita agora os campos e opções da versão utilizada; a reutilização do contexto só aplica valores compatíveis com a validação do campo. Não escolhe arbitrariamente outra opção. A validação de dados introduzidos pelo requerente permanece no servidor, incluindo a recusa de campos não configurados. O ensaio operacional reproduziu a falha anterior e demonstrou criação, gravação e submissão das novas versões, opção obrigatória por escolher e preservação integral do pedido antigo.
+
+Provas: regressões anteriores em `storage/logs/desk-request-conditions-before-20261102.log` e `desk-schema-prefill-before-20261102.log`; quatro testes frontend do pedido/editor/histórico aprovados, PHPStan, tipos, lint/formatação e compilação local aprovados. Resultados Feature individuais: 21 testes/382 asserções no Balcão após a correcção das condições e um teste/34 asserções do percurso de preenchimento por versão. A verificação conjunta final usa `desk-forms-combined-feature-20261102.log`. As provas são técnicas e sintéticas em bases descartáveis, porta 55441; não equivalem a conferência visual ou aceitação por requerentes reais. Sem instalação ou escrita no activo; outras checklists, consumidores e critérios transversais continuam parciais.
+
+Verificação conjunta final deste incremento: **22 testes Feature/416 asserções aprovados** em `storage/logs/desk-forms-combined-feature-20261102.log`. Os quatro testes frontend, PHPStan, tipos, lint sem avisos e compilação também passaram. Recibo e SHA-256 das fontes em `desk_forms_increment_20261102` de `local-validation-20261029.json`; resultados anteriores preservados nos campos próprios. Não altera o estado parcial do requisito nem substitui as verificações visuais pendentes.
+
+### 02/11/2026 — verificações e recibos respeitam as perguntas aplicáveis
+
+Continuidade local de AUD-CHECKLIST-01 e do percurso adaptativo de 23/10: reproduzidos avisos para completar financiamento em formulários sem essas perguntas e bloqueio da submissão por valores conservados em perguntas financeiras ocultas. A análise passa a utilizar a definição imutável do pedido e a mesma avaliação dos antecessores usada na validação. Só compara investimento/financiamentos quando as três perguntas se aplicam; não solicita localização ausente ou não aplicável. As diferenças financeiras aplicáveis continuam a impedir submissão, e dados aplicáveis em falta continuam indeterminados, sem substituição por zero.
+
+O recibo HTML distingue os dados aplicáveis das respostas conservadas de perguntas não aplicáveis, preservando todos os valores e o escape de conteúdo. Usa as condições e rótulos da versão submetida, mesmo após publicação de outra versão. A descarga técnica original, o conteúdo cifrado da submissão e as permissões permanecem preservados. Consumidores que renderizam directamente a vista continuam a funcionar com o contrato anterior. Esta separação é uma apresentação do histórico, não a eliminação das respostas.
+
+Corrigida também a possibilidade de publicar uma definição impossível de preencher: conservar a localização retirando a sua fonte, ou fazendo a fonte depender de condições mais restritas. A publicação exige que a fonte esteja disponível sempre que a localização se aplica, permitindo as mesmas condições, condições de antecessores mais abrangentes ou ausência de condição. Retirar ambas as perguntas continua permitido. A exigência de fonte da localização já existia no servidor; este incremento valida a sua coerência antes da publicação, sem criar uma nova competência ou regra organizacional. Uma localização conservada num ramo não aplicável não exige fonte oculta; quando aplicável, mantém essa exigência.
+
+Provas técnicas em QA descartável, porta 55441: **25 testes conjuntos/467 asserções**, um teste de compatibilidade do recibo/seis asserções e um teste de localização condicional/cinco asserções, todos aprovados. PHPStan sem erros e Pint aprovados. Logs: `desk-analysis-schema-combined-20261102.log`, `desk-receipt-compatibility-20261102.log`, `desk-location-applicability-20261102.log` e `desk-analysis-schema-phpstan-20261102.log`, em `storage/logs`. Falhas anteriores reproduzidas nos logs `desk-form-analysis-before-20261102.log` e `desk-location-schema-before-20261102.log`. Referências territoriais do teste reutilizam o pacote já verificado pelo seeder existente; não representam uma implantação real. Recibo e hashes em `desk_analysis_scope_increment_20261102` de `local-validation-20261029.json`.
+
+Reutilizadas as provas anteriores de tipos, frontend e compilação: este delta só altera PHP, vistas Blade e testes. Conferência visual dos recibos e do percurso permanece pendente pela limitação de controlo do navegador registada. Não houve instalação, novas permissões, migração de schema ou escrita no activo. O requisito transversal continua parcial; esta prova não encerra outras checklists nem a integração fiscal global.
+
+### 02/11/2026 — ACT-20261029-11: preferências e alertas do catálogo público
+
+Incremento local de ACT-11 e MASTER-471012ab-0124: as notificações de manifestações já existentes foram preservadas e passaram a receber também correspondências do catálogo público de oportunidades. Em `/investidor/notifications`, cada conta verificada pode activar voluntariamente, escolher sector, província e modalidade, definir frequência, recuperar/alterar preferências e cancelar. O servidor utiliza sempre a conta autenticada, valida os códigos contra as opções divulgáveis e exige confirmação para activar; cancelar exige apenas a versão, sem depender de opções entretanto retiradas. Preferências cifradas, versão, consentimento e auditoria nominativa; repetição da mesma gravação não cria outra versão. Alterações concorrentes incompatíveis devolvem conflito, sem substituir silenciosamente a configuração guardada.
+
+O gerador reutiliza `InvestmentCatalogue::query`, incluindo hierarquia territorial, publicação, exclusão de exemplos, dados privados e publicações futuras. A activação, reactivação ou mudança de critérios regista as identidades actualmente públicas como ponto de partida, sem avisos retroactivos. As novas disponibilizações compatíveis geram uma notificação por conta/oportunidade, mesmo quando a data documental de publicação é anterior à activação; não se usa essa data como cursor de descoberta. A correspondência conserva fonte, data publicada quando disponível, versão e critérios usados, sem copiar dados privados ou afirmar rentabilidade/elegibilidade. Uma oportunidade retirada deixa de aparecer ou ser aberta através da notificação; o registo e o histórico não são apagados. Referência territorial/sectorial entretanto indisponível suspende apenas a correspondência afectada, com informação visível e possibilidade de cancelar; não bloqueia os restantes subscritores.
+
+Frequências implementadas: próxima verificação, intervalos de 24 horas ou de sete dias. Canal disponível: notificações no próprio portal. `investmoz:dispatch-opportunity-alerts` está registado no agendador existente a cada cinco minutos, sem sobreposição; a execução periódica depende do agendador da instalação. O limite técnico de 200 correspondências por conta e execução mantém o restante lote pendente para a execução seguinte, sem o consumir. A entrega e o marcador de descoberta partilham transacção; falha não consome a oportunidade nem avança a próxima execução. Cancelamento e geração serializam a alteração da mesma preferência; notificações anteriores e acompanhamento de manifestações permanecem disponíveis.
+
+Migração instalável `2026_11_02_190000_investment_opportunity_alerts.php`: estende as notificações existentes com uma origem alternativa, preserva as linhas antigas e cria preferências/marcadores de descoberta. A origem de cada notificação é exactamente uma manifestação ou oportunidade. A reversão recusa eliminar preferências ou histórico de alertas existentes. O ensaio de actualização foi executado com uma notificação anterior não vazia e conservou todos os seus valores. Sem migração, a página antiga permanece operacional; a instalação do incremento segue as migrações normais do produto, não caminhos ou contas de desenvolvimento.
+
+Âmbito ainda parcial: esta entrega não integra concursos ou incentivos de outros catálogos, não disponibiliza email/SMS, não confirma canais externos e não instala o agendador no destino. Esses percursos e a conferência visual continuam pendentes; a geração no portal não os substitui. Desenvolvimento e dados sintéticos apenas em QA isolada, porta 55441. Sem instalação, mensagens externas, novas competências organizacionais ou alterações no activo. Provas técnicas e hashes conservados no campo `opportunity_alerts_increment_20261102` do recibo existente `local-validation-20261029.json`.
+
+Verificação final: **16 testes Feature/253 asserções**, incluindo os nove testes existentes da área de manifestações, e **dois testes frontend**, todos aprovados. PHPStan, tipos, lint sem avisos, formatação e compilação passaram; `git diff --check` sem erros. Logs em `storage/logs/opportunity-alerts-verified-feature-20261102.log`, `opportunity-alerts-frontend-20261102.log`, `opportunity-alerts-verified-phpstan-20261102.log`, `opportunity-alerts-final-types-20261102.log`, `opportunity-alerts-final-check-20261102.log` e `opportunity-alerts-final-build-20261102.log`. Fonte candidata fixada por hashes no recibo; provas anteriores preservadas, sem revisão do estado do activo por inferência.
+
+### 02/11/2026 — pesquisa rápida: «plantio de algodao»
+
+Pedido específico da Tempo durante a continuidade: a barra «Pesquisa rápida de oportunidades» deve trazer os resultados solicitados; exemplo fornecido pelo proprietário, «plantio de algodao». A barra já encaminhava `q` para `/oportunidades`, mas os motores tratavam a frase inteira como uma substring e distinguiam a acentuação. A correspondência territorial pelo texto também não abrangia o caso de uma oportunidade localizada num distrito cujo nome provincial só estivesse no cadastro.
+
+O motor comum `OpportunityTextSearch` é agora usado pelo catálogo e pela API anterior: combina todas as palavras significativas, ignora preposições/artigos correntes, normaliza maiúsculas e acentos e reconhece as variantes delimitadas plantio/plantação/cultivo/semeadura. Não usa «produção» isolada como sinónimo de plantio: produção de óleo, fiação e descaroçamento não passam a cultivo por essa aproximação. Procura apenas os campos publicados, sectores e relações/territórios públicos autorizados; uma província abrange os seus descendentes documentados. `%` e `_` introduzidos pelo utilizador são caracteres literais, não curingas de SQL. Os filtros adicionais, ordenação, paginação, publicação, privacidade e exclusão de exemplos continuam a aplicar-se.
+
+Quando todos os termos não têm correspondência e existe um termo de cultivo acompanhado de assunto/localização, a página pode apresentar até seis fichas relacionadas com o assunto numa secção separada. O total principal continua zero e os filtros não são alargados. As fichas são identificadas como relacionadas, com resumo visível e possibilidade de consultar explicitamente essa pesquisa; não são reclassificadas como plantio. Nas fontes incluídas em `corridor-investment-opportunities.json`, as três entradas de algodão descrevem descaroçamento, fiação/óleo ou transformação, não uma ficha específica de cultivo. Nenhuma nova oportunidade, parcela, disponibilidade, promotor ou aprovação foi inventada para preencher resultados.
+
+A barra usa o valor efectivo do formulário, incluindo preenchimento automático do navegador, e conserva o limite de 120 caracteres do servidor. O formulário possui destino GET próprio para funcionar também sem a intercepção JavaScript. O texto pesquisado acompanha a consulta e o regresso das fichas relacionadas; resultados relacionados anteriores ficam ocultos durante carregamento ou erro.
+
+Provas dirigidas: três testes Feature/93 asserções em QA descartável, incluindo o exemplo do proprietário, variantes de cultivo, acentos, palavras em campos distintos, província/distrito, duas APIs, página, mapa, exportação, fonte privada/futura/eliminada, curingas literais e separação entre cultivo e transformação. Mais seis testes de compatibilidade existentes/112 asserções passaram na QA com as referências já preparadas; dados protegidos permaneceram intactos. Cinco testes frontend passaram, cobrindo barra/autofill/destino nativo, apresentação dos relacionados e transporte/paginação existentes. PHPStan, tipos, formatação e lint sem avisos aprovados. Logs `quick-opportunity-search-*20261102.log` em `storage/logs`; recibo final e hashes em `quick_opportunity_search_increment_20261102` de `local-validation-20261029.json`.
+
+Âmbito local: testes com fichas sintéticas, sem alteração de cadastros ou publicações no activo, sem instalação remota e sem nova prova visual. O incremento não declara existir uma oportunidade real de plantio quando a fonte não a fornece. A integração dos alertas de concursos estava em desenvolvimento quando este pedido recebeu prioridade; o incremento anterior de alertas de oportunidades conserva a sua prova própria e o alargamento a concursos ainda não é declarado concluído.
+
+Compilação final deste recorte de pesquisa aprovada (`quick-opportunity-search-build-20261102.log`), com os avisos de fontes/chunks já conhecidos. Resultado final: nove testes Feature/205 asserções e cinco frontend aprovados, PHPStan/tipos/lint/formatação aprovados; recibo `quick_opportunity_search_increment_20261102` emitido com os hashes das dez fontes directamente alteradas. O exemplo «plantio de algodao» foi conferido novamente na fonte final. Sem instalação no activo nem declaração de nova oportunidade real por inferência.
+
+### 02/11/2026 — ACT-11: alertas de concursos integrados nas preferências existentes
+
+Retomado o incremento interrompido pela correcção da pesquisa rápida. A pendência de concursos do recorte anterior passa a ter implementação local demonstrada: em `/investidor/notifications`, a pessoa escolhe oportunidades, concursos ou ambos, com confirmação explícita. Preferências anteriores continuam exclusivamente em oportunidades; a migração não acrescenta subscrições. Sector e província são comuns; modalidade de oportunidade só se aplica a oportunidades e regime só a concursos. O servidor remove os filtros sem aplicação e valida a fonte escolhida. Cancelar conserva as notificações e não depende da disponibilidade do catálogo ou das opções antigas.
+
+`Procurement::publicQuery` concentra a consulta pública já utilizada pelo catálogo, agora partilhada com o gerador. Mantém filtros, hierarquia territorial, configuração de disponibilidade e a ligação à versão publicada; rascunhos e alterações ainda não publicadas ficam fora dos alertas. O gerador considera o acto actualmente publicado de cada concurso, não promete entregar todos os actos intermédios que possam ser substituídos entre verificações. A activação, reactivação ou alteração de fontes/critérios estabelece como ponto de partida as versões actualmente públicas, sem avisos retroactivos. Cada conta/versão de acto tem uma identidade de entrega única. Não cria acompanhamentos em `portal_tender_watches`, propostas, candidaturas ou decisões.
+
+O aviso conserva concurso, versão/acto, referência, origem, data de publicação e versão/critérios da preferência. Usa uma projecção fixa do conteúdo público, sem notas internas, contactos não autorizados, rascunhos ou anexos. A consulta distingue data de publicação e recepção do aviso, liga ao concurso e pede a leitura das condições actuais. Actos anteriores continuam legíveis enquanto o concurso tem publicação pública, sem substituir os respectivos avisos por dados da versão nova. Retirada da publicação ou indisponibilidade do módulo oculta os avisos afectados e impede a leitura pela rota de marcação; o histórico permanece guardado. Indisponibilidade de concursos não suspende as oportunidades seleccionadas.
+
+Mantidos canal no portal, frequência escolhida, autorização da própria conta e motor transaccional existentes. Cada catálogo tem um lote limitado a 200 correspondências por execução; ambos recebem processamento no mesmo ciclo, evitando que uma fila de oportunidades impeça concursos. Restantes itens continuam pendentes, sem avanço silencioso. Falha da entrega de concursos reverte também as entregas/marcadores de oportunidades desse ciclo da pessoa e permite repetir sem duplicações. O comando e agendador existentes continuam a ser usados, sem segundo serviço de notificações.
+
+Migração adicional `2026_11_02_200000_investment_tender_alerts.php`: fontes seleccionadas, origem alternativa da notificação e marcador por versão de concurso. Preserva o conteúdo, versão, consentimento, identificador e fontes anteriores; a origem de cada notificação continua exactamente uma. Reversão recusa eliminar preferências de concursos ou histórico. A sequência de actualização/reversão das duas migrações foi conferida com preferências e notificações anteriores não vazias, sem converter o ensaio sintético em aceitação real.
+
+Provas finais: **21 testes conjuntos/315 asserções**, **um teste de processamento de lotes/sete asserções** e **oito testes de compatibilidade do módulo de concursos/285 asserções**, todos aprovados: 30 testes distintos/607 asserções. O teste de lotes usa 201 oportunidades e um concurso, confirma entrega de concurso no primeiro ciclo e conservação da oportunidade restante. Seis testes frontend (quatro de alertas e dois da pesquisa rápida), PHPStan, tipos, lint sem avisos, Pint e compilação aprovados. Logs `tender-alerts-verified-feature-20261102.log`, `tender-alerts-batch-fairness-20261102.log`, `tender-alerts-procurement-compatibility-20261102.log`, `tender-alerts-frontend-20261102.log`, `tender-alerts-verified-phpstan-20261102.log`, `tender-alerts-final-types-20261102.log`, `tender-alerts-final-check-20261102.log` e `tender-alerts-build-20261102.log`, em `storage/logs`. Recibo/hashes em `tender_alerts_increment_20261102` de `local-validation-20261029.json`.
+
+ACT-11 permanece parcial: incentivos de outros catálogos e canais externos não implementados neste incremento. Disponibilização, activação do agendador no destino e conferência visual permanecem pendentes. Somente código local e ensaios sintéticos em bases isoladas na porta 55441; sem instalação, dados reais, mensagens externas, novas competências ou alteração da configuração activa. As provas anteriores de pesquisa, oportunidades e concursos mantêm o seu âmbito; o saldo de concursos do recorte anterior foi actualizado, sem apagar o histórico.
+
+### 02/11/2026 — AUD-FUND-01: núcleo do catálogo de fundos em desenvolvimento
+
+Criados serviço FundingProgrammes e migração 2026_11_02_210000_funding_programme_catalogue.php, ainda sem instalação no activo. Rascunho separado de versões publicadas imutáveis, prévia vinculada por hash, controlo de concorrência, publicação idempotente, retirada auditada e interesses privados por pessoa/programa, conservando a versão guardada. Usa a competência editorial existente; não atribui competência para concessão de financiamento. Critérios distinguem correspondência, divergência, informação desconhecida e não aplicabilidade, sem excluir automaticamente ou enviar candidatura. Janelas históricas encerradas não representam encerramento do próprio fundo. Cobertura territorial e sectores rejeitam combinações incoerentes.
+
+Documentos são incorporados por identificador, versão e checksum. A resolução de descarga confere novamente publicação, direitos e segurança na biblioteca e reutiliza VerifiedDocumentBinary; a substituição do documento não altera silenciosamente o binário citado. Este percurso ainda precisa de testes específicos de descarga e ligação HTTP.
+
+Prova local sintética em PostgreSQL isolado: FundingProgrammesTest, dois testes/dez asserções aprovados (storage/logs/funding-programmes-feature-20261102.log). Cobrem publicação repetida sem duplicação, rascunho sem alteração da versão pública, nova versão sem reescrever interesse anterior, remoção limitada à própria pessoa, janela histórica, aplicabilidade desconhecida e bloqueio de publicação de conteúdo explicitamente demonstrativo. PHPStan sem erros (funding-programmes-phpstan-20261102.log), Pint e git diff --check aprovados. Não constituem prova de todo o catálogo.
+
+AUD-FUND-01 continua incompleto: faltam controladores/rotas, catálogo e editor pela interface, filtros, testes de autorização/conflitos/documentos e validação visual. Referências reais FDEL ainda não incorporadas nem publicadas; não inferir janela aberta ou condições financeiras de páginas demonstrativas. Próxima acção: completar o percurso público/editorial e as provas, mantendo ACT-12 e alertas de incentivos pendentes até integração efectiva.
+
+### 02/11/2026 — AUD-FUND-01: primeiro percurso HTTP público
+
+Ligadas rotas /fundos, ficha por UUID, conferência de critérios, guardar/remover interesse autenticado e descarga por programa/versão/recurso. Controlador FundingProgrammeController e páginas funding/index/show reutilizam a estrutura visual e o transporte CSRF existentes. Consulta publicada paginada, palavras-chave e tipo de apoio; critérios por tipo de candidato e janela seleccionada, respostas não persistidas, explicação e fonte por critério. A ficha distingue janela encerrada de programa, mostra datas e canal externo documentados, disponibilidade dos documentos e versão privada guardada, incluindo indicação de publicação posterior. Respostas HTTP com estado pessoal ou resultados de conferência usam private/no-store. Não existe envio externo ou candidatura automática.
+
+Provas incrementais: FundingProgrammesTest com dois testes/25 asserções aprovados, incluindo rotas públicas, pesquisa sem resultado, exigência de autenticação para guardar e divergência de critério. PHPStan do serviço/controlador e types:check aprovados. Logs funding-programmes-http-20261102.log, funding-programmes-http-phpstan-20261102.log e funding-programmes-types-20261102.log. A compilação e lint são registados separadamente após conclusão; não deduzir aprovação do arranque.
+
+Continua em desenvolvimento: editor editorial, lista dos interesses, navegação, filtros territoriais/sectoriais explicados e respectivos testes, testes de descarga/versionamento/conflitos, referências reais FDEL e validação visual. Nada publicado ou migrado no activo. Este incremento não encerra AUD-FUND-01, ACT-12 ou a auditoria geral.
+
+### 02/11/2026 — AUD-FUND-01: lista privada e navegação
+
+Implementada /fundos/guardados, autenticada e verificada, paginada e limitada no servidor à pessoa da sessão. Lista conserva título e versão efectivamente guardados, sem projectar rascunho ou substituir a referência pela publicação nova. Após retirada pública conserva apenas a referência privada mínima, informa indisponibilidade e permite remoção. Não expõe corpo/documentos da publicação retirada. Guardar continua distinto de candidatura ou contacto externo. Links no catálogo/ficha e navegação; menu público depende da instalação das tabelas, link da lista privada depende também de autenticação.
+
+FundingProgrammesTest: dois testes/71 asserções aprovados, incluindo isolamento entre contas, versão preservada, indisponibilidade pública após retirada e remoção pela própria conta. PHPStan serviço/controlador sem erros, log funding-programmes-saved-phpstan-20261102.log; testes HTTP em funding-programmes-saved-20261102.log. A compilação iniciada no incremento anterior terminou com código zero (funding-programmes-build-20261102.log); não comprova automaticamente os ficheiros posteriores desta lista. Verificações frontend finais deste incremento registadas nos logs funding-navigation-20261102.log e funding-programmes-saved-*. Mantêm-se pendentes editor, filtros geográficos/sectoriais, testes de documentos/conflitos/permissões e validação visual; sem instalação no activo.
+
+### 02/11/2026 — AUD-FUND-01: edição editorial ligada ao catálogo
+
+Implementadas gestão paginada, criação/edição de rascunhos, prévia, publicação e retirada em /management/fundos. Reutiliza DocumentManagementAccess::catalogueEditor no servidor em cada operação; não atribui competência financeira nem depende da activação de concursos. Referências limitadas a cadastros e documentos autorizados/públicos; formulário reutiliza entidade gestora, sectores, territórios e biblioteca, com critérios comuns e critérios por janela, fonte/edição/data, âmbito e datas aplicáveis. Mudança para janela desconhecida/contínua limpa datas inaplicáveis. Publicação exige rascunho guardado, prévia conferida, confirmação expressa, motivo e hash válido; efeitos sobre versões e interesses explicados. Histórico de publicação disponível no editor. Link de gestão no catálogo só para competência efectiva.
+
+Publicações recebem sequência própria crescente quando a prévia muda por actualização autorizada do cadastro, mesmo sem alteração do rascunho; snapshots anteriores não são reescritos. O hash da prévia inclui os dados efectivamente reutilizados. Controlo de versão do rascunho continua independente e obrigatório.
+
+Prova: FundingProgrammesTest passou quatro testes/91 asserções (funding-editor-feature-20261102.log), incluindo formulários/gestão, editor sem módulo de concursos, recusa de conta sem autoridade, hash incorrecto, gravação obsoleta e nova publicação com alteração do nome no cadastro sem colisão ou reescrita histórica. Tipos aprovados (funding-editor-final-types-20261102.log); verificação estática final, lint após correcção de um aviso de tipagem e compilação ainda em acompanhamento. A compilação anterior da lista privada terminou com código zero; não comprova automaticamente este editor.
+
+Ainda pendentes: filtros territoriais/sectoriais com tratamento explícito de desconhecidos, ensaios completos de documentos/versões/concorrência e visual, referências FDEL reais e integração de incentivos nos alertas. Editor implementado localmente não encerra AUD-FUND-01 ou ACT-12. Sem migração, publicação ou alteração de contas no activo.
+
+Fecho das verificações do editor em 02/11/2026: PHPStan sem erros, lint/formatação sem avisos e compilação terminaram aprovados (funding-editor-final-phpstan-20261102.log, funding-editor-final-check-20261102.log e funding-editor-build-20261102.log). Tipos aprovados no processo final 44973. Matriz AUD-FUND-01 reconciliada como parcial, preservando histórico; recibo funding_editor_increment_20261102 com hashes das fontes/prova, sem declaração de cobertura integral. Próxima acção: filtros territoriais/sectoriais e testes específicos de documentos/versionamento.
+
+### 02/11/2026 — AUD-FUND-01: filtros territoriais e sectoriais
+
+Catálogo público passou a filtrar por sector, local, situação de uma janela e inclusão explícita de âmbitos desconhecidos. Cobertura nacional abrange os locais; cobertura provincial permite pesquisar os seus distritos; um programa restrito a distrito aparece como cobertura parcial quando se pesquisa a província. Origem por confirmar é assinalada e pode ser excluída pela opção «apenas âmbito documentado». Não transforma ausência de informação em correspondência confirmada nem concessão de elegibilidade.
+
+O filtro territorial/sectorial refere-se ao programa, não a todas as chamadas. O texto da interface explica a distinção e o filtro de estado significa pelo menos uma janela nesse estado, sem confirmar abertura no local escolhido. Janelas fechadas, futuras, com data-limite no próprio dia e sem data confirmada são tratadas separadamente; programas sem janelas entram apenas no estado por confirmar. Fontes territoriais/sectoriais utilizadas são preservadas por versão, incluindo nomes e caminhos hierárquicos, sem reescrever snapshots quando o cadastro muda. A ficha mostra os locais e sectores efectivamente incorporados, também nas janelas locais.
+
+Prova inicial: cinco testes/184 asserções aprovados em funding-filters-feature-20261102.log, abrangendo os quatro testes anteriores e as combinações dos filtros; PHPStan, tipos e lint sem avisos aprovados (funding-filters-phpstan-20261102.log, funding-filters-types-20261102.log, funding-filters-check-20261102.log). Teste adicional de documentos em acompanhamento; primeira execução corrigida por campo obrigatório ausente na fixture sintética, sem mudança de regra do produto. Compilação em acompanhamento. Sem escrita no activo.
+
+Fecho do incremento de filtros/documentos, 02/11/2026: **seis testes/204 asserções aprovados**, incluindo o teste específico de descargas (funding-filters-documents-feature-20261102.log). Binário alterado sem nova análise, metadados de análise pendente/checksum divergente, direitos restritos, classificação privada, recurso retirado e versão substituída recusados; prévia anterior à mudança do documento rejeitada, publicação nova distinta e snapshot anterior conservado. Estes estados são fixtures sintéticas, não prova de execução de antivírus real. PHPStan, tipos, lint sem avisos/formatação e compilação aprovados; processos terminais conferidos, logs funding-filters-*. Recibo funding_filters_increment_20261102 com hashes, matriz AUD-FUND-01 reconciliada sem apagar provas anteriores. Ainda não demonstra concorrência com trabalhadores simultâneos, fontes reais incorporadas, visual ou instalação no destino. Próxima acção: preparar as referências oficiais FDEL já identificadas, distinguindo programa de chamada histórica, e completar os ensaios restantes; incentivos nos alertas continuam pendentes.
+
+### 02/11/2026 — AUD-FUND-01: referência oficial FDEL preparada pela interface
+
+Incluído pacote instalável database/data/funding-references.json e serviço FundingProgrammeReferences, com edição, URLs, referências, datas efectivas de consulta e hashes dos exemplares. Usa o Decreto 4/2025 (BR I/43, 05/03/2025) e aviso municipal CMCT com prazo 20/10/2025. Um programa com chamada histórica associada; não cria duas fichas, não transforma o aviso numa chamada actual e não atribui o município a toda a província. Vínculo cartográfico municipal e associação ao cadastro sectorial permanecem explícitos por completar. Não foram transportadas taxas ou montantes para motores financeiros/fiscais; critérios são um extracto informativo com acesso às fontes completas.
+
+Percurso /management/fundos/referencias/fdel: prévia legível das condições/fontes, seguida de preparação de rascunho pela competência editorial existente. Hash vincula o pacote exibido; referência alterada exige nova prévia. Código estável e bloqueio transaccional reutilizam ficha existente sem sobrescrever edições ou acrescentar chamadas. Preparação auditada conserva edição, hash do pacote e hashes das fontes; publicação continua separada no editor existente. Não há consulta remota obrigatória no cliente, novas contas, destinatários ou envio de candidatura.
+
+Exemplares recolhidos e conferidos em storage/app/private/funding-sources-20261102 (manifest.json); PDF e HTML com SHA-256 correspondente ao pacote. São cópias privadas de desenvolvimento, sem afirmação de antivírus executado e sem publicação automática na biblioteca. A página municipal falhou no leitor web mas a recolha HTTP directa devolveu o conteúdo esperado (título, prazo e requisitos); não confundir falha de ferramenta com indisponibilidade da fonte.
+
+Prova: FundingProgrammesTest passou sete testes/235 asserções (funding-references-feature-20261102.log), incluindo preparação sem publicação, recusa de hash errado, chamada histórica fechada, referência cartográfica desconhecida, proveniência auditada, repetição sem duplicação/substituição e conta sem competência recusada. PHPStan e lint/formatação sem avisos aprovados; tipos e compilação ainda em acompanhamento nos respectivos processos. Continuidade: verificar os resultados terminais, manter concorrência e visual pendentes, completar a correspondência territorial/sectorial pelas fontes autorizadas e integrar os incentivos nos alertas. Sem alteração no activo.
+
+Fecho das verificações das referências em 02/11/2026: sete testes/235 asserções, PHPStan, tipos, lint sem avisos/formatação e compilação aprovados, com processos terminais conferidos. Logs funding-references-*; recibo funding_references_increment_20261102 inclui hashes e manifesto de origem. AUD-FUND-01 continua parcial, com concorrência, visual, vínculos ao cadastro, alertas e disponibilização ainda pendentes. Próxima acção: ensaiar concorrência/repetição em base descartável e completar os restantes percursos, sem alterar o activo.
+
+### 02/11/2026 — AUD-FUND-01: concorrência real e impasse corrigido
+
+Criado tools/verify-funding-concurrency.php, exclusivamente CLI, com ambiente testing, PostgreSQL em 127.0.0.1:55441 e nome ancorado funding_concurrency_20261102[a-z]?_test. Confere ligação efectiva, recusa configuração em cache, obtém a guarda de execução QA e exige base sem pessoas/fichas antes de criar cenário. Não repõe, apaga ou redefine registos existentes; contexto de cada trabalhador fica privado e vinculado à mesma base e identidade sintética. Recusa sem ambiente explícito e recusa de repetição numa base não vazia foram verificadas. Migrações apenas em três bases novas descartáveis, mantendo os resultados anteriores.
+
+Cinco cenários, cada um com dois processos PHP e sessões PostgreSQL independentes: preparação da mesma referência, gravação com a mesma versão, publicação da mesma prévia, guardar interesse da mesma pessoa e retirada contra interesse da mesma pessoa. O controlador de ensaio mantém um bloqueio até observar ambos os processos à espera no PostgreSQL; só depois liberta. A primeira tentativa do verificador falhou por reter o snapshot estatístico na transacção de observação; foi corrigida com pg_stat_clear_snapshot, preservando o log inicial em vez de declarar falha do produto.
+
+Com a observação corrigida, reproduzido **SQLSTATE 40P01** no quinto cenário: interesse conservava bloqueio FOR UPDATE na conta enquanto esperava pela ficha, e retirada conservava a ficha enquanto a inserção de auditoria precisava de KEY SHARE na conta. A correcção técnica usa **FOR NO KEY UPDATE** para serializar interesses/remover interesse pela pessoa, permitindo a referência de auditoria, sem mudar competências, decisões ou chaves da conta. A base de reprodução e o log de falha permanecem preservados.
+
+Após a correcção, os cinco cenários passaram em funding_concurrency_20261102c_test: uma referência, uma versão publicada, um interesse e uma auditoria por preparação/publicação/interesse/retirada. A gravação concorrente recusou uma versão obsoleta; retirada concluiu e o interesse concorrente recebeu indisponibilidade, preservando a referência anterior. Consulta final confirma uma referência privada válida e nenhuma publicação activa. São pares de processos com sobreposição observada, não prova de carga nem de todas as intercalações possíveis.
+
+Provas: funding-concurrency-before-20261102.log (verificador inicial), funding-concurrency-baseline-20261102.log (impasse do produto), funding-concurrency-after-20261102.log (cinco cenários aprovados), funding-concurrency-preservation-20261102.json, e logs guard-environment/guard-existing. Sete Feature/235 asserções de compatibilidade aprovados (funding-concurrency-feature-20261102.log), PHPStan sem erros e Pint/sintaxe/diff aprovados. Frontend não alterado; conservadas provas de tipos/lint/compilação do incremento anterior. Matriz e recibo funding_concurrency_increment_20261102 reconciliados. Sem alterações no activo. Próxima acção: integração dos fundos/incentivos nos alertas existentes; vínculos de referência, visual e disponibilização continuam pendentes.
diff --git a/docs/investmoz/v2/auditoria-portal/backlog.md b/docs/investmoz/v2/auditoria-portal/backlog.md
index 16552c4d..532cabce 100644
--- a/docs/investmoz/v2/auditoria-portal/backlog.md
+++ b/docs/investmoz/v2/auditoria-portal/backlog.md
@@ -1058,6 +1058,9 @@ A fonte única continua `matriz-requisitos.csv`; `backlog-priorizado.csv` tem os
- **AUD-CAPITAL-02 — Guião de admissão à Bolsa de Valores de Moçambique, distinguindo Bolsa, regulador e operadores**: Guião da Bolsa por segmento, intervenientes e requisitos não implementado. Reutilizar: Biblioteca, checklist e percurso existentes. 16–32 h após correspondências normativas; não preencher taxas/prazos ausentes. Fonte/secção e aceitação completas na linha existente.
- **AUD-CHECKLIST-01 — Editor de checklists e formulários configuráveis, publicação de versões e preservação de submissões anteriores**: Checklists existem em configuração; editor/versionamento administrativo sem código e adaptação de submissões antigas não demonstrados. Reutilizar: Configurações existentes, schema, biblioteca e auditoria. 24–40 h após política de alteração; reaproveitar motor, sem catálogo paralelo. Fonte/secção e aceitação completas na linha existente.
+ Continuidade 02/11/2026: primeiro editor de formularios do Balcao implementado localmente, reutilizando versoes imutaveis, validacao e ambito administrativo existentes. Conferencia anterior/nova e efeito sobre pedidos futuros; pedidos/submissoes v1 preservados apos v2. 18 Feature/325 assercoes iniciais e um teste frontend passaram. Provas finais e limites no manual; sem instalacao ou prova visual, restantes tipos/configuracao transversal parciais.
+
+
### Decisões que não bloqueiam trabalho independente
- **AUD-REL-02**: Os pares das seis oportunidades legadas com projetos/âncoras/clusters continuam indeterminados. Indicar pares com fundamento documental; não bloquear as oportunidades independentes.
@@ -3033,6 +3036,10 @@ Execução detalhada e critérios: [matriz consolidada](../../consolidated-revie
| ACT-20261029-15 | Dados abertos/API | APIs e fontes existentes | Inventariar interfaces oficiais, implementar actualização/rastreabilidade e documentar API dos dados divulgáveis. | Consulta de parceiro demonstrada, com contrato, versão, origem/data e permissões respeitadas. | Interfaces oficiais disponíveis e âmbito autorizado dos dados |
| ACT-20261029-16 | Móvel/offline/línguas | Interface móvel e provas anteriores | Conferir percursos em telemóvel/redes lentas; consulta offline seleccionada, sincronização e línguas nacionais prioritárias. | Percurso móvel utilizável; conteúdo seleccionado acessível sem rede; sincronização preserva edições; idiomas escolhidos demonstrados. | Definir línguas prioritárias e conteúdos offline; tradução e regras de sincronização |
+02/11/2026 — ACT-20261029-16, primeiro recorte local parcial: a ficha publica de negocio permite guardar explicitamente uma copia HTML independente para leitura sem rede. Projeccao fixa dos campos publicos, origem e data de captura, sem scripts/recursos remotos nem dados privados; tres testes dirigidos passaram. Sem instalacao ou prova visual. Nao inclui cache geral, edicao/sincronizacao offline nem novas linguas; mantem-se a dependencia de prioridades/traducao dessas linguas. Detalhes e provas no manual existente.
+
+Continuidade 02/11/2026: mesmo recorte estendido a ficha publica de oportunidade, reutilizando renderer e descarga comuns; cinco testes dos dois formatos passaram. Origem limitada ao portal, desconhecidos preservados, anexos/contexto privado excluidos; nao converte contexto territorial em implantacao. Criterios amplos de sincronizacao/movel/idiomas continuam parciais, sem nova demonstracao visual.
+
## 29/10/2026 — auditoria fiscal InvesteMoz / SGF
Pedido expresso da Tempo: auditar ambos os sistemas e identificar como incorporar no SGF a componente fiscal do InvesteMoz. Auditoria local de código, contratos e recibos concluída; sem prova operacional nova. Relatório e critérios na [especificação fiscal existente do SGF](C:/laragon/www/sgf-tempo/docs/SERVICE_INVOICE_CALCULATION_SPEC.md#10-auditoria-de-incorporação-fiscal-investemoz--sgf--29102026), secção 10. Não altera os 16 recortes ACT-20261029 já registados nem os fechos aceites.
@@ -3146,3 +3153,27 @@ Recibo: docs/investmoz/unification/province-search-qa-20261029.json. Instalaçã
**Separação mantida:** este resultado encerra a lacuna técnica de compatibilidade/expansão provincial descrita acima, sem declarar conferência visual dos controlos e sem encerrar os requisitos amplos ACT-02/V2-07/V2-10. A conferência visual autenticada de Competitividade continua **pendente — execução e registo pela equipa**. As provas aceites dessa funcionalidade não foram reabertas nem substituídas pela correcção dos filtros. Diagnóstico da ligação Edge continua separado; leitura de URL não declarada recuperada. Nenhum processo local foi terminado nem porta libertada; InvesteMoz e SGF preservados.
Para o registo da equipa: no cluster autorizado, editar conteúdo legítimo → Guardar rascunho no servidor → sair e reabrir → comparar campos/versão recuperados → conferir na ficha pública exclusivamente a versão aprovada. Registar utilizador/âmbito autorizado, URL/cluster, versão instalada, versões guardada/aprovada, resultado e divergências. Uma nova gravação não deve substituir a aprovação pública existente; nova aprovação depende da decisão de conteúdo aplicável. Sem exemplar aprovado disponível, manter essa parte da conferência pendente em vez de publicar dados sintéticos.
+Continuidade 02/11/2026 — AUD-CHECKLIST-01: consulta administrativa paginada das definições históricas do Balcão implementada localmente, incluindo códigos retirados da configuração, sem republicação ou acesso às respostas dos requerentes. Quatro testes Feature/91 asserções, três frontend, PHPStan, tipos e lint aprovados. Provas e limites no manual; requisito transversal permanece parcial e conferência visual pendente. Reconciliação fiscal: 162 testes/106 aprovados/9 falhas/47 erros; 63 provas históricas conferidas e preservadas, sem declarar a integração global aprovada.
+Continuidade 02/11/2026 — AUD-CHECKLIST-01: corrigidas perguntas condicionadas por antecessores ocultos e criação de pedidos com campos/opções retirados da definição. Regressões reproduzidas antes da correcção; ramos ocultos conservam respostas, novos pedidos respeitam a própria versão e antigos permanecem intactos. Quatro testes frontend e percursos Feature dirigidos aprovados; detalhes e verificação conjunta no manual. Matriz reconciliada para distinguir implementação local de conferência visual, disponibilização e extensão às restantes checklists ainda pendentes.
+
+Continuidade 02/11/2026 — AUD-CHECKLIST-01: verificações do Balcão respeitam a definição e as perguntas aplicáveis; deixaram de pedir financiamento inexistente e de bloquear por valores financeiros conservados em ramos ocultos. Recibo distingue respostas conservadas, mantém a versão submetida e preserva a descarga técnica. Publicação confere a disponibilidade da fonte quando a localização se aplica, reutilizando a exigência existente. Passaram 25 testes conjuntos/467 asserções e dois testes específicos/11 asserções; PHPStan/Pint aprovados. Provas no manual; visual, disponibilização e restantes consumidores continuam pendentes, sem alteração no activo.
+
+Continuidade 02/11/2026 — ACT-20261029-11 / MASTER-471012ab-0124: preferências e correspondência do catálogo público implementadas localmente, reutilizando notificações e pesquisa existentes. Activação voluntária, critérios por sector/província/modalidade, frequência no portal, cancelamento independente de opções retiradas, repetição sem duplicações e preservação das manifestações. Migração/gerador/agendamento incluídos; provas e condições de operação no manual. Não integra ainda concursos/incentivos de outras fontes nem canais externos; visual e disponibilização pendentes. Não declarar ACT-11 integralmente concluído.
+
+Continuidade 02/11/2026 — pesquisa rápida / MASTER-471012ab-0124: atendido o exemplo «plantio de algodao». Pesquisa comum ao catálogo e às duas APIs combina palavras, acentos, variantes delimitadas de cultivo e localização pública hierárquica. Transformação/fiação não é apresentada como cultivo; quando não há correspondência completa, fichas relacionadas ficam separadas e mantêm os demais filtros. Barra GET com valor efectivo do formulário, incluindo autofill. Três Feature/93 asserções, seis de compatibilidade/112 e cinco frontend aprovados; provas/limites no manual existente. Sem alteração de dados ou instalação no activo. Alertas de concursos em desenvolvimento, sem fecho por esta correcção.
+
+Continuidade 02/11/2026 — ACT-11 / MASTER-471012ab-0124: integração local de concursos concluída no âmbito demonstrado. Escolha voluntária de catálogos, regime próprio, versões/actos publicados, disponibilidade e histórico reutilizam o módulo existente; rascunhos não geram avisos. Oportunidades continuam quando concursos estão indisponíveis; nenhum novo subscritor foi acrescentado automaticamente. Publicações anteriores, preferências e manifestações preservadas; lote por catálogo sem perda ou bloqueio da outra fonte. Passaram 30 testes distintos/607 asserções e seis frontend, PHPStan/tipos/lint/formatação/compilação. Provas e limitações no manual. Restam incentivos/outros canais, disponibilização/agendador no destino e visual; ACT-11 agregado continua parcial, sem alterações no activo.
+
+Continuidade 02/11/2026 — AUD-FUND-01: núcleo versionado e interesses privados em desenvolvimento; dois testes sintéticos/dez asserções, PHPStan e Pint aprovados. Catálogo/editor HTTP, filtros, documentos e provas de autorização ainda pendentes; não declarar funcionalidade entregue ou ACT-12 concluído. Detalhes, provas e próxima acção no manual existente. Sem instalação ou publicação no activo.
+
+Continuidade 02/11/2026 — AUD-FUND-01: primeiro percurso público ligado (/fundos, ficha, critérios, interesse privado e descarga versionada). Dois testes/25 asserções, PHPStan, tipos e lint aprovados; compilação em verificação. Editor, lista privada, navegação, filtros territoriais/sectoriais e provas de documentos/autoridade continuam pendentes. Estado parcial; detalhes no manual, sem publicação no activo.
+
+Continuidade 02/11/2026 — AUD-FUND-01: lista privada e navegação implementadas localmente; duas provas HTTP/71 asserções e PHPStan aprovados. Referência guardada mantém a versão original e permanece removível após retirada pública; isolamento por sessão conferido. Restam editor, filtros e provas específicas, sem fecho do requisito ou instalação no activo. Detalhes no manual.
+
+Continuidade 02/11/2026 — AUD-FUND-01: editor ligado a gestão, rascunhos, prévia, publicação e retirada, com autoridade editorial existente e histórico. Quatro testes/91 asserções e tipos aprovados; verificações finais em acompanhamento. Sequência de publicação preserva snapshots quando mudam cadastros. Filtros, documentos, fontes reais e visual continuam pendentes, sem disponibilização no activo; provas e próxima acção no manual.
+
+Continuidade 02/11/2026 — AUD-FUND-01: filtros sectoriais/territoriais e estados de janela implementados, desconhecidos explícitos e cobertura parcial explicada; snapshots territoriais e sectoriais preservados. Seis testes/204 asserções, análise estática, tipos, lint e compilação aprovados; descarga por versão verifica publicação, direitos, análise e bytes. Provas/limites no manual e recibo funding_filters_increment_20261102. Restam fontes reais, visual, concorrência e disponibilização; integração de incentivos nos alertas pendente. Sem alteração no activo.
+
+Continuidade 02/11/2026 — AUD-FUND-01: referência FDEL oficial empacotada, prévia e preparação de rascunho pela gestão editorial. Reutiliza ficha existente, preserva edições, auditabilidade e datas; chamada municipal histórica distinta do programa. Sete testes/235 asserções, PHPStan e lint aprovados; tipos/compilação em acompanhamento. Vínculos sectorial/cartográfico, visual, concorrência, alertas e disponibilização pendentes. Fontes e provas no manual, sem publicação ou escrita no activo.
+
+Continuidade 02/11/2026 — AUD-FUND-01: cinco cenários de concorrência com dois processos e bloqueios efectivamente observados. Reproduzido e corrigido deadlock 40P01 entre retirada e interesse da mesma pessoa, mantendo serialização e auditoria. Cinco cenários finais e sete Feature/235 asserções aprovados, PHPStan/Pint passaram. Bases e logs preservados; provas e limites no manual/recibo funding_concurrency_increment_20261102. Restam visual, vínculos da referência, alertas e disponibilização; nenhum acto no activo.
diff --git a/docs/investmoz/v2/auditoria-portal/formularios-20261102.json b/docs/investmoz/v2/auditoria-portal/formularios-20261102.json
new file mode 100644
index 00000000..9a779311
--- /dev/null
+++ b/docs/investmoz/v2/auditoria-portal/formularios-20261102.json
@@ -0,0 +1,2877 @@
+{
+ "date": "2026-11-02",
+ "scope": "Inventario estatico; inclui campos partilhados. Nao comprova revisao visual nem captura rotulos dinamicos do servidor.",
+ "files": 199,
+ "forms": 136,
+ "entries": [
+ {
+ "file": "resources/js/components/acquisition-allocation.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Afectação parcial e proporções — D",
+ "Método de afectação/dedução",
+ "Aquisição fora dos pagamentos excluídos15(6)(c)/19(2)",
+ "Reutilizar base reduzida existente",
+ "Base do pro rata provisório",
+ "Existe imposição concreta de afectação real22(3) para este âmbito?"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-beverage-restitution.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "Restituição —",
+ "Linha documental destinada à restituição",
+ "Âmbito fiscal da entidade",
+ "Parcela exclusivamente para restituição,sem dedução da mesma parcela",
+ "Âmbito da restituição",
+ "Repartição do IVA documental em MZN",
+ "Reconciliação da dedução anterior"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-closure.tsx",
+ "forms": 0,
+ "controls": 19,
+ "labels": [
+ "Fecho —",
+ "Resultado L2 congelado",
+ "Âmbito fiscal da entidade",
+ "Natureza do fecho",
+ "Data de entrega ou prevista",
+ "Situação do prazo",
+ "Fundamento/referência do prazo declarado",
+ "Adoptar expressamente o reporte anterior",
+ "Período de origem do crédito/saldo",
+ "Documento/referência do crédito",
+ "Montante disponível documentado (MZN)",
+ "Data da comunicação recebida",
+ "Juros23",
+ "Montante de juros (MZN)",
+ "Fonte/motivo dos juros ou da sua inexistência",
+ "Destino do crédito25",
+ "Parcela do cr?dito destinada ao pedido27 (MZN)",
+ "Parcela do crédito destinada ao pedido27 (MZN)"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-imports-exclusions.tsx",
+ "forms": 0,
+ "controls": 10,
+ "labels": [
+ "Importações e exclusões — B/C",
+ "Reutilizar registo de importação existente",
+ "Situação do IVA da importação",
+ "Natureza da despesa para dedução",
+ "Combustível",
+ "Utilização do gasóleo",
+ "Via13(2) para esta parcela",
+ "Factos e referência documental da classificação/excepção"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-operation-link.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Aquisição → direito à dedução — L2-A",
+ "Operação de destino",
+ "Afectação exclusiva à operação ligada",
+ "Motivo ou referência da afectação",
+ "Aquisição fora dos pagamentos excluídos15(6)(c)/19(2)"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-refund.tsx",
+ "forms": 0,
+ "controls": 16,
+ "labels": [
+ "Pedido de reembolso —",
+ "Afectação congelada do crédito27",
+ "Fundamento do pedido",
+ "Período de início do excesso de crédito",
+ "Data de nascimento do direito à dedução",
+ "Data da cessação de actividade",
+ "Suporte dos factos e origem do crédito",
+ "Referência do pedido ou preparação",
+ "Data do pedido ou prevista",
+ "Situação do pedido",
+ "Decisão recebida",
+ "Número ou referência da decisão",
+ "Data da decisão",
+ "Entidade emitente da decisão",
+ "Montante reconhecido na decisão (MZN)",
+ "Recebimento de reembolso"
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-regularizations.tsx",
+ "forms": 0,
+ "controls": 11,
+ "labels": [
+ ".",
+ "Resultado original congelado",
+ "— — —",
+ "Período da regularização",
+ "Documento/fonte do evento",
+ "Motivo e âmbito do evento",
+ "Operações anuais finais com direito — sem IVA (MZN)",
+ "Total anual final22(4–5) — sem IVA (MZN)",
+ "Data de recepção do documento rectificativo",
+ "Dedução corrigida documentada (MZN)",
+ "Reconciliei todas as regularizações deste período — ;os outros motivos não automatizados foram conferidos."
+ ]
+ },
+ {
+ "file": "resources/js/components/acquisition-substitution.tsx",
+ "forms": 0,
+ "controls": 12,
+ "labels": [
+ "Substituição —",
+ "Declaração anterior congelada",
+ "Resultado L2 corrigido congelado",
+ "Referência da declaração anterior",
+ "Data da declaração anterior",
+ "Referência da substituição ou preparação",
+ "Data da substituição ou prevista",
+ "Motivo da substituição",
+ "Situação da substituição",
+ "Juros adicionais23",
+ "Montante dos juros adicionais (MZN)",
+ "Fonte ou motivo dos juros adicionais",
+ "Pagamento adicional"
+ ]
+ },
+ {
+ "file": "resources/js/components/country-select.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Pesquisar nome ou código do país"
+ ]
+ },
+ {
+ "file": "resources/js/components/delete-user.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Eliminar conta",
+ "Palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/components/desk-internal-operations.tsx",
+ "forms": 4,
+ "controls": 20,
+ "labels": [
+ "Documento",
+ "Resultado",
+ "Pressupostos abrangidos por esta conferência",
+ "O que foi verificado",
+ "Evidência utilizada",
+ "Referência fornecida",
+ "Valor declarado",
+ "Moeda",
+ "Fonte do valor e finalidade",
+ "Comprovativo associado ao mesmo dossier",
+ "Autorizo este registo interno para o pedido.",
+ "Referência",
+ "O que foi conferido",
+ "Evidência",
+ "Canal",
+ "Direcção",
+ "Data real declarada",
+ "Resumo",
+ "Evidência / referência"
+ ]
+ },
+ {
+ "file": "resources/js/components/dossier-navigation-context.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Dossier autorizado",
+ "Etapa em consulta"
+ ]
+ },
+ {
+ "file": "resources/js/components/dossier-prefill.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Oportunidade em tratamento"
+ ]
+ },
+ {
+ "file": "resources/js/components/fintech-investment.tsx",
+ "forms": 1,
+ "controls": 6,
+ "labels": [
+ "Modelo declarado",
+ "Natureza do modelo",
+ "Países de operação declarados",
+ "Atividades pretendidas, ainda sujeitas a enquadramento",
+ "Fundamento e limites da declaração de atividades",
+ "Documentação por etapa e âmbito",
+ "·"
+ ]
+ },
+ {
+ "file": "resources/js/components/fiscal-claim-events.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Referência do pedido ou preparação",
+ "Data do pedido ou prevista",
+ "Situação do pedido",
+ "Decisão recebida",
+ "Número ou referência da decisão",
+ "Data da decisão",
+ "Entidade emitente da decisão",
+ "Montante reconhecido na decisão (MZN)",
+ "Recebimento identificado"
+ ]
+ },
+ {
+ "file": "resources/js/components/fiscal-proof-parcel.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Identificador da parcela",
+ "Suporte da separação das parcelas"
+ ]
+ },
+ {
+ "file": "resources/js/components/investment-coordinates.tsx",
+ "forms": 1,
+ "controls": 3,
+ "labels": [
+ "Fonte das coordenadas",
+ "Confirmo que esta posição corresponde ao local do investimento e pode ser divulgada quando a ficha estiver publicada."
+ ]
+ },
+ {
+ "file": "resources/js/components/investment-opportunity-choices.tsx",
+ "forms": 0,
+ "controls": 5,
+ "labels": [
+ "Corredor para este investimento",
+ "Zona ou parque desta oportunidade",
+ "Actividades que pretende realizar nesta oportunidade",
+ "Motivo da alternativa territorial",
+ "Confirmo a alteração da localização anteriormente confirmada, quando existir."
+ ]
+ },
+ {
+ "file": "resources/js/components/investment-territory.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/investment-zone-integral-details.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "—",
+ "Situação da informação",
+ "Suporte privado já associado",
+ "Incluir este detalhe na próxima publicação expressa"
+ ]
+ },
+ {
+ "file": "resources/js/components/investment-zone-operational-details.tsx",
+ "forms": 0,
+ "controls": 19,
+ "labels": [
+ "Situação da informação",
+ "Função",
+ "Entidade existente",
+ "Função responsável pela mitigação",
+ "Origem do canal",
+ "Suporte privado já associado (não publica o anexo)",
+ "Incluir os campos públicos deste detalhe na próxima publicação expressa",
+ "Qualidade e revisão documental"
+ ]
+ },
+ {
+ "file": "resources/js/components/investor-guidance.tsx",
+ "forms": 2,
+ "controls": 7,
+ "labels": [
+ "Motivo da aceitação, rejeição ou contestação",
+ "Assumir uma tarefa no CRM interno",
+ "Associar ao pedido existente",
+ "Prazo interno previsto",
+ "Assumo esta acção e autorizo o seu registo no acompanhamento interno.",
+ "Resultado ou motivo",
+ "Pesquisar excertos de fontes públicas autorizadas"
+ ]
+ },
+ {
+ "file": "resources/js/components/journey-companion.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": [
+ "Contexto do projecto"
+ ]
+ },
+ {
+ "file": "resources/js/components/journey-document-resources.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": [
+ "Etapa com associações no acervo"
+ ]
+ },
+ {
+ "file": "resources/js/components/manage-two-factor.tsx",
+ "forms": 2,
+ "controls": 0,
+ "labels": [
+ "Autenticação de dois factores"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-canonical-fields.tsx",
+ "forms": 0,
+ "controls": 15,
+ "labels": [
+ "Preparar oportunidade —",
+ "Natureza da ficha",
+ "Responsável do programa ou carteira",
+ "Abrangência territorial documentada",
+ "Orçamento agregado — fonte e situação, sem confirmação automática"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-classification.tsx",
+ "forms": 0,
+ "controls": 12,
+ "labels": [
+ "Associação",
+ "Tipo",
+ "Referência existente",
+ "Finalidade",
+ "Estado solicitado",
+ "Documento de suporte",
+ "Entidade competente",
+ "Estado do ato externo",
+ "Divulgação após publicação editorial",
+ "Fundamento da decisão (mínimo 20 caracteres)",
+ "Classificação multidimensional — filtros combinados"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-contact-form.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": [
+ "Dados do contacto",
+ "Promotor associado ao contacto",
+ "Classificação no cadastro do promotor"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-corridor-groups.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Província",
+ "Distrito",
+ "Cadeia de valor",
+ "Escolher para preparar investimento"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-library-reuse.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": [
+ "Original da biblioteca",
+ "Secções utilizadas",
+ "Motivo da reutilização"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-parcel-geometry.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": [
+ "Polígono"
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-profile-actions.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "Fundamentação",
+ "Campos ou documentos a corrigir, um por linha",
+ "Revisão especializada",
+ "Revisão",
+ "Decisão",
+ "Condição explícita desta revisão",
+ "Descrição da condição",
+ "Responsável pela preparação da evidência",
+ "Prazo específico da condição, se definido",
+ "Ação impedida até verificação",
+ "Verifiquei com os documentos selecionados:",
+ "Responsável a designar",
+ "Destinatário do parecer",
+ "Parecer atribuído",
+ "Confirmei a pré-visualização e o âmbito de divulgação desta versão."
+ ]
+ },
+ {
+ "file": "resources/js/components/opportunity-search-filters.tsx",
+ "forms": 1,
+ "controls": 12,
+ "labels": [
+ "O que procura",
+ "Palavras do título ou da descrição",
+ "Localização",
+ "Estado de preparação",
+ "Data-alvo até",
+ "Incluir oportunidades de âmbito nacional"
+ ]
+ },
+ {
+ "file": "resources/js/components/passkey-register.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Por exemplo, MacBook Pro ou iPhone"
+ ]
+ },
+ {
+ "file": "resources/js/components/password-input.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/portal-hero.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Pesquisa rápida de oportunidades",
+ "Ex.: agronegócio, Nampula, energia..."
+ ]
+ },
+ {
+ "file": "resources/js/components/private-investment-preparation.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/proactive-investment.tsx",
+ "forms": 0,
+ "controls": 20,
+ "labels": [
+ "Evidências que fundamentam esta entrada",
+ "Evidência : ( )",
+ "Evidências e proveniência",
+ "Evidência interna da oferta",
+ "Evidência",
+ "Necessidade ou lacuna",
+ "Ideia em preparação",
+ "Relações com estruturas existentes",
+ "Relação",
+ "Síntese proactiva expressamente pública",
+ "Grupo público",
+ "Estado público da necessidade",
+ "Cadeia de valor pública",
+ "Relações públicas seleccionadas",
+ "·",
+ "Evidências públicas a divulgar",
+ "Confirmei a divulgação deste texto e das evidências públicas seleccionadas, sem exposição directa ou indirecta de informação privada."
+ ]
+ },
+ {
+ "file": "resources/js/components/proactive-supply.tsx",
+ "forms": 0,
+ "controls": 10,
+ "labels": [
+ "Consultar oferta existente — base interna",
+ "Sector da oferta (classificação CAE)",
+ "Actividade ou código CAE da oferta",
+ "Comparação"
+ ]
+ },
+ {
+ "file": "resources/js/components/profile-proof-picker.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Escolher comprovativos",
+ "Pesquisar nos meus ficheiros"
+ ]
+ },
+ {
+ "file": "resources/js/components/project-dossier-export.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Escolha as secções a incluir",
+ "Anexos privados seleccionados pelo utilizador",
+ "Legenda da fotografia"
+ ]
+ },
+ {
+ "file": "resources/js/components/project-planning.tsx",
+ "forms": 0,
+ "controls": 10,
+ "labels": [
+ "Necessidade",
+ "Competência ou função",
+ "Disponibilidade",
+ "Resposta planeada",
+ "Formação, contratação, parceria…",
+ "Custo estimado (moeda do projecto)",
+ "Prazo previsto",
+ "Marco",
+ "Marco ou resultado",
+ "Estado",
+ "Montante planeado",
+ "Montante realizado"
+ ]
+ },
+ {
+ "file": "resources/js/components/project-readiness.tsx",
+ "forms": 0,
+ "controls": 5,
+ "labels": [
+ "Resposta planeada",
+ "Usar um marco já registado",
+ "Responsável (se definido)",
+ "Custo previsto ( )",
+ "Prazo previsto"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-acquisitions.tsx",
+ "forms": 0,
+ "controls": 17,
+ "labels": [
+ "Adquirente sujeito passivo de IVA no regime normal (efectivo ou pressuposto da projecção)",
+ "Mês da aquisição",
+ "Tratamento da aquisição",
+ "Descrição",
+ "Reutilizar valor existente, sem presumir que o orçamento é uma factura",
+ "Bem de investimento importado — incluir no controlo de activos;conserva campo11 e condições próprias da importação.",
+ "Período de dedução",
+ "O valor de origem corresponde a",
+ "( )",
+ "Referência do documento / previsão",
+ "Linha do documento, se discriminado em várias aquisições",
+ "Data do documento / prevista",
+ "Fornecedor / previsto",
+ "Incluí todas as importações de bens/campo11 deste período,mesmo isentas ou sem direito;sem somar novamente IVA de serviços incluídos na base.",
+ "Incluí todas as aquisições08–10 deste período, incluindo as sem direito à dedução; uma lista vazia significa que não houve essas aquisições.",
+ "Sem operações no campo —"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-act-sale-base.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "Natureza do acto",
+ "Fundamento do valor aplicável",
+ "Natureza dos dados",
+ "Condições próprias desta transmissão"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-business-plan.tsx",
+ "forms": 0,
+ "controls": 28,
+ "labels": [
+ "Importar plano financeiro InvestMoz (.json, até 60 KB)",
+ "Moeda (código ISO)",
+ "Moeda de apresentação (opcional)",
+ "Taxa indicativa ( por 1 )",
+ "Data efectiva da taxa",
+ "Fonte ou referência da cotação",
+ "Saldo de caixa inicial",
+ "Horizonte (meses)",
+ "Produtos ou serviços facturados por mês",
+ "Produto/serviço",
+ "Preço por unidade",
+ "Custo variável por unidade",
+ "Prazo de recepcao",
+ "Parcelas ao fornecedor",
+ "Prazo",
+ "Percentagem",
+ "Unidades - mes",
+ "Operação, custos e pagamentos mensais",
+ "Prazo entre facturação e cobrança das vendas",
+ "Percentagem da facturação cobrada no prazo",
+ "Mês",
+ "% do saldo vencido",
+ "Prazo até à recepção — mês",
+ "Compras mensais para existências",
+ "Prazo de entrega das compras (meses)",
+ "Despesas operacionais reconhecidas",
+ "Pagamento de despesas operacionais",
+ "Custo mensal de pessoal",
+ "Pagamento mensal de pessoal",
+ "Investimento, fundo de maneio e financiamento inicial",
+ "Aquisição de activos",
+ "Existências iniciais",
+ "Valores a receber",
+ "Mês previsto para cobrar valores a receber de abertura",
+ "Percentagem prevista a cobrar",
+ "Mês da parcela",
+ "Percentagem do saldo inicial",
+ "Valores a pagar",
+ "Mês do pagamento",
+ "Capital próprio",
+ "Suprimentos",
+ "Empréstimo recebido",
+ "Subvenções",
+ "Depreciação contabilística e dívida mensal",
+ "Base depreciável contabilística",
+ "Vida útil (meses)",
+ "Despesa de juros reconhecida",
+ "Pagamento de juros",
+ "Reembolso de capital",
+ "(%)"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-cashflow-planner.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Moeda do projecto (código ISO)",
+ "Moeda de origem da tesouraria guardada",
+ "Pressuposto de imposto para planeamento",
+ "Valor mensal fixo",
+ "Calendário variável por mês",
+ "Imposto manual do cenário personalizado por mês",
+ "Imposto manual do cenário personalizado — mês"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-commission-base.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Sentido da transferência",
+ "Natureza dos dados",
+ "Referência documental / pressuposto do preço acordado",
+ "Comissão desta operação, sem IVA (moeda indicada)",
+ "Referência documental / pressuposto da comissão",
+ "Condições próprias da base de comissão"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-composition-base.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Natureza dos dados",
+ "Condições da composição",
+ "Natureza da parcela",
+ "Esta parcela já está incluída no montante inicial?",
+ "A parcela exclui o próprio IVA?"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-currency-events.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "Percurso de moeda/evento",
+ "Natureza dos dados",
+ "Factos próprios correspondem ao percurso,operação e âmbito",
+ "Direcção da taxa",
+ "Operação sujeita à obrigação de emitir factura25",
+ "Facturação até à conferência",
+ "Recebimentos neste âmbito"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-digital.tsx",
+ "forms": 0,
+ "controls": 23,
+ "labels": [
+ "Natureza da operação digital",
+ "Tratamento digital",
+ "Natureza dos dados",
+ "País do estabelecimento ou domicílio adquirente",
+ "Sede, EP ou domicílio a partir do qual o fornecedor opera",
+ "Referência desse estabelecimento fornecedor",
+ "País do estabelecimento fornecedor",
+ "Adquirente sujeito passivo nacional —26(4)",
+ "Fundamento da qualidade fiscal do adquirente",
+ "Fornecedor não residente sujeito passivo",
+ "Fundamento da qualidade fiscal do fornecedor não residente",
+ "Representante residente nomeado —26(1)",
+ "Representante e referência da procuração/poderes",
+ "Nomeação comunicada à contraparte antes da operação —26(2)",
+ "Referência da comunicação",
+ "Aquisição no exercício de actividade comercial, industrial ou profissional —26(3)",
+ "Referência dessa actividade e aquisição",
+ "Fornecedor sujeito passivo nacional",
+ "Fundamento da qualidade fiscal do fornecedor",
+ "Local do bem na colocação à disposição —6(1)",
+ "Fundamento do local do bem digital — sem inferência pelo servidor",
+ "Factos próprios da natureza escolhida"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-exclusion-base.tsx",
+ "forms": 0,
+ "controls": 11,
+ "labels": [
+ "Natureza dos dados",
+ "Condições das exclusões",
+ "Natureza da parcela",
+ "Esta parcela ainda está incluída no montante inicial?",
+ "Âmbito da exclusão: operação, montantes e condições",
+ "Referência das adequadas contas de terceiros",
+ "Adquirente/destinatário em nome e por conta de quem se pagou",
+ "Indicação separada e menção de devolução acordada na factura/documento"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-financial-tools.tsx",
+ "forms": 0,
+ "controls": 20,
+ "labels": [
+ "Moeda dos valores (código ISO)",
+ "Prestação indicativa —",
+ "Capital",
+ "Taxa anual (%)",
+ "Prazo (meses)",
+ "Taxa",
+ "Periodicidade (meses)",
+ "Carência (prestações só de juros)",
+ "Comissão inicial",
+ "Comissão por prestação",
+ "Ponto de equilíbrio —",
+ "Preço por unidade",
+ "Custo variável por unidade",
+ "Necessidade de financiamento —",
+ "Investimento total",
+ "Montante já mobilizado",
+ "Orçamento do período —",
+ "Período do orçamento",
+ "Fonte da receita",
+ "Categoria da despesa"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-foreign-operations.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Origem da localização",
+ "Resultado de localização existente",
+ "Parcela deste trajecto analisada",
+ "Evento já guardado da mesma operação,quando aplicável",
+ "Seria tributável se efectuada no território nacional?",
+ "Fundamento da hipótese interna e exclusões aplicáveis",
+ "Existe exclusão19(2) aplicável:17-A ou pagamentos15(6)c?",
+ "Âmbito da análise,conjunto/parcela e período",
+ "Factos ou pressupostos expressos"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-form.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Continuar um dossier privado existente",
+ "Abrir dossier",
+ "Negócio da sua conta",
+ "Autorizo copiar este resultado e os pressupostos associados para o rascunho cifrado desta sessão/conta."
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-fuel-base.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Composição quanto à TC",
+ "Natureza dos dados",
+ "TC incluída nesta contraprestação (moeda indicada)",
+ "Referência da TC incluída / pressuposto",
+ "Condições próprias desta transmissão"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-fx-selection.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "P104 — selecção da taxa segundo orientação da Tempo",
+ "Natureza da operação declarada",
+ "Emitente identificado do boletim,quando a fonte é um exemplar arquivado",
+ "Sentido da cotação",
+ "Regra aplicável",
+ "Relação da natureza declarada com a perspectiva do boletim"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-goods-allocation.tsx",
+ "forms": 0,
+ "controls": 15,
+ "labels": [
+ "Percurso de afectação dos bens",
+ "Natureza dos dados",
+ "Factos/referência sobre excepção de amostras/ofertas de pequeno valor",
+ "Enquadramento dos bens20(1)a eafectação ao activo imobilizado",
+ "Modo de determinação da base15(2)b",
+ "Preço de aquisição para o conjunto identificado,sem próprioIVA",
+ "Referência do preço de aquisição reportado ao momento",
+ "Preço de custo para o conjunto identificado,sem próprioIVA",
+ "Referência do custo reportado ao momento",
+ "Falta de preço de aquisição demonstrada para esta operação",
+ "Momento a que o preço de aquisição/custo é reportado",
+ "Âmbito ecomposição da base,bens/elementos abrangidos",
+ "Base reportada ao momento desta operação,sem próprioIVA ecom âmbito correspondente",
+ "Factos próprios da operação"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-goods-location.tsx",
+ "forms": 0,
+ "controls": 10,
+ "labels": [
+ "Percurso de localização dos bens",
+ "Natureza dos dados",
+ "Situação desse local face ao território nacional",
+ "Referência da localização dos bens / pressuposto",
+ "Referência do transporte/expedição / pressuposto",
+ "Referência da importação nacional / pressuposto",
+ "Importador/cadeia e posição desta transmissão",
+ "Factos próprios deste percurso"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-goods-presumptions.tsx",
+ "forms": 0,
+ "controls": 10,
+ "labels": [
+ "Percurso de consignação/presunção",
+ "Natureza dos dados",
+ "Data da entrega ao destinatário",
+ "Destinatário e referência da entrega",
+ "Levantamento/inventário e estabelecimentos abrangidos",
+ "Existe prova em contrário para o âmbito declarado?",
+ "Referência e âmbito da prova em contrário",
+ "Factos próprios do percurso"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-import-exemptions.tsx",
+ "forms": 0,
+ "controls": 13,
+ "labels": [
+ "Ramo da importação",
+ "Natureza dos dados",
+ "Primeiro destino e documento de transporte ou primeira ruptura de carga",
+ "Autorização do empreendimento / pressuposto expresso",
+ "Âmbito aplicável: bens, operação, período e condições",
+ "Redução dos direitos (% entre0e100, exclusiva)",
+ "IVA desta importação sem benefício (moeda indicada)",
+ "Referência documental / pressuposto do IVA sem benefício",
+ "Moeda de origem",
+ "Condições de ; respostas conservadas ao mudar de ramo"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-annual.tsx",
+ "forms": 0,
+ "controls": 11,
+ "labels": [
+ "Estado —",
+ "Suporte —",
+ "Retenções efectivamente sofridas por conta",
+ "Retenção seleccionada",
+ "Parcela a abater",
+ "O próprio sujeito é beneficiário e o rendimento está incluído na base deste exercício",
+ "Suporte da titularidade e inclusão",
+ "PPC efectivamente pagos",
+ "PPC",
+ "Pagamento efectivamente comprovado",
+ "— tratamento separado",
+ "Montante declarado",
+ "Suporte"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-assessment.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Matéria colectável → colecta",
+ "Enquadramento da colecta",
+ "Suporte ou pressuposto da taxa geral neste caso"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-carry.tsx",
+ "forms": 0,
+ "controls": 13,
+ "labels": [
+ "Saldos de exercícios anteriores",
+ "Crédito internacional e PEC — exercícios anteriores",
+ "Inventário de saldos anteriores",
+ "Suporte do inventário",
+ "Origem",
+ "Natureza",
+ "Exercício de origem anual ordinário",
+ "Remanescente por insuficiência de colecta",
+ "Utilizações efectivas posteriores à origem",
+ "Suporte do inventário de utilizações",
+ "Utilização .",
+ "Escolha das parcelas entre exercícios",
+ "Crédito internacional corrente a deduzir — MZN",
+ "PEC corrente a deduzir — MZN",
+ "Suporte da escolha e seus impactos"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-costs.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "Custos com limites, provisões e periodização — exercício2026",
+ "Publicidade — limite único anual",
+ "Correspondência às vendas normais do exercício",
+ "Suporte do volume de vendas e completude da publicidade",
+ "Créditos — limites anual e acumulado",
+ "Regime da provisão de créditos",
+ "Créditos da actividade normal existentes no fim do exercício",
+ "Provisão fiscal anterior que subsiste no termo do exercício",
+ "Suporte do saldo de créditos e provisão anterior",
+ "Parcela —",
+ "Categoria",
+ "Origem contabilística",
+ "Condições ordinárias e inclusão na origem demonstradas"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-depreciation.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Amortizações — tabelas, métodos, duodécimos e quotas anteriores",
+ "Suporte da reconciliação integral dos activos e quotas anteriores",
+ "Activo fiscal —",
+ "Categoria/tabela",
+ "Tipo de aquisição/base",
+ "Método",
+ "Período da quota",
+ "Transmissão, inutilização ou termo da vida útil",
+ "Condições ordinárias e documentos conferidos"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-economic.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Crédito por dupla tributação económica",
+ "Crédito económico — lucros distribuídos",
+ "Estado do crédito económico",
+ "Suporte do inventário económico",
+ "Utilização anterior efectiva do crédito",
+ "Crédito já utilizado — MZN",
+ "Suporte do uso anterior ou da sua ausência",
+ "Lucros",
+ "Natureza"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-form-preparation.tsx",
+ "forms": 0,
+ "controls": 13,
+ "labels": [
+ "Representação dos valores e correspondência M20/M22",
+ "Exemplares de preparação",
+ "Suporte da edição e do período",
+ "Completude das contas e discriminação das linhas do plano",
+ "Parcela M20",
+ "Linha de origem",
+ "Conta M20A.1",
+ "Montante MZN",
+ "Suporte da classificação",
+ "Imposto contabilizado e resultado líquido",
+ "Estado do imposto contabilizado",
+ "Imposto contabilizado em MZN",
+ "Localização do imposto contabilizado",
+ "Suporte do imposto contabilizado",
+ "Parcela de taxa reduzida para a colecta total302",
+ "Suporte da situação da taxa reduzida"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-international.tsx",
+ "forms": 0,
+ "controls": 15,
+ "labels": [
+ "Estado",
+ "Montante MZN",
+ "Suporte",
+ "Crédito internacional — próprio exercício",
+ "Crédito por dupla tributação internacional",
+ "Estado internacional",
+ "Suporte do inventário",
+ "Crédito económico — regra própria",
+ "Benefícios/créditos próprios — regra própria",
+ "Posição internacional",
+ "Rendimento incluído na matéria colectável",
+ "Convenção aplicável",
+ "Imposto pago elegível nos termos da convenção — limite MZN",
+ "Suporte da convenção ou da não aplicação",
+ "Imposto estrangeiro .",
+ "Suporte da correspondência da data ao exercício",
+ "Pagamento efectivo",
+ "Imposto sobre o rendimento elegível"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-mrfta.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "MRFTA — preenchimento e juros compensatórios",
+ "Período existente",
+ "CER",
+ "Documento / referência do CER",
+ "Tratamento dos juros",
+ "Período documentado dos juros / entregas",
+ "Documento da liquidação / reconciliação",
+ "Montante dos juros em MZN",
+ "Data da liquidação",
+ "Prazo aplicável documentado",
+ "Fonte do prazo, incluindo eventual ajuste de calendário",
+ "Parâmetros documentados do cálculo — sem taxa fiscal de2026 pré-definida",
+ "Casos de trabalho separados por período, rubrica, taxa e CER"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-normal.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "Exercício fiscal",
+ "Âmbito",
+ "Suporte do âmbito e da imputação integral do resultado ao sujeito/EP",
+ "Custo de origem na ponte",
+ "Natureza documentada",
+ "Parcela incluída nos custos do resultado de partida",
+ "Resultado financeiro → ajustamentos → lucro tributável simulado",
+ "Suporte da completude do sujeito passivo no exercício",
+ "—",
+ "Estado fiscal —",
+ "Suporte fiscal —",
+ "Estado —",
+ "Montante conhecido —",
+ "Suporte —"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-pec.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "PEC — comprovativos do próprio exercício",
+ "PEC — pagamentos efectivamente comprovados",
+ "Estado dos PEC",
+ "Suporte do inventário PEC",
+ "PEC",
+ "Pagamento PEC efectivamente comprovado"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-period-fx.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": [
+ "Período fiscal e conversão do plano — simulação L6",
+ "Tipo de período",
+ "Mês — —",
+ "Reutilizar selecção cambial existente"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-schedules.tsx",
+ "forms": 0,
+ "controls": 13,
+ "labels": [
+ "Mapas complementares — regras ordinárias documentadas",
+ "Período anual e correspondência dos meses",
+ "Tipo de período",
+ "Regra complementar",
+ "Tratamento",
+ "Condições demonstradas",
+ "Juros financeiros ordinários — artigo22c",
+ "Juros ordinários remanescentes MZN",
+ "Suporte dos juros e condições",
+ "Condições dos juros",
+ "Amortizações fiscais — quotas constantes anuais",
+ "Reconciliação de todos os activos com a depreciação do plano",
+ "Activo",
+ "Categoria fiscal",
+ "Condições do activo",
+ "Suporte da perda fiscal do próprio exercício, se apurada"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-special.tsx",
+ "forms": 0,
+ "controls": 24,
+ "labels": [
+ "Estado —",
+ "Condições —",
+ "Cumulações — tratamentos, incompatibilidades e limites",
+ "Suporte da combinação no sujeito/projecto/período",
+ "Benefícios específicosCBF",
+ "Suporte da presença ou ausência de benefícios específicos",
+ "Excepção expressa à não cumulação",
+ "Outros benefícios além dos tratamentos registados",
+ "Suporte dos outros benefícios ou ausência",
+ "Despesas — tributação autónoma61(4)",
+ "Despesas autónomas",
+ "— MZN",
+ "Natureza legal da despesa",
+ "Suporte da classificação e incidência",
+ "Cooperativas abrangidas — artigo12",
+ "Cooperativa",
+ "Tipo de cooperativa documentado",
+ "Rendimentos sujeitos a retenção",
+ "Amortizações aceleradas — CBF16",
+ "Amortização acelerada",
+ "ReconhecimentoCBF10",
+ "Instrumento ou norma da excepção",
+ "CBF16 — reutilizar duodécimos L6",
+ "Suporte da reutilização dos duodécimos L6",
+ "CBF16 — período curto de início de actividade",
+ "Suporte do início de actividade",
+ "CBF16 — cessação e quotas anteriores",
+ "Período a qualificar",
+ "Suporte do período e condiçõesCBF16",
+ "Suporte das quotas anteriores ou ausência e da aplicaçãoCBF16",
+ "Activo qualificado",
+ "Activo do mapaL6",
+ "Afectação documentada",
+ "Prova da afectação e condições do activo"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-taxable-base.tsx",
+ "forms": 0,
+ "controls": 14,
+ "labels": [
+ "Lucro tributável → matéria colectável simulada",
+ "NUIT do sujeito passivo da matéria colectável",
+ "Suporte da identidade e correspondência com o lucro",
+ "Método de determinação",
+ "Suporte do método de determinação",
+ "Situação das perdas fiscais anteriores",
+ "Suporte e completude dos saldos de perdas",
+ "Objecto social e natureza da actividade mantidos no termo do exercício",
+ "Suporte da manutenção ou alteração da actividade",
+ "Perda —",
+ "Origem da perda",
+ "Benefícios/deduções à matéria colectável",
+ "Montante conhecido de benefícios/deduções em MZN",
+ "Suporte dos benefícios/deduções, regra e exercício"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-irpc-withholdings.tsx",
+ "forms": 0,
+ "controls": 15,
+ "labels": [
+ "Preparação de dispensa ou convenção",
+ "Enquadramento",
+ "Regra aplicável",
+ "Factos específicos do rendimento",
+ "Suporte ou pressuposto específico da classificação",
+ "Evento",
+ "Data",
+ "Suporte / pressuposto",
+ "Pagamento / prova existente",
+ "Parcela usada em MZN",
+ "Natureza"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-ispc-eligibility.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Tipo de pessoa",
+ "Natureza dos dados",
+ "Moeda dos valores ISPC",
+ "Âmbito da preparação",
+ "Actividades do contribuinte",
+ "Volume anual de referência",
+ "Referência de acesso",
+ "Condições aplicáveis ao contribuinte",
+ "Opção — separada da compatibilidade",
+ "Situação da opção"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-ispc-quarter.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Ano",
+ "Trimestre",
+ "Âmbito do volume",
+ "Volume T em MZN",
+ "Suporte ou pressuposto T",
+ "Escalão anual da actividade — distinto do volume de acesso",
+ "Volume anual 2026 para o escalão",
+ "Origem da referência anual",
+ "Suporte da referência anual"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-ispc-residuals.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/simulation-ispc-withholding.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Existem aquisições abrangidas pelo artigo 12(3–4)?",
+ "Actividade da operação ocasional"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-listed-services.tsx",
+ "forms": 0,
+ "controls": 11,
+ "labels": [
+ "Tratamento do serviço",
+ "Natureza dos dados",
+ "Qualidade do adquirente2(1)",
+ "Referência da qualidade fiscal do adquirente",
+ "Prestador sujeito passivo no regime geral",
+ "Referência da qualidade fiscal do prestador",
+ "Alínea6(7)do serviço,direito ou actividade subjacente",
+ "Referência do subjacente e relação da intermediação/obrigação",
+ "Factos próprios deste tratamento"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-miners.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Percurso dos bens",
+ "Natureza dos dados",
+ "Titular do direito",
+ "Via dos bens",
+ "Direito de veículo identificado",
+ "Benefício anterior aplicável a este direito"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-monthly-iva.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": [
+ "Primeiro mês da projecção",
+ "Tratamento do IVA nos preços projectados",
+ "Declaro que as vendas projectadas são tributáveis à taxa geral interna e não incluem as operações excluídas deste lote."
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-noncash-base.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Composição da contraprestação",
+ "Natureza dos dados",
+ "Valor normal dos bens ou serviços dados em troca,sem IVA (moeda indicada)",
+ "Montante monetário recebido ou a receber,sem IVA (moeda indicada)",
+ "Referência da parte monetária / pressuposto",
+ "Condições próprias desta operação"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-objective-imports.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Preencher campos em falta a partir de bens já preparados",
+ "Natureza dos dados",
+ "Correspondência da isenção interna",
+ "Posição do Anexo I",
+ "Após conferir os outros tratamentos,corresponde apenas a9(12)h?",
+ "Posição do Anexo III"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-offer-preparations.tsx",
+ "forms": 0,
+ "controls": 16,
+ "labels": [
+ "Operação",
+ "Reutilizar dados desta oportunidade",
+ "Condições próprias da oferta à instituição",
+ "Finalidade própria da oferta para calamidade",
+ "Calamidade e contexto afectados",
+ "Natureza da calamidade",
+ "Cheias, tempestades, secas, ciclones, sismos ou outra de idêntica natureza",
+ "Finalidade humanitária da resposta à emergência",
+ "Documentos disponíveis e respectivas referências",
+ "Pedido e âmbito da decisão",
+ "Estado declarado do pedido",
+ "Operação abrangida pela decisão",
+ "Âmbito de operações literal, se a decisão abranger mais do que a opção indicada",
+ "Âmbito temporal literal, se não estiver limitado pelas datas indicadas",
+ "Conservar, por exemplo, a indicação sem termo ou até revogação do documento",
+ "Cenário normal e cenário condicionado à isenção",
+ "IVA no cenário normal, indicado em documento ou pressuposto",
+ "Documento ou pressuposto do IVA normal",
+ "Assumir, apenas para comparar, a hipótese condicionada de isenção"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-offer-workflow.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Reutilizar anexo privado",
+ "Juntar ficheiro privado",
+ "Pedido → decisão → formulário com despacho",
+ "Esta linha está abrangida pelos bens,operação,período e condições do despacho"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-operations.tsx",
+ "forms": 0,
+ "controls": 23,
+ "labels": [
+ "Descrição da operação",
+ "Estabelecimento",
+ "Período",
+ "Valor declarado",
+ "Representação do preço",
+ "Tratamento da operação",
+ "Regime aduaneiro ou fiscal da operação",
+ "Regime do artigo14(1)",
+ "Natureza do abastecimento a bordo",
+ "Categoria do artigo13(3)",
+ "Referência à operação relacionada",
+ "Operação já preenchida",
+ "Benefício temporário — prazo e continuidade",
+ "Bem do Anexo I — edição Lei22/2022",
+ "Pesquisar código ou designação no Anexo I",
+ "Posição do Anexo I",
+ "Conferi a designação e o destino: esta operação não corresponde ao tratamento indicado acima; o fundamento explica a aplicação apenas do artigo9(12)(h).",
+ "Bem do Anexo III — edição Lei22/2022",
+ "Pesquisar código ou designação",
+ "Linha do Anexo III",
+ "Manifestação ocasional — limite anual da entidade",
+ "Actividade habitual isenta",
+ "Opção de tributação da produção — artigo11",
+ "Reutilizar opção já preenchida neste dossier",
+ "Tipo de declaração de opção",
+ "Declaração de regresso à isenção",
+ "Documento ou pressuposto que sustenta estas condições",
+ ": incluí todas as operações deste período; lista vazia significa ausência expressamente confirmada."
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-own-name.tsx",
+ "forms": 0,
+ "controls": 5,
+ "labels": [
+ "Natureza e sentido do circuito",
+ "Natureza dos dados",
+ "Referência de baseP091já existente,se aplicável",
+ "Factos próprios do circuito"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-property-transfers.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Percurso de transmissão",
+ "Natureza dos dados",
+ "Composição15(1) corresponde ao âmbito e exclui próprioIVA,sem dupla subtracção",
+ "Condições próprias da transmissão"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-public-authority-base.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Tratamento da compensação",
+ "Natureza da operação",
+ "Natureza dos dados",
+ "Forma da compensação",
+ "Componente monetária sem IVA (moeda indicada)",
+ "Valor normal não monetário sem IVA (moeda indicada)",
+ "Referência da valorização / pressuposto do valor normal",
+ "Condições próprias desta base"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-published-iva.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Base tributável líquida (decimal, com ponto)",
+ "Moeda da base",
+ "Data de exigibilidade declarada",
+ "Declaro operação interna à taxa geral, base líquida já apurada e ausência das excepções acima."
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-reduced-bases.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Tratamento da base reduzida",
+ "Natureza dos dados",
+ "Projecto ou contrato de obra pública",
+ "Categoria da obra",
+ "Referência do preço fixado ou taxa aeronáutica",
+ "Preço/taxa aplicável desde",
+ "Preço/taxa aplicável até,se houver termo",
+ "Condições deste tratamento"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-remission-imports.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Reutilizar dados de importação preparada"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-returnee-baggage-fields.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Condições próprias da bagagem no regresso",
+ "Bens desta linha",
+ "Via da bagagem"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-returnees.tsx",
+ "forms": 0,
+ "controls": 5,
+ "labels": [
+ "Percurso dos bens",
+ "Natureza dos dados",
+ "Benefício anterior de veículo"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-secondhand.tsx",
+ "forms": 0,
+ "controls": 16,
+ "labels": [
+ "Percurso da margem",
+ "Categoria do bem",
+ "Natureza dos dados",
+ "Qualidade do fornecedor/comitente",
+ "Tipo de objecto de arte",
+ "Tiragem total",
+ "Cerâmica única,executada eassinada pelo artista",
+ "Tipo de colecção",
+ "Fora decirculação esem destino aser posto emcirculação",
+ "Idade emanos",
+ "Opção do revendedor",
+ "Condições da classificação eregime"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-service-location.tsx",
+ "forms": 0,
+ "controls": 13,
+ "labels": [
+ "Percurso de localização do serviço",
+ "Natureza dos dados",
+ "Estabelecimento do prestador a partir do qual o serviço é prestado",
+ "País desse estabelecimento",
+ "Referência do estabelecimento prestador / pressuposto",
+ "Situação do local relevante",
+ "Referência da localização / pressuposto",
+ "Imóvel, bens ou actividade e relação do serviço",
+ "Factos próprios deste percurso"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-service-normal.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "Tratamento do serviço ou utilização",
+ "Natureza dos dados",
+ "Bens da empresa / elementos constitutivos identificados",
+ "Referência da dedução anterior total ou parcial / pressuposto",
+ "Condições próprias deste percurso"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-travel-events.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Percurso do evento especial",
+ "Operação de viagens já classificada nesta oportunidade"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-travel.tsx",
+ "forms": 0,
+ "controls": 22,
+ "labels": [
+ "Natureza dos dados",
+ "País do estabelecimento prestador",
+ "Meios utilizados na viagem",
+ "Revenda retalhista de viagem organizada por grossista",
+ "Acrescenta serviços não meramente acessórios/complementares e apresenta novo conjunto em nome próprio?",
+ "Referência do novo conjunto e serviços acrescidos",
+ "Factos do percurso",
+ "Parcela especial identificada como tributável no âmbito nacional",
+ "Fundamento do enquadramento tributável",
+ "Contraprestação registada no período, com IVA incluído",
+ "Contraprestação da parte que utiliza meios de terceiros, com IVA",
+ "Fundamento da repartição entre meios próprios e terceiros",
+ "Natureza do custo",
+ "—",
+ "Contraprestações e custos completos neste âmbito/período",
+ "Excesso negativo do período anterior",
+ "Excesso negativo anterior",
+ "Referência do registo anterior / alteração fundamentada",
+ "Se o excesso indicado divergir do anterior calculado, confirmar a correcção referenciada após conferir o impacto na base e reporte"
+ ]
+ },
+ {
+ "file": "resources/js/components/simulation-value-review.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Percurso da comparação",
+ "Contexto do preço de referência",
+ "Natureza dos dados",
+ "Condições próprias da comparação"
+ ]
+ },
+ {
+ "file": "resources/js/components/territorial-traceability-plan.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Reversão — restitui as referências anteriores",
+ "Motivo da reversão",
+ "Confirmo que pretendo reverter este incremento"
+ ]
+ },
+ {
+ "file": "resources/js/components/territory-search-select.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/two-factor-recovery-codes.tsx",
+ "forms": 1,
+ "controls": 0,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/two-factor-setup-modal.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/ui/input.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": []
+ },
+ {
+ "file": "resources/js/components/ui/sidebar.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": [
+ "Toggle sidebar"
+ ]
+ },
+ {
+ "file": "resources/js/pages/ai/index.tsx",
+ "forms": 3,
+ "controls": 25,
+ "labels": [
+ "Idioma / Language"
+ ]
+ },
+ {
+ "file": "resources/js/pages/ai/result.tsx",
+ "forms": 2,
+ "controls": 5,
+ "labels": []
+ },
+ {
+ "file": "resources/js/pages/auth/confirm-password.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Confirmar palavra-passe",
+ "Confirmar com chave de acesso",
+ "Palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/forgot-password.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Recuperar palavra-passe",
+ "email@example.com"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/login.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Entrar",
+ "Entrar com chave de acesso",
+ "email@example.com",
+ "Palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/register.tsx",
+ "forms": 1,
+ "controls": 6,
+ "labels": [
+ "Criar conta",
+ "Nome completo",
+ "email@example.com",
+ "Palavra-passe",
+ "Confirmar palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/reset-password.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Redefinir palavra-passe",
+ "Palavra-passe",
+ "Confirmar palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/two-factor-challenge.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Autenticação de dois factores",
+ "Introduza um código de recuperação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/auth/verify-email.tsx",
+ "forms": 1,
+ "controls": 0,
+ "labels": [
+ "Confirmação de email"
+ ]
+ },
+ {
+ "file": "resources/js/pages/crm/convert.tsx",
+ "forms": 1,
+ "controls": 14,
+ "labels": [
+ "Converter pedido em lead",
+ "Investidor existente",
+ "Nome legal do investidor",
+ "Tipo de investidor",
+ "Responsável",
+ "Título do lead",
+ "Próxima acção",
+ "Prazo (hora local)"
+ ]
+ },
+ {
+ "file": "resources/js/pages/crm/investor.tsx",
+ "forms": 2,
+ "controls": 12,
+ "labels": [
+ "Nome do contacto",
+ "Email",
+ "Telefone",
+ "Nome legal",
+ "Tipo de investidor",
+ "Estado"
+ ]
+ },
+ {
+ "file": "resources/js/pages/crm/investors.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "CRM — Investidores"
+ ]
+ },
+ {
+ "file": "resources/js/pages/crm/lead.tsx",
+ "forms": 3,
+ "controls": 14,
+ "labels": [
+ "Estado do lead",
+ "Responsável",
+ "Fundamento da alteração",
+ "Tarefa",
+ "Prazo (hora local)",
+ "Responsável pela tarefa"
+ ]
+ },
+ {
+ "file": "resources/js/pages/crm/leads.tsx",
+ "forms": 2,
+ "controls": 4,
+ "labels": [
+ "CRM — Leads",
+ "Origem das estatísticas",
+ "Título ou investidor"
+ ]
+ },
+ {
+ "file": "resources/js/pages/desk/case.tsx",
+ "forms": 4,
+ "controls": 14,
+ "labels": [
+ "Verifiquei que a ligação está disponível",
+ "Evidência e data da consulta",
+ "Contacto alternativo com fonte",
+ "Serviço publicado",
+ "Etapa",
+ "Estado",
+ "Motivo",
+ "Evidência / referência",
+ "Identificador do documento de suporte",
+ "Ficheiro privado",
+ "Ou identificador de documento já autorizado",
+ "Proveniência e referência",
+ "Assunto da evidência — não equivale a validação",
+ "Autorizo associar este documento ao dossier privado."
+ ]
+ },
+ {
+ "file": "resources/js/pages/desk/install.tsx",
+ "forms": 2,
+ "controls": 3,
+ "labels": [
+ "Instalação autenticada do Balcão e acompanhamento",
+ "Confirmo aplicar exactamente as alterações pré-visualizadas.",
+ "Serviço",
+ "Confirmo disponibilizar este serviço de preparação interna."
+ ]
+ },
+ {
+ "file": "resources/js/pages/desk/panel.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Balcão Virtual — acompanhamento",
+ "Título do projecto",
+ "Pedido de apoio anterior",
+ "Autorizo reutilizar os dados seleccionados para preparar e acompanhar o projecto internamente."
+ ]
+ },
+ {
+ "file": "resources/js/pages/desk/request.tsx",
+ "forms": 4,
+ "controls": 14,
+ "labels": [
+ "País do requerente (opcional)",
+ "País de origem do pedido (opcional)",
+ "Justificação de correcção",
+ "Revi o conteúdo e autorizo a submissão para análise interna.",
+ "Estado",
+ "Fundamento da resposta",
+ "Campos autorizados para correcção",
+ "Responsável",
+ "Prazo interno",
+ "Motivo",
+ "Mensagem privada"
+ ]
+ },
+ {
+ "file": "resources/js/pages/education/analysis.tsx",
+ "forms": 1,
+ "controls": 8,
+ "labels": [
+ "Análise assistida de competências",
+ "Sector",
+ "Título",
+ "Moeda de referência (montante ainda não estimado)"
+ ]
+ },
+ {
+ "file": "resources/js/pages/education/index.tsx",
+ "forms": 4,
+ "controls": 28,
+ "labels": [
+ "Designação",
+ "Código",
+ "Instituição",
+ "Ocupação",
+ "Competência principal",
+ "Empregador declarante",
+ "Qualificação exigida / desenvolvida",
+ "Fonte, referência da evidência e responsável pelos dados",
+ "Decisão interna",
+ "Justificação e evidência da revisão",
+ "Competências e investimento em educação",
+ "Pesquisar qualificação",
+ "Estado"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-classification.tsx",
+ "forms": 0,
+ "controls": 1,
+ "labels": [
+ "Classificação do anúncio",
+ "Fundamento da ação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-interest.tsx",
+ "forms": 1,
+ "controls": 20,
+ "labels": [
+ "Manifestar interesse",
+ "País de origem do pedido (opcional)",
+ "Nome ou denominação",
+ "Email",
+ "Telefone",
+ "Tipo de investidor",
+ "País do requerente",
+ "Sector de interesse",
+ "Modalidade pretendida",
+ "Intervalo de investimento",
+ "Como pretende participar nesta oportunidade?"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-marketplace.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Oportunidades de negócio",
+ "Pesquisar negócios"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-objects.tsx",
+ "forms": 1,
+ "controls": 14,
+ "labels": [
+ "Natureza",
+ "Unidade da área",
+ "Natureza do valor",
+ "Tipo de contrato",
+ "Motivo do registo ou alteração"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-verifications.tsx",
+ "forms": 1,
+ "controls": 12,
+ "labels": [
+ "Elemento analisado",
+ "Aspecto verificado",
+ "Conclusão",
+ "Referência da evidência consultada",
+ "Fundamentação e limites da conclusão",
+ "Validade da conclusão"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business-wizard.tsx",
+ "forms": 1,
+ "controls": 17,
+ "labels": [
+ "Pesquisar localização"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/business.tsx",
+ "forms": 1,
+ "controls": 8,
+ "labels": [
+ "Modalidade",
+ "Motivo da alteração ou nota para a revisão",
+ "Autorizo a análise interna desta submissão pelos revisores designados. Esta autorização não permite publicação."
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/businesses.tsx",
+ "forms": 2,
+ "controls": 6,
+ "labels": [
+ "Filtrar país do proponente",
+ "Origem declarada",
+ "Título privado",
+ "Modalidade"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/catalogue.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Escolher para preparar investimento",
+ "Comparar"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/context.tsx",
+ "forms": 1,
+ "controls": 7,
+ "labels": [
+ "Oportunidade na educação",
+ "Data-alvo"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/conversation.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Consultar versão",
+ "Mensagem para acompanhamento"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/profile.tsx",
+ "forms": 2,
+ "controls": 6,
+ "labels": [
+ "Perfil de investimento e empresas",
+ "País de constituição da organização",
+ "Fonte ou referência deste país"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/references.tsx",
+ "forms": 1,
+ "controls": 10,
+ "labels": [
+ "Opções dos formulários e filtros",
+ "Grupo",
+ "Código",
+ "Etiqueta",
+ "Activa",
+ "Exige especificação",
+ "Ordem"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/submission.tsx",
+ "forms": 2,
+ "controls": 19,
+ "labels": [
+ "Dossier autorizado para esta manifestação",
+ "Necessidade",
+ "Quantidade",
+ "Prazo",
+ "Autorizo o tratamento destes dados e o contacto pela equipa para analisar e acompanhar esta manifestação. Os anexos são privados. Não constitui consentimento para utilização em IA.",
+ "Documento de suporte"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/zone-attachments.tsx",
+ "forms": 1,
+ "controls": 17,
+ "labels": [
+ "Ficheiro (PDF, JPEG, PNG ou WebP; máximo 20 MB)",
+ "Tipo do anexo",
+ "Legenda ou título",
+ "Origem exacta do ficheiro",
+ "Data da fonte, se conhecida",
+ "Direitos de utilização",
+ "Fundamento dos direitos (se confirmado)",
+ "Fundamento dos direitos"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/zone-relations.tsx",
+ "forms": 2,
+ "controls": 28,
+ "labels": [
+ "Registo existente",
+ "Tipo de associação",
+ "Papel",
+ "Fonte jurídica, obrigatória para associação oficial",
+ "Fonte da relação",
+ "Justificação",
+ "Válida desde",
+ "Válida até",
+ "GeoJSON",
+ "Finalidade",
+ "Fonte jurídica do perímetro",
+ "Proveniência da geometria",
+ "Entidade indicada para validação",
+ "Data da observação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/zone.tsx",
+ "forms": 2,
+ "controls": 58,
+ "labels": [
+ "Categoria",
+ "Categoria física",
+ "Regime jurídico",
+ "Estado operacional",
+ "Estado de desenvolvimento",
+ "Disponibilidade para instalação",
+ "Área documentada",
+ "Unidade da área",
+ "Evidência e fontes (JSON; tipo e o que comprova)",
+ "Designações alternativas (uma por linha)",
+ "Localização histórica",
+ "Distrito histórico",
+ "Província histórica",
+ "Fonte da localização histórica",
+ "Actividade",
+ "URL ou referência",
+ "Estrada, energia, água…",
+ "Operador cadastrado",
+ "Fonte jurídica",
+ "Tipo de abrangência",
+ "Fonte e fundamento da associação",
+ "Data da fonte",
+ "Tipo de capacidade",
+ "Capacidade (vazio se desconhecida)",
+ "Unidade",
+ "Atividade económica documentada",
+ "Suporte privado já associado",
+ "Nota privada (não divulgada)"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investment/zones.tsx",
+ "forms": 2,
+ "controls": 46,
+ "labels": [
+ "Complemento operacional L1 dos parques",
+ "Pesquisar por nome ou código",
+ "Grupo",
+ "Tipo de espaço",
+ "Actividade documentada",
+ "Regime jurídico",
+ "Desenvolvimento",
+ "Disponibilidade",
+ "Código",
+ "Nome",
+ "Categoria proposta",
+ "Categoria física",
+ "Estado de desenvolvimento",
+ "Disponibilidade para instalação",
+ "Área (valor) — se documentada",
+ "Unidade da área",
+ "Actividade documentada (opcional)",
+ "Estado da actividade",
+ "Designações alternativas",
+ "Uma por linha",
+ "Localização histórica (se diferente da actual)",
+ "Distrito histórico",
+ "Província histórica",
+ "Fonte da localização histórica"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investor-path/context-start.tsx",
+ "forms": 1,
+ "controls": 3,
+ "labels": [
+ "Iniciar ou continuar um investimento",
+ "Dossier",
+ "Título do investimento",
+ "Autorizo reutilizar o meu perfil neste dossier privado."
+ ]
+ },
+ {
+ "file": "resources/js/pages/investor-path/context.tsx",
+ "forms": 0,
+ "controls": 9,
+ "labels": [
+ "Preparar investimento",
+ "Acrescentar uma oportunidade à escolha",
+ "Pesquisar oportunidades",
+ "Referência individual (sem selecção múltipla)",
+ "Sector",
+ "Usar a fonte selecionada em"
+ ]
+ },
+ {
+ "file": "resources/js/pages/investor-path/index.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Os meus investimentos",
+ "Título",
+ "Autorizo reutilizar o meu perfil neste dossier privado."
+ ]
+ },
+ {
+ "file": "resources/js/pages/investor-path/show.tsx",
+ "forms": 3,
+ "controls": 18,
+ "labels": [
+ "Conferi os pressupostos desta etapa para o contexto atual. Esta conferência não substitui evidência nem decisão independente.",
+ "Estado",
+ "Acção",
+ "Fundamento",
+ "Referência de submissão ou decisão",
+ "Documento de suporte",
+ "Entidade externa",
+ "Data do acto",
+ "Oportunidade em tratamento",
+ "Decisão sobre viabilidade",
+ "Serviço",
+ "Etapa",
+ "Tarefa",
+ "Prazo",
+ "Assumo esta tarefa no acompanhamento interno.",
+ "Fundamento do resultado ou atribuição"
+ ]
+ },
+ {
+ "file": "resources/js/pages/land-assistance/case.tsx",
+ "forms": 0,
+ "controls": 8,
+ "labels": [
+ "Referência oficial (se tiver)",
+ "Entidade indicada",
+ "Data indicada",
+ "Categoria",
+ "Ficheiro PDF/JPG/PNG (até 10 MB)",
+ "Estado interno",
+ "Referência interna da preparação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/land-assistance/form.tsx",
+ "forms": 0,
+ "controls": 28,
+ "labels": [
+ "País do requerente (opcional)",
+ "País de origem do pedido (opcional)",
+ "Ocupantes ou utilizações conhecidas?",
+ "Construções, benfeitorias, machambas, servidões ou usos comunitários?",
+ "Título, autorização ou antecedentes?",
+ "Conflito, oposição ou possível sobreposição conhecida?",
+ "Processo existente — informação comunicada pelo requerente",
+ "Preparação/acompanhamento de consulta — não preencher como realizada",
+ "Nome, se aplicável",
+ "Função",
+ "Confirmo que as respostas correspondem à informação de que disponho e assinalei dúvidas conhecidas.",
+ "Autorizo o contacto para responder a este pedido. Esta autorização não permite publicação dos documentos.",
+ "Parcela/área"
+ ]
+ },
+ {
+ "file": "resources/js/pages/land-assistance/print.tsx",
+ "forms": 0,
+ "controls": 5,
+ "labels": [
+ "A. Pedido e requerente",
+ "B. Localização e situação declaradas",
+ "Parcelas (declarações do requerente)",
+ "C. Processo externo indicado pelo requerente",
+ "D. Plano de exploração facultativo",
+ "Notas",
+ "E. Consulta — preparação/informação indicada",
+ "F. Informação complementar"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/catalog.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Nome, título, referência ou slug"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/corridor-agribusiness.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Oportunidades de Agronegócio",
+ "Motivo",
+ "Confirmo a divulgação destes resumos em preparação; não é autorização de execução."
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/desk-assignments.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Responsável",
+ "Fundamento"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/economic-references.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Referências económicas — lote delimitado",
+ "Justificação desta operação",
+ "Confirmo somente a ação selecionada para este lote."
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/editor.tsx",
+ "forms": 1,
+ "controls": 15,
+ "labels": [
+ "Publicar no catálogo",
+ "Publicado na navegação e nos filtros públicos quando também estiver activo",
+ "Sector",
+ "Maturidade",
+ "Âmbito geográfico",
+ "Estado"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/fiscal-qa-review.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Revisão do lote IVA em QA",
+ "Base tributável líquida declarada (decimal com ponto)",
+ "Moeda explícita",
+ "Data de exigibilidade declarada",
+ "Declaro para este ensaio uma operação interna à taxa geral, sem isenção, taxa reduzida ou base especial. Esta declaração não é validação jurídica."
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/interest.tsx",
+ "forms": 3,
+ "controls": 14,
+ "labels": [
+ "Motivo do pedido de revogação",
+ "Estado do pedido",
+ "Nota de acompanhamento",
+ "Próxima acção",
+ "Prazo da próxima acção",
+ "Responsável"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/interests.tsx",
+ "forms": 1,
+ "controls": 5,
+ "labels": [
+ "Manifestações de interesse",
+ "Referência, nome ou email",
+ "Filtrar país do requerente",
+ "Origem declarada"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunities.tsx",
+ "forms": 1,
+ "controls": 7,
+ "labels": [
+ "Fila",
+ "Título ou referência",
+ "Rascunhos eliminados logicamente"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunity-draft.tsx",
+ "forms": 1,
+ "controls": 29,
+ "labels": [
+ "Promotor real e categoria autorizada",
+ "Contexto existente da análise",
+ "Título da análise",
+ "Sector da análise",
+ "Categoria",
+ "Sector",
+ "Tipo de promotor",
+ "Etapa de maturidade",
+ "Modalidade de financiamento existente",
+ "Impacto esperado",
+ "Investimento estimado",
+ "Moeda",
+ "Motivo da alteração",
+ "Confirmo a , preservando histórico e relações",
+ "O que alterou nesta preparação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunity-install.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Confirmo a aplicação deste plano",
+ "Fundamentação da instalação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunity-origin.tsx",
+ "forms": 0,
+ "controls": 3,
+ "labels": [
+ "Classificação",
+ "Fundamento da decisão",
+ "Confirmo esta decisão de classificação",
+ "Revisão da origem das oportunidades"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunity-promotion.tsx",
+ "forms": 1,
+ "controls": 21,
+ "labels": [
+ "Título público",
+ "Resumo público",
+ "Descrição pública",
+ "Limitações e lacunas conhecidas",
+ "Fonte do resumo",
+ "Edição",
+ "Data-base",
+ "Sector divulgado",
+ "Acrescentar abrangência territorial documentada",
+ "Motivo da divulgação, alteração ou retirada",
+ "Confirmo o conteúdo público desta prévia e a operação indicada."
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/opportunity-resources.tsx",
+ "forms": 1,
+ "controls": 18,
+ "labels": [
+ "Imagens, documentos e localizações",
+ "País da localização",
+ "Original / substituir por nova versão",
+ "GeoJSON documentado (opcional)",
+ "Local principal ou adicional",
+ "Selecionar capa de preparação",
+ "Motivo (20–1000 caracteres)",
+ "Confirmar exclusão lógica / restauração"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/relationship-repair.tsx",
+ "forms": 2,
+ "controls": 0,
+ "labels": [
+ "Associações documentadas de projectos âncora e clusters"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/territory-associations.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "Localizações dos investimentos",
+ "Tipo de investimento",
+ "Pesquisar investimento",
+ "Investimento"
+ ]
+ },
+ {
+ "file": "resources/js/pages/management/territory-geometry-import.tsx",
+ "forms": 0,
+ "controls": 7,
+ "labels": [
+ "Importação cartográfica",
+ "Nível",
+ "Fundamento da aplicação ou reversão",
+ "Confirmei as correspondências. A aplicação mantém geometrias privadas e publicação separada.",
+ "Lote a reverter"
+ ]
+ },
+ {
+ "file": "resources/js/pages/partnerships/catalogue.tsx",
+ "forms": 1,
+ "controls": 10,
+ "labels": [
+ "Bolsa de Parcerias",
+ "Pesquisar",
+ "Tipo de parceria",
+ "Oferta ou procura",
+ "Setor",
+ "Território"
+ ]
+ },
+ {
+ "file": "resources/js/pages/partnerships/detail.tsx",
+ "forms": 1,
+ "controls": 17,
+ "labels": [
+ "Motivo da ação",
+ "Participação",
+ "Proposta curta",
+ "Autorizo a partilha desta candidatura com o responsável pela parceria.",
+ "Referência da evidência",
+ "Motivo da decisão ou pedido de esclarecimento",
+ "Motivo da retirada"
+ ]
+ },
+ {
+ "file": "resources/js/pages/partnerships/editor.tsx",
+ "forms": 1,
+ "controls": 32,
+ "labels": [
+ "Título",
+ "Organização que representa (opcional)",
+ "Oferta ou procura",
+ "Tipo de parceria",
+ "Setor",
+ "Resumo público",
+ "O que oferece",
+ "O que procura",
+ "Requisitos e critérios desejáveis",
+ "Critérios obrigatórios expressos da proposta",
+ "Prazo para interesses",
+ "Visibilidade do conteúdo detalhado",
+ "Localização do cadastro",
+ "Papel",
+ "Fonte da localização",
+ "Adicionar origem existente",
+ "Autorizo submeter o conteúdo indicado para divulgação no âmbito escolhido. Não confirma verificação ou certificação."
+ ]
+ },
+ {
+ "file": "resources/js/pages/partnerships/installation.tsx",
+ "forms": 1,
+ "controls": 0,
+ "labels": [
+ "Aplicação da Bolsa de Parcerias"
+ ]
+ },
+ {
+ "file": "resources/js/pages/partnerships/room.tsx",
+ "forms": 3,
+ "controls": 21,
+ "labels": [
+ "Entregável",
+ "Responsável",
+ "Data prevista",
+ "Estado",
+ "Evidência ou referência do resultado",
+ "Mensagem privada",
+ "Anexar PDF ou imagem",
+ "Autorizo a consulta pela contraparte desta sala.",
+ "Motivo da ação",
+ "Título do instrumento",
+ "Condições e plano de valor"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/article-editor.tsx",
+ "forms": 1,
+ "controls": 6,
+ "labels": [
+ "Corpo do artigo",
+ "Tratamento da imagem",
+ "Imagem da biblioteca"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/contact.tsx",
+ "forms": 1,
+ "controls": 5,
+ "labels": [
+ "Contacto",
+ "Nome Completo",
+ "Seu nome...",
+ "Email",
+ "Seuemail@exemplo.com",
+ "Telefone",
+ "85 884 7646",
+ "Assunto",
+ "Sobre o que deseja falar?",
+ "Mensagem",
+ "Escreva sua mensagem aqui..."
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/fiscal-forms.tsx",
+ "forms": 1,
+ "controls": 7,
+ "labels": [
+ "Preencher formulário fiscal",
+ "Formulário",
+ "Identificação e período",
+ "Nome ou designação social",
+ "NUIT",
+ "Valores em meticais (MZN)",
+ "—",
+ "Notas e referências dos valores",
+ "Recuperar ficheiro guardado"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/legacy.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Pesquisar no conteúdo"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/manage.tsx",
+ "forms": 3,
+ "controls": 66,
+ "labels": [
+ "Ficheiro",
+ "Entidade/autor (se conhecido)",
+ "Origem HTTPS identificada (opcional)",
+ "Documento recebido",
+ "Título",
+ "Tipo documental",
+ "Descrição em linguagem clara",
+ "Categoria",
+ "Entidade emitente / autor",
+ "Número documental",
+ "Data documental",
+ "Fonte oficial/origem HTTPS",
+ "Referência da fonte e autorização",
+ "Idioma (código, ex. pt)",
+ "Versão",
+ "Grupo de versões/traduções",
+ "UUID partilhado entre versões relacionadas",
+ "Âmbito territorial",
+ "Território (ID da base territorial)",
+ "Confirmação da origem",
+ "Situação jurídica",
+ "Aplicável desde (se documentado)",
+ "Aplicável até (se documentado)",
+ "Direitos de utilização",
+ "Classificação do ficheiro",
+ "Incluir também em Legislação e Incentivos",
+ "Destacar como essencial na página inicial",
+ "Foi realizada revisão independente por outro gestor",
+ "Relações com etapas, módulos e requisitos",
+ "Tipo",
+ "Chave exacta",
+ "Chave exacta existente (actividade, módulo, procedimento…)",
+ "Relação",
+ "Aplicabilidade",
+ "Condição",
+ "Fundamento documental",
+ "Conferência da citação",
+ "Pesquisar título, ficheiro, número ou entidade",
+ "Estado do conteúdo"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portal/services.tsx",
+ "forms": 4,
+ "controls": 20,
+ "labels": [
+ "País do requerente",
+ "País de origem do pedido (opcional)",
+ "Descreva o pedido",
+ "Seleccione uma província",
+ "Província",
+ "Autorizo a publicação dos dados desta proposta após revisão.",
+ "Pesquisar",
+ "Tema",
+ "Categoria",
+ "Tipo documental",
+ "Actividade ou CAE",
+ "Etapa do projecto",
+ "Módulo",
+ "Entidade emitente",
+ "Idioma",
+ "Situação jurídica indicada",
+ "Confirmação da fonte",
+ "Âmbito territorial",
+ "Todas as províncias",
+ "Filtrar por província"
+ ]
+ },
+ {
+ "file": "resources/js/pages/PortalInvestidor.tsx",
+ "forms": 1,
+ "controls": 25,
+ "labels": [
+ "Pesquisar...",
+ "Todas as províncias",
+ "Dimensão: investimento mínimo",
+ "Investimento máximo",
+ "Moeda",
+ "Nome completo",
+ "Email",
+ "Telefone",
+ "Tipo de investidor",
+ "País",
+ "País do requerente",
+ "País de origem do pedido (opcional)",
+ "Sector de interesse",
+ "Faixa de investimento",
+ "Mensagem",
+ "Descreva o seu interesse ou a informação pretendida.",
+ "Aceito que os meus dados sejam usados para efeitos de contacto e análise da manifestação de interesse.",
+ "Acesso à gestão"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portfolio/index.tsx",
+ "forms": 1,
+ "controls": 6,
+ "labels": [
+ "Corredores, clusters e projectos âncora",
+ "Pesquisar",
+ "Explorar por",
+ "Sector documentado"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portfolio/show.tsx",
+ "forms": 3,
+ "controls": 8,
+ "labels": [
+ "Título",
+ "Fonte e versão",
+ "Referência da autorização e revisão"
+ ]
+ },
+ {
+ "file": "resources/js/pages/portfolio/workspace.tsx",
+ "forms": 1,
+ "controls": 11,
+ "labels": [
+ "País",
+ "País do requerente",
+ "País de origem do pedido (opcional)",
+ "Papel pretendido",
+ "Horizonte de investimento",
+ "Ex.: nos próximos 12 meses",
+ "Objectivo e capacidade de participação",
+ "Autorizo a reutilização do meu nome e email e o tratamento destes dados pela equipa do portal para acompanhar este interesse.",
+ "O meu painel de investimento"
+ ]
+ },
+ {
+ "file": "resources/js/pages/procurement/edit.tsx",
+ "forms": 1,
+ "controls": 29,
+ "labels": [
+ "Regime",
+ "Obras, bens ou serviços",
+ "Garantias exigidas neste procedimento",
+ "Fuso horário do procedimento (ex.: Africa/Maputo)",
+ "Africa/Maputo",
+ "Prazo mínimo documentado em dias (opcional)",
+ "Contagem documentada",
+ "Lote",
+ "Anexo",
+ "Incluir este anexo na divulgação pública",
+ "Contacto autorizado para divulgação pública",
+ "Motivo interno da gravação (20–1000 caracteres)",
+ "Acto a publicar"
+ ]
+ },
+ {
+ "file": "resources/js/pages/procurement/index.tsx",
+ "forms": 1,
+ "controls": 10,
+ "labels": [
+ "Concursos e anúncios",
+ "Palavras-chave",
+ "Regime",
+ "Estado",
+ "Prazo até (data local do procedimento)"
+ ]
+ },
+ {
+ "file": "resources/js/pages/profiles/administration.tsx",
+ "forms": 5,
+ "controls": 28,
+ "labels": [
+ "Denominação",
+ "NUIT",
+ "Contacto",
+ "Director Geral",
+ "Origem dos dados",
+ "Conta da pessoa designada",
+ "Função interna",
+ "Vínculo à organização operadora",
+ "Âmbito da função interna",
+ "Categorias da função interna",
+ "Confirmo a designação interna expressa pelo responsável da organização operadora.",
+ "Fundamento da designação interna",
+ "ID da conta existente",
+ "Papel",
+ "Âmbito organizacional",
+ "Tipos autorizados",
+ "Responsabilidades adicionais",
+ "Validade opcional",
+ "Fundamento",
+ "Titular a substituir",
+ "ID do candidato com MFA confirmado",
+ "Operação a elevar",
+ "ID da oportunidade",
+ "Tipos efetivamente aprovados",
+ "Conferi identidade, representação e comprovativos; esta declaração fica auditada.",
+ "Gestão de perfis",
+ "Motivo de revogação"
+ ]
+ },
+ {
+ "file": "resources/js/pages/profiles/audit.tsx",
+ "forms": 1,
+ "controls": 1,
+ "labels": [
+ "Auditoria de acessos"
+ ]
+ },
+ {
+ "file": "resources/js/pages/profiles/bootstrap-confirmation.tsx",
+ "forms": 0,
+ "controls": 2,
+ "labels": [
+ "Confirmar os dois titulares",
+ "Fundamento da confirmação",
+ "Confirmo apenas estas duas contas e esta base"
+ ]
+ },
+ {
+ "file": "resources/js/pages/profiles/installation.tsx",
+ "forms": 0,
+ "controls": 4,
+ "labels": [
+ "Instalação dos perfis — 040000",
+ "Fundamento",
+ "Confirmo exclusivamente a ação indicada nesta base",
+ "ID da primeira conta explicitamente designada",
+ "ID da segunda conta explicitamente designada"
+ ]
+ },
+ {
+ "file": "resources/js/pages/profiles/request.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Perfil de Promotor",
+ "Em nome de quem vai actuar?",
+ "Organização representada",
+ "Que oportunidades pretende preparar?",
+ "Para que actividades precisa do perfil de Promotor?"
+ ]
+ },
+ {
+ "file": "resources/js/pages/settings/profile.tsx",
+ "forms": 1,
+ "controls": 4,
+ "labels": [
+ "Definições do perfil",
+ "Perfil",
+ "Nome completo",
+ "Endereço de correio electrónico"
+ ]
+ },
+ {
+ "file": "resources/js/pages/settings/security.tsx",
+ "forms": 1,
+ "controls": 3,
+ "labels": [
+ "Definições de segurança",
+ "Alterar palavra-passe",
+ "Palavra-passe actual",
+ "Nova palavra-passe",
+ "Confirmar palavra-passe"
+ ]
+ },
+ {
+ "file": "resources/js/pages/structures/competitiveness.tsx",
+ "forms": 0,
+ "controls": 6,
+ "labels": [
+ "Sector analisado",
+ "Região / província / distrito e abrangência",
+ "Pressão competitiva",
+ "Recuperar ficheiro deste cluster",
+ "Evidência / motivo da aprovação ou retirada"
+ ]
+ },
+ {
+ "file": "resources/js/pages/structures/editor.tsx",
+ "forms": 3,
+ "controls": 40,
+ "labels": [
+ "Código da etapa",
+ "Nome da etapa",
+ "Fase da cadeia",
+ "Código",
+ "Nome",
+ "Estado",
+ "Sector do cluster",
+ "Descrição",
+ "Orçamento (use ponto para os decimais)",
+ "Moeda (código de três letras)",
+ "Data de início",
+ "Data de conclusão",
+ "Projecto",
+ "Papel no cluster",
+ "Tipo de associacao",
+ "Referencia da fonte",
+ "Referencia da evidencia",
+ "Vigente desde",
+ "Vigente ate"
+ ]
+ },
+ {
+ "file": "resources/js/pages/structures/index.tsx",
+ "forms": 1,
+ "controls": 2,
+ "labels": [
+ "Pesquisar por nome ou código"
+ ]
+ },
+ {
+ "file": "resources/js/pages/structures/value-network.tsx",
+ "forms": 2,
+ "controls": 12,
+ "labels": [
+ "Etapa com lacuna",
+ "Estado da lacuna",
+ "Etapa de origem",
+ "Etapa de destino",
+ "Tipo de ligação"
+ ]
+ }
+ ],
+ "serverSchemas": [
+ "app/Services/BusinessFormSchema.php"
+ ],
+ "review": "Static screening of declared forms and shared controls; targeted copy corrections. Dynamic fields, runtime visibility and visual review remain partial."
+}
diff --git a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
index 6002864c..b6f57890 100644
--- a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
+++ b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
@@ -153,7 +153,7 @@ RF-GEO-005,Apresentar mapa apenas quando autorizado.,upgrade v4 SHA f0b9815…;
RF-GEO-006,Aplicar níveis de precisão e confidencialidade.,upgrade v4 SHA f0b9815…; p. 3720; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-GEO-006: O sistema pode publicar província, distrito, ponto aproximado, ponto exacto, traçado ou polígono sem expor dados mais restritos.",P2,RF-GEO-006: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-006,1,"[{""id"":""RF-GEO-006"",""pedido"":""Aplicar níveis de precisão e confidencialidade."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3720; requirements-audit.csv""],""aceitacao"":""O sistema pode publicar província, distrito, ponto aproximado, ponto exacto, traçado ou polígono sem expor dados mais restritos."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-GEO-007,Gerir pedidos de validação institucional.,upgrade v4 SHA f0b9815…; p. 3723; requirements-audit.csv,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","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.","RF-GEO-007: Pedido possui protocolo, entidade, ponto focal, prazo, anexos, comentários, decisão e validade.",P2,RF-GEO-007: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-007,1,"[{""id"":""RF-GEO-007"",""pedido"":""Gerir pedidos de validação institucional."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3723; requirements-audit.csv""],""aceitacao"":""Pedido possui protocolo, entidade, ponto focal, prazo, anexos, comentários, decisão e validade."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""Balcão/orientação""}]",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.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"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.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","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.,Reconciliação e prova individual antes de estimar alteração,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.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,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.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; 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-GEO-008,Suspender mapas desactualizados ou revogados.,upgrade v4 SHA f0b9815…; p. 3726; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-GEO-008: Nova versão, expiração ou revogação remove o mapa público e cria tarefa de revalidação.",P2,RF-GEO-008: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-008,1,"[{""id"":""RF-GEO-008"",""pedido"":""Suspender mapas desactualizados ou revogados."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3726; requirements-audit.csv""],""aceitacao"":""Nova versão, expiração ou revogação remove o mapa público e cria tarefa de revalidação."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-GEO-009,Pesquisar projectos por mapa e localização.,upgrade v4 SHA f0b9815…; p. 3729; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-GEO-009: O utilizador filtra por província, distrito, raio, corredor, ZEE, parque, bacia, sector e natureza pública ou privada.",P2,RF-GEO-009: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-009,1,"[{""id"":""RF-GEO-009"",""pedido"":""Pesquisar projectos por mapa e localização."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3729; requirements-audit.csv""],""aceitacao"":""O utilizador filtra por província, distrito, raio, corredor, ZEE, parque, bacia, sector e natureza pública ou privada."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 19/10/2026 — incremento QA independente localização/associações, revisão 660a25e37e1e010be68b765e9ff22eacb1b8a963f1a70e1f293564e67f99c1f4. Pedido expresso da Tempo: harmonizar sem nova regra; reutilizar dados e preservar estados/fontes/histórico. Duas funções comprovadas no código/schema; títulos esclarecidos, reutilização explícita da hierarquia, principal/adicional/por indicar e aviso não destrutivo de divergência. Provas de gravação/recuperação, HTTP409, associação preliminar, filtros, mapa sem geometria e dossier em outputs/investmoz-territorios-localizacao-QA-20261019/RELATORIO-QA.md e para-revisao/MANIFESTO-QA.json. Snapshot real de 18/10/2026; exemplos de associação sintéticos; zero geometrias reais, sem prova de desenho positivo nem avaliação com utilizadores humanos. Sem migrations, MFA/papéis ou alteração activa; separado da HML01. Recorte não encerra o requisito global.",governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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.,"19/10/2026 — incremento QA independente localização/associações, revisão 660a25e37e1e010be68b765e9ff22eacb1b8a963f1a70e1f293564e67f99c1f4. Pedido expresso da Tempo: harmonizar sem nova regra; reutilizar dados e preservar estados/fontes/histórico. Duas funções comprovadas no código/schema; títulos esclarecidos, reutilização explícita da hierarquia, principal/adicional/por indicar e aviso não destrutivo de divergência. Provas de gravação/recuperação, HTTP409, associação preliminar, filtros, mapa sem geometria e dossier em outputs/investmoz-territorios-localizacao-QA-20261019/RELATORIO-QA.md e para-revisao/MANIFESTO-QA.json. Snapshot real de 18/10/2026; exemplos de associação sintéticos; zero geometrias reais, sem prova de desenho positivo nem avaliação com utilizadores humanos. Sem migrations, MFA/papéis ou alteração activa; separado da HML01. Recorte não encerra o requisito global.",,,"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-GEO-009,Pesquisar projectos por mapa e localização.,upgrade v4 SHA f0b9815…; p. 3729; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. | 2026-11-02: delta local autorizado; mapa unico no catalogo com camadas independentes, foco na seleccao territorial e fontes expansiveis. Pre-visualizacoes de outros ecras preservadas. Sem mudancas de dados, schema ou permissoes. | 02/11/2026, revisao dos consumidores: mapa unico no painel de fichas/zonas/carteira e nas parcerias; rotulos distintos para locais documentados e perimetros declarados. Sem inferir territorio por geo_location_id generico; respostas antigas ocultas ao mudar filtros. Mapas de objectos distintos e fontes/permissoes preservados.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | tests/frontend/catalogue-map-layers.test.mjs; investment-map-panel.test.mjs; search-territory.test.mjs; territory-search-select.test.mjs: 15 testes aprovados; TypeScript e build local. Manual: docs/investmoz/unification/traceability-and-manual.md. Sem publicacao adicional ou verificacao visual no dominio. | Delta consumidores: 17 testes frontend focados aprovados, TypeScript e build local; tests/frontend/catalogue-map-layers.test.mjs e investment-map-panel.test.mjs com regressoes territoriais. Inventario e limites no manual existente. Sem publicacao adicional nem prova visual no dominio. | 02/11/2026: robustez transversal do catalogo publico: paginacao antiga indisponivel durante pesquisa/falha; API distingue erros HTML/419/respostas vazias e conserva mensagens JSON e CSRF multipart. 25 testes frontend focados e TypeScript aprovados; sem alteracao de dados, permissoes ou publicacao. Ver tests/frontend/catalogue-request-errors.test.mjs. | 02/11/2026: seleccao multipla do catalogo valida IDs persistidos e trata falhas de armazenamento com aviso, sem bloquear seleccionar/limpar/preparar. 19 testes focados e TypeScript aprovados; ver opportunity-selection.test.mjs. Sem alteracoes de dados ou direitos. | 02/11/2026: fichas da carteira e zonas conservam pagina e filtros no regresso, em publico e gestao. 20 testes de navegacao/territorio aprovados; sem parametros alheios, dados ou direitos. Prova local parcial.",Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-GEO-009: O utilizador filtra por província, distrito, raio, corredor, ZEE, parque, bacia, sector e natureza pública ou privada.",P2,RF-GEO-009: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-009,1,"[{""id"":""RF-GEO-009"",""pedido"":""Pesquisar projectos por mapa e localização."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3729; requirements-audit.csv""],""aceitacao"":""O utilizador filtra por província, distrito, raio, corredor, ZEE, parque, bacia, sector e natureza pública ou privada."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 19/10/2026 — incremento QA independente localização/associações, revisão 660a25e37e1e010be68b765e9ff22eacb1b8a963f1a70e1f293564e67f99c1f4. Pedido expresso da Tempo: harmonizar sem nova regra; reutilizar dados e preservar estados/fontes/histórico. Duas funções comprovadas no código/schema; títulos esclarecidos, reutilização explícita da hierarquia, principal/adicional/por indicar e aviso não destrutivo de divergência. Provas de gravação/recuperação, HTTP409, associação preliminar, filtros, mapa sem geometria e dossier em outputs/investmoz-territorios-localizacao-QA-20261019/RELATORIO-QA.md e para-revisao/MANIFESTO-QA.json. Snapshot real de 18/10/2026; exemplos de associação sintéticos; zero geometrias reais, sem prova de desenho positivo nem avaliação com utilizadores humanos. Sem migrations, MFA/papéis ou alteração activa; separado da HML01. Recorte não encerra o requisito global.",governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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.,"19/10/2026 — incremento QA independente localização/associações, revisão 660a25e37e1e010be68b765e9ff22eacb1b8a963f1a70e1f293564e67f99c1f4. Pedido expresso da Tempo: harmonizar sem nova regra; reutilizar dados e preservar estados/fontes/histórico. Duas funções comprovadas no código/schema; títulos esclarecidos, reutilização explícita da hierarquia, principal/adicional/por indicar e aviso não destrutivo de divergência. Provas de gravação/recuperação, HTTP409, associação preliminar, filtros, mapa sem geometria e dossier em outputs/investmoz-territorios-localizacao-QA-20261019/RELATORIO-QA.md e para-revisao/MANIFESTO-QA.json. Snapshot real de 18/10/2026; exemplos de associação sintéticos; zero geometrias reais, sem prova de desenho positivo nem avaliação com utilizadores humanos. Sem migrations, MFA/papéis ou alteração activa; separado da HML01. Recorte não encerra o requisito global.",,,"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-GEO-010,Importar e exportar dados geográficos autorizados.,upgrade v4 SHA f0b9815…; p. 3732; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-GEO-010: O sistema suporta formatos geográficos definidos, gera relatório de erros e preserva fonte, versão e permissões.",P2,RF-GEO-010: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-GEO-010,1,"[{""id"":""RF-GEO-010"",""pedido"":""Importar e exportar dados geográficos autorizados."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3732; requirements-audit.csv""],""aceitacao"":""O sistema suporta formatos geográficos definidos, gera relatório de erros e preserva fonte, versão e permissões."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MIN-001,Aplicar formulário e checklist específicos por fase mineira.,upgrade v4 SHA f0b9815…; p. 3260; requirements-audit.csv,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,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.,RF-MIN-001: Campos e documentos mudam conforme fase e modalidade sem eliminar dados históricos.,P2,RF-MIN-001: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MIN-001,1,"[{""id"":""RF-MIN-001"",""pedido"":""Aplicar formulário e checklist específicos por fase mineira."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3260; requirements-audit.csv""],""aceitacao"":""Campos e documentos mudam conforme fase e modalidade sem eliminar dados históricos."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""biblioteca""}]",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.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"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.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",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.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,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.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; 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-MIN-002,"Validar título, titular, área e validade.",upgrade v4 SHA f0b9815…; p. 3263; requirements-audit.csv | portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 883 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3724 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 888 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2522 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3724,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-MIN-002: Inconsistência entre título, titular ou polígono impede aprovação e gera pendência auditável. | MASTER-471012ab-0102: Validar título, titular, área e validade. | MASTER-e1169a77-0253: Validar título, titular, área e validade. | MASTER-f70ce307-0109: Validar título, titular, área e validade. | MASTER-51b8f0ad-0189: Validar título, titular, área e validade. | MASTER-edece80c-0253: Validar título, titular, área e validade.",P2,RF-MIN-002: Relatório 25/09 conservado; estado histórico não promove conclusão | MASTER-471012ab-0102: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0253: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0109: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0189: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0253: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,RF-MIN-002 | MASTER-471012ab-0102 | MASTER-e1169a77-0253 | MASTER-f70ce307-0109 | MASTER-51b8f0ad-0189 | MASTER-edece80c-0253,6,"[{""id"":""RF-MIN-002"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3263; requirements-audit.csv""],""aceitacao"":""Inconsistência entre título, titular ou polígono impede aprovação e gera pendência auditável."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""},{""id"":""MASTER-471012ab-0102"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 883""],""aceitacao"":""Validar título, titular, área e validade."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-e1169a77-0253"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3724""],""aceitacao"":""Validar título, titular, área e validade."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-f70ce307-0109"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 888""],""aceitacao"":""Validar título, titular, área e validade."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-51b8f0ad-0189"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2522""],""aceitacao"":""Validar título, titular, área e validade."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-edece80c-0253"",""pedido"":""Validar título, titular, área e validade."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3724""],""aceitacao"":""Validar título, titular, área e validade."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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.",,,
@@ -162,7 +162,7 @@ RF-MIN-004,"Gerir documentos ambientais, sociais e de encerramento.",upgrade v4
RF-MIN-005,"Controlar cessão, mudança de controlo e aprovações.",upgrade v4 SHA f0b9815…; p. 3272; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",RF-MIN-005: A oportunidade mostra estado condicionado até à aprovação competente; conclusão exige evidência formal.,P2,RF-MIN-005: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MIN-005,1,"[{""id"":""RF-MIN-005"",""pedido"":""Controlar cessão, mudança de controlo e aprovações."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3272; requirements-audit.csv""],""aceitacao"":""A oportunidade mostra estado condicionado até à aprovação competente; conclusão exige evidência formal."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MIN-006,Pesquisar e corresponder oportunidades mineiras.,upgrade v4 SHA f0b9815…; p. 3275; 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.",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-MIN-006: Filtros incluem recurso, fase, título, localização, valor, modalidade e infra-estrutura; recomendação é explicável e revista por gestor.",P2,RF-MIN-006: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MIN-006,1,"[{""id"":""RF-MIN-006"",""pedido"":""Pesquisar e corresponder oportunidades mineiras."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 3275; requirements-audit.csv""],""aceitacao"":""Filtros incluem recurso, fase, título, localização, valor, modalidade e infra-estrutura; recomendação é explicável e revista por gestor."",""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.",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.,"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.,Reconciliação e prova individual antes de estimar alteração,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.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,oportunidades,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.",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-MN-001,Registar utilizadores singulares e colectivos com verificação de contactos.,upgrade v4 SHA f0b9815…; p. 2957; requirements-audit.csv | portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 573 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3409 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 580 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2214 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3409,CRM/solicitações,//; /Simulador; /api/v1/documents/recommendations; /api/v1/investment/submissions; /api/v1/investment/submissions/{id}; /api/v1/investment/submissions/{id}/attachments; /api/v1/investment/submissions/{id}/attachments/{attachment}; /api/v1/investment/submissions/{id}/submit; /apoio; /balcao-virtual; /como-investir; /documentos,"investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente. 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.",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,"Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,RF-MN-001: Conta só é activada após confirmação do correio electrónico ou telefone; tentativas e falhas ficam registadas. | MASTER-471012ab-0051: Registar utilizadores singulares e colectivos com verificação de contactos. | MASTER-e1169a77-0201: Registar utilizadores singulares e colectivos com verificação de contactos. | MASTER-f70ce307-0057: Registar utilizadores singulares e colectivos com verificação de contactos. | MASTER-51b8f0ad-0137: Registar utilizadores singulares e colectivos com verificação de contactos. | MASTER-edece80c-0201: Registar utilizadores singulares e colectivos com verificação de contactos.,P2,RF-MN-001: Relatório 25/09 conservado; estado histórico não promove conclusão | MASTER-471012ab-0051: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0201: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0057: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0137: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0201: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,RF-MN-001 | MASTER-471012ab-0051 | MASTER-e1169a77-0201 | MASTER-f70ce307-0057 | MASTER-51b8f0ad-0137 | MASTER-edece80c-0201,6,"[{""id"":""RF-MN-001"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2957; requirements-audit.csv""],""aceitacao"":""Conta só é activada após confirmação do correio electrónico ou telefone; tentativas e falhas ficam registadas."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-471012ab-0051"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 573""],""aceitacao"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-e1169a77-0201"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3409""],""aceitacao"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-f70ce307-0057"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 580""],""aceitacao"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-51b8f0ad-0137"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2214""],""aceitacao"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-edece80c-0201"",""pedido"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3409""],""aceitacao"":""Registar utilizadores singulares e colectivos com verificação de contactos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitaçõ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.interest_requests: 4 registos; public.leads: 0 registos; public.investors: 3 registos,"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.","Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.","investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: acompanhamento. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,acompanhamento,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.",app/Http/Controllers/CrmController.php; app/Services/DeclaredOriginStatistics.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InterestSubmissionTest, InvestmentWorkspaceTest, PortalOriginCompatibilityTest; 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-MN-002,"Gerir perfis, representantes, funções e organizações.",upgrade v4 SHA f0b9815…; p. 2961; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",RF-MN-002: Uma organização pode ter vários utilizadores; cada acção identifica o utilizador e a função.,P2,RF-MN-002: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MN-002,1,"[{""id"":""RF-MN-002"",""pedido"":""Gerir perfis, representantes, funções e organizações."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2961; requirements-audit.csv""],""aceitacao"":""Uma organização pode ter vários utilizadores; cada acção identifica o utilizador e a função."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MN-002,"Gerir perfis, representantes, funções e organizações.",upgrade v4 SHA f0b9815…; p. 2961; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.","outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 02/11/2026: profile-json preserva erros por campo e reautenticacao em falhas HTML/419 e rejeita JSON invalido; contexto de investimento rejeita falso sucesso HTTP 200 e liberta keepalive, sem repetir escritas. 26 testes focados, TypeScript e build aprovados. Prova local parcial; sem dados/permissoes/publicacao. | Retoma 02/11/2026: profileJson GET independente de cookie CSRF malformado; POST recusa antes do transporte com mensagem de recuperacao. Preservadas validacao e credenciais. 14 testes focados aprovados, incluindo separadores de cookie sem espaco; sem mudanca de direitos.",Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",RF-MN-002: Uma organização pode ter vários utilizadores; cada acção identifica o utilizador e a função.,P2,RF-MN-002: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MN-002,1,"[{""id"":""RF-MN-002"",""pedido"":""Gerir perfis, representantes, funções e organizações."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2961; requirements-audit.csv""],""aceitacao"":""Uma organização pode ter vários utilizadores; cada acção identifica o utilizador e a função."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MN-003,"Criar, guardar, editar e submeter ofertas e procuras.",upgrade v4 SHA f0b9815…; p. 2965; requirements-audit.csv | portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 581 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3417 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 588 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2222 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3417,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-MN-003: Rascunho persiste; submissão bloqueia campos essenciais e gera número de protocolo. | MASTER-471012ab-0052: Criar, guardar, editar e submeter ofertas e procuras. | MASTER-e1169a77-0202: Criar, guardar, editar e submeter ofertas e procuras. | MASTER-f70ce307-0058: Criar, guardar, editar e submeter ofertas e procuras. | MASTER-51b8f0ad-0138: Criar, guardar, editar e submeter ofertas e procuras. | MASTER-edece80c-0202: Criar, guardar, editar e submeter ofertas e procuras.",P2,RF-MN-003: Relatório 25/09 conservado; estado histórico não promove conclusão | MASTER-471012ab-0052: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0202: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0058: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0138: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0202: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,RF-MN-003 | MASTER-471012ab-0052 | MASTER-e1169a77-0202 | MASTER-f70ce307-0058 | MASTER-51b8f0ad-0138 | MASTER-edece80c-0202,6,"[{""id"":""RF-MN-003"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2965; requirements-audit.csv""],""aceitacao"":""Rascunho persiste; submissão bloqueia campos essenciais e gera número de protocolo."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""},{""id"":""MASTER-471012ab-0052"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 581""],""aceitacao"":""Criar, guardar, editar e submeter ofertas e procuras."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-e1169a77-0202"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3417""],""aceitacao"":""Criar, guardar, editar e submeter ofertas e procuras."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-f70ce307-0058"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 588""],""aceitacao"":""Criar, guardar, editar e submeter ofertas e procuras."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-51b8f0ad-0138"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2222""],""aceitacao"":""Criar, guardar, editar e submeter ofertas e procuras."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-edece80c-0202"",""pedido"":""Criar, guardar, editar e submeter ofertas e procuras."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3417""],""aceitacao"":""Criar, guardar, editar e submeter ofertas e procuras."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MN-004,"Aplicar campos condicionais por tipo de pessoa, modalidade e fase.",upgrade v4 SHA f0b9815…; p. 2969; requirements-audit.csv,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-MN-004: Campos aparecem e tornam-se obrigatórios conforme regras da matriz, sem perda de dados válidos.",P2,RF-MN-004: Relatório 25/09 conservado; estado histórico não promove conclusão,RF-MN-004,1,"[{""id"":""RF-MN-004"",""pedido"":""Aplicar campos condicionais por tipo de pessoa, modalidade e fase."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2969; requirements-audit.csv""],""aceitacao"":""Campos aparecem e tornam-se obrigatórios conforme regras da matriz, sem perda de dados válidos."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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-MN-005,"Validar formatos, intervalos, dependências, duplicados e consentimentos.",upgrade v4 SHA f0b9815…; p. 2973; requirements-audit.csv | portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 589 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3425 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 596 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2230 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3425,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","RF-MN-005: O sistema impede submissão inválida e apresenta mensagem associada ao campo e orientação de correcção. | MASTER-471012ab-0054: Validar formatos, intervalos, dependências, duplicados e consentimentos. | MASTER-e1169a77-0204: Validar formatos, intervalos, dependências, duplicados e consentimentos. | MASTER-f70ce307-0060: Validar formatos, intervalos, dependências, duplicados e consentimentos. | MASTER-51b8f0ad-0140: Validar formatos, intervalos, dependências, duplicados e consentimentos. | MASTER-edece80c-0204: Validar formatos, intervalos, dependências, duplicados e consentimentos.",P2,RF-MN-005: Relatório 25/09 conservado; estado histórico não promove conclusão | MASTER-471012ab-0054: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0204: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0060: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0140: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0204: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,RF-MN-005 | MASTER-471012ab-0054 | MASTER-e1169a77-0204 | MASTER-f70ce307-0060 | MASTER-51b8f0ad-0140 | MASTER-edece80c-0204,6,"[{""id"":""RF-MN-005"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""upgrade v4 SHA f0b9815…; p. 2973; requirements-audit.csv""],""aceitacao"":""O sistema impede submissão inválida e apresenta mensagem associada ao campo e orientação de correcção."",""estado"":""parcial"",""variantes"":""Relatório 25/09 conservado; estado histórico não promove conclusão"",""modulo"":""governação/outros""},{""id"":""MASTER-471012ab-0054"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 589""],""aceitacao"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-e1169a77-0204"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 3425""],""aceitacao"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-f70ce307-0060"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 596""],""aceitacao"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-51b8f0ad-0140"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 2230""],""aceitacao"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-edece80c-0204"",""pedido"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 3425""],""aceitacao"":""Validar formatos, intervalos, dependências, duplicados e consentimentos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.
@@ -655,7 +655,8 @@ MASTER-471012ab-0120,"Seleccionar componente, cultura ou serviço e manifestar i
MASTER-471012ab-0121,"Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1444 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4292 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1446 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3080 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4292,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.",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.","MASTER-471012ab-0121: Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado. | MASTER-e1169a77-0274: Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado. | MASTER-f70ce307-0130: Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado. | MASTER-51b8f0ad-0210: Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado. | MASTER-edece80c-0274: Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado.",P2,MASTER-471012ab-0121: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0274: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0130: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0210: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0274: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0121 | MASTER-e1169a77-0274 | MASTER-f70ce307-0130 | MASTER-51b8f0ad-0210 | MASTER-edece80c-0274,5,"[{""id"":""MASTER-471012ab-0121"",""pedido"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1444""],""aceitacao"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-e1169a77-0274"",""pedido"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4292""],""aceitacao"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-f70ce307-0130"",""pedido"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1446""],""aceitacao"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-51b8f0ad-0210"",""pedido"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3080""],""aceitacao"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-edece80c-0274"",""pedido"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4292""],""aceitacao"":""Nota editorial: custos, metas, maturidade, entidades responsáveis e disponibilidade para investimento devem ser confirmados com o MPD e a entidade de tutela antes da publicação. A ficha pública deve distinguir claramente informação oficial, estimativa, oportunidade complementar e chamada exploratória ao mercado."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""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.",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.,"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.,Reconciliação e prova individual antes de estimar alteração,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.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,oportunidades,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.",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.",,,
MASTER-471012ab-0122,"Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1447 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4295 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1449 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3083 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4295,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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"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.","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.","MASTER-471012ab-0122: Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal. | MASTER-e1169a77-0275: Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal. | MASTER-f70ce307-0131: Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal. | MASTER-51b8f0ad-0211: Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal. | MASTER-edece80c-0275: Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal.",P1,MASTER-471012ab-0122: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0275: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0131: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0211: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0275: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0122 | MASTER-e1169a77-0275 | MASTER-f70ce307-0131 | MASTER-51b8f0ad-0211 | MASTER-edece80c-0275,5,"[{""id"":""MASTER-471012ab-0122"",""pedido"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1447""],""aceitacao"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-e1169a77-0275"",""pedido"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4295""],""aceitacao"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-f70ce307-0131"",""pedido"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1449""],""aceitacao"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-51b8f0ad-0211"",""pedido"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3083""],""aceitacao"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-edece80c-0275"",""pedido"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4295""],""aceitacao"":""Local do investimento: país, região, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência e coordenadas geográficas, quando disponíveis. Projectos nacionais ou multiterritoriais devem listar cada área abrangida e indicar a localização principal."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""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,"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.","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.","InvestmentGeography, campos TerritoryFields/ProvinceSelect, geo_locations/geo_geometries e importador autenticado","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.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: território. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,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.,,,,"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.",,,
MASTER-471012ab-0123,"Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1460 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4308 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1462 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3096 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4308,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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"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.","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.","MASTER-471012ab-0123: Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas. | MASTER-e1169a77-0276: Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas. | MASTER-f70ce307-0132: Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas. | MASTER-51b8f0ad-0212: Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas. | MASTER-edece80c-0276: Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas.",P1,MASTER-471012ab-0123: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0276: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0132: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0212: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0276: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0123 | MASTER-e1169a77-0276 | MASTER-f70ce307-0132 | MASTER-51b8f0ad-0212 | MASTER-edece80c-0276,5,"[{""id"":""MASTER-471012ab-0123"",""pedido"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1460""],""aceitacao"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-e1169a77-0276"",""pedido"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4308""],""aceitacao"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-f70ce307-0132"",""pedido"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1462""],""aceitacao"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-51b8f0ad-0212"",""pedido"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3096""],""aceitacao"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""cartografia/relações""},{""id"":""MASTER-edece80c-0276"",""pedido"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4308""],""aceitacao"":""Localização normalizada: país, âmbito nacional ou regional, província, distrito, posto administrativo, localidade, município ou cidade, corredor, zona económica, parque industrial ou bacia, endereço ou referência, latitude, longitude e localização principal. Registos multiterritoriais devem admitir múltiplas localizações relacionadas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""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,"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.","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.","InvestmentGeography, campos TerritoryFields/ProvinceSelect, geo_locations/geo_geometries e importador autenticado","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.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: território. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,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.,,,,"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.",,,
-MASTER-471012ab-0124,"Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1470 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4318 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1472 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3106 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4318,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","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.","MASTER-471012ab-0124: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-e1169a77-0277: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-f70ce307-0133: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-51b8f0ad-0213: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-edece80c-0277: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos.",P2,MASTER-471012ab-0124: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0277: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0133: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0213: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0277: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0124 | MASTER-e1169a77-0277 | MASTER-f70ce307-0133 | MASTER-51b8f0ad-0213 | MASTER-edece80c-0277,5,"[{""id"":""MASTER-471012ab-0124"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1470""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-e1169a77-0277"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4318""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-f70ce307-0133"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1472""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-51b8f0ad-0213"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3106""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-edece80c-0277"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4318""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",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.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"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.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","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.,Reconciliação e prova individual antes de estimar alteração,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.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,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.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; 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.",,,
+MASTER-471012ab-0124,"Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1470 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4318 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1472 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3106 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4318,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"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. Continuidade local: InvestmentOpportunityAlerts, InvestmentWorkspace, notificações e pesquisa públicas reutilizadas.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. [OPPORTUNITY-ALERTS-20261102] ACT-11 local: preferências e correspondência do catálogo público, confirmação, critérios, frequência, canal no portal e cancelamento; notificações de manifestações preservadas. 16 testes Feature/253 asserções e dois frontend aprovados; PHPStan, tipos, lint e compilação passaram. Fonte/versão/critério conservados; lote201, falha/repetição e migração com dados anteriores demonstrados. Recibo opportunity_alerts_increment_20261102 e manual de 02/11/2026. Sem instalação ou prova visual; fontes de concursos/incentivos e canais externos pendentes. [QUICK-SEARCH-COTTON-20261102] Pedido Tempo: plantio de algodao. Pesquisa combina palavras e variantes delimitadas de cultivo, normaliza acentos, usa hierarquia territorial pública e preserva filtros. Duas APIs, página, mapa e exportação consistentes; fichas de transformação apenas como relacionadas quando não existe correspondência completa. Barra GET/autofill. Nove testes Feature/205 asserções e cinco frontend aprovados; PHPStan, tipos, lint e compilação passaram. Recibo quick_opportunity_search_increment_20261102 e manual. Sem dados reais inventados, instalação ou prova visual; requisito agregado parcial. [TENDER-ALERTS-20261102] ACT-11 local: escolha voluntária de concursos nas preferências existentes, sem alterar subscrições anteriores. Consulta pública e versões reutilizadas; sem rascunhos, propostas ou competências novas. Critérios próprios, frequência, cancelamento, proveniência e histórico; lotes por catálogo sem bloqueio da outra fonte. 30 testes distintos/607 asserções e seis frontend aprovados; PHPStan, tipos, lint e compilação passaram. Recibo tender_alerts_increment_20261102 e manual de 02/11. Saldo de concursos do recorte anterior implementado em QA; incentivos/canais externos, instalação/agendador e visual pendentes. Requisito agregado parcial.","Implementado parcialmente — alertas do catálogo em QA local. Histórico anterior: Sem evidência suficiente","Continuidade 02/11/2026: oportunidades e concursos integrados em alertas no portal com escolha explícita e provas QA; pendência local de concursos do recorte anterior actualizada. Restam incentivos, canais externos, disponibilização/agendador, visual e correspondência dos restantes critérios agregados. Histórico preservado: 02/11/2026: alertas do catálogo público implementados e demonstrados em QA local. Restam disponibilização, visual, restantes fontes/canais de alertas e correspondência individual das demais capacidades desta cláusula; sem fecho transversal. Histórico preservado: Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","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.","MASTER-471012ab-0124: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-e1169a77-0277: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-f70ce307-0133: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-51b8f0ad-0213: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos. | MASTER-edece80c-0277: Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos.",P2,MASTER-471012ab-0124: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0277: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0133: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0213: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0277: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0124 | MASTER-e1169a77-0277 | MASTER-f70ce307-0133 | MASTER-51b8f0ad-0213 | MASTER-edece80c-0277,5,"[{""id"":""MASTER-471012ab-0124"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1470""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-e1169a77-0277"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4318""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-f70ce307-0133"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1472""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-51b8f0ad-0213"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3106""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-edece80c-0277"",""pedido"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4318""],""aceitacao"":""Disponibilizar pesquisa, filtros, comparação, favoritos, alertas e recomendação de projectos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",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.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"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.","Continuidade 02/11/2026: oportunidades e concursos integrados em alertas no portal com escolha explícita e provas QA; pendência local de concursos do recorte anterior actualizada. Restam incentivos, canais externos, disponibilização/agendador, visual e correspondência dos restantes critérios agregados. Histórico preservado: 02/11/2026: alertas do catálogo público implementados e demonstrados em QA local. Restam disponibilização, visual, restantes fontes/canais de alertas e correspondência individual das demais capacidades desta cláusula; sem fecho transversal.
+Histórico: Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","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.,Reconciliação e prova individual antes de estimar alteração,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.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. [OPPORTUNITY-ALERTS-20261102] ACT-11 local: preferências e correspondência do catálogo público, confirmação, critérios, frequência, canal no portal e cancelamento; notificações de manifestações preservadas. 16 testes Feature/253 asserções e dois frontend aprovados; PHPStan, tipos, lint e compilação passaram. Fonte/versão/critério conservados; lote201, falha/repetição e migração com dados anteriores demonstrados. Recibo opportunity_alerts_increment_20261102 e manual de 02/11/2026. Sem instalação ou prova visual; fontes de concursos/incentivos e canais externos pendentes. [QUICK-SEARCH-COTTON-20261102] Pedido Tempo: plantio de algodao. Pesquisa combina palavras e variantes delimitadas de cultivo, normaliza acentos, usa hierarquia territorial pública e preserva filtros. Duas APIs, página, mapa e exportação consistentes; fichas de transformação apenas como relacionadas quando não existe correspondência completa. Barra GET/autofill. Nove testes Feature/205 asserções e cinco frontend aprovados; PHPStan, tipos, lint e compilação passaram. Recibo quick_opportunity_search_increment_20261102 e manual. Sem dados reais inventados, instalação ou prova visual; requisito agregado parcial. [TENDER-ALERTS-20261102] ACT-11 local: escolha voluntária de concursos nas preferências existentes, sem alterar subscrições anteriores. Consulta pública e versões reutilizadas; sem rascunhos, propostas ou competências novas. Critérios próprios, frequência, cancelamento, proveniência e histórico; lotes por catálogo sem bloqueio da outra fonte. 30 testes distintos/607 asserções e seis frontend aprovados; PHPStan, tipos, lint e compilação passaram. Recibo tender_alerts_increment_20261102 e manual de 02/11. Saldo de concursos do recorte anterior implementado em QA; incentivos/canais externos, instalação/agendador e visual pendentes. Requisito agregado parcial.",balcão,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.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; 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.",,,
MASTER-471012ab-0125,"Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”.",portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1471 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4319 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1473 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3107 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4319,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"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.","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/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","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.","MASTER-471012ab-0125: Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”. | MASTER-e1169a77-0278: Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”. | MASTER-f70ce307-0134: Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”. | MASTER-51b8f0ad-0214: Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”. | MASTER-edece80c-0278: Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”.",P2,MASTER-471012ab-0125: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0278: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0134: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0214: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0278: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0125 | MASTER-e1169a77-0278 | MASTER-f70ce307-0134 | MASTER-51b8f0ad-0214 | MASTER-edece80c-0278,5,"[{""id"":""MASTER-471012ab-0125"",""pedido"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1471""],""aceitacao"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-e1169a77-0278"",""pedido"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4319""],""aceitacao"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-f70ce307-0134"",""pedido"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1473""],""aceitacao"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-51b8f0ad-0214"",""pedido"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3107""],""aceitacao"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-edece80c-0278"",""pedido"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4319""],""aceitacao"":""Implementar chamadas para acção: “Manifestar interesse”, “Solicitar dossier”, “Agendar reunião” e “Propor financiamento ou parceria”."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",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.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"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.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","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.,Reconciliação e prova individual antes de estimar alteração,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.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,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.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; 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.",,,
MASTER-471012ab-0126,Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas.,portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1505 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4354 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1507 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3141 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4354,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",MASTER-471012ab-0126: Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas. | MASTER-e1169a77-0279: Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas. | MASTER-f70ce307-0135: Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas. | MASTER-51b8f0ad-0215: Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas. | MASTER-edece80c-0279: Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas.,P2,MASTER-471012ab-0126: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0279: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0135: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0215: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0279: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0126 | MASTER-e1169a77-0279 | MASTER-f70ce307-0135 | MASTER-51b8f0ad-0215 | MASTER-edece80c-0279,5,"[{""id"":""MASTER-471012ab-0126"",""pedido"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1505""],""aceitacao"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-e1169a77-0279"",""pedido"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4354""],""aceitacao"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-f70ce307-0135"",""pedido"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1507""],""aceitacao"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-51b8f0ad-0215"",""pedido"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3141""],""aceitacao"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-edece80c-0279"",""pedido"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4354""],""aceitacao"":""Identificar cadeia e localização → captar interesse → validar capacidade → formar grupos por elo → visitas → propostas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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.",,,
MASTER-471012ab-0127,Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento.,portal do investidor\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1515 | portal do investidor\Portal V4\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4364 | portal do investidor\Portal V4\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1517 | portal do investidor\Portal V4\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3151 | portal do investidor\Portal V4\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4364,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. 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.",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,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",MASTER-471012ab-0127: Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento. | MASTER-e1169a77-0280: Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento. | MASTER-f70ce307-0136: Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento. | MASTER-51b8f0ad-0216: Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento. | MASTER-edece80c-0280: Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento.,P2,MASTER-471012ab-0127: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-e1169a77-0280: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-f70ce307-0136: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-51b8f0ad-0216: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-edece80c-0280: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-471012ab-0127 | MASTER-e1169a77-0280 | MASTER-f70ce307-0136 | MASTER-51b8f0ad-0216 | MASTER-edece80c-0280,5,"[{""id"":""MASTER-471012ab-0127"",""pedido"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""fontes"":[""portal do investidor\\upgrade do portal de investimentos.docx; SHA 471012abb0f56377956f4ab822fe3186e2561bee0471508a5d807091f2e0154f; w:p 1515""],""aceitacao"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-e1169a77-0280"",""pedido"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v6 programacao.docx; SHA e1169a7743b13ff6c950d3ffd4672a2afea32e81da84885e11154b7d8de9241e; w:p 4364""],""aceitacao"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-f70ce307-0136"",""pedido"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v1.docx; SHA f70ce3075523c6278e00dce15b9c7acf2b690679e16959ae5f7d007e754cfc6e; w:p 1517""],""aceitacao"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-51b8f0ad-0216"",""pedido"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v2.docx; SHA 51b8f0ad3296d1064a5c12b450874fc72640869f10a164319cd7f3153dd3a086; w:p 3151""],""aceitacao"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""},{""id"":""MASTER-edece80c-0280"",""pedido"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""fontes"":[""portal do investidor\\Portal V4\\upgrade do portal de investimentos v5 programacao.docx; SHA edece80c0519537244f8a8b86456af0aa92de1c526f791bb0ee9b85af7a7e8b2; w:p 4364""],""aceitacao"":""Mapear janelas de financiamento → adaptar concept note → identificar consórcio → validar elegibilidade → submissão → seguimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",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,Requisito transversal; consultar estado-ativo-after.json,"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.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,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.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; 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.",,,
@@ -10564,7 +10565,7 @@ AUD-LEG-07,"Verificar imagens, anexos, links, pesquisa, permissões e duplicaç
[RECONCILIACAO-43-20261019] Código e critérios confrontados com leitura READ ONLY fresca; PROVA-RECONCILIACAO-43-LEITURA.json, RECONCILIACAO-43-QA-FONTES.json, RECONCILIACAO-43-SCHEMA-QA.json. Não encerra critério funcional por inventário.
[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação.",documentos e legado,15/10/2026 — fecho do piloto ativo e preparação por leitura dos restantes setores; sem novos testes funcionais.,,,"[Visual QA 10/10/2026] 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. | Histórico preservado: [Visual QA 10 /10/2026 ] Cobertura integral, mais perfis /dispositivos , leitor de ecrã e editor administrativo C74 não demonstrados. Mercado Financeiro permanece privado /corpo vazio confirmado na origem; rotas 404. Sem associação automática Turismo→cadastro territorial, sem fundir Energia /Mineração. | Histórico preservado: 22 originais /5 imagens /hashes/scans/replay e 16 novos artigos públicos testados;32 versões restantes, anexos /links externos /C68 ,móvel /acessibilidade e perfis adicionais por testar. | Histórico anterior: Imagens /links/pesquisa/permissões/deduplicação do piloto demonstrados. Anexos /referências dos restantes conteúdos e imagem histórica 404 por resolver; cobertura global permanece parcial.",Biblioteca/documentos existentes; Balcão+09/190000 para dossier. Expansão cartográfica exige correspondências fundamentadas. C37/A-B/SLA/perfis e ativação mantêm âmbito próprio.,Dois originais com ClamD real/hash; links dos consumidores200; pesquisahit/miss; permissões; repetição do importador sem novas linhas e associação idempotente.,"[Interface legado QA 10 /10/2026 ] Chromium instalado, contextos isolados, desktop 1440 px / móvel 390 px: fotografia /fontes/paleta , pesquisa hit /miss , Enter /foco de 3 px, links carteira /zonas/biblioteca/oportunidade. Promotor QA21 : login→MFA→dossier→fonte→retorno→logout→novo contexto /MFA →recuperação /F5 →associação repetida. Conta 23:403 e artigo público sem título privado; anónimo sem contexto privado. UI observada; referência /evento únicos e originais /hash/scan confirmados em leitura QA. legacy-content-browser-qa.json ; legacy-content-browser-persistence-qa.json ; legado-piloto-qa.md . | Evidência anterior preservada: legado-piloto-qa.md ; legacy-content-http-qa.json : recursos 6 /5 públicos, hashes verificados, pesquisa, login /MFA21 , criação /continuação , logout /nova sessão, recuperação, replay único e isolamento. Interface não observada. | [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 ] Falhas C77 – C83 corrigidas em QA: landmarks, nome ARIA 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 router QA e proteção da recuperação assíncrona do simulador. Após correções 15 execuções axe /390 –320–1440 px,0 violações automáticas /0overflow e idioma PT; skiplink primeiro Tab→conteúdo em 3 páginas; tabelas financeiras focadas /teclas no Chromium . Não equivale a leitor de ecrã, zoom /dispositivo real ou cobertura de todo oportal. Legacy Content Test 5 /84 e rastreio MFA 1 /14 são provas específicas, não contagem substituta de percursos. visual-followup-chromium-20261010.json e screenshots; históricos de falhas mantidos. | [Visual QA 10/10/2026] 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.","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.",,,"Fecho exclusivo do piloto agronegócio; não cobre todo o acervo, versões, URLs, anexos ou setores. Mercado Financeiro vazio continua separado.","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-MARKET-01,"Negócios similares por área, raio, sector e classificação, com fonte, data e cobertura",[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-004; SEG-bf26caee-p99; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p630; SEG-bf26caee-p716,INV-004 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","ExistingBusiness, InvestmentGeography e taxonomias existentes. 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.",segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento.,Não implementado,Consulta de negócios similares por raio/classificação não implementada.,"Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Filtro por área/raio/sector recuperável, fonte/data/cobertura explícitas; ausência de dados não produz comparação inventada. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Pesquisa combina raio/sector/classificação; apresenta fonte/data/cobertura/limitações; recupera os mesmos registos; não mostra dados privados nem locais sem correspondência.,P2,"Código INV-004 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p99; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p630; SEG-bf26caee-p716,6,"[{""id"": ""SEG-bf26caee-p99"", ""section"": ""1.0.2"", ""first_paragraph"": 99, ""last_paragraph"": 103, ""text"": ""Artigos 5 a 10 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Classificação da empresa e critérios aplicáveis | INV-001; INV-004; INV-008; §§3.2, 4.2 e 4.3 | Classificação versionada por finalidade, com fonte, vigência e regra utilizada na pesquisa, importação e personalização do roteiro."", ""requirements"": [""AUD-DESK-02"", ""AUD-ESTABLISHMENT-01"", ""AUD-MARKET-01"", ""MASTER-1f0a4cde-0001""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p99"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p157"", ""section"": ""1.5"", ""first_paragraph"": 157, ""last_paragraph"": 157, ""text"": ""Permitir a consulta de negócios similares na zona antes da abertura de um empreendimento, apoiando a análise de viabilidade. As fontes iniciais incluem os ficheiros de cadastro de empreendimentos turísticos de três, quatro e cinco estrelas e de empresas licenciadas já disponibilizados ao projecto. Antes da utilização, estes dados devem ser inventariados, normalizados, deduplicados, georreferenciados e sujeitos a validação de actualidade, cobertura e autorização de uso."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p157"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p158"", ""section"": ""1.5"", ""first_paragraph"": 158, ""last_paragraph"": 158, ""text"": ""Publicar fundos de financiamento por localização ou com cobertura nacional, conforme a respectiva distribuição geográfica."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p158"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p483"", ""section"": ""3.2.3"", ""first_paragraph"": 483, ""last_paragraph"": 483, ""text"": ""A pesquisa deve permitir combinar texto, sector, localização, raio, dimensão, classificação, estado, período e fonte, com ordenação e paginação consistentes. Os resultados de negócios similares, fundos e oportunidades devem apresentar data de actualização, cobertura, critérios usados e limitações conhecidas. Sempre que existir correspondência ou recomendação automatizada, o portal deve explicar os factores considerados, permitir correcção dos dados de entrada e evitar classificações baseadas em informação incompleta ou não validada."", ""requirements"": [""AUD-FUND-01"", ""AUD-MARKET-01"", ""AUD-OP-04""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p483"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p630"", ""section"": ""6"", ""first_paragraph"": 630, ""last_paragraph"": 635, ""text"": ""INV-004 | Negócios similares por área, raio, sector e classificação | Sim | Sem demonstração suficiente | — | Importar cadastros aplicáveis e demonstrar pesquisa com fonte, raio e classificação."", ""requirements"": [""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p630"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p716"", ""section"": ""6.1"", ""first_paragraph"": 716, ""last_paragraph"": 722, ""text"": ""§1.5 | Cadastros turísticos e empresas licenciadas | INV-004 e INV-008 | Sim | Sem demonstração suficiente | — | Inventariar cobertura, normalizar, deduplicar, georreferenciar e demonstrar pesquisa de negócios similares."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p716"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",não implementado,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
+AUD-MARKET-01,"Negócios similares por área, raio, sector e classificação, com fonte, data e cobertura",[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-004; SEG-bf26caee-p99; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p630; SEG-bf26caee-p716,INV-004 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","ExistingBusiness, InvestmentGeography e taxonomias existentes. 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.","segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. | 02/11/2026: primeiro consumidor local de negocios semelhantes na ficha publica, mesma modalidade e sector conhecido; reutiliza catalogo publico e filtros, exclui origem/duplicados. Frontend 2 testes; Feature 3/158 assercoes em QA isolada; tipos, lint, PHPStan e build aprovados. Parcial: sem raio/distancia, fonte/data individuais ou prova visual; sem instalacao. Ver manual existente. | Continuidade 02/11/2026: provincia principal apenas quando divulgada/consultavel; classificacao publica escolhida expressamente conserva tipo, alvo e finalidade, sem transferir seleccao entre fichas. Fonte do catalogo e data de publicacao explicitas, origem factual nao inferida; resposta malformada e erro recuperavel. Quatro testes frontend do consumidor passaram; ver manual. Raio e proveniencia externa continuam pendentes.",Não implementado,Consulta de negócios similares por raio/classificação não implementada.,"Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Filtro por área/raio/sector recuperável, fonte/data/cobertura explícitas; ausência de dados não produz comparação inventada. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",Pesquisa combina raio/sector/classificação; apresenta fonte/data/cobertura/limitações; recupera os mesmos registos; não mostra dados privados nem locais sem correspondência.,P2,"Código INV-004 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p99; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p630; SEG-bf26caee-p716,6,"[{""id"": ""SEG-bf26caee-p99"", ""section"": ""1.0.2"", ""first_paragraph"": 99, ""last_paragraph"": 103, ""text"": ""Artigos 5 a 10 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Classificação da empresa e critérios aplicáveis | INV-001; INV-004; INV-008; §§3.2, 4.2 e 4.3 | Classificação versionada por finalidade, com fonte, vigência e regra utilizada na pesquisa, importação e personalização do roteiro."", ""requirements"": [""AUD-DESK-02"", ""AUD-ESTABLISHMENT-01"", ""AUD-MARKET-01"", ""MASTER-1f0a4cde-0001""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p99"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p157"", ""section"": ""1.5"", ""first_paragraph"": 157, ""last_paragraph"": 157, ""text"": ""Permitir a consulta de negócios similares na zona antes da abertura de um empreendimento, apoiando a análise de viabilidade. As fontes iniciais incluem os ficheiros de cadastro de empreendimentos turísticos de três, quatro e cinco estrelas e de empresas licenciadas já disponibilizados ao projecto. Antes da utilização, estes dados devem ser inventariados, normalizados, deduplicados, georreferenciados e sujeitos a validação de actualidade, cobertura e autorização de uso."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p157"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p158"", ""section"": ""1.5"", ""first_paragraph"": 158, ""last_paragraph"": 158, ""text"": ""Publicar fundos de financiamento por localização ou com cobertura nacional, conforme a respectiva distribuição geográfica."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p158"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p483"", ""section"": ""3.2.3"", ""first_paragraph"": 483, ""last_paragraph"": 483, ""text"": ""A pesquisa deve permitir combinar texto, sector, localização, raio, dimensão, classificação, estado, período e fonte, com ordenação e paginação consistentes. Os resultados de negócios similares, fundos e oportunidades devem apresentar data de actualização, cobertura, critérios usados e limitações conhecidas. Sempre que existir correspondência ou recomendação automatizada, o portal deve explicar os factores considerados, permitir correcção dos dados de entrada e evitar classificações baseadas em informação incompleta ou não validada."", ""requirements"": [""AUD-FUND-01"", ""AUD-MARKET-01"", ""AUD-OP-04""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p483"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p630"", ""section"": ""6"", ""first_paragraph"": 630, ""last_paragraph"": 635, ""text"": ""INV-004 | Negócios similares por área, raio, sector e classificação | Sim | Sem demonstração suficiente | — | Importar cadastros aplicáveis e demonstrar pesquisa com fonte, raio e classificação."", ""requirements"": [""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p630"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p716"", ""section"": ""6.1"", ""first_paragraph"": 716, ""last_paragraph"": 722, ""text"": ""§1.5 | Cadastros turísticos e empresas licenciadas | INV-004 e INV-008 | Sim | Sem demonstração suficiente | — | Inventariar cobertura, normalizar, deduplicar, georreferenciar e demonstrar pesquisa de negócios similares."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p716"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",não implementado,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
[RECONCILIACAO-43-20261019] 13: Implementar filtro área/raio/sector/classificação, fonte/data/cobertura e casos sem coordenadas sem inventar resultados.","Consulta de negócios similares por raio/classificação não implementada.
@@ -10586,9 +10587,9 @@ AUD-ESTABLISHMENT-01,"Importar empresas licenciadas e empreendimentos turístico
[RECONCILIACAO-43-20261019] Código e critérios confrontados com leitura READ ONLY fresca; PROVA-RECONCILIACAO-43-LEITURA.json, RECONCILIACAO-43-QA-FONTES.json, RECONCILIACAO-43-SCHEMA-QA.json. Não encerra critério funcional por inventário.
[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Importador específico destes cadastros e reconciliação de entidades/versões ainda por preparar. Importação de artigos do legado e geometrias não substitui esta carga.,Identificar fontes/dados/âmbito/período concretos; não reabrir aceitação oficial.,"Inventariar os ficheiros fornecidos, inspecionar colunas e IDs reais; reutilizar organizações/estabelecimentos existentes por correspondência, serviços de importação privada/hash e hierarquia territorial. Não criar organizações automaticamente com base em nome ou licença.",Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,24–48 h por formato aprovado; acesso ao ficheiro e identificadores são pré-condições.,,,
-AUD-FUND-01,Catálogo de fundos nacionais e territoriais com elegibilidade explicada e atualização,[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-005; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p636; SEG-bf26caee-p723,INV-005 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","Biblioteca, taxonomias, fontes e filtros comuns. 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.",segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento.,Não implementado,Catálogo de fundos com janelas e elegibilidade não implementado; ofertas experimentais não o substituem.,"Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Fundos com fonte/data, elegibilidade explicada e janela; indeterminado quando parâmetros faltam. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","Fonte, gestor, sectores, cobertura nacional ou territorial, datas/estado e documentos; filtro e explicação por critério; fundos expirados sinalizados; guardar interesse autorizado sem duplicação.",P2,"Código INV-005 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p636; SEG-bf26caee-p723,5,"[{""id"": ""SEG-bf26caee-p157"", ""section"": ""1.5"", ""first_paragraph"": 157, ""last_paragraph"": 157, ""text"": ""Permitir a consulta de negócios similares na zona antes da abertura de um empreendimento, apoiando a análise de viabilidade. As fontes iniciais incluem os ficheiros de cadastro de empreendimentos turísticos de três, quatro e cinco estrelas e de empresas licenciadas já disponibilizados ao projecto. Antes da utilização, estes dados devem ser inventariados, normalizados, deduplicados, georreferenciados e sujeitos a validação de actualidade, cobertura e autorização de uso."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p157"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p158"", ""section"": ""1.5"", ""first_paragraph"": 158, ""last_paragraph"": 158, ""text"": ""Publicar fundos de financiamento por localização ou com cobertura nacional, conforme a respectiva distribuição geográfica."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p158"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p483"", ""section"": ""3.2.3"", ""first_paragraph"": 483, ""last_paragraph"": 483, ""text"": ""A pesquisa deve permitir combinar texto, sector, localização, raio, dimensão, classificação, estado, período e fonte, com ordenação e paginação consistentes. Os resultados de negócios similares, fundos e oportunidades devem apresentar data de actualização, cobertura, critérios usados e limitações conhecidas. Sempre que existir correspondência ou recomendação automatizada, o portal deve explicar os factores considerados, permitir correcção dos dados de entrada e evitar classificações baseadas em informação incompleta ou não validada."", ""requirements"": [""AUD-FUND-01"", ""AUD-MARKET-01"", ""AUD-OP-04""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p483"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p636"", ""section"": ""6"", ""first_paragraph"": 636, ""last_paragraph"": 641, ""text"": ""INV-005 | Fundos compatíveis com explicação da correspondência | Sim | Sem demonstração suficiente | — | Demonstrar catálogo, cobertura, critérios, prazos, actualização e justificação."", ""requirements"": [""AUD-FUND-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p636"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p723"", ""section"": ""6.1"", ""first_paragraph"": 723, ""last_paragraph"": 729, ""text"": ""§1.5 | Fundos nacionais e territoriais | INV-005 | Sim | Sem demonstração suficiente | — | Demonstrar cadastro, fonte, actualização, cobertura, critérios, prazos e correspondência fundamentada."", ""requirements"": [""AUD-FUND-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p723"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",não implementado,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
+AUD-FUND-01,Catálogo de fundos nacionais e territoriais com elegibilidade explicada e atualização,[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-005; SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p636; SEG-bf26caee-p723,INV-005 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","Biblioteca, taxonomias, fontes e filtros comuns. 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.","segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. [FUNDING-EDITOR-20261102] Catálogo e editor locais: rascunhos, prévia vinculada, publicação/retirada com autoridade editorial existente, versões imutáveis, janelas/critério explicado, documentos por versão e interesse privado. Quatro testes/91 asserções e tipos aprovados. Filtros territoriais/sectoriais, ensaios de documentos, fontes reais, visual e disponibilização pendentes; requisito parcial, sem alteração no activo. Manual de 02/11 e funding_editor_increment_20261102. [FUNDING-FILTERS-20261102] Filtros locais por sector, cobertura territorial e estado de janela, com desconhecidos explícitos e cobertura parcial. Nomes/caminhos territoriais e sectores conservados por versão. Descarga verifica versão, checksum, direitos, análise e bytes; prévia obsoleta recusada. Seis testes/204 asserções, PHPStan, tipos, lint sem avisos e compilação aprovados. Recibo funding_filters_increment_20261102 e manual. Faltam fontes reais incorporadas, validação visual, ensaios de concorrência e disponibilização; requisito parcial. [FUNDING-REFERENCES-20261102] Referência oficial FDEL empacotada com fontes/edições/hashes e prévia editorial; prepara rascunho sem publicar. Uma ficha e chamada municipal histórica, repetição sem duplicar ou substituir. Sete testes/235 asserções; PHPStan, tipos e lint aprovados. Recibo funding_references_increment_20261102; manual de 02/11. Ligações sectorial/cartográfica, concorrência, visual, alertas e disponibilização pendentes. Parcial local, sem escrita no activo. [FUNDING-CONCURRENCY-20261102] Ensaio com cinco pares de processos e bloqueios observados no PostgreSQL identificou deadlock 40P01 entre retirada e interesse da mesma pessoa. Bloqueio da conta ajustado a FOR NO KEY UPDATE, conservando serialização e referências de auditoria. Cinco cenários passaram após correcção; sete Feature/235 asserções e PHPStan/Pint aprovados. Dados/versão/interesse e auditoria sem duplicação conservados; recibo funding_concurrency_increment_20261102. Não comprova carga ou todas as intercalações. Visual, vínculos da referência, alertas e disponibilização pendentes.","Parcial — implementação local em QA","02/11/2026: concorrência demonstrada nos cinco cenários delimitados e impasse corrigido. Restam visual, vínculos ao cadastro da referência, alertas de incentivos e disponibilização. Histórico: 02/11/2026: referência oficial preparada pela interface com prova local; restam vínculos sectorial/cartográfico da referência, concorrência/visual, alertas de incentivos e disponibilização. Histórico: 02/11/2026: filtros e ensaios específicos de documentos implementados/verificados localmente. Restam fontes reais incorporadas, visual, concorrência e disponibilização; integração de incentivos nos alertas não demonstrada. Histórico preservado: 02/11/2026: implementação local parcial com editor e percurso público; restam filtros territoriais/sectoriais, provas específicas de documentos/conflitos, fontes reais e visual/disponibilização. Histórico: Catálogo de fundos com janelas e elegibilidade não implementado; ofertas experimentais não o substituem.","Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Fundos com fonte/data, elegibilidade explicada e janela; indeterminado quando parâmetros faltam. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","Fonte, gestor, sectores, cobertura nacional ou territorial, datas/estado e documentos; filtro e explicação por critério; fundos expirados sinalizados; guardar interesse autorizado sem duplicação.",P2,"Código INV-005 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p157; SEG-bf26caee-p158; SEG-bf26caee-p483; SEG-bf26caee-p636; SEG-bf26caee-p723,5,"[{""id"": ""SEG-bf26caee-p157"", ""section"": ""1.5"", ""first_paragraph"": 157, ""last_paragraph"": 157, ""text"": ""Permitir a consulta de negócios similares na zona antes da abertura de um empreendimento, apoiando a análise de viabilidade. As fontes iniciais incluem os ficheiros de cadastro de empreendimentos turísticos de três, quatro e cinco estrelas e de empresas licenciadas já disponibilizados ao projecto. Antes da utilização, estes dados devem ser inventariados, normalizados, deduplicados, georreferenciados e sujeitos a validação de actualidade, cobertura e autorização de uso."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p157"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p158"", ""section"": ""1.5"", ""first_paragraph"": 158, ""last_paragraph"": 158, ""text"": ""Publicar fundos de financiamento por localização ou com cobertura nacional, conforme a respectiva distribuição geográfica."", ""requirements"": [""AUD-ESTABLISHMENT-01"", ""AUD-FUND-01"", ""AUD-MARKET-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p158"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p483"", ""section"": ""3.2.3"", ""first_paragraph"": 483, ""last_paragraph"": 483, ""text"": ""A pesquisa deve permitir combinar texto, sector, localização, raio, dimensão, classificação, estado, período e fonte, com ordenação e paginação consistentes. Os resultados de negócios similares, fundos e oportunidades devem apresentar data de actualização, cobertura, critérios usados e limitações conhecidas. Sempre que existir correspondência ou recomendação automatizada, o portal deve explicar os factores considerados, permitir correcção dos dados de entrada e evitar classificações baseadas em informação incompleta ou não validada."", ""requirements"": [""AUD-FUND-01"", ""AUD-MARKET-01"", ""AUD-OP-04""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p483"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p636"", ""section"": ""6"", ""first_paragraph"": 636, ""last_paragraph"": 641, ""text"": ""INV-005 | Fundos compatíveis com explicação da correspondência | Sim | Sem demonstração suficiente | — | Demonstrar catálogo, cobertura, critérios, prazos, actualização e justificação."", ""requirements"": [""AUD-FUND-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p636"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p723"", ""section"": ""6.1"", ""first_paragraph"": 723, ""last_paragraph"": 729, ""text"": ""§1.5 | Fundos nacionais e territoriais | INV-005 | Sim | Sem demonstração suficiente | — | Demonstrar cadastro, fonte, actualização, cobertura, critérios, prazos e correspondência fundamentada."", ""requirements"": [""AUD-FUND-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p723"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",não implementado,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
-[RECONCILIACAO-43-20261019] 15: Implementar fonte/gestor, janela, elegibilidade explicável, estados desconhecido/expirado e interesse idempotente.","Catálogo de fundos com janelas e elegibilidade não implementado; ofertas experimentais não o substituem.
+[RECONCILIACAO-43-20261019] 15: Implementar fonte/gestor, janela, elegibilidade explicável, estados desconhecido/expirado e interesse idempotente.","02/11/2026: concorrência demonstrada nos cinco cenários delimitados e impasse corrigido. Restam visual, vínculos ao cadastro da referência, alertas de incentivos e disponibilização. Histórico: 02/11/2026: referência oficial preparada pela interface com prova local; restam vínculos sectorial/cartográfico da referência, concorrência/visual, alertas de incentivos e disponibilização. Histórico: 02/11/2026: filtros e ensaios específicos de documentos implementados/verificados localmente. Restam fontes reais incorporadas, visual, concorrência e disponibilização; integração de incentivos nos alertas não demonstrada. Histórico preservado: 02/11/2026: implementação local parcial com editor e percurso público; restam filtros territoriais/sectoriais, provas específicas de documentos/conflitos, fontes reais e visual/disponibilização. Histórico: Catálogo de fundos com janelas e elegibilidade não implementado; ofertas experimentais não o substituem.
[UTILIZACAO-HOMOLOGACAO-20261019] 15: Desenvolvimento restante + dados — Primeiro fundo documentado e tratamento de elegibilidade/prazo ainda em falta.","Biblioteca, taxonomias, fontes e filtros comuns","Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Fundos com fonte/data, elegibilidade explicada e janela; indeterminado quando parâmetros faltam.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"Nova funcionalidade/expansão; preparar execução, não implementar nesta auditoria",Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: incrementos futuros. Esforço de código adicional só após lacuna reproduzida.,"segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. | Homologação teste-investidor 19/10/2026: Fundos=Não demonstrado. 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: Fundos=Não demonstrado. 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.
@@ -10596,7 +10597,7 @@ AUD-FUND-01,Catálogo de fundos nacionais e territoriais com elegibilidade expli
[RECONCILIACAO-43-20261019] Código e critérios confrontados com leitura READ ONLY fresca; PROVA-RECONCILIACAO-43-LEITURA.json, RECONCILIACAO-43-QA-FONTES.json, RECONCILIACAO-43-SCHEMA-QA.json. Não encerra critério funcional por inventário.
-[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"Correspondência financeira genérica RF-CLU-005 é relacionada, mas não implementa o catálogo de fundos com cobertura e janelas. Não foram encontrados modelo/controlador/consumidor específicos no inventário de código.",Identificar fontes/dados/âmbito/período concretos; não reabrir aceitação oficial.,Reutilizar biblioteca e cadastro de entidades/parceiros para fontes e gestores reais; regras versionadas de cobertura/elegibilidade com indeterminado quando faltar parâmetro. Correspondência não representa aprovação ou compromisso de financiamento.,Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,16–32 h após inventário de fontes e campos; atualização operacional a definir pela Tempo.,,,
+[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação. [FUNDING-EDITOR-20261102] Catálogo e editor locais: rascunhos, prévia vinculada, publicação/retirada com autoridade editorial existente, versões imutáveis, janelas/critério explicado, documentos por versão e interesse privado. Quatro testes/91 asserções e tipos aprovados. Filtros territoriais/sectoriais, ensaios de documentos, fontes reais, visual e disponibilização pendentes; requisito parcial, sem alteração no activo. Manual de 02/11 e funding_editor_increment_20261102. [FUNDING-FILTERS-20261102] Filtros locais por sector, cobertura territorial e estado de janela, com desconhecidos explícitos e cobertura parcial. Nomes/caminhos territoriais e sectores conservados por versão. Descarga verifica versão, checksum, direitos, análise e bytes; prévia obsoleta recusada. Seis testes/204 asserções, PHPStan, tipos, lint sem avisos e compilação aprovados. Recibo funding_filters_increment_20261102 e manual. Faltam fontes reais incorporadas, validação visual, ensaios de concorrência e disponibilização; requisito parcial. [FUNDING-REFERENCES-20261102] Referência oficial FDEL empacotada com fontes/edições/hashes e prévia editorial; prepara rascunho sem publicar. Uma ficha e chamada municipal histórica, repetição sem duplicar ou substituir. Sete testes/235 asserções; PHPStan, tipos e lint aprovados. Recibo funding_references_increment_20261102; manual de 02/11. Ligações sectorial/cartográfica, concorrência, visual, alertas e disponibilização pendentes. Parcial local, sem escrita no activo. [FUNDING-CONCURRENCY-20261102] Ensaio com cinco pares de processos e bloqueios observados no PostgreSQL identificou deadlock 40P01 entre retirada e interesse da mesma pessoa. Bloqueio da conta ajustado a FOR NO KEY UPDATE, conservando serialização e referências de auditoria. Cinco cenários passaram após correcção; sete Feature/235 asserções e PHPStan/Pint aprovados. Dados/versão/interesse e auditoria sem duplicação conservados; recibo funding_concurrency_increment_20261102. Não comprova carga ou todas as intercalações. Visual, vínculos da referência, alertas e disponibilização pendentes.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"Correspondência financeira genérica RF-CLU-005 é relacionada, mas não implementa o catálogo de fundos com cobertura e janelas. Não foram encontrados modelo/controlador/consumidor específicos no inventário de código.",Identificar fontes/dados/âmbito/período concretos; não reabrir aceitação oficial.,Reutilizar biblioteca e cadastro de entidades/parceiros para fontes e gestores reais; regras versionadas de cobertura/elegibilidade com indeterminado quando faltar parâmetro. Correspondência não representa aprovação ou compromisso de financiamento.,Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,16–32 h após inventário de fontes e campos; atualização operacional a definir pela Tempo.,,,
AUD-COMPANY-01,"Comparador de forma societária orientado por perguntas, com fundamento, alternativas e limites",[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental SOC-001; SEG-bf26caee-p109; SEG-bf26caee-p119; SEG-bf26caee-p730; SEG-bf26caee-p874; SEG-bf26caee-p875; SEG-bf26caee-p877; SEG-bf26caee-p878; SEG-bf26caee-p879; SEG-bf26caee-p881; SEG-bf26caee-p882; SEG-bf26caee-p883; SEG-bf26caee-p884; SEG-bf26caee-p885; SEG-bf26caee-p886; SEG-bf26caee-p887; SEG-bf26caee-p888; SEG-bf26caee-p889; SEG-bf26caee-p890; SEG-bf26caee-p897; SEG-bf26caee-p899; SEG-bf26caee-p901; SEG-bf26caee-p902; SEG-bf26caee-p903; SEG-bf26caee-p905; SEG-bf26caee-p906; SEG-bf26caee-p907,SOC-001 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","Roteiro societário, biblioteca e motor de regras existentes. 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.",segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento.,Não implementado,Comparador societário orientado por perguntas não implementado.,Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Alternativas com fundamento/versionamento e limites; não afirmar aprovação externa. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"Perguntas recuperáveis, alternativas explicadas com fonte/data/limites, correção dos dados, retorno ao dossier sem alterar retrospectivamente a entidade ou garantir decisão externa.",P2,"Código SOC-001 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p109; SEG-bf26caee-p119; SEG-bf26caee-p730; SEG-bf26caee-p874; SEG-bf26caee-p875; SEG-bf26caee-p877; SEG-bf26caee-p878; SEG-bf26caee-p879; SEG-bf26caee-p881; SEG-bf26caee-p882; SEG-bf26caee-p883; SEG-bf26caee-p884; SEG-bf26caee-p885; SEG-bf26caee-p886; SEG-bf26caee-p887; SEG-bf26caee-p888; SEG-bf26caee-p889; SEG-bf26caee-p890; SEG-bf26caee-p897; SEG-bf26caee-p899; SEG-bf26caee-p901; SEG-bf26caee-p902; SEG-bf26caee-p903; SEG-bf26caee-p905; SEG-bf26caee-p906; SEG-bf26caee-p907,26,"[{""id"": ""SEG-bf26caee-p109"", ""section"": ""1.0.2"", ""first_paragraph"": 109, ""last_paragraph"": 113, ""text"": ""Artigos 13 a 18 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Capacidade empresarial e situações especiais | INV-001; INV-007; SOC-001; §§3.1.1, 3.2.2 e 9.5 | Validações de capacidade e representação nos formulários e no comparador, sem decisão automática quando for necessária análise jurídica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p109"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p119"", ""section"": ""1.0.2"", ""first_paragraph"": 119, ""last_paragraph"": 123, ""text"": ""Artigos 20 a 33 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Regime da firma | INV-001; INV-007; SOC-001; SOC-002; §§3.2.2, 6.1, 9.2 e 9.3 | Validação da designação, composição, verdade, novidade, uso, transmissão, caducidade e renúncia, com fonte e evidência registal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-COMPANY-02"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p119"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p730"", ""section"": ""6.1"", ""first_paragraph"": 730, ""last_paragraph"": 736, ""text"": ""§3.2; §9 | Comparador societário orientado por perguntas | INV-001 e SOC-001 | Sim | Sem demonstração suficiente | — | Demonstrar perguntas, decisões explicadas, fontes, aviso informativo e ligação ao roteiro."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p730"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p874"", ""section"": ""9.0"", ""first_paragraph"": 874, ""last_paragraph"": 874, ""text"": ""O guia societário deve ser revisto por especialista competente e associado às fontes legais, data de actualização, entidade responsável e aviso de carácter informativo. A revisão deve confirmar a terminologia aplicável em Moçambique, distinguir empresário em nome individual de sociedades comerciais, verificar os tipos societários apresentados, uniformizar o termo “contrato” e eliminar formulações importadas de outros ordenamentos jurídicos. Cada modelo deve indicar finalidade, requisitos, limitações e necessidade de validação antes da utilização."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p874"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p875"", ""section"": ""9.0"", ""first_paragraph"": 875, ""last_paragraph"": 875, ""text"": ""Para efeitos do guia societário e do comparador de forma jurídica, a fonte-base é o Código Comercial aprovado pelo Decreto-Lei n.º 1/2022, de 25 de Maio. As denominações, formas societárias, representações comerciais, actos constitutivos, regras de responsabilidade e modelos contratuais devem ser reconciliados com a versão republicada do Código Comercial e com a legislação especial vigente antes de serem apresentados como regra automática ou conteúdo validado."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p875"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p877"", ""section"": ""9.1"", ""first_paragraph"": 877, ""last_paragraph"": 877, ""text"": ""Uma sociedade comercial resulta da associação de pessoas ou entidades para exercer uma actividade económica nos termos da legislação aplicável, com funções, responsabilidades, participações e obrigações definidas no acto constitutivo. A escolha da forma jurídica deve considerar o número de participantes, o regime de responsabilidade, a estrutura de gestão, as necessidades de capital e os requisitos legais vigentes em Moçambique. O empresário em nome individual deve ser apresentado separadamente das formas societárias. A classificação e a terminologia publicadas no portal dependem de validação jurídica e da identificação das respectivas fontes e datas de actualização."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p877"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p878"", ""section"": ""9.1"", ""first_paragraph"": 878, ""last_paragraph"": 878, ""text"": ""Contar com um sócio cujos objectivos e interesses estejam alinhados com os seus é um elemento essencial para o êxito de qualquer empreendimento. A relação societária deve promover sinergia, confiança e colaboração, factores imprescindíveis para enfrentar os desafios inerentes ao mundo dos negócios. Empreender exige dedicação, resiliência e compromisso — qualidades que se fortalecem quando partilhadas por uma equipa com visão comum."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p878"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p879"", ""section"": ""9.1"", ""first_paragraph"": 879, ""last_paragraph"": 879, ""text"": ""Existem diferentes tipos de sociedades empresariais, cada um regulamentando a participação de seus membros de acordo com características e responsabilidades específicas."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p879"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p881"", ""section"": ""9.2"", ""first_paragraph"": 881, ""last_paragraph"": 881, ""text"": ""Empresário individual — categoria distinta das formas societárias."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p881"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p882"", ""section"": ""9.2"", ""first_paragraph"": 882, ""last_paragraph"": 882, ""text"": ""Sociedade em Nome Colectivo — designação sujeita a confirmação na legislação vigente antes da publicação no comparador."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p882"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p883"", ""section"": ""9.2"", ""first_paragraph"": 883, ""last_paragraph"": 883, ""text"": ""Sociedade em Comandita — forma a validar quanto às modalidades e requisitos aplicáveis."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p883"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p884"", ""section"": ""9.2"", ""first_paragraph"": 884, ""last_paragraph"": 884, ""text"": ""Sociedade de Capital e Indústria — forma a validar quanto à vigência e aos requisitos aplicáveis."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p884"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p885"", ""section"": ""9.2"", ""first_paragraph"": 885, ""last_paragraph"": 885, ""text"": ""Sociedade por Quotas."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p885"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p886"", ""section"": ""9.2"", ""first_paragraph"": 886, ""last_paragraph"": 886, ""text"": ""Sociedade Unipessoal por Quotas."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p886"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p887"", ""section"": ""9.2"", ""first_paragraph"": 887, ""last_paragraph"": 887, ""text"": ""Sociedade Anónima."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p887"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p888"", ""section"": ""9.2"", ""first_paragraph"": 888, ""last_paragraph"": 888, ""text"": ""Sucursal, agência e delegação — formas de representação comercial, não tipos autónomos de sociedade."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p888"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p889"", ""section"": ""9.2"", ""first_paragraph"": 889, ""last_paragraph"": 889, ""text"": ""Sociedades coligadas e relações de domínio — matérias de ligação ou controlo entre sociedades, não formas autónomas de constituição."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p889"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p890"", ""section"": ""9.2"", ""first_paragraph"": 890, ""last_paragraph"": 890, ""text"": ""Consórcio — instrumento de cooperação sujeito a enquadramento próprio, não forma societária."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p890"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p897"", ""section"": ""9.4"", ""first_paragraph"": 897, ""last_paragraph"": 897, ""text"": ""A participação, a responsabilidade, os direitos económicos e os poderes de gestão dependem da forma societária, do contrato de sociedade, da legislação aplicável e das deliberações válidas. As contribuições dos sócios podem assumir formas diferentes, de acordo com o regime jurídico e o acto constitutivo. A maior participação no capital não deve ser apresentada como sinónimo de principal proprietário, nem se deve presumir que a distribuição de quotas determina, por si só, a responsabilidade perante terceiros ou a participação nos lucros. O contrato de sociedade deve definir a estrutura de capital, os órgãos, os poderes, as regras de deliberação, os direitos e as obrigações aplicáveis."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p897"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p899"", ""section"": ""9.5"", ""first_paragraph"": 899, ""last_paragraph"": 899, ""text"": ""A escolha da forma jurídica deve considerar o número de participantes, o regime de responsabilidade, a estrutura de gestão, as necessidades de capital, a actividade e os requisitos legais aplicáveis. A empresa em nome individual e a sociedade unipessoal possuem estruturas distintas e devem ser avaliadas separadamente. A entrada posterior de sócios, a transformação da forma jurídica e as alterações do capital ou do contrato dependem da legislação vigente, dos actos societários aplicáveis e do respectivo registo; por isso, o portal não deve apresentar estas modalidades como definitivamente fechadas à evolução da estrutura."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p899"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p901"", ""section"": ""9.6"", ""first_paragraph"": 901, ""last_paragraph"": 901, ""text"": ""A principal vantagem de ter sócios é a possibilidade de reunir pessoas com interesses e objectivos semelhantes em torno de uma finalidade comum, o que fortalece o desenvolvimento e a execução do projecto. Essa união permite complementar competências, partilhar responsabilidades e ampliar a capacidade de resposta às necessidades do negócio."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p901"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p902"", ""section"": ""9.6"", ""first_paragraph"": 902, ""last_paragraph"": 902, ""text"": ""No entanto, uma sociedade empresarial segue regras específicas e deve ser estruturada de forma estratégica. Falhas de alinhamento ou mal-entendidos entre os sócios podem gerar conflitos e comprometer o funcionamento da organização. Por isso, é essencial escolher cuidadosamente o modelo societário e estabelecer acordos claros desde o início."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p902"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p903"", ""section"": ""9.6"", ""first_paragraph"": 903, ""last_paragraph"": 903, ""text"": ""Existem diversos formatos de sociedade empresarial, com características e formas de participação próprias, permitindo ao empreendedor escolher o modelo mais adequado à realidade e aos objectivos do negócio."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p903"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p905"", ""section"": ""9.6.1"", ""first_paragraph"": 905, ""last_paragraph"": 905, ""text"": ""Não existe um tipo de sociedade empresarial universalmente melhor ou pior. O essencial é identificar o modelo alinhado ao propósito do negócio e à relação entre os sócios, preferencialmente com orientação profissional especializada."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p905"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p906"", ""section"": ""9.6.1"", ""first_paragraph"": 906, ""last_paragraph"": 906, ""text"": ""Também devem ser considerados formatos específicos para determinadas áreas de actuação, como a sociedade de advogados, que apenas pode ser composta por profissionais legalmente habilitados a exercer actividades na área do Direito."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p906"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p907"", ""section"": ""9.6.1"", ""first_paragraph"": 907, ""last_paragraph"": 907, ""text"": ""Uma avaliação cuidadosa do planeamento do negócio é indispensável para determinar a viabilidade da sociedade e identificar as alternativas jurídicas adequadas à sua formalização."", ""requirements"": [""AUD-COMPANY-01"", ""AUD-COMPANY-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p907"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",não implementado,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
[RECONCILIACAO-43-20261019] 16: Implementar perguntas recuperáveis, alternativas fundamentadas e modelos exactos versionados. Exemplares ausentes permanecem lacuna de conteúdo.","Comparador societário orientado por perguntas não implementado.
@@ -10641,17 +10642,18 @@ AUD-CAPITAL-02,"Guião de admissão à Bolsa de Valores de Moçambique, distingu
[RECONCILIACAO-43-20261019] Código e critérios confrontados com leitura READ ONLY fresca; PROVA-RECONCILIACAO-43-LEITURA.json, RECONCILIACAO-43-QA-FONTES.json, RECONCILIACAO-43-SCHEMA-QA.json. Não encerra critério funcional por inventário.
[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"Guião por segmento, documentos, condições e fonte aplicável ainda não demonstrado. Não inferir valores, prazos, prospectos, taxas ou aprovação pelos artigos1–3.",Identificar fontes/dados/âmbito/período concretos; não reabrir aceitação oficial.,Reutilizar guia/biblioteca/dossier/checklists. Relacionar pedido de admissão e patrocínio às referências específicas; separar ação interna do portal e ato de entidade competente.,Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,16–32 h após correspondências normativas; não preencher taxas/prazos ausentes.,,,
-AUD-CHECKLIST-01,"Editor de checklists e formulários configuráveis, publicação de versões e preservação de submissões anteriores",[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-007; SEG-bf26caee-p14; SEG-bf26caee-p15; SEG-bf26caee-p20; SEG-bf26caee-p23; SEG-bf26caee-p26; SEG-bf26caee-p29; SEG-bf26caee-p32; SEG-bf26caee-p35; SEG-bf26caee-p38; SEG-bf26caee-p41; SEG-bf26caee-p44; SEG-bf26caee-p47; SEG-bf26caee-p50; SEG-bf26caee-p53; SEG-bf26caee-p56; SEG-bf26caee-p59; SEG-bf26caee-p62; SEG-bf26caee-p65; SEG-bf26caee-p68; SEG-bf26caee-p71; SEG-bf26caee-p74; SEG-bf26caee-p77; SEG-bf26caee-p80; SEG-bf26caee-p83; SEG-bf26caee-p87; SEG-bf26caee-p104; SEG-bf26caee-p109; SEG-bf26caee-p114; SEG-bf26caee-p119; SEG-bf26caee-p124; SEG-bf26caee-p129; SEG-bf26caee-p134; SEG-bf26caee-p140; SEG-bf26caee-p144; SEG-bf26caee-p145; SEG-bf26caee-p146; SEG-bf26caee-p147; SEG-bf26caee-p160; SEG-bf26caee-p161; SEG-bf26caee-p163; SEG-bf26caee-p164; SEG-bf26caee-p165; SEG-bf26caee-p166; SEG-bf26caee-p167; SEG-bf26caee-p168; SEG-bf26caee-p169; SEG-bf26caee-p170; SEG-bf26caee-p176; SEG-bf26caee-p180; SEG-bf26caee-p184; SEG-bf26caee-p188; SEG-bf26caee-p192; SEG-bf26caee-p196; SEG-bf26caee-p200; SEG-bf26caee-p204; SEG-bf26caee-p208; SEG-bf26caee-p212; SEG-bf26caee-p216; SEG-bf26caee-p220; SEG-bf26caee-p226; SEG-bf26caee-p227; SEG-bf26caee-p228; SEG-bf26caee-p229; SEG-bf26caee-p230; SEG-bf26caee-p231; SEG-bf26caee-p232; SEG-bf26caee-p233; SEG-bf26caee-p234; SEG-bf26caee-p237; SEG-bf26caee-p242; SEG-bf26caee-p247; SEG-bf26caee-p252; SEG-bf26caee-p257; SEG-bf26caee-p262; SEG-bf26caee-p267; SEG-bf26caee-p272; SEG-bf26caee-p277; SEG-bf26caee-p282; SEG-bf26caee-p289; SEG-bf26caee-p293; SEG-bf26caee-p297; SEG-bf26caee-p301; SEG-bf26caee-p305; SEG-bf26caee-p309; SEG-bf26caee-p313; SEG-bf26caee-p317; SEG-bf26caee-p321; SEG-bf26caee-p325; SEG-bf26caee-p329; SEG-bf26caee-p338; SEG-bf26caee-p342; SEG-bf26caee-p346; SEG-bf26caee-p350; SEG-bf26caee-p354; SEG-bf26caee-p358; SEG-bf26caee-p362; SEG-bf26caee-p366; SEG-bf26caee-p370; SEG-bf26caee-p374; SEG-bf26caee-p378; SEG-bf26caee-p382; SEG-bf26caee-p386; SEG-bf26caee-p390; SEG-bf26caee-p394; SEG-bf26caee-p398; SEG-bf26caee-p402; SEG-bf26caee-p407; SEG-bf26caee-p410; SEG-bf26caee-p481; SEG-bf26caee-p565; SEG-bf26caee-p648; SEG-bf26caee-p681; SEG-bf26caee-p756; SEG-bf26caee-p759; SEG-bf26caee-p762; SEG-bf26caee-p765; SEG-bf26caee-p768; SEG-bf26caee-p771; SEG-bf26caee-p787; SEG-bf26caee-p788; SEG-bf26caee-p789; SEG-bf26caee-p790; SEG-bf26caee-p791; SEG-bf26caee-p792,INV-007 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","Configurações existentes, schema, biblioteca e auditoria. 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.",segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento.,Implementado parcialmente,Checklists existem em configuração; editor/versionamento administrativo sem código e adaptação de submissões antigas não demonstrados.,"Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Publicar versão autorizada, novas submissões usam-na e anteriores preservam a versão aplicada. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","Gestor autorizado configura/previsualiza/publica versão, investidor recebe versão aplicável ao contexto/data, guarda incompleto e recupera; nova versão não modifica submissão anterior nem trata decisão interna como licença.",P2,"Código INV-007 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p14; SEG-bf26caee-p15; SEG-bf26caee-p20; SEG-bf26caee-p23; SEG-bf26caee-p26; SEG-bf26caee-p29; SEG-bf26caee-p32; SEG-bf26caee-p35; SEG-bf26caee-p38; SEG-bf26caee-p41; SEG-bf26caee-p44; SEG-bf26caee-p47; SEG-bf26caee-p50; SEG-bf26caee-p53; SEG-bf26caee-p56; SEG-bf26caee-p59; SEG-bf26caee-p62; SEG-bf26caee-p65; SEG-bf26caee-p68; SEG-bf26caee-p71; SEG-bf26caee-p74; SEG-bf26caee-p77; SEG-bf26caee-p80; SEG-bf26caee-p83; SEG-bf26caee-p87; SEG-bf26caee-p104; SEG-bf26caee-p109; SEG-bf26caee-p114; SEG-bf26caee-p119; SEG-bf26caee-p124; SEG-bf26caee-p129; SEG-bf26caee-p134; SEG-bf26caee-p140; SEG-bf26caee-p144; SEG-bf26caee-p145; SEG-bf26caee-p146; SEG-bf26caee-p147; SEG-bf26caee-p160; SEG-bf26caee-p161; SEG-bf26caee-p163; SEG-bf26caee-p164; SEG-bf26caee-p165; SEG-bf26caee-p166; SEG-bf26caee-p167; SEG-bf26caee-p168; SEG-bf26caee-p169; SEG-bf26caee-p170; SEG-bf26caee-p176; SEG-bf26caee-p180; SEG-bf26caee-p184; SEG-bf26caee-p188; SEG-bf26caee-p192; SEG-bf26caee-p196; SEG-bf26caee-p200; SEG-bf26caee-p204; SEG-bf26caee-p208; SEG-bf26caee-p212; SEG-bf26caee-p216; SEG-bf26caee-p220; SEG-bf26caee-p226; SEG-bf26caee-p227; SEG-bf26caee-p228; SEG-bf26caee-p229; SEG-bf26caee-p230; SEG-bf26caee-p231; SEG-bf26caee-p232; SEG-bf26caee-p233; SEG-bf26caee-p234; SEG-bf26caee-p237; SEG-bf26caee-p242; SEG-bf26caee-p247; SEG-bf26caee-p252; SEG-bf26caee-p257; SEG-bf26caee-p262; SEG-bf26caee-p267; SEG-bf26caee-p272; SEG-bf26caee-p277; SEG-bf26caee-p282; SEG-bf26caee-p289; SEG-bf26caee-p293; SEG-bf26caee-p297; SEG-bf26caee-p301; SEG-bf26caee-p305; SEG-bf26caee-p309; SEG-bf26caee-p313; SEG-bf26caee-p317; SEG-bf26caee-p321; SEG-bf26caee-p325; SEG-bf26caee-p329; SEG-bf26caee-p338; SEG-bf26caee-p342; SEG-bf26caee-p346; SEG-bf26caee-p350; SEG-bf26caee-p354; SEG-bf26caee-p358; SEG-bf26caee-p362; SEG-bf26caee-p366; SEG-bf26caee-p370; SEG-bf26caee-p374; SEG-bf26caee-p378; SEG-bf26caee-p382; SEG-bf26caee-p386; SEG-bf26caee-p390; SEG-bf26caee-p394; SEG-bf26caee-p398; SEG-bf26caee-p402; SEG-bf26caee-p407; SEG-bf26caee-p410; SEG-bf26caee-p481; SEG-bf26caee-p565; SEG-bf26caee-p648; SEG-bf26caee-p681; SEG-bf26caee-p756; SEG-bf26caee-p759; SEG-bf26caee-p762; SEG-bf26caee-p765; SEG-bf26caee-p768; SEG-bf26caee-p771; SEG-bf26caee-p787; SEG-bf26caee-p788; SEG-bf26caee-p789; SEG-bf26caee-p790; SEG-bf26caee-p791; SEG-bf26caee-p792,124,"[{""id"": ""SEG-bf26caee-p14"", ""section"": ""1.0"", ""first_paragraph"": 14, ""last_paragraph"": 14, ""text"": ""O Código Comercial, aprovado pelo Decreto-Lei n.º 1/2022, de 25 de Maio, constitui o enquadramento geral e transversal da actividade empresarial: define o objecto do regime comercial, a actividade empresarial, o empresário, a empresa, a capacidade empresarial e as obrigações comerciais. Este enquadramento aplica-se à organização e ao exercício da actividade empresarial, mas não substitui as exigências administrativas próprias de sectores regulados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p14"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p15"", ""section"": ""1.0"", ""first_paragraph"": 15, ""last_paragraph"": 15, ""text"": ""Os regimes sectoriais especiais aplicam-se cumulativamente quando a lei sujeita determinada actividade, operação, operador, localização ou instrumento a licença, autorização, registo regulatório, parecer, vistoria, comunicação ou supervisão. O Código Comercial disciplina o estatuto e a organização da actividade empresarial; não emite licença administrativa nem elimina requisitos sectoriais. Por sua vez, a licença sectorial habilita ou controla a actividade no âmbito do diploma especial, mas não substitui firma, registo comercial, escrituração, contas, actos societários e demais obrigações empresariais gerais que sejam aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p15"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p20"", ""section"": ""1.0.1"", ""first_paragraph"": 20, ""last_paragraph"": 22, ""text"": ""Artigo 1 | Objecto | Delimita a actividade empresarial, os sujeitos que a exercem e as relações jurídicas abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p20"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p23"", ""section"": ""1.0.1"", ""first_paragraph"": 23, ""last_paragraph"": 25, ""text"": ""Artigo 2 | Actividade empresarial | Qualifica a prática organizada de actos de produção ou circulação de bens ou prestação de serviços com finalidade lucrativa."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p23"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p26"", ""section"": ""1.0.1"", ""first_paragraph"": 26, ""last_paragraph"": 28, ""text"": ""Artigo 3 | Empresário | Distingue empresário individual e sociedade empresarial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p26"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p29"", ""section"": ""1.0.1"", ""first_paragraph"": 29, ""last_paragraph"": 31, ""text"": ""Artigo 4 | Noção de empresa | Enquadra a organização dos factores de produção e as actividades abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p29"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p32"", ""section"": ""1.0.1"", ""first_paragraph"": 32, ""last_paragraph"": 34, ""text"": ""Artigos 5 a 10 | Classificação da empresa, critérios especiais, prevalência e actualização | Exigem parametrização por finalidade, versão e vigência."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p32"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p35"", ""section"": ""1.0.1"", ""first_paragraph"": 35, ""last_paragraph"": 37, ""text"": ""Artigos 11 e 12 | Norma de conflitos e direito subsidiário | Orientam a lei aplicável e a integração de lacunas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p35"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p38"", ""section"": ""1.0.1"", ""first_paragraph"": 38, ""last_paragraph"": 40, ""text"": ""Artigos 13 a 18 | Capacidade empresarial e situações especiais | Suportam validações relativas à capacidade, cônjuges, menor e exercício por não empresário."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p38"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p41"", ""section"": ""1.0.1"", ""first_paragraph"": 41, ""last_paragraph"": 43, ""text"": ""Artigo 19 | Obrigações especiais do empresário | Consolida as obrigações de adoptar firma, escriturar em ordem uniforme as operações, inscrever os actos sujeitos a registo comercial e prestar contas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p41"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p44"", ""section"": ""1.0.1"", ""first_paragraph"": 44, ""last_paragraph"": 46, ""text"": ""Artigo 20 | Obrigatoriedade da firma | Exige nome empresarial no exercício da actividade e assinatura dos documentos correspondentes."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p44"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p47"", ""section"": ""1.0.1"", ""first_paragraph"": 47, ""last_paragraph"": 49, ""text"": ""Artigo 21 | Composição de firma | Define os elementos admissíveis na composição da firma."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p47"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p50"", ""section"": ""1.0.1"", ""first_paragraph"": 50, ""last_paragraph"": 52, ""text"": ""Artigo 22 | Princípio da verdade | Impede elementos falsos ou susceptíveis de induzir em erro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p50"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p53"", ""section"": ""1.0.1"", ""first_paragraph"": 53, ""last_paragraph"": 55, ""text"": ""Artigo 23 | Princípio da novidade | Exige distinção da firma relativamente às já registadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p53"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p56"", ""section"": ""1.0.1"", ""first_paragraph"": 56, ""last_paragraph"": 58, ""text"": ""Artigos 24 e 25 | Uso da língua oficial e outros requisitos da firma | Controlam a língua e requisitos adicionais da firma, conforme a versão oficial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p56"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p59"", ""section"": ""1.0.1"", ""first_paragraph"": 59, ""last_paragraph"": 61, ""text"": ""Artigo 26 | Uso exclusivo de firma | Vincula a exclusividade ao registo pelo titular."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p59"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p62"", ""section"": ""1.0.1"", ""first_paragraph"": 62, ""last_paragraph"": 64, ""text"": ""Artigo 27 | Uso ilegal de firma | Prevê proibição e responsabilidade decorrente do uso ilegal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p62"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p65"", ""section"": ""1.0.1"", ""first_paragraph"": 65, ""last_paragraph"": 67, ""text"": ""Artigo 28 | Transmissão de firma | Relaciona a transmissão da firma com a transmissão da empresa."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p65"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p68"", ""section"": ""1.0.1"", ""first_paragraph"": 68, ""last_paragraph"": 70, ""text"": ""Artigo 29 | Saída ou falecimento de sócio ou accionista | Regula os efeitos sobre a firma quando o nome conste da mesma."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p68"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p71"", ""section"": ""1.0.1"", ""first_paragraph"": 71, ""last_paragraph"": 73, ""text"": ""Artigo 30 | Anulação de firma | Regula a anulação por violação de direito de terceiro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p71"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p74"", ""section"": ""1.0.1"", ""first_paragraph"": 74, ""last_paragraph"": 76, ""text"": ""Artigo 31 | Caducidade da firma | Define causas de caducidade."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p74"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p77"", ""section"": ""1.0.1"", ""first_paragraph"": 77, ""last_paragraph"": 79, ""text"": ""Artigo 32 | Declaração de caducidade da firma | Define competência, contraditório, decisão e recurso."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p77"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p80"", ""section"": ""1.0.1"", ""first_paragraph"": 80, ""last_paragraph"": 82, ""text"": ""Artigo 33 | Renúncia à firma | Regula a declaração de renúncia perante a entidade competente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p80"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p83"", ""section"": ""1.0.1"", ""first_paragraph"": 83, ""last_paragraph"": 85, ""text"": ""Secções III a V do Capítulo II | Escrituração mercantil; registo comercial; balanço e prestação de contas | A estrutura está confirmada na fonte oficial; a numeração artigo a artigo permanece bloqueada no portal até conferência integral das páginas correspondentes da republicação oficial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p83"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p87"", ""section"": ""1.0.1"", ""first_paragraph"": 87, ""last_paragraph"": 87, ""text"": ""Fonte oficial e vigência: Decreto-Lei n.º 1/2022, de 25 de Maio, republicado no 3.º Suplemento ao Boletim da República, I Série, n.º 99, de 25 de Maio de 2022. A Imprensa Nacional de Moçambique regista que a publicação inicial ficou sem efeito e que o texto válido foi republicado no 3.º Suplemento. O diploma entrou em vigor 120 dias após a publicação, em 22 de Setembro de 2022. Consultar a publicação oficial da Imprensa Nacional de Moçambique. Para cada requisito do portal, deve ser citado o artigo específico da versão republicada e, quando exista, o diploma sectorial aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p87"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p104"", ""section"": ""1.0.2"", ""first_paragraph"": 104, ""last_paragraph"": 108, ""text"": ""Artigos 11 e 12 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Norma de conflitos e direito subsidiário | INV-001; INV-007; §§1.6, 3.2.2 e 6.5 | Regra aplicável documentada quando houver elemento estrangeiro, lacuna ou articulação com diploma especial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p104"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p109"", ""section"": ""1.0.2"", ""first_paragraph"": 109, ""last_paragraph"": 113, ""text"": ""Artigos 13 a 18 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Capacidade empresarial e situações especiais | INV-001; INV-007; SOC-001; §§3.1.1, 3.2.2 e 9.5 | Validações de capacidade e representação nos formulários e no comparador, sem decisão automática quando for necessária análise jurídica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p109"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p114"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p114"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p119"", ""section"": ""1.0.2"", ""first_paragraph"": 119, ""last_paragraph"": 123, ""text"": ""Artigos 20 a 33 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Regime da firma | INV-001; INV-007; SOC-001; SOC-002; §§3.2.2, 6.1, 9.2 e 9.3 | Validação da designação, composição, verdade, novidade, uso, transmissão, caducidade e renúncia, com fonte e evidência registal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-COMPANY-02"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p119"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p124"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p124"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p129"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p129"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p134"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p134"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p140"", ""section"": ""1.0.2"", ""first_paragraph"": 140, ""last_paragraph"": 140, ""text"": ""Estas referências complementam os requisitos existentes e devem ser registadas na matriz de rastreabilidade. Não criam novas histórias, não alteram a numeração do backlog e não substituem os diplomas sectoriais aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p140"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p144"", ""section"": ""1.2"", ""first_paragraph"": 144, ""last_paragraph"": 144, ""text"": ""Converter a matriz de requisitos por fase num guia interactivo, passo a passo, em vez de a apresentar como prompt."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p144"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p145"", ""section"": ""1.2"", ""first_paragraph"": 145, ""last_paragraph"": 145, ""text"": ""Estruturar a jornada do investidor desde a concepção do projecto até à entrada em operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p145"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p146"", ""section"": ""1.2"", ""first_paragraph"": 146, ""last_paragraph"": 146, ""text"": ""Disponibilizar formulários nos pontos necessários e gerar documentos para preenchimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p146"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p147"", ""section"": ""1.2"", ""first_paragraph"": 147, ""last_paragraph"": 147, ""text"": ""Criar checklists por entidade, incluindo APIEX, INTIC, Banco de Moçambique e demais instituições licenciadoras."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p147"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p160"", ""section"": ""1.6"", ""first_paragraph"": 160, ""last_paragraph"": 160, ""text"": ""Criar checklists e, quando disponíveis, formulários para licenciamentos financeiros, sectoriais e de actividades económicas junto das entidades competentes."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p160"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p161"", ""section"": ""1.6"", ""first_paragraph"": 161, ""last_paragraph"": 161, ""text"": ""Os checklists devem ser organizados em três camadas independentes: (1) obrigações empresariais gerais do Código Comercial; (2) formalidades de registo e publicidade perante a entidade de registo competente; e (3) licenças, autorizações e controlos sectoriais especiais. A conclusão de uma camada não comprova automaticamente o cumprimento das outras. Por exemplo, o registo ou licenciamento pelo INTIC ao abrigo do Decreto n.º 59/2023 não substitui o cumprimento das obrigações comerciais gerais nem outros actos sectoriais aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p161"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p163"", ""section"": ""1.7"", ""first_paragraph"": 163, ""last_paragraph"": 163, ""text"": ""APIEX, I.P. — registo, aprovação e acompanhamento de projectos de investimento privado, segundo a competência e o fluxo confirmados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p163"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p164"", ""section"": ""1.7"", ""first_paragraph"": 164, ""last_paragraph"": 164, ""text"": ""Autoridade Tributária de Moçambique — NUIT, obrigações fiscais, benefícios fiscais e procedimentos aduaneiros aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p164"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p165"", ""section"": ""1.7"", ""first_paragraph"": 165, ""last_paragraph"": 165, ""text"": ""Banco de Moçambique — autorizações, registos e controlos aplicáveis a instituições financeiras, operações cambiais, entrada de capital, transferência de lucros, dividendos e desinvestimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p165"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p166"", ""section"": ""1.7"", ""first_paragraph"": 166, ""last_paragraph"": 166, ""text"": ""BAU, I.P. — facilitação de procedimentos de licenciamento de actividades económicas e encaminhamento para a entidade competente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p166"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p167"", ""section"": ""1.7"", ""first_paragraph"": 167, ""last_paragraph"": 167, ""text"": ""Instituto Nacional de Tecnologias de Informação e Comunicação, I.P. (INTIC, I.P.), na qualidade de Autoridade Reguladora de TIC — entidade competente para o registo e licenciamento de Provedores Intermediários de Serviços Electrónicos e de Operadores de Plataformas Digitais, nos termos do Decreto n.º 59/2023, de 27 de Outubro. O âmbito inclui certificado de registo, licença por classe ou licença unificada, alteração, transmissão, renovação, cancelamento, vistoria e fiscalização, conforme o processo aplicável. Outros serviços, pareceres, homologações ou autorizações só devem ser incluídos quando comprovados por diploma ou fonte oficial específica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p167"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p168"", ""section"": ""1.7"", ""first_paragraph"": 168, ""last_paragraph"": 168, ""text"": ""Bolsa de Valores de Moçambique — informação sobre mercados, instrumentos e percurso de admissão, mantendo separadas as competências da bolsa, da autoridade reguladora e dos intermediários legalmente autorizados. Cada requisito, documento ou decisão deve indicar a entidade competente e a respectiva fonte antes de ser publicado no portal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p168"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p169"", ""section"": ""1.7"", ""first_paragraph"": 169, ""last_paragraph"": 169, ""text"": ""Conservatória competente — constituição, registo e actos societários aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p169"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p170"", ""section"": ""1.7"", ""first_paragraph"": 170, ""last_paragraph"": 170, ""text"": ""Ministérios, institutos públicos, municípios e demais autoridades sectoriais — licenças, pareceres, inspecções e autorizações conforme a actividade, localização e diploma aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p170"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p176"", ""section"": ""1.8"", ""first_paragraph"": 176, ""last_paragraph"": 179, ""text"": ""Código Comercial — Decreto-Lei n.º 1/2022, de 25 de Maio | Enquadramento e obrigações empresariais gerais | Deveres e actos comerciais ou societários; não constitui licença sectorial | Publicação oficial da Imprensa Nacional; vigente desde 22 de Setembro de 2022."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p176"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p180"", ""section"": ""1.8"", ""first_paragraph"": 180, ""last_paragraph"": 183, ""text"": ""APIEX, I.P. | Promoção, facilitação e acompanhamento do investimento e das exportações, segundo o estatuto orgânico; tramitação dos projectos ao abrigo do regime de investimento privado | Acto exacto previsto na Lei de Investimento e no respectivo regulamento; não tratar registo, aprovação e certificado como equivalentes | Resolução n.º 43/2019 — Estatuto Orgânico da APIEX, I.P.; Lei n.º 8/2023, de 9 de Junho — Lei de Investimento Privado; Decreto n.º 8/2024, de 7 de Março — Regulamento da Lei de Investimento. Aplicar a redacção vigente e o acto exacto de cada fluxo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p180"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p184"", ""section"": ""1.8"", ""first_paragraph"": 184, ""last_paragraph"": 187, ""text"": ""Autoridade Tributária de Moçambique | Administração tributária e aduaneira, cadastro fiscal, declarações, liquidação, cobrança e fiscalização segundo cada imposto ou procedimento | NUIT, declaração, liquidação, comprovativo, decisão, benefício ou acto aduaneiro conforme o diploma aplicável | Portal oficial da Autoridade Tributária — impostos, legislação e procedimentos; serviço oficial de NUIT. A fonte legal deve ser ligada por imposto, benefício ou procedimento; o portal institucional não substitui o diploma específico."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p184"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p188"", ""section"": ""1.8"", ""first_paragraph"": 188, ""last_paragraph"": 191, ""text"": ""Banco de Moçambique — instituições financeiras | Autorização para constituição de instituições de crédito e sociedades financeiras | Autorização concedida caso a caso pelo Governador do Banco de Moçambique | Lei n.º 20/2020, de 31 de Dezembro, artigo 16, e informação oficial de licenciamento; Regulamento aprovado pelo Decreto n.º 50/2024, de 11 de Julho. Aplicar apenas às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p188"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p192"", ""section"": ""1.8"", ""first_paragraph"": 192, ""last_paragraph"": 195, ""text"": ""Banco de Moçambique — operações cambiais | Autorização, registo e controlo de operações cambiais | Autorização ou registo cambial conforme a operação, o sujeito e a redacção vigente | Informação oficial de licenciamento e controlo cambial; Lei n.º 28/2022, de 29 de Dezembro — Lei Cambial. Os avisos e procedimentos aplicáveis devem ser ligados por operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p192"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p196"", ""section"": ""1.8"", ""first_paragraph"": 196, ""last_paragraph"": 199, ""text"": ""BAU, I.P. | Licenciar e monitorar actividades económicas nos termos dos regulamentos aplicáveis; simplificar, harmonizar e operacionalizar serviços integrados | Licença, alvará, certidão de mera comunicação prévia, registo ou encaminhamento, conforme o regime da actividade | Decreto n.º 29/2023, de 24 de Maio — criação do BAU, I.P.; Resolução n.º 3/2024, de 9 de Abril — Estatuto Orgânico; legislação oficial do BAU. Cada checklist deve indicar o regulamento de licenciamento aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p196"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p200"", ""section"": ""1.8"", ""first_paragraph"": 200, ""last_paragraph"": 203, ""text"": ""INTIC, I.P. — competências reguladas | Registo e licenciamento de provedores intermediários de serviços electrónicos e operadores de plataformas digitais; vistoria e fiscalização | Certificado de registo; licença por classe ou unificada; gestão do certificado ou da licença | Decreto n.º 59/2023, com redacção vigente após o Decreto n.º 44/2025; aplicar apenas às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p200"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p204"", ""section"": ""1.8"", ""first_paragraph"": 204, ""last_paragraph"": 207, ""text"": ""INTIC, I.P. — atribuições adicionais | Pareceres, homologações, certificações ou autorizações fora do regime identificado | Nenhum resultado confirmado sem fonte própria | Sem fonte oficial específica ligada; não configurar competência ou acto até identificação do diploma aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p204"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p208"", ""section"": ""1.8"", ""first_paragraph"": 208, ""last_paragraph"": 211, ""text"": ""Registo de Entidades Legais | Registo e publicidade dos actos relativos a entidades legais | Inscrição, certidão, averbamento, publicação ou outro acto registal previsto | Decreto-Lei n.º 1/2024, de 8 de Março — Regulamento do Registo de Entidades Legais. A conservatória e a competência territorial devem coincidir com o processo aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p208"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p212"", ""section"": ""1.8"", ""first_paragraph"": 212, ""last_paragraph"": 215, ""text"": ""Bolsa de Valores de Moçambique — admissão à cotação | Instrução, tramitação e decisão dos pedidos de admissão à cotação, nos termos do regulamento da bolsa | Admissão à cotação, através de pedido patrocinado por operador de bolsa | Regulamento n.º 1/GPCABVM/2010, artigos 1 a 3, emitido ao abrigo do Código do Mercado de Valores Mobiliários, aprovado pelo Decreto-Lei n.º 4/2009."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p212"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p216"", ""section"": ""1.8"", ""first_paragraph"": 216, ""last_paragraph"": 219, ""text"": ""Banco de Moçambique — autoridade do mercado de valores mobiliários | Regulação e supervisão do mercado de valores mobiliários no âmbito das competências legais | Avisos, autorizações, supervisão e demais actos regulatórios aplicáveis | Aviso n.º 3/GBM/2026 e fonte oficial do Banco de Moçambique, emitido ao abrigo do artigo 4 do Código do Mercado de Valores Mobiliários. Distinguir da decisão de admissão praticada pela Bolsa e da intermediação exercida por operadores autorizados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p216"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p220"", ""section"": ""1.8"", ""first_paragraph"": 220, ""last_paragraph"": 223, ""text"": ""Outras autoridades sectoriais | Licenciamento, parecer, autorização, vistoria, comunicação ou supervisão conforme o sector | Título ou decisão sectorial | Fonte variável por sector; relacionar cada acto com diploma oficial, artigo, entidade, vigência, documentos e canal antes da configuração."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p220"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p226"", ""section"": ""1.8.1"", ""first_paragraph"": 226, ""last_paragraph"": 226, ""text"": ""Fonte legal vigente: Decreto n.º 59/2023, de 27 de Outubro — publicação oficial da Imprensa Nacional de Moçambique, que aprova o Regulamento de Registo e Licenciamento de Provedores Intermediários de Serviços Electrónicos e de Operadores de Plataformas Digitais, conjugado com as alterações introduzidas pelo Decreto n.º 44/2025, de 28 de Novembro — Boletim da República, I Série, n.º 229."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p226"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p227"", ""section"": ""1.8.1"", ""first_paragraph"": 227, ""last_paragraph"": 227, ""text"": ""Artigos 9 a 16 do Decreto n.º 59/2023: registo, certificado de registo, alteração, transmissão, renovação e cancelamento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p227"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p228"", ""section"": ""1.8.1"", ""first_paragraph"": 228, ""last_paragraph"": 228, ""text"": ""Artigo 17 do Decreto n.º 59/2023: competência da Autoridade Reguladora de TIC para conceder licença."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p228"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p229"", ""section"": ""1.8.1"", ""first_paragraph"": 229, ""last_paragraph"": 229, ""text"": ""Artigos 18 a 30 do Decreto n.º 59/2023: licenciamento, tipos de licença, pedido, requisitos, validade, alteração, transmissão, renovação e cancelamento, com leitura da redacção vigente após o Decreto n.º 44/2025."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p229"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p230"", ""section"": ""1.8.1"", ""first_paragraph"": 230, ""last_paragraph"": 230, ""text"": ""Artigo 31 do Decreto n.º 59/2023: organização e direcção da vistoria."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p230"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p231"", ""section"": ""1.8.1"", ""first_paragraph"": 231, ""last_paragraph"": 231, ""text"": ""Artigo 49 do Decreto n.º 59/2023: fiscalização das actividades abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p231"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p232"", ""section"": ""1.8.1"", ""first_paragraph"": 232, ""last_paragraph"": 232, ""text"": ""Glossário do Regulamento: a expressão “Autoridade Reguladora de TIC” refere-se ao Instituto Nacional de Tecnologias de Informação e Comunicação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p232"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p233"", ""section"": ""1.8.1"", ""first_paragraph"": 233, ""last_paragraph"": 233, ""text"": ""Decreto n.º 44/2025, artigos 1 e 2: altera o âmbito, o artigo 18, as taxas e o regime transitório e revoga disposições específicas do Decreto n.º 59/2023; os requisitos do portal devem usar a redacção vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p233"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p234"", ""section"": ""1.8.1"", ""first_paragraph"": 234, ""last_paragraph"": 234, ""text"": ""A prova legal confirma as competências do INTIC apenas no âmbito dos provedores intermediários de serviços electrónicos e operadores de plataformas digitais abrangidos pelo regulamento. Outras atribuições permanecem sem prova documental específica até à identificação de fonte própria."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p234"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p237"", ""section"": ""1.8.2"", ""first_paragraph"": 237, ""last_paragraph"": 241, ""text"": ""Entidade ou regime | Diploma e artigo confirmados | Competência ou acto comprovado | Fonte oficial verificável | Vigência e âmbito"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p237"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p242"", ""section"": ""1.8.2"", ""first_paragraph"": 242, ""last_paragraph"": 246, ""text"": ""Código Comercial | Decreto-Lei n.º 1/2022, de 25 de Maio; artigos 1 a 19 e 20 a 33; Título II, Capítulo II, Secções III a V | Enquadramento geral da actividade empresarial, empresário, empresa, capacidade, firma, obrigações especiais, escrituração, registo comercial e prestação de contas | Imprensa Nacional de Moçambique — Boletim da República n.º 99, 3.º Suplemento | Vigente desde 22 de Setembro de 2022; regime geral, não licença sectorial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p242"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p247"", ""section"": ""1.8.2"", ""first_paragraph"": 247, ""last_paragraph"": 251, ""text"": ""APIEX, I.P. | Resolução n.º 43/2019; Lei n.º 8/2023, artigos 21 a 24; Decreto n.º 8/2024, artigos 2 e 3 do diploma aprovador | Base institucional; coordenação, recepção e tramitação de procedimentos de investimento; monitoria, acompanhamento e assistência aos projectos abrangidos | Resolução n.º 43/2019 — Imprensa Nacional; Lei n.º 8/2023 — Imprensa Nacional; Decreto n.º 8/2024 — Imprensa Nacional | Confirmado apenas no âmbito institucional e procedimental indicado; aplicar a redacção vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p247"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p252"", ""section"": ""1.8.2"", ""first_paragraph"": 252, ""last_paragraph"": 256, ""text"": ""Banco de Moçambique — instituições de crédito e sociedades financeiras | Lei n.º 20/2020, artigo 16; Decreto n.º 50/2024, artigos 1 a 4 e regime específico aplicável | Autorização, caso a caso, para constituição das instituições abrangidas; procedimentos gerais de instrução dos pedidos | Lei n.º 20/2020 — fonte oficial do Banco de Moçambique; Decreto n.º 50/2024 — fonte oficial do Banco de Moçambique; página oficial de licenciamento | Lei vigente desde a sua entrada em vigor; Regulamento publicado em 11 de Julho de 2024. Confirma constituição e procedimento geral, não todos os actos posteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p252"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p257"", ""section"": ""1.8.2"", ""first_paragraph"": 257, ""last_paragraph"": 261, ""text"": ""Banco de Moçambique — matéria cambial | Lei n.º 28/2022, artigos 8, 9, 11 e 27 a 30; Decreto n.º 56/2023, artigos 1 a 4 | Autoridade cambial, competência regulamentar, autorização, registo e controlo das operações abrangidas | Lei n.º 28/2022 — fonte oficial do Banco de Moçambique; Decreto n.º 56/2023 — fonte oficial do Banco de Moçambique | Aplicar a redacção vigente e o aviso ou procedimento específico de cada operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p257"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p262"", ""section"": ""1.8.2"", ""first_paragraph"": 262, ""last_paragraph"": 266, ""text"": ""BAU, I.P. | Decreto n.º 29/2023; Resolução n.º 3/2024; regulamentos sectoriais publicados no portal oficial | Criação, organização institucional, simplificação e disponibilização integrada de serviços; licenciamento ou encaminhamento apenas nos termos do regulamento da actividade | Decreto n.º 29/2023 — Imprensa Nacional; Resolução n.º 3/2024 — Imprensa Nacional; legislação oficial do BAU | Base institucional confirmada. O acto decisório depende do regulamento sectorial aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p262"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p267"", ""section"": ""1.8.2"", ""first_paragraph"": 267, ""last_paragraph"": 271, ""text"": ""INTIC, I.P. — Autoridade Reguladora de TIC | Decreto n.º 59/2023, artigos 9 a 16, 17, 18 a 31 e 49; Decreto n.º 44/2025, artigos 1 e 2 | Registo, licenciamento, gestão de certificados e licenças, vistoria e fiscalização de provedores intermediários de serviços electrónicos e operadores de plataformas digitais | Decreto n.º 59/2023 — Imprensa Nacional; Decreto n.º 44/2025 — Boletim da República | Usar a redacção vigente após a alteração de 2025; limitado às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p267"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p272"", ""section"": ""1.8.2"", ""first_paragraph"": 272, ""last_paragraph"": 276, ""text"": ""Registo de Entidades Legais | Decreto-Lei n.º 1/2024, artigo 1 do diploma aprovador; Regulamento, artigos 1, 2 e 11 a 18 | Registo e publicidade de actos relativos a entidades legais; organização dos serviços; identificação e declaração do beneficiário efectivo | Decreto-Lei n.º 1/2024 — Imprensa Nacional; texto do Regulamento — Tribunal Supremo | Vigente desde a data definida no diploma; actos individuais dependem do artigo próprio e da competência territorial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p272"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p277"", ""section"": ""1.8.2"", ""first_paragraph"": 277, ""last_paragraph"": 281, ""text"": ""Bolsa de Valores de Moçambique — admissão à cotação | Código do Mercado de Valores Mobiliários, artigo 67, n.º 2; Regulamento n.º 1/GPCABVM/2010, artigos 1 a 3 | Instrução, tramitação e decisão dos pedidos de admissão; patrocínio por operador de bolsa; apresentação do requerimento | Regulamento n.º 1/GPCABVM/2010 — Bolsa de Valores de Moçambique; página oficial do processo de listagem | Confirmado para os artigos 1 a 3 e para o fundamento do artigo 67, n.º 2; demais requisitos dependem da versão regulamentar vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p277"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p282"", ""section"": ""1.8.2"", ""first_paragraph"": 282, ""last_paragraph"": 286, ""text"": ""Banco de Moçambique — mercado de valores mobiliários | Decreto-Lei n.º 4/2009, Código do Mercado de Valores Mobiliários, artigo 4 | Autoridade reguladora e supervisora do mercado, no âmbito das competências previstas no artigo 4 | Código do Mercado de Valores Mobiliários — fonte oficial do Banco de Moçambique | Competência-base confirmada; cada autorização, oferta, intermediário ou acto de supervisão exige norma específica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p282"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p289"", ""section"": ""1.8.3"", ""first_paragraph"": 289, ""last_paragraph"": 292, ""text"": ""Entidade | Competência, acto ou parâmetro pendente | Prova necessária | Estado"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p289"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p293"", ""section"": ""1.8.3"", ""first_paragraph"": 293, ""last_paragraph"": 296, ""text"": ""APIEX, I.P. | Limiar e decisor por valor do projecto; designação exacta de mero registo, autorização, aprovação, certificado, alteração, cessão e revogação | Artigo regulamentar vigente, formulário, acto emitido e fluxo aprovado por tipo e valor de projecto | Parcialmente confirmado; parcela pendente separada"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p293"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p297"", ""section"": ""1.8.3"", ""first_paragraph"": 297, ""last_paragraph"": 300, ""text"": ""Autoridade Tributária de Moçambique | Base legal individual de NUIT, IRPC, IVA, ISPC, benefícios, isenções, taxas, declarações, cobrança, fiscalização e actos aduaneiros usados pelo portal | Diploma oficial, artigo, taxa ou fórmula, vigência, entidade decisora, formulário e canal para cada regra | Sem prova específica por regra; os portais institucionais confirmam o canal, não o fundamento jurídico individual"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p297"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p301"", ""section"": ""1.8.3"", ""first_paragraph"": 301, ""last_paragraph"": 304, ""text"": ""Banco de Moçambique — instituições financeiras | Documentos, prazos, alteração, fusão, transmissão, sucursais, revogação e requisitos próprios de cada categoria | Artigo da Lei n.º 20/2020, do Decreto n.º 50/2024 ou aviso específico | Parcialmente confirmado; constituição confirmada"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p301"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p305"", ""section"": ""1.8.3"", ""first_paragraph"": 305, ""last_paragraph"": 308, ""text"": ""Banco de Moçambique — operações cambiais | Procedimento exacto para entrada de capital, empréstimo externo, transferência de lucros e dividendos, desinvestimento e contas no exterior | Artigo do regulamento ou aviso específico, formulário, prazo, documentos e canal | Parcialmente confirmado por operação"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p305"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p309"", ""section"": ""1.8.3"", ""first_paragraph"": 309, ""last_paragraph"": 312, ""text"": ""BAU, I.P. | Competência decisória e acto exacto por actividade: licença, alvará, certidão, mera comunicação, registo ou encaminhamento | Artigo do regulamento comercial, industrial, simplificado ou de mera comunicação aplicável à actividade | Base institucional confirmada; acto sectorial pendente por processo"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p309"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p313"", ""section"": ""1.8.3"", ""first_paragraph"": 313, ""last_paragraph"": 316, ""text"": ""INTIC, I.P. | Pareceres, homologações, certificações ou autorizações fora dos Decretos n.º 59/2023 e n.º 44/2025 | Diploma e artigo próprios | Sem prova específica fora do regime confirmado"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p313"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p317"", ""section"": ""1.8.3"", ""first_paragraph"": 317, ""last_paragraph"": 320, ""text"": ""Registo de Entidades Legais | Reserva de denominação, constituição, alteração, certidão, averbamento, publicação, cancelamento e emolumentos por acto | Artigo exacto do Decreto-Lei n.º 1/2024, tabela aplicável e conservatória territorialmente competente | Parcialmente confirmado; base e beneficiário efectivo confirmados"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p317"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p321"", ""section"": ""1.8.3"", ""first_paragraph"": 321, ""last_paragraph"": 324, ""text"": ""Bolsa de Valores de Moçambique | Requisitos por segmento, montantes mínimos, prospecto, documentos, prazos, taxas e decisão final além dos artigos 1 a 3 | Artigo da versão regulamentar vigente e acto complementar aplicável | Parcialmente confirmado; artigos 1 a 3 confirmados"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p321"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p325"", ""section"": ""1.8.3"", ""first_paragraph"": 325, ""last_paragraph"": 328, ""text"": ""Banco de Moçambique — mercado de valores mobiliários | Autorizações, ofertas, intermediários e actos de supervisão específicos | Artigo do Código do Mercado de Valores Mobiliários e aviso ou regulamento aplicável | Competência-base confirmada; actos específicos pendentes"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p325"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p329"", ""section"": ""1.8.3"", ""first_paragraph"": 329, ""last_paragraph"": 332, ""text"": ""Outras autoridades sectoriais | Todas as competências ainda não individualizadas | Diploma, artigo, fonte oficial, vigência, entidade decisora, documentos, prazo, canal e resultado | Sem prova específica"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p329"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p338"", ""section"": ""1.8.4"", ""first_paragraph"": 338, ""last_paragraph"": 341, ""text"": ""Decreto-Lei n.º 1/2022 — Código Comercial | Referência oficial da Imprensa Nacional preservada. Estado: acesso técnico à referência pendente, porque a pesquisa directa redireccionou para o portal geral. | Não foi localizada revogação posterior na pesquisa documental registada. | Usar a versão republicada no 3.º Suplemento ao Boletim da República, I Série, n.º 99, e a data de entrada em vigor já aceite. A pendência técnica do link não reabre a aceitação da fonte."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p338"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p342"", ""section"": ""1.8.4"", ""first_paragraph"": 342, ""last_paragraph"": 345, ""text"": ""Resolução n.º 43/2019 — Estatuto Orgânico da APIEX, I.P. | Acesso oficial confirmado na Imprensa Nacional. | Foi localizada rectificação de 13 de Abril de 2020; não foi localizada revogação posterior. | Aplicar a Resolução com a rectificação incorporada."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p342"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p346"", ""section"": ""1.8.4"", ""first_paragraph"": 346, ""last_paragraph"": 349, ""text"": ""Lei n.º 8/2023 — Lei de Investimento Privado | Acesso oficial confirmado na Imprensa Nacional. | Não foi localizada revogação posterior na pesquisa documental registada. | Aplicar conjuntamente com o Decreto n.º 8/2024 e com alterações posteriores que venham a ser identificadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p346"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p350"", ""section"": ""1.8.4"", ""first_paragraph"": 350, ""last_paragraph"": 353, ""text"": ""Decreto n.º 8/2024 — Regulamento da Lei de Investimento | Acesso oficial confirmado na Imprensa Nacional. | O diploma revoga os Decretos n.º 43/2009 e n.º 20/2021; não foi localizada revogação posterior do Decreto n.º 8/2024. | Usar como referência regulamentar dos fluxos abrangidos, confirmando o artigo específico de cada procedimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p350"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p354"", ""section"": ""1.8.4"", ""first_paragraph"": 354, ""last_paragraph"": 357, ""text"": ""Lei n.º 20/2020 — Instituições de Crédito e Sociedades Financeiras | Acesso oficial confirmado no Banco de Moçambique. | Não foi localizada revogação posterior na pesquisa documental registada. | Aplicar o artigo 16 e as demais disposições relevantes em conjunto com o Decreto n.º 50/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p354"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p358"", ""section"": ""1.8.4"", ""first_paragraph"": 358, ""last_paragraph"": 361, ""text"": ""Decreto n.º 50/2024 — Regulamento da Lei n.º 20/2020 | Acesso oficial confirmado no Banco de Moçambique. | Revoga os Decretos n.º 56/2004, 57/2004, 31/2006, 30/2014 e 99/2019 e normas contrárias; não foi localizada revogação posterior. | Usar este regulamento nos procedimentos abrangidos e não os diplomas revogados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p358"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p362"", ""section"": ""1.8.4"", ""first_paragraph"": 362, ""last_paragraph"": 365, ""text"": ""Página oficial de licenciamento de instituições | Acesso institucional confirmado no Banco de Moçambique. | Conteúdo institucional activo; a página, por si só, não demonstra vigência normativa. | Usar como canal e apoio de navegação; fundamentar cada regra na Lei n.º 20/2020 e no Decreto n.º 50/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p362"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p366"", ""section"": ""1.8.4"", ""first_paragraph"": 366, ""last_paragraph"": 369, ""text"": ""Lei n.º 28/2022 — Lei Cambial | Acesso oficial confirmado no Banco de Moçambique. | Revoga a Lei n.º 11/2009; não foi localizada revogação posterior. | Aplicar em conjunto com o Decreto n.º 56/2023 e com o aviso específico de cada operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p366"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p370"", ""section"": ""1.8.4"", ""first_paragraph"": 370, ""last_paragraph"": 373, ""text"": ""Decreto n.º 56/2023 — Regulamento da Lei Cambial | Acesso oficial confirmado no Banco de Moçambique. | Revoga o Decreto n.º 49/2017; não foi localizada revogação posterior. | Aplicar a redacção do regulamento juntamente com os avisos vigentes por operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p370"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p374"", ""section"": ""1.8.4"", ""first_paragraph"": 374, ""last_paragraph"": 377, ""text"": ""Decreto n.º 29/2023 — criação do BAU, I.P. | Acesso oficial confirmado na Imprensa Nacional. | Revoga parcialmente o Decreto n.º 14/2007 quanto ao estatuto anterior dos BAU; não foi localizada revogação posterior. | Usar como base de criação; as competências e actos dependem do Estatuto e dos regulamentos sectoriais."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p374"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p378"", ""section"": ""1.8.4"", ""first_paragraph"": 378, ""last_paragraph"": 381, ""text"": ""Resolução n.º 3/2024 — Estatuto Orgânico do BAU, I.P. | Referência oficial identificada na Imprensa Nacional. Estado: acesso técnico à referência pendente para conferência integral dos artigos. | Não foi localizada revogação posterior na pesquisa documental registada. | Preservar a aceitação do documento oficial; não automatizar competências sem conferir o artigo aplicável no texto integral."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p378"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p382"", ""section"": ""1.8.4"", ""first_paragraph"": 382, ""last_paragraph"": 385, ""text"": ""Portal de legislação do BAU | Referência institucional preservada. Estado: acesso técnico à referência pendente na pesquisa autónoma. | O portal é conteúdo variável e não constitui, por si só, pesquisa conclusiva de revogações. | Usar como índice documental; fundamentar cada regra no diploma e artigo específicos."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p382"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p386"", ""section"": ""1.8.4"", ""first_paragraph"": 386, ""last_paragraph"": 389, ""text"": ""Decreto n.º 59/2023 — licenciamento de plataformas digitais | Acesso oficial confirmado na Imprensa Nacional. | Foi localizada alteração pelo Decreto n.º 44/2025. | Aplicar apenas a redacção resultante das alterações e revogações introduzidas em 2025."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p386"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p390"", ""section"": ""1.8.4"", ""first_paragraph"": 390, ""last_paragraph"": 393, ""text"": ""Decreto n.º 44/2025 — alteração do Decreto n.º 59/2023 | Referência oficial preservada no domínio do INTIC. Estado: acesso técnico à referência pendente no índice de pesquisa. | O documento oficial de 2025 altera e revoga disposições do Decreto n.º 59/2023; não foi localizada alteração posterior. | Preservar a aceitação do Boletim da República n.º 229 e aplicar as alterações de 2025. A pendência técnica do URL não reabre a validação documental."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p390"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p394"", ""section"": ""1.8.4"", ""first_paragraph"": 394, ""last_paragraph"": 397, ""text"": ""Decreto-Lei n.º 1/2024 — Registo de Entidades Legais | Acesso oficial confirmado na Imprensa Nacional; cópia institucional do Tribunal Supremo. | Revoga o Decreto n.º 1/2006, excepto o artigo 1 que cria o Registo de Entidades Legais; não foi localizada revogação posterior. | Usar a Imprensa Nacional como fonte primária e a cópia do Tribunal Supremo como acesso complementar."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p394"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p398"", ""section"": ""1.8.4"", ""first_paragraph"": 398, ""last_paragraph"": 401, ""text"": ""Regulamento n.º 1/GPCABVM/2010 — admissão à cotação | Acesso oficial confirmado no domínio da Bolsa de Valores de Moçambique. | Não foi localizada revogação integral; permanecem por confirmar alterações ou regulamentos posteriores por segmento e matéria. | Aplicar os artigos confirmados e conferir a versão regulamentar específica antes de automatizar requisitos posteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p398"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p402"", ""section"": ""1.8.4"", ""first_paragraph"": 402, ""last_paragraph"": 405, ""text"": ""Decreto-Lei n.º 4/2009 — Código do Mercado de Valores Mobiliários | Acesso oficial confirmado no Banco de Moçambique. | Não foi localizada revogação integral; alterações posteriores devem ser pesquisadas por artigo. | Usar o artigo aplicável com a redacção confirmada para a regra concreta, sem inferir vigência integral apenas pelo acesso ao ficheiro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p402"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p407"", ""section"": ""1.8.4"", ""first_paragraph"": 407, ""last_paragraph"": 407, ""text"": ""Critério de validação: os resultados devem ser registados separadamente em três dimensões: (1) acesso à fonte, que confirma apenas a disponibilidade técnica da referência; (2) pesquisa de alterações ou revogações, que regista o que foi ou não localizado no período de verificação; e (3) redacção aplicável à regra, que identifica o texto normativo que deve fundamentar o requisito. Um link acessível não demonstra, por si só, vigência. Quando uma ligação não for recuperada tecnicamente, o estado deve ser “acesso técnico à referência pendente”, preservando a aceitação do documento oficial e sem reabrir validações já concluídas. Esta classificação não substitui consolidação legislativa oficial nem conferência jurídica artigo a artigo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p407"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p410"", ""section"": ""1.8.4"", ""first_paragraph"": 410, ""last_paragraph"": 410, ""text"": ""O procedimento é uniforme para todas as entidades: a matriz de competências confirmadas contém apenas referências sustentadas por diploma e artigo identificados; a matriz de pendências contém, separadamente, os actos, parâmetros e procedimentos que ainda exigem prova específica. Nenhuma referência parcial deve ser promovida a regra automática antes da identificação da fonte oficial, vigência, entidade decisora e resultado aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p410"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p481"", ""section"": ""3.2.2"", ""first_paragraph"": 481, ""last_paragraph"": 481, ""text"": ""Os formulários devem suportar campos de texto, números, datas, listas, selecção múltipla, localização, anexos e declarações de consentimento. Cada formulário deve possuir versão, período de vigência, regras condicionais, campos obrigatórios, limites de ficheiro, validação de formato, mensagens de erro, gravação automática, recuperação de rascunho e associação ao requisito correspondente. Alterações publicadas não devem modificar retroactivamente submissões já efectuadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-25""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p481"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p565"", ""section"": ""4.4"", ""first_paragraph"": 565, ""last_paragraph"": 565, ""text"": ""O modelo deve incluir organizações, utilizadores, papéis, permissões, entidades públicas, localizações administrativas, sectores económicos, actividades, formulários, campos, versões, checklists, itens, submissões, evidências, tarefas, notificações, consentimentos, fontes, importações, conflitos de correspondência e eventos de auditoria. As classificações e regras devem possuir vigência temporal para permitir reproduzir uma decisão ou simulação com os dados aplicáveis à data."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OPS-03"", ""AUD-PROFILE-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p565"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p648"", ""section"": ""6"", ""first_paragraph"": 648, ""last_paragraph"": 653, ""text"": ""INV-007 | Configurar checklists e formulários sem alteração de código | Sim | Parcial | QA | Demonstrar editor, publicação de versões e preservação de submissões anteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p648"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p681"", ""section"": ""6.1"", ""first_paragraph"": 681, ""last_paragraph"": 687, ""text"": ""§1.2; §1.6–1.8 | Checklists e formulários por entidade competente | INV-007 e INV-009 | Sim | Sem demonstração suficiente por entidade | — | Demonstrar checklist, formulário, base legal, responsável, versão, canal e resultado por entidade, sem reabrir fontes oficiais já aceites."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p681"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p756"", ""section"": ""6.2"", ""first_paragraph"": 756, ""last_paragraph"": 758, ""text"": ""Entidade | Designação canónica e aliases documentados | Preservar designações e fontes já aceites; divergências novas são relacionadas com a correspondência documental em falta."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p756"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p759"", ""section"": ""6.2"", ""first_paragraph"": 759, ""last_paragraph"": 761, ""text"": ""Autorização ou acto | Registo, aprovação, licença, autorização, parecer, comunicação, vistoria, certificado, benefício ou decisão | Não usar os termos como equivalentes; cada acto mantém entidade competente, base, vigência e resultado."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p759"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p762"", ""section"": ""6.2"", ""first_paragraph"": 762, ""last_paragraph"": 764, ""text"": ""Categoria, modalidade e objectivo | Categorias, códigos e versões dos contratos existentes; agrupamentos funcionais do update | O agrupamento funcional não substitui a taxonomia canónica. Mapear sem renumerar, fundir ou converter automaticamente registos, incluindo imobiliário, fundiário e franquia."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p762"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p765"", ""section"": ""6.2"", ""first_paragraph"": 765, ""last_paragraph"": 767, ""text"": ""Acção e autorização | Preparação privada, submissão, encaminhamento restrito e publicação pública | Aplicar a autorização à acção correspondente. A falta de autorização de divulgação impede a publicação pública, não a preparação privada ou o pedido de apoio permitido."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p765"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p768"", ""section"": ""6.2"", ""first_paragraph"": 768, ""last_paragraph"": 770, ""text"": ""Ambiente | QA, Ativo, Ativo e QA ou — | QA não equivale a Ativo; “Ativo e QA” distingue capacidade instalada de evolução ainda em homologação; — indica ausência de demonstração suficiente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p768"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p771"", ""section"": ""6.2"", ""first_paragraph"": 771, ""last_paragraph"": 773, ""text"": ""Evidência | Documento, ecrã, teste, registo, resposta institucional ou ligação operacional | “Sem demonstração suficiente” não significa ausência de código; significa evidência insuficiente para conclusão."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p771"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p787"", ""section"": ""6.3.1"", ""first_paragraph"": 787, ""last_paragraph"": 787, ""text"": ""As designações institucionais já confirmadas devem ser preservadas. Permanecem sujeitos a prova específica apenas os actos, artigos, limites, procedimentos ou competências assinalados nas secções 1.8.2 e 1.8.3."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p787"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p788"", ""section"": ""6.3.1"", ""first_paragraph"": 788, ""last_paragraph"": 788, ""text"": ""APIEX, I.P.: a designação canónica “Agência para a Promoção de Investimento e Exportações, I.P.” está confirmada pela Resolução n.º 43/2019. Permanecem sujeitos a confirmação por fluxo o acto exacto, o artigo aplicável e o resultado emitido nos termos da Lei n.º 8/2023 e do Decreto n.º 8/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p788"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p789"", ""section"": ""6.3.1"", ""first_paragraph"": 789, ""last_paragraph"": 789, ""text"": ""BAU, I.P.: a designação “Balcões de Atendimento Único, Instituto Público — BAU, I.P.” e as competências institucionais estão confirmadas pelo Decreto n.º 29/2023 e pela Resolução n.º 3/2024. O acto exacto — licença, alvará, certidão, registo, comunicação ou encaminhamento — deve ser confirmado no regulamento da actividade correspondente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p789"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p790"", ""section"": ""6.3.1"", ""first_paragraph"": 790, ""last_paragraph"": 790, ""text"": ""INTIC, I.P.: a designação e a competência como Autoridade Reguladora de TIC para o registo e licenciamento abrangidos pelo Decreto n.º 59/2023 estão confirmadas. Permanecem sem prova documental específica apenas os serviços, pareceres, homologações, certificações ou autorizações fora desse âmbito."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p790"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p791"", ""section"": ""6.3.1"", ""first_paragraph"": 791, ""last_paragraph"": 791, ""text"": ""Registo de Entidades Legais: a base nacional e a designação do regime estão confirmadas pelo Decreto-Lei n.º 1/2024. A conservatória territorialmente competente e o artigo aplicável a cada acto — reserva, constituição, alteração, certidão, averbamento, publicação ou cancelamento — devem ser confirmados por processo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p791"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p792"", ""section"": ""6.3.1"", ""first_paragraph"": 792, ""last_paragraph"": 792, ""text"": ""Enquanto faltar identificar a correspondência documental, o checklist deve conservar a designação encontrada como variante, registar o documento de origem e impedir apenas a sua promoção automática a valor canónico. Esta regra não reabre fontes oficiais, nomenclaturas ou validações já aceites."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p792"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",parcial,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
+AUD-CHECKLIST-01,"Editor de checklists e formulários configuráveis, publicação de versões e preservação de submissões anteriores",[Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] Alias documental INV-007; SEG-bf26caee-p14; SEG-bf26caee-p15; SEG-bf26caee-p20; SEG-bf26caee-p23; SEG-bf26caee-p26; SEG-bf26caee-p29; SEG-bf26caee-p32; SEG-bf26caee-p35; SEG-bf26caee-p38; SEG-bf26caee-p41; SEG-bf26caee-p44; SEG-bf26caee-p47; SEG-bf26caee-p50; SEG-bf26caee-p53; SEG-bf26caee-p56; SEG-bf26caee-p59; SEG-bf26caee-p62; SEG-bf26caee-p65; SEG-bf26caee-p68; SEG-bf26caee-p71; SEG-bf26caee-p74; SEG-bf26caee-p77; SEG-bf26caee-p80; SEG-bf26caee-p83; SEG-bf26caee-p87; SEG-bf26caee-p104; SEG-bf26caee-p109; SEG-bf26caee-p114; SEG-bf26caee-p119; SEG-bf26caee-p124; SEG-bf26caee-p129; SEG-bf26caee-p134; SEG-bf26caee-p140; SEG-bf26caee-p144; SEG-bf26caee-p145; SEG-bf26caee-p146; SEG-bf26caee-p147; SEG-bf26caee-p160; SEG-bf26caee-p161; SEG-bf26caee-p163; SEG-bf26caee-p164; SEG-bf26caee-p165; SEG-bf26caee-p166; SEG-bf26caee-p167; SEG-bf26caee-p168; SEG-bf26caee-p169; SEG-bf26caee-p170; SEG-bf26caee-p176; SEG-bf26caee-p180; SEG-bf26caee-p184; SEG-bf26caee-p188; SEG-bf26caee-p192; SEG-bf26caee-p196; SEG-bf26caee-p200; SEG-bf26caee-p204; SEG-bf26caee-p208; SEG-bf26caee-p212; SEG-bf26caee-p216; SEG-bf26caee-p220; SEG-bf26caee-p226; SEG-bf26caee-p227; SEG-bf26caee-p228; SEG-bf26caee-p229; SEG-bf26caee-p230; SEG-bf26caee-p231; SEG-bf26caee-p232; SEG-bf26caee-p233; SEG-bf26caee-p234; SEG-bf26caee-p237; SEG-bf26caee-p242; SEG-bf26caee-p247; SEG-bf26caee-p252; SEG-bf26caee-p257; SEG-bf26caee-p262; SEG-bf26caee-p267; SEG-bf26caee-p272; SEG-bf26caee-p277; SEG-bf26caee-p282; SEG-bf26caee-p289; SEG-bf26caee-p293; SEG-bf26caee-p297; SEG-bf26caee-p301; SEG-bf26caee-p305; SEG-bf26caee-p309; SEG-bf26caee-p313; SEG-bf26caee-p317; SEG-bf26caee-p321; SEG-bf26caee-p325; SEG-bf26caee-p329; SEG-bf26caee-p338; SEG-bf26caee-p342; SEG-bf26caee-p346; SEG-bf26caee-p350; SEG-bf26caee-p354; SEG-bf26caee-p358; SEG-bf26caee-p362; SEG-bf26caee-p366; SEG-bf26caee-p370; SEG-bf26caee-p374; SEG-bf26caee-p378; SEG-bf26caee-p382; SEG-bf26caee-p386; SEG-bf26caee-p390; SEG-bf26caee-p394; SEG-bf26caee-p398; SEG-bf26caee-p402; SEG-bf26caee-p407; SEG-bf26caee-p410; SEG-bf26caee-p481; SEG-bf26caee-p565; SEG-bf26caee-p648; SEG-bf26caee-p681; SEG-bf26caee-p756; SEG-bf26caee-p759; SEG-bf26caee-p762; SEG-bf26caee-p765; SEG-bf26caee-p768; SEG-bf26caee-p771; SEG-bf26caee-p787; SEG-bf26caee-p788; SEG-bf26caee-p789; SEG-bf26caee-p790; SEG-bf26caee-p791; SEG-bf26caee-p792,INV-007 / incremento posterior ao workflow das seis categorias,"Consumidor específico ainda por delimitar; reutilizar rotas de biblioteca/Balcão/negócios/simulador pertinentes, sem atribuir existência fictícia.","Configurações existentes, schema, biblioteca e auditoria. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual. Continuidade 02/11/2026: DeskServiceEditor, histórico administrativo, versões imutáveis e validação comum dos pedidos do Balcão; configuração por interface demonstrada em QA isolada.","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.","segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. | 02/11/2026: editor local /management/balcao/servicos reutiliza desk_service_versions e competencias administrativas existentes; comparacao anterior/nova, campos/opcoes/condicoes, publicacao com motivo/base_version, idempotencia, conflito e auditoria. Pedidos submetidos e snapshots v1 conservados apos v2; validacao do campo novo no servidor. 18 Feature/325 assercoes iniciais e 1 teste frontend passaram; provas finais e limites no manual. Sem migracoes, instalacao ou prova visual; cobertura parcial dos tipos de checklist. Continuidade 02/11/2026: historico administrativo paginado das definicoes do Balcao, incluindo codigos retirados para consulta; sem respostas dos requerentes ou republicacao. Quatro Feature/91 assercoes e tres frontend aprovados; PHPStan, tipos e lint passaram. Provas no manual; visual e instalacao pendentes, requisito transversal parcial. [DESK-ANALYSIS-SCOPE-20261102] Verificações usam a versão e as perguntas aplicáveis: sem financiamento inexistente ou bloqueio por valores de ramos ocultos; diferenças financeiras aplicáveis continuam recusadas. Recibo distingue respostas conservadas e preserva rótulos da versão, original técnico e permissões. Publicação valida que a fonte da localização não fica indisponível quando a localização se aplica, reutilizando a exigência existente. 25 testes conjuntos/467 asserções e dois específicos/11 asserções aprovados; PHPStan e Pint passaram. Recibo desk_analysis_scope_increment_20261102 em local-validation-20261029.json; manual de 02/11. Sem instalação ou conferência visual; requisito transversal parcial.",Implementado parcialmente,"02/11/2026: editor local dos formulários do Balcão implementado com prévia, publicação versionada, histórico paginado e preservação dos pedidos anteriores. Restam conferência visual e disponibilização; a adaptação de outras checklists/contextos ainda não foi demonstrada. Não se declara parametrização transversal concluída. Histórico preservado: Checklists existem em configuração; editor/versionamento administrativo sem código e adaptação de submissões antigas não demonstrados.","Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Publicar versão autorizada, novas submissões usam-na e anteriores preservam a versão aplicada. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","Gestor autorizado configura/previsualiza/publica versão, investidor recebe versão aplicável ao contexto/data, guarda incompleto e recupera; nova versão não modifica submissão anterior nem trata decisão interna como licença.",P2,"Código INV-007 é alias deste documento, não renumeração do roteiro/backlog. Conteúdo/regras pendentes não se tornam aprovados pela importação.",SEG-bf26caee-p14; SEG-bf26caee-p15; SEG-bf26caee-p20; SEG-bf26caee-p23; SEG-bf26caee-p26; SEG-bf26caee-p29; SEG-bf26caee-p32; SEG-bf26caee-p35; SEG-bf26caee-p38; SEG-bf26caee-p41; SEG-bf26caee-p44; SEG-bf26caee-p47; SEG-bf26caee-p50; SEG-bf26caee-p53; SEG-bf26caee-p56; SEG-bf26caee-p59; SEG-bf26caee-p62; SEG-bf26caee-p65; SEG-bf26caee-p68; SEG-bf26caee-p71; SEG-bf26caee-p74; SEG-bf26caee-p77; SEG-bf26caee-p80; SEG-bf26caee-p83; SEG-bf26caee-p87; SEG-bf26caee-p104; SEG-bf26caee-p109; SEG-bf26caee-p114; SEG-bf26caee-p119; SEG-bf26caee-p124; SEG-bf26caee-p129; SEG-bf26caee-p134; SEG-bf26caee-p140; SEG-bf26caee-p144; SEG-bf26caee-p145; SEG-bf26caee-p146; SEG-bf26caee-p147; SEG-bf26caee-p160; SEG-bf26caee-p161; SEG-bf26caee-p163; SEG-bf26caee-p164; SEG-bf26caee-p165; SEG-bf26caee-p166; SEG-bf26caee-p167; SEG-bf26caee-p168; SEG-bf26caee-p169; SEG-bf26caee-p170; SEG-bf26caee-p176; SEG-bf26caee-p180; SEG-bf26caee-p184; SEG-bf26caee-p188; SEG-bf26caee-p192; SEG-bf26caee-p196; SEG-bf26caee-p200; SEG-bf26caee-p204; SEG-bf26caee-p208; SEG-bf26caee-p212; SEG-bf26caee-p216; SEG-bf26caee-p220; SEG-bf26caee-p226; SEG-bf26caee-p227; SEG-bf26caee-p228; SEG-bf26caee-p229; SEG-bf26caee-p230; SEG-bf26caee-p231; SEG-bf26caee-p232; SEG-bf26caee-p233; SEG-bf26caee-p234; SEG-bf26caee-p237; SEG-bf26caee-p242; SEG-bf26caee-p247; SEG-bf26caee-p252; SEG-bf26caee-p257; SEG-bf26caee-p262; SEG-bf26caee-p267; SEG-bf26caee-p272; SEG-bf26caee-p277; SEG-bf26caee-p282; SEG-bf26caee-p289; SEG-bf26caee-p293; SEG-bf26caee-p297; SEG-bf26caee-p301; SEG-bf26caee-p305; SEG-bf26caee-p309; SEG-bf26caee-p313; SEG-bf26caee-p317; SEG-bf26caee-p321; SEG-bf26caee-p325; SEG-bf26caee-p329; SEG-bf26caee-p338; SEG-bf26caee-p342; SEG-bf26caee-p346; SEG-bf26caee-p350; SEG-bf26caee-p354; SEG-bf26caee-p358; SEG-bf26caee-p362; SEG-bf26caee-p366; SEG-bf26caee-p370; SEG-bf26caee-p374; SEG-bf26caee-p378; SEG-bf26caee-p382; SEG-bf26caee-p386; SEG-bf26caee-p390; SEG-bf26caee-p394; SEG-bf26caee-p398; SEG-bf26caee-p402; SEG-bf26caee-p407; SEG-bf26caee-p410; SEG-bf26caee-p481; SEG-bf26caee-p565; SEG-bf26caee-p648; SEG-bf26caee-p681; SEG-bf26caee-p756; SEG-bf26caee-p759; SEG-bf26caee-p762; SEG-bf26caee-p765; SEG-bf26caee-p768; SEG-bf26caee-p771; SEG-bf26caee-p787; SEG-bf26caee-p788; SEG-bf26caee-p789; SEG-bf26caee-p790; SEG-bf26caee-p791; SEG-bf26caee-p792,124,"[{""id"": ""SEG-bf26caee-p14"", ""section"": ""1.0"", ""first_paragraph"": 14, ""last_paragraph"": 14, ""text"": ""O Código Comercial, aprovado pelo Decreto-Lei n.º 1/2022, de 25 de Maio, constitui o enquadramento geral e transversal da actividade empresarial: define o objecto do regime comercial, a actividade empresarial, o empresário, a empresa, a capacidade empresarial e as obrigações comerciais. Este enquadramento aplica-se à organização e ao exercício da actividade empresarial, mas não substitui as exigências administrativas próprias de sectores regulados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p14"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p15"", ""section"": ""1.0"", ""first_paragraph"": 15, ""last_paragraph"": 15, ""text"": ""Os regimes sectoriais especiais aplicam-se cumulativamente quando a lei sujeita determinada actividade, operação, operador, localização ou instrumento a licença, autorização, registo regulatório, parecer, vistoria, comunicação ou supervisão. O Código Comercial disciplina o estatuto e a organização da actividade empresarial; não emite licença administrativa nem elimina requisitos sectoriais. Por sua vez, a licença sectorial habilita ou controla a actividade no âmbito do diploma especial, mas não substitui firma, registo comercial, escrituração, contas, actos societários e demais obrigações empresariais gerais que sejam aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p15"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p20"", ""section"": ""1.0.1"", ""first_paragraph"": 20, ""last_paragraph"": 22, ""text"": ""Artigo 1 | Objecto | Delimita a actividade empresarial, os sujeitos que a exercem e as relações jurídicas abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p20"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p23"", ""section"": ""1.0.1"", ""first_paragraph"": 23, ""last_paragraph"": 25, ""text"": ""Artigo 2 | Actividade empresarial | Qualifica a prática organizada de actos de produção ou circulação de bens ou prestação de serviços com finalidade lucrativa."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p23"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p26"", ""section"": ""1.0.1"", ""first_paragraph"": 26, ""last_paragraph"": 28, ""text"": ""Artigo 3 | Empresário | Distingue empresário individual e sociedade empresarial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p26"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p29"", ""section"": ""1.0.1"", ""first_paragraph"": 29, ""last_paragraph"": 31, ""text"": ""Artigo 4 | Noção de empresa | Enquadra a organização dos factores de produção e as actividades abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p29"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p32"", ""section"": ""1.0.1"", ""first_paragraph"": 32, ""last_paragraph"": 34, ""text"": ""Artigos 5 a 10 | Classificação da empresa, critérios especiais, prevalência e actualização | Exigem parametrização por finalidade, versão e vigência."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p32"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p35"", ""section"": ""1.0.1"", ""first_paragraph"": 35, ""last_paragraph"": 37, ""text"": ""Artigos 11 e 12 | Norma de conflitos e direito subsidiário | Orientam a lei aplicável e a integração de lacunas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p35"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p38"", ""section"": ""1.0.1"", ""first_paragraph"": 38, ""last_paragraph"": 40, ""text"": ""Artigos 13 a 18 | Capacidade empresarial e situações especiais | Suportam validações relativas à capacidade, cônjuges, menor e exercício por não empresário."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p38"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p41"", ""section"": ""1.0.1"", ""first_paragraph"": 41, ""last_paragraph"": 43, ""text"": ""Artigo 19 | Obrigações especiais do empresário | Consolida as obrigações de adoptar firma, escriturar em ordem uniforme as operações, inscrever os actos sujeitos a registo comercial e prestar contas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p41"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p44"", ""section"": ""1.0.1"", ""first_paragraph"": 44, ""last_paragraph"": 46, ""text"": ""Artigo 20 | Obrigatoriedade da firma | Exige nome empresarial no exercício da actividade e assinatura dos documentos correspondentes."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p44"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p47"", ""section"": ""1.0.1"", ""first_paragraph"": 47, ""last_paragraph"": 49, ""text"": ""Artigo 21 | Composição de firma | Define os elementos admissíveis na composição da firma."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p47"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p50"", ""section"": ""1.0.1"", ""first_paragraph"": 50, ""last_paragraph"": 52, ""text"": ""Artigo 22 | Princípio da verdade | Impede elementos falsos ou susceptíveis de induzir em erro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p50"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p53"", ""section"": ""1.0.1"", ""first_paragraph"": 53, ""last_paragraph"": 55, ""text"": ""Artigo 23 | Princípio da novidade | Exige distinção da firma relativamente às já registadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p53"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p56"", ""section"": ""1.0.1"", ""first_paragraph"": 56, ""last_paragraph"": 58, ""text"": ""Artigos 24 e 25 | Uso da língua oficial e outros requisitos da firma | Controlam a língua e requisitos adicionais da firma, conforme a versão oficial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p56"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p59"", ""section"": ""1.0.1"", ""first_paragraph"": 59, ""last_paragraph"": 61, ""text"": ""Artigo 26 | Uso exclusivo de firma | Vincula a exclusividade ao registo pelo titular."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p59"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p62"", ""section"": ""1.0.1"", ""first_paragraph"": 62, ""last_paragraph"": 64, ""text"": ""Artigo 27 | Uso ilegal de firma | Prevê proibição e responsabilidade decorrente do uso ilegal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p62"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p65"", ""section"": ""1.0.1"", ""first_paragraph"": 65, ""last_paragraph"": 67, ""text"": ""Artigo 28 | Transmissão de firma | Relaciona a transmissão da firma com a transmissão da empresa."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p65"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p68"", ""section"": ""1.0.1"", ""first_paragraph"": 68, ""last_paragraph"": 70, ""text"": ""Artigo 29 | Saída ou falecimento de sócio ou accionista | Regula os efeitos sobre a firma quando o nome conste da mesma."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p68"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p71"", ""section"": ""1.0.1"", ""first_paragraph"": 71, ""last_paragraph"": 73, ""text"": ""Artigo 30 | Anulação de firma | Regula a anulação por violação de direito de terceiro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p71"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p74"", ""section"": ""1.0.1"", ""first_paragraph"": 74, ""last_paragraph"": 76, ""text"": ""Artigo 31 | Caducidade da firma | Define causas de caducidade."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p74"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p77"", ""section"": ""1.0.1"", ""first_paragraph"": 77, ""last_paragraph"": 79, ""text"": ""Artigo 32 | Declaração de caducidade da firma | Define competência, contraditório, decisão e recurso."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p77"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p80"", ""section"": ""1.0.1"", ""first_paragraph"": 80, ""last_paragraph"": 82, ""text"": ""Artigo 33 | Renúncia à firma | Regula a declaração de renúncia perante a entidade competente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p80"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p83"", ""section"": ""1.0.1"", ""first_paragraph"": 83, ""last_paragraph"": 85, ""text"": ""Secções III a V do Capítulo II | Escrituração mercantil; registo comercial; balanço e prestação de contas | A estrutura está confirmada na fonte oficial; a numeração artigo a artigo permanece bloqueada no portal até conferência integral das páginas correspondentes da republicação oficial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p83"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p87"", ""section"": ""1.0.1"", ""first_paragraph"": 87, ""last_paragraph"": 87, ""text"": ""Fonte oficial e vigência: Decreto-Lei n.º 1/2022, de 25 de Maio, republicado no 3.º Suplemento ao Boletim da República, I Série, n.º 99, de 25 de Maio de 2022. A Imprensa Nacional de Moçambique regista que a publicação inicial ficou sem efeito e que o texto válido foi republicado no 3.º Suplemento. O diploma entrou em vigor 120 dias após a publicação, em 22 de Setembro de 2022. Consultar a publicação oficial da Imprensa Nacional de Moçambique. Para cada requisito do portal, deve ser citado o artigo específico da versão republicada e, quando exista, o diploma sectorial aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p87"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p104"", ""section"": ""1.0.2"", ""first_paragraph"": 104, ""last_paragraph"": 108, ""text"": ""Artigos 11 e 12 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Norma de conflitos e direito subsidiário | INV-001; INV-007; §§1.6, 3.2.2 e 6.5 | Regra aplicável documentada quando houver elemento estrangeiro, lacuna ou articulação com diploma especial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p104"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p109"", ""section"": ""1.0.2"", ""first_paragraph"": 109, ""last_paragraph"": 113, ""text"": ""Artigos 13 a 18 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Capacidade empresarial e situações especiais | INV-001; INV-007; SOC-001; §§3.1.1, 3.2.2 e 9.5 | Validações de capacidade e representação nos formulários e no comparador, sem decisão automática quando for necessária análise jurídica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p109"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p114"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p114"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p119"", ""section"": ""1.0.2"", ""first_paragraph"": 119, ""last_paragraph"": 123, ""text"": ""Artigos 20 a 33 | Decreto-Lei n.º 1/2022 — publicação oficial da Imprensa Nacional de Moçambique | Regime da firma | INV-001; INV-007; SOC-001; SOC-002; §§3.2.2, 6.1, 9.2 e 9.3 | Validação da designação, composição, verdade, novidade, uso, transmissão, caducidade e renúncia, com fonte e evidência registal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-COMPANY-01"", ""AUD-COMPANY-02"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p119"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p124"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p124"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p129"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p129"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p134"", ""section"": ""1.0.2"", ""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."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-CRM-01"", ""AUD-DESK-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p134"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p140"", ""section"": ""1.0.2"", ""first_paragraph"": 140, ""last_paragraph"": 140, ""text"": ""Estas referências complementam os requisitos existentes e devem ser registadas na matriz de rastreabilidade. Não criam novas histórias, não alteram a numeração do backlog e não substituem os diplomas sectoriais aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p140"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p144"", ""section"": ""1.2"", ""first_paragraph"": 144, ""last_paragraph"": 144, ""text"": ""Converter a matriz de requisitos por fase num guia interactivo, passo a passo, em vez de a apresentar como prompt."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p144"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p145"", ""section"": ""1.2"", ""first_paragraph"": 145, ""last_paragraph"": 145, ""text"": ""Estruturar a jornada do investidor desde a concepção do projecto até à entrada em operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p145"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p146"", ""section"": ""1.2"", ""first_paragraph"": 146, ""last_paragraph"": 146, ""text"": ""Disponibilizar formulários nos pontos necessários e gerar documentos para preenchimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p146"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p147"", ""section"": ""1.2"", ""first_paragraph"": 147, ""last_paragraph"": 147, ""text"": ""Criar checklists por entidade, incluindo APIEX, INTIC, Banco de Moçambique e demais instituições licenciadoras."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-DESK-02"", ""MASTER-1f0a4cde-0001"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p147"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p160"", ""section"": ""1.6"", ""first_paragraph"": 160, ""last_paragraph"": 160, ""text"": ""Criar checklists e, quando disponíveis, formulários para licenciamentos financeiros, sectoriais e de actividades económicas junto das entidades competentes."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p160"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p161"", ""section"": ""1.6"", ""first_paragraph"": 161, ""last_paragraph"": 161, ""text"": ""Os checklists devem ser organizados em três camadas independentes: (1) obrigações empresariais gerais do Código Comercial; (2) formalidades de registo e publicidade perante a entidade de registo competente; e (3) licenças, autorizações e controlos sectoriais especiais. A conclusão de uma camada não comprova automaticamente o cumprimento das outras. Por exemplo, o registo ou licenciamento pelo INTIC ao abrigo do Decreto n.º 59/2023 não substitui o cumprimento das obrigações comerciais gerais nem outros actos sectoriais aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p161"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p163"", ""section"": ""1.7"", ""first_paragraph"": 163, ""last_paragraph"": 163, ""text"": ""APIEX, I.P. — registo, aprovação e acompanhamento de projectos de investimento privado, segundo a competência e o fluxo confirmados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p163"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p164"", ""section"": ""1.7"", ""first_paragraph"": 164, ""last_paragraph"": 164, ""text"": ""Autoridade Tributária de Moçambique — NUIT, obrigações fiscais, benefícios fiscais e procedimentos aduaneiros aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p164"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p165"", ""section"": ""1.7"", ""first_paragraph"": 165, ""last_paragraph"": 165, ""text"": ""Banco de Moçambique — autorizações, registos e controlos aplicáveis a instituições financeiras, operações cambiais, entrada de capital, transferência de lucros, dividendos e desinvestimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p165"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p166"", ""section"": ""1.7"", ""first_paragraph"": 166, ""last_paragraph"": 166, ""text"": ""BAU, I.P. — facilitação de procedimentos de licenciamento de actividades económicas e encaminhamento para a entidade competente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p166"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p167"", ""section"": ""1.7"", ""first_paragraph"": 167, ""last_paragraph"": 167, ""text"": ""Instituto Nacional de Tecnologias de Informação e Comunicação, I.P. (INTIC, I.P.), na qualidade de Autoridade Reguladora de TIC — entidade competente para o registo e licenciamento de Provedores Intermediários de Serviços Electrónicos e de Operadores de Plataformas Digitais, nos termos do Decreto n.º 59/2023, de 27 de Outubro. O âmbito inclui certificado de registo, licença por classe ou licença unificada, alteração, transmissão, renovação, cancelamento, vistoria e fiscalização, conforme o processo aplicável. Outros serviços, pareceres, homologações ou autorizações só devem ser incluídos quando comprovados por diploma ou fonte oficial específica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p167"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p168"", ""section"": ""1.7"", ""first_paragraph"": 168, ""last_paragraph"": 168, ""text"": ""Bolsa de Valores de Moçambique — informação sobre mercados, instrumentos e percurso de admissão, mantendo separadas as competências da bolsa, da autoridade reguladora e dos intermediários legalmente autorizados. Cada requisito, documento ou decisão deve indicar a entidade competente e a respectiva fonte antes de ser publicado no portal."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p168"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p169"", ""section"": ""1.7"", ""first_paragraph"": 169, ""last_paragraph"": 169, ""text"": ""Conservatória competente — constituição, registo e actos societários aplicáveis."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p169"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p170"", ""section"": ""1.7"", ""first_paragraph"": 170, ""last_paragraph"": 170, ""text"": ""Ministérios, institutos públicos, municípios e demais autoridades sectoriais — licenças, pareceres, inspecções e autorizações conforme a actividade, localização e diploma aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p170"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p176"", ""section"": ""1.8"", ""first_paragraph"": 176, ""last_paragraph"": 179, ""text"": ""Código Comercial — Decreto-Lei n.º 1/2022, de 25 de Maio | Enquadramento e obrigações empresariais gerais | Deveres e actos comerciais ou societários; não constitui licença sectorial | Publicação oficial da Imprensa Nacional; vigente desde 22 de Setembro de 2022."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p176"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p180"", ""section"": ""1.8"", ""first_paragraph"": 180, ""last_paragraph"": 183, ""text"": ""APIEX, I.P. | Promoção, facilitação e acompanhamento do investimento e das exportações, segundo o estatuto orgânico; tramitação dos projectos ao abrigo do regime de investimento privado | Acto exacto previsto na Lei de Investimento e no respectivo regulamento; não tratar registo, aprovação e certificado como equivalentes | Resolução n.º 43/2019 — Estatuto Orgânico da APIEX, I.P.; Lei n.º 8/2023, de 9 de Junho — Lei de Investimento Privado; Decreto n.º 8/2024, de 7 de Março — Regulamento da Lei de Investimento. Aplicar a redacção vigente e o acto exacto de cada fluxo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p180"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p184"", ""section"": ""1.8"", ""first_paragraph"": 184, ""last_paragraph"": 187, ""text"": ""Autoridade Tributária de Moçambique | Administração tributária e aduaneira, cadastro fiscal, declarações, liquidação, cobrança e fiscalização segundo cada imposto ou procedimento | NUIT, declaração, liquidação, comprovativo, decisão, benefício ou acto aduaneiro conforme o diploma aplicável | Portal oficial da Autoridade Tributária — impostos, legislação e procedimentos; serviço oficial de NUIT. A fonte legal deve ser ligada por imposto, benefício ou procedimento; o portal institucional não substitui o diploma específico."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p184"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p188"", ""section"": ""1.8"", ""first_paragraph"": 188, ""last_paragraph"": 191, ""text"": ""Banco de Moçambique — instituições financeiras | Autorização para constituição de instituições de crédito e sociedades financeiras | Autorização concedida caso a caso pelo Governador do Banco de Moçambique | Lei n.º 20/2020, de 31 de Dezembro, artigo 16, e informação oficial de licenciamento; Regulamento aprovado pelo Decreto n.º 50/2024, de 11 de Julho. Aplicar apenas às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p188"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p192"", ""section"": ""1.8"", ""first_paragraph"": 192, ""last_paragraph"": 195, ""text"": ""Banco de Moçambique — operações cambiais | Autorização, registo e controlo de operações cambiais | Autorização ou registo cambial conforme a operação, o sujeito e a redacção vigente | Informação oficial de licenciamento e controlo cambial; Lei n.º 28/2022, de 29 de Dezembro — Lei Cambial. Os avisos e procedimentos aplicáveis devem ser ligados por operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p192"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p196"", ""section"": ""1.8"", ""first_paragraph"": 196, ""last_paragraph"": 199, ""text"": ""BAU, I.P. | Licenciar e monitorar actividades económicas nos termos dos regulamentos aplicáveis; simplificar, harmonizar e operacionalizar serviços integrados | Licença, alvará, certidão de mera comunicação prévia, registo ou encaminhamento, conforme o regime da actividade | Decreto n.º 29/2023, de 24 de Maio — criação do BAU, I.P.; Resolução n.º 3/2024, de 9 de Abril — Estatuto Orgânico; legislação oficial do BAU. Cada checklist deve indicar o regulamento de licenciamento aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p196"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p200"", ""section"": ""1.8"", ""first_paragraph"": 200, ""last_paragraph"": 203, ""text"": ""INTIC, I.P. — competências reguladas | Registo e licenciamento de provedores intermediários de serviços electrónicos e operadores de plataformas digitais; vistoria e fiscalização | Certificado de registo; licença por classe ou unificada; gestão do certificado ou da licença | Decreto n.º 59/2023, com redacção vigente após o Decreto n.º 44/2025; aplicar apenas às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p200"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p204"", ""section"": ""1.8"", ""first_paragraph"": 204, ""last_paragraph"": 207, ""text"": ""INTIC, I.P. — atribuições adicionais | Pareceres, homologações, certificações ou autorizações fora do regime identificado | Nenhum resultado confirmado sem fonte própria | Sem fonte oficial específica ligada; não configurar competência ou acto até identificação do diploma aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p204"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p208"", ""section"": ""1.8"", ""first_paragraph"": 208, ""last_paragraph"": 211, ""text"": ""Registo de Entidades Legais | Registo e publicidade dos actos relativos a entidades legais | Inscrição, certidão, averbamento, publicação ou outro acto registal previsto | Decreto-Lei n.º 1/2024, de 8 de Março — Regulamento do Registo de Entidades Legais. A conservatória e a competência territorial devem coincidir com o processo aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p208"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p212"", ""section"": ""1.8"", ""first_paragraph"": 212, ""last_paragraph"": 215, ""text"": ""Bolsa de Valores de Moçambique — admissão à cotação | Instrução, tramitação e decisão dos pedidos de admissão à cotação, nos termos do regulamento da bolsa | Admissão à cotação, através de pedido patrocinado por operador de bolsa | Regulamento n.º 1/GPCABVM/2010, artigos 1 a 3, emitido ao abrigo do Código do Mercado de Valores Mobiliários, aprovado pelo Decreto-Lei n.º 4/2009."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p212"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p216"", ""section"": ""1.8"", ""first_paragraph"": 216, ""last_paragraph"": 219, ""text"": ""Banco de Moçambique — autoridade do mercado de valores mobiliários | Regulação e supervisão do mercado de valores mobiliários no âmbito das competências legais | Avisos, autorizações, supervisão e demais actos regulatórios aplicáveis | Aviso n.º 3/GBM/2026 e fonte oficial do Banco de Moçambique, emitido ao abrigo do artigo 4 do Código do Mercado de Valores Mobiliários. Distinguir da decisão de admissão praticada pela Bolsa e da intermediação exercida por operadores autorizados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p216"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p220"", ""section"": ""1.8"", ""first_paragraph"": 220, ""last_paragraph"": 223, ""text"": ""Outras autoridades sectoriais | Licenciamento, parecer, autorização, vistoria, comunicação ou supervisão conforme o sector | Título ou decisão sectorial | Fonte variável por sector; relacionar cada acto com diploma oficial, artigo, entidade, vigência, documentos e canal antes da configuração."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p220"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p226"", ""section"": ""1.8.1"", ""first_paragraph"": 226, ""last_paragraph"": 226, ""text"": ""Fonte legal vigente: Decreto n.º 59/2023, de 27 de Outubro — publicação oficial da Imprensa Nacional de Moçambique, que aprova o Regulamento de Registo e Licenciamento de Provedores Intermediários de Serviços Electrónicos e de Operadores de Plataformas Digitais, conjugado com as alterações introduzidas pelo Decreto n.º 44/2025, de 28 de Novembro — Boletim da República, I Série, n.º 229."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p226"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p227"", ""section"": ""1.8.1"", ""first_paragraph"": 227, ""last_paragraph"": 227, ""text"": ""Artigos 9 a 16 do Decreto n.º 59/2023: registo, certificado de registo, alteração, transmissão, renovação e cancelamento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p227"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p228"", ""section"": ""1.8.1"", ""first_paragraph"": 228, ""last_paragraph"": 228, ""text"": ""Artigo 17 do Decreto n.º 59/2023: competência da Autoridade Reguladora de TIC para conceder licença."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p228"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p229"", ""section"": ""1.8.1"", ""first_paragraph"": 229, ""last_paragraph"": 229, ""text"": ""Artigos 18 a 30 do Decreto n.º 59/2023: licenciamento, tipos de licença, pedido, requisitos, validade, alteração, transmissão, renovação e cancelamento, com leitura da redacção vigente após o Decreto n.º 44/2025."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p229"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p230"", ""section"": ""1.8.1"", ""first_paragraph"": 230, ""last_paragraph"": 230, ""text"": ""Artigo 31 do Decreto n.º 59/2023: organização e direcção da vistoria."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p230"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p231"", ""section"": ""1.8.1"", ""first_paragraph"": 231, ""last_paragraph"": 231, ""text"": ""Artigo 49 do Decreto n.º 59/2023: fiscalização das actividades abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p231"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p232"", ""section"": ""1.8.1"", ""first_paragraph"": 232, ""last_paragraph"": 232, ""text"": ""Glossário do Regulamento: a expressão “Autoridade Reguladora de TIC” refere-se ao Instituto Nacional de Tecnologias de Informação e Comunicação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p232"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p233"", ""section"": ""1.8.1"", ""first_paragraph"": 233, ""last_paragraph"": 233, ""text"": ""Decreto n.º 44/2025, artigos 1 e 2: altera o âmbito, o artigo 18, as taxas e o regime transitório e revoga disposições específicas do Decreto n.º 59/2023; os requisitos do portal devem usar a redacção vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p233"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p234"", ""section"": ""1.8.1"", ""first_paragraph"": 234, ""last_paragraph"": 234, ""text"": ""A prova legal confirma as competências do INTIC apenas no âmbito dos provedores intermediários de serviços electrónicos e operadores de plataformas digitais abrangidos pelo regulamento. Outras atribuições permanecem sem prova documental específica até à identificação de fonte própria."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p234"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p237"", ""section"": ""1.8.2"", ""first_paragraph"": 237, ""last_paragraph"": 241, ""text"": ""Entidade ou regime | Diploma e artigo confirmados | Competência ou acto comprovado | Fonte oficial verificável | Vigência e âmbito"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p237"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p242"", ""section"": ""1.8.2"", ""first_paragraph"": 242, ""last_paragraph"": 246, ""text"": ""Código Comercial | Decreto-Lei n.º 1/2022, de 25 de Maio; artigos 1 a 19 e 20 a 33; Título II, Capítulo II, Secções III a V | Enquadramento geral da actividade empresarial, empresário, empresa, capacidade, firma, obrigações especiais, escrituração, registo comercial e prestação de contas | Imprensa Nacional de Moçambique — Boletim da República n.º 99, 3.º Suplemento | Vigente desde 22 de Setembro de 2022; regime geral, não licença sectorial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p242"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p247"", ""section"": ""1.8.2"", ""first_paragraph"": 247, ""last_paragraph"": 251, ""text"": ""APIEX, I.P. | Resolução n.º 43/2019; Lei n.º 8/2023, artigos 21 a 24; Decreto n.º 8/2024, artigos 2 e 3 do diploma aprovador | Base institucional; coordenação, recepção e tramitação de procedimentos de investimento; monitoria, acompanhamento e assistência aos projectos abrangidos | Resolução n.º 43/2019 — Imprensa Nacional; Lei n.º 8/2023 — Imprensa Nacional; Decreto n.º 8/2024 — Imprensa Nacional | Confirmado apenas no âmbito institucional e procedimental indicado; aplicar a redacção vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p247"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p252"", ""section"": ""1.8.2"", ""first_paragraph"": 252, ""last_paragraph"": 256, ""text"": ""Banco de Moçambique — instituições de crédito e sociedades financeiras | Lei n.º 20/2020, artigo 16; Decreto n.º 50/2024, artigos 1 a 4 e regime específico aplicável | Autorização, caso a caso, para constituição das instituições abrangidas; procedimentos gerais de instrução dos pedidos | Lei n.º 20/2020 — fonte oficial do Banco de Moçambique; Decreto n.º 50/2024 — fonte oficial do Banco de Moçambique; página oficial de licenciamento | Lei vigente desde a sua entrada em vigor; Regulamento publicado em 11 de Julho de 2024. Confirma constituição e procedimento geral, não todos os actos posteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p252"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p257"", ""section"": ""1.8.2"", ""first_paragraph"": 257, ""last_paragraph"": 261, ""text"": ""Banco de Moçambique — matéria cambial | Lei n.º 28/2022, artigos 8, 9, 11 e 27 a 30; Decreto n.º 56/2023, artigos 1 a 4 | Autoridade cambial, competência regulamentar, autorização, registo e controlo das operações abrangidas | Lei n.º 28/2022 — fonte oficial do Banco de Moçambique; Decreto n.º 56/2023 — fonte oficial do Banco de Moçambique | Aplicar a redacção vigente e o aviso ou procedimento específico de cada operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p257"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p262"", ""section"": ""1.8.2"", ""first_paragraph"": 262, ""last_paragraph"": 266, ""text"": ""BAU, I.P. | Decreto n.º 29/2023; Resolução n.º 3/2024; regulamentos sectoriais publicados no portal oficial | Criação, organização institucional, simplificação e disponibilização integrada de serviços; licenciamento ou encaminhamento apenas nos termos do regulamento da actividade | Decreto n.º 29/2023 — Imprensa Nacional; Resolução n.º 3/2024 — Imprensa Nacional; legislação oficial do BAU | Base institucional confirmada. O acto decisório depende do regulamento sectorial aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p262"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p267"", ""section"": ""1.8.2"", ""first_paragraph"": 267, ""last_paragraph"": 271, ""text"": ""INTIC, I.P. — Autoridade Reguladora de TIC | Decreto n.º 59/2023, artigos 9 a 16, 17, 18 a 31 e 49; Decreto n.º 44/2025, artigos 1 e 2 | Registo, licenciamento, gestão de certificados e licenças, vistoria e fiscalização de provedores intermediários de serviços electrónicos e operadores de plataformas digitais | Decreto n.º 59/2023 — Imprensa Nacional; Decreto n.º 44/2025 — Boletim da República | Usar a redacção vigente após a alteração de 2025; limitado às categorias abrangidas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p267"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p272"", ""section"": ""1.8.2"", ""first_paragraph"": 272, ""last_paragraph"": 276, ""text"": ""Registo de Entidades Legais | Decreto-Lei n.º 1/2024, artigo 1 do diploma aprovador; Regulamento, artigos 1, 2 e 11 a 18 | Registo e publicidade de actos relativos a entidades legais; organização dos serviços; identificação e declaração do beneficiário efectivo | Decreto-Lei n.º 1/2024 — Imprensa Nacional; texto do Regulamento — Tribunal Supremo | Vigente desde a data definida no diploma; actos individuais dependem do artigo próprio e da competência territorial."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p272"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p277"", ""section"": ""1.8.2"", ""first_paragraph"": 277, ""last_paragraph"": 281, ""text"": ""Bolsa de Valores de Moçambique — admissão à cotação | Código do Mercado de Valores Mobiliários, artigo 67, n.º 2; Regulamento n.º 1/GPCABVM/2010, artigos 1 a 3 | Instrução, tramitação e decisão dos pedidos de admissão; patrocínio por operador de bolsa; apresentação do requerimento | Regulamento n.º 1/GPCABVM/2010 — Bolsa de Valores de Moçambique; página oficial do processo de listagem | Confirmado para os artigos 1 a 3 e para o fundamento do artigo 67, n.º 2; demais requisitos dependem da versão regulamentar vigente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p277"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p282"", ""section"": ""1.8.2"", ""first_paragraph"": 282, ""last_paragraph"": 286, ""text"": ""Banco de Moçambique — mercado de valores mobiliários | Decreto-Lei n.º 4/2009, Código do Mercado de Valores Mobiliários, artigo 4 | Autoridade reguladora e supervisora do mercado, no âmbito das competências previstas no artigo 4 | Código do Mercado de Valores Mobiliários — fonte oficial do Banco de Moçambique | Competência-base confirmada; cada autorização, oferta, intermediário ou acto de supervisão exige norma específica."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p282"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p289"", ""section"": ""1.8.3"", ""first_paragraph"": 289, ""last_paragraph"": 292, ""text"": ""Entidade | Competência, acto ou parâmetro pendente | Prova necessária | Estado"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p289"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p293"", ""section"": ""1.8.3"", ""first_paragraph"": 293, ""last_paragraph"": 296, ""text"": ""APIEX, I.P. | Limiar e decisor por valor do projecto; designação exacta de mero registo, autorização, aprovação, certificado, alteração, cessão e revogação | Artigo regulamentar vigente, formulário, acto emitido e fluxo aprovado por tipo e valor de projecto | Parcialmente confirmado; parcela pendente separada"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p293"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p297"", ""section"": ""1.8.3"", ""first_paragraph"": 297, ""last_paragraph"": 300, ""text"": ""Autoridade Tributária de Moçambique | Base legal individual de NUIT, IRPC, IVA, ISPC, benefícios, isenções, taxas, declarações, cobrança, fiscalização e actos aduaneiros usados pelo portal | Diploma oficial, artigo, taxa ou fórmula, vigência, entidade decisora, formulário e canal para cada regra | Sem prova específica por regra; os portais institucionais confirmam o canal, não o fundamento jurídico individual"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p297"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p301"", ""section"": ""1.8.3"", ""first_paragraph"": 301, ""last_paragraph"": 304, ""text"": ""Banco de Moçambique — instituições financeiras | Documentos, prazos, alteração, fusão, transmissão, sucursais, revogação e requisitos próprios de cada categoria | Artigo da Lei n.º 20/2020, do Decreto n.º 50/2024 ou aviso específico | Parcialmente confirmado; constituição confirmada"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p301"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p305"", ""section"": ""1.8.3"", ""first_paragraph"": 305, ""last_paragraph"": 308, ""text"": ""Banco de Moçambique — operações cambiais | Procedimento exacto para entrada de capital, empréstimo externo, transferência de lucros e dividendos, desinvestimento e contas no exterior | Artigo do regulamento ou aviso específico, formulário, prazo, documentos e canal | Parcialmente confirmado por operação"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p305"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p309"", ""section"": ""1.8.3"", ""first_paragraph"": 309, ""last_paragraph"": 312, ""text"": ""BAU, I.P. | Competência decisória e acto exacto por actividade: licença, alvará, certidão, mera comunicação, registo ou encaminhamento | Artigo do regulamento comercial, industrial, simplificado ou de mera comunicação aplicável à actividade | Base institucional confirmada; acto sectorial pendente por processo"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p309"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p313"", ""section"": ""1.8.3"", ""first_paragraph"": 313, ""last_paragraph"": 316, ""text"": ""INTIC, I.P. | Pareceres, homologações, certificações ou autorizações fora dos Decretos n.º 59/2023 e n.º 44/2025 | Diploma e artigo próprios | Sem prova específica fora do regime confirmado"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p313"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p317"", ""section"": ""1.8.3"", ""first_paragraph"": 317, ""last_paragraph"": 320, ""text"": ""Registo de Entidades Legais | Reserva de denominação, constituição, alteração, certidão, averbamento, publicação, cancelamento e emolumentos por acto | Artigo exacto do Decreto-Lei n.º 1/2024, tabela aplicável e conservatória territorialmente competente | Parcialmente confirmado; base e beneficiário efectivo confirmados"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p317"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p321"", ""section"": ""1.8.3"", ""first_paragraph"": 321, ""last_paragraph"": 324, ""text"": ""Bolsa de Valores de Moçambique | Requisitos por segmento, montantes mínimos, prospecto, documentos, prazos, taxas e decisão final além dos artigos 1 a 3 | Artigo da versão regulamentar vigente e acto complementar aplicável | Parcialmente confirmado; artigos 1 a 3 confirmados"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p321"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p325"", ""section"": ""1.8.3"", ""first_paragraph"": 325, ""last_paragraph"": 328, ""text"": ""Banco de Moçambique — mercado de valores mobiliários | Autorizações, ofertas, intermediários e actos de supervisão específicos | Artigo do Código do Mercado de Valores Mobiliários e aviso ou regulamento aplicável | Competência-base confirmada; actos específicos pendentes"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p325"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p329"", ""section"": ""1.8.3"", ""first_paragraph"": 329, ""last_paragraph"": 332, ""text"": ""Outras autoridades sectoriais | Todas as competências ainda não individualizadas | Diploma, artigo, fonte oficial, vigência, entidade decisora, documentos, prazo, canal e resultado | Sem prova específica"", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p329"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p338"", ""section"": ""1.8.4"", ""first_paragraph"": 338, ""last_paragraph"": 341, ""text"": ""Decreto-Lei n.º 1/2022 — Código Comercial | Referência oficial da Imprensa Nacional preservada. Estado: acesso técnico à referência pendente, porque a pesquisa directa redireccionou para o portal geral. | Não foi localizada revogação posterior na pesquisa documental registada. | Usar a versão republicada no 3.º Suplemento ao Boletim da República, I Série, n.º 99, e a data de entrada em vigor já aceite. A pendência técnica do link não reabre a aceitação da fonte."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p338"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p342"", ""section"": ""1.8.4"", ""first_paragraph"": 342, ""last_paragraph"": 345, ""text"": ""Resolução n.º 43/2019 — Estatuto Orgânico da APIEX, I.P. | Acesso oficial confirmado na Imprensa Nacional. | Foi localizada rectificação de 13 de Abril de 2020; não foi localizada revogação posterior. | Aplicar a Resolução com a rectificação incorporada."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p342"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p346"", ""section"": ""1.8.4"", ""first_paragraph"": 346, ""last_paragraph"": 349, ""text"": ""Lei n.º 8/2023 — Lei de Investimento Privado | Acesso oficial confirmado na Imprensa Nacional. | Não foi localizada revogação posterior na pesquisa documental registada. | Aplicar conjuntamente com o Decreto n.º 8/2024 e com alterações posteriores que venham a ser identificadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p346"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p350"", ""section"": ""1.8.4"", ""first_paragraph"": 350, ""last_paragraph"": 353, ""text"": ""Decreto n.º 8/2024 — Regulamento da Lei de Investimento | Acesso oficial confirmado na Imprensa Nacional. | O diploma revoga os Decretos n.º 43/2009 e n.º 20/2021; não foi localizada revogação posterior do Decreto n.º 8/2024. | Usar como referência regulamentar dos fluxos abrangidos, confirmando o artigo específico de cada procedimento."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p350"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p354"", ""section"": ""1.8.4"", ""first_paragraph"": 354, ""last_paragraph"": 357, ""text"": ""Lei n.º 20/2020 — Instituições de Crédito e Sociedades Financeiras | Acesso oficial confirmado no Banco de Moçambique. | Não foi localizada revogação posterior na pesquisa documental registada. | Aplicar o artigo 16 e as demais disposições relevantes em conjunto com o Decreto n.º 50/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p354"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p358"", ""section"": ""1.8.4"", ""first_paragraph"": 358, ""last_paragraph"": 361, ""text"": ""Decreto n.º 50/2024 — Regulamento da Lei n.º 20/2020 | Acesso oficial confirmado no Banco de Moçambique. | Revoga os Decretos n.º 56/2004, 57/2004, 31/2006, 30/2014 e 99/2019 e normas contrárias; não foi localizada revogação posterior. | Usar este regulamento nos procedimentos abrangidos e não os diplomas revogados."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p358"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p362"", ""section"": ""1.8.4"", ""first_paragraph"": 362, ""last_paragraph"": 365, ""text"": ""Página oficial de licenciamento de instituições | Acesso institucional confirmado no Banco de Moçambique. | Conteúdo institucional activo; a página, por si só, não demonstra vigência normativa. | Usar como canal e apoio de navegação; fundamentar cada regra na Lei n.º 20/2020 e no Decreto n.º 50/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p362"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p366"", ""section"": ""1.8.4"", ""first_paragraph"": 366, ""last_paragraph"": 369, ""text"": ""Lei n.º 28/2022 — Lei Cambial | Acesso oficial confirmado no Banco de Moçambique. | Revoga a Lei n.º 11/2009; não foi localizada revogação posterior. | Aplicar em conjunto com o Decreto n.º 56/2023 e com o aviso específico de cada operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p366"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p370"", ""section"": ""1.8.4"", ""first_paragraph"": 370, ""last_paragraph"": 373, ""text"": ""Decreto n.º 56/2023 — Regulamento da Lei Cambial | Acesso oficial confirmado no Banco de Moçambique. | Revoga o Decreto n.º 49/2017; não foi localizada revogação posterior. | Aplicar a redacção do regulamento juntamente com os avisos vigentes por operação."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p370"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p374"", ""section"": ""1.8.4"", ""first_paragraph"": 374, ""last_paragraph"": 377, ""text"": ""Decreto n.º 29/2023 — criação do BAU, I.P. | Acesso oficial confirmado na Imprensa Nacional. | Revoga parcialmente o Decreto n.º 14/2007 quanto ao estatuto anterior dos BAU; não foi localizada revogação posterior. | Usar como base de criação; as competências e actos dependem do Estatuto e dos regulamentos sectoriais."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p374"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p378"", ""section"": ""1.8.4"", ""first_paragraph"": 378, ""last_paragraph"": 381, ""text"": ""Resolução n.º 3/2024 — Estatuto Orgânico do BAU, I.P. | Referência oficial identificada na Imprensa Nacional. Estado: acesso técnico à referência pendente para conferência integral dos artigos. | Não foi localizada revogação posterior na pesquisa documental registada. | Preservar a aceitação do documento oficial; não automatizar competências sem conferir o artigo aplicável no texto integral."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p378"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p382"", ""section"": ""1.8.4"", ""first_paragraph"": 382, ""last_paragraph"": 385, ""text"": ""Portal de legislação do BAU | Referência institucional preservada. Estado: acesso técnico à referência pendente na pesquisa autónoma. | O portal é conteúdo variável e não constitui, por si só, pesquisa conclusiva de revogações. | Usar como índice documental; fundamentar cada regra no diploma e artigo específicos."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p382"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p386"", ""section"": ""1.8.4"", ""first_paragraph"": 386, ""last_paragraph"": 389, ""text"": ""Decreto n.º 59/2023 — licenciamento de plataformas digitais | Acesso oficial confirmado na Imprensa Nacional. | Foi localizada alteração pelo Decreto n.º 44/2025. | Aplicar apenas a redacção resultante das alterações e revogações introduzidas em 2025."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p386"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p390"", ""section"": ""1.8.4"", ""first_paragraph"": 390, ""last_paragraph"": 393, ""text"": ""Decreto n.º 44/2025 — alteração do Decreto n.º 59/2023 | Referência oficial preservada no domínio do INTIC. Estado: acesso técnico à referência pendente no índice de pesquisa. | O documento oficial de 2025 altera e revoga disposições do Decreto n.º 59/2023; não foi localizada alteração posterior. | Preservar a aceitação do Boletim da República n.º 229 e aplicar as alterações de 2025. A pendência técnica do URL não reabre a validação documental."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p390"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p394"", ""section"": ""1.8.4"", ""first_paragraph"": 394, ""last_paragraph"": 397, ""text"": ""Decreto-Lei n.º 1/2024 — Registo de Entidades Legais | Acesso oficial confirmado na Imprensa Nacional; cópia institucional do Tribunal Supremo. | Revoga o Decreto n.º 1/2006, excepto o artigo 1 que cria o Registo de Entidades Legais; não foi localizada revogação posterior. | Usar a Imprensa Nacional como fonte primária e a cópia do Tribunal Supremo como acesso complementar."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p394"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p398"", ""section"": ""1.8.4"", ""first_paragraph"": 398, ""last_paragraph"": 401, ""text"": ""Regulamento n.º 1/GPCABVM/2010 — admissão à cotação | Acesso oficial confirmado no domínio da Bolsa de Valores de Moçambique. | Não foi localizada revogação integral; permanecem por confirmar alterações ou regulamentos posteriores por segmento e matéria. | Aplicar os artigos confirmados e conferir a versão regulamentar específica antes de automatizar requisitos posteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p398"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p402"", ""section"": ""1.8.4"", ""first_paragraph"": 402, ""last_paragraph"": 405, ""text"": ""Decreto-Lei n.º 4/2009 — Código do Mercado de Valores Mobiliários | Acesso oficial confirmado no Banco de Moçambique. | Não foi localizada revogação integral; alterações posteriores devem ser pesquisadas por artigo. | Usar o artigo aplicável com a redacção confirmada para a regra concreta, sem inferir vigência integral apenas pelo acesso ao ficheiro."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p402"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p407"", ""section"": ""1.8.4"", ""first_paragraph"": 407, ""last_paragraph"": 407, ""text"": ""Critério de validação: os resultados devem ser registados separadamente em três dimensões: (1) acesso à fonte, que confirma apenas a disponibilidade técnica da referência; (2) pesquisa de alterações ou revogações, que regista o que foi ou não localizado no período de verificação; e (3) redacção aplicável à regra, que identifica o texto normativo que deve fundamentar o requisito. Um link acessível não demonstra, por si só, vigência. Quando uma ligação não for recuperada tecnicamente, o estado deve ser “acesso técnico à referência pendente”, preservando a aceitação do documento oficial e sem reabrir validações já concluídas. Esta classificação não substitui consolidação legislativa oficial nem conferência jurídica artigo a artigo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p407"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p410"", ""section"": ""1.8.4"", ""first_paragraph"": 410, ""last_paragraph"": 410, ""text"": ""O procedimento é uniforme para todas as entidades: a matriz de competências confirmadas contém apenas referências sustentadas por diploma e artigo identificados; a matriz de pendências contém, separadamente, os actos, parâmetros e procedimentos que ainda exigem prova específica. Nenhuma referência parcial deve ser promovida a regra automática antes da identificação da fonte oficial, vigência, entidade decisora e resultado aplicável."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01"", ""AUD-SIM-02""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p410"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p481"", ""section"": ""3.2.2"", ""first_paragraph"": 481, ""last_paragraph"": 481, ""text"": ""Os formulários devem suportar campos de texto, números, datas, listas, selecção múltipla, localização, anexos e declarações de consentimento. Cada formulário deve possuir versão, período de vigência, regras condicionais, campos obrigatórios, limites de ficheiro, validação de formato, mensagens de erro, gravação automática, recuperação de rascunho e associação ao requisito correspondente. Alterações publicadas não devem modificar retroactivamente submissões já efectuadas."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-25""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p481"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p565"", ""section"": ""4.4"", ""first_paragraph"": 565, ""last_paragraph"": 565, ""text"": ""O modelo deve incluir organizações, utilizadores, papéis, permissões, entidades públicas, localizações administrativas, sectores económicos, actividades, formulários, campos, versões, checklists, itens, submissões, evidências, tarefas, notificações, consentimentos, fontes, importações, conflitos de correspondência e eventos de auditoria. As classificações e regras devem possuir vigência temporal para permitir reproduzir uma decisão ou simulação com os dados aplicáveis à data."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OPS-03"", ""AUD-PROFILE-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p565"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p648"", ""section"": ""6"", ""first_paragraph"": 648, ""last_paragraph"": 653, ""text"": ""INV-007 | Configurar checklists e formulários sem alteração de código | Sim | Parcial | QA | Demonstrar editor, publicação de versões e preservação de submissões anteriores."", ""requirements"": [""AUD-CHECKLIST-01"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p648"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p681"", ""section"": ""6.1"", ""first_paragraph"": 681, ""last_paragraph"": 687, ""text"": ""§1.2; §1.6–1.8 | Checklists e formulários por entidade competente | INV-007 e INV-009 | Sim | Sem demonstração suficiente por entidade | — | Demonstrar checklist, formulário, base legal, responsável, versão, canal e resultado por entidade, sem reabrir fontes oficiais já aceites."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-PROFILE-11"", ""AUD-PROFILE-19"", ""AUD-PROFILE-21"", ""MASTER-9dee08d0-0049""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p681"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p756"", ""section"": ""6.2"", ""first_paragraph"": 756, ""last_paragraph"": 758, ""text"": ""Entidade | Designação canónica e aliases documentados | Preservar designações e fontes já aceites; divergências novas são relacionadas com a correspondência documental em falta."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p756"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p759"", ""section"": ""6.2"", ""first_paragraph"": 759, ""last_paragraph"": 761, ""text"": ""Autorização ou acto | Registo, aprovação, licença, autorização, parecer, comunicação, vistoria, certificado, benefício ou decisão | Não usar os termos como equivalentes; cada acto mantém entidade competente, base, vigência e resultado."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p759"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p762"", ""section"": ""6.2"", ""first_paragraph"": 762, ""last_paragraph"": 764, ""text"": ""Categoria, modalidade e objectivo | Categorias, códigos e versões dos contratos existentes; agrupamentos funcionais do update | O agrupamento funcional não substitui a taxonomia canónica. Mapear sem renumerar, fundir ou converter automaticamente registos, incluindo imobiliário, fundiário e franquia."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p762"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p765"", ""section"": ""6.2"", ""first_paragraph"": 765, ""last_paragraph"": 767, ""text"": ""Acção e autorização | Preparação privada, submissão, encaminhamento restrito e publicação pública | Aplicar a autorização à acção correspondente. A falta de autorização de divulgação impede a publicação pública, não a preparação privada ou o pedido de apoio permitido."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p765"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p768"", ""section"": ""6.2"", ""first_paragraph"": 768, ""last_paragraph"": 770, ""text"": ""Ambiente | QA, Ativo, Ativo e QA ou — | QA não equivale a Ativo; “Ativo e QA” distingue capacidade instalada de evolução ainda em homologação; — indica ausência de demonstração suficiente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p768"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p771"", ""section"": ""6.2"", ""first_paragraph"": 771, ""last_paragraph"": 773, ""text"": ""Evidência | Documento, ecrã, teste, registo, resposta institucional ou ligação operacional | “Sem demonstração suficiente” não significa ausência de código; significa evidência insuficiente para conclusão."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-OP-02"", ""AUD-PROFILE-08""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p771"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p787"", ""section"": ""6.3.1"", ""first_paragraph"": 787, ""last_paragraph"": 787, ""text"": ""As designações institucionais já confirmadas devem ser preservadas. Permanecem sujeitos a prova específica apenas os actos, artigos, limites, procedimentos ou competências assinalados nas secções 1.8.2 e 1.8.3."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p787"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p788"", ""section"": ""6.3.1"", ""first_paragraph"": 788, ""last_paragraph"": 788, ""text"": ""APIEX, I.P.: a designação canónica “Agência para a Promoção de Investimento e Exportações, I.P.” está confirmada pela Resolução n.º 43/2019. Permanecem sujeitos a confirmação por fluxo o acto exacto, o artigo aplicável e o resultado emitido nos termos da Lei n.º 8/2023 e do Decreto n.º 8/2024."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p788"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p789"", ""section"": ""6.3.1"", ""first_paragraph"": 789, ""last_paragraph"": 789, ""text"": ""BAU, I.P.: a designação “Balcões de Atendimento Único, Instituto Público — BAU, I.P.” e as competências institucionais estão confirmadas pelo Decreto n.º 29/2023 e pela Resolução n.º 3/2024. O acto exacto — licença, alvará, certidão, registo, comunicação ou encaminhamento — deve ser confirmado no regulamento da actividade correspondente."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p789"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p790"", ""section"": ""6.3.1"", ""first_paragraph"": 790, ""last_paragraph"": 790, ""text"": ""INTIC, I.P.: a designação e a competência como Autoridade Reguladora de TIC para o registo e licenciamento abrangidos pelo Decreto n.º 59/2023 estão confirmadas. Permanecem sem prova documental específica apenas os serviços, pareceres, homologações, certificações ou autorizações fora desse âmbito."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p790"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p791"", ""section"": ""6.3.1"", ""first_paragraph"": 791, ""last_paragraph"": 791, ""text"": ""Registo de Entidades Legais: a base nacional e a designação do regime estão confirmadas pelo Decreto-Lei n.º 1/2024. A conservatória territorialmente competente e o artigo aplicável a cada acto — reserva, constituição, alteração, certidão, averbamento, publicação ou cancelamento — devem ser confirmados por processo."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p791"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}, {""id"": ""SEG-bf26caee-p792"", ""section"": ""6.3.1"", ""first_paragraph"": 792, ""last_paragraph"": 792, ""text"": ""Enquanto faltar identificar a correspondência documental, o checklist deve conservar a designação encontrada como variante, registar o documento de origem e impedir apenas a sua promoção automática a valor canónico. Esta regra não reabre fontes oficiais, nomenclaturas ou validações já aceites."", ""requirements"": [""AUD-CHECKLIST-01"", ""AUD-LIB-01""], ""source_sha256"": ""bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5"", ""locator"": ""word/document.xml#p792"", ""declared_document_state_is_not_functional_evidence"": true, ""exact_requested_exemplar_confirmed"": true}]",Consumidor específico não demonstrado.,Contrato específico não demonstrado.,Nenhuma entidade/regra criada para este módulo.,"A recuperação do original da especificação é prova do acervo, não deste percurso.",Pendente de implementação/prova própria.,"Novo ID apenas após pesquisa de correspondência: os requisitos relacionados são componentes a reutilizar, não equivalências. [Segmentação bf26caeee043 — identidade confirmada; nome local v1.docx] ",parcial,Não demonstrada para este requisito específico; nenhum pacote ativado por esta incorporação. COUNTRY02ON preservado.,"Diagnóstico específico anterior de ausência/cobertura conservado; inventário atual não demonstra entrega posterior deste incremento. Nenhuma nova implementação iniciada nesta auditoria.
-[RECONCILIACAO-43-20261019] 18: Falta editor administrativo sem código para preparar/publicarv2 preservando respostasv1. Registar serviços existentes não equivale a entregar esse editor.","Checklists existem em configuração; editor/versionamento administrativo sem código e adaptação de submissões antigas não demonstrados.
+[RECONCILIACAO-43-20261019] 18: Falta editor administrativo sem código para preparar/publicarv2 preservando respostasv1. Registar serviços existentes não equivale a entregar esse editor.","02/11/2026: editor local dos formulários do Balcão implementado com prévia, publicação versionada, histórico paginado e preservação dos pedidos anteriores. Restam conferência visual e disponibilização; a adaptação de outras checklists/contextos ainda não foi demonstrada. Não se declara parametrização transversal concluída.
+Histórico das lacunas anteriores: Checklists existem em configuração; editor/versionamento administrativo sem código e adaptação de submissões antigas não demonstrados.
-[UTILIZACAO-HOMOLOGACAO-20261019] 18: Implementação parcial — Checklists aplicadas existem no fluxo; editor/publicação v2 preservando respostas v1 continua em falta.","Configurações existentes, schema, biblioteca e auditoria","Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Publicar versão autorizada, novas submissões usam-na e anteriores preservam a versão aplicada.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"Nova funcionalidade/expansão; preparar execução, não implementar nesta auditoria",Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: incrementos futuros. Esforço de código adicional só após lacuna reproduzida.,"segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. | Homologação teste-investidor 19/10/2026: Checklists versionadas=Não demonstrado. 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: Checklists versionadas=Não demonstrado. 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] 18: Implementação parcial — Checklists aplicadas existem no fluxo; editor/publicação v2 preservando respostas v1 continua em falta.","Configurações existentes, schema, biblioteca e auditoria; desk_service_versions, desk_requests.service_version_id, VirtualDesk e autorização administrativa existentes","Documentos/entidades/fontes/parâmetros próprios antes de implementação; sem novos módulos nesta auditoria. Publicar versão autorizada, novas submissões usam-na e anteriores preservam a versão aplicada.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"Desenvolvimento local autorizado pelo pedido de continuidade; editor/histórico do Balcão implementados e validados em QA. Conferência visual, disponibilização e extensão aos restantes consumidores são trabalhos distintos. Histórico da classificação anterior: Nova funcionalidade/expansão; preparar execução, não implementar nesta auditoria",Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: incrementos futuros. Esforço de código adicional só após lacuna reproduzida.,"segmentacao-processos-reconciliacao-20261011.md; contratos/rotas inventariados atuais; não há prova de percurso completo deste incremento. | Homologação teste-investidor 19/10/2026: Checklists versionadas=Não demonstrado. 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: Checklists versionadas=Não demonstrado. 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
[RECONCILIACAO-43-20261019] Código e critérios confrontados com leitura READ ONLY fresca; PROVA-RECONCILIACAO-43-LEITURA.json, RECONCILIACAO-43-QA-FONTES.json, RECONCILIACAO-43-SCHEMA-QA.json. Não encerra critério funcional por inventário.
-[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"Checklists e catálogos configurados existentes; editor sem alterar código/publicação versionada por entidade não demonstrados. Separar obrigações comerciais, registo/publicidade e licença setorial.",Reutilizar componentes/contratos; definição funcional própria e nenhuma nova ativação.,"Reutilizar config/document-requirements.php, requisitos/formulários/documentos/tarefas e serviços do Balcão existentes. Não duplicar motor, tabelas ou as cinco fases/19 etapas.",Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,"24–40 h após política de alteração; reaproveitar motor, sem catálogo paralelo.",,,
+[PLANO-P1-P6-20261019] Plano Tempo: 27–46 h disponibilização; P7 e desenvolvimento separados. Inclusão 36–39 expressa para decisão; sem publicação automática. Revisão de proposta d87970e701f0. Roteiro no manual existente; não encerra critério por instalação. | Continuidade local 02/11/2026: histórico e formulários configuráveis do Balcão; regressões reproduzidas e corrigidas nas condições encadeadas e no preenchimento de campos/opções retirados. Provas e limites no manual existente, secções de 02/11/2026. Sem instalação ou alteração no activo. [DESK-ANALYSIS-SCOPE-20261102] Verificações usam a versão e as perguntas aplicáveis: sem financiamento inexistente ou bloqueio por valores de ramos ocultos; diferenças financeiras aplicáveis continuam recusadas. Recibo distingue respostas conservadas e preserva rótulos da versão, original técnico e permissões. Publicação valida que a fonte da localização não fica indisponível quando a localização se aplica, reutilizando a exigência existente. 25 testes conjuntos/467 asserções e dois específicos/11 asserções aprovados; PHPStan e Pint passaram. Recibo desk_analysis_scope_increment_20261102 em local-validation-20261029.json; manual de 02/11. Sem instalação ou conferência visual; requisito transversal parcial.",incrementos futuros,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,"Checklists e catálogos configurados existentes; editor sem alterar código/publicação versionada por entidade não demonstrados. Separar obrigações comerciais, registo/publicidade e licença setorial.",Reutilizar componentes/contratos; definição funcional própria e nenhuma nova ativação.,"Reutilizar config/document-requirements.php, requisitos/formulários/documentos/tarefas e serviços do Balcão existentes. Não duplicar motor, tabelas ou as cinco fases/19 etapas.",Leitura integral do exemplar local e inventário código/documental; importação/retrieval deste DOCX não comprova a funcionalidade descrita.,Contrato específico não demonstrado.,,,,"24–40 h após política de alteração; reaproveitar motor, sem catálogo paralelo.",,,
AUD-FINTECH-01,"Caracterizar e acompanhar investimento Fintech no mesmo dossier/percurso: modelos tecnológico/financeiro/indeterminado, atividades e documentação condicionais, preparação e revisão por âmbito.","Pedido Tempo anexado em 15/10/2026, SHA-256 d00e8ea77fc7c42acb9b011614513a2b2bec4933ac55275cf87437719bf8c8fa; orientação transversal setorial e AGENTS.md 12/10/2026.",Investimentos / Fintech,/sectores/{slug}; /investimentos; /investimentos/a-partir-do-setor/{sectorSlug}; /investimentos/{id}/fintech,"FintechInvestment no payload cifrado existente; InvestorPath/InvestorGuidanceRules, S01–S19; biblioteca, scan, ferramentas, apoio e tarefas reutilizados. Sem nova categoria ou workflow.","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.",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,Disponibilizado — especialização preparatória; enquadramento regulatório específico pendente,"Disposição, versão, período, licença, capital mínimo, taxa e prazo específicos por atividade ainda por determinar; não bloqueiam preparação independente.","Decisão Tempo para ativo; backup/restauro fresco, conta administrativa autenticada, scan e hashes compatíveis.","Cenários A tecnológico e B com pagamentos declarados: guardar incompleto, recuperar noutra sessão, países/localização/documentos, resultados isolados, apoio/tarefas, revisão seletiva, sem ato externo fictício; teclado/foco/erros/móvel no delta.",Atual — delta autorizado QA,,,,,"Navegador QA: A/B, países MZ/ZA, confirmação e erro com rótulo/foco/campos preservados; móvel 390px sem overflow.",67 serviços/controllers; 38 HTTP; 20 fecho delta; oito recuperação final.,"Payload cifrado existente, versão otimista, replay idempotente e histórico/eventos preservados.","Novos logins HTTP/visual A/B; mesmos documentos, resultados, apoio e tarefas; setor/artigo guardados.","Aplicabilidade preparatória por declaração; situação jurídica específica indeterminada sem taxa, licença ou score inventados.",Especialização preparatória ativa; enquadramento regulatório específico permanece pendente.,,,"Pedido expresso Tempo; só necessidade específica nova recebe novo ID. Limites por fonte/ação. | Disponibilização expressamente autorizada pela Tempo: «Autorizo a disponibilizar». Executada com backup/restauro fresco verificado; apenas conferência operacional, sem repetir aceitação QA. | Correspondência documental 15/10/2026: 14 linhas atividade/requisito/artigo/suporte/etapa/lacuna; cinco diplomas do acervo aceite; sem revalidar proveniência.
[RECONCILIACAO-43-20261019] 7: Faltam parâmetros/fontes aplicáveis por operação e período. Não bloqueiam preparação. Activação de cálculos não decorre de publicação.","Enquadramento regulatório completo mantém-se pendente: qualificar operações e entidades; avisos/capitais/limites por atividade/período; regras de valores mobiliários/BVM; atos reais e vistoria; regulação TIC/câmbio/BCFT complementar. Correspondência textual já disponível na tabela de 14 linhas, sem bloqueio da preparação. Corrigir minutas que misturam consultoria/ativos virtuais; guias com diplomas expressamente revogados não são checklist atual. Reconciliar autorização prévia de constituição (L20 art.16) com preparação S05/S08; não é falha funcional demonstrada. | 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.
diff --git a/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md b/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md
index b34e78ed..c2003dcb 100644
--- a/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md
+++ b/docs/investmoz/v2/auditoria-portal/visao-consolidada-modulos.md
@@ -43,6 +43,8 @@ As faixas são previsões para o **próximo resultado delimitado**, de confianç
### Evidência e limites por frente
+Actualizacao local de 02/11/2026 — AUD-CHECKLIST-01: primeiro editor administrativo de formularios do Balcao implementado sobre desk_service_versions, com nova versao sem reescrever pedidos/submissoes anteriores, comparacao de alteracoes, validacao e auditoria. 18 Feature/325 assercoes iniciais passaram; provas finais e limites no manual existente. Sem instalacao ou prova visual; restantes tipos/configuracao integral continuam parciais. A linha historica de 18/10 acima e preservada, sem repetir ou somar a estimativa como trabalho novo.
+
#### 1. Documentos públicos
**IDs:** AUD-LIB-01.
@@ -799,3 +801,8 @@ A/B e C37 não entram nestes lotes. O primeiro lote utilizável continua o workf
3.401 IDs únicos/linhas, 7.739 ocorrências de origem e 604 fontes inventariadas. Estados do requisito agregado: 3.062 sem evidência suficiente; 316 parciais; 1 com falha; 9 não implementados; 6 dependentes de decisão concreta; 7 demonstrados apenas em QA no âmbito definido. As sete linhas históricas fechadas, A/B, C37, coedição e demais critérios válidos permanecem conservados. A contagem agregada não é uma lista de 3.062 funcionalidades novas nem mede ausência de produto ativo.
O ZIP é uma cópia de revisão da única matriz/backlog, com relatório executivo, casos, plano, visão por módulo, correspondências cartográficas, manifesto e provas sanitizadas. Exclui bases, credenciais, códigos/segredos MFA, `.env`, originais privados e diagnósticos expostos. C131 permanece correção PHP QA. C132: uma configuração PHP aplicada no ativo e quatro credenciais MFA renovadas por resposta autorizada ao incidente; zero alterações de schema, flags, serviços ou bundle. O backup/restauro de 12/10 11:10:30 UTC é da entrega ativa anterior; C132 tem novo dump/restauro de 19:02:57 UTC (295 tabelas/31 sequências) e recuperação da configuração/cifra em armazenamento restrito. Não reutilizar segredos comprometidos na reversão.
+Continuidade local 02/11/2026 — Balcão: editor acompanhado de histórico paginado de versões, condições e proveniência, incluindo serviços retirados da configuração para consulta. Não expõe respostas nem permite republicar códigos retirados; pedidos anteriores preservados. AUD-CHECKLIST-01 continua parcial; provas técnicas no manual, conferência visual e instalação pendentes. Línguas nacionais ACT-16 continuam sem prioridades/tradução aprovadas (resposta do proprietário: «ainda nao»).
+
+Continuidade local 02/11/2026 — ACT-11: alertas no portal para novas disponibilizações do catálogo público, com preferências próprias, confirmação, frequência, cancelamento e correspondência pela pesquisa existente. Notificações de manifestações preservadas. Migração e comando de geração instaláveis, com agenda existente e sem canais externos. Concursos/incentivos de outros catálogos, disponibilização e verificação visual continuam pendentes. Provas/limites em `traceability-and-manual.md`, secção ACT-11 de 02/11/2026; nenhum fecho transversal.
+
+Continuidade local 02/11/2026 — ACT-11: além de oportunidades, concursos podem ser escolhidos explicitamente para alertas de versões actualmente publicadas. Consulta, regime, estados, versões e direitos reutilizam o catálogo existente; preferências antigas mantêm somente oportunidades. Dados anteriores e notificações de manifestações conservados; 30 testes distintos/607 asserções e seis frontend aprovados. A pendência de concursos do recorte anterior foi implementada em QA; incentivos, canais externos, instalação/agendador e conferência visual continuam pendentes. Detalhes no manual existente, sem fecho transversal.
diff --git a/resources/js/components/catalogue-investment-map.tsx b/resources/js/components/catalogue-investment-map.tsx
new file mode 100644
index 00000000..627655c1
--- /dev/null
+++ b/resources/js/components/catalogue-investment-map.tsx
@@ -0,0 +1,72 @@
+import InteractiveInvestmentMap, {
+ type InvestmentMapArea,
+ type InvestmentMapFeature,
+ type InvestmentMapKind,
+} from './interactive-investment-map';
+import { TerritoryGeometryDetails } from './territory-geometry-preview';
+import { useTerritoryGeometry } from './use-territory-geometry';
+const noAreas: InvestmentMapArea[] = [];
+
+export default function CatalogueInvestmentMap({
+ points,
+ areas = noAreas,
+ territoryId,
+ mapKind,
+}: {
+ points: InvestmentMapFeature[] | null;
+ areas?: InvestmentMapArea[];
+ territoryId?: string;
+ mapKind?: InvestmentMapKind;
+}) {
+ const { context, error } = useTerritoryGeometry(territoryId);
+ return (
+
+ ) : undefined
+ }
+ notice={
+ territoryId ? (
+ <>
+ {error && (
+
+ {error} Os restantes dados do mapa continuam
+ disponíveis.
+
+ Sem limite administrativo acessível para o
+ território seleccionado.
+ {context.areas.length > 0
+ ? ' Os limites de níveis superiores são apenas contexto e não representam a selecção.'
+ : ''}
+
+ )}
+ {context?.truncated && (
+
+ Cobertura administrativa incompleta: são
+ apresentados até 100 limites.
+
- Arraste para navegar; use +/− para ampliar. Pode seleccionar um
- {contextOnly
- ? 'limite cadastrado para consultar a sua edição.'
- : 'investimento na lista para o localizar.'}
+ Arraste para navegar; use +/− para ampliar.{' '}
+ {mapKind === 'declared_parcel'
+ ? 'Esta pré-visualização representa a declaração do Promotor, não o limite administrativo.'
+ : mapKind === 'administrative'
+ ? 'Seleccione um limite cadastrado para consultar a sua edição.'
+ : 'Seleccione um local na lista para o localizar.'}
- Registos recebidos para os filtros actuais, incluindo
- camadas ocultas.
+ Registos da pesquisa de investimentos para os filtros
+ actuais, incluindo camadas ocultas. A cobertura dos
+ limites administrativos adicionais é apresentada em
+ «Fontes e contexto do mapa».
diff --git a/resources/js/components/investment-map-panel.tsx b/resources/js/components/investment-map-panel.tsx
index c41d3ccb..612095d9 100644
--- a/resources/js/components/investment-map-panel.tsx
+++ b/resources/js/components/investment-map-panel.tsx
@@ -1,8 +1,8 @@
import SearchState from '@/components/search-state';
import { useEffect, useState } from 'react';
-import TerritoryGeometryPreview from './territory-geometry-preview';
+import TerritorialMap from './catalogue-investment-map';
import InvestmentMapCoverage from './investment-map-coverage';
-import InteractiveInvestmentMap, {
+import {
type InvestmentMapFeature,
type InvestmentMapArea,
} from './interactive-investment-map';
@@ -23,9 +23,9 @@ export default function InvestmentMapPanel({
const [retry, setRetry] = useState(0);
const [areas, setAreas] = useState([]);
const [truncated, setTruncated] = useState(false);
- const [showPoints, setShowPoints] = useState(true);
- const [showAreas, setShowAreas] = useState(true);
const [matched, setMatched] = useState(0);
+ const [responseKey, setResponseKey] = useState('');
+ const current = responseKey === key;
useEffect(() => {
const controller = new AbortController();
const params = new URLSearchParams(JSON.parse(key));
@@ -46,6 +46,7 @@ export default function InvestmentMapPanel({
.then((data) => {
if (controller.signal.aborted) return;
setPoints(data.features);
+ setResponseKey(key);
setAreas(data.areas ?? []);
setMissing(data.unlocated ?? []);
setTruncated(Boolean(data.truncated));
@@ -59,8 +60,10 @@ export default function InvestmentMapPanel({
);
})
.catch(() => {
- if (!controller.signal.aborted)
+ if (!controller.signal.aborted) {
+ setResponseKey(key);
setError('Não foi possível concluir a pesquisa.');
+ }
});
return () => controller.abort();
}, [key, retry]);
@@ -69,53 +72,14 @@ export default function InvestmentMapPanel({
setRetry((value) => value + 1)}
/>
-
- {!showPoints && !showAreas && (
-
- Camadas ocultas. Active uma camada para voltar a consultar
- os registos no mapa.
-
+ Uma selecção anterior deixou de estar disponível no
+ catálogo. O acompanhamento das selecções indisponíveis
+ fica suspenso; os restantes catálogos seleccionados
+ continuam a ser verificados. Pode escolher outra opção
+ ou cancelar os alertas a qualquer momento.
+
+ )}
+
+ Escolha os catálogos, critérios e frequência. As novas
+ disponibilizações compatíveis aparecem nesta área. Não são
+ enviados emails ou SMS. O acompanhamento de concursos considera
+ anúncios e actos publicados no catálogo do portal. Fundos e
+ apoios consideram novas versões do catálogo do portal; não há
+ recolha automática de fontes externas.
+
+
+ Ao activar, reactivar ou alterar os critérios ou catálogos, os
+ registos já disponíveis estabelecem o ponto de partida e não
+ geram alertas retroactivos. Uma oportunidade ou versão de acto
+ não gera alertas repetidos.
+
+
+
+ O cancelamento conserva as notificações anteriores e não altera
+ o acompanhamento das manifestações já apresentadas.
+
+
+ );
+}
diff --git a/resources/js/components/opportunity-contact-form.tsx b/resources/js/components/opportunity-contact-form.tsx
index f066ba47..676157f2 100644
--- a/resources/js/components/opportunity-contact-form.tsx
+++ b/resources/js/components/opportunity-contact-form.tsx
@@ -90,10 +90,9 @@ export default function OpportunityContactForm({
Cadastrar contacto do promotor
- Reutiliza o cadastro de contactos. Indique dados reais e
- autorizados do promotor desta oportunidade. O operador do portal
- não substitui o promotor real. A gravação não publica o
- contacto.
+ Indique os dados de contacto autorizados pelo promotor desta
+ oportunidade. O contacto fica guardado para reutilização e não é
+ publicado.