Files
Investidor-V2/docs/investmoz/upgrade-progress.md
nala 250ac35fd1
tests / ci (push) Canceled after 0s
first commit
2026-09-28 10:01:09 +02:00

13 KiB
Raw Permalink Blame History

Progresso do upgrade — 26 de Setembro de 2026

Proposta: Formação Técnica, Competências e Investimento em Educação

Camada assistiva — 26/09/2026: base interna de assistência activada localmente, com gateway Laravel, fontes/fragmentos FTS, regras, resultados encriptados, feedback, revisão independente e suspensão. 118 testes/1.080 verificações aprovadas; oito casos lexicais sintéticos PT/EN medidos. Sem geração/embeddings/reranker activos; o benchmark dos modelos e pgvector exigem infraestrutura. Cobertura e limites.

Actualização Education — 26/09/2026: decisões técnicas validadas e executadas localmente. Implementadas fichas educativas em rascunho ligadas ao catálogo canónico, protecção da publicação, filtros e indicadores internos. Duas migrations aplicadas após backup com restauro verificado e reconciliação de 66 tabelas. Módulo activado apenas na instalação local, mantendo os gestores existentes. Suite PHP: 109 testes/961 verificações; TypeScript, build e análise estática aprovados. Cobertura e lacunas por RF. Validação institucional, integrações externas e produção continuam pendentes.

Entrega inicial: preparado o pacote de concepção Education, conforme o nível de implementação inicialmente autorizado no novo pedido: arquitectura, modelos, contratos propostos, migração não executável e exemplos para revisão. Inclui 30 secções, 33 RF (preservando RF-EDU-001–016), 18 RNF, 44 entidades, 25 indicadores, RACI, segregação, IA, GIS, propriedade dos dados, fases, riscos e 53 itens de conformidade.

Diagnóstico read-only confirmou seis tabelas Education vazias e lacunas entre training_needs, oferta calendarizada e investimento educativo. Nenhuma tabela, rota ou configuração da aplicação foi alterada. Onze testes dos exemplos sintéticos e da consistência documental passaram. Não são testes de implementação do módulo: RF-EDU continua pendente funcionalmente. Aprovação dos pilotos, fontes, mandatos, modelo canónico, privacidade e contratos condiciona a integração, conforme bloqueios B01–B08 da proposta.

Este registo complementa a auditoria em requirements-audit.md. O upgrade integral continua em execução: as entregas abaixo não significam cumprimento completo das famílias RF-CRM, RF-CLU ou RF-PII.

Entrega: entrada e acompanhamento inicial no CRM

  • Conversão explícita de pedidos consentidos em leads, com responsável autorizado e próxima acção com prazo futuro.
  • Conversão idempotente por pedido; preservação da referência de origem.
  • Reutilização de contactos por email normalizado; selecção explícita do investidor quando o contacto já tem vínculo. Duplicados preexistentes exigem revisão.
  • Directório e edição de investidores e contactos; verificação do vínculo antes de editar um contacto.
  • Qualificação/desqualificação humana com justificação; tarefas, prazos e indicação de atrasos. Leads activos precisam de próxima acção antes de encerrar a última tarefa.
  • Auditoria transaccional, identificação UUID e protecção das rotas pelo gestor verificado.

Evidência: CrmController, ConvertInterestToLead, páginas crm, CrmIntakeTest. Migração aditiva 2026_09_25_100000_extend_crm_intake aplicada à base local sem recriação de tabelas.

Cobertura parcial: RF-CRM-001, 002, 003, 005 e 006. Ainda faltam fusão com NUIT, perfis completos, atribuição multicanal, scoring configurável, pipeline de negociação, cadências, relações comerciais adicionais, previsões, dashboards analíticos, revogação de consentimento e passagem a aftercare. A justificação actual não constitui um histórico completo de decisões.

Entrega: gestão interna de projectos e clusters

  • Pesquisa, criação e edição de projectos e clusters com validação de códigos únicos.
  • Orçamentos decimais exactos, moeda obrigatória com montante e coerência das datas dos projectos.
  • Associação idempotente de projectos a clusters como âncora, complementar ou apoio, com alteração auditada do papel.
  • Criação e edição de etapas da cadeia de valor: insumos, produção, transformação, logística e mercado; códigos únicos por cluster e bloqueio de edição cruzada.
  • Registos internos: estado activo não equivale a aprovação nem publicação institucional.

