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​