Pular para o conteúdo principal

Requisitos do Sistema

Requisitos Funcionais

RF001 - Gestão de Usuários

Cadastro e Autenticação

  • RF001.1: O sistema deve permitir cadastro de usuários usando CPF
  • RF001.2: Autenticação deve suportar múltiplos fatores (SMS, email, biometria no mobile)
  • RF001.3: Recuperação de senha via SMS ou email
  • RF001.4: Login social opcional (Google, Facebook) vinculado ao CPF
  • RF001.5 (Planejado): Integração com CadÚnico para validação e importação de dados

Perfil Profissional

  • RF001.6: Criação de perfil profissional completo
  • RF001.7: Upload de documentos (PDF, imagens)
  • RF001.8: Validação automática de certificados
  • RF001.9: Histórico de experiências profissionais

RF002 - Gestão de Vagas

Publicação

  • RF002.1: Empresas devem poder publicar vagas após validação
  • RF002.2: Categorização automática de vagas
  • RF002.3: Definição de requisitos e competências
  • RF002.4: Geolocalização de vagas

Busca e Filtros

  • RF002.5: Busca por palavra-chave com correção ortográfica
  • RF002.6: Filtros por localização, salário, tipo de contrato
  • RF002.7: Ordenação por relevância, data, distância
  • RF002.8: Salvamento de buscas favoritas

RF003 - Sistema de Matching

Algoritmo de Compatibilidade

  • RF003.1: Cálculo de score de compatibilidade candidato-vaga
  • RF003.2: Consideração de múltiplos fatores (skills, localização, experiência)
  • RF003.3: Aprendizado contínuo baseado em feedback
  • RF003.4: Explicação do score para transparência
# Exemplo de cálculo de score
def calculate_match_score(candidate, job):
skill_score = calculate_skill_match(candidate.skills, job.requirements)
location_score = calculate_location_match(candidate.location, job.location)
experience_score = calculate_experience_match(candidate.experience, job.experience_required)

weights = {
'skills': 0.4,
'location': 0.3,
'experience': 0.3
}

final_score = (
skill_score * weights['skills'] +
location_score * weights['location'] +
experience_score * weights['experience']
)

return {
'score': final_score,
'breakdown': {
'skills': skill_score,
'location': location_score,
'experience': experience_score
}
}

RF004 - Processo de Candidatura

Aplicação

  • RF004.1: Candidatura com um clique
  • RF004.2: Possibilidade de carta de apresentação
  • RF004.3: Acompanhamento de status em tempo real
  • RF004.4: Histórico completo de candidaturas

Comunicação

  • RF004.5: Notificações sobre mudanças de status
  • RF004.6: Chat entre empresa e candidato (após match)
  • RF004.7: Agendamento de entrevistas integrado
  • RF004.8: Feedback estruturado pós-processo

RF005 - Dashboard e Analytics

Para Cidadãos

  • RF005.1: Visualização de estatísticas pessoais
  • RF005.2: Recomendações de melhoria de perfil
  • RF005.3: Insights sobre mercado de trabalho
  • RF005.4: Progresso em processos seletivos

Para Empresas

  • RF005.5: Métricas de vagas (visualizações, candidaturas)
  • RF005.6: Funil de contratação
  • RF005.7: Comparativo com mercado
  • RF005.8: ROI de contratações

Para Gestores Públicos

  • RF005.9: Dashboard executivo com KPIs
  • RF005.10: Mapas de calor de empregabilidade
  • RF005.11: Relatórios customizáveis
  • RF005.12: Previsões e tendências

Requisitos Não-Funcionais

RNF001 - Performance

Tempo de Resposta

OperaçãoTempo MáximoPercentil
Carregamento de página2sp95
Busca de vagas500msp95
API calls200msp95
Processamento de match5sp99

Capacidade

  • RNF001.1: Suportar 1 milhão de usuários ativos mensais
  • RNF001.2: Processar 10.000 requisições por segundo
  • RNF001.3: Armazenar 10TB de dados com crescimento de 20% ao ano
  • RNF001.4: Processar 100.000 matches por hora

RNF002 - Disponibilidade

SLA

  • RNF002.1: 99.9% de disponibilidade (downtime máximo: 43.2 min/mês)
  • RNF002.2: RTO (Recovery Time Objective): 30 minutos
  • RNF002.3: RPO (Recovery Point Objective): 5 minutos
  • RNF002.4: Manutenções programadas fora de horário comercial

