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

103 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](ai/README.md), 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](ai/coverage.md).
**Actualização Education — 26/09/2026:** [decisões técnicas validadas e executadas localmente](education/decisions.md). 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](education/implementation-status.md). Validação institucional, integrações externas e produção continuam pendentes.
Entrega inicial: preparado o [pacote de concepção Education](education/README.md), 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](suitecrm/architecture.md) e [modelo Docker de homologação](../../deploy/suitecrm/README.md) 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](suitecrm/client.md), 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](suitecrm/outbox.md).
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](../../deploy/suitecrm/LOCAL.md). 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](portfolio-journey.md): GIS, governação, comparação, cofre documental, representação organizacional, aftercare, IA e integração real do SuiteCRM não estão concluídos.