Pular para o conteúdo principal

Documentação Técnica Consolidada

Sistema Acesso ao Emprego - Portal de Talentos


InformaçãoDetalhes
Versão do Documento1.0.0
Versão do Sistema1.0.0
Data de CriaçãoJaneiro/2026
ClassificaçãoTécnico
ResponsávelEquipe de Desenvolvimento

1. Visão Geral do Sistema

1.1 Descrição

O Portal de Talentos - Acesso ao Emprego é uma plataforma completa de recrutamento e seleção que conecta candidatos em situação de vulnerabilidade social a oportunidades de emprego e capacitação profissional. O sistema utiliza algoritmos de inteligência artificial para matching inteligente entre perfis e vagas.

1.2 Objetivos

  • Facilitar o acesso ao emprego para cidadãos em vulnerabilidade social
  • Conectar empresas a talentos qualificados
  • Promover capacitação profissional através de cursos integrados
  • Fornecer métricas e relatórios para políticas públicas

1.3 Principais Funcionalidades

MóduloFuncionalidades
CandidatosCadastro, currículo, busca de vagas, candidaturas, cursos
EmpresasGestão de vagas, processos seletivos, avaliação de candidatos
Agente GovernamentalAprovação de empresas, relatórios, gestão de cursos
Sistema de MatchingAlgoritmo fuzzy para compatibilidade candidato-vaga
CapacitaçãoIntegração com Moodle para cursos e certificações

2. Arquitetura do Sistema

2.1 Visão de Alto Nível

┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND │
│ React 18 + TypeScript │
│ Material-UI v6 │
└─────────────────────────┬───────────────────────────────────────┘
│ HTTPS
┌─────────────────────────▼───────────────────────────────────────┐
│ NGINX │
│ Load Balancer + Reverse Proxy │
└─────────────────────────┬───────────────────────────────────────┘

┌─────────────────────────▼───────────────────────────────────────┐
│ BACKEND API │
│ Django 5.1 + DRF 3.15 │
│ Gunicorn │
└───────┬─────────────────┬─────────────────┬─────────────────────┘
│ │ │
┌───────▼─────┐ ┌───────▼─────┐ ┌───────▼─────┐
│ PostgreSQL │ │ Redis │ │ Celery │
│ 14.x │ │ 7.x │ │ Worker │
│ Database │ │ Cache │ │ + Beat │
└─────────────┘ └─────────────┘ └─────────────┘

2.2 Componentes

2.2.1 Frontend

TecnologiaVersãoFunção
React18.xFramework UI
TypeScript5.xType safety
Material-UI6.xComponentes UI
Vite5.xBuild tool
React Query5.xEstado e cache
Zustand4.xEstado global
React Hook Form7.xFormulários
Yup1.xValidação

2.2.2 Backend

TecnologiaVersãoFunção
Python3.11Runtime
Django5.1.7Framework web
DRF3.15API REST
Celery5.3Tarefas assíncronas
PostgreSQL14Banco de dados
Redis7.2Cache e filas
scikit-fuzzy0.5Sistema fuzzy
NLTK3.8PLN
spaCy3.7Word embeddings

2.3 Padrão Arquitetural

O backend segue os princípios de Clean Architecture e Domain-Driven Design (DDD):

app/
├── apps/ # Bounded Contexts
│ └── {module}/
│ ├── domain/ # Camada de Domínio
│ │ ├── models/ # Entidades
│ │ ├── choices/ # Enums
│ │ └── permissions/ # Regras de acesso
│ ├── application/ # Camada de Aplicação
│ │ └── services/ # Casos de uso
│ └── presentation/ # Camada de Apresentação
│ ├── views/ # API Views
│ ├── serializers/ # DTOs
│ ├── urls/ # Rotas
│ └── filters/ # Filtros de busca

2.4 Fluxo de Dados

1. Cliente (Browser)
↓ HTTP Request
2. Nginx (Reverse Proxy)

3. Gunicorn (WSGI Server)

4. Django Middleware (Auth, CORS, Security)

5. URL Router

6. View (Validação, Autorização)

7. Serializer (Transformação de dados)

8. Service (Lógica de negócio)

9. Model (ORM)

10. PostgreSQL (Persistência)

3. Módulos do Sistema

3.1 Módulo de Autenticação (accounts)

Entidades

ModeloDescrição
UserUsuário base do sistema
CandidateUserPerfil de candidato
CompanyUserPerfil de empresa
GovernmentAgentUserPerfil de agente governamental

Endpoints Principais

