103 lines
13 KiB
Markdown
103 lines
13 KiB
Markdown
# 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.
|