Documentação Técnica Consolidada
Sistema Acesso ao Emprego - Portal de Talentos
| Informação | Detalhes |
|---|---|
| Versão do Documento | 1.0.0 |
| Versão do Sistema | 1.0.0 |
| Data de Criação | Janeiro/2026 |
| Classificação | Técnico |
| Responsável | Equipe 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ódulo | Funcionalidades |
|---|---|
| Candidatos | Cadastro, currículo, busca de vagas, candidaturas, cursos |
| Empresas | Gestão de vagas, processos seletivos, avaliação de candidatos |
| Agente Governamental | Aprovação de empresas, relatórios, gestão de cursos |
| Sistema de Matching | Algoritmo fuzzy para compatibilidade candidato-vaga |
| Capacitação | Integraçã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
| Tecnologia | Versão | Função |
|---|---|---|
| React | 18.x | Framework UI |
| TypeScript | 5.x | Type safety |
| Material-UI | 6.x | Componentes UI |
| Vite | 5.x | Build tool |
| React Query | 5.x | Estado e cache |
| Zustand | 4.x | Estado global |
| React Hook Form | 7.x | Formulários |
| Yup | 1.x | Validação |
2.2.2 Backend
| Tecnologia | Versão | Função |
|---|---|---|
| Python | 3.11 | Runtime |
| Django | 5.1.7 | Framework web |
| DRF | 3.15 | API REST |
| Celery | 5.3 | Tarefas assíncronas |
| PostgreSQL | 14 | Banco de dados |
| Redis | 7.2 | Cache e filas |
| scikit-fuzzy | 0.5 | Sistema fuzzy |
| NLTK | 3.8 | PLN |
| spaCy | 3.7 | Word 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
| Modelo | Descrição |
|---|---|
| User | Usuário base do sistema |
| CandidateUser | Perfil de candidato |
| CompanyUser | Perfil de empresa |
| GovernmentAgentUser | Perfil de agente governamental |
Endpoints Principais
| Método | Endpoint | Descriçã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
| Modelo | Descrição |
|---|---|
| Candidate | Dados do candidato |
| Experience | Experiências profissionais |
| Education | Formação acadêmica |
| Skill | Habilidades |
| Course | Cursos realizados |
Endpoints Principais
| Método | Endpoint | Descriçã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
| Modelo | Descrição |
|---|---|
| Company | Dados da empresa |
| CompanyUser | Usuários da empresa |
| CompanyPermission | Permissões |
Sistema de Permissões
| Nível | Permissões |
|---|---|
| Administrador | 25 permissões (acesso total) |
| Gestor | 23 permissões |
| Membro | 9 permissões |
3.4 Módulo de Vagas (job_vacancies)
Entidades
| Modelo | Descrição |
|---|---|
| SelectiveProcess | Processo seletivo |
| Stage | Etapa do processo |
| Candidature | Candidatura |
| StageHistory | Histó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:
- Extração de Features: NLTK processa textos de currículos e vagas
- Word Embeddings: spaCy calcula similaridade semântica
- Regras Fuzzy: scikit-fuzzy aplica regras de inferência
- Score Final: Compatibilidade de 0-100%
Variáveis de Entrada
| Variável | Peso | Descrição |
|---|---|---|
| Experiência | 30% | Compatibilidade de experiências |
| Formação | 20% | Compatibilidade acadêmica |
| Cursos | 20% | Cursos complementares |
| Hard Skills | 30% | Habilidades técnicas |
3.6 Módulo de Notificações (notifications)
Tipos de Notificação
| Tipo | Descrição |
|---|---|
| CANDIDATURE | Nova candidatura |
| APPROVED | Aprovação em etapa |
| REJECTED | Reprovação |
| HIRED | Contratação |
| TEST | Teste técnico |
| MESSAGE | Mensagem 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 | Índice | Colunas |
|---|---|---|
| accounts_user | idx_user_email | |
| candidates_candidate | idx_candidate_cpf | cpf |
| companies_company | idx_company_cnpj | cnpj |
| candidatures_candidature | idx_candidature_status | status, 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ção | Implementação |
|---|---|
| CSRF | Token em cookies |
| XSS | Sanitização de inputs |
| SQL Injection | ORM parametrizado |
| CORS | Whitelist de origens |
| HTTPS | Forçado em produção |
| Headers de Segurança | HSTS, X-Frame-Options, etc. |
6.3 Criptografia
| Dado | Método |
|---|---|
| Senhas | PBKDF2 com SHA256 |
| Tokens | HMAC-SHA256 |
| Backups | AES-256 |
| Comunicação | TLS 1.2+ |
7. Integrações
7.1 Moodle
| Endpoint | Função |
|---|---|
/webservice/rest/server.php | API REST do Moodle |
core_user_create_users | Criar usuário |
enrol_manual_enrol_users | Inscrever em curso |
core_course_get_courses | Listar 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
| Endpoint | Verificaçã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ível | Uso |
|---|---|
| DEBUG | Desenvolvimento |
| INFO | Operações normais |
| WARNING | Situações inesperadas |
| ERROR | Erros recuperáveis |
| CRITICAL | Erros graves |
8.3 Métricas
| Métrica | Descrição |
|---|---|
| request_duration | Tempo de resposta |
| request_count | Requisições por endpoint |
| error_rate | Taxa de erros |
| db_query_time | Tempo 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
| Recurso | URL |
|---|---|
| Django | https://docs.djangoproject.com/ |
| DRF | https://www.django-rest-framework.org/ |
| React | https://react.dev/ |
| Material-UI | https://mui.com/ |
| PostgreSQL | https://www.postgresql.org/docs/ |
| Redis | https://redis.io/docs/ |
| Celery | https://docs.celeryq.dev/ |
10.2 Documentos Internos
| Documento | Localizaçã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ão | Data | Alteração | Autor |
|---|---|---|---|
| 1.0.0 | Jan/2026 | Versão inicial | Equipe Dev |