Resiliência

resilience_requirements:
circuit_breaker:
threshold: 5 failures
timeout: 60 seconds

retry_policy:
max_attempts: 3
backoff: exponential

bulkhead:
max_concurrent: 100
queue_size: 1000

timeouts:
http_request: 30s
database_query: 5s
external_api: 10s

RNF003 - Segurança

Autenticação e Autorização

  • RNF003.1: OAuth 2.0 + JWT para APIs
  • RNF003.2: Sessões com timeout de 30 minutos de inatividade
  • RNF003.3: Rate limiting por IP e por usuário
  • RNF003.4: CAPTCHA após 3 tentativas falhas

Proteção de Dados

  • RNF003.5: Criptografia AES-256 para dados em repouso
  • RNF003.6: TLS 1.3 para dados em trânsito
  • RNF003.7: PII tokenization para dados sensíveis
  • RNF003.8: Logs sem dados pessoais

RNF004 - Usabilidade

Acessibilidade

  • RNF004.1: Conformidade com WCAG 2.1 nível AA
  • RNF004.2: Suporte a leitores de tela
  • RNF004.3: Navegação por teclado completa
  • RNF004.4: Contraste mínimo de 4.5:1

Mobile First

  • RNF004.5: Design responsivo para todos os tamanhos de tela
  • RNF004.6: PWA com funcionalidade offline
  • RNF004.7: Touch targets mínimo de 44x44 pixels
  • RNF004.8: Otimização para conexões lentas (2G/3G)

RNF005 - Manutenibilidade

Código

  • RNF005.1: Cobertura de testes mínima de 80%
  • RNF005.2: Documentação inline para todas as funções públicas
  • RNF005.3: Linting e formatação automática
  • RNF005.4: Análise estática de segurança

Arquitetura

LGPD

  • RNF006.1: Consentimento explícito para coleta de dados
  • RNF006.2: Direito ao esquecimento implementado
  • RNF006.3: Portabilidade de dados em formato padrão
  • RNF006.4: Relatório de impacto de proteção de dados

Normas Trabalhistas

  • RNF006.5: Conformidade com CLT
  • RNF006.6: Não discriminação algorítmica
  • RNF006.7: Transparência em processos seletivos
  • RNF006.8: Auditabilidade completa

RNF007 - Internacionalização

Idiomas

  • RNF007.1: Interface em Português brasileiro (padrão)
  • RNF007.2: Suporte para inglês e espanhol
  • RNF007.3: Datas e números no formato local
  • RNF007.4: Moeda em Real brasileiro

RNF008 - Integração

APIs Externas

  • RNF008.1: Timeout configurável para cada integração
  • RNF008.2: Fallback para indisponibilidade
  • RNF008.3: Cache de respostas quando apropriado
  • RNF008.4: Monitoramento de SLA de terceiros

Matriz de Rastreabilidade

RequisitoPrioridadeMóduloResponsávelStatus
RF001.1AltaAuthBackendImplementado
RF001.2AltaAuthBackendEm desenvolvimento
RF002.1AltaJobsBackendPlanejado
RF003.1CríticaMatchingML TeamEm desenvolvimento
RNF001.1AltaInfraDevOpsImplementado
RNF003.1CríticaSecuritySecurity TeamImplementado

Casos de Uso Principais

UC001 - Candidatar-se a uma Vaga

UC002 - Publicar Vaga (Empresa)

// Fluxo de publicação de vaga
async function publishJob(jobData: JobInput): Promise<Job> {
// 1. Validação
const validation = await validateJobData(jobData);
if (!validation.isValid) {
throw new ValidationError(validation.errors);
}

// 2. Enriquecimento
const enrichedData = await enrichJobData(jobData, {
categorize: true,
extractSkills: true,
geocode: true
});

// 3. Aprovação (se necessário)
if (requiresApproval(enrichedData)) {
await submitForApproval(enrichedData);
return { status: 'pending_approval', ...enrichedData };
}

// 4. Publicação
const job = await createJob(enrichedData);

// 5. Indexação
await indexForSearch(job);

// 6. Notificação de candidatos compatíveis
await notifyMatchingCandidates(job);

return job;
}

Priorização

Os requisitos estão priorizados usando o método MoSCoW (Must have, Should have, Could have, Won't have) e são revisados a cada sprint de desenvolvimento.