This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/unification/traceability-and-manual.md",
|
||||
"sha256": "e5400717643bde98a3b1e1163c4a4ebd4c6a774a168a3f5430c46cc3f850f5d8"
|
||||
"sha256": "5596aa8edbbeff34a13613ec11f00f49c62e76a8e2185e5762d972fc70b667e7"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/v2/auditoria-portal/backlog-priorizado.csv",
|
||||
@@ -87,7 +87,7 @@
|
||||
},
|
||||
{
|
||||
"path": "resources/js/pages/investment/business-marketplace.tsx",
|
||||
"sha256": "fb6917c095f5ade85f52adeaf1292486627097e4f0daf0211f2b3627620ccd85"
|
||||
"sha256": "f45a56b250bbb5da19613c6b7ad94ba89ea501929f97636c797d92b4a2251b51"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/pages/investment/catalogue.tsx",
|
||||
@@ -107,7 +107,7 @@
|
||||
},
|
||||
{
|
||||
"path": "resources/js/pages/investment/zones.tsx",
|
||||
"sha256": "45244ce4be7e75b4d52c453f90d1764cd4d7a5ab4299d6f0af91c68fbf103ebd"
|
||||
"sha256": "5fecb308c3800f6e2ee266fd8559d2b14bea3214f2ffbeb4b651b86f2bed7ea7"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/pages/portal/services.tsx",
|
||||
@@ -138,7 +138,7 @@
|
||||
"sha256": "f19ff2d17a385ab1f28c65f69233a13d88d6b8b6ec7285848fcd2a945b883ff9"
|
||||
}
|
||||
],
|
||||
"build_manifest_sha256": "2e2113d46d7f89ff94851b88a8d023ca4427d57d4f1361bf9577aef8d3aa64af",
|
||||
"build_manifest_sha256": "da35948622e0754e4ecc25247b8926dfcafa63c4fcb78a94da91a3c6e8b47451",
|
||||
"migrations": [],
|
||||
"data_operations": [],
|
||||
"remote_operations": [],
|
||||
|
||||
@@ -1519,3 +1519,5 @@ Incremento ainda necessário: interpretação delimitada de palavras/sector/geog
|
||||
Rever a branch e o manifesto nominal; reconciliar novos commits dos programadores antes da integração. Após decisão da Tempo, a cadeia Git existente compila a revisão aprovada de fontes e build. Esta execução não envia para `main`, não escreve no servidor e não altera conteúdos, schema, contas, papéis, MFA ou configuração.
|
||||
|
||||
Não há migrations, importação ou publicação neste pacote. A reversão repõe as fontes/build da revisão anterior através da cadeia existente, preservando a base, uploads, referências, permissões e dados posteriores. Os helpers de contexto só transportam query local; não aceitam URL externa como destino de retorno. O manifesto lista fontes e hash do build QA; não inclui `.env`, credenciais, dumps, vendor/node_modules ou fixtures persistentes.
|
||||
|
||||
Conferência final dos consumidores: negócios também conferido no navegador com pesquisa vazia; retirado o resumo local repetido, conservando o resumo partilhado. Fintech é identificado como especialização do Mercado Financeiro também nesse selector. Os cartões de zonas traduzem categoria, desenvolvimento, disponibilidade e estado de actividade, preservando os códigos e significados persistidos. A vista combinada não repete na lista de não localizados a ficha que já aparece na lista principal.
|
||||
|
||||
@@ -165,7 +165,9 @@ export default function BusinessMarketplace({
|
||||
key={option.id}
|
||||
value={String(option.id)}
|
||||
>
|
||||
{option.label}
|
||||
{/fintech/i.test(option.label)
|
||||
? 'Fintech — especialização do Mercado Financeiro'
|
||||
: option.label}
|
||||
</option>
|
||||
),
|
||||
)}
|
||||
@@ -288,21 +290,12 @@ export default function BusinessMarketplace({
|
||||
)}
|
||||
<button className={button}>Pesquisar</button>
|
||||
</form>
|
||||
<p role="status">
|
||||
{results.meta?.total ?? results.data.length} anúncios de
|
||||
negócios publicados
|
||||
</p>
|
||||
{!results.data.length && (
|
||||
<p role="status">
|
||||
Não existem oportunidades publicadas com estes critérios.
|
||||
</p>
|
||||
)}
|
||||
<ul className="grid gap-4 md:grid-cols-2">
|
||||
{results.data.map((record) => (
|
||||
<li className={card} key={record.id}>
|
||||
<p>
|
||||
{businessModalities[record.modality] ??
|
||||
record.modality}
|
||||
'Modalidade por indicar'}
|
||||
</p>
|
||||
<h2 className="text-xl font-bold">
|
||||
<Link
|
||||
|
||||
@@ -182,7 +182,7 @@ export default function Zones({
|
||||
maxLength={120}
|
||||
/>
|
||||
</Field>
|
||||
<Field label="Categoria">
|
||||
<Field label="Grupo">
|
||||
<select
|
||||
className={input}
|
||||
name="category"
|
||||
@@ -196,93 +196,115 @@ export default function Zones({
|
||||
</option>
|
||||
</select>
|
||||
</Field>
|
||||
<Field label="Categoria física">
|
||||
<select
|
||||
className={input}
|
||||
name="physical_category"
|
||||
defaultValue={filters.physical_category ?? ''}
|
||||
>
|
||||
<option value="">Todas</option>
|
||||
<option value="industrial_park">
|
||||
Parque industrial
|
||||
</option>
|
||||
<details className="w-full rounded border p-3">
|
||||
<summary className="cursor-pointer font-semibold">
|
||||
Mais filtros
|
||||
</summary>
|
||||
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
||||
<Field label="Tipo de espaço">
|
||||
<select
|
||||
className={input}
|
||||
name="physical_category"
|
||||
defaultValue={filters.physical_category ?? ''}
|
||||
>
|
||||
<option value="">Todas</option>
|
||||
<option value="industrial_park">
|
||||
Parque industrial
|
||||
</option>
|
||||
{zoneExtensionsAvailable && (
|
||||
<>
|
||||
<option value="agro_industrial_park">
|
||||
Parque agro-industrial
|
||||
</option>
|
||||
<option value="industrial_logistics_park">
|
||||
Parque industrial e logístico
|
||||
</option>
|
||||
</>
|
||||
)}
|
||||
<option value="industrial_free_zone">
|
||||
ZFI
|
||||
</option>
|
||||
<option value="economic_zone">ZEE</option>
|
||||
</select>
|
||||
</Field>
|
||||
<Field label="Actividade documentada">
|
||||
<input
|
||||
className={input}
|
||||
name="activity"
|
||||
defaultValue={filters.activity}
|
||||
maxLength={120}
|
||||
/>
|
||||
</Field>
|
||||
<Field label="Regime jurídico">
|
||||
<select
|
||||
className={input}
|
||||
name="legal_regime"
|
||||
defaultValue={filters.legal_regime ?? ''}
|
||||
>
|
||||
<option value="">Todos</option>
|
||||
<option value="zee">ZEE</option>
|
||||
<option value="zfi">ZFI</option>
|
||||
<option value="general">Regime geral</option>
|
||||
<option value="pending">Por confirmar</option>
|
||||
</select>
|
||||
</Field>
|
||||
{zoneExtensionsAvailable && (
|
||||
<>
|
||||
<option value="agro_industrial_park">
|
||||
Parque agro-industrial
|
||||
</option>
|
||||
<option value="industrial_logistics_park">
|
||||
Parque industrial e logístico
|
||||
</option>
|
||||
</>
|
||||
<Field label="Desenvolvimento">
|
||||
<select
|
||||
className={input}
|
||||
name="development_status"
|
||||
defaultValue={
|
||||
filters.development_status ?? ''
|
||||
}
|
||||
>
|
||||
<option value="">Todos</option>
|
||||
<option value="announced">Anunciado</option>
|
||||
<option value="planned">Planeado</option>
|
||||
<option value="in_development">
|
||||
Em desenvolvimento
|
||||
</option>
|
||||
<option value="partially_operational">
|
||||
Parcialmente operacional
|
||||
</option>
|
||||
<option value="operational">
|
||||
Operacional
|
||||
</option>
|
||||
<option value="unknown">
|
||||
Por confirmar
|
||||
</option>
|
||||
</select>
|
||||
</Field>
|
||||
)}
|
||||
<option value="industrial_free_zone">ZFI</option>
|
||||
<option value="economic_zone">ZEE</option>
|
||||
</select>
|
||||
</Field>
|
||||
<Field label="Actividade documentada">
|
||||
<input
|
||||
className={input}
|
||||
name="activity"
|
||||
defaultValue={filters.activity}
|
||||
maxLength={120}
|
||||
/>
|
||||
</Field>
|
||||
<Field label="Regime jurídico">
|
||||
<select
|
||||
className={input}
|
||||
name="legal_regime"
|
||||
defaultValue={filters.legal_regime ?? ''}
|
||||
>
|
||||
<option value="">Todos</option>
|
||||
<option value="zee">ZEE</option>
|
||||
<option value="zfi">ZFI</option>
|
||||
<option value="general">Regime geral</option>
|
||||
<option value="pending">Por confirmar</option>
|
||||
</select>
|
||||
</Field>
|
||||
{zoneExtensionsAvailable && (
|
||||
<Field label="Desenvolvimento">
|
||||
<select
|
||||
className={input}
|
||||
name="development_status"
|
||||
defaultValue={filters.development_status ?? ''}
|
||||
>
|
||||
<option value="">Todos</option>
|
||||
<option value="announced">Anunciado</option>
|
||||
<option value="planned">Planeado</option>
|
||||
<option value="in_development">
|
||||
Em desenvolvimento
|
||||
</option>
|
||||
<option value="partially_operational">
|
||||
Parcialmente operacional
|
||||
</option>
|
||||
<option value="operational">Operacional</option>
|
||||
<option value="unknown">Por confirmar</option>
|
||||
</select>
|
||||
</Field>
|
||||
)}
|
||||
{zoneExtensionsAvailable && (
|
||||
<Field label="Disponibilidade">
|
||||
<select
|
||||
className={input}
|
||||
name="availability_status"
|
||||
defaultValue={filters.availability_status ?? ''}
|
||||
>
|
||||
<option value="">Todas</option>
|
||||
<option value="confirmed">Confirmada</option>
|
||||
<option value="unavailable">Indisponível</option>
|
||||
<option value="reported_unverified">
|
||||
Reportada, por verificar
|
||||
</option>
|
||||
<option value="not_informed">Não informada</option>
|
||||
</select>
|
||||
</Field>
|
||||
)}
|
||||
{zoneExtensionsAvailable && (
|
||||
<Field label="Disponibilidade">
|
||||
<select
|
||||
className={input}
|
||||
name="availability_status"
|
||||
defaultValue={
|
||||
filters.availability_status ?? ''
|
||||
}
|
||||
>
|
||||
<option value="">Todas</option>
|
||||
<option value="confirmed">
|
||||
Confirmada
|
||||
</option>
|
||||
<option value="unavailable">
|
||||
Indisponível
|
||||
</option>
|
||||
<option value="reported_unverified">
|
||||
Reportada, por verificar
|
||||
</option>
|
||||
<option value="not_informed">
|
||||
Não informada
|
||||
</option>
|
||||
</select>
|
||||
</Field>
|
||||
)}
|
||||
</div>
|
||||
</details>
|
||||
<TerritoryFields initial={territorySelection} />
|
||||
<button className={button}>Pesquisar</button>
|
||||
</form>
|
||||
<p role="status">{records.total} registos disponíveis</p>
|
||||
{!management && (
|
||||
<a
|
||||
className="underline"
|
||||
@@ -327,7 +349,11 @@ export default function Zones({
|
||||
</Link>
|
||||
)}
|
||||
<p>
|
||||
{zone.code} · {zone.category.toUpperCase()} ·{' '}
|
||||
{zone.code} ·{' '}
|
||||
{zone.category === 'industrial_park'
|
||||
? 'Parque industrial'
|
||||
: zone.category.toUpperCase()}{' '}
|
||||
·{' '}
|
||||
{[zone.district, zone.province]
|
||||
.filter(Boolean)
|
||||
.join(', ') || 'Localização por confirmar'}
|
||||
@@ -335,28 +361,24 @@ export default function Zones({
|
||||
{zone.legal_regime && (
|
||||
<p>
|
||||
Regime jurídico:{' '}
|
||||
{zone.category === 'industrial_park'
|
||||
? (parkLabels[zone.legal_regime] ??
|
||||
zone.legal_regime.toUpperCase())
|
||||
: zone.legal_regime.toUpperCase()}
|
||||
{parkLabels[zone.legal_regime] ??
|
||||
(['zee', 'zfi'].includes(zone.legal_regime)
|
||||
? zone.legal_regime.toUpperCase()
|
||||
: 'Por confirmar')}
|
||||
</p>
|
||||
)}
|
||||
{zoneExtensionsAvailable && zone.development_status && (
|
||||
<p>
|
||||
Desenvolvimento:{' '}
|
||||
{zone.category === 'industrial_park'
|
||||
? (parkLabels[zone.development_status] ??
|
||||
'Por confirmar')
|
||||
: zone.development_status.replaceAll('_', ' ')}
|
||||
{parkLabels[zone.development_status] ??
|
||||
'Por confirmar'}
|
||||
</p>
|
||||
)}
|
||||
{zoneExtensionsAvailable && zone.availability_status && (
|
||||
<p>
|
||||
Disponibilidade para instalação:{' '}
|
||||
{zone.category === 'industrial_park'
|
||||
? (parkLabels[zone.availability_status] ??
|
||||
'Não informada')
|
||||
: zone.availability_status.replaceAll('_', ' ')}
|
||||
{parkLabels[zone.availability_status] ??
|
||||
'Não informada'}
|
||||
</p>
|
||||
)}
|
||||
{zone.area_value && (
|
||||
@@ -378,7 +400,7 @@ export default function Zones({
|
||||
{zone.activities
|
||||
.map(
|
||||
(activity) =>
|
||||
`${activity.name} (${activity.status})`,
|
||||
`${activity.name} (${({ potential: 'Potencial referido pela fonte', proposed: 'Proposta', authorized: 'Autorizada por documento', conditional: 'Condicionada', excluded: 'Excluída' } as Record<string, string>)[activity.status] ?? 'Por confirmar'})`,
|
||||
)
|
||||
.join(' · ')}
|
||||
</p>
|
||||
@@ -415,7 +437,7 @@ export default function Zones({
|
||||
</p>
|
||||
)}
|
||||
<p>{zone.description}</p>
|
||||
<p>Validação: {zone.validation_status}</p>
|
||||
{management && <p>Validação: {zone.validation_status}</p>}
|
||||
{management && (
|
||||
<p>
|
||||
Versão {zone.version_no} · {zone.publication_status}
|
||||
|
||||
Reference in New Issue
Block a user