Pular para o conteúdo principal

Feature: Bloquear Matriculas no Mesmo Periodo

Visao geral

Feature de curso (block_enrollments_same_period) que impede nova matricula quando ha sobreposicao de periodos com outra matricula ativa do usuario.

Atores

  • Participante (alvo da regra).
  • Servico de inscricao (aplica bloqueio).
  • Admin/supervisor (configura a flag no curso).

Pre-condicoes

  • block_enrollments_same_period ativo no curso (we-dhedalos/functions/acfs/group_663b721c7c208.php:167-186).
  • Existencia de matriculas ativas do usuario com sobreposicao de datas.

Fluxo principal

  1. Durante inscricao, backend calcula intervalo do ciclo alvo.
  2. Query busca matriculas do usuario com overlap de datas e cursos com block_enrollments_same_period = '1'. Fonte: we-dhedalos/functions/utils/classes_tools.php:342-384.
  3. Se houver conflito ativo (nao cancelado), inscricao e bloqueada com mensagem. Fonte: we-dhedalos/functions/rest/course/enroll.php:207-214.

Fluxos alternativos

  • Sem conflitos: inscricao segue normalmente.
  • Conflitos apenas cancelados: ignorados no filtro (is_enroll_canceled). Fonte: we-dhedalos/functions/utils/classes_tools.php:386-389.
  • Endpoint de consulta de status tambem sinaliza conflitos concorrentes por regra equivalente. Fonte: we-dhedalos/functions/rest/course/enrolled.php:78-87, we-dhedalos/functions/rest/course/enrolled.php:100-155.

Regras de negocio

  • A regra so considera cursos com block_enrollments_same_period = '1'. Fonte: we-dhedalos/functions/utils/classes_tools.php:371-384.
  • Matriculas canceladas nao bloqueiam nova inscricao. Fonte: we-dhedalos/functions/utils/classes_tools.php:386-389.
  • Validacao e aplicada na inscricao (POST /enroll/{slug_curso}) antes de gravar students. Fonte: we-dhedalos/functions/rest/course/enroll.php:101-110 e we-dhedalos/functions/rest/course/enroll.php:207-214.

Estados possiveis

  • Curso: block_enrollments_same_period = 0|1.
  • Resultado da validacao: sem conflito / conflito ativo.

Endpoints envolvidos

  • OpenAPI POST /dhedalos/v1/enroll/{slug_curso}
  • OpenAPI GET /dhedalos/v1/course/enrolled/{slug_curso}/{user_id}

Tabelas/CPTs afetados

  • model.md curso (meta block_enrollments_same_period)
  • model.md ciclo (datas de inicio/fim)
  • model.md classes (vinculo com ciclo)
  • model.md students (estado de matricula/cancelamento)

Pendencias/duvidas

  • A regra depende da consistencia de formato de datas de ciclo (start_date/end_date) entre pontos diferentes do codigo.