Evidência: InvestmentStructureController, páginas structures, InvestmentStructureTest. Utiliza as tabelas existentes sem substituir as migrations de base.

Cobertura parcial de RF-CLU-001, 002 e 003. Ainda faltam taxonomia versionada com aprovação, actores/territórios, mapas e comparação, matching, programas, dossiers públicos, campanhas, métricas e governação institucional. O cadastro de projectos não substitui o ciclo completo de investimento RF-PII.

Entrega: ligações e lacunas das cadeias de valor

  • Ligações dirigidas entre etapas do mesmo cluster: fornecimento, transformação, distribuição e apoio.
  • Criação idempotente; rejeição de ligações a si próprias, etapas eliminadas ou pertencentes a outro cluster.
  • Retirada lógica de ligações, preservando os registos e a auditoria. Uma nova ligação pode ser criada após a retirada.
  • Lacunas associadas a uma etapa, com título, localização descritiva, capacidade necessária, justificação, estado e chamada para acção obrigatórios.
  • Consulta, edição, resolução e retirada de lacunas; indicação da quantidade ainda por resolver.
  • Protecção de acesso e edição por cluster, com auditoria transaccional sem copiar os textos livres para os eventos.

Evidência: ClusterValueChainController, structures/value-network.tsx e ClusterValueChainTest. Migração aditiva 2026_09_25_110000_create_investment_gaps aplicada à base local; reversão e reaplicação verificadas apenas na base de testes.

RF-CLU-003 permanece parcialmente cumprido: a localização é descritiva, sem associação GIS; serviços ainda não têm uma fase própria na taxonomia existente. A chamada para acção é texto interno, sem fluxo público de candidatura ou validação institucional. As ligações são apresentadas numa lista dirigida, sem visualização geográfica.

Verificação

  • 98 testes PHP, 748 asserções: portal em PostgreSQL/PostGIS isolado e cliente SuiteCRM com HTTP simulado.
  • 13 testes frontend aprovados; build de produção concluído.
  • Ciclo do esquema de base de 24 de Setembro: 3.106 asserções. O manifesto histórico é testado apenas contra as migrations desse esquema; extensões posteriores são verificadas pelos testes funcionais.
  • PHPStan, TypeScript, lint e formatação sem erros.
  • CRM verificado em Edge: autenticação, conversão, responsável, tarefa, origem, persistência e apresentação móvel.
  • Projectos e clusters verificados em Edge: orçamento exacto após recarregar, criação, associação, etapas, persistência e apresentação móvel.
  • Cadeias de valor verificadas em Edge: ligação e retirada, criação de lacuna, persistência dos detalhes, resolução e apresentação móvel.
  • CI configurado com PHP 8.5 e serviço PostGIS; execução remota ainda não verificada.

Trabalho ainda necessário

Decisão de integração SuiteCRM

O utilizador confirmou que SuiteCRM e OAuth ainda não estão instalados e delegou a escolha técnica. Decisão: SuiteCRM como sistema principal comercial após migração validada; portal mantém cadastro de investimento, GIS, submissões e autenticação. Não haverá escrita dupla de contactos, leads ou tarefas. A gestão local continua até ao corte controlado.

Preparados arquitectura e plano e modelo Docker de homologação para SuiteCRM 8.10.2/PHP 8.4/MariaDB 11.4. Pacote oficial descarregado e SHA-256 verificado; imagens identificadas por digest. Docker e WSL não estão instalados neste Windows: build, arranque, conta técnica, OAuth e integração real continuam pendentes. Esta preparação não altera a base de dados ou os fluxos existentes.

Acrescentado o cliente Laravel SuiteCRM, desactivado por defeito: OAuth client credentials, cache cifrado, renovação limitada, operações JSON:API, retries de consulta e circuit breaker. Escritas ambíguas não são repetidas automaticamente. Foram aprovados 15 testes com HTTP simulado (62 asserções) e PHPStan. Nenhuma chamada foi feita a um CRM real; envio da outbox, sincronização funcional, upload binário e reconciliação continuam pendentes.

