Pular para o conteúdo principal

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:

  1. Cursos Moodle: Cursos hospedados na plataforma Moodle

    • Sincronização automática
    • Inscrição via API
    • Acompanhamento de progresso
    • Emissão de certificados
  2. 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

TipoCódigoDescrição
Inscrição Confirmadamoodle_enrollmentConfirmação de inscrição em curso
Curso Iniciadomoodle_course_startNotificação de início de curso
Curso Concluídomoodle_course_completeParabenização pela conclusão
Certificado Emitidomoodle_certificateNotificação de certificado disponível
Lembrete de Acessomoodle_reminderLembrete para acessar curso
Notificação Geralmoodle_generalNotificaçõ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 cursos
  • enrol_manual_enrol_users - Inscrever usuários
  • core_completion_get_course_completion_status - Status de conclusão
  • mod_customcert_get_issued_certificates - Certificados emitidos
  • core_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

  1. Candidato acessa lista de cursos disponíveis
  2. Aplica filtros (ex: instituição SENAI)
  3. Visualiza detalhes do curso desejado
  4. Clica em "Inscrever-se"
  5. Sistema valida dados e cria inscrição no Moodle
  6. Candidato recebe notificação com link de acesso
  7. Acessa curso diretamente pelo link

Conclusão de Curso e Certificação

  1. Candidato conclui curso no Moodle
  2. Moodle emite certificado
  3. Task de sincronização detecta conclusão
  4. Certificado é adicionado ao perfil do candidato
  5. Candidato recebe notificação de certificado disponível
  6. Certificado aparece no currículo do candidato

Busca de Cursos por Instituição

  1. Candidato acessa página de cursos
  2. Aplica filtro "Instituição: SENAI"
  3. Sistema lista apenas cursos do SENAI
  4. Candidato pode ver quais já está inscrito
  5. 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

  1. Sincronização Regular: Manter tasks de sincronização ativas
  2. Validação de Email: Garantir que candidatos tenham emails válidos
  3. Monitoramento: Acompanhar logs de integração para detectar falhas
  4. Cache: Utilizar cache para listagem de cursos (reduz chamadas à API)
  5. 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)

Referências