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_periodativo no curso (we-dhedalos/functions/acfs/group_663b721c7c208.php:167-186).- Existencia de matriculas ativas do usuario com sobreposicao de datas.
Fluxo principal
- Durante inscricao, backend calcula intervalo do ciclo alvo.
- 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. - 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 gravarstudents. Fonte:we-dhedalos/functions/rest/course/enroll.php:101-110ewe-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(metablock_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.