Marketplace de Talentos
Vaga por skill e candidato ranqueado por competência provada em laboratório, não por currículo.
A empresa publica vaga por skill exigida, com trilha, senioridade e remoto. A vaga nasce em rascunho e a máquina de estados leva a publicada, pausada e encerrada, preservando a data da primeira publicação. O profissional mantém um perfil e decide se aparece na busca. A candidatura tem estados próprios: aplicado, em análise, entrevista, oferta, contratado, com recusa possível antes dos terminais.
O que diferencia é a origem do ranking. As skills verificadas não são digitadas: saem das trilhas em que a pessoa acertou flag na Cyber Arena, somadas às skills do perfil da Arena. A reputação sai do perfil de hunter do Bounty. Os pontos da Arena somam o que foi efetivamente premiado nos acertos, lido da evidência (as tentativas) e não de uma projeção. O score é reputação multiplicada por um mais a fração das skills declaradas que estão provadas. Cada uma dessas leituras é opcional e roda num SAVEPOINT isolado: se a Arena ou o Bounty não existirem no ambiente, o campo volta vazio e a página continua de pé em vez de quebrar ou envenenar a transação.
A postura de LGPD é dura por construção. O perfil só entra na busca com consentimento explícito na mesma chamada — pedir exposição sem consentir dá 422 — e a data do consentimento é gravada e preservada mesmo quando a pessoa se despublica, porque é fato jurídico. A listagem devolve PII minimizada: headline, skills e evidência, nunca a bio integral nem contato. A IA de match recebe referências opacas c1 a cN, jamais user_id, nome, bio ou e-mail, e uma referência inventada pelo modelo é descartada na volta.
Capacidades em operação
Cada item corresponde a funcionalidade que existe no código e é alcançável por um usuário com o escopo correto.
-
Vagas por skill com máquina de estados
Criar em rascunho, editar parcialmente, listar com filtro por status, trilha, senioridade e skill, e transicionar por publicar, pausar, retomar e encerrar. Transição inválida devolve 422 dizendo de onde para onde. A data da primeira publicação é preservada nas republicações.
-
Perfil de candidato com consentimento explícito
Exposição na busca só com consentimento na mesma chamada; sem ele, 422 com código próprio. A data do consentimento é gravada quando concedido e não é apagada ao despublicar.
-
Busca de candidatos com PII minimizada
Só perfis expostos, devolvendo headline, skills declaradas, skills provadas, reputação, pontos da Arena e score. Bio integral e contato ficam fora da listagem.
-
Competência derivada da evidência real
Skills verificadas vêm das trilhas com flag correta na Arena mais as skills do perfil da Arena. Reputação vem do perfil de hunter do Bounty. Pontos da Arena vêm da soma dos acertos, agregada numa única consulta para a página inteira, sem uma query por candidato.
-
Degradação honesta quando a fonte não existe
Cada leitura derivada roda em SAVEPOINT: fonte ausente devolve vazio e reputação zero em vez de derrubar a página. O identificador é normalizado antes da comparação por texto, para que quem tem pontos não apareça com zero por diferença de grafia de UUID.
-
Candidatura idempotente
Índice único por vaga e candidato: candidatar-se duas vezes devolve a candidatura existente em vez de duplicar, inclusive sob corrida. Só vaga publicada aceita candidatura; as demais dão 422 com código próprio.
-
Pipeline de candidatura
Transições validadas com terminais contratado e recusado. Transição para o mesmo estado é no-op bem-sucedido, não erro. Cada mudança grava a origem e o destino na auditoria.
-
Sugestão de match por IA (rascunho)
Entrada minimizada com referências opacas, saída com score de aderência clampado entre 0 e 100 e justificativa truncada. Resposta que não é JSON válido vira lista vazia; gateway indisponível ou bloqueado vira 503 explícito. A decisão continua do recrutador.
-
Auditoria sem PII
Os registros guardam ids, estados, se houve consentimento e quantas skills foram declaradas. Nem headline, nem bio, nem contato entram no log.
Entregáveis
- Quadro de vagas por skill com estado atual e data da primeira publicacao
- Perfil de candidato com skills declaradas e skills provadas lado a lado
- Lista de candidatos ranqueada por competência real, com pontos da Arena e reputação do Bounty
- Registro datado do consentimento de exposição
- Pipeline de candidaturas por vaga, auditado ponta a ponta
O que este módulo não faz
KYC não existe. O campo kyc_status nasce como pendente e nenhum código do repositório o altera — é um gancho declarado no schema, não uma verificação de identidade. A sugestão de candidatos por IA está implementada na API, mas o cliente JavaScript não expõe a função e nenhuma tela chama: hoje só por chamada direta à API. A competência provada é da própria organização: as tabelas da Arena e do Bounty são isoladas por tenant sob RLS, então o que a pessoa provou em outra empresa não aparece aqui. O filtro por skill e por trilha cruza as skills DECLARADAS pelo candidato; a evidência verificada entra no ranking, não no filtro — quem provou a skill mas não a declarou não aparece na busca filtrada. A busca pagina por recência e reordena por relevância dentro da página: não é um ranking global paginado. Nenhuma transição de vaga ou de candidatura dispara e-mail ou notificação — não há integração de mensageria neste módulo. Não há contrato, pagamento nem intermediação financeira entre empresa e profissional.
Declaramos o limite porque software de segurança que promete tudo não é auditável. Se o que falta aqui é o que você precisa, o serviço consultivo cobre — ou dizemos que não cobre.
Conecta com
- Cyber Arena BR (skills verificadas e pontos)
- Bug Bounty (reputação de hunter)
- Gateway de IA da plataforma (sugestão de match)
Controle de acesso
O acesso é concedido por escopo, não por perfil genérico. Quem só precisa ler não recebe permissão de escrita, e a barreira é o banco de dados, não a interface.
- talent:job:read
- talent:job:manage
- talent:candidate:read
- talent:profile:read
- talent:profile:manage
- talent:application:read
- talent:application:manage
Quer ver funcionando?
Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.