Entrega: submissões idempotentes e captura na outbox

O formulário reutiliza uma chave UUID nas novas tentativas do mesmo pedido enquanto a página permanece aberta. A API devolve a confirmação original para a mesma chave e conteúdo, e rejeita alterações de conteúdo com HTTP 409. Clientes sem chave continuam compatíveis, mas sem garantia de deduplicação.

Pedido, recibo de idempotência, notificação em fila e evento ExpressionOfInterestSubmitted são gravados na mesma transacção. O evento contém apenas a versão do contrato e o UUID do pedido, sem copiar dados pessoais. Os eventos permanecem pendentes: ainda não existe envio ao SuiteCRM. Contrato e limites em outbox e idempotência.

Migração 2026_09_25_120000_add_interest_submission_receipts aplicada à base local. Reversão sem dados e reaplicação verificadas na base isolada; a reversão com identidades capturadas é bloqueada e coberta por teste. Em Edge, uma resposta perdida após gravação foi seguida de nova tentativa com a mesma chave e confirmação original. A chave não persiste após recarregar a página.

A matriz requirements-audit.csv continua a ser a referência de âmbito. Permanecem os requisitos não cobertos de CRM, clusters, corredores, GIS, ciclo do investidor/aftercare, empresas, educação, monetização, integrações, contratos de API/eventos, PT/EN e requisitos não funcionais.

Não foram escolhidos pesos de scoring, fornecedor de IA, fontes institucionais autorizadas ou perfis por organização sem decisão documentada. Esses parâmetros devem ser configuráveis; não se deve apresentar dados ou recomendações como validados antes dessa configuração e revisão humana.

A conta comercial@tempo.co.mz permanece por configurar, conforme solicitado. Não foram enviados emails nem efectuado deployment remoto.

Preparação da instalação local SuiteCRM

O utilizador escolheu instalação local. Diagnóstico: Windows ARM64 em Parallels, sem motor Docker, WSL ausente e virtualização não exposta; tentativa de instalação WSL falhou. Preparados scripts de arranque para Windows compatível e macOS/Linux, preservando volumes e segredos existentes, e instruções locais. Neste equipamento recomenda-se executar Docker no macOS anfitrião. Instalação efectiva e afinação com medições continuam bloqueadas pela ausência do motor acessível.

Acrescentado suitecrm:probe: OAuth e leitura de metadados sem escrita comercial nem exposição de tokens. Dois novos testes (6 asserções) e PHPStan passaram; a suite completa de 91 testes da entrega anterior não foi repetida nesta alteração. O diagnóstico local confirma integração desactivada. Scripts de contentores ainda não executados; script PowerShell analisado e verificado no cenário de Docker ausente.

Entrega: matriz territorial e início da jornada integrada

Importados 6 corredores, 8 clusters e 15 projectos âncora das secções 4.3.4, 4.5.2, 6.1 e 6.6 do documento. Os 29 dossiers ficam em rascunho, com fontes e relações canónicas, sem divulgação automática de estimativas ou mapas. Migração 2026_09_25_130000_investment_portfolio_journeys e seeder aplicados à base local; rollback vazio e reaplicação verificados apenas na base isolada.

Gestão em /management/portfolio, consulta de fichas publicadas em /carteira e painel individual em /investidor. Revisão por outro gestor, evidência de autorização, retirada da publicação ao editar, relações bidireccionais e contexto directo de origem preservado. O investidor guarda fichas, manifesta interesse com consentimento e acompanha o protocolo. Conversão em lead mantém a identidade da jornada e continua a exigir responsável e próxima acção.

Validado no Edge: corredor → projecto → painel → consentimento → pedido → persistência após recarregar, matriz e largura móvel. PHPStan, TypeScript, lint, formatação e build passaram. Os 98 testes incluem os cinco novos testes da carteira e jornada.

Cobertura ainda parcial de RF-COR, RF-CLU e RF-EII. Âmbito, fontes e pendências: GIS, governação, comparação, cofre documental, representação organizacional, aftercare, IA e integração real do SuiteCRM não estão concluídos.