From 72262875260815bbb21d04ba31fd99f1e607b825 Mon Sep 17 00:00:00 2001
From: nala
Date: Fri, 23 Oct 2026 12:29:26 +0200
Subject: [PATCH] fix: keep opportunity preparation focused on the pending
selection
---
.../unification/traceability-and-manual.md | 8 +++
.../investment-context-assessment.tsx | 49 ++++++-------------
.../js/pages/investor-path/context-start.tsx | 4 +-
resources/js/pages/investor-path/context.tsx | 27 ++++------
.../InvestmentOpportunityChoicesTest.php | 14 ++++++
5 files changed, 47 insertions(+), 55 deletions(-)
diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md
index e7ba47ec..09cd518e 100644
--- a/docs/investmoz/unification/traceability-and-manual.md
+++ b/docs/investmoz/unification/traceability-and-manual.md
@@ -1,5 +1,13 @@
# Rastreabilidade, utilização e formação
+## Continuidade entre escolha e preparação — 23/10/2026
+
+Falha reportada pela Tempo: depois de criar o dossier para Florestas/Beira, o editor começava por uma avaliação do estado ainda não confirmado (`contexto v0`). A escolha solicitada vinha separadamente em `source`/`requestedChoices`; não era outro investimento, mas a avaliação do estado guardado vazio. A ligação do quadro voltava ao editor sem os parâmetros da escolha pendente, permitindo perder essa referência antes de confirmar. Não foi identificada nem corrigida por escrita uma troca de dados entre dossiers.
+
+O editor passa a começar por **Preparar investimento**, pela oportunidade e pela localização por ficha. Retirado o quadro de avaliação do estado guardado deste ecrã de edição, incluindo a ligação que descartava a escolha pendente. Requisitos guardados só são apresentados quando correspondem às escolhas que estão no formulário. Botões coerentes: **Criar dossier e preparar investimento**, **Rever dados antes de guardar**, **Guardar dados do investimento**. A confirmação continua necessária para guardar alterações; abrir uma referência não altera o dossier.
+
+Nos consumidores de avaliação, retirados números internos de contexto/versão, explicações de implementação, quadro genérico de ausência de zona e elementos sem título na lista de etapas. Mantidas condições úteis, fontes oficiais e limites efectivos do simulador. O exemplo real foi recuperado por GET com `source=opportunity:53` no dossier indicado pela Tempo, sem guardar ou criar dados. Teste QA isolado: 20 asserções sobre recuperação da escolha e igualdade do contexto antes/depois da abertura. Tipos e build conferidos; sem migrations ou alterações de cálculo, autorização ou dados activos.
+
## Dossier orientado ao investidor — 23/10/2026
Correcção da apresentação solicitada pela Tempo: o componente partilhado de documentos do contexto mostrava, por defeito, identidade técnica, versões, hashes, notas de permissões e mensagens de ausência de suporte. Era reutilizado na entrada, edição e consulta do dossier; a entrada repetia ainda a mesma oportunidade num bloco de origem técnica.
diff --git a/resources/js/components/investment-context-assessment.tsx b/resources/js/components/investment-context-assessment.tsx
index a58cf6c2..06e0e384 100644
--- a/resources/js/components/investment-context-assessment.tsx
+++ b/resources/js/components/investment-context-assessment.tsx
@@ -61,6 +61,8 @@ export function InvestmentContextAssessment({
if (!snapshot) return null;
const fields = snapshot.fields ?? {};
const zone = snapshot.zone;
+ const steps = (snapshot.path?.steps ?? []).filter(step => !!step.title?.trim());
+ if (!zone && !fields.investor_origin && !fields.tax_residency_country && !snapshot.preparation?.enabled) return null;
const regime = zone?.fields?.investment_regime ?? fields.investment_regime;
const names: Record = {
zee: 'ZEE',
@@ -73,10 +75,9 @@ export function InvestmentContextAssessment({
aria-label="Aplicabilidade ao investimento"
>
- Aplicabilidade ao investimento · contexto v
- {snapshot.context_revision}
+ Condições do investimento
Origem do investidor:{' '}
{{
national: 'nacional',
@@ -84,9 +85,8 @@ export function InvestmentContextAssessment({
mixed: 'misto',
}[fields.investor_origin] ?? 'informação em falta'}
. Residência fiscal declarada:{' '}
- {fields.tax_residency_country || 'informação em falta'}. Estas
- condições são distintas; uma não determina a outra.
-
@@ -162,39 +161,19 @@ export function InvestmentContextAssessment({
)}
- Benefício fiscal deste enquadramento: indeterminado. Não
- existe neste consumidor uma regra executável ligada ao
- reconhecimento e condições da zona. No simulador, o IVA
- disponível corresponde apenas ao cenário geral sem
- benefício, sobre vendas declaradas compatíveis; não
- simula o regime especial. O cenário com benefício e o
- apuramento final estão indisponíveis.
+ Os benefícios desta zona ainda não estão disponíveis no simulador. O cenário geral disponível não inclui benefícios especiais nem apuramento fiscal final.
>
- ) : (
-
- Enquadramento geral de preparação: sem ZEE, ZFI ou parque
- seleccionado. Isso não confirma a elegibilidade para uma
- operação fiscal. O cálculo mantém o âmbito e as exclusões da
- versão publicada.
-
- )}
-
- Confirmado neste quadro significa apenas dado recuperado do
- dossier; declarações e referências não são decisões jurídicas.
- Requisitos específicos não documentados permanecem
- indeterminados.
-
- {step.code} — {step.title}:{' '}
+ {step.title}:{' '}
{step.context_review_required
? 'informação alterada; rever fundamento'
: step.applicability ===
@@ -224,7 +203,7 @@ export function InvestmentContextAssessment({
className="underline"
href={`/investimentos/${contextId}/contexto/editar`}
>
- Alterar contexto e comparar impacto antes de guardar
+ Rever dados do investimento
)}
diff --git a/resources/js/pages/investor-path/context-start.tsx b/resources/js/pages/investor-path/context-start.tsx
index 464860b8..acc341b1 100644
--- a/resources/js/pages/investor-path/context-start.tsx
+++ b/resources/js/pages/investor-path/context-start.tsx
@@ -69,7 +69,7 @@ export default function ContextStart({
>
{step && !source
? 'Abrir ' + step + ' no mesmo dossier'
- : 'Comparar no mesmo dossier'}
+ : 'Preparar neste dossier'}
)}
@@ -120,7 +120,7 @@ export default function ContextStart({
Autorizo reutilizar o meu perfil neste dossier privado.
{error &&
{error}
}
diff --git a/resources/js/pages/investor-path/context.tsx b/resources/js/pages/investor-path/context.tsx
index 682d681a..cfec5571 100644
--- a/resources/js/pages/investor-path/context.tsx
+++ b/resources/js/pages/investor-path/context.tsx
@@ -2,7 +2,6 @@ import {
PreparationEditor,
PreparationImpact,
} from '@/components/private-investment-preparation';
-import { InvestmentContextAssessment } from '@/components/investment-context-assessment';
import ContextDocuments from '@/components/context-documents';
import { Link } from '@inertiajs/react';
import { useState } from 'react';
@@ -167,7 +166,7 @@ export default function ContextEditor({
setPlan(null);
setOperation(createOperationKey());
setMessage(
- 'Contexto guardado no mesmo dossier. Resultados afetados identificados para revisão; conteúdo submetido e histórico preservados.',
+ 'Dados guardados. Pode continuar a preparação do investimento.',
);
} catch (e) {
setError(
@@ -180,28 +179,18 @@ export default function ContextEditor({
}
}
return (
-
-
-
-
+
- Voltar ao mesmo dossier
+ Voltar ao dossier
{view.case.title}
-
- As referências apoiam a preparação. Associar uma
- oportunidade, sector ou localização não confirma incentivos,
- licença, terra disponível, reserva ou autorização.
-
+
Confirme as oportunidades e a localização, complete os dados disponíveis e reveja antes de guardar.