MétodoEndpointDescrição
POST/api/auth/token/Login (JWT)
POST/api/auth/token/refresh/Refresh token
POST/api/auth/register/Cadastro
GET/api/auth/me/Dados do usuário

3.2 Módulo de Candidatos (candidates)

Entidades

ModeloDescrição
CandidateDados do candidato
ExperienceExperiências profissionais
EducationFormação acadêmica
SkillHabilidades
CourseCursos realizados

Endpoints Principais

MétodoEndpointDescrição
GET/api/candidates/Listar candidatos
GET/api/candidates/detail/{id}/Detalhes
PUT/api/candidates/detail/{id}/Atualizar
GET/api/candidates/me/Meu perfil

3.3 Módulo de Empresas (companies)

Entidades

ModeloDescrição
CompanyDados da empresa
CompanyUserUsuários da empresa
CompanyPermissionPermissões

Sistema de Permissões

NívelPermissões
Administrador25 permissões (acesso total)
Gestor23 permissões
Membro9 permissões

3.4 Módulo de Vagas (job_vacancies)

Entidades

ModeloDescrição
SelectiveProcessProcesso seletivo
StageEtapa do processo
CandidatureCandidatura
StageHistoryHistórico de etapas

Fluxo do Processo Seletivo

1. Criação da Vaga

2. Configuração de Etapas

3. Publicação

4. Recebimento de Candidaturas

5. Triagem (Sistema Fuzzy)

6. Avaliação por Etapas

7. Seleção Final

3.5 Módulo de Sistema Fuzzy (fuzzy)

Funcionamento

O sistema de matching utiliza lógica fuzzy para calcular a compatibilidade entre candidatos e vagas:

  1. Extração de Features: NLTK processa textos de currículos e vagas
  2. Word Embeddings: spaCy calcula similaridade semântica
  3. Regras Fuzzy: scikit-fuzzy aplica regras de inferência
  4. Score Final: Compatibilidade de 0-100%

Variáveis de Entrada

VariávelPesoDescrição
Experiência30%Compatibilidade de experiências
Formação20%Compatibilidade acadêmica
Cursos20%Cursos complementares
Hard Skills30%Habilidades técnicas

3.6 Módulo de Notificações (notifications)

Tipos de Notificação

TipoDescrição
CANDIDATURENova candidatura
APPROVEDAprovação em etapa
REJECTEDReprovação
HIREDContratação
TESTTeste técnico
MESSAGEMensagem geral

3.7 Módulo de Cursos (courses)

Integração Moodle

  • Sincronização de cursos
  • Inscrição automática
  • Acompanhamento de progresso
  • Emissão de certificados

4. API REST

4.1 Autenticação

O sistema utiliza JWT (JSON Web Tokens):

POST /api/auth/token/
Content-Type: application/json

{
"email": "user@example.com",
"password": "password123"
}

Response:
{
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

4.2 Padrão de Resposta

Sucesso

{
"data": { ... },
"message": "Operação realizada com sucesso"
}

Erro

{
"error": {
"code": "VALIDATION_ERROR",
"message": "Dados inválidos",
"details": [
{ "field": "email", "message": "Email inválido" }
]
}
}

4.3 Paginação

GET /api/candidates/?page=1&page_size=20

Response:
{
"count": 150,
"next": "/api/candidates/?page=2",
"previous": null,
"results": [ ... ]
}

4.4 Filtros

GET /api/selective-process/?status=PUBLISHED&area=technology&city=Brasilia

4.5 Documentação Interativa

  • Swagger UI: /docs/
  • ReDoc: /redoc/
  • OpenAPI Schema: /api/schema/

5. Banco de Dados

5.1 Diagrama ER (Principais Entidades)

┌──────────────┐       ┌──────────────┐
│ User │ │ Company │
├──────────────┤ ├──────────────┤
│ id │ │ id │
│ email │ │ name │
│ password │ │ cnpj │
│ user_type │ │ status │
└──────┬───────┘ └──────┬───────┘
│ │
│ ┌─────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Candidate │ │ CompanyUser │
├──────────────────┤ ├──────────────────┤
│ id │ │ id │
│ user_id (FK) │ │ user_id (FK) │
│ name │ │ company_id (FK) │
│ cpf │ │ role │
│ resume │ └──────────────────┘
└────────┬─────────┘



┌──────────────────┐ ┌──────────────────┐
│ Candidature │───▶│ SelectiveProcess │
├──────────────────┤ ├──────────────────┤
│ id │ │ id │
│ candidate_id(FK) │ │ company_id (FK) │
│ process_id (FK) │ │ title │
│ status │ │ status │
│ compatibility │ │ stages │
└──────────────────┘ └──────────────────┘

5.2 Índices Importantes

TabelaÍndiceColunas
accounts_useridx_user_emailemail
candidates_candidateidx_candidate_cpfcpf
companies_companyidx_company_cnpjcnpj
candidatures_candidatureidx_candidature_statusstatus, candidate_id

5.3 Configurações de Performance

-- Configurações PostgreSQL recomendadas
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 4MB
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4

6. Segurança

6.1 Autenticação e Autorização

  • JWT com refresh tokens
  • Tokens de curta duração (1h access, 24h refresh)
  • Blacklist de tokens revogados
  • Rate limiting por IP e usuário

6.2 Proteções Implementadas

ProteçãoImplementação
CSRFToken em cookies
XSSSanitização de inputs
SQL InjectionORM parametrizado
CORSWhitelist de origens
HTTPSForçado em produção
Headers de SegurançaHSTS, X-Frame-Options, etc.

6.3 Criptografia

DadoMétodo
SenhasPBKDF2 com SHA256
TokensHMAC-SHA256
BackupsAES-256
ComunicaçãoTLS 1.2+

7. Integrações

7.1 Moodle

EndpointFunção
/webservice/rest/server.phpAPI REST do Moodle
core_user_create_usersCriar usuário
enrol_manual_enrol_usersInscrever em curso
core_course_get_coursesListar cursos

7.2 Email (SMTP)

  • Servidor: Configurável via variáveis de ambiente
  • Templates: HTML responsivos
  • Queue: Processamento via Celery

7.3 Armazenamento (MinIO/S3)

  • Upload de arquivos (currículos, fotos)
  • Presigned URLs para acesso temporário
  • Lifecycle policies para limpeza

8. Monitoramento

8.1 Health Checks

EndpointVerificação
/api/v1/health/Status geral da API
/api/v1/health/db/Conexão com banco
/api/v1/health/redis/Conexão com Redis

8.2 Logs

NívelUso
DEBUGDesenvolvimento
INFOOperações normais
WARNINGSituações inesperadas
ERRORErros recuperáveis
CRITICALErros graves

8.3 Métricas

MétricaDescrição
request_durationTempo de resposta
request_countRequisições por endpoint
error_rateTaxa de erros
db_query_timeTempo de queries

9. Estrutura de Diretórios

portal-talentos/
├── backend/
│ ├── app/
│ │ ├── apps/ # Módulos da aplicação
│ │ │ ├── accounts/ # Autenticação
│ │ │ ├── candidates/ # Candidatos
│ │ │ ├── companies/ # Empresas
│ │ │ ├── job_vacancies/ # Vagas
│ │ │ ├── questionnaires/ # Testes
│ │ │ ├── notifications/ # Notificações
│ │ │ └── reports/ # Relatórios
│ │ ├── settings/ # Configurações Django
│ │ ├── celery.py # Configuração Celery
│ │ └── urls.py # URLs principais
│ ├── fuzzy/ # Sistema Fuzzy
│ ├── configs/ # Configurações
│ │ ├── docker/
│ │ ├── env/
│ │ └── requirements.txt
│ ├── media/ # Arquivos de mídia
│ └── staticfiles/ # Arquivos estáticos
├── frontend/
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── pages/ # Páginas
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # Serviços API
│ │ ├── stores/ # Estado (Zustand)
│ │ └── utils/ # Utilitários
│ ├── public/
│ └── package.json
├── docs-portal-emprego/ # Documentação
├── docker-compose.dev.yml
└── docker-compose.prod.yml

10. Referências

10.1 Documentação Externa

RecursoURL
Djangohttps://docs.djangoproject.com/
DRFhttps://www.django-rest-framework.org/
Reacthttps://react.dev/
Material-UIhttps://mui.com/
PostgreSQLhttps://www.postgresql.org/docs/
Redishttps://redis.io/docs/
Celeryhttps://docs.celeryq.dev/

10.2 Documentos Internos

DocumentoLocalização
Manual de Instalação/docs/documentos-formais/manual-instalacao-configuracao.md
Plano de DR/docs/documentos-formais/plano-contingencia-recuperacao.md
Manutenção Preventiva/docs/documentos-formais/procedimentos-manutencao-preventiva.md

Controle de Alterações

VersãoDataAlteraçãoAutor
1.0.0Jan/2026Versão inicialEquipe Dev