# Decisões técnicas e execução — 26/09/2026 Estado: **validado tecnicamente para desenvolvimento local**, por revisão do repositório e autorização do utilizador para validar as decisões pendentes e executar. Não representa mandato de uma entidade pública, validação de dados externos ou aprovação de produção. ## Decisões adoptadas | ID | Decisão e fundamento confirmado | Execução e limites | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | D-EDU-01 / B02 | O catálogo público usa `opportunities.id` bigint; os domínios novos usam UUID. Preservar ambos, com uma associação explícita, sem converter IDs existentes. | `education_investment_proposals` tem UUID e referências a `labour_demands` e `opportunities`. Uma ficha inicial por procura; restrições únicas e bloqueio transaccional evitam duplicação. `education_opportunities` conserva a semântica de oferta calendarizada. | | D-EDU-02 / B03 | Reutilizar sessão, email verificado e `manage-portal` para preparação interna. O registo público não concede acesso. | As rotas novas estão no grupo de gestão, atrás de `EducationEnabled`. Não criar perfis institucionais ou OAuth/OIDC sem mandatos/issuer reais. A revisão por outro gestor continua distinta de validação oficial. | | D-EDU-03 / B06 | Vagas formativas não equivalem a trabalhadores disponíveis. Fontes desconhecidas não equivalem a zero. A versão revista da procura é requisito para preparar uma proposta. | Comparação existente preservada; proposta referencia a versão revista e vigente. Alteração de versão produz conflito na criação e aviso na consulta da ficha anterior. Nenhuma soma de vagas é apresentada como défice laboral. | | D-EDU-04 / B01 | A preparação de uma resposta pode ocorrer antes da decisão institucional; a publicação exige evidência que ainda não foi fornecida. | Criar apenas rascunhos, com fonte, riscos e intervenção obrigatórios; nenhum montante, instituição, capacidade ou projecto é inventado. A gestão geral também rejeita publicação de fichas educativas. Não chamar este estado de lacuna validada. | | D-EDU-05 / B04 | Reutilizar a identidade do catálogo e o fluxo de interesse/CRM existente. Não duplicar investidores, contactos ou leads. | Ficha aponta para a oportunidade canónica. O encaminhamento educativo externo ainda não é activado: `suitecrm:probe` devolveu `disabled`; sem CRM homologado não declarar sincronização concluída. | | D-EDU-06 / B05 | Nesta etapa não recolher beneficiários, dados académicos individuais ou localizações pessoais. | Ficha usa necessidades agregadas; campos de texto devem conter fontes e responsáveis institucionais, não listas de pessoas. Auditoria partilhada não replica o texto das fontes, riscos ou planos. | | D-EDU-07 / B07 | Correspondência por regras não é IA. Não escolher fornecedor nem enviar dados a um modelo sem configuração e critérios aprovados. | IA permanece por configurar; sem inferência externa, decisão automática ou alegação de precisão. | | D-EDU-08 / B08 | Indicadores internos devem medir apenas o que os dados sustentam. | Contagens de declarações, procura por rever e fontes expiradas, rotuladas como globais e sem efeitos dos filtros. Sem metas fictícias, taxas de emprego ou agregação indevida de trabalhadores. | | D-EDU-09 | Alteração aditiva e reversão sem perda. | Nova migration não altera tabelas existentes; rollback recusa apagar fichas existentes. Reversão operacional: desactivar `EDUCATION_ENABLED`, preservar as tabelas e reconciliar antes de qualquer restauro. | ## Contratos preservados e análise de impacto - APIs públicas, IDs, estados e campos do catálogo mantidos. Não há API Education institucional nova. - Novo POST interno: `/management/education/demands/{id}/investment`. Exige versão, sector existente, título, intervenção, riscos, fonte e moeda de referência. Não define orçamento nem publica automaticamente. - A resposta de análise ganha `proposal` e `sectors`; a listagem ganha filtros e indicadores. Consumidores React alterados em conjunto. - A ficha contém necessidades opcionais de equipamentos, formadores e financiamento; ausência significa pendência, nunca custo zero. - A gestão geral de oportunidades bloqueia publicação apenas das oportunidades ligadas a fichas educativas; oportunidades preexistentes continuam com o contrato anterior. - A migration deve anteceder a activação do módulo. A verificação de publicação tolera a ausência da nova tabela durante o período de transição. - O directório não contém `.git`; não foi fabricada uma aprovação por branch ou revisão por pares. Estes controlos continuam obrigatórios antes de integração em repositório partilhado/homologação. ## O que ainda exige confirmação externa 1. Pilotos, responsáveis, fontes e mandatos institucionais reais; a autorização técnica não é evidência desses factos. 2. Taxonomias nacionais, equivalências, disponibilidade de trabalhadores e regras de alocação. 3. Processo e documentação de validação institucional para permitir publicação das propostas. 4. SuiteCRM acessível, identidade técnica e testes de sincronização; issuer OAuth/OIDC para API institucional. 5. Políticas de retenção, beneficiários/menores, fornecedor de IA e metas operacionais. Estes itens não impedem a execução local das decisões técnicas acima. Continuam a impedir publicação oficial, integração externa e declaração de conclusão integral do MVP. ## Execução comprovada - Ambiente confirmado como `local`, PostgreSQL em loopback. - Backup custom PostgreSQL, SHA-256 registado e restauro efectuado numa base isolada. Contagens das 66 tabelas reconciliadas antes da migração; o restauro não substituiu a base da aplicação. - Aplicadas à base local apenas `2026_09_26_100000_education_intake` e `2026_09_26_110000_education_investment_proposals`. - Após a migração, preservadas as contagens das tabelas existentes; o ledger de migrations ganhou exactamente duas entradas. Nenhum seed de demonstração ou dado institucional foi inserido. - `EDUCATION_ENABLED=true` no `.env` local. Restantes configurações e lista de gestores preservadas. Seis rotas Education confirmadas. Acesso: `/management/education`, com conta gestora verificada. - Suite PHP: **109 testes, 961 verificações aprovadas**. TypeScript, build e PHPStan dos controllers/modelo afectados aprovados. Não houve validação visual em navegador ou homologação institucional. - Backup e manifesto mantidos em `storage/app/private/education-backup-20260926-105520/`; inclui cópia protegida do ambiente anterior. Não publicar nem versionar esse directório. - Para reversão funcional, definir `EDUCATION_ENABLED=false` e limpar a cache de configuração. Conservar as fichas e tabelas; não executar rollback destrutivo de dados.