96 lines
5.6 KiB
Markdown
96 lines
5.6 KiB
Markdown
# Gestão do portal
|
|
|
|
## Acesso
|
|
|
|
A página `/acesso-gestao`, ligada no rodapé do portal, permite configurar a conta
|
|
mais tarde. Apresenta entrada/registo, verificação pendente ou acesso à gestão
|
|
conforme a sessão. Não cria contas nem revela a lista de emails autorizados.
|
|
A verificação de email está activa no modelo User; o envio real depende da
|
|
configuração de correio do ambiente. Nenhuma conta é verificada automaticamente.
|
|
|
|
Configurar `PORTAL_MANAGER_EMAILS` no `.env` com os emails autorizados, separados
|
|
por vírgula. As contas devem existir e ter email verificado. A lista vazia bloqueia
|
|
o acesso de todos os utilizadores. O registo público não concede privilégios.
|
|
Após alterar a configuração, executar `php artisan config:clear` (ou reconstruir
|
|
o cache de configuração no ambiente de implantação).
|
|
|
|
Esta lista limita o acesso à gestão local; não substitui a futura matriz de
|
|
papéis e permissões de todos os domínios InvestMoz.
|
|
|
|
## Páginas
|
|
|
|
- `/management/history`: histórico protegido de criação/edição de sectores,
|
|
oportunidades e revisão de pedidos. Guarda o responsável e os campos alterados;
|
|
valores de textos livres e contactos não são copiados.
|
|
|
|
- `/dashboard`: resumo para gestores com pedidos por estado, oportunidades
|
|
publicadas e em rascunho, sectores activos e os cinco pedidos mais recentes.
|
|
As contas sem autorização recebem apenas orientações de configuração, sem
|
|
indicadores internos. Os totais são consultados no carregamento da página.
|
|
|
|
- `/management/interests`: pesquisa por referência, nome e email; filtro por estado;
|
|
paginação e consulta dos pedidos. A alteração de estado regista o utilizador
|
|
autenticado e a data da última revisão.
|
|
- `/management/sectors`: criação e edição de sectores, ordem e activação.
|
|
- `/management/opportunities`: criação e edição, maturidade, moeda e valor,
|
|
publicação, destaque e arquivo. Rascunhos e arquivos não aparecem na API pública.
|
|
- `/management/crm/leads`: leads, pesquisa, responsável, qualificação humana e tarefas.
|
|
A ficha do pedido permite convertê-lo em lead, com identificação explícita do
|
|
investidor e próxima acção obrigatória. Repetir a conversão abre o mesmo lead.
|
|
- `/management/crm/investors`: investidores e respectivos contactos. Um contacto
|
|
partilhado entre investidores tem uma única ficha; a alteração reflecte-se nos vínculos.
|
|
- `/management/projects`: cadastro de projectos, orçamento e calendário.
|
|
- `/management/clusters`: cadastro de clusters, associação de projectos e etapas
|
|
da cadeia de valor. Estes cadastros são internos; activar não publica nem aprova.
|
|
Na ficha do cluster também é possível ligar etapas, retirar ligações preservando
|
|
o histórico e gerir lacunas de investimento com localização, capacidade,
|
|
justificação, estado e chamada para acção. A localização é descritiva; a chamada
|
|
para acção ainda não constitui um formulário público de candidatura.
|
|
|
|
O histórico inclui também as alterações efectuadas nestes módulos. A cobertura
|
|
actual e as funcionalidades ainda pendentes estão em [upgrade-progress.md](upgrade-progress.md).
|
|
|
|
As rotas de alteração usam sessões e protecção CSRF do Laravel. O servidor valida
|
|
os dados e verifica a autorização em todas as rotas. Os formulários não aceitam
|
|
atribuição de privilégios. Não há eliminação definitiva de pedidos ou catálogo.
|
|
As alterações do catálogo invalidam o cache da página inicial nos dois idiomas.
|
|
|
|
O catálogo administrativo permite pesquisar nome/título, slug e referência,
|
|
filtrar por estado e, nas oportunidades, por sector. Os filtros ficam no URL,
|
|
são preservados na paginação e podem ser limpos. Os indicadores do painel abrem
|
|
as listas filtradas correspondentes. A pesquisa não distingue maiúsculas de
|
|
minúsculas. Os testes de gestão incluem combinação de filtros, paginação e
|
|
rejeição de parâmetros inválidos (7 testes, 120 verificações).
|
|
|
|
## Pedidos públicos
|
|
|
|
As novas referências usam `IR-ANO-ULID`, sem depender da contagem de linhas.
|
|
As referências antigas continuam válidas. A restrição única da base mantém-se.
|
|
Referências de oportunidades inexistentes, retiradas, eliminadas ou com publicação
|
|
futura são rejeitadas com 422. Pedidos gerais podem omitir a oportunidade.
|
|
Mensagens de excepção com SQL e dados pessoais não são escritas no log deste endpoint.
|
|
|
|
## Testes
|
|
|
|
`tests/Feature/PortalManagementTest.php` cobre autorização, edição, publicação,
|
|
arquivo, precisão monetária, cache, revisão, validação e persistência real de pedidos.
|
|
Usar exclusivamente uma base descartável terminada em `_test`: os testes usam
|
|
`RefreshDatabase`. Nunca apontar os testes para a base `investemoz`.
|
|
O teste de envio conserva a validação DNS do email e requer resolução DNS; não envia email.
|
|
|
|
Após a implementação do painel, passaram 49 testes PHP (290 verificações),
|
|
incluindo contagens reais, ausência de dados, limite e ordem dos pedidos recentes
|
|
e protecção dos indicadores contra acesso por contas sem autorização.
|
|
|
|
Validação em 25/09/2026: 45 testes PHP (205 verificações) e 12 testes JavaScript
|
|
passaram. TypeScript, lint e build passaram. No Edge foram verificados login,
|
|
criação de sector, publicação e arquivo com consulta da API real, revisão de pedido
|
|
e persistência após recarregar. Os testes de escrita usaram PostgreSQL isolado na
|
|
porta 55440; os dados da aplicação não foram alterados.
|
|
|
|
```powershell
|
|
# Configurar DB_HOST, DB_PORT, DB_USERNAME e DB_PASSWORD da instância isolada.
|
|
$env:DB_DATABASE = 'investmoz_test'
|
|
php vendor/bin/phpunit --filter PortalManagementTest --do-not-cache-result
|
|
```
|