34 lines
5.5 KiB
Markdown
34 lines
5.5 KiB
Markdown
# Cartografia interactiva — execução e cobertura
|
|
|
|
29/09/2026. **Critério integral do prompt ainda não atingido.** Há mapa interactivo implementado, mas nenhuma das seis oportunidades públicas tem coordenadas de local na base. O inventário não contém geometrias de investimento ou de zona. O Excel fornece códigos/designações administrativos, não posições de projectos. O documento da carteira inclui programas nacionais e traçados dependentes de estudos; não permite deduzir uma posição exacta de cada investimento.
|
|
|
|
## Implementado
|
|
|
|
- `InteractiveInvestmentMap`: Leaflet 1.9.4 com arrastamento, zoom, teclado, toque, escala, marcadores individuais e popups construídos por DOM/textContent; não interpola nomes em HTML. Popup inclui nome, sector, localização, corredores, clusters, projectos âncora e ligação à ficha. A lista acessível selecciona e centra o marcador correspondente.
|
|
- Substituído o SVG estático do catálogo. O mapa fica visível com as vistas de resultados; alterações de pesquisa/filtros desencadeiam navegação Inertia com debounce de 350 ms, sem recarregamento integral. Pedidos anteriores são cancelados; carregamento não mantém a lista de ausências de uma consulta anterior.
|
|
- Componente comum integrado no catálogo, ficha pública de oportunidade, dossiers de clusters/corredores/projectos e fichas de ZEE/ZFI/parques. Consulta a mesma API e as mesmas regras de publicação. A vista geométrica de limites das zonas continua separada; não foi transformada em georreferenciação de oportunidades.
|
|
- `/api/v1/investment/map` reutiliza filtros do catálogo, devolve metadados relacionais públicos e reconcilia `matched_count`, `georeferenced_count`, `unlocated`, `truncated` e `complete`. Não confunde centróide provincial com local de investimento. Só geometrias pontuais de locais (`site`) públicos, válidos, WGS84, activos e com ascendentes públicos são elegíveis.
|
|
- Um marcador por oportunidade; quando existem vários locais elegíveis, a edição explícita da posição tem precedência sobre os locais legados, seguindo-se ordem estável de UUID. As geometrias legadas não são apagadas. Não se deslocam coordenadas para separar marcadores coincidentes; cada um continua acessível na lista.
|
|
- Formulário **Posição do investimento no mapa** na edição da oportunidade: latitude, longitude, referência da fonte e confirmação expressa de correspondência ao local/divulgação. GET/POST `/management/opportunities/{id}/coordinates`, gestor autenticado/verificado, CSRF, limites de coordenadas, controlo de versão, transacção, FK e auditoria. Pontos retirados de divulgação não são reactivados por esta operação. A confirmação editorial não é validação geodésica independente.
|
|
|
|
## Mapa base
|
|
|
|
[Documentação Leaflet](https://leafletjs.com/reference.html) e [política do serviço de tiles OSM](https://operations.osmfoundation.org/policies/tiles/). URL HTTPS, atribuição visível e cache normal do navegador; sem prefetch/download offline. `VITE_MAP_TILE_URL` permite substituir o endereço no build; se substituir o fornecedor, ajustar também a atribuição/licença no componente. Falha do mapa base apresenta aviso e preserva marcadores/lista. Testes automatizados bloqueiam pedidos de tiles, evitando descarregamentos automáticos do serviço comunitário.
|
|
|
|
## Verificação executada
|
|
|
|
- Suite completa: **172 testes / 1.766 verificações**, aprovada em 45,176 s; PHPStan e Pint aprovados.
|
|
- TypeScript e lint dos componentes verificados; build de 2.370 módulos aprovado.
|
|
- `tools/investment-map-browser.mjs`, exclusivamente QA com um investimento sintético: marcador, popup, ligação, controlo de zoom, pesquisa automática, remoção do marcador após filtro sem correspondências e ausência de recarregamento integral. 390/1.440 px sem overflow, zero excepções JavaScript. Tráfego de tiles bloqueado no teste; não é evidência de disponibilidade externa.
|
|
- Nenhuma coordenada sintética foi inserida na base real. Não houve migration neste incremento.
|
|
|
|
## Reconciliação e impedimentos concretos
|
|
|
|
[map-coverage.json](map-coverage.json), gerado por `php tools/investment-map-coverage.php`, enumera as seis oportunidades públicas: **0 georreferenciadas, 6 sem coordenadas**. Não estão silenciosamente excluídas: a interface identifica-as, mas a representação cartográfica obrigatória de cada uma permanece por cumprir.
|
|
|
|
Para terminar, faltam as coordenadas, moradas exactas ou plantas que permitam identificar os locais, ou a definição documental do que representa um programa nacional sem local único. Foi pedida a localização dessas fontes; não é um pedido de nova autorização de implementação. Não usar sedes, capitais ou centros provinciais como se fossem o local do investimento.
|
|
|
|
Também permanecem por concluir: georreferenciação de todos os registos aplicáveis, integração dos restantes consumidores da suite, mapa privado de todos os rascunhos e paginação cartográfica além de 1.000 oportunidades (a API assinala truncagem, sem alegar cobertura). Limites jurídicos/geometrias de zonas e projectos lineares não se tornam pontos por este incremento. A aprovação integral só pode ser declarada depois de reconciliar esses itens e obter `complete=true` com evidência de precisão.
|
|
|
|
Reversão: retirar os componentes e rotas deste incremento, conservando geometrias e auditoria; não executar rollback destrutivo das tabelas geográficas partilhadas. Ficheiros legados, referências administrativas e associações existentes foram preservados.
|