Integração com Plataforma Moodle
Visão Geral
O sistema possui integração completa com a plataforma Moodle para oferecer cursos de capacitação profissional aos candidatos cadastrados. Esta integração permite sincronização bidirecional de dados, inscrições automáticas e acompanhamento de progresso.
Arquitetura da Integração
Funcionalidades Principais
1. Gestão de Cursos
Sincronização de Cursos
O sistema sincroniza automaticamente cursos do Moodle para o banco de dados local, permitindo listagem e busca otimizada.
Campos Sincronizados:
- ID do curso no Moodle
- Nome do curso
- Descrição completa
- Instituição responsável
- URL de acesso
- Logo do curso
- Caminho de aprendizagem
- Certificação disponível
- Status (ativo/inativo)
Tipos de Cursos
O sistema suporta dois tipos de cursos:
-
Cursos Moodle: Cursos hospedados na plataforma Moodle
- Sincronização automática
- Inscrição via API
- Acompanhamento de progresso
- Emissão de certificados
-
Cursos Externos: Cursos não hospedados no Moodle
- Cadastro manual
- Link externo para acesso
- Sem sincronização automática
- Controle de disponibilidade
2. Sistema de Inscrições
Fluxo de Inscrição
Requisitos para Inscrição
- Candidato deve ter perfil completo no sistema
- Email válido e confirmado
- Curso deve estar ativo e disponível
- Respeitar pré-requisitos do curso (se houver)
Endpoints de Inscrição
POST /api/candidates/courses/enroll/
Inscreve o candidato autenticado em um curso Moodle.
{
"course_id": 123
}
Response:
{
"success": true,
"message": "Inscrição realizada com sucesso",
"enrollment_id": 456,
"course_url": "https://moodle.example.com/course/view.php?id=123"
}
3. Sincronização de Certificados
O sistema sincroniza automaticamente certificados de cursos concluídos no Moodle para o perfil do candidato.
Fluxo de Sincronização
Dados do Certificado
- Nome do curso
- Instituição emissora
- Data de emissão
- Data de validade (se aplicável)
- Código de verificação
- URL do certificado
- Status (ativo/expirado)
4. Sistema de Notificações Moodle
O sistema envia notificações aos candidatos sobre eventos relacionados aos cursos:
Tipos de Notificações
| Tipo | Código | Descrição |
|---|---|---|
| Inscrição Confirmada | moodle_enrollment | Confirmação de inscrição em curso |
| Curso Iniciado | moodle_course_start | Notificação de início de curso |
| Curso Concluído | moodle_course_complete | Parabenização pela conclusão |
| Certificado Emitido | moodle_certificate | Notificação de certificado disponível |
| Lembrete de Acesso | moodle_reminder | Lembrete para acessar curso |
| Notificação Geral | moodle_general | Notificações gerais do Moodle |
Integração com Sistema de Notificações
As notificações Moodle são integradas ao sistema de notificações do portal:
{
"id": 123,
"type": "moodle_certificate",
"title": "Certificado Disponível",
"message": "Seu certificado do curso 'Python Básico' está disponível!",
"course_id": 456,
"course_name": "Python Básico",
"read": false,
"created_at": "2024-01-15T10:30:00Z"
}
Ações nas Notificações
Ao clicar em uma notificação Moodle:
- Tipo curso/certificado: Redireciona para página de detalhes do curso
- Tipo geral: Redireciona para lista de cursos disponíveis
5. Filtros e Busca de Cursos
O sistema oferece filtros avançados para busca de cursos:
Filtros Disponíveis:
- Instituição responsável
- Status (ativo/inativo)
- Tipo (Moodle/Externo)
- Busca por texto (nome/descrição)
- Cursos com certificação
- Cursos já inscritos
Endpoint de Listagem:
GET /api/candidates/courses/
GET /api/candidates/courses/?institution=1&search=python&has_certification=true
Response:
{
"count": 15,
"next": "...",
"previous": null,
"results": [
{
"id": 123,
"moodle_id": 456,
"name": "Python para Iniciantes",
"description": "Curso básico de Python",
"institution": {
"id": 1,
"name": "SENAI"
},
"course_url": "https://moodle.example.com/course/123",
"logo_url": "https://...",
"has_certification": true,
"is_enrolled": false,
"is_external": false
}
]
}
6. Configuração da Integração
Variáveis de Ambiente
MOODLE_URL=https://moodle.example.com
MOODLE_TOKEN=seu-token-webservice
MOODLE_SERVICE=moodle_mobile_app
Configuração no Django
MOODLE_SETTINGS = {
'URL': env('MOODLE_URL'),
'TOKEN': env('MOODLE_TOKEN'),
'SERVICE': env('MOODLE_SERVICE', default='moodle_mobile_app'),
'TIMEOUT': 30,
'SYNC_INTERVAL': 3600,
}
Permissões Necessárias no Moodle
O token de webservice deve ter as seguintes permissões:
core_course_get_courses- Listar cursosenrol_manual_enrol_users- Inscrever usuárioscore_completion_get_course_completion_status- Status de conclusãomod_customcert_get_issued_certificates- Certificados emitidoscore_user_create_users- Criar usuários (se necessário)
7. Tarefas Assíncronas (Celery)
Sincronização de Cursos
Task: sync_moodle_courses
Execução: A cada 6 horas (configurável)
@shared_task
def sync_moodle_courses():
service = MoodleIntegrationService()
courses = service.fetch_all_courses()
for course_data in courses:
Course.objects.update_or_create(
moodle_id=course_data['id'],
defaults={
'name': course_data['fullname'],
'description': course_data['summary'],
'course_url': course_data['url'],
}
)
return f"Sincronizados {len(courses)} cursos"
Sincronização de Certificados
Task: sync_completed_moodle_courses
Execução: Diariamente às 2h
@shared_task
def sync_completed_moodle_courses():
service = MoodleIntegrationService()
candidates = Candidate.objects.filter(
user__is_active=True
)
for candidate in candidates:
completed = service.get_completed_courses(candidate)
for course in completed:
CandidateCertificate.objects.get_or_create(
candidate=candidate,
course=course,
defaults={
'issue_date': course.completion_date,
'certificate_url': course.certificate_url
}
)
Casos de Uso
Candidato se Inscrevendo em Curso
- Candidato acessa lista de cursos disponíveis
- Aplica filtros (ex: instituição SENAI)
- Visualiza detalhes do curso desejado
- Clica em "Inscrever-se"
- Sistema valida dados e cria inscrição no Moodle
- Candidato recebe notificação com link de acesso
- Acessa curso diretamente pelo link
Conclusão de Curso e Certificação
- Candidato conclui curso no Moodle
- Moodle emite certificado
- Task de sincronização detecta conclusão
- Certificado é adicionado ao perfil do candidato
- Candidato recebe notificação de certificado disponível
- Certificado aparece no currículo do candidato
Busca de Cursos por Instituição
- Candidato acessa página de cursos
- Aplica filtro "Instituição: SENAI"
- Sistema lista apenas cursos do SENAI
- Candidato pode ver quais já está inscrito
- Identifica cursos com certificação disponível
Limitações e Considerações
Limitações Atuais
- Sincronização não é em tempo real (executada periodicamente)
- Cursos externos não possuem acompanhamento de progresso
- Certificados dependem de configuração correta no Moodle
- Inscrições requerem email válido e único
Boas Práticas
- Sincronização Regular: Manter tasks de sincronização ativas
- Validação de Email: Garantir que candidatos tenham emails válidos
- Monitoramento: Acompanhar logs de integração para detectar falhas
- Cache: Utilizar cache para listagem de cursos (reduz chamadas à API)
- Tratamento de Erros: Implementar retry em falhas temporárias de conexão
Monitoramento e Logs
Logs de Integração
logger.info(f"Sincronizando cursos do Moodle")
logger.info(f"Encontrados {count} cursos no Moodle")
logger.error(f"Erro ao sincronizar curso {course_id}: {error}")
logger.info(f"Candidato {candidate_id} inscrito no curso {course_id}")
Métricas Importantes
- Total de cursos sincronizados
- Total de inscrições realizadas
- Taxa de conclusão de cursos
- Certificados emitidos
- Tempo médio de sincronização
- Taxa de erro de inscrições
Roadmap
Funcionalidades Futuras
- ✅ Sincronização de certificados
- ✅ Notificações de eventos Moodle
- ✅ Filtros avançados por instituição
- 🔜 Sincronização em tempo real via webhooks
- 🔜 Recomendação inteligente de cursos
- 🔜 Gamificação (badges e conquistas)
- 🔜 Relatórios de progresso detalhados
- 🔜 Integração com outros LMS (além do Moodle)