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

436 lines
62 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.
# Formação Técnica, Competências e Investimento em Educação
> O diagnóstico inicial abaixo foi complementado pelo [relatório de execução](implementation-status.md), que identifica a implementação interna existente, as correcções verificadas e as lacunas por RF. A presença de código não resolve automaticamente B01–B08 nem aprova esta proposta.
Versão 0.1 — 26/09/2026 — **Proposta**. Nenhum artefacto deste pacote está aprovado para produção, homologação ou integração automática. Pedido de origem: anexo `1b36f6f0-93cf-49aa-9479-986a57bd18f4/Pasted text.txt`. Os exemplos não activam funcionalidades nem alteram dados do portal.
## 1. Sumário executivo
O submódulo liga necessidades produtivas a respostas formativas e investimento educativo. Não é formação sobre o uso do portal. A unidade de análise é a procura de trabalhadores por ocupação, qualificação, território e período, apoiada por competências verificáveis e por oferta formativa cuja capacidade, calendário e situação institucional estejam documentados.
Percurso: **projecto/cluster/corredor → procura de mão-de-obra → competências → lacunas → resposta formativa → oportunidade de investimento educativo → formação → inserção → monitoria**.
O MVP proposto limita a activação a até três clusters e três corredores, projectos-piloto validados e dados institucionais autorizados. A arquitectura permite expansão. Os cadastros documentais existentes não constituem aprovação dos pilotos. Dados de procura, instituições, cursos, custos, acreditações, capacidade e resultados: **Pendente de levantamento e validação pela entidade competente**.
O pacote inclui esta especificação, catálogo de 44 entidades, matrizes RF/RNF e indicadores, contrato OpenAPI proposto, proposta de migração, exemplos de cálculo e testes de especificação. Estes últimos verificam regras ilustrativas, não a implementação do submódulo no portal.
## 2. Escopo, diagnóstico e decisões
### 2.1 Âmbito do MVP
Registar procura e oferta; versionar fontes; confrontar unidades comparáveis; rever lacunas; preparar oportunidades educativas; receber interesse com consentimento e encaminhamento assistido ao CRM; pesquisar e apresentar indicadores agregados e mapa autorizado; emitir sugestões assistivas sujeitas a revisão. Instituições seleccionadas e profissões críticas dependem do levantamento. Formação, financiamento executado, turmas, bolsas, estágios, inserção e retenção constituem a extensão F2, com desenho antecipado sem recolher já os respectivos dados pessoais.
Exclusões: acreditar, certificar, emitir diplomas, gerir integralmente a vida académica ou salários, seleccionar ou contratar automaticamente pessoas, conceder financiamento automaticamente, classificar publicamente instituições por algoritmo, produzir previsões vinculativas ou integrar instituições sem acordo.
### 2.2 Evidência do repositório e reutilização
| Componente | Evidência verificada | Decisão | Qualidade, dependência, risco e esforço |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| React/Inertia/Laravel | lockfiles: React 19.2.8, Inertia React 3.7.0, Laravel 13.30.1, Inertia Laravel 3.3.3, Fortify 1.39.0 | Conservar | Convenções confirmadas; criar funcionalidades no mesmo produto; esforço baixo de integração visual |
| PostgreSQL/PostGIS | Consulta local: PostgreSQL 17.11, PostGIS 3.6.2 | Conservar | Read-only nesta entrega; sem base paralela |
| Skills e Occupations | migration `2026_09_24_009000`; zero registos em ambas | Melhorar | Cadastros mínimos; faltam taxonomia, sinónimos, níveis e versões aprovadas; esforço médio |
| training_needs | project/occupation/skill/quantity/priority; zero registos | Melhorar por extensão compatível | Não equivale ainda a LabourDemand; não reinterpretar quantity como trabalhadores sem evidência; esforço alto |
| training_providers e courses | organization/provider; estados simples; zero registos | Conservar e estender | `approved` não significa acreditação; capacidades e decisões são lacunas funcionais |
| education_opportunities | course_id obrigatório, datas e capacity; zero registos | Conservar como oferta calendarizada | Não suporta centro novo sem curso. B02 impede substituir silenciosamente a semântica |
| Projectos, clusters e corredores | cadastros, ligações, carteira de 29 rascunhos e jornada implementados | Conservar | Reutilizar UUID; publicações e contexto não equivalem a pilotos institucionais aprovados |
| Autenticação e autorização | Fortify; gate `manage-portal` por emails verificados | Melhorar | Não há mandato institucional por organização; não habilitar acreditação usando o gate actual |
| Documentos/consentimentos/auditoria | tabelas Shared, education_documents, PortalAudit | Conservar e completar | Existência de tabelas não demonstra cofre, antivírus, revogação granular ou retenção operacionais |
| CRM local e SuiteCRM | conversão assistida, cliente OAuth, outbox; CRM externo sem instalação acessível | Conservar transição | Sem escrita dupla; sincronização real bloqueada; esforço alto de homologação |
| API pública actual | `routes/api.php`: catálogo e interesse, throttling e contratos existentes | Conservar | Sem OAuth/OIDC de acesso à API Education demonstrado; não trocar contratos públicos |
| GIS | geo_locations/geo_geometries, SRID 4326, validadores | Conservar e melhorar | Sem mapa institucional autorizado ou motor de rotas confirmado |
| Componentes a substituir/descontinuar | Nenhum demonstrado como dispensável | Nenhuma remoção | Evitar inventar dívida técnica ou destruir investimentos existentes |
Não foi encontrada pasta `.git` acessível na raiz durante o diagnóstico. Antes de código de integração: confirmar checkout/branch própria e revisão por pares. Esta entrega é documentação e exemplos isolados, sem migrations executáveis em `database/migrations`.
### 2.3 Bloqueios e pressupostos
| ID | Bloqueio / decisão necessária | Responsável proposto | Efeito |
| --- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------- |
| B01 | Pilotos, entidades competentes, fontes e mandatos não identificados | Patrocinador + Secretariado de Dados | Não activar nem publicar dados oficiais |
| B02 | Oferta calendarizada ≠ oportunidade de investimento educativo; decidir extensão do catálogo Opportunity e identidade UUID | Produto + Arquitectura | Apenas modelo/migration proposta; preservar `course_id` e contratos actuais |
| B03 | RBAC por organização, segregação e OAuth/OIDC Education não implementados | Arquitectura + Segurança | Endpoints e policies apenas propostos |
| B04 | SuiteCRM sem motor/instalação/OAuth operacional | Operações + responsável CRM | Captura local e desenho de outbox; sem sincronização declarada concluída |
| B05 | Base de tratamento, retenção, menores, partilha e supressão estatística não aprovadas | Responsável de dados + jurídico | Sem recolha de beneficiários; sem exportações pessoais |
| B06 | Taxonomias, conversões de níveis, cobertura e validade das fontes não aprovadas | Entidades competentes | Cálculos oficiais indisponíveis; casos sintéticos apenas |
| B07 | Fornecedor/modelo IA, fontes e métricas não aprovados | Comité de IA e Dados | IA desligada; não apresentar regras determinísticas como IA |
| B08 | Limiares operacionais, recursos, orçamento e pilotos de carga não aprovados | Produto + Operações | Metas RNF são propostas; não compromisso de disponibilidade |
Precedência: protecção de dados e limites institucionais; não destruição; compatibilidade; revisão humana; reversibilidade; MVP. Conflitos B01–B08 impedem código executável para os itens afectados. Nenhuma lei, autoridade, instituição ou classificação nacional é presumida neste documento.
## 3. Actores e responsabilidades
| Grupo | Actores | Responsabilidade |
| ------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Procura | Promotor, empregador, coordenador de cluster/corredor | Declarar postos, competências, calendário, local, evidência e responsável |
| Oferta | Instituição, prestador, formador | Declarar programas, capacidade, recursos e limitações; formador não certifica por ser utilizador |
| Regulação | Tutela, acreditadora/certificadora competente | Confirmar decisões exclusivamente no mandato e escopo autorizados |
| Investimento | Investidor, financiador, fornecedor | Consultar fichas aprovadas; expressar interesse; assumir compromissos formalizados |
| Beneficiários | Formando, trabalhador, candidato | Controlar dados autorizados; consultar percurso próprio; contestar informação |
| Operação | Gestor, analista, administrador, auditor | Tramitar, calcular, operar e auditar com funções separadas |
| Governação | Patrocinador, Produto, comités, Secretariado | Aprovar escopo, fontes, arquitectura, critérios e passagem de fase |
| Público | Visitante | Ler apenas projecções publicadas e agregadas |
## 4. Arquitectura funcional
| Blocos | MVP e evolução | Reutilização |
| ------------------------------------------------------ | --------------------------------------------------------- | ---------------------------------------------------------- |
| 1 Observatório; 2 Procura; 3 Ocupações; 4 Competências | F1: registo, taxonomias versionadas, consulta | skills, occupations, project/cluster/corridor |
| 5 Instituições; 6 Cursos; 7 Capacidade | F1: cadastro e evidências sem atribuir acreditação | training_providers, courses, organizations, documents |
| 8 Lacunas; 9 Respostas; 10 Investimento educativo | F1: cálculo assistido, parecer humano e ficha | serviço de cálculo proposto, catálogo Opportunity após B02 |
| 11 Financiamento/bolsas; 12 Equipamento; 13 Parcerias | F1: necessidades indicativas; F2: compromissos e execução | CRM e contrapartes canónicas |
| 14 Aprendizagem/estágios; 15 Formadores | F2: acordos e percursos; F1 só requisitos agregados | identidade e documentos Shared |
| 16 Beneficiários; 17 Inserção; 18 Resultados | F2; indicadores preparados em F1 sem inventar dados | consentimento, auditoria e estatística agregada |
| 19 IA; 20 Governação | F1 assistiva após B07; validação humana transversal | aprovações e observabilidade partilhadas |
React apresenta projecções autorizadas. Laravel concentra regras, autorização contextual, validação, transacções e contratos. PostgreSQL/PostGIS conserva dados canónicos e relações. Jobs só processam eventos confirmados; nenhum HTTP externo dentro da transacção de negócio. Não instalar nova base, framework ou serviço complementar nesta fase.
## 5. Jornada completa
| Passos | Operação e evidência | Resultado / excepção |
| ------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| 1–3 | Empregador declara procura com contexto, ocupação, competências, quantidade e prazo | Submetida; falta de fonte ou unidade devolve para correcção |
| 4 | Validador mandatado, diferente do submissor, analisa a versão | Validada, rejeitada ou devolvida; alteração posterior invalida decisão da versão anterior |
| 5–8 | Analista selecciona oferta comparável, origem, período e método | Lacuna com fontes, tipo, confiança qualitativa e limitações; desconhecidos não viram zero |
| 9–10 | Correspondência sugere instituições e recursos necessários | Lista justificada; incompatibilidade curricular/calendário explicitada; sem promessa |
| 11 | Promotor converte lacuna validada em ficha educativa | Rascunho; publicação exige revisão, promotor, riscos, plano e autorização |
| 12–13 | Interesse consentido, identidade, papel e contexto → CRM | Protocolo idempotente, responsável e próxima acção; falha externa preserva pedido e tarefa manual |
| 14 | Autoridade recebe pedido curricular quando aplicável | Apenas decisão externa recebida, nunca aprovação emitida pelo portal |
| 15–16 | Instituição executa; reporta inscrições/conclusão e certificação externa | F2; separar conclusão de certificação, manter evidências e acesso restrito |
| 17 | Empregador confirma absorção autorizada | Vínculo e data, sem inferir emprego por matrícula ou ausência de resposta |
| 18–20 | Recalcular lacuna, detectar expiração/divergência, auditar | Nova versão; reabrir se necessário; nunca reescrever retrospectivamente resultados |
## 6. Diagrama de componentes
```mermaid
flowchart LR
UI[React: Education] --> BFF[Laravel: autenticação e autorização]
BFF --> EDU[Serviços Education propostos]
EDU --> SH[Shared: identidade, documentos, consentimento, auditoria]
EDU --> DATA[(PostgreSQL / PostGIS)]
EDU --> OUT[Outbox existente]
OUT --> JOB[Worker proposto e reconciliação]
JOB --> CRM[SuiteCRM: futuro mestre comercial]
EDU --> REVIEW[Revisão humana mandatada]
AI[IA assistiva condicionada] --> REVIEW
SOURCES[Fontes autorizadas] --> EDU
```
## 7. Diagrama de sequência
```mermaid
sequenceDiagram
participant E as Empregador
participant P as Portal Laravel
participant D as PostgreSQL
participant V as Validador
participant A as Analista
participant C as CRM
E->>P: Submeter procura com versão e idempotência
P->>D: Procura + auditoria + outbox na mesma transacção
P-->>E: Protocolo e estado submetida
V->>P: Rever versão e evidência (mandato válido)
P->>D: Decisão segregada e evento
A->>P: Comparar fontes, período, unidade e nível
P-->>A: Lacuna explicada ou dados insuficientes
V->>P: Validar lacuna e proposta educativa
P->>D: Ficha em rascunho e revisão de publicação
E->>P: Manifestar interesse consentido
P->>D: Pedido, recibo, contexto e evento
Note over P,C: Integração real depende de B04
P->>C: Envio assíncrono mínimo após activação validada
C-->>P: Identificador e confirmação reconciliável
```
## 8. Catálogo de entidades
O catálogo completo está em [entities.csv](entities.csv), incluindo finalidade/domínio, campos tipados, obrigatoriedade, relações, estados, regras, fonte/responsável, fase, classificação, validade, histórico, permissões e retenção. `!` obrigatório, `?` opcional. Campos novos são propostas, mesmo quando associados a tabela existente.
**Envelope E0 proposto:** UUID canónico; source_system/external_id; version_no positivo; classificação; correlation_id; data de referência e validade; responsável pelos dados; fonte/evidência; autor da submissão; estado de revisão; datas de criação/alteração. Usar o envelope existente quando presente; novos atributos exigem análise de compatibilidade. FK para `users` é bigint no repositório, não UUID inventado. Os restantes IDs devem respeitar o tipo real do domínio: catálogo público Opportunity usa bigint, carteira e domínio CRM usam UUID.
**Retenção R0:** cada classe terá finalidade, fundamento, prazo/evento de início, prazo de revisão, retenção legal, anonimização e destino aprovados. Até B05: não recolher dados pessoais do novo domínio e não activar expurgo. Não adoptar retenção infinita como política final. Dados demonstrativos sintéticos podem ser descartados apenas no ambiente isolado previsto para ensaios.
## 9. Modelo lógico de dados
Procura é um lote de postos de trabalho, não uma lista de pessoas. Competências são requisitos N:M desse lote. Uma ocupação pode requerer várias competências sem multiplicar a quantidade de trabalhadores. Uma oferta formativa liga instituição, curso/versão curricular, capacidade por período e território. A relação ocupação–competência e curso–competência terá proficiência, evidência, versão e validade.
SkillGap referencia snapshots de procura e oferta, método, pressupostos e decisões; não duplica as entidades originais. EducationInvestmentOpportunity é um projecto de resposta a uma lacuna validada; pode existir antes de um curso. A oferta calendarizada `education_opportunities` continua com o significado actual. B02 requer decidir o vínculo à oportunidade pública e ao negócio comercial, sem impor `course_id` a uma nova escola.
Para estimar recursos: custo monetário decimal, moeda obrigatória com valor, fonte/data e natureza estimada ou contratual. Null significa desconhecido. Nunca converter ausência de orçamento em zero. Quantidade usa inteiro não negativo, unidade e período explícitos; procura activa exige quantidade positiva. Dados legados ficam `não avaliados`, nunca automaticamente validados.
## 10. Matriz de relacionamentos
| Relação | Cardinalidade | Regra |
| ------------------------------------------------------------ | ------------------- | ------------------------------------------------------------------------------------------- |
| Project/Cluster/Corridor ↔ LabourDemand | N:M contextual | Pelo menos um contexto produtivo; contexto autorizado; relações entre contextos verificadas |
| Territory → LabourDemand / Provider / Capacity | 1:N | Local canónico; localização pessoal não pública |
| Occupation ↔ Skill ↔ Course | N:M / N:M | Nível, versão, equivalência e evidência; sem duplicar a procura por competência |
| TrainingProvider → Course → TrainingCapacity | 1:N / 1:N | Capacidade por janela, local, modalidade e pool partilhado |
| LabourDemand / Capacity → SkillGap | N:M por snapshot | Snapshot imutável e método reproduzível |
| SkillGap → Programme / EducationInvestmentOpportunity | 1:N / 1:N | Lacuna validada; resposta parcial permitida com saldo conhecido |
| Programme ↔ Funder / Investor / EquipmentSupplier | N:M | Papel e compromisso; identidades Shared; manifestação não é financiamento |
| Provider ↔ Employer | N:M via Partnership | Mandatos, acordo, validade e confidencialidade |
| Programme → Cohort → Learner | 1:N / N:M | F2, inscrição autorizada e deduplicada |
| Learner → Internship / Apprenticeship / Completion / Outcome | 1:N | Consentimento e escopo por finalidade; um resultado pode ter várias observações |
| Outcome → Project/Cluster/Corridor | N:M contextual | Absorção confirmada distinta de atribuição causal |
| Documento/Fonte/Decisão → versão de qualquer entidade | N:M | Autor da submissão não confirma sozinho; evidência restrita não é pública |
Exclusões físicas seguem integridade referencial e retenção aprovada; eliminar um registo não pode apagar decisões ou alterar cálculos históricos.
## 11. Requisitos RF-EDU e RNF-EDU
[requirements.csv](requirements.csv) preserva o significado dos RF-EDU-001–016 da auditoria v4 e acrescenta RF-EDU-017 em diante. Cada linha possui actor, pré-condições, fluxo, excepções, dados, regra, aceitação, prioridade, dependência, fase e teste, mais referências aos contratos, evento, interface, risco e gate. Novos IDs não renumeram os existentes.
[nonfunctional.csv](nonfunctional.csv) define métricas e limiares **propostos**, método de teste e responsável. Aprovação dos limiares é B08. Ter uma matriz preenchida não significa que segurança, desempenho ou disponibilidade foram testados.
## 12. Regras de negócio e cálculo de lacunas
| ID | Regra verificável |
| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RB01 | Submissor e validador não coincidem; mandato/território/entidade devem estar válidos no instante da decisão |
| RB02 | `approved` de provider e `published` de curso são estados existentes; nunca convertê-los em acreditação/certificação |
| RB03 | Comparação usa mesma ocupação, nível ou equivalência aprovada, território/cobertura, período e unidade; incompatíveis são excluídos com motivo |
| RB04 | Procura D soma lotes distintos de postos, deduplicados por empregador/projecto/fase/ocupação/local/janela; não somar a mesma pessoa por cada competência |
| RB05 | Oferta S de trabalhadores exige disponibilidade e evidência autorizada, deduplicada e alocada; vagas de curso não são S. Lacuna observada G=max(0,D−S) só com D e S conhecidos |
| RB06 | Capacidade formativa F é min(vagas livres, capacidade de formadores, equipamentos e instalações), com unidades comparáveis. Falta de uma capacidade crítica torna F não determinada |
| RB07 | Pipeline P=F×taxa de conclusão×taxa de elegibilidade×taxa de disponibilidade só é estimativa, com taxas documentadas, janela de conclusão anterior à contratação e intervalo de incerteza; sem taxas não calcular P |
| RB08 | Lacuna projectada max(0,D−S−P_alocado) é separada da observada. Livro de alocação impede usar a mesma oferta em vários projectos ou cursos do mesmo pool |
| RB09 | Lacuna qualitativa lista competências/proficiências/requisitos em falta; não transformar texto em número de pessoas nem score sem metodologia aprovada |
| RB10 | Confiança usa evidência, actualidade, cobertura e validação; desconhecido é desconhecido. Não inventar percentagem probabilística de confiança |
| RB11 | Fonte expirada bloqueia nova publicação e correspondência oficial; invalida projecções dependentes, gera alerta e preserva versões históricas |
| RB12 | Lacuna validada pode gerar ficha educativa; criação idempotente por versão/lacuna/modelo de intervenção; custos e metas permanecem estimativas até decisão |
| RB13 | Idempotency-Key inclui escopo do actor/operação; mesma chave/conteúdo retorna protocolo; conteúdo diferente 409; reserva e evento atómicos |
| RB14 | If-Match corresponde à versão autorizada; ausente 428, desactualizado 412; não substituir versão mais recente |
| RB15 | Interesse não garante emprego, financiamento, autorização institucional ou retorno; encaminhamento humano com responsável e próxima acção |
| RB16 | Revogação ou alteração de mandato afecta imediatamente novos acessos, downloads, exportações e sincronizações; eventos já entregues seguem procedimento de remediação |
| RB17 | Fonte, método, decisão e regra de alocação acompanham cada resultado; correcção gera nova versão, não reescreve história |
Exemplo didáctico em `examples/` usa apenas inteiros sintéticos. Não estima mercado real, acreditação, probabilidades ou taxas. Dados sem evidência recebem «Pendente de levantamento e validação pela entidade competente».
## 13. Perfis e permissões
| Perfil | Pode propor/submeter | Pode validar/publicar | Limite |
| -------------------- | ------------------------------------------------------ | ------------------------------------------------ | ---------------------------------------------- |
| Administrador | Configuração técnica aprovada | Não declara acreditação | Sem acesso pessoal por defeito |
| Gestor Education | Tramitar, devolver, suspender divulgação | Publicação editorial após parecer distinto | Não valida a própria submissão |
| Coordenador cluster | Procura/contexto do cluster mandatado | Parecer territorial mandatado | Não extrapola para outro cluster |
| Coordenador corredor | Contexto e necessidades do corredor | Parecer no seu mandato | Não aprova certificações |
| Promotor | Procura/projecto e resposta educativa própria | Não sozinho | Sem acesso a candidatos |
| Empregador | Procura, capacidade de estágio, resultados autorizados | Confirma absorção com evidência | Não certifica cursos |
| Instituição | Oferta, capacidade, programas e resultados próprios | Confirma reportes próprios; revisão por terceiro | Não atribui acreditação ao seu cadastro |
| Tutela | Parecer/decisão no mandato | Decisão institucional no escopo formal | Não é acesso global implícito |
| Acreditadora | Decisões e evidências sob competência comprovada | Confirma acreditação externa própria | Verificação e importação segregadas |
| Financiador | Interesse/compromisso/bolsa | Aprova financiamento no seu processo | Não certifica; sem dados individuais de alunos |
| Investidor | Favoritos/interesse em fichas públicas | Não | Apenas resultados agregados autorizados |
| Fornecedor | Interesse/proposta técnica | Não | Sem acesso a dossiers privados sem autorização |
| Formador | Perfil/ disponibilidade próprios | Não | Sem inferência automática de competências |
| Formando | Dados e consentimentos próprios | Contesta/corrige por processo | Não vê outros formandos |
| Analista | Cálculo/correspondência/recomendação | Não aprova a própria recomendação | Agregados ou pseudónimos autorizados |
| Auditor | Não altera dados de negócio | Consulta trilha no escopo | Acesso auditado, minimizado e temporário |
| Público | Não escreve | Não | Só projecções publicadas e agregadas |
Negar por defeito. A decisão combina identidade, papel, organização representada, mandato, finalidade, classificação, território, validade e estado. Nenhum UUID, URL ou chave de idempotência concede acesso. Estas permissões são alvo, não capabilities já instaladas.
## 14. RACI
R executa; A responde pela decisão final; C consultado; I informado. Cada linha tem um A. Organizações/pessoas concretas permanecem por nomear.
| Acção | R | A | C | I |
| ------------------------------- | ----------------------------- | --------------------------------- | ------------------------------- | ---------------------- |
| Aprovar âmbito/piloto/orçamento | Produto | Patrocinador | Comité Executivo, coordenadores | Equipa |
| Propor/submeter procura/oferta | Empregador/instituição | Responsável dos dados da entidade | Coordenadores | Gestor |
| Validar fonte/taxonomia | Secretariado | Entidade competente | Dados, coordenadores | Produto |
| Aprovar arquitectura/contratos | Equipa técnica | Comité de Arquitectura | Segurança, CRM | Executivo |
| Validar lacuna | Analista independente | Validador institucional mandatado | Empregador, instituição | Gestor |
| Aprovar/publicar ficha | Revisor editorial | Dono do Produto | Validador e promotor | Público autorizado |
| Confirmar decisão externa | Verificador mandatado | Entidade competente emissora | Jurídico, Secretariado | Gestor |
| Corrigir/suspender dados | Gestor + responsável de dados | Secretariado de Dados | Tutela, Segurança | Consumidores afectados |
| Aprovar modelo/regras IA | Equipa IA | Comité de IA e Dados | Arquitectura, entidades | Produto |
| Auditar acessos/resultados | Auditor independente | Comité Executivo | Segurança, Secretariado | Patrocinador |
| Autorizar produção/expansão | Produto + Operações | Comité Executivo | Todos os comités e responsáveis | Utilizadores afectados |
## 15. Integrações, propriedade e sincronização
| Dados | Mestre → consumidor | Campos partilhados | Cadência/conflicto/falha | Reconciliação |
| --------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------- |
| Procura, lacuna, capacidade, curso, mapa | Portal Education/Shared → CRM só contexto | UUID, título autorizado, estado editorial, URL | Eventos após commit; versão maior; sem sobrescrever decisão institucional | Secretariado |
| Contacto/organização comercial | CRM local na transição; SuiteCRM após corte → portal | ID externo, nome/contacto mínimo, estado comercial | Um escritor por fase; versão/owner; conflito vai a revisão, nunca last-write-wins indiscriminado | Responsável CRM |
| Interesse educativo | Portal → CRM | UUID, finalidade, papel, contexto, contacto consentido | Outbox; recepção idempotente; erros ambíguos exigem lookup/reconciliação antes de repetir POST | Operações CRM |
| Lead/tarefa/reunião/proposta/compromisso | CRM → painel autorizado | Estado, responsável, prazo, próxima acção | Após evento ou consulta incremental proposta; deduplicar, revalidar consentimento | Gestor CRM |
| Acreditação/certificação/validação curricular | Entidade competente → portal | Referência, escopo, emissor, validade, evidência autorizada | F1 registo documental verificado; F3 API apenas com acordo; nenhuma escrita de volta que altere decisão | Entidade + Secretariado |
| Beneficiários e resultados pessoais | Instituição/empregador autorizado → Education | Só mínimo necessário, consentimento e finalidade | F2; nunca sincronizar notas, saúde ou localização individual para CRM | Responsável de dados |
O sincronizador real está pendente. Backoff, dead-letter e replay controlado são propostas; capturar outbox não equivale a entregar. Tombstones e correcções são mensagens auditadas; não apagar remotamente por uma falha local. Acordos documentam payload, fundamento, destinatário, retenção e revogação.
## 16. Eventos de domínio
Envelope proposto: event_id UUID, event_type, schema_version, aggregate_id UUID, aggregate_version, occurred_at UTC, correlation_id, source_system, classification, payload mínimo referencial. Sem documentos, nomes de formandos ou tokens. Outbox/inbox existentes a reutilizar após confirmar índices e ledger de consumidores; unique(consumer,event_id), processamento transaccional, rejeição de versão incompatível.
| Fase | Eventos | Produtor → consumidor |
| ----- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| F1 | LabourDemandSubmitted, LabourDemandValidated | Education → revisão/cálculo |
| F1 | TrainingCapacityUpdated, SkillGapDetected, SkillGapValidated | Education → analista/painel |
| F1 | EducationInvestmentOpportunityCreated, TrainingProviderMatched | Education → revisão/editorial; matching não aprova |
| F1 | FunderInterestRegistered, InvestorInterestRegistered | Portal → adaptador CRM; mapear ao evento de interesse existente sem dupla emissão comercial |
| F1 | DataValidationExpired | Validade → dependências/painel, sem alterar decisão oficial externa |
| F2 | EmployerPartnershipCreated, CurriculumReviewRequested | Education → tramitação e partes autorizadas |
| F2/F3 | AccreditationStatusReceived, CertificationReported | Adaptador externo verificado → registo de evidência |
| F2 | TrainingCohortStarted, TrainingCompleted, InternshipStarted | Instituição → acompanhamento autorizado |
| F2 | EmploymentOutcomeReported, SkillGapReduced, SkillGapReopened | Empregador/analista → monitoria e revisão |
Não há tópicos, filas novas ou listeners activados. Propostas de artefactos em §23; contract tests devem detectar duplicação, reorder, revogação e mensagens venenosas.
## 17. Endpoints e contratos
[openapi.proposed.json](openapi.proposed.json) é OpenAPI 3.1 **Proposta**, não rotas instaladas. Prefixo novo `/api/v1/education`; não modificar `routes/api.php` nesta entrega. O documento define o núcleo LabourDemand; os endpoints restantes constam da matriz RF com contratos detalhados pendentes, não são apresentados como completos.
| Família proposta | Operações | Requisitos |
| ------------------------------------------- | ---------------------------------------------------- | ------------- |
| skills / occupations | GET, POST, PATCH com versão | 001, 017 |
| labour-demands | GET cursor, POST idempotente, GET/PATCH por UUID | 002, 009, 018 |
| labour-demands/{id}/decisions | POST decisão segregada e If-Match | 009, 032 |
| providers / courses / capacities | Cadastro, declaração de capacidade e evidências | 003, 007, 019 |
| gaps / matches | Criar análise, consultar explicação, decisão humana | 004, 011, 020 |
| investment-opportunities | Rascunho, revisão e publicação | 005, 006 |
| investment-opportunities/{id}/interests | POST consentido e idempotente | 008, 021 |
| responses / equipment-needs / funding-needs | Resposta e inventário indicativo MVP | 010, 022–024 |
| indicators / map | GET agregados filtrados, sem pontos pessoais | 015, 031 |
| ai-recommendations / audit | GET autorizado, decisão humana; auditoria só leitura | 014, 032 |
Autenticação alvo: OAuth2 para autorização, OIDC para identidade, issuer/JWKS/audience confiáveis, scopes e mandato contextual, expiração e revogação. Não reutilizar credenciais OAuth do SuiteCRM para autenticar utilizadores do portal. Issuer, fluxos e scopes ainda não configurados (B03); contrato usa esquema bearer indicativo e extensões que identificam esta pendência, sem inventar URLs de token/discovery.
JSON; UUID de recursos Education; ISO 8601; ISO 4217; ISO 3166-1 alpha-2 para país; cursor opaco ligado aos filtros/escopo, ordem estável `(updated_at,id)`; máximo proposto 100 itens; X-Correlation-Id validado ou gerado no servidor. Erros `application/problem+json` com type/title/status/detail/instance/correlation_id e erros de campo sanitizados. 401 token, 403 escopo, 404 recurso inacessível, 409 conflito/idempotência, 412 versão, 422 regra, 428 precondição, 429 limite, 503 dependência. ETag opaco forte para a versão; If-Match obrigatório em alterações e decisões. Rotação/retensão do ledger de idempotência deve ser aprovada antes de activação. Mudança incompatível requer nova versão principal e transição.
## 18. Modelo CRM
Accounts para organizações, Contacts para interlocutores autorizados, Leads para interesse qualificado, Opportunities para negociação, Tasks/Meetings para acções, Campaigns para promoção; nomes de campos, ligações e módulos customizados dependem de descoberta da instalação. Não criar módulos SuiteCRM por suposição. Chave canónica da oportunidade educativa e origem projecto/cluster/corredor/território acompanham contexto. Separar montante indicado, proposta, compromisso e investimento realizado. Nenhum destes implica certificação ou emprego.
Papéis investidor/financiador/instituição/empregador/fornecedor pertencem a relações, não cinco contactos duplicados. Responsável, próxima acção e SLA aprovado obrigatórios antes de avançar a fase comercial. Quando B04 persistir, gerir localmente sob o modelo já existente, sem declarar sincronização nem activar escrita dupla.
## 19. Modelo GIS
Reutilizar geo_locations e geo_geometries; atribuir locais institucionais e áreas de cobertura autorizadas. ST_IsValid, SRID 4326 e envelope mundial já têm constraints. Distância métrica deve usar geography ou projecção apropriada, não graus. Distância em linha recta não é duração de viagem; rede rodoviária, transporte, acessibilidade e metodologia são fontes ainda não seleccionadas. Mapas mostram agregados por território, procura e oferta com unidade/período, validade e limitações; esconder ou agregar células abaixo do limiar de divulgação aprovado. Sem fonte/limiar aprovado: manter camada interna/desactivada. Não publicar residências ou trajectos de pessoas.
## 20. Arquitectura de IA
Inicialmente o motor de cálculo é determinístico e explicável. IA é capacidade separada, condicionada a B07: ingestão de fontes autorizadas → validação/limpeza → recuperação contextual → geração de proposta → filtros de dados pessoais e autoridade → revisão humana → publicação autorizada → monitoria. Não seleccionar fornecedor, instalar modelo ou enviar dados neste pacote.
Cada saída guarda referências/versionamento das entradas, fonte, data, modelo/versão, prompt/método versionado sem segredos, explicação, confiança calibrada ou indisponível, limitações, estado de recomendação, revisor, decisão e data. Texto de fontes é dado não confiável: instruções contidas em currículos/documentos não podem executar ferramentas nem modificar permissões.
Avaliação antes de activar: conjunto de referência aprovado, exactidão de citações, taxa de recomendações úteis, omissões perigosas, disparidades de erro por território/sector, contaminação de dados, fuga de informação, robustez a instruções maliciosas e revisão humana. Thresholds de qualidade/modelo dependem do Comité; zero atribuições de estados oficiais é condição absoluta.
## 21. Matriz de limites da IA
| Permitido como proposta | Controlo | Proibido |
| ---------------------------------------------------- | --------------------------------------------- | ---------------------------------------------- |
| Extrair competências/ocupações de fontes autorizadas | Citações, validação taxonómica e revisão | Inferir competências individuais sem evidência |
| Sugerir correspondências/currículo a rever | Explicação e condições eliminatórias visíveis | Acreditar, certificar ou aprovar currículo |
| Estimar procura/risco e cenários | Horizonte, pressupostos e intervalo | Previsão vinculativa ou emprego garantido |
| Resumir dados de conclusão/inserção | Agregação, autorização, reconciliação | Decidir admissão, exclusão ou contratação |
| Assinalar divergência/expiração | Tarefa ao responsável e confirmação humana | Transformar estimativa em decisão oficial |
| Sugerir localização de programas | Fonte GIS, incerteza e avaliação humana | Publicar recomendação sem revisão |
## 22. Indicadores
[indicators.csv](indicators.csv) contém os 25 indicadores solicitados: definição/fórmula, unidade, fonte, frequência, responsável, linha de base, meta, validação e divulgação. Todos se segmentam por projecto, cluster, corredor e território quando a relação é comprovada, além de período e ocupação/competência pertinentes.
Denominador zero ou população incompleta produz «não disponível», não 0%. Pessoas em vários cursos são contadas uma vez em indicadores de pessoas; episódios são contados separadamente. Metas, baselines, custos e efeitos causais não são inventados. Inserção confirmada não prova que o programa causou o emprego. Reconciliar contagens com fontes antes de divulgar.
## 23. Backlog e artefactos para programação
| Pacote | RF | Localizações propostas, não criadas nesta entrega | Dependência / teste |
| ----------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| EDU-A Taxonomias e procura | 001/002/009/017/018 | `app/Domain/Education/{Models,Requests,Policies,Services}`; `app/Http/Controllers/Api/V1/Education`; migration aditiva após B02/B03 | T-001/T-002; schemas e autorizações |
| EDU-B Oferta e capacidade | 003/007/019 | mesmos domínios, adaptadores dos modelos existentes; FormRequests; decisão/evidência separadas | T-003/T-007; não interpretar approved como acreditado |
| EDU-C Lacunas/correspondência | 004/011/020 | `Services/GapCalculator`, `MatchExplainer`; Jobs/Listeners apenas após contratos | T-004/T-011; cálculo puro e alocação concorrente |
| EDU-D Oportunidade/interesse | 005/006/008/021 | adaptador para Opportunity/InterestSubmission; Policy contextual; eventos após commit | T-005/T-008; idempotência e CRM |
| EDU-E Pesquisa/mapa/painel | 015/031 | `resources/js/pages/education`, `components/education`, `hooks/useEducation`, serviço API e ficheiros PT/EN propostos | T-015/T-031; acessibilidade e dados agregados |
| EDU-F Revisão/IA/auditoria | 014/032/033 | Services de decisão; Policies; Jobs de expiração; listeners de invalidação; interface de revisão | T-014/T-032; RBAC/anti-autovalidação |
| EDU-G Qualidade e migração | 016/033 | `tests/Unit/Education`, `tests/Feature/Education`, contratos e E2E; scripts separados sem SQL de remoção | ensaio/restauro e gates G0–G3 |
Interfaces propostas: I01 catálogo; I02 formulário de procura; I03 oferta/capacidade; I04 lacuna e explicação; I05 ficha educativa/interesse; I06 fila de revisão; I07 mapa/painel; I08 acompanhamento F2. Mensagens e estados PT/EN devem partilhar chaves; não traduzir códigos de dados. Componentes existentes de formulário, conta, navegação e mensagens são reutilizados. Repositório/convenções podem motivar adaptar os caminhos antes da aprovação, sem criar uma segunda aplicação.
## 24. Plano MVP e selecção
| Critério | Evidência necessária | Regra proposta |
| --------------------------- | -------------------------------------------------- | -------------------------------------------------------- |
| Dados | Fonte, actualidade, completude, validade, direitos | Critério eliminatório se faltam campos críticos |
| Relevância/emprego | Evidência económica e procura documentada | Pontuação ordinal 0–3 proposta; sem dados = não avaliado |
| Projecto-piloto | Confirmação formal e responsável | Eliminatório para entrada |
| Equilíbrio territorial | Cobertura e diversidade justificadas | Comité documenta trade-off; não inventar quota |
| Criticidade de competências | Impacto e prazo comprovados | Não confundir volume declarado com validado |
| Capacidade institucional | Mandatos, equipa, calendário, compromisso | Eliminatório se não há validador |
| Oferta e parceiros | Instituições/empregadores participantes | Evidência de disponibilidade, não lista presumida |
| Integração | Contratos, dados e ambiente viáveis | Sem externalidade não formalizada |
| Custo/prazo/risco | Estimativa validada e mitigação | Orçamento pendente; não calcular retorno fictício |
| Replicabilidade | Lições e condições de expansão | Critério comparativo após elegibilidade |
Pesos e limiar agregados pendentes de aprovação; não reaproveitar pontuações comerciais dos clusters como pontuação de prontidão educativa. Após validar elegibilidade, comparar candidatos com critérios/versão uniformes, justificar selecção de até três de cada tipo e guardar decisão. Arquitectura não codifica limite permanente de três.
Entrega F1 em pequenos lotes: A/B → C → D → E/F → ensaios G. Dependências B01–B08 impedem prometer datas absolutas ou activar funcionalidades sem evidência. Feature flag e allowlist de pilotos são propostas de mecanismo; nomes/configuração ainda não criados.
## 25. Roteiro por fases e expansão
| Fase/vaga | Responsável | Entrada / saída | Dependências | Calendário e orçamento | Risco / mitigação |
| -------------------------- | ------------------------------ | ----------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------- |
| F0 Diagnóstico/governação | Produto + Secretariado | Mandatos/fontes → G0 | B01/B05/B06 | Pendente de plano aprovado; esforço de levantamento a estimar | Fonte sem autorização → quarentena |
| F1 Piloto até 3+3 | Equipa técnica + coordenadores | G0 → G1/G2 | B02/B03/B04/B07/B08 | Estimar por pacotes A–G após inventário | Complexidade → escopo pequeno e flag desligada |
| F2 Programas/financiamento | Instituições + Produto | Piloto aceite → G3 por programa | Consentimento, parceiros, recursos | Orçamento por programas sem montantes presumidos | Exposição pessoal → minimização e controle granular |
| F3 Interoperabilidade | Arquitectura + entidades | Acordos e contratos → homologação externa | Sistemas/fontes oficiais | Sequência por disponibilidade institucional | Divergência → reconciliação/manual |
| F4 Inteligência avançada | Comité IA e Dados | Métricas validadas → revisão periódica | Dados representativos e observação longitudinal | Calendarização após evidência de F1/F2 | Viés/deriva → suspensão e revisão |
| Expansão vaga n | Coordenadores + Operações | G2/G3 do piloto → Go da vaga | Qualidade/capacidade/suporte de novos territórios | Estimativa específica, aprovada antes da vaga | Regressão → canário, monitoria e reversão por flag |
Processo repetível: inventariar candidatos → pontuar e deliberar → preparar pequeno grupo → reconciliar e testar → activar gradualmente → medir e corrigir. Não colocar todos os corredores da carteira em produção educativa só porque já têm cadastro. Cada vaga tem responsável nominal, orçamento, calendário, entrada/saída, riscos e decisão registados antes de activação.
## 26. Riscos
| ID | Risco | Controlo / responsável |
| --- | ------------------------------------------------ | ------------------------------------------------------- |
| R01 | Estado editorial confundido com acreditação | RB02, separação de registos; entidade competente |
| R02 | Vagas/competências duplicadas como trabalhadores | RB03–RB08, pools e testes; analista |
| R03 | Exposição de alunos/localização | Policies, minimização e agregação; responsável de dados |
| R04 | Identidades ou campos comerciais divergentes | Um mestre, UUID e reconciliação; CRM |
| R05 | Fonte vencida/modelo sem base | Validade, versionamento e suspensão; Secretariado/IA |
| R06 | Quebra de contratos/tabelas existentes | Extensão aditiva e testes de regressão; Arquitectura |
| R07 | Sem recursos/mandatos para operar | Piloto e Go/No-Go; Patrocinador |
| R08 | Importação errada ou perda de histórico | Quarentena, reconciliação, restauro; Operações |
## 27. Testes e evidência
Cada T-n corresponde ao RF de mesmo número na matriz. Casos obrigatórios: autor tenta aprovar; gestor tenta atribuir acreditação; token sem scope/mandato expirado; aluno de outro tenant; documento em quarentena; fonte expirada; procura duplicada por competência; capacidade partilhada entre cursos; período/nível/unidade incompatíveis; dados em falta; negativas/overflow; conflito If-Match; mesma chave com payload diferente; falha após commit; CRM indisponível; eventos duplicados/fora de ordem; revogação antes de replay; instrução maliciosa na fonte IA; exportação com células pequenas; rollback e restauro.
Exemplos e testes em `examples/gap-calculator.*.mjs` exercitam apenas o contrato matemático proposto com dados sintéticos. Testes de consistência do pacote verificam IDs, referências e OpenAPI; não substituem validação semântica OpenAPI completa nem testes funcionais do domínio. A suite anterior do portal não demonstra RF-EDU cumpridos.
Homologação exige testes unitários, integração PostgreSQL/PostGIS isolada, contrato, E2E PT/EN, concorrência, autorização, privacidade, acessibilidade manual, carga, falhas, recuperação e regressão do portal. Sem ambiente/fontes aprovados: registar «não executado», nunca «aprovado».
## 28. Critérios Go/No-Go
| Gate | Critérios cumulativos | Aprovador | Estado actual |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------- |
| G0 Desenvolvimento integrado | Escopo, pilotos, modelo canónico B02, responsáveis, fontes, taxonomias e arquitectura aprovados; branch própria | Produto + Arquitectura | Pendente |
| G1 Homologação | Código revisto, análise estática, testes de regras e isolamento, contratos, flags e migração/restauro em cópia aprovados | Arquitectura + Segurança | Pendente |
| G2 Produção piloto | B01–B08 resolvidos no âmbito activado; permissões, limites oficiais, indicadores, privacidade, acessibilidade, desempenho, suporte e rollback aceites; zero defeitos críticos | Comité Executivo | NO-GO actual |
| G3 Expansão | Piloto medido, novos dados/mandatos/recursos validados, regressão/reconciliação e capacidade operacional aprovadas | Comité Executivo | Pendente |
O MVP inclui IA assistiva e integração CRM como alvo. Enquanto os respectivos bloqueios persistirem, não declarar o MVP integral concluído; redução formal de escopo deve ser uma decisão explícita, não uma exclusão silenciosa.
## 29. Governação, migração e operação
Secretariado mantém fontes, dicionários, decisões e prazos; gestores fazem triagem; coordenadores confirmam contexto; comités deliberam alterações materiais. Proposta de cadência: triagem semanal, qualidade mensal, estratégia trimestral e revisão imediata em incidente, sujeita a capacidade aprovada.
[migration-proposal.md](migration-proposal.md) define inventário, extensão, mapeamento, quarentena, ensaio, reconciliação, backup/restauro e reversão. Não contém comandos de remoção nem migrations activas. Como as seis tabelas estão vazias, não há dados de formação a migrar agora; isso não autoriza eliminar a estrutura ou dispensar levantamento de fontes externas.
Logs minimizam dados pessoais; métricas de fila/erros/idade da fonte; alertas têm responsável e procedimento; modo degradado conserva protocolo e identifica dados não sincronizados. Incidentes podem suspender camada, fonte, modelo ou conector sem eliminar registos. Mudanças de versão têm análise de impacto, contrato e aprovação técnica.
## 30. Checklist institucional e conformidade
- [ ] Entidades e responsáveis nomeados; mandatos, jurisdição/escopo e segregação comprovados.
- [ ] Pilotos escolhidos com critérios comuns; projectos formalmente validados.
- [ ] Taxonomias, níveis, fontes, periodicidade, validade, licença e regras de divulgação aprovados.
- [ ] Situações declarada, em análise, validada, acreditada, certificada, expirada, suspensa e rejeitada distintas; recomendação IA nunca decisão.
- [ ] Tratamento, consentimento, representação, menores, retenção e partilha validados.
- [ ] Contratos, ownership, idempotência, versão, falhas, reconciliação e rollback aprovados.
- [ ] Métricas, orçamento, apoio operacional, testes e Go/No-Go assinados.
- [ ] Nenhum dado, custo, emprego, curso ou acreditação foi inventado para preencher o MVP.
[conformity.csv](conformity.csv) relaciona princípios, 20 blocos, tecnologias, integrações, segurança, governação, MVP e exclusões com esta especificação. «Conforme» significa alinhamento documental, nunca certificação de implementação. «Parcialmente conforme» identifica cobertura sem operação; «Pendente de validação» exige decisão/evidência; «Não conforme» identifica lacuna actual face ao alvo. A auditoria geral v4 mantém-se; este pacote não marca RF-EDU como implementados.