oportunidades 3
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-09 15:00:37 +02:00
parent 9d6176f55b
commit e662230df7
32 changed files with 865 additions and 37 deletions
+13
View File
@@ -229,3 +229,16 @@ Leitura em 09/10/2026 06:34:48 UTC: migration aplicada uma vez; evento `opportun
**QA:** 80 testes passaram, 1 252 asserções, três casos reais de ClamD saltados; percurso desktop/móvel e nova sessão sem armazenamento local passaram. Restauro/reversão de 288 tabelas/cinco ficheiros; 14 conjuntos preservados após navegador. **Ativo:** gestão básica confirmada; seis IDs reais e 124 eventos anteriores preservados, dois eventos posteriores; recursos ainda não instalados, zero eventos próprios. Plano `/management/opportunity-resources-install`, válido até 10/10/2026 11:09:13 UTC, exclusivamente autenticado.
**Lacunas mantidas:** publicação/revisão segregada, direitos/dados pessoais, editor cartográfico integral/limites oficiais em falta, catálogos pesquisáveis, evidências por campo, módulos especializados e critérios integrais da especificação. Cobertura do inventário, questões jurídicas, ClamD real, fontes institucionais específicas e primeiro pedido real continuam separados. Fontes oficiais já aceites não exigem segunda validação.
### Revisão transversal — países, cartografia e integração de `9d6176f`
[Matriz por módulo, percurso demonstrado e lacunas](revisao-funcional-transversal.md). O incremento anterior foi preservado e integrado; os seus 80 testes não certificam esta revisão.
- **Países, parcial:** catálogo local comum de 249 códigos ISO, pesquisa e traduções; residência, constituição e origem da solicitação distintas. Persistência e recuperação no perfil, entidade, manifestação e pedido do Balcão pelo armazenamento existente; origem no mesmo pedido submetido em QA. Estatísticas internas autorizadas conservam históricos como «não informado» e separam conjuntos de pedidos. Cadastro inicial, endpoints legados e restantes módulos/filtro estatístico ainda por completar.
- **Cartografia, parcial:** pesquisa no seletor reutilizado; consumidores públicos passam a consultar diretamente o cadastro aceite, eliminando dependência de publicação de uma versão intermediária. Fichas territoriais independentes consultáveis no percurso do mapa. Inventário dos campos registado; seletores próprios, campo plano do Balcão e cobertura gráfica ainda abertos. Leitura ativa: 1.921 territórios e zero geometrias; não inventar pontos/polígonos nem invalidar dados aceites.
- **Percursos:** navegador desktop/móvel demonstra perfil guardado com resultado visível, recuperação em nova sessão sem localStorage, filtros/pesquisa territorial e fichas no mapa; recursos demonstram preparação, anexos, versões, exclusão/restauro. Manifestações/Balcão/CRM têm evidência HTTP e persistência em QA; percursos integrais e educação continuam com lacunas expressas na matriz.
- **Limitações operacionais visíveis:** GD/WebP verificado no PHP web; ausência desativa apenas geração de miniaturas. Scan pendente restringe binário/preview, sem bloquear rascunhos/metadados/localizações. ClamD real indisponível; fixtures não verificam ficheiros ativos. Plano único de recursos atualizado; nenhuma repetição da gestão instalada.
**Estado ativo:** só leitura/backup pelo Codex. Seis IDs reais, relações e 124 eventos anteriores preservados; recursos ainda não instalados. Instalação autenticada continua necessária; cobertura transversal não é dada como concluída. Questões jurídicas específicas, diferença de cobertura documental, fontes institucionais, ClamD real e primeiro pedido real mantêm estados separados.
Continuação de 9 de outubro: filtro de país/«Não informado» nas estatísticas do CRM preparado, com conjuntos separados e sem inferir origem de campos históricos. GET autorizado e validado; a lista de leads mantém os seus filtros próprios. 25 testes/430 asserções em QA isolada, TypeScript, PHPStan e build passaram. Percurso deste filtro no navegador ainda pendente; sem migration nem escrita ativa. [Escopo e evidência](revisao-funcional-transversal.md#continuação--filtro-das-estatísticas-de-origem).
@@ -63,6 +63,10 @@ Os seis IDs continuam classificados real. Comparação do conteúdo original das
## Próximo incremento — recursos em QA
Continuação da revisão transversal: [filtro das estatísticas de origem no CRM e validação QA](revisao-funcional-transversal.md#continuação--filtro-das-estatísticas-de-origem). O filtro não altera oportunidades, classificações ou relações; a instalação de recursos e as lacunas da especificação conservam os estados abaixo.
Tentativa de conclusão às 14:19:42 locais de 9 de outubro: controlo de navegador sem browsers disponíveis; abertura do navegador interno devolveu indisponibilidade. Verificação visual do filtro não realizada. Leitura ativa em transação `READ ONLY` confirmou recursos não instalados e plano não pronto: hash atual `80eee708a85e18895eb2f51d17421ffcc86c69d8bb5560880ff9d9466ca0454d`, distinto do hash na prova de ativação `dcdfa8511b6b3554dd44ab236264822da8aaf2dd09eb8c66dcea78b0f2215e53`. É necessário renovar as provas correspondentes ao código antes de executar o fluxo autenticado. Leitor `tools/opportunity-resources-install-preview.php`; evidência privada `opportunity-resources-readiness.json`. Zero escritas ativas; instalação não tentada com prova desatualizada.
[Imagens, documentos e multilocalização: matriz, QA, lacunas e plano](recursos-oportunidades.md). Guardar/recuperar recursos, originais cifrados, versões e exclusão lógica/restauro implementados; coleção territorial até 50 itens com hierarquia/papéis, áreas/distribuição e GeoJSON validado. Relações existentes conservadas; novas associações são preparação privada até workflow explícito. Processador GD gera WebP/miniaturas sem EXIF e scan independente; GD ativo e ClamD real mantêm dependências concretas. Não publicar automaticamente.
Leitura ativa em 11:10:21 UTC confirmou novamente os seis IDs reais, dados/relações e 124 eventos anteriores intactos; dois eventos posteriores explicam diferença global do histórico. Novo esquema de recursos ausente, zero eventos deste incremento. QA: 80 testes passaram/1 252 asserções, três ClamD reais saltados; navegador desktop/móvel passou. Plano único `/management/opportunity-resources-install`, backup/restauro e reversão em cópia, validade até 10/10/2026 11:09:13 UTC. Não aplicado automaticamente.
@@ -0,0 +1,55 @@
# Revisão funcional transversal — integração de 9d6176f
9 de outubro de 2026. Incremento de correções, com cobertura por percurso; não é certificação de todos os módulos. Preserva a gestão básica instalada, classificações, relações e fontes oficiais aceites. A revisão não reabre a proveniência oficial.
## Resultados demonstrados e lacunas
| Módulo / rota | Ação e resultado demonstrado nesta revisão | Correção / persistência | Lacuna restante |
| --- | --- | --- | --- |
| Perfil `/investidor/profile` | Guardar residência, mensagem visível, HTTP 303, recarregar; nova sessão móvel sem localStorage recupera PT; pesquisar Portugal | ISO comum, país de residência explícito, payload privado cifrado e versão existentes | País no cadastro inicial e restantes perfis ainda por reconciliar |
| Entidades `/investidor/companies` | QA de servidor: guardar constituição MZ; recuperar no contexto da conta; negar acesso de outra conta | País de constituição distinto; valor histórico conservado; sem concessão de representação | Novo percurso completo de criação/edição de entidade no navegador ainda por demonstrar |
| Manifestações `/investidor/manifestacoes/{id}` | QA HTTP: guardar/recuperar três países diferentes; rejeitar ZZ com 422 sem alterar versão/payload; submissão só em QA conserva origem no pedido | A constituição da entidade deixa de substituir o país do perfil; origem explícita no payload, revisão e metadata do mesmo pedido | Teste de todos os passos da manifestação com os novos dropdowns no navegador; os endpoints públicos/legados ainda não recolhem ISO específico |
| Balcão `/balcao-virtual/painel` e `/pedidos/{id}` | QA HTTP: origem de rascunho recuperada pelo proprietário; outra conta negada; 422 preserva rascunho; nenhum pedido ativo submetido | Seletores mostram nomes dos investimentos/percursos da conta; título reutilizado quando disponível, sem substituir título corrigido; origem não inferida do perfil | Comprovar no navegador o percurso de reutilização de projeto, pedido e responsável; primeiro pedido real continua pendente |
| CRM `/management/crm/leads` | QA: estatísticas e filtro de origem autorizados, acesso não autorizado rejeitado; pedido antigo com país Moçambique e sem origem continua «não informado» | Contagens separadas de manifestações e pedidos em acompanhamento; filtro por país/não informado; sem somar como investidores únicos ou exportar contactos | Verificação das contagens e do filtro no navegador; cobertura dos endpoints legados |
| Catálogo `/oportunidades` | Navegador móvel: dimensão Cluster oculta filtros incompatíveis; pesquisa Maputo devolve opção do cadastro | Troca de dimensão limpa filtros incompatíveis; pesquisa no seletor reutilizado | Guião de preferências integrado e percurso completo oportunidade → localização → acompanhamento ainda por demonstrar |
| Mapa `/oportunidades?view=map` | Navegador: fichas de estruturas territoriais acessíveis dentro do percurso do mapa | API inclui contexto territorial independente das seis oportunidades, com links de ficheiro; não cria coordenadas nem associações | Desenhar corredores/âncoras/ZEE/ZFI/parques exige geometrias existentes; a base ativa tem zero. Lista consultável não equivale a cartografia completa |
| Recursos `/management/opportunities/{id}/resources` | Navegador desktop/móvel: múltiplos locais, PDF/imagem, recuperação, exclusão lógica/restauro; falta de GD visível, preparação desativada | Integra 9d6176f; metadados e rascunhos continuam guardáveis; originais conservados; scan por ficheiro independente | Instalação ativa pendente, ClamD real, GD no PHP web e revisão/publicação final |
| Educação `/educacao`, `/management/education` | Testes HTTP existentes executados com a revisão; regras de lacuna preservadas | `/educacao` é catálogo de investimentos educativos; a gestão de procura/capacidade é outra rota | Fluxo educativo integral solicitado, recuperação dos seus rascunhos, painéis por ator e aceitação funcional permanecem abertos; testes existentes não certificam a especificação inteira |
| Simulador | Correções do incremento anterior preservadas | Nenhum cálculo fiscal alterado ou ativado pela introdução de países | Nova revisão transversal do simulador ainda não demonstrada nesta frente; não conclui ClamD, fontes institucionais ou pedido real |
| Bolsa, serviços, carteira, negócios, fundiário e mapas de zonas | Inventário de consumidores territoriais abaixo | Componentes e entidades existentes preservados | Ações de criar/editar/recuperar por rota e cobertura completa dos países permanecem abertas |
## Continuação — filtro das estatísticas de origem
Em 9 de outubro de 2026, acrescentado o filtro de país e «Não informado» em `/management/crm/leads`. O filtro aplica-se apenas às estatísticas de solicitações; a lista de leads conserva os seus filtros próprios. Manifestações e pedidos do Balcão continuam separados. Seleção sem ocorrências mostra conjunto vazio; país histórico, residência e constituição não substituem origem declarada. GET validado pelo catálogo comum, protegido pela permissão existente, sem migration ou atualização de dados.
QA isolada definida em `phpunit.xml` (`investmoz_test`, porta 55441), com guarda antes da limpeza/migração: **25 testes, 430 asserções passaram** nas suites `InvestmentWorkspaceTest` e `InvestorGuidanceTest`. Cobrem país explícito, não informado, ausência de ocorrências, reposição de todas as origens, país inválido, acesso negado e igualdade dos registos antes/depois. TypeScript e PHPStan passaram. Percurso específico deste novo filtro no navegador ainda não demonstrado; não altera a aceitação funcional dos restantes percursos. Nenhuma escrita na base ativa.
## Países e dados históricos
Catálogo comum local de **249 códigos ISO alpha-2**, sem seed de substituição de cadastros. Fonte técnica: [tabela IANA](https://data.iana.org/time-zones/tzdb/iso3166.tab), consultada em 09/10/2026; declara códigos referentes a ISO/TC 46 N1127 de 29/02/2024. SHA-256 local `837c80785080c8433fd9d4ea87e78f161ac7a40389301c5153d4f90198baeb2a`. Nomes portugueses pelo ICU/Intl, nomes ingleses preservados e usados como alternativa. Consulta e pesquisa não dependem de serviço externo.
Três significados distintos: `residence_country_code`, `incorporation_country_code`, `declared_origin_country_code`. Os dois primeiros não preenchem o terceiro. O campo antigo `country` conserva o valor original sem conversão automática; dados ausentes continuam não informados. O IP técnico mantém-se separado. O uso do JSON/payload e metadata existentes evita nova tabela de perfil, novo pedido e migration de países nesta parcela. Estatísticas de origem usam apenas a declaração explícita, sem reclassificar históricos pelo campo antigo.
## Inventário territorial inicial — cobertura ainda parcial
O inventário de código identificou consumidores em `portal/services`, `portal/manage`, `education/index`, `education/analysis`, `portfolio/index`, `structures/editor`, `management/relationship-repair`, `management/editor`, `management/opportunity-draft`, `management/opportunity-resources`, `partnerships/catalogue`, `partnerships/editor`, `investment/business-marketplace`, `investment/business-wizard`, `investment/catalogue`, `investment/detail`, `investment/zone`, `investment/zones` e `land-assistance/form`. Acrescenta-se o campo territorial do pedido do Balcão e os mapas do catálogo e das zonas.
Os consumidores de `ProvinceSelect` e `TerritoryFields` públicos passam a usar `/api/v1/investment/territory-options`, que consulta o cadastro aceite, em vez de depender da publicação/validade de uma versão intermediária em `/api/v1/catalogs/jurisdictions`. Os seletores de gestão conservam `/management/territory-options` e a permissão existente. `TerritoryLevel` passa a pesquisar nome/código, preservando o pai, paginação e valor guardado.
**Não está concluído «todos os campos e mapas».** O Balcão ainda apresenta o seletor territorial plano; a Bolsa e serviços têm consumidores próprios; os seletores de gestão genéricos, campos livres de localização, filtros e cada mapa precisam de demonstração individual. Não substituir localidades ausentes nem inferir pontos pelo centro de província. A recuperação de referências mantém as validações existentes. Na leitura ativa de 11:42:46 UTC: 1.921 territórios, zero geometrias, 28 locais de projeto e 13 ligações cluster–projeto preservados.
## GD e ClamD — impacto mostrado antes da operação
GD/WebP é verificado no processo PHP que atende a página, não pelo resultado de outro CLI. Quando indisponível, o formulário conserva original/metadados, mostra a limitação e desativa apenas a preparação de WebP/miniaturas. O endpoint mantém HTTP 423 como guarda. Não foi alterado o PHP ativo.
ClamD real continua indisponível (`malware:health`: `scanner_unavailable`, versão/assinaturas desconhecidas). Scan pendente bloqueia acesso ao binário/preview/processamento que o exige; não impede preparar metadados, localizações ou rascunhos. A página de instalação também explica estas limitações. Scanner simulado verifica apenas fixtures identificadas de QA, nunca ficheiros reais. Direitos e publicação continuam independentes do scan.
## QA, preservação e plano consolidado
QA exclusivamente em `*_test:55441`, incluindo cópia restaurada e navegador restrito a `127.0.0.1:18096`. Provas privadas: `functional-country-browser.json`, `opportunity-resources-browser.json`, `opportunity-resources-preservation.json`, `opportunity-resources-compatibility.json` e `opportunity-resources-backup-proof.json`. Tests/TypeScript/PHPStan/build são verificações técnicas; a matriz acima delimita a aceitação funcional.
Plano autenticado único para o esquema ainda pendente: [recursos e revisão funcional](http://127.0.0.1:8000/management/opportunity-resources-install). Inclui apenas `2026_10_09_030000_extend_opportunity_resources`, versão atual do código, backup/restauro, reversão e limitações. Não repete `2026_10_09_020000_extend_opportunity_management`. Países desta parcela reutilizam armazenamento existente; não convertem históricos. Nenhuma localização, relação ou oportunidade ativa é criada pelo plano.
Reversão da migration apenas antes de novos recursos/documentos cifrados, preservando a guarda de dados. Depois de uso, exige reconciliação dos dados posteriores e ação autorizada; não restaurar automaticamente o backup por cima de novas escritas. Reversão de código deve preservar os novos campos no payload antes de voltar a formulários antigos que não os conheçam.
**Base ativa:** apenas leitura e backup nesta revisão; seis IDs reais e 124 eventos anteriores confirmados, zero eventos de recursos. Nenhuma instalação repetida, seed ativo, submissão ou alteração de configuração. Cobertura documental, questões jurídicas específicas, fontes institucionais, ClamD real e primeiro pedido real permanecem separados.