diff --git a/app/Services/InvestmentZones.php b/app/Services/InvestmentZones.php index 40fd4bfc..12749dff 100644 --- a/app/Services/InvestmentZones.php +++ b/app/Services/InvestmentZones.php @@ -63,10 +63,13 @@ class InvestmentZones $path = app(InvestmentGeography::class)->selection($filters); if ($path !== []) { $territoryIds = app(InvestmentGeography::class)->descendants($path[array_key_last($path)]->id); - $query->where(function ($matches) use ($territoryIds, $management): void { + $ancestorIds = array_column($path, 'id'); + $query->where(function ($matches) use ($territoryIds, $ancestorIds, $management): void { $matches->whereIn('primary_territory_id', $territoryIds) ->orWhereExists(fn ($link) => $link->selectRaw('1')->from('investment_zone_locations as zl') - ->whereColumn('zl.zone_id', 'investment_zones.id')->whereIn('zl.geo_location_id', $territoryIds) + ->whereColumn('zl.zone_id', 'investment_zones.id')->whereIn('zl.scope_type', ['site', 'administrative', 'legal_scope']) + ->where(fn ($area) => $area->whereIn('zl.geo_location_id', $territoryIds) + ->orWhere(fn ($coverage) => $coverage->where('zl.scope_type', 'legal_scope')->whereIn('zl.geo_location_id', $ancestorIds))) ->where('zl.validation_status', 'validated')->where(fn ($valid) => $valid->whereNull('zl.valid_from')->orWhereDate('zl.valid_from', '<=', today())) ->where(fn ($valid) => $valid->whereNull('zl.valid_until')->orWhereDate('zl.valid_until', '>=', today()))); if (! $management) { diff --git a/docs/investmoz/consolidated-review-matrix-2026-10-03.md b/docs/investmoz/consolidated-review-matrix-2026-10-03.md index 04b220eb..9c98ede9 100644 --- a/docs/investmoz/consolidated-review-matrix-2026-10-03.md +++ b/docs/investmoz/consolidated-review-matrix-2026-10-03.md @@ -1780,3 +1780,22 @@ A Tempo esclareceu que a combinação província/sector deve apresentar as oport Correcção de apresentação em QA: título dos resultados explicita sector e hierarquia escolhidos; removidos os cartões educativos e o botão sectorial sem localização da área de resultados. Os guias mantêm-se como títulos ligados em apoio opcional fechado por defeito. A remoção da localização é uma acção expressamente identificada como pesquisa noutras províncias. O estado vazio refere o cadastro consultado e a cobertura incompleta, sem fabricar oportunidades nem alargar automaticamente filtros. Dois testes SSR do novo apoio opcional passaram, bem como tipos e compilação. As provas territoriais nacionais 6/617 e os quatro testes do selector são reutilizados; não mudou a consulta PHP ou o controlo territorial neste delta. Mantêm-se histórico, publicações, permissões, fontes e base interna. Este candidato continua sem instalação, dependente de autenticação SSH; a sessão real permanece sem prova visual. Relatório existente: `catalogue-province-coverage-qa-20261028.json`, campo `catalogue_result_presentation`. Requisitos V2-07/V2-10 actualizados na mesma matriz; L8 permanece parcial. + + +28/10 - Before investor usability checks: accepted catalogue candidate54d1b2a5 remains in QA,not installed;active menus6e8de43a and earlier supply proofs preserved. Two Tempo attachments identify duplicate profile navigation,an exposed long canonical form and ZEE/ZFI/park searches that keep prior results until manual submit. Prepare presentation-only adaptive field groups and safe save-before-resource navigation;verify territorial search/count/paging and documented scope without republishing records or changing permissions. Reuse prior proofs;existing V2-07/V2-10 scope retained. + +## 28/10/2026 — usabilidade do investidor e consulta territorial, QA + +Pedidos da Tempo e exemplos recebidos: menu/ficha de oportunidade, zonas/parques, pedido de Promotor, Os meus investimentos, documentos/formulários e recusa autenticada em Turismo. Inventário anterior registado antes dos testes: menus 6e8de43a e base interna instalados; candidato territorial 54d1b2a5 ainda em QA; originais, dados, relações, histórico, aprovações e provas anteriores preservados. + +Delta QA: acções do investidor em primeiro plano, administração em detalhe consultável; campos do contrato existente agrupados por tarefa e modalidade, com navegação livre e todos os campos montados para conservar edições. Os grupos mostram as pendências da última gravação e os erros existentes; não criam seis ou oito formulários obrigatórios. Guardar usa os mesmos endpoints/ETags; abrir recursos pela preparação guarda primeiro e regressa à mesma oportunidade/grupo. Contactos e detalhes de disponibilidade ficam opcionais; códigos técnicos de categorias e campos conhecidos têm nomes em português. Só um contexto único de promotor é escolhido automaticamente. + +Zonas: selecção territorial aplica pesquisa sem esperar por outro clique; a lista anterior deixa de aparecer durante carregamento/erro. Totais, intervalo visível e páginas identificados, sem apresentar a primeira página como o conjunto completo. «Todo o território» remove expressamente a localização, preservando os restantes critérios visíveis. Abrangência jurídica documentada e validada inclui os níveis descendentes; influência não se torna implantação. Não são criadas localizações, direitos, publicações ou certificados. + +Pedido de Promotor: representação/modalidades com nomes claros; pesquisa de ficheiros e selecção expressa dos comprovativos, preservando os escolhidos ao pesquisar. Mantidos propriedade, análise antimalware e verificações existentes; legislação/imagem/teste não se torna comprovativo por estar disponível. Os meus investimentos destaca a próxima acção e permite abrir fases/etapas; fontes, códigos e acompanhamento interno ficam preservados em detalhes. + +Formulários: entradas directas para os campos já existentes da preparação do pedido de investimento e Terra/DUAT; pedido de apoio identificado separadamente. Originais oficiais e guias continuam consultáveis, sem os confundir com um formulário preenchível ou converter leis em campos/cálculos. Não se declara executada a totalidade dos formulários oficiais do acervo. + +Provas delimitadas: 8 testes frontend de contrato/SSR e 3 testes isolados/12 verificações, zero falhas; tipos, compilação e sintaxe PHP passaram. Dados sintéticos revertidos em QA. Provas nacionais/selector/catálogo anteriores reutilizadas. Turismo: leitura anónima activa HTTP200 e QA visitante/conta sem Promotor HTTP200; a recusa da sessão real relatada não foi reproduzida, nem atribuída a uma permissão sem prova. A conferência autenticada e visual continua pendente. Este registo não instala o candidato nem encerra a implementação transversal. L8 permanece parcial. + +Evidência: `investor-usability-qa-20261028.json`. Actualizados V2-01,V2-07,V2-10 na matriz existente; sem nova matriz ou backlog. diff --git a/docs/investmoz/unification/investor-usability-qa-20261028.json b/docs/investmoz/unification/investor-usability-qa-20261028.json new file mode 100644 index 00000000..c5e42e2e --- /dev/null +++ b/docs/investmoz/unification/investor-usability-qa-20261028.json @@ -0,0 +1,58 @@ +{ + "date": "2026-10-28", + "status": "QA_implemented_and_delta_verified_not_installed", + "runtime_baseline": "6e8de43ae7fec29b0766d95e209a8cb8baf0d88c", + "prepared_catalogue_parent": "54d1b2a5", + "Tempo_requests": [ + "Readable investor work menu and adaptive filling flow", + "ZEE/ZFI/park results must match explicit territory selection;all means the available set", + "Promoter request must use readable representation/modality labels and usable evidence selection", + "Investigate authenticated denial of public Tourism sector", + "Simplify My investments and present useful next actions", + "Expose fillable forms rather than a guide or legislative catalogue" + ], + "implemented": { + "work_menu": "Investor actions remain primary;existing access/audit/profile setup destinations move into optional administration details;no permission change", + "filling": "Schema fields grouped adaptively by task;free navigation,all fields stay mounted,unknown future keys retained;server missing paths and errors point to groups;not mandatory sequential forms", + "preservation": "Deliberate values retained between groups;save uses existing endpoints and ETags;resource navigation saves first and returns to the same opportunity/group;only unique promoter context is auto-selected", + "profile_request": "Portuguese visible representation/modality labels;owned clean-file criteria unchanged;file search and explicit selected proofs replace the unbounded list;availability does not prove evidentiary suitability", + "zones": "Territory and other filter changes apply search;old records hidden while loading/error;all and filtered totals plus pagination explicit;existing public visibility preserved;validated legal coverage includes its child area,while influence is not treated as a site", + "my_investments": "Next action remains prominent;other phases/stages expandable;source/code history and internal follow-up remain consultable rather than filling the main page", + "forms": "Direct entries to existing private investment preparation fields and Terra/DUAT;support request separately labelled;originals/guides optional;no law is converted into a form or executable calculation" + }, + "QA": { + "frontend_contract_and_SSR_tests": 8, + "frontend_failures": 0, + "isolated_feature_tests": 3, + "feature_assertions": 12, + "feature_failures": 0, + "database": "proactive_investment_20261027_test", + "port": 55441, + "transactions_rolled_back": true, + "types": "passed", + "build": "passed", + "PHP_syntax": "passed", + "accepted_national_selector_and_catalogue_proofs": "reused" + }, + "Tourism_incident": { + "reported_by_Tempo": "authenticated session saw access denial at /sectores/turismo", + "anonymous_live_HTTP": 200, + "isolated_guest_and_no_promoter_account_HTTP": 200, + "exact_real_session_cause": "not demonstrated;do not infer missing role or claim correction", + "private_permissions_changed": false, + "next": "Confer the actual authenticated session and related logs;public read is not real-session proof" + }, + "limits": [ + "Not installed in this QA report", + "SSR and controlled event tests are not browser keyboard/touch/layout evidence", + "Existing form adaptations are exposed;this does not implement every official form in the document collection", + "No new roles,publications,source edits,schema changes or fiscal activation", + "L8 remains partial" + ], + "restriction_origins": { + "UX_and_selected_scope": "Tempo current express instructions", + "data_and_permissions_preservation": "permanent project instructions", + "grouping_and_collapsed_details": "implementation choice,not new organisational requirement", + "document_ownership_scan_and_existing_workflows": "prior contracts preserved" + } +} diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md index 13628de4..84313b43 100644 --- a/docs/investmoz/unification/traceability-and-manual.md +++ b/docs/investmoz/unification/traceability-and-manual.md @@ -7338,3 +7338,22 @@ A Tempo esclareceu que a combinação província/sector deve apresentar as oport Correcção de apresentação em QA: título dos resultados explicita sector e hierarquia escolhidos; removidos os cartões educativos e o botão sectorial sem localização da área de resultados. Os guias mantêm-se como títulos ligados em apoio opcional fechado por defeito. A remoção da localização é uma acção expressamente identificada como pesquisa noutras províncias. O estado vazio refere o cadastro consultado e a cobertura incompleta, sem fabricar oportunidades nem alargar automaticamente filtros. Dois testes SSR do novo apoio opcional passaram, bem como tipos e compilação. As provas territoriais nacionais 6/617 e os quatro testes do selector são reutilizados; não mudou a consulta PHP ou o controlo territorial neste delta. Mantêm-se histórico, publicações, permissões, fontes e base interna. Este candidato continua sem instalação, dependente de autenticação SSH; a sessão real permanece sem prova visual. Relatório existente: `catalogue-province-coverage-qa-20261028.json`, campo `catalogue_result_presentation`. Requisitos V2-07/V2-10 actualizados na mesma matriz; L8 permanece parcial. + + +28/10 - Before investor usability checks: accepted catalogue candidate54d1b2a5 remains in QA,not installed;active menus6e8de43a and earlier supply proofs preserved. Two Tempo attachments identify duplicate profile navigation,an exposed long canonical form and ZEE/ZFI/park searches that keep prior results until manual submit. Prepare presentation-only adaptive field groups and safe save-before-resource navigation;verify territorial search/count/paging and documented scope without republishing records or changing permissions. Reuse prior proofs;existing V2-07/V2-10 scope retained. + +## 28/10/2026 — usabilidade do investidor e consulta territorial, QA + +Pedidos da Tempo e exemplos recebidos: menu/ficha de oportunidade, zonas/parques, pedido de Promotor, Os meus investimentos, documentos/formulários e recusa autenticada em Turismo. Inventário anterior registado antes dos testes: menus 6e8de43a e base interna instalados; candidato territorial 54d1b2a5 ainda em QA; originais, dados, relações, histórico, aprovações e provas anteriores preservados. + +Delta QA: acções do investidor em primeiro plano, administração em detalhe consultável; campos do contrato existente agrupados por tarefa e modalidade, com navegação livre e todos os campos montados para conservar edições. Os grupos mostram as pendências da última gravação e os erros existentes; não criam seis ou oito formulários obrigatórios. Guardar usa os mesmos endpoints/ETags; abrir recursos pela preparação guarda primeiro e regressa à mesma oportunidade/grupo. Contactos e detalhes de disponibilidade ficam opcionais; códigos técnicos de categorias e campos conhecidos têm nomes em português. Só um contexto único de promotor é escolhido automaticamente. + +Zonas: selecção territorial aplica pesquisa sem esperar por outro clique; a lista anterior deixa de aparecer durante carregamento/erro. Totais, intervalo visível e páginas identificados, sem apresentar a primeira página como o conjunto completo. «Todo o território» remove expressamente a localização, preservando os restantes critérios visíveis. Abrangência jurídica documentada e validada inclui os níveis descendentes; influência não se torna implantação. Não são criadas localizações, direitos, publicações ou certificados. + +Pedido de Promotor: representação/modalidades com nomes claros; pesquisa de ficheiros e selecção expressa dos comprovativos, preservando os escolhidos ao pesquisar. Mantidos propriedade, análise antimalware e verificações existentes; legislação/imagem/teste não se torna comprovativo por estar disponível. Os meus investimentos destaca a próxima acção e permite abrir fases/etapas; fontes, códigos e acompanhamento interno ficam preservados em detalhes. + +Formulários: entradas directas para os campos já existentes da preparação do pedido de investimento e Terra/DUAT; pedido de apoio identificado separadamente. Originais oficiais e guias continuam consultáveis, sem os confundir com um formulário preenchível ou converter leis em campos/cálculos. Não se declara executada a totalidade dos formulários oficiais do acervo. + +Provas delimitadas: 8 testes frontend de contrato/SSR e 3 testes isolados/12 verificações, zero falhas; tipos, compilação e sintaxe PHP passaram. Dados sintéticos revertidos em QA. Provas nacionais/selector/catálogo anteriores reutilizadas. Turismo: leitura anónima activa HTTP200 e QA visitante/conta sem Promotor HTTP200; a recusa da sessão real relatada não foi reproduzida, nem atribuída a uma permissão sem prova. A conferência autenticada e visual continua pendente. Este registo não instala o candidato nem encerra a implementação transversal. L8 permanece parcial. + +Evidência: `investor-usability-qa-20261028.json`. Actualizados V2-01,V2-07,V2-10 na matriz existente; sem nova matriz ou backlog. diff --git a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv index 1860579b..19fdb176 100644 --- a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv +++ b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv @@ -349,13 +349,13 @@ RF-MNE-006,interesse e lead; consentimento pendente,existing-business/traceabili RF-MNE-007,documentos e diligencia; NDA e retencao pendentes,existing-business/traceability.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-MNE-007: isolamento expiracao revogacao malware,P2,RF-MNE-007: Escopo local RF-MNE; conservar homónimos do mestre,RF-MNE-007,1,"[{""id"":""RF-MNE-007"",""pedido"":""documentos e diligencia; NDA e retencao pendentes"",""fontes"":[""existing-business/traceability.csv""],""aceitacao"":""isolamento expiracao revogacao malware"",""estado"":""parcial"",""variantes"":""Escopo local RF-MNE; conservar homónimos do mestre"",""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-MNE-008,proposta e valor; contrato e regra fiscal pendentes,existing-business/traceability.csv,simuladores,/api/v1/questionnaires/{code}; /api/v1/simulation-drafts; /api/v1/simulation-drafts/claim; /api/v1/simulation-drafts/claim-preview; /api/v1/simulation-drafts/current; /api/v1/simulation-drafts/linkable-businesses; /api/v1/simulation-drafts/{id}; /api/v1/simulation-drafts/{id}/business-link; /api/v1/simulation-drafts/{id}/conversions; /api/v1/simulation-drafts/{id}/touch; /api/v1/simulations; /api/v1/simulations/history,"SimulationExecution, resultados/cenários/fontes, rascunhos e dossier 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.",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,Cenário→cálculo→gravação→resultado/dossier correto→nova sessão→PDF/derivadas autorizadas. Sem aprovação/score inventado. Critério individual original preservado; cobertura atual ainda não individualizada.,"Regras financeiras/fiscais separadas; fonte oficial aceite, parâmetros/âmbito/período podem faltar; não substituir por0/taxa atual. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",RF-MNE-008: pipeline nunca equivale a receita,P2,RF-MNE-008: Escopo local RF-MNE; conservar homónimos do mestre,RF-MNE-008,1,"[{""id"":""RF-MNE-008"",""pedido"":""proposta e valor; contrato e regra fiscal pendentes"",""fontes"":[""existing-business/traceability.csv""],""aceitacao"":""pipeline nunca equivale a receita"",""estado"":""parcial"",""variantes"":""Escopo local RF-MNE; conservar homónimos do mestre"",""modulo"":""simuladores""}]",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.simulation_form_drafts: 22 registos; public.simulation_scenarios: 16 registos; public.simulations: 16 registos; public.simulation_tax_rules: 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.",Cenário→cálculo→gravação→resultado/dossier correto→nova sessão→PDF/derivadas autorizadas. Sem aprovação/score inventado. Critério individual original preservado; cobertura atual ainda não individualizada.,"SimulationExecution, resultados/cenários/fontes, rascunhos e dossier existentes","Regras financeiras/fiscais separadas; fonte oficial aceite, parâmetros/âmbito/período podem faltar; não substituir por0/taxa atual.",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: simuladores. 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.,simuladores,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/SimulationTaxParameterResolver.php; resources/js/components/simulation-form.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"SimulationExecutionTest, SimulationFormDraftTest, SimulationDraftContinuityTest, SimulationTaxRuleGovernanceTest; 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-MNE-009,legado e operacao; politicas pendentes,existing-business/traceability.csv,negócios,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /api/v1/existing-business/listings; /api/v1/existing-business/listings/{id}; /api/v1/existing-business/listings/{id}/objects; /api/v1/existing-business/listings/{id}/objects/{object}; /api/v1/existing-business/listings/{id}/transitions; /api/v1/existing-business/listings/{id}/verifications; /api/v1/existing-business/reviews; /api/v1/simulation-drafts/linkable-businesses; /api/v1/simulation-drafts/{id}/business-link; /investidor/negocios,"ExistingBusinessDrafts/Policy, anúncio público, InterestSubmission e filtros atuais. 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,Negócio→revisão/publicação→interesse→origem→estatística única→recuperação; preparar caso existente autorizado sem forçar estado. Critério individual original preservado; cobertura atual ainda não individualizada.,Políticas legadas próprias e docs/mandatos; QA18445zero anúncios publicados; notificaçõesOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,RF-MNE-009: rollback recuperacao carga,P2,RF-MNE-009: Escopo local RF-MNE; conservar homónimos do mestre,RF-MNE-009,1,"[{""id"":""RF-MNE-009"",""pedido"":""legado e operacao; politicas pendentes"",""fontes"":[""existing-business/traceability.csv""],""aceitacao"":""rollback recuperacao carga"",""estado"":""parcial"",""variantes"":""Escopo local RF-MNE; conservar homónimos do mestre"",""modulo"":""negócios""}]",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.existing_businesses: 2 registos; public.existing_business_revisions: 2 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.",Negócio→revisão/publicação→interesse→origem→estatística única→recuperação; preparar caso existente autorizado sem forçar estado. Critério individual original preservado; cobertura atual ainda não individualizada.,"ExistingBusinessDrafts/Policy, anúncio público, InterestSubmission e filtros atuais",Políticas legadas próprias e docs/mandatos; QA18445zero anúncios publicados; notificaçõesOFF.,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: negócios. 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.,negócios,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/ExistingBusinessController.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"ExistingBusinessFoundationTest, ExistingBusinessIntakeTest, ExistingBusinessWizardTest; 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.",,, -V2-01,"Menu comum por grupos e submenus, teclado/Escape/foco, toque e adaptação móvel implementados","backlog-mestre.md; § inicial, p. 14–15; § 2.3, p. 679–680",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.,"28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-01: Preservar navegação livre nas evoluções; a referência à proporção áurea é uma orientação visual, não uma certificação matemática de todas as páginas",P2,V2-01: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-01,1,"[{""id"":""V2-01"",""pedido"":""Menu comum por grupos e submenus, teclado/Escape/foco, toque e adaptação móvel implementados"",""fontes"":[""backlog-mestre.md; § inicial, p. 14–15; § 2.3, p. 679–680""],""aceitacao"":""Preservar navegação livre nas evoluções; a referência à proporção áurea é uma orientação visual, não uma certificação matemática de todas as páginas"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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. +V2-01,"Menu comum por grupos e submenus, teclado/Escape/foco, toque e adaptação móvel implementados","backlog-mestre.md; § inicial, p. 14–15; § 2.3, p. 679–680",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.,"28/10:usabilidade/fluxo/formulários e filtro de zonas corrigidos em QA,sem instalação;recusa Turismo/sessão real pendente. Histórico: 28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-01: Preservar navegação livre nas evoluções; a referência à proporção áurea é uma orientação visual, não uma certificação matemática de todas as páginas",P2,V2-01: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-01,1,"[{""id"":""V2-01"",""pedido"":""Menu comum por grupos e submenus, teclado/Escape/foco, toque e adaptação móvel implementados"",""fontes"":[""backlog-mestre.md; § inicial, p. 14–15; § 2.3, p. 679–680""],""aceitacao"":""Preservar navegação livre nas evoluções; a referência à proporção áurea é uma orientação visual, não uma certificação matemática de todas as páginas"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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. [RECONCILIACAO-43-20261019] 3: Fluxos instalados; fechar observação com dossier legítimo quando disponível. Não reconstruir nem repetir percurso aceite. | 5: Sem saldo de código no recorte visual aceite. [DESCOBERTA-20261026] Decisão expressa da Tempo: Porquê investir em Moçambique → Partir de uma ideia → Consultar oportunidades → Simulador Fiscal → Sectores de investimento, no menu e nos atalhos iniciais. Inventário do delta: páginas existentes reutilizadas; ordem anterior ideia/porquê/oportunidades/sectores e simulador em Realização; atalhos iniciais anteriores oportunidades/simulador. Sem perda funcional confirmada neste recorte; destinos restantes e contexto fiscal conservados. Código alterado sem schema, dados, configuração ou permissões. Verificação local: seis testes de navegação, ordem/destinos/contexto, TypeScript, build e diff passaram; traduções dos rótulos conservadas. Sem conferência visual nova ou disponibilização no destino. Manual: docs/investmoz/unification/traceability-and-manual.md, Descoberta — 26/10/2026. Não encerra critérios globais. Correcção expressa da Tempo: Porquê investir em Moçambique? no menu, atalho, título, caminho e traduções; cinco atalhos compactados (px-3/py-1.5/gap-2, mínimo 36 px em desktop e 44 px no telemóvel). Preservados ordem, destinos, contexto e acessos. Verificação deste ajuste: build e diff passaram; sem nova conferência visual ou publicação. Reestruturação expressa da Tempo a partir do texto fornecido em 26/10/2026: cinco parágrafos editoriais à esquerda abaixo do título; conteúdo anterior à direita, cartões verticais enquanto acompanham o texto e horizontais abaixo. Leitura sequencial no telemóvel. Inventário do delta: preservados os sete cartões temáticos, introdução, condições/documentação, apoio e todos os destinos anteriores. Sem perda funcional confirmada; sem mudança de schema, dados, configuração, permissões ou cálculos. Verificação local: TypeScript, build e diff passaram; cinco parágrafos fornecidos íntegros e 12 parágrafos/15 links anteriores conservados. Prévia isolada do componente com CSS compilado em 1440/1024/820/390 px, sem transbordo; texto/colunas e linhas horizontais conferidos. Recibo: outputs/why-invest-layout-20261026/layout.json. Sem prova no activo ou publicação. Compactação expressa da Tempo: margens, intervalos, preenchimento dos cartões, títulos e botões reduzidos apenas na página Porquê investir. Preservados os cinco parágrafos fornecidos, 12 anteriores, sete cartões, 15 links e a disposição aprovada; sem perda confirmada ou mudança de dados/permissões. Verificação desta compactação: TypeScript, build, diff e comparação isolada antes/depois em 1440/1024/820/390/320 px passaram; 17 parágrafos e 15 links íntegros, sem transbordo. Altura reduzida cerca de 15% em computador e 16% no telemóvel, com corpo a 16 px. Capturas inspeccionadas; recibo em outputs/why-invest-spacing-20261026/layout.json. Sem prova no activo ou publicação. [FUNDO-EDITORIAL-20261026] Pedido expresso da Tempo: fundo #BBC0C6 apenas no bloco dos cinco parágrafos de Porquê investir. Inventário preservado: texto, disposição compacta, sete cartões e 15 links; reutilizada prova anterior em outputs/why-invest-spacing-20261026/. Código conservado; notas recentes ausentes no final do manual após conflitos não revogam aceitação. Sem perda funcional confirmada ou alteração de dados/permissões. Verificação deste fundo concluída: build, formato e diff passaram; prévia isolada em 1440 e 390 px confirmou rgb(187, 192, 198), equivalente a #BBC0C6, sem alteração da geometria, dos 17 parágrafos ou dos 15 links e sem transbordo. Captura de computador inspeccionada; recibo em outputs/why-invest-background-20261026/layout.json. Não é prova do activo; sem publicação. [FUNDO-AZUL-20261026] Pedido da Tempo: azul bebé ou IBM no fundo editorial. Escolha de apresentação: #D0E2FF, IBM Blue 20, paleta oficial Carbon; substitui o cinzento anterior conservando histórico, geometria, conteúdo, sete cartões e 15 links. Sem perda funcional confirmada ou alteração de dados/permissões. Verificação deste azul concluída: build e diff passaram; prévia isolada em 1440 e 390 px confirmou rgb(208, 226, 255), equivalente a #D0E2FF, sem alteração da geometria, 17 parágrafos ou 15 links e sem transbordo. Captura de computador inspeccionada. Recibo em outputs/why-invest-blue-20261026/layout.json. Sem prova do activo; sem publicação. [SEM-FUNDO-EDITORIAL-20261026] Pedido expresso da Tempo: remover o fundo dos cinco parágrafos e deixar a apresentação normal. Retirados fundo azul e arredondamento do bloco, mantendo texto, disposição e espaçamentos compactos. Decisões anteriores conservadas no histórico. Sem alteração de dados, permissões ou cálculos. Verificação concluída: build/diff e prévia em 1440/390 px passaram; fundo transparente, geometria e 17 parágrafos/15 links preservados. Recibo em outputs/why-invest-no-background-20261026/. Alteração local, sem publicação. [FUNDO-BRANCO-20261026] Pedido expresso da Tempo: fundo branco puro #FFFFFF no bloco dos cinco parágrafos de Porquê investir. Aplicado bg-white, conservando texto, geometria, espaços compactos e restantes entregas; sem perda funcional ou alteração de dados/permissões. Compilação e diff conferidos; alteração local sem publicação.","Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada. | NAVEGACAO-QA-20261016: avaliação visual do protótipo pendente. Sem encerramento funcional global: vínculo genérico oportunidade/território, troca persistente e invalidação transversal, resumo integral de oportunidade/etapa e página Porquê investir por consolidar. Prévia não grava alterações de negócio. Manual aguarda avaliação e consolidação. | NAVEGACAO-CONSOLIDACAO-QA-20261016: os limites de persistência/entre dispositivos/Porquê investir do protótipo ficam superados neste recorte QA. A organização foi avaliada e ajustada tecnicamente; decisão visual e disponibilização pela Tempo continuam separadas. Não é prova volumétrica nem homologação fiscal/regulatória. Não encerra outros critérios deste requisito. Não repete os testes de navegação já aceites. | Cinco pontos do pedido consolidados neste recorte QA; confirmar da candidata funcional persiste, protótipo18534 fica histórico. Avaliação técnica visual executada, aceitação pela Tempo não presumida. Sem ativação. Não encerra outros critérios dos requisitos. Dois clientes simulados por sessões independentes, não dois equipamentos físicos. | RECTIFICAÇÃO: a revisão dos quatro formulários é parcial3/4. Preparar manifestação de interesse não mostra pré-preenchimento no percurso actual: manifestação não vinculada ao dossier. Presença de chaves na API/resumo global não encerra este critério. Resolver vínculo explícito/recuperável ao mesmo dossier e demonstrar o quarto formulário antes da decisão. Utilizador não abriu candidata nem conferiu novos anexos. | Actualização do critério anteriormente aberto da manifestação: concluído neste recorte QA; três formulários aceites conservam provas anteriores, sem repetição. Acesso directo sem dossier mantido; nenhum dossier/processo duplicado criado. Não encerra critérios globais nem presume conferência dos anexos pelo utilizador. Disponibilização separada. | Recorte QA demonstrado, sem encerrar critérios globais. Histórico económico combinado conservado, fora de novas escolhas; oportunidade6 não inferida como Fintech. Sem fusões por nome. Recuperação existente conferida por leitura e hashes; outra sessão/dispositivo e percursos aceites não reensaiados. Conferência dos anexos pelo utilizador pendente. | Recorte aprovado disponibilizado; requisitos globais permanecem abertos. Atividade historica combinada e oportunidade6 sem reclassificacao. Conferencia dos anexos finais pelo utilizador pendente. Sem repetir testes aceites, formularios ou L1. -[UTILIZACAO-HOMOLOGACAO-20261019] 3: Disponibilidade condicionada conforme limite registado — Início, contexto e navegação abrem; gravação/recuperação aceites em QA reutilizadas. Sem dossier real no destino. | 5: Disponibilidade condicionada conforme limite registado — Ecrã aberto: dez sectores principais, especialização Fintech sem cartão principal duplicado; 12 registos conservados.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. | NAVEGACAO-QA-20261016: reutiliza cinco fases/19 etapas, permissões e dossiers existentes; base anterior dos parques130000, sem incorporar L1 pendente. Confirmação futura do escopo funcional e autorização ativa separadas; zero migrations/grants/publicação/alterações no ativo. L1, duplicados e Fintech mantêm estados. | NAVEGACAO-CONSOLIDACAO-QA-20261016: ação autenticada nominal 150000 preparada e demonstrada somente no clone55441 *_test; uma tabela de preferência por conta, associações no dossier existente. Manifesto/compilação e reversão parcial compatível preservam dados após utilização. Backup/restauro fresco do ativo e autorização de ativação continuam futuros. B, COUNTRY02, L1 dos parques, duplicados, regulação Fintech e demais estados preservados; origem das restrições: instrução expressa da Tempo e controlos de acesso aprovados, sem novos grants. | Candidata reconciliada com fonte L1 instalada, sem repetir140000; nenhuma alteração ativa.150000 permanece somenteQA. Pacotes/reversão anteriores não usar directamente no ativo actualizado: futura disponibilização requer decisão própria, hashes/preflight/backup-restauro fresco e reversão reconciliada. Sem nova regra organizacional; B/COUNTRY02/ficha integral e demais estados preservados. | Disponibilização parcial: apenas150000 pendente. Prévia confirma investemoz:5432/revisão correta; aplicação exige MFA nesta sessão e botão desativado. Sem POST/DDL150000; utilizador deve concluir autenticação habitual, sem nova autorização.140000/L1 preservada e sem reensaios. Reversão reconciliada comL1,20fontes/buildcompatível, dados/schema/histórico retidos. | Pendência MFA/instalação anterior resolvida; nenhuma ação restante para disponibilizar este recorte.140000 preservada uma vez; sem repetir L1 ou três formulários aceites. Reversão parcial compatível20fontes/build, schema/vínculos/histórico conservados. Critérios globais e ficha integral dos parques mantêm estado próprio. | Origem: pedido expresso da Tempo de18/10. IDs, especialização por leitura e ponte histórica são escolhas técnicas; sem nova regra organizacional. Ativo inalterado; disponibilização separada. Sem migration/instalação140000/150000; reversão retém somente a rota nova Fintech além dos dados/histórico e associação2→8. Estados e critérios anteriores preservados. | Origem: autorizacao expressa Tempo18/10/2026. Backup/restauro e execucao autenticada concluidos; 140000/150000 presentes uma vez, sem migrations. Reversao parcial preserva dados/auditoria/esquemas e rota compativel Fintech. Matriz/manual/backlog atuais preservados. Ficha integral dos parques separada.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | NAVEGACAO-QA-20261016: protótipo de organização em clone isolado, mapa52 ligações condicionais e vistas do catálogo; Descoberta/Realização/Suporte; área de trabalho separada; quatro entradas no mesmo UUID/v3, preenchimento autorizado preservando edição, cancelamento/confirmação apenas da prévia, novo login, teclado e móvel390. Evidência em outputs/investmoz-navegacao-QA-20261016/RELATORIO-QA.md. Origem: instrução expressa da Tempo nesta conversa; não é nova regra organizacional. | NAVEGACAO-CONSOLIDACAO-QA-20261016: substitui o saldo funcional da prévia histórica. Associações versionadas de oportunidade/sector/território no mesmo dossier encriptado; confirmação transacional com prévia e idempotência; foco/etapa recuperados entre sessões independentes; preservação de edições e preenchimento de vazios em formulários existentes; página Porquê investir dedicada. Prova positiva com cálculos locais reais (40 unidades; lacuna de financiamento 13000 MZN), duas submissões sintéticas reais pelo Balcão e recibo inalterado após troca. Resultados afetados conservados como históricos; rascunho anterior exige revisão explícita. Relatório: outputs/investmoz-navegacao-consolidacao-QA-20261016/RELATORIO-QA.md. | 18/10/2026: consolidação QA posterior ao protótipo revista; três menus com explicação/destinos, página Porquê investir dedicada melhorada, captura desktop/móvel390px e Escape/foco. Associações e contexto recuperados em duas sessões independentes autenticadas/MFA; quatro consumidores,19etapas, resultados para revisão e pedidos históricos recuperados. Provas transacionais40condições de16/10 reutilizadas. Relatório/pacote: outputs/investmoz-navegacao-consolidacao-20261018/para-revisao/. | Revisão visível18/10: candidata b1c98ec7140c, quatro entradas no mesmoUUID/próxima acção; prévia mantém/actualiza/revisão3resultados e9etapas, confirmação contexto3→4 e recuperação após logout/login/MFA observadas. Simulador, Terra/DUAT e Balcão mostram pré-preenchimento/comparação preservando edições. Relatório REVISAO-VISIVEL-DOC01.md e recibo em outputs/investmoz-navegacao-consolidacao-20261018/para-revisao/. | 18/10: integração da manifestação QA 73f8bd1347ca observada: vínculo opcional explícito no dossier existente, objectivo/localização preenchidos e sector editado preservado, recuperação em nova sessão/MFA, uma submissão e recibo IR-2026-01M576QMSKV91Q53GZCHKM61P0; dois reenvios com o mesmo protocolo.18 checksHTTP e15 de leitura;28 outros dossiers iguais. RELATORIO-MANIFESTACAO-QA.md na mesma entrega. | 18/10: Tempo autorizou disponibilização da candidata73f8bd1347ca. Código40fontes/build167 trocados por hash, manutenção terminada, cache de dados preservada. Backup fresco/restauro QA:295tabelas,31sequências,1320ficheiros, arranque/decifragem conferidos. Relatório operacional em outputs/investmoz-navegacao-ativacao-20261018/para-revisao/. | 18/10: disponibilização concluída73f8bd1347ca. MFA regularizado e150000 instalada pela conta2, reciboda1cae7b-a403-4256-9fd8-98ff2a69918d. Ledger/tabela=1, zero preferências importadas. Prévia e sucesso observados; Codex não repetiuPOST.290tabelas iguais ao backup e zero diferenças inesperadas. Relatório/recibo finais na mesma entrega. | 18/10: sectores-duplicacoes-QA-9b6097f97121, organização sectorial/duplicações apenas QA. Energia8/Mineração7; Fintech9 especialização de Mercado6; oportunidade2 reclassificada2→8 sem duplicação; 56HTTP,30serviço,3SQL e5reversão observados. Relatório e manifesto exatos em outputs/investmoz-sectores-duplicacoes-QA-20261018/para-revisao/. | 18/10/2026: disponibilizada sectores-duplicacoes-QA-e9f7d821b6f7 em investemoz:5432, procedimento DOC02. Backup/restauro fresco validado. 34 fontes/167 build. Conta2 com permissao/MFA; oportunidade2 sector2 para8; evento/recibo unicos, operacao27e6a658-d8bc-4d94-ab7b-b977ba56d141. Mesma transacao/ligacao e limpeza SET LOCAL observadas. Provas em outputs/investmoz-sectores-duplicacoes-ativacao-20261018/CONFERENCIA-FINAL.json e para-revisao/RECIBO-EXECUCAO.json. | Homologação teste-investidor 19/10/2026: Navegação contextual e manifestação de interesse=Ausente; Sectores e duplicação visual=Instalado mas desabilitado. Saldo derivado e limites em outputs/investmoz-disponibilizacao-integral-20261019/SALDO-E-ACTUALIZACAO-CONSOLIDADA.md. Não substitui estado/provas do activo; trecho documental encerrado, vínculo dossier aberto. | Proposta integral fdcb31f1b5b9: aplicação activa local completa + R2/DOC01/destino reconciliados; schema/build/recuperação de contexto e reversão de apresentação ensaiados no clone isolado. Não instalado remotamente. Inc. QA territoriais/Inhambane/programas separados. Limites e decisões em outputs/investmoz-disponibilizacao-integral-20261019/PROPOSTA-INTEGRAL-PARA-DECISAO.md. | Execução autorizada fdcb31f1b5b9 concluída em teste-investidor: Navegação contextual e manifestação de interesse=Disponível; Sectores e duplicação visual=Disponível. 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] 3: Disponibilidade condicionada conforme limite registado — Início, contexto e navegação abrem; gravação/recuperação aceites em QA reutilizadas. Sem dossier real no destino. | 5: Disponibilidade condicionada conforme limite registado — Ecrã aberto: dez sectores principais, especialização Fintech sem cartão principal duplicado; 12 registos conservados.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. | NAVEGACAO-QA-20261016: reutiliza cinco fases/19 etapas, permissões e dossiers existentes; base anterior dos parques130000, sem incorporar L1 pendente. Confirmação futura do escopo funcional e autorização ativa separadas; zero migrations/grants/publicação/alterações no ativo. L1, duplicados e Fintech mantêm estados. | NAVEGACAO-CONSOLIDACAO-QA-20261016: ação autenticada nominal 150000 preparada e demonstrada somente no clone55441 *_test; uma tabela de preferência por conta, associações no dossier existente. Manifesto/compilação e reversão parcial compatível preservam dados após utilização. Backup/restauro fresco do ativo e autorização de ativação continuam futuros. B, COUNTRY02, L1 dos parques, duplicados, regulação Fintech e demais estados preservados; origem das restrições: instrução expressa da Tempo e controlos de acesso aprovados, sem novos grants. | Candidata reconciliada com fonte L1 instalada, sem repetir140000; nenhuma alteração ativa.150000 permanece somenteQA. Pacotes/reversão anteriores não usar directamente no ativo actualizado: futura disponibilização requer decisão própria, hashes/preflight/backup-restauro fresco e reversão reconciliada. Sem nova regra organizacional; B/COUNTRY02/ficha integral e demais estados preservados. | Disponibilização parcial: apenas150000 pendente. Prévia confirma investemoz:5432/revisão correta; aplicação exige MFA nesta sessão e botão desativado. Sem POST/DDL150000; utilizador deve concluir autenticação habitual, sem nova autorização.140000/L1 preservada e sem reensaios. Reversão reconciliada comL1,20fontes/buildcompatível, dados/schema/histórico retidos. | Pendência MFA/instalação anterior resolvida; nenhuma ação restante para disponibilizar este recorte.140000 preservada uma vez; sem repetir L1 ou três formulários aceites. Reversão parcial compatível20fontes/build, schema/vínculos/histórico conservados. Critérios globais e ficha integral dos parques mantêm estado próprio. | Origem: pedido expresso da Tempo de18/10. IDs, especialização por leitura e ponte histórica são escolhas técnicas; sem nova regra organizacional. Ativo inalterado; disponibilização separada. Sem migration/instalação140000/150000; reversão retém somente a rota nova Fintech além dos dados/histórico e associação2→8. Estados e critérios anteriores preservados. | Origem: autorizacao expressa Tempo18/10/2026. Backup/restauro e execucao autenticada concluidos; 140000/150000 presentes uma vez, sem migrations. Reversao parcial preserva dados/auditoria/esquemas e rota compativel Fintech. Matriz/manual/backlog atuais preservados. Ficha integral dos parques separada.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:investor-usability-qa-20261028.json;frontend8,feature3/12,tipos/build/PHP;fontes/permissões/histórico preservados;provas anteriores reutilizadas. Histórico: 28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | NAVEGACAO-QA-20261016: protótipo de organização em clone isolado, mapa52 ligações condicionais e vistas do catálogo; Descoberta/Realização/Suporte; área de trabalho separada; quatro entradas no mesmo UUID/v3, preenchimento autorizado preservando edição, cancelamento/confirmação apenas da prévia, novo login, teclado e móvel390. Evidência em outputs/investmoz-navegacao-QA-20261016/RELATORIO-QA.md. Origem: instrução expressa da Tempo nesta conversa; não é nova regra organizacional. | NAVEGACAO-CONSOLIDACAO-QA-20261016: substitui o saldo funcional da prévia histórica. Associações versionadas de oportunidade/sector/território no mesmo dossier encriptado; confirmação transacional com prévia e idempotência; foco/etapa recuperados entre sessões independentes; preservação de edições e preenchimento de vazios em formulários existentes; página Porquê investir dedicada. Prova positiva com cálculos locais reais (40 unidades; lacuna de financiamento 13000 MZN), duas submissões sintéticas reais pelo Balcão e recibo inalterado após troca. Resultados afetados conservados como históricos; rascunho anterior exige revisão explícita. Relatório: outputs/investmoz-navegacao-consolidacao-QA-20261016/RELATORIO-QA.md. | 18/10/2026: consolidação QA posterior ao protótipo revista; três menus com explicação/destinos, página Porquê investir dedicada melhorada, captura desktop/móvel390px e Escape/foco. Associações e contexto recuperados em duas sessões independentes autenticadas/MFA; quatro consumidores,19etapas, resultados para revisão e pedidos históricos recuperados. Provas transacionais40condições de16/10 reutilizadas. Relatório/pacote: outputs/investmoz-navegacao-consolidacao-20261018/para-revisao/. | Revisão visível18/10: candidata b1c98ec7140c, quatro entradas no mesmoUUID/próxima acção; prévia mantém/actualiza/revisão3resultados e9etapas, confirmação contexto3→4 e recuperação após logout/login/MFA observadas. Simulador, Terra/DUAT e Balcão mostram pré-preenchimento/comparação preservando edições. Relatório REVISAO-VISIVEL-DOC01.md e recibo em outputs/investmoz-navegacao-consolidacao-20261018/para-revisao/. | 18/10: integração da manifestação QA 73f8bd1347ca observada: vínculo opcional explícito no dossier existente, objectivo/localização preenchidos e sector editado preservado, recuperação em nova sessão/MFA, uma submissão e recibo IR-2026-01M576QMSKV91Q53GZCHKM61P0; dois reenvios com o mesmo protocolo.18 checksHTTP e15 de leitura;28 outros dossiers iguais. RELATORIO-MANIFESTACAO-QA.md na mesma entrega. | 18/10: Tempo autorizou disponibilização da candidata73f8bd1347ca. Código40fontes/build167 trocados por hash, manutenção terminada, cache de dados preservada. Backup fresco/restauro QA:295tabelas,31sequências,1320ficheiros, arranque/decifragem conferidos. Relatório operacional em outputs/investmoz-navegacao-ativacao-20261018/para-revisao/. | 18/10: disponibilização concluída73f8bd1347ca. MFA regularizado e150000 instalada pela conta2, reciboda1cae7b-a403-4256-9fd8-98ff2a69918d. Ledger/tabela=1, zero preferências importadas. Prévia e sucesso observados; Codex não repetiuPOST.290tabelas iguais ao backup e zero diferenças inesperadas. Relatório/recibo finais na mesma entrega. | 18/10: sectores-duplicacoes-QA-9b6097f97121, organização sectorial/duplicações apenas QA. Energia8/Mineração7; Fintech9 especialização de Mercado6; oportunidade2 reclassificada2→8 sem duplicação; 56HTTP,30serviço,3SQL e5reversão observados. Relatório e manifesto exatos em outputs/investmoz-sectores-duplicacoes-QA-20261018/para-revisao/. | 18/10/2026: disponibilizada sectores-duplicacoes-QA-e9f7d821b6f7 em investemoz:5432, procedimento DOC02. Backup/restauro fresco validado. 34 fontes/167 build. Conta2 com permissao/MFA; oportunidade2 sector2 para8; evento/recibo unicos, operacao27e6a658-d8bc-4d94-ab7b-b977ba56d141. Mesma transacao/ligacao e limpeza SET LOCAL observadas. Provas em outputs/investmoz-sectores-duplicacoes-ativacao-20261018/CONFERENCIA-FINAL.json e para-revisao/RECIBO-EXECUCAO.json. | Homologação teste-investidor 19/10/2026: Navegação contextual e manifestação de interesse=Ausente; Sectores e duplicação visual=Instalado mas desabilitado. Saldo derivado e limites em outputs/investmoz-disponibilizacao-integral-20261019/SALDO-E-ACTUALIZACAO-CONSOLIDADA.md. Não substitui estado/provas do activo; trecho documental encerrado, vínculo dossier aberto. | Proposta integral fdcb31f1b5b9: aplicação activa local completa + R2/DOC01/destino reconciliados; schema/build/recuperação de contexto e reversão de apresentação ensaiados no clone isolado. Não instalado remotamente. Inc. QA territoriais/Inhambane/programas separados. Limites e decisões em outputs/investmoz-disponibilizacao-integral-20261019/PROPOSTA-INTEGRAL-PARA-DECISAO.md. | Execução autorizada fdcb31f1b5b9 concluída em teste-investidor: Navegação contextual e manifestação de interesse=Disponível; Sectores e duplicação visual=Disponível. 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 @@ -367,10 +367,10 @@ V2-03,"Mesmo dossier, pedido, conversa e tarefa interna; ciclo completo demonstr V2-04,Regras internas e recomendações explicáveis; evidência scoped com autoria/data/hash; aceitação distinta de tarefa,"backlog-mestre.md; § 3.2.3.1, p. 2472–2532; § 5.2, p. 7009–7190",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.","V2-04: Expandir consistência entre mercado, capacidade, recursos e calendário com fontes verificáveis; IA externa continua opcional",P2,V2-04: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-04,1,"[{""id"":""V2-04"",""pedido"":""Regras internas e recomendações explicáveis; evidência scoped com autoria/data/hash; aceitação distinta de tarefa"",""fontes"":[""backlog-mestre.md; § 3.2.3.1, p. 2472–2532; § 5.2, p. 7009–7190""],""aceitacao"":""Expandir consistência entre mercado, capacidade, recursos e calendário com fontes verificáveis; IA externa continua opcional"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""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.",,, V2-05,Calculadores existentes preservados; fronteira entre explicação e cálculo determinístico mantida,"backlog-mestre.md; § 3.2.3.2, p. 2533–2576; § 3.2.1.5, p. 1746–2160",simuladores,/api/v1/questionnaires/{code}; /api/v1/simulation-drafts; /api/v1/simulation-drafts/claim; /api/v1/simulation-drafts/claim-preview; /api/v1/simulation-drafts/current; /api/v1/simulation-drafts/linkable-businesses; /api/v1/simulation-drafts/{id}; /api/v1/simulation-drafts/{id}/business-link; /api/v1/simulation-drafts/{id}/conversions; /api/v1/simulation-drafts/{id}/touch; /api/v1/simulations; /api/v1/simulations/history,"SimulationExecution, resultados/cenários/fontes, rascunhos e dossier 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.",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,Cenário→cálculo→gravação→resultado/dossier correto→nova sessão→PDF/derivadas autorizadas. Sem aprovação/score inventado. Critério individual original preservado; cobertura atual ainda não individualizada.,"Regras financeiras/fiscais separadas; fonte oficial aceite, parâmetros/âmbito/período podem faltar; não substituir por0/taxa atual. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",V2-05: Reconciliar diplomas/artigos e parâmetros ausentes; nenhuma publicação documental ativa cálculos; não substituir desconhecidos por zero,P2,V2-05: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-05,1,"[{""id"":""V2-05"",""pedido"":""Calculadores existentes preservados; fronteira entre explicação e cálculo determinístico mantida"",""fontes"":[""backlog-mestre.md; § 3.2.3.2, p. 2533–2576; § 3.2.1.5, p. 1746–2160""],""aceitacao"":""Reconciliar diplomas/artigos e parâmetros ausentes; nenhuma publicação documental ativa cálculos; não substituir desconhecidos por zero"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""simuladores""}]",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.simulation_form_drafts: 22 registos; public.simulation_scenarios: 16 registos; public.simulations: 16 registos; public.simulation_tax_rules: 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.",Cenário→cálculo→gravação→resultado/dossier correto→nova sessão→PDF/derivadas autorizadas. Sem aprovação/score inventado. Critério individual original preservado; cobertura atual ainda não individualizada.,"SimulationExecution, resultados/cenários/fontes, rascunhos e dossier existentes","Regras financeiras/fiscais separadas; fonte oficial aceite, parâmetros/âmbito/período podem faltar; não substituir por0/taxa atual.",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: simuladores. 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.,simuladores,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/SimulationTaxParameterResolver.php; resources/js/components/simulation-form.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"SimulationExecutionTest, SimulationFormDraftTest, SimulationDraftContinuityTest, SimulationTaxRuleGovernanceTest; 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.",,, V2-06,Bolsa instalada constatada por leitura ativa; acesso e contexto compartilhados,"backlog-mestre.md; § 3.2.3.3, p. 2577–2609; § 3.5, p. 3374–3453",Bolsa/parcerias,/api/v1/partnerships; /api/v1/partnerships/source/{type}/{id}; /management/partnerships-install; /parcerias; /parcerias/candidaturas/{id}; /parcerias/criar; /parcerias/notificacoes/{id}/ler; /parcerias/painel; /parcerias/rascunhos; /parcerias/salas/{id}; /parcerias/salas/{id}/acordo; /parcerias/salas/{id}/documentos,"PartnershipExchange, salas, candidaturas, marcos, acesso/revogação documental. 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,"Candidatura/sala→documento autorizado→revogar→URL antigo negado na sessão corrente/nova, preservar proprietário/original. Critério individual original preservado; cobertura atual ainda não individualizada.","ACL da sala específica; autoria/membros/marcos e documentos privados, independente da ACL de oportunidade. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-06: Avaliar restantes propostas de indicadores, contratos e estados contra implementação real; acordos CTA/câmaras/associações dependem de decisões humanas",P2,V2-06: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-06,1,"[{""id"":""V2-06"",""pedido"":""Bolsa instalada constatada por leitura ativa; acesso e contexto compartilhados"",""fontes"":[""backlog-mestre.md; § 3.2.3.3, p. 2577–2609; § 3.5, p. 3374–3453""],""aceitacao"":""Avaliar restantes propostas de indicadores, contratos e estados contra implementação real; acordos CTA/câmaras/associações dependem de decisões humanas"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""Bolsa/parcerias""}]",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.portal_partnerships: 0 registos; public.partnership_rooms: 0 registos; public.partnership_interests: 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.","Candidatura/sala→documento autorizado→revogar→URL antigo negado na sessão corrente/nova, preservar proprietário/original. Critério individual original preservado; cobertura atual ainda não individualizada.","PartnershipExchange, salas, candidaturas, marcos, acesso/revogação documental","ACL da sala específica; autoria/membros/marcos e documentos privados, independente da ACL de oportunidade.",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: parcerias. 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.,parcerias,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/PartnershipExchange.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,PartnershipExchangeTest; 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.",,, -V2-07,Menu de gestão preserva rotas e permissões existentes,"backlog-mestre.md; § 3.2.3.4–3.2.3.10, p. 2610–3339",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.",28/10:6 tests/617 assertions;shared province/location filters;prior types/build reused. History: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,"28/10:resultados por sector/localização separados do apoio educativo em QA,sem instalação. Histórico: 28/10:selector territorial único em QA,sem instalação;preservação e cobertura nacional mantidas. Histórico: 28/10:national QA;11 provincial units,6 corridors,2 sectors;not installed. History: 28/10:consulta provincial corrigida em QA,sem instalação;Maputo Agronegócio 0→5;histórico preservado. Histórico: 28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:falta entrega e conferência visual do delta provincial;outros menus não declarados integralmente auditados. Lacuna anterior: 28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-07: Dashboard integral, workflow editorial, métricas e APIs adicionais: reconciliação individual pendente; não criar tabelas paralelas a entidades existentes",P2,V2-07: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-07,1,"[{""id"":""V2-07"",""pedido"":""Menu de gestão preserva rotas e permissões existentes"",""fontes"":[""backlog-mestre.md; § 3.2.3.4–3.2.3.10, p. 2610–3339""],""aceitacao"":""Dashboard integral, workflow editorial, métricas e APIs adicionais: reconciliação individual pendente; não criar tabelas paralelas a entidades existentes"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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.","Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:catalogue_result_presentation;API pública Turismo/Cabo0 versus sector16/Inhambane;2testes SSR,tipos/build;provas nacionais/selector preservadas. Histórico: 28/10:selector_delta em catalogue-province-coverage-qa-20261028.json;4testes de eventos/estado,tipos/build;provas nacionais6/617 reutilizadas. Histórico: 28/10:catalogue-province-coverage-qa-20261028.json;4testes/70verificações,tipos/build/PHP;contexto aprovado em23/10 reutilizado;sem novas publicações/permissões. Evidência anterior: 28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.",perfis,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/DashboardController.php; app/Services/CountryCatalogue.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InvestmentWorkspaceTest, 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.",,, +V2-07,Menu de gestão preserva rotas e permissões existentes,"backlog-mestre.md; § 3.2.3.4–3.2.3.10, p. 2610–3339",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.",28/10:6 tests/617 assertions;shared province/location filters;prior types/build reused. History: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,"28/10:usabilidade/fluxo/formulários e filtro de zonas corrigidos em QA,sem instalação;recusa Turismo/sessão real pendente. Histórico: 28/10:resultados por sector/localização separados do apoio educativo em QA,sem instalação. Histórico: 28/10:selector territorial único em QA,sem instalação;preservação e cobertura nacional mantidas. Histórico: 28/10:national QA;11 provincial units,6 corridors,2 sectors;not installed. History: 28/10:consulta provincial corrigida em QA,sem instalação;Maputo Agronegócio 0→5;histórico preservado. Histórico: 28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:falta entrega e conferência visual do delta provincial;outros menus não declarados integralmente auditados. Lacuna anterior: 28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-07: Dashboard integral, workflow editorial, métricas e APIs adicionais: reconciliação individual pendente; não criar tabelas paralelas a entidades existentes",P2,V2-07: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-07,1,"[{""id"":""V2-07"",""pedido"":""Menu de gestão preserva rotas e permissões existentes"",""fontes"":[""backlog-mestre.md; § 3.2.3.4–3.2.3.10, p. 2610–3339""],""aceitacao"":""Dashboard integral, workflow editorial, métricas e APIs adicionais: reconciliação individual pendente; não criar tabelas paralelas a entidades existentes"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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.","Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:investor-usability-qa-20261028.json;frontend8,feature3/12,tipos/build/PHP;fontes/permissões/histórico preservados;provas anteriores reutilizadas. Histórico: 28/10:catalogue_result_presentation;API pública Turismo/Cabo0 versus sector16/Inhambane;2testes SSR,tipos/build;provas nacionais/selector preservadas. Histórico: 28/10:selector_delta em catalogue-province-coverage-qa-20261028.json;4testes de eventos/estado,tipos/build;provas nacionais6/617 reutilizadas. Histórico: 28/10:catalogue-province-coverage-qa-20261028.json;4testes/70verificações,tipos/build/PHP;contexto aprovado em23/10 reutilizado;sem novas publicações/permissões. Evidência anterior: 28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.",perfis,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/DashboardController.php; app/Services/CountryCatalogue.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InvestmentWorkspaceTest, 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.",,, V2-08,Projetos/clusters/zonas pesquisáveis e fichas navegáveis em QA; esquema territorial ativo constatado,"backlog-mestre.md; § 4.6.1, p. 3740–6267",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.","V2-08: Revisão documental de cada área, limites/polígonos oficiais, disponibilidade, capacidade e histórico; links territoriais existentes não certificam todas as correções propostas",P2,V2-08: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-08,1,"[{""id"":""V2-08"",""pedido"":""Projetos/clusters/zonas pesquisáveis e fichas navegáveis em QA; esquema territorial ativo constatado"",""fontes"":[""backlog-mestre.md; § 4.6.1, p. 3740–6267""],""aceitacao"":""Revisão documental de cada área, limites/polígonos oficiais, disponibilidade, capacidade e histórico; links territoriais existentes não certificam todas as correções propostas"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""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.",,, V2-09,"Nenhum score de sucesso, disponibilidade ou elegibilidade inventado","backlog-mestre.md; § 4.6.1.14–4.6.1.18, p. 4252–6267",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.","V2-09: Validar pesos, lacunas, condicionantes e saídas explicáveis; não executar seeds demonstrativos contra dados ativos",P2,V2-09: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-09,1,"[{""id"":""V2-09"",""pedido"":""Nenhum score de sucesso, disponibilidade ou elegibilidade inventado"",""fontes"":[""backlog-mestre.md; § 4.6.1.14–4.6.1.18, p. 4252–6267""],""aceitacao"":""Validar pesos, lacunas, condicionantes e saídas explicáveis; não executar seeds demonstrativos contra dados ativos"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""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.",,, -V2-10,Menus e preparação não limitados aos pilotos,"backlog-mestre.md; § 4.1–4.7, p. 3646–6994",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.",28/10:6 tests/617 assertions;shared province/location filters;prior types/build reused. History: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,"28/10:resultados por sector/localização separados do apoio educativo em QA,sem instalação. Histórico: 28/10:selector territorial único em QA,sem instalação;preservação e cobertura nacional mantidas. Histórico: 28/10:national QA;11 provincial units,6 corridors,2 sectors;not installed. History: 28/10:consulta provincial corrigida em QA,sem instalação;Maputo Agronegócio 0→5;histórico preservado. Histórico: 28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:falta entrega e conferência visual do delta provincial;outros menus não declarados integralmente auditados. Lacuna anterior: 28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-10: Pilotos reais de agricultura, indústria e turismo; baseline e métricas com consentimento, responsáveis reais e cobertura inclusiva",P2,V2-10: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-10,1,"[{""id"":""V2-10"",""pedido"":""Menus e preparação não limitados aos pilotos"",""fontes"":[""backlog-mestre.md; § 4.1–4.7, p. 3646–6994""],""aceitacao"":""Pilotos reais de agricultura, indústria e turismo; baseline e métricas com consentimento, responsáveis reais e cobertura inclusiva"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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.","Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:catalogue_result_presentation;API pública Turismo/Cabo0 versus sector16/Inhambane;2testes SSR,tipos/build;provas nacionais/selector preservadas. Histórico: 28/10:selector_delta em catalogue-province-coverage-qa-20261028.json;4testes de eventos/estado,tipos/build;provas nacionais6/617 reutilizadas. Histórico: 28/10:catalogue-province-coverage-qa-20261028.json;4testes/70verificações,tipos/build/PHP;contexto aprovado em23/10 reutilizado;sem novas publicações/permissões. Evidência anterior: 28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.",perfis,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/DashboardController.php; app/Services/CountryCatalogue.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InvestmentWorkspaceTest, 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.",,, +V2-10,Menus e preparação não limitados aos pilotos,"backlog-mestre.md; § 4.1–4.7, p. 3646–6994",dashboard/perfis,/api/v1/investment/companies/{id?}; /api/v1/investment/notifications; /api/v1/investment/notifications/{id}/read; /api/v1/investment/profile; /api/v1/investment/submissions/{id}/messages; /api/v1/investment/submissions/{id}/revisions/{version}; /dashboard; /investidor/companies/{id?}; /investidor/manifestacoes/{id}/messages; /investidor/manifestacoes/{id}/revisions/{version}; /investidor/notifications; /investidor/notifications/{id}/read,"Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais. 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.",28/10:6 tests/617 assertions;shared province/location filters;prior types/build reused. History: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,"28/10:usabilidade/fluxo/formulários e filtro de zonas corrigidos em QA,sem instalação;recusa Turismo/sessão real pendente. Histórico: 28/10:resultados por sector/localização separados do apoio educativo em QA,sem instalação. Histórico: 28/10:selector territorial único em QA,sem instalação;preservação e cobertura nacional mantidas. Histórico: 28/10:national QA;11 provincial units,6 corridors,2 sectors;not installed. History: 28/10:consulta provincial corrigida em QA,sem instalação;Maputo Agronegócio 0→5;histórico preservado. Histórico: 28/10:menus 6e8de43a instalados e delta técnico conferido;conferência visual autenticada pendente;aceitações anteriores preservadas. Histórico: 28/10:reorganização implementada/verificada estruturalmente em QA,sem instalação;validação visual/sessão real pendente;âmbito anterior preservado. Histórico: 28/10:revisão de apresentação emQA após relato Tempo;verificação do delta pendente,aceitação anterior preservada no seu âmbito. Histórico: Sem evidência suficiente","28/10:falta entrega e conferência visual do delta provincial;outros menus não declarados integralmente auditados. Lacuna anterior: 28/10:omissões/ocultação corrigidas no código instalado;resta observar a sessão real e responsividade sem presumir perda de permissões. Lacuna anterior: 28/10:omissão de subdestinos e ocultação da área de trabalho corrigidas no candidato QA;falta conferência visual e capacidades reais da sessão,sem presumir perda de permissões. Lacuna histórica: 28/10:confirmadas omissão de subdestinos na barra lateral e ocultação da área de trabalho no menu da conta;props/acesso da sessão real não demonstrados,sem presumir falta de permissões. Lacuna histórica: Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","V2-10: Pilotos reais de agricultura, indústria e turismo; baseline e métricas com consentimento, responsáveis reais e cobertura inclusiva",P2,V2-10: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-10,1,"[{""id"":""V2-10"",""pedido"":""Menus e preparação não limitados aos pilotos"",""fontes"":[""backlog-mestre.md; § 4.1–4.7, p. 3646–6994""],""aceitacao"":""Pilotos reais de agricultura, indústria e turismo; baseline e métricas com consentimento, responsáveis reais e cobertura inclusiva"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""modulo"":""dashboard/perfis""}]",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.investment_accounts: 0 registos; public.investment_company_declarations: 0 registos; public.investment_submissions: 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.","Reutilizar provas existentes; suplementar autorização/revogação/elevação por ação/consumidor, sem sistema paralelo. Critério individual original preservado; cobertura atual ainda não individualizada.","Fortify, PortalProfileAdministration/Access, grants, policies, portal_security_approvals e menus atuais","030000→040000 instalados, seis categorias ON; contas/grants reais concluídos. Autorizações por tipo/org e independência mantidas.",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: perfis. Esforço de código adicional só após lacuna reproduzida.,"28/10:investor-usability-qa-20261028.json;frontend8,feature3/12,tipos/build/PHP;fontes/permissões/histórico preservados;provas anteriores reutilizadas. Histórico: 28/10:catalogue_result_presentation;API pública Turismo/Cabo0 versus sector16/Inhambane;2testes SSR,tipos/build;provas nacionais/selector preservadas. Histórico: 28/10:selector_delta em catalogue-province-coverage-qa-20261028.json;4testes de eventos/estado,tipos/build;provas nacionais6/617 reutilizadas. Histórico: 28/10:catalogue-province-coverage-qa-20261028.json;4testes/70verificações,tipos/build/PHP;contexto aprovado em23/10 reutilizado;sem novas publicações/permissões. Evidência anterior: 28/10:navigation-git-delivery-20261028.json;Git normal,backup/restauro176tabelas,369ficheiros/configuração preservados,base interna preservada,16testes QA reutilizados;prova técnica não equivale a visual. Evidência anterior: 28/10:navigation-reconciliation-qa-20261028.json;inventário antes dos testes,16testes/0falhas,4cenários/todos destinos preservados,tipos/build/PHP;SSR não é prova visual activa;6d147693/dados/fontes/perfis/históricos conservados. Evidência histórica: 28/10:inventário anterior em outputs/navigation-reconciliation-20261028/preservation-before.json;6d147693/base435Gurué e provas aceites preservados;fonteAppSidebar/PortalGroupedMenu/ContentManagement conferida antes dos testes do delta. Evidências anteriores: outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.",perfis,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/DashboardController.php; app/Services/CountryCatalogue.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InvestmentWorkspaceTest, 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.",,, V2-11,Inventário acessível atualizado: 248 ficheiros e 63 anexos incorporados; exemplares de formulários mantidos,"backlog-mestre.md; § 5.1; § 5.2 didática–5.6, p. 7007–7008 e 7191–7558",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.,"V2-11: Reconciliar todo o conteúdo do portal público, guias/árvores, autorização e atualização por ficheiro; inventário local não é crawl integral do site público",P2,V2-11: Estado da primeira entrega; confirmações posteriores permanecem separadas,V2-11,1,"[{""id"":""V2-11"",""pedido"":""Inventário acessível atualizado: 248 ficheiros e 63 anexos incorporados; exemplares de formulários mantidos"",""fontes"":[""backlog-mestre.md; § 5.1; § 5.2 didática–5.6, p. 7007–7008 e 7191–7558""],""aceitacao"":""Reconciliar todo o conteúdo do portal público, guias/árvores, autorização e atualização por ficheiro; inventário local não é crawl integral do site público"",""estado"":""parcial"",""variantes"":""Estado da primeira entrega; confirmações posteriores permanecem separadas"",""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.",,, V2-12,"Validação interna não equivale a licença, aprovação, benefício fiscal ou ato administrativo","backlog-mestre.md; § 6, p. 7559–7687; § 3.2.1, p. 1453–2171 diff --git a/resources/js/components/content-management-entry.tsx b/resources/js/components/content-management-entry.tsx index c3131602..176990fe 100644 --- a/resources/js/components/content-management-entry.tsx +++ b/resources/js/components/content-management-entry.tsx @@ -2,5 +2,5 @@ import { Link, usePage } from '@inertiajs/react'; export default function ContentManagementEntry() { const { contentManagementHref } = usePage<{ contentManagementHref?: string | null }>().props; - return contentManagementHref ? Gestão de conteúdos e oportunidades : null; + return contentManagementHref ? Área de trabalho : null; } diff --git a/resources/js/components/journey-document-resources.tsx b/resources/js/components/journey-document-resources.tsx index 4b5faf9b..3ef2d87c 100644 --- a/resources/js/components/journey-document-resources.tsx +++ b/resources/js/components/journey-document-resources.tsx @@ -1,4 +1,4 @@ -import { Link } from '@inertiajs/react'; +import { Link, usePage } from '@inertiajs/react'; import { useState } from 'react'; import { fiscalPreparationGuide } from '@/lib/fiscal-preparation-guide'; @@ -8,6 +8,8 @@ export function JourneyDocumentResources({ stages?: string[]; }) { const [stage, setStage] = useState(''); + const context=new URL(usePage().url,'https://portal.invalid').searchParams.get('context'); + const preparationHref=context&&/^[a-f0-9-]{36}$/i.test(context)?`/investimentos/${context}/contexto/editar#preparation-questions`:'/investimentos'; function destination(path: string, type?: string) { const query = new URLSearchParams(); if (stage) query.set('stage[0]', stage); @@ -20,8 +22,24 @@ export function JourneyDocumentResources({ className="space-y-3 rounded-xl border border-emerald-200 bg-emerald-50 p-4" >

- Fontes e guias para a jornada + Preencher formulários e preparar documentos

+
+

Pedido de investimento

+

Preencha a preparação digital no dossier existente, reutilizando os dados já guardados.

+ Abrir o formulário no meu dossier +
+

Terra e DUAT

+

Prepare os dados do pedido com os campos do formulário existente.

+ Preencher ou continuar pedido de terra +
+

Pedido de apoio do investidor

+

Identifique-se e preencha o pedido de apoio. Este formulário não é um pedido de autorização de investimento.

+ Preencher pedido de apoio +
+
+

Preparação digital e exemplar oficial são apresentados separadamente. Um guia ou diploma não é um formulário preenchível.

+
Consultar exemplares, fontes e guias

Prepare as etapas em paralelo. A disponibilidade para consulta, a situação jurídica e a utilização numa regra ou cálculo são @@ -143,6 +161,7 @@ export function JourneyDocumentResources({ Explorar todo o acervo autorizado +

); } diff --git a/resources/js/components/opportunity-canonical-fields.tsx b/resources/js/components/opportunity-canonical-fields.tsx index 8c766ab6..4fe4a178 100644 --- a/resources/js/components/opportunity-canonical-fields.tsx +++ b/resources/js/components/opportunity-canonical-fields.tsx @@ -7,6 +7,9 @@ import { valueText } from '@/lib/value-text'; import OpportunityParcelGeometry from './opportunity-parcel-geometry'; import TerritoryGeometryPreview from './territory-geometry-preview'; import { control } from '@/pages/management/shared'; +import OpportunityFillFlow from './opportunity-fill-flow'; +import { opportunityFillGroups } from '@/lib/opportunity-fill-flow'; +import { modalityLabels } from './opportunity-search-filters'; type Data = Record; type Schema = { @@ -241,6 +244,11 @@ const labels: Record = { assessment_status: 'Estado da avaliação', environmental_category: 'Categoria ambiental', direct_jobs: 'Empregos diretos', + indirect_jobs: 'Empregos indirectos', + female_percentage: 'Participação de mulheres (%)', + youth_percentage: 'Participação de jovens (%)', + social_risks: 'Riscos sociais', + mitigation_plan: 'Plano de mitigação', employment_type: 'Tipo de emprego', geometry: 'Geometria da parcela', start_date: 'Data de início', @@ -621,6 +629,8 @@ export default function OpportunityCanonicalFields({ sectors, disabled = false, errors = {}, + onOpenResources, + missingPaths, }: { value: Data; onChange: (v: Data) => void; @@ -631,6 +641,8 @@ export default function OpportunityCanonicalFields({ sectors: { id: number; name: string }[]; disabled?: boolean; errors?: Record; + onOpenResources?: (group: string) => void; + missingPaths?: string[]; }) { const initiative = (value.initiative ?? {}) as Data; const isInitiative = category === 'investment_project' && ['program', 'portfolio'].includes(valueText(initiative.kind ?? '')); @@ -815,7 +827,7 @@ export default function OpportunityCanonicalFields({ : ['classified_other']; return (
- Contrato da oportunidade — {category} + Preparar oportunidade — {modalityLabels[category] ?? 'Modalidade por escolher'}

O rascunho pode ficar incompleto. A submissão verifica os campos aplicáveis e os recursos guardados. Validação interna não @@ -870,7 +882,7 @@ export default function OpportunityCanonicalFields({ } )} - {[...new Set([...common, ...specialized])].map((key) => { + !ignoredFields.includes(key)))} errors={errors} missingPaths={missingPaths} onOpenResources={onOpenResources} renderField={(key) => { if (ignoredFields.includes(key)) return null; if (key === 'relations' && options.classification) { @@ -1167,7 +1179,7 @@ export default function OpportunityCanonicalFields({ onChange={(v) => set(key, v)} /> ) : null; - })} + }} />

); } diff --git a/resources/js/components/opportunity-fill-flow.tsx b/resources/js/components/opportunity-fill-flow.tsx new file mode 100644 index 00000000..e567c010 --- /dev/null +++ b/resources/js/components/opportunity-fill-flow.tsx @@ -0,0 +1,51 @@ +import { useEffect, useRef, useState, type ReactNode } from 'react'; +import { opportunityErrorGroup, opportunityMissingGroups, type FillGroup } from '@/lib/opportunity-fill-flow'; + +export default function OpportunityFillFlow({groups,errors,renderField,onOpenResources,missingPaths=[]}:{ + groups:FillGroup[];errors:Record;renderField:(field:string)=>ReactNode;onOpenResources?:(group:string)=>void; + missingPaths?:string[]; +}) { + const [active,setActive]=useState(groups[0]?.id??''); + const groupIds=groups.map(group=>group.id).join(','); + useEffect(()=>{ + const saved=window.location.hash.replace('#fill-',''); + if(groupIds.split(',').includes(saved))setActive(saved); + },[groupIds]); + const heading=useRef(null); + const errorGroup=opportunityErrorGroup(groups,errors); + const missing=opportunityMissingGroups(groups,missingPaths); + const errorKey=JSON.stringify(errors); + useEffect(()=>{if(errorGroup)setActive(errorGroup);},[errorGroup,errorKey]); + const index=Math.max(0,groups.findIndex(group=>group.id===active)); + const current=groups[index]; + if(!current)return null; + const go=(id:string)=>{ + setActive(id); + window.history.replaceState(window.history.state,'',`#fill-${id}`); + requestAnimationFrame(()=>heading.current?.focus()); + }; + return
+

Pode escolher qualquer grupo, guardar incompleto e retomar. As informações já preenchidas mantêm-se ao avançar e regressar.

+ + {missing.length>0&&

Pendências da última gravação: {missing.map(group=>group.title).join(' · ')}. Guarde para actualizar esta indicação.

} +

{current.title}

+

{current.hint}

+ {groups.map(group=>)} +
+ Grupo {index+1} de {groups.length} · navegação livre +
+ {index>0&&{event.preventDefault();go(groups[index-1].id);}}>Anterior} + {index{event.preventDefault();go(groups[index+1].id);}}>Continuar: {groups[index+1].title}} +
+
+
; +} diff --git a/resources/js/components/private-investment-preparation.tsx b/resources/js/components/private-investment-preparation.tsx index 71f4992a..db271856 100644 --- a/resources/js/components/private-investment-preparation.tsx +++ b/resources/js/components/private-investment-preparation.tsx @@ -73,6 +73,8 @@ export function PreparationSummary({

Preparar o pedido de investimento privado

+ {caseId&&

Preencher ou continuar o formulário

} +
Consultar situação, documentos e fundamentos {!data.enabled ? (

Use os dados deste dossier para identificar o pedido e os @@ -219,10 +221,11 @@ export function PreparationSummary({ className="underline" href={`/investimentos/${caseId}/contexto/editar#preparation-questions`} > - Completar apenas os dados em falta ou editar declarações + Editar os dados do formulário

)} +
); } diff --git a/resources/js/components/profile-navigation.tsx b/resources/js/components/profile-navigation.tsx index e5b03492..21a33b37 100644 --- a/resources/js/components/profile-navigation.tsx +++ b/resources/js/components/profile-navigation.tsx @@ -28,7 +28,7 @@ export function profileLinks(access: ProfileAccess | null | undefined) { ...(access.administration ? [ { - title: 'Instalação dos perfis 040000', + title: 'Configuração dos perfis', href: '/management/profile-install', }, ] @@ -41,16 +41,26 @@ export default function ProfileNavigation() { profileAccess?: ProfileAccess | null; }>().props; if (!profileAccess) return null; + const links = profileLinks(profileAccess); + const workHrefs = [profileAccess.mine, profileAccess.create, profileAccess.review].filter(Boolean); + const work = links.filter((link) => workHrefs.includes(link.href)); + const access = links.filter((link) => !workHrefs.includes(link.href)); return ( ); } diff --git a/resources/js/components/profile-proof-picker.tsx b/resources/js/components/profile-proof-picker.tsx new file mode 100644 index 00000000..d7d7af36 --- /dev/null +++ b/resources/js/components/profile-proof-picker.tsx @@ -0,0 +1,33 @@ +import { useState } from 'react'; + +export default function ProfileProofPicker({documents,value,onChange,disabled=false}:{ + documents:{id:string;file_name:string}[];value:string[];onChange:(ids:string[])=>void;disabled?:boolean; +}) { + const [query,setQuery]=useState(''); + const [showAll,setShowAll]=useState(false); + const [limit,setLimit]=useState(10); + const normalize=(text:string)=>text.normalize('NFD').replace(/\p{Diacritic}/gu,'').toLocaleLowerCase(); + const matches=documents.filter(document=>normalize(document.file_name).includes(normalize(query))); + const toggle=(id:string)=>onChange(value.includes(id)?value.filter(item=>item!==id):[...value,id]); + return
+ Escolher comprovativos +

Escolha os seus documentos que sustentam este pedido. A lista contém ficheiros próprios com análise antimalware concluída; não confirma a sua adequação como comprovativo.

+

{value.length} comprovativos escolhidos

+ {value.map(id=>
+ {documents.find(document=>document.id===id)?.file_name??'Ficheiro seleccionado indisponível nesta consulta'} + +
)} + + + {(query||showAll)&&
+

{matches.length} ficheiros encontrados · a mostrar até {Math.min(limit,matches.length)}

+ {matches.slice(0,limit).map(document=>)} + {matches.length>limit&&} +
} +
; +} diff --git a/resources/js/components/search-feedback.tsx b/resources/js/components/search-feedback.tsx index cc1d5f59..48569938 100644 --- a/resources/js/components/search-feedback.tsx +++ b/resources/js/components/search-feedback.tsx @@ -50,7 +50,7 @@ function count(props: Record): number | null { } export default function SearchFeedback() { const page = usePage(); - const handledLocally = page.component === 'investment/catalogue'; + const handledLocally = ['investment/catalogue', 'investment/zones'].includes(page.component); const [state, setState] = useState<'idle' | 'loading' | 'error'>('idle'); const latest = useRef<{ url: string; diff --git a/resources/js/lib/opportunity-fill-flow.ts b/resources/js/lib/opportunity-fill-flow.ts new file mode 100644 index 00000000..1cbe3924 --- /dev/null +++ b/resources/js/lib/opportunity-fill-flow.ts @@ -0,0 +1,40 @@ +export type FillGroup = { id: string; title: string; hint: string; fields: string[] }; +const definitions: Omit[] = [ + {id:'idea',title:'Ideia e actividade',hint:'Identifique o investimento e descreva a necessidade que pretende responder.'}, + {id:'people',title:'Promotor e contactos',hint:'Reutilize os contactos guardados e escolha o que pode ser divulgado.'}, + {id:'territory',title:'Localização e enquadramento',hint:'Indique o território conhecido e as associações documentadas que se aplicam.'}, + {id:'operation',title:'Actividade e impacto',hint:'Complete os produtos, recursos, mercados e impactos relevantes para esta oportunidade.'}, + {id:'finance',title:'Investimento e financiamento',hint:'Preencha os valores conhecidos. O rascunho pode continuar incompleto.'}, + {id:'evidence',title:'Documentos e imagens',hint:'Reutilize os recursos guardados na mesma oportunidade.'}, + {id:'specific',title:'Dados específicos',hint:'Preencha os detalhes aplicáveis à modalidade escolhida.'}, + {id:'review',title:'Revisão e divulgação',hint:'Reveja riscos, condições e visibilidade antes das acções autorizadas de submissão.'}, +]; +const fields: Record = { + idea:['official_title','sector_id','subsector_id','economic_activity_id','executive_summary','demand_statement','opportunity_type','maturity_stage','enterprise_size'], + people:['promoter_type','internal_contact_id','publish_contact','public_contact_id'], + territory:['location_mode','geographic_scope','multi_district_rationale','locations','relations'], + operation:['investment_modalities','investor_profiles','products','assets','inputs','markets','competitive_advantage','employment','impact_indicators'], + finance:['total_investment','currency','investment_breakdown','secured_financing','funding_sought','financial_indicators'], + evidence:['documents','evidences','images'], + review:['publication_languages','visibility','review_due_date','truth_declaration','milestones','licenses','environmental_social','risks'], +}; + +/** Presentation groups only: retain every applicable field exactly once, including future schema keys. */ +export function opportunityFillGroups(available: string[]): FillGroup[] { + const unique=[...new Set(available)]; + return definitions.map(group=>({...group,fields:unique.filter(field=>{ + const owner=Object.keys(fields).find(key=>fields[key].includes(field))??'specific'; + return owner===group.id; + })})).filter(group=>group.fields.length>0); +} + +export function opportunityErrorGroup(groups: FillGroup[], errors: Record): string | undefined { + return groups.find(group=>group.fields.some(field=>Object.keys(errors).some(path=>path===`canonical.${field}`||path.startsWith(`canonical.${field}.`))))?.id; +} + +export function opportunityMissingGroups(groups:FillGroup[], paths:string[]):FillGroup[] { + return groups.filter(group=>group.fields.some(field=>paths.some(path=>{ + const normalized=path.replace(/^canonical\./,''); + return normalized===field||normalized.startsWith(`${field}.`); + }))); +} diff --git a/resources/js/lib/territorial-search-params.ts b/resources/js/lib/territorial-search-params.ts new file mode 100644 index 00000000..b0641d91 --- /dev/null +++ b/resources/js/lib/territorial-search-params.ts @@ -0,0 +1,11 @@ +const territoryKeys=['province_id','district_id','admin_post_id','locality_id']; +/** No fallback scope: an explicit empty path means all; a selected path replaces its old descendants. */ +export function territorialSearchParams(entries: Iterable<[string,FormDataEntryValue]>, path?: {id:string;location_type:string}[]): URLSearchParams { + const params=new URLSearchParams(); + for(const [key,value] of entries)if(typeof value==='string'&&value!==''&&key!=='page')params.set(key,value); + if(path){ + territoryKeys.forEach(key=>params.delete(key)); + for(const node of path){const key=`${node.location_type}_id`;if(territoryKeys.includes(key))params.set(key,node.id);} + } + return params; +} diff --git a/resources/js/pages/investment/zones.tsx b/resources/js/pages/investment/zones.tsx index fee63477..3f079332 100644 --- a/resources/js/pages/investment/zones.tsx +++ b/resources/js/pages/investment/zones.tsx @@ -3,7 +3,9 @@ import InvestmentZoneInstallation, { } from '@/components/investment-zone-installation'; import { Link, router, usePage } from '@inertiajs/react'; import { searchTerritoryHref } from '@/lib/search-territory'; -import { useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; +import { territorialSearchParams } from '@/lib/territorial-search-params'; +import CatalogueFilterContext from '@/components/catalogue-filter-context'; import { catalogueDetailHref } from '@/lib/catalogue-context'; import { TerritoryFields, @@ -77,6 +79,10 @@ export default function Zones({ total: number; next_page_url: string | null; prev_page_url: string | null; + from?: number | null; + to?: number | null; + current_page?: number; + last_page?: number; }; filters: { q?: string; @@ -94,6 +100,30 @@ export default function Zones({ const pageUrl = usePage().url; const [error, setError] = useState(''); const [busy, setBusy] = useState(false); + const searchForm=useRef(null); + const searchTimer=useRef|undefined>(undefined); + const cancelSearch=useRef<(()=>void)|undefined>(undefined); + const searchSequence=useRef(0); + const [searching,setSearching]=useState(false); + const [searchError,setSearchError]=useState(''); + const appliedKey=JSON.stringify([filters,territorySelection]); + useEffect(()=>{searchForm.current?.reset();},[appliedKey]); + useEffect(()=>()=>{clearTimeout(searchTimer.current);cancelSearch.current?.();},[]); + const runSearch=(path?:TerritoryOption[])=>{ + clearTimeout(searchTimer.current);cancelSearch.current?.(); + if(!searchForm.current)return; + const sequence=++searchSequence.current; + const params=territorialSearchParams(new FormData(searchForm.current),path); + setSearching(true);setSearchError(''); + router.get(`${management?'/management/investment/zones':'/zonas'}?${params}`,{}, { + preserveState:true,preserveScroll:true,replace:true, + onCancelToken:token=>{cancelSearch.current=()=>token.cancel();}, + onError:()=>{if(sequence===searchSequence.current)setSearchError('A pesquisa não foi concluída. Confira os filtros e tente novamente.');}, + onNetworkError:()=>{if(sequence===searchSequence.current)setSearchError('Ligação indisponível. Os filtros escolhidos foram preservados.');return false;}, + onHttpException:()=>{if(sequence===searchSequence.current)setSearchError('Não foi possível consultar esta selecção.');return false;}, + onFinish:()=>{if(sequence===searchSequence.current)setSearching(false);}, + }); + }; const exportParams = new URLSearchParams(); ['province_id', 'district_id', 'admin_post_id', 'locality_id'].forEach((field, index) => { if (territorySelection[index]) exportParams.set(field, territorySelection[index].id); @@ -160,22 +190,18 @@ export default function Zones({ +
{ + if(!event.target.getAttribute('name'))return; + clearTimeout(searchTimer.current);cancelSearch.current?.();searchSequence.current++; + setSearching(true);setSearchError('');searchTimer.current=setTimeout(()=>runSearch(),350); + }} onSubmit={(event) => { event.preventDefault(); - const form = event.currentTarget; - const url = new URL(form.action); - const params = new URLSearchParams(); - for (const [name, value] of new FormData(form)) - if (typeof value === 'string') - params.append(name, value); - url.search = params.toString(); - router.get( - url.toString(), - {}, - { preserveState: true, preserveScroll: true }, - ); + runSearch(); }} className={card + ' grid gap-4 md:grid-cols-3'} > @@ -307,10 +333,14 @@ export default function Zones({ )} - + runSearch(path)} /> + - {!management && ( +

{searching?'A pesquisar a selecção…':searchError?'Pesquisa por concluir':`${records.total} registos disponíveis · ${territorySelection.length?territorySelection.map(node=>node.name).join(' / '):'Todo o território'}`}

+ {!searching&&!searchError&&records.total>0&&

A mostrar {records.from??1} a {records.to??records.data.length} de {records.total}. Página {records.current_page??1} de {records.last_page??1}.

} + {searchError&&

{searchError}

} + {!management && !searching && !searchError && ( )} - {!records.total && ( + {!searching && !searchError && !records.total && (

Não foram encontrados resultados para esta pesquisa.

)} - {records.data.map((zone) => ( + {!searching && !searchError && records.data.map((zone) => (

))} diff --git a/resources/js/pages/investor-path/show.tsx b/resources/js/pages/investor-path/show.tsx index 49f889ad..dc40d94c 100644 --- a/resources/js/pages/investor-path/show.tsx +++ b/resources/js/pages/investor-path/show.tsx @@ -171,10 +171,8 @@ function Stage({ step, path }: { step: Step; path: Path }) { ]; const states = path.canWrite ? ownerStates : reviewStates; return ( -
-

- {step.code} · {step.title} -

+
+ {step.title} · {pathStates[step.state]}

{pathStates[step.state]}

{step.context_review_required && (
+ ); } @@ -718,10 +717,10 @@ export default function InvestmentPath(path: Path) { )} {Object.entries(path.phases).filter(([number]) => path.steps.some((step) => step.phase === Number(number) && step.preparation_allowed)).map(([number, label]) => ( -
-

+
step.phase===Number(number)&&step.code===path.next?.code)} className="space-y-3 rounded border p-4" key={number}> + Fase {number} · {label} -

+
{path.steps .filter((step) => step.phase === Number(number) && step.preparation_allowed) @@ -733,7 +732,7 @@ export default function InvestmentPath(path: Path) { /> ))}
-
+ ))}

@@ -819,10 +818,10 @@ export default function InvestmentPath(path: Path) { Anexar ou conferir no Balcão

-
-

+
+ Acompanhamento interno -

+ {path.canWrite && (
))} -
+ ); } diff --git a/resources/js/pages/management/opportunity-draft.tsx b/resources/js/pages/management/opportunity-draft.tsx index 7706f330..2c70305d 100644 --- a/resources/js/pages/management/opportunity-draft.tsx +++ b/resources/js/pages/management/opportunity-draft.tsx @@ -141,6 +141,7 @@ export default function OpportunityDraft({ canEditDraft?: boolean; }>().props; const proactiveEntryUrl=usePage().url; + const uniquePromoterContext=profileAccess?.contexts.length===1?profileAccess.contexts[0]:undefined; const [data, setData] = useState({ ...values, ...(!record && !values.proactive && new URLSearchParams(proactiveEntryUrl.split('?')[1]??'').get('analysis')==='proactive' ? {proactive:newProactive()} : {}), @@ -150,10 +151,10 @@ export default function OpportunityDraft({ ? (profileOrganization ?? null) : profileAccess?.internalPromoter ? null - : (profileAccess?.contexts[0]?.organization_id ?? null), + : (uniquePromoterContext?.organization_id ?? null), opportunity_category: values.opportunity_category ?? - profileAccess?.contexts[0]?.type ?? + uniquePromoterContext?.type ?? '', } : {}), @@ -173,10 +174,11 @@ export default function OpportunityDraft({ const unavailable = Boolean( record?.deleted_at || record?.status === 'archived', ); + const hasCanonicalPreparation = profileMode && canonicalOptions && Boolean(data.opportunity_category) && !data.proactive; const archiveAvailable = Boolean(usePage().props.opportunityManagement); const set = (key: string, value: string) => setData((d) => ({ ...d, [key]: value })); - async function send(action: 'save' | 'delete' | 'archive' | 'restore') { + async function send(action: 'save' | 'delete' | 'archive' | 'restore', resourcesGroup?: string) { if (busy) return; setBusy(true); setErrors({}); @@ -224,8 +226,10 @@ export default function OpportunityDraft({ } setMessage(result.message); if (result.etag) setToken(result.etag); - if (!record) router.visit(`${basePath}/${result.id}/edit`); + if (resourcesGroup) router.visit(`${basePath}/${record?.id ?? result.id}/resources?return_group=${encodeURIComponent(resourcesGroup)}`); + else if (!record) router.visit(`${basePath}/${result.id}/edit${window.location.hash.startsWith('#fill-') ? window.location.hash : ''}`); else if (action !== 'save') router.reload(); + else if (profileMode) router.reload({only:['canonicalResponse','etag','history','workflowState','profileContext']}); } catch { setMessage( 'Resposta indisponível. Os dados foram preservados; confira o registo no servidor antes de repetir.', @@ -237,10 +241,8 @@ export default function OpportunityDraft({ document.querySelector( '[data-association-index][aria-invalid="true"]', ); - ( - invalidAssociation ?? - document.getElementById('opportunity-result') - )?.focus(); + if (invalidAssociation) invalidAssociation.focus(); + else document.getElementById('opportunity-result')?.focus({preventScroll:true}); }); } } @@ -252,9 +254,7 @@ export default function OpportunityDraft({ : 'Nova oportunidade' } > - - {profileMode ? 'Minhas oportunidades' : 'Voltar à gestão'} - + {!profileMode && Voltar à gestão} {promotionHref && Divulgação promocional — Em preparação} {!!profileContext?.corridor_agribusiness && (
@@ -273,11 +273,11 @@ export default function OpportunityDraft({ )} {profileMode && ( -
-

Âmbito desta entrega

+ Modalidades disponíveis e condições de submissão

Seis categorias base: projeto de investimento, imobiliário, fundiário, venda de negócio, parceria e @@ -306,7 +306,7 @@ export default function OpportunityDraft({ certifica a viabilidade, a titularidade ou a decisão externa de cada caso.

-
+ )} {profileMode && record && ( @@ -336,8 +336,8 @@ export default function OpportunityDraft({ })); }} > - {profileAccess?.internalPromoter && ( - )} @@ -823,7 +823,7 @@ export default function OpportunityDraft({ )} {!readOnly && ( <> - @@ -834,8 +834,8 @@ export default function OpportunityDraft({ minLength={20} maxLength={1000} /> - - {!unavailable && ( + } + {!unavailable && !hasCanonicalPreparation && ( @@ -893,7 +893,7 @@ export default function OpportunityDraft({ )} - {record && ( + {record && (!profileMode || readOnly || unavailable || !canonicalOptions || !data.opportunity_category) && ( )} - {profileMode && canonicalOptions && ( + {profileMode && canonicalOptions && Boolean(data.opportunity_category) && (
{record && !readOnly && !unavailable && ( - Acrescentar um contacto à oportunidade + /> )} void send('save',group) : undefined} /> - {!readOnly && !unavailable && ( + {!readOnly && !unavailable && hasCanonicalPreparation && ( +
+ +