# Levantamento funcional, entidades e eventos — InvestMoz **Data do levantamento:** 9 de Outubro de 2026 **Âmbito:** aplicação Laravel/React presente neste repositório. **Base de evidência:** README, rotas, controladores, modelos, migrations e documentação em `docs/investmoz/`. A existência de uma tabela, rota ou documento não prova que a função esteja activa em produção. ## 1. Resumo executivo O projecto é uma plataforma de investimento com área pública e área autenticada. Abrange descoberta de oportunidades e negócios, manifestações de interesse, gestão de candidaturas e carteira, CRM local, geografia e zonas de investimento, simulador e governação fiscal, catálogo documental, educação, assistência de terra, parcerias, balcão virtual, IA com fontes e integrações preparadas. O README apresenta a base inicial do portal (sectores, oportunidades e manifestações). O código actual e os documentos de domínio registam a extensão funcional posterior. Para o inventário detalhado dos fluxos, consultar [casos-de-uso-aplicacao-actual.md](casos-de-uso-aplicacao-actual.md), que identifica 24 casos de uso. Este documento complementa-o com uma visão de domínio, um diagrama resumido de relações e a frequência observável dos eventos. ## 2. Âmbito e método Foi feito inventário dos caminhos acessíveis no repositório: **981 ficheiros** por `rg --files`, excluindo dependências geradas `vendor` e `node_modules`. Dentro da aplicação foram consultados, em particular, `routes/`, `app/Models/`, `app/Http/Controllers/`, `database/migrations/`, `database/seeders/` e `docs/investmoz/`. O número é uma contagem do inventário local nessa data, não um inventário de anexos externos ou de dados de produção. Classificação usada: - **Implementado no código:** rota, controlador, job, comando ou schema identificável. - **Documentado/planeado:** descrito em documentação, sem prova suficiente de execução integrada. - **Frequência de negócio desconhecida:** não há amostra de eventos de produção nem telemetria para calcular volume por hora/dia/mês. - **Cadência técnica explícita:** periodicidade configurada no scheduler ou no mecanismo de fila. ## 3. Actores e sistemas | Actor | Objectivo principal | Áreas usadas | |---|---|---| | Visitante | Consultar conteúdos públicos e iniciar pedidos | Portal, oportunidades, negócios, zonas, documentos, simulador | | Investidor/utilizador | Manter perfil, favoritos, rascunhos, submissões, documentos e mensagens | Espaço do investidor, carteira, assistência, parcerias | | Gestor de portal/CRM | Rever interesses, gerir leads, tarefas, catálogo e publicação | CRM local, gestão de portal | | Gestor territorial | Manter projectos, clusters, corredores, relações, geografia e zonas | Catálogo territorial, GIS, zonas | | Revisor documental | Conferir proveniência, versão, hash, autorização e análise antimalware | Biblioteca documental | | Gestor fiscal | Rever fontes, parâmetros e versões das regras fiscais | Governação fiscal, simulador | | Gestor de educação | Manter competências, necessidades, cursos, capacidades e propostas | Educação | | Gestor/agente de assistência | Tratar pedidos de terra e pedidos do balcão virtual | Assistência de terra, balcão | | Parceiro institucional | Participar em oportunidades/parcerias e colaborar em salas | Parcerias | | Administrador | Gerir autenticação, segurança, configurações e permissões | Administração | | Sistema externo/worker | Receber/enviar mensagens ou executar trabalho assíncrono | Outbox/inbox, filas, integrações | Papéis são uma leitura funcional dos fluxos. A autorização efectiva depende das policies, middleware e permissões implementadas, não apenas desta tabela. ## 4. Catálogo de casos de uso O documento [Casos de uso da aplicação actual](casos-de-uso-aplicacao-actual.md) detalha pré-condições, fluxos e dados para cada caso. Índice consolidado: | ID | Caso de uso | Actor principal | Resultado | |---|---|---|---| | UC-01 | Consultar página inicial e serviços | Visitante | Entrada no serviço público autorizado | | UC-02 | Pesquisar sectores e oportunidades | Visitante/investidor | Lista/detalhe e possível favorito/interesse | | UC-03 | Consultar negócio existente | Visitante/investidor | Consulta da oferta divulgável | | UC-04 | Criar conta, autenticar e recuperar acesso | Utilizador | Sessão autenticada/verificada | | UC-05 | Manifestar interesse numa oportunidade | Visitante/investidor | Pedido recebido para tratamento | | UC-06 | Manifestar interesse num negócio existente | Investidor | Pedido ligado ao negócio e consentimento | | UC-07 | Guardar oportunidade e manter espaço do investidor | Utilizador | Favorito, dossier ou item na carteira | | UC-08 | Criar e manter submissão de investimento | Investidor | Submissão em rascunho com histórico | | UC-09 | Submeter candidatura | Investidor | Entrada em fila de tratamento | | UC-10 | Gerir negócio existente | Proprietário/gestor | Registo revisto e eventualmente publicável | | UC-11 | Tratar interesses no CRM | Gestor | Qualificação, lead, tarefa e seguimento | | UC-12 | Gerir catálogo territorial | Gestor territorial | Projectos, clusters, corredores e relações | | UC-13 | Gerir zonas de investimento | Gestor territorial/revisor | Zona validada, publicada ou suspensa | | UC-14 | Carregar, verificar e publicar documento | Revisor documental | Documento preservado com estados independentes | | UC-15 | Criar/retomar rascunho de simulação | Visitante/utilizador | Rascunho recuperável, sem cálculo implícito | | UC-16 | Executar simulação | Visitante/utilizador | Resultado, obrigações, fontes e relatório | | UC-17 | Gerir regra fiscal | Gestor fiscal | Versão de regra passa por revisão/aprovação | | UC-18 | Gerir educação e competências | Gestor de educação | Catálogo, análise de lacunas e proposta | | UC-19 | Abrir/tratar assistência de terra | Investidor/gestor | Caso acompanhado até encaminhamento/fecho | | UC-20 | Criar e gerir parceria | Investidor/parceiro | Interesse, sala, mensagens, documentos e marcos | | UC-21 | Usar balcão virtual | Utilizador/agente | Pedido de serviço acompanhado até resolução | | UC-22 | Usar IA com evidência | Gestor autorizado | Execução rastreável ligada a fontes e feedback | | UC-23 | Sincronizar sistemas externos | Worker/sistema externo | Eventos recebidos/enviados e divergências registadas | | UC-24 | Auditar alterações | Sistema/gestor/auditor | Histórico e correlação para operações relevantes | ## 5. Diagrama de entidades e relações Diagrama lógico resumido por domínios. As cardinalidades representam a estrutura documentada; algumas relações polimórficas, opcionais ou em tabelas de junção estão simplificadas. Para o ERD de schema detalhado, consultar [erd.mmd](erd.mmd), [data-dictionary.csv](data-dictionary.csv) e [table-catalog.csv](table-catalog.csv). ```mermaid erDiagram USER ||--o{ INVESTOR : possui USER ||--o{ SUBMISSION : cria USER ||--o{ SIMULATION : executa USER ||--o{ AUDIT_EVENT : origina SECTOR ||--o{ OPPORTUNITY : classifica OPPORTUNITY ||--o{ INTEREST_REQUEST : recebe EXISTING_BUSINESS ||--o{ INTEREST_REQUEST : recebe INVESTOR ||--o{ INTEREST_REQUEST : manifesta INTEREST_REQUEST ||--o| LEAD : converte LEAD ||--o{ CRM_TASK : acompanha OPPORTUNITY ||--o{ SUBMISSION : referencia SUBMISSION ||--o{ SUBMISSION_REVISION : versiona SUBMISSION ||--o{ SUBMISSION_EVENT : regista SUBMISSION ||--o{ DOCUMENT_LINK : anexa PROJECT }o--o{ ECONOMIC_CLUSTER : associa PROJECT }o--o{ DEVELOPMENT_CORRIDOR : associa PROJECT ||--o{ INVESTMENT_GAP : identifica INVESTMENT_ZONE ||--o{ ZONE_REVISION : versiona INVESTMENT_ZONE ||--o{ ZONE_RELATION : liga INVESTMENT_ZONE ||--o{ ZONE_ATTACHMENT : documenta DOCUMENT ||--o{ DOCUMENT_VERSION : versiona DOCUMENT ||--o{ MALWARE_SCAN : analisa DOCUMENT }o--o{ PORTAL_RESOURCE : disponibiliza SIMULATION ||--o{ SIMULATION_SCENARIO : contém SIMULATION_SCENARIO ||--o{ SIMULATION_RESULT : produz SIMULATION_RESULT ||--o{ SIMULATION_OBLIGATION : discrimina SIMULATION_RESULT ||--o{ RESULT_SOURCE : fundamenta TAX_RULE_VERSION }o--o{ LEGAL_SOURCE : fundamenta PROJECT ||--o{ TRAINING_NEED : requer SKILL }o--o{ OCCUPATION : relacionada TRAINING_PROVIDER ||--o{ COURSE : oferece USER ||--o{ LAND_ASSISTANCE_CASE : requer PARTNERSHIP ||--o{ PARTNERSHIP_INTEREST : recebe PARTNERSHIP ||--o| PARTNERSHIP_ROOM : abre PARTNERSHIP_ROOM ||--o{ PARTNERSHIP_MESSAGE : contém DESK_CASE ||--o{ DESK_EVENT : regista AI_SOURCE ||--o{ AI_CHUNK : divide AI_SOURCE ||--o{ AI_RUN : suporta OUTBOX_EVENT }o..|| SYNC_RUN : processa SYNC_RUN ||--o{ RECONCILIATION_ISSUE : detecta ``` ### 5.1 Domínios e entidades nucleares | Domínio | Entidades nucleares | Relações principais | |---|---|---| | Identidade e acesso | `users`, `passkeys`, sessões, organizações, memberships | Utilizador possui perfil e inicia operações protegidas | | Catálogo público | `sectors`, `opportunities`, catálogos de referência, recursos do portal | Sector classifica oportunidades; publicação controla exposição | | Negócios existentes | `existing_businesses`, objectos, locais, revisões, mandatos | Negócio tem objectos/locais/documentos e workflow próprio | | Investidor e CRM | `investors`, `interest_requests`, `leads`, `contacts`, oportunidades CRM, tarefas | Interesse pode converter-se em lead e gerar tarefas/actividades | | Carteira e submissões | dossiers, `investment_submissions`, necessidades, revisões, eventos, mensagens, anexos | Submissão pertence a utilizador e liga-se a oportunidade/negócio | | Território e GIS | `projects`, `economic_clusters`, `development_corridors`, `geo_locations`, `value_chains`, `investment_gaps` | Relações muitos-para-muitos documentam associação territorial/económica | | Zonas de investimento | `investment_zones`, fontes legais, geometrias, relações, anexos, revisões | Zona tem localização, evidência, relações e estado de validação/publicação | | Documentos | `documents`, versões, scans, associações por domínio, recursos do portal | Documento pode ser associado a várias entidades; disponibilidade, estado documental e uso em cálculo são independentes | | Simulação e fiscalidade | rascunhos, `simulations`, cenários, resultados, obrigações, fontes, regras versionadas | Execução usa versões/parâmetros elegíveis e preserva as fontes do resultado | | Educação | skills, occupations, providers, courses, training needs/capacity, propostas | Projectos expressam necessidades relacionadas com competências e formação | | Serviços e colaboração | casos de terra, balcão virtual, parcerias, salas, mensagens, documentos, marcos | Casos e salas mantêm eventos e participantes próprios | | IA e governação | controlos, fontes/chunks, execuções, feedback, auditoria | Execução de IA deve poder ser rastreada às fontes e ao actor | | Integrações | `outbox_events`, `inbox_events`, `sync_runs`, reconciliações | Eventos são idempotentes/correlacionáveis; desenho de schema não prova integração activa | ## 6. Eventos e frequência ### 6.1 Frequência explicitamente configurada | Evento/processo | Gatilho | Frequência/cadência no código | Natureza e observação | |---|---|---|---| | Escalar tarefas vencidas (`investmoz:escalate-overdue-tasks`) | Scheduler Laravel | **A cada 15 minutos**, com `withoutOverlapping()` | Única periodicidade de scheduler encontrada em `routes/console.php`; execução real requer scheduler/cron activo | | Executar simulação (`RunSimulation`) | Pedido de cálculo aceite | Por submissão, via fila, `afterCommit` | Assíncrono; frequência depende da procura e de workers activos | | Analisar documento (`ScanDocumentForMalware`) | Upload/solicitação de scan em fluxos suportados | Por documento, via fila, `afterCommit`; job único por identidade configurada | Cadência sob procura; requer worker e scanner configurados. Upload/publicação não confirma scan limpo | | Comparar compatibilidade MNE (`CompareMneBusiness`) | Alteração de negócio que agenda comparação | Por alteração aplicável, em fila específica e `afterCommit` | Trabalho assíncrono/sombra; volume real desconhecido | | Notificar recepção de interesse (`NotifyInterestReceived`) | Disparo esperado após recepção de interesse | Job existe, mas não foi localizada chamada a `dispatch()` no código consultado; frequência de execução não confirmada | Tratar como capacidade prevista até localizar/activar o disparo; entrega efectiva também depende de configuração e worker | | Auditoria, revisões e eventos de domínio | Acção de utilizador/sistema | No momento da operação que os gera | Orientado a evento; não há taxa histórica neste levantamento | | Outbox/inbox e sincronização externa | Evento de domínio ou mensagem externa | Sem periodicidade operacional confirmada neste código/documentação consultada | Estrutura preparada; documentação aponta sincronização externa real como pendente/não activada | ### 6.2 Frequência por categoria de actividade | Categoria | Frequência funcional esperada | O que é possível afirmar | |---|---|---| | Leituras públicas (home, catálogo, oportunidade, negócio, mapas/referências) | Sob procura do visitante | Há endpoints/páginas; sem logs ou analytics não se quantificam consultas | | Escritas de investidor (interesses, favoritos, submissões, mensagens, perfil) | Sob acção do utilizador | São iniciadas por pedido explícito; não há volume observado disponível | | Gestão (revisão, publicação, CRM, regras, zonas, catálogo) | Sob trabalho de gestores autorizados | Fluxos e protecções documentados; frequência por papel não medida | | Simulação e rascunhos | Sob utilização do simulador; rascunhos podem ser actualizados/retomados | Rota e jobs encontrados; não assumir execução periódica nem cálculo fiscal por guardar rascunho | | Uploads e análise documental | Sob envio/reanálise de documento | Job de scan é disparado por fluxos suportados; scan e publicação são estados distintos | | Auditoria | Sob operações auditadas | A frequência acompanha as operações instrumentadas; cobertura total precisa de confirmação por fluxo | | Regras fiscais e fontes | Sob processo de revisão/aprovação e alteração normativa | Não há calendário fixo; fonte publicada não activa automaticamente cálculo | | Integrações externas | Não determinável/activação pendente | Tabelas de integração e documentação não são prova de entrega ou sincronização real | ### 6.3 Frequência observada versus frequência de execução Não foram disponibilizados logs, contagens de `audit_events`, filas, analytics, pedidos HTTP ou exportação da base activa. Por isso, **não é possível apresentar eventos por hora/dia/mês, sazonalidade, taxa de falhas ou utilizadores activos**. A cadência de 15 minutos é apenas o intervalo configurado para o comando agendado. Para apurar frequência real, recolher métricas autorizadas por tipo de evento, intervalo temporal e resultado, sem expor dados pessoais; documentar período da amostra, filtros, retenção e origem. Não inferir métricas a partir de seeders, testes, screenshots ou schema. ## 7. Sequência de alto nível ```text Visita pública -> pesquisa catálogo/oportunidades/negócios/território -> interesse, candidatura, assistência ou simulação -> autenticação e consentimento quando exigidos -> gravação do pedido/rascunho e histórico -> trabalho assíncrono quando aplicável (scan, cálculo, notificação) -> revisão por responsável autorizado -> decisão, comunicação ou publicação com autorização -> auditoria e eventual integração externa homologada ``` ## 8. Regras transversais que afectam os fluxos - Disponibilidade para consulta, situação jurídica/documental e uso em regra/cálculo são estados independentes. - Importar ou publicar documento não activa regra nem cálculo fiscal. - Relações sem citação/evidência verificada devem ficar pendentes e identificadas. - Guardar um rascunho não equivale a submeter ou aprovar. - A divulgação obedece à autorização registada e ao seu âmbito. - Documento original, proveniência, identificador, edição/data, hash e histórico devem ser preservados; não marcar autenticidade, vigência, direitos ou scan como confirmados sem evidência. - Integração desenhada (outbox/inbox) não equivale a sincronização activa. - Alterações a dados activos exigem confirmação de backup/restauro e acção autenticada necessária; testes/migrações devem usar exclusivamente base QA isolada, conforme `AGENTS.md`. ## 9. Limitações e pontos para validação 1. A cobertura implementada de cada UC varia; alguns documentos descrevem trabalho parcial, proposto ou bloqueado. Consultar `docs/investmoz/validation.md`, `completion-audit-2026-10-04.md`, `delivery-gaps.md` e os README de cada domínio antes de declarar operação concluída. 2. O ERD resumido não substitui constraints/FKs, cardinalidades exactas, escopos de acesso ou estados enumerados no schema e OpenAPI. 3. A frequência real de utilização e dos eventos de negócio permanece **indeterminada** sem telemetria operacional. 4. Execução do scheduler, workers, ClamAV, notificações, SuiteCRM e restantes conectores depende de configuração e operação externa verificável. 5. O inventário desta tarefa é do repositório, não dos ficheiros/anexos em armazenamento externo nem da base de dados de produção. ## 10. Fontes locais principais - [README do projecto](../../README.md) - [Casos de uso detalhados](casos-de-uso-aplicacao-actual.md) - [ERD do schema reconciliado](erd.mmd) - [Arquitectura e migrations](architecture-and-migrations.md) - [Validação](validation.md) e [auditoria de conclusão](completion-audit-2026-10-04.md) - Rotas: `routes/web.php`, `routes/api.php`, `routes/investment.php`, `routes/partnerships.php`, `routes/land-assistance.php`, `routes/investment-zones.php`, `routes/territorial-registry.php` - Cadência: `routes/console.php`; trabalhos assíncronos em `app/Jobs/`