fix: remove internal metadata from investor dossier presentation
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-23 12:18:25 +02:00
parent 3848f29bea
commit 98474777f6
6 changed files with 27 additions and 71 deletions
@@ -1,5 +1,13 @@
# Rastreabilidade, utilização e formação
## 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.
O investidor vê agora a escolha pelo título e respectiva ligação. **Documentos de apoio** só aparece quando existem documentos, com título, edição disponível, referência de secção e consulta do documento. Sem documentos, não se apresenta uma caixa vazia nem uma pendência genérica da biblioteca. Retirados também UUID, motor de cálculo, versões internas e chaves de origem dos resumos, prévia e consulta do dossier. Mantidas as informações operacionais relevantes: escolhas, localização, impactos da alteração, resultados que precisam de revisão, documentos e pedidos identificados por protocolo. As rotas e verificações de acesso são as mesmas; não há mudança de dados, histórico, fontes, permissões, cálculos ou publicações.
Tipos e build passaram. Reproduzido o exemplo Florestas/Beira (`opportunity:53`) na homologação antes da integração, sem criar ou alterar um dossier. Esta é uma correcção de apresentação nos componentes e páginas do percurso, não uma declaração de revisão integral do portal.
## Explorar oportunidades por corredor — 23/10/2026
Disponível e conferido no navegador da homologação, revisão funcional `20349299`: [explorar Agronegócio por corredor](https://teste-investidor.tempo.co.mz/oportunidades?sector=agronegocio&view=corridors). Conferidos os seis grupos, 34 resultados, acesso no início de Agronegócio e escolha dos IDs 54/64 de corredores diferentes, mantida depois do filtro Soja. [Recibo da passagem](agribusiness-corridor-explorer-20261023.json).
+5 -27
View File
@@ -1,4 +1,3 @@
import { Link } from '@inertiajs/react';
import type { ContextReference } from '@/lib/investor-context';
export default function ContextDocuments({
@@ -6,49 +5,28 @@ export default function ContextDocuments({
}: {
source?: ContextReference;
}) {
if (!source) return null;
if (!source?.documents?.length) return null;
return (
<section
aria-label="Fonte e documentos do contexto"
aria-label="Documentos de apoio"
className="space-y-2 rounded border p-4"
>
<h2 className="font-semibold">Fonte e documentos do contexto</h2>
<p>
<Link className="underline" href={source.href}>
{source.title}
</Link>{' '}
· versão da oportunidade {source.version ?? 'não indicada'} ·{' '}
{source.visibility === 'private'
? 'Preparação privada — não publicada'
: 'Referência pública'}
</p>
<h2 className="font-semibold">Documentos de apoio</h2>
{(source.documents ?? []).map((doc) => (
<article
key={doc.support_id}
className="space-y-1 rounded border p-3"
>
<p>
{doc.title} · {doc.edition ?? 'Edição não indicada'} ·
versão documental {doc.document_version} · metadados v
{doc.metadata_version}
{doc.title}{doc.edition ? ` · ${doc.edition}` : ''}
</p>
<p className="break-all">SHA256: {doc.sha256}</p>
{doc.section && <p>Referência utilizada: {doc.section}</p>}
<p>{doc.source_reference}</p>
<a className="underline" href={doc.download_url}>
Consultar original autorizado —{' '}
Consultar documento —{' '}
{doc.edition ?? doc.title}
</a>
</article>
))}
{!source.documents?.length && (
<p>Sem suporte da biblioteca associado nesta versão.</p>
)}
<p>
Referência guardada nesta versão do dossier. A consulta do
original continua sujeita às permissões actuais; esta ligação
não publica nem concede acesso adicional.
</p>
</section>
);
}
@@ -33,14 +33,10 @@ export default function ContextStart({
<ContextDocuments source={source ?? undefined} />
{source && (
<section className={card}>
<h2 className="font-bold">Origem consultada</h2>
<h2 className="font-bold">A sua escolha</h2>
<Link className="underline" href={source.href}>
{source.title}
</Link>
<p>
{source.kind} · v{source.version ?? 'não exposta'} ·{' '}
{source.key}
</p>
</section>
)}
<section className={card + ' space-y-3'}>
+8 -23
View File
@@ -195,8 +195,7 @@ export default function ContextEditor({
Voltar ao mesmo dossier
</Link>
<p>
{view.case.title} · UUID {view.case.id} · dossier v
{view.case.version} · contexto v{view.context.revision}
{view.case.title}
</p>
<p className="rounded border border-emerald-300 bg-emerald-50 p-3">
As referências apoiam a preparação. Associar uma
@@ -379,8 +378,7 @@ export default function ContextEditor({
{view.context.selection.territory && (
<p>
Referência guardada:{' '}
{view.context.selection.territory.title} · v
{view.context.selection.territory.version}.
{view.context.selection.territory.title}
</p>
)}
{manageChoices && <p>Confirme a localização em cada ficha acima; a localização geral não substitui as escolhas individuais.</p>}
@@ -603,7 +601,6 @@ export default function ContextEditor({
Mantido
</th>
<td className="p-2">
UUID, identidade e{' '}
{plan.documents_preserved}{' '}
documentos.{' '}
{plan.maintained.map((x) => (
@@ -648,11 +645,7 @@ export default function ContextEditor({
href={r.href}
>
{r.title}
</Link>{' '}
· {r.kind} · v
{r.version ??
'não exposta'}{' '}
· origem {r.key}
</Link>
</p>
),
)}
@@ -664,14 +657,7 @@ export default function ContextEditor({
</th>
<td className="p-2">
{plan.dependent_results.length}{' '}
resultados financeiros acessíveis
afetados:{' '}
{plan.dependent_results
.map((r) => r.id)
.join(', ') || 'nenhum'}
. Etapas:{' '}
{plan.review_steps.join(', ') ||
'nenhuma alteração de dependências'}
resultados financeiros afectados. Etapas a rever: {plan.review_steps.length}
. Dados já preenchidos nos
formulários conservam-se até à sua
conferência.
@@ -683,12 +669,11 @@ export default function ContextEditor({
</th>
<td className="p-2">
{plan.requests.length} pedidos e os
snapshots, decisões e resultados
dados, decisões e resultados
anteriores.{' '}
{plan.requests.map((r) => (
<p key={r.id}>
{r.protocol || r.id} · v
{r.version} · {r.status}
{r.protocol || 'Pedido guardado'}
</p>
))}
</td>
@@ -732,7 +717,7 @@ export default function ContextEditor({
</h2>
{view.results.map((r) => (
<p key={r.id}>
{r.id} · {r.engine} ·{' '}
Resultado guardado —{' '}
{r.context_state === 'review_required'
? 'Desatualizado para o contexto atual — exige revisão/recálculo'
: 'Guardado para o contexto indicado no dossier'}
@@ -744,7 +729,7 @@ export default function ContextEditor({
className="underline"
href={'/balcao-virtual/pedidos/' + r.id}
>
{r.protocol || r.id}
{r.protocol || 'Consultar pedido'}
</Link>{' '}
· {r.status} ·{' '}
{r.context_state === 'historical_submission'
+2 -2
View File
@@ -36,7 +36,7 @@ export default function InvestmentContexts({
<main className="mx-auto max-w-5xl space-y-6 p-4 md:p-8">
<Head title="Os meus investimentos" />
<h1 className="text-2xl font-semibold">Os meus investimentos</h1>
{zoneSource && <section className="rounded border p-4"><h2>Parque consultado: {zoneSource.title} · versão {zoneSource.consulted_public_version}</h2><p>{zoneSource.notice}</p><Link className="underline" href={zoneSource.href}>Voltar à ficha pública</Link></section>}
{zoneSource && <section className="rounded border p-4"><h2>Parque escolhido: {zoneSource.title}</h2><Link className="underline" href={zoneSource.href}>Consultar parque</Link></section>}
{sectorSource && (
<p>
Preparar uma ideia em{' '}
@@ -53,7 +53,7 @@ export default function InvestmentContexts({
<Link className="underline" href={contentSource.href}>
{contentSource.title}
</Link>
. A fonte e a versão serão guardadas no dossier escolhido.
.
</p>
)}
<p>
+3 -14
View File
@@ -119,12 +119,9 @@ function Result({ result }: { result: PathResult }) {
</p>
<p className="text-sm">
Estimativa recalculada pelas fórmulas da ferramenta a partir
das entradas guardadas, versão {result.draft_version}. Não
dos dados preenchidos. Não
constitui decisão de financiamento.
</p>
<p className="text-xs break-all">
Evidência {result.id} · {result.engine}
</p>
</li>
);
} catch (error) {
@@ -451,16 +448,14 @@ export default function InvestmentPath(path: Path) {
{path.investment_context && (
<section className="space-y-2 rounded border border-emerald-300 bg-emerald-50 p-4">
<h2 className="font-semibold">
Contexto atual — revisão{' '}
{path.investment_context.revision}
As suas escolhas
</h2>
{Object.values(path.investment_context.selection).map(
(ref) => (
<p key={ref.key}>
<Link className="underline" href={ref.href}>
{ref.title}
</Link>{' '}
· versão {ref.version ?? 'não exposta'}
</Link>
</p>
),
)}
@@ -492,15 +487,9 @@ export default function InvestmentPath(path: Path) {
{zone.title}
</Link>
<p>
UUID {zone.zone_id} · versão consultada{' '}
{zone.consulted_public_version} ·{' '}
{zone.selected_at}
</p>
<p>{zone.notice}</p>
<p>
A ficha atual pode ter uma versão diferente;
esta referência conserva a consulta registada.
</p>
</article>
))}
</section>