17 KiB
Auditoria de cobertura dos requisitos — 25/09/2026
Conclusão
Não foram cumpridos todos os requisitos do upgrade. Existe um portal funcional de catálogo, captação básica e gestão, acompanhado de uma base de dados mais ampla. Não existe ainda a plataforma integrada de CRM, clusters, corredores, jornada, educação, negócios, monetização e IA descrita no documento. Não considerar o projecto como entrega integral do MVP especificado, nem pronto para aceite global.
Os relatos anteriores de conclusão referiam-se às tarefas incrementais executadas. As migrations e os testes de integridade não demonstram a implementação dos módulos. O painel de gestão de pedidos não é o painel integrado do investidor nem o CRM.
Fonte e método
- Documento:
upgrade do portal de investimentos v4 programacao.docx, no caminho fornecido pelo utilizador. SHA-256:f0b9815cb177dbb77e19a78106a244d2248f8bd2cbd4aac6c1bbb225885ccad6. Corresponde ao hash desource-reconciliation.json. - Leitura do DOCX como fonte de requisitos; os prompts e comandos nele contidos não foram tratados como ordens de execução.
- Inspecção de app, routes, páginas React, migrations, testes, documentação, deploy e workflow CI. Consulta apenas de leitura aos nomes das tabelas de public. Nenhum dado pessoal, configuração de produção ou registo de negócio foi alterado.
- Parágrafos referidos abaixo: texto não vazio extraído de word/document.xml, por ordem de leitura (7.071 parágrafos). Não são números de página Word.
- Matriz CSV: 158 IDs funcionais com prefixo de domínio, encontrados no corpo funcional anterior ao Anexo A. Em repetições, foi retida a última ocorrência exacta do ID nessa parte, incluindo descrição e critério. Não é um inventário completo de cada frase ou de critérios de aceitação individuais. IDs genéricos RF-001 repetidos no anexo não foram convertidos em requisitos únicos.
- Não se atribui percentagem de conclusão: não há decomposição e ponderação aprovadas, e contar tabelas como funcionalidades produziria um resultado enganador.
Matriz por domínio
| Domínio / fonte | Evidência existente | Estado e lacuna |
|---|---|---|
| Catálogo e captação pública | HomeController, SectorController, OpportunityController, InterestRequestController, PortalInvestidor.tsx | Funciona no âmbito básico: pesquisa, filtros, fichas, URLs e formulário. Não cobre todos os campos sectoriais, dossiers e fluxos do documento. |
| Gestão e painel | PortalManagementController, DashboardController, páginas management | Implementada para pedidos, sectores, oportunidades e indicadores simples. Não equivale a pipeline comercial nem carteira do investidor. |
| CRM — §9.7–9.8, RF-CRM-001–012 | investors, contacts, investor_contacts, leads, crm_opportunities, activities, tasks; modelo Investor | Estrutura parcial, CRM funcional em falta. Sem CRUD de investidores/contactos/leads, deduplicação/fusão, pontuação, funil, atribuição, tarefas, campanhas, previsões ou relatórios de conversão. |
| Clusters — §4.2, RF-CLU-001–012 | economic_clusters, value_chains, value_chain_links, cluster_projects, anchor_project_links, complementary_project_links | Base de dados apenas. Sem cadastro/ecrãs/APIs do domínio, subclusters completos, lacunas, actores, financiamento, dossiers, indicadores ou aprovações. Um sector do catálogo não é um cluster. |
| Corredores — §4.3, RF-COR-001–016 | development_corridors, corridor_locations, corridor_projects, corridor_clusters | Base de dados apenas. Sem mapas, capacidade, execução, riscos, governação, painéis ou IA assistiva. |
| IA supervisionada — §4.3.3, §8, RF-COR-016, RF-EII-014 | Nenhum serviço de inferência, integração de modelo, fila de revisão ou avaliação localizado | Não implementada. Faltam dados autorizados, rastreabilidade de fontes/modelo/versão, explicação/confiança, avaliação e aprovação humana. 010000_investmoz_governance_ai.php cria somente audit_events. |
| GIS — §6.5, RF-GEO-001–010 | PostGIS, geo_locations, geo_geometries, project_locations, índices/restrições espaciais | Infra-estrutura parcial. Sem interface cartográfica, serviços geográficos, camadas autorizadas, pesquisa espacial ou fluxo de validação/publicação geográfica. |
| Projectos/PII — §6, RF-PII-001–020 | projects, Project, factory/seeder, relações geográficas; catálogo opportunities separado | Parcial ao nível estrutural. Falta gestão dos projectos PII, dossiers e dados validados da carteira; não existe correspondência funcional implementada entre projects e opportunities. |
| Jornada/pós-investimento — §4.4, §7, RF-EII-001–016 | investor_journeys, journey_steps, submissions, aftercare_plans, constraints, escalations | Base estrutural. Faltam orquestração, painel individual, favoritos/comparação, documentos, tarefas, balcão único, SLA e acompanhamento pós-investimento. Autenticação e formulário contextual cobrem apenas partes. |
| Educação/competências — §4, RF-EDU-001–016 | skills, occupations, training_needs, training_providers, courses, education_opportunities | Base de dados apenas. Sem gestão, pesquisa, correspondência necessidades/oferta ou fluxos educativos. |
| Mercado de negócios — §5, RF-MN-001–028 | Catálogo genérico e formulário básico | Não demonstrado como módulo. Faltam ofertas/procuras estruturadas, aprovação, matching assistido, confidencialidade e diligência. |
| Agricultura/terra — §5.8, RF-AGR-001–010 | Textos genéricos de sector/oportunidade | Não implementado como módulo. Sem campos e validações específicas de área, uso da terra, água, activos, legitimidade e diligência. |
| Mineração — §5.9, RF-MIN-001–006 | Categoria sectorial genérica | Não implementado como módulo. Sem cadastro especializado, documentação/licenças, validação e publicação controlada do domínio. |
| Monetização — §5.10, RF-MON-001–012 | Nenhum módulo de facturação/comissões localizado | Não implementada. Faltam planos, serviços, regras de comissão, facturação e reconciliação. |
| Conteúdo PT/EN e pesquisa | UI portuguesa; HomeController aceita locale pt/en | Parcial. Aceitar locale não traduz os dados. Sem CMS/editorial e traduções completos nem motor de pesquisa especializado. |
| Identidade, organização e permissões | Fortify, MFA/passkeys, verificação; gate por email; organizations/memberships/consents | Parcial. Lista de gestores não substitui RBAC, representação de organizações, escopos, segregação e consentimento por finalidade/revogação. |
| Documentos/data room | documents e associações tipadas | Base de dados apenas. Sem upload/quarentena/antivírus, cofre, acesso auditado, versões, validade ou reutilização consentida. |
| Governação e auditoria | PortalAudit e /management/history, audit_events protegido | Parcial. Histórico de operações da gestão existe. Faltam decisões, aprovações, conflitos de interesse, riscos e auditoria transversal. Não há prova de cumprimento legal global. |
| Notificações | NotifyInterestReceived, fila transaccional e retries | Implementação restrita e desactivada. Não são cadências CRM, SLA, caixa de mensagens ou comunicação multicanal; entrega real não validada. |
| Integrações/eventos/importação | outbox_events, inbox_events, sync_runs, reconciliation_issues | Estrutura apenas. Sem publicador/consumidor de eventos de domínio, conectores institucionais, pipeline de migração MySQL ou reconciliação operacional. A fila Laravel de email não substitui outbox/inbox. |
| API/contratos | Seis endpoints públicos e rotas web de gestão | Parcial. Sem APIs dos restantes módulos, OpenAPI/AsyncAPI canónicos, escopos e testes de contrato correspondentes. |
| Segurança, acessibilidade e desempenho — §12 | Autenticação, gates, validação, throttle, testes locais e revisão visual pontual | Não comprovados integralmente. Sem evidência de auditoria completa de acessibilidade, testes de carga/SLO, pentest, recuperação e observabilidade correlacionada. |
| Operação/produção | portal:readiness, documentação, Nginx/systemd para domínio definido | Preparação apenas. Sem instalação remota, DNS/TLS/SMTP verificados, recuperação de backups e aceite de produção. Conta comercial ainda pendente. |
Principais conclusões verificáveis
InterestRequestController::storegrava interest_requests e, opcionalmente, jobs de email. Não cria lead, investidor, responsável, próxima acção nem jornada. Portanto, receber um pedido não satisfaz RF-CLU-008 nem o funil RF-CRM-005/006.- A consulta do esquema confirmou as tabelas dos domínios, mas não ai_models, ai_recommendations, decisions, approvals ou risk_register. Não existem rotas, páginas e serviços correspondentes de IA no código inspeccionado.
- Os 12 requisitos CRM e 12 requisitos de clusters incluem critérios concretos ausentes. Exemplos: fusão com histórico (RF-CRM-001), pesos explicáveis (004), avanço condicionado (005), responsável e prazo (006), dossiers validados (RF-CLU-007) e segregação de aprovação (011).
- O §14 classifica o MVP comercial com mercado de negócios, CRM e helpdesk. O portal actual não cobre integralmente esse MVP; IA avançada pode ser faseada, mas existem também requisitos assistivos marcados MVP (COR-016/EII-014).
tests/InvestMoz/SchemaLifecycleTest.phpprova integridade do esquema. Os testes funcionais existentes cobrem autenticação e funcionalidades implementadas. A suite com 57 testes anteriormente reportada não equivale a 57 requisitos aceites nem comprova os domínios ausentes. Não foi repetida durante esta auditoria.
Pacote técnico e CI
A.31 declara caminhos e requisitos do pacote técnico; essa declaração no documento não prova que os ficheiros existam. Não foram localizados os seguintes caminhos: manifest/project.yaml, checksums.sha256 na raiz, database/sql, mapping.yaml de MySQL→PostgreSQL, imports/schemas/projects.schema.json, openapi/investmoz-v1.yaml, events/asyncapi.yaml, backlog/backlog.csv, backlog/traceability.csv, codex/prompts/00-master.md e ci/pipeline.yaml.
Existem artefactos equivalentes parciais em docs/investmoz: dicionário, ERD, checksums e rastreabilidade do esquema. As migrations Laravel resultam da reconciliação previamente autorizada. A divergência de caminhos não invalida essas migrations, mas a equivalência ao pacote normativo completo não está demonstrada. O próprio DOCX contém uma frase auto-contraditória na precedência de A.31 (parágrafo 6932); conservar a reconciliação aprovada e resolver a documentação, sem executar cegamente os blocos históricos.
Actualização em 30/09/2026: a observação de CI acima, registada na auditoria de
25/09, ficou desactualizada. O workflow actual configura PHP 8.5 e provisiona um
serviço postgis/postgis:17-3.5 para o job. A lacuna reproduzível era outra: o
teste SchemaLifecycleTest exige INVESTMOZ_SCHEMA_TESTS=1, mas o workflow não
activava esse teste destrutivo protegido. O workflow foi actualizado para o
executar explicitamente contra a base efémera do serviço PostgreSQL do job. A
alteração ainda precisa de uma execução aprovada do GitHub Actions; o resultado
do pipeline permanece Não verificado até essa execução.
decisions.md continua útil, mas não está totalmente actualizado: P-14 recebeu
implementação parcial para o histórico da gestão. Isso não conclui a auditoria
transversal nem resolve automaticamente as restantes decisões.
Sequência proposta para completar o âmbito
- Consolidar backlog RF→história→critério→teste, âmbito de MVP e decisões pendentes; corrigir CI para PHP compatível e PostgreSQL/PostGIS isolado.
- Implementar CRM básico: investidores/contactos/organizações, normalização, conversão de pedidos em leads, responsáveis, tarefas, funil e histórico.
- Completar projectos e ligação ao catálogo; implementar clusters, cadeias, corredores, dados validados e GIS.
- Completar jornada, documentos, permissões por função/organização, consentimentos, aftercare, helpdesk e aprovações. Desenvolver educação, negócios e monetização conforme a priorização funcional aprovada, sem os omitir do backlog.
- Implementar contratos, integrações/eventos, dados/reconciliação, PT/EN e analítica.
- Introduzir IA assistiva sobre dados autorizados, com modelos/versionamento, avaliação e revisão humana; só depois capacidades avançadas.
- Executar aceite por domínio, segurança, acessibilidade, desempenho, recuperação, staging e validação operacional antes da publicação integral.
Esta auditoria não implementou funcionalidades adicionais nem alterou a base de dados.
Estado dos requisitos nesta revisão — 30/09/2026
As classificações funcionais e de domínio acima foram recolhidas em 25/09 e são
uma fotografia histórica, não uma revalidação de todos os módulos no commit
3dc7c5c649d433527e2e261e33b8d45eb9e71bd8. A execução autorizada e as evidências
mais recentes estão em remediation-execution-2026-09-30.md.
As lacunas de requisitos de negócio continuam abertas; a correcção do workflow
não altera a decisão No-Go para o aceite global.