@Override
  public List<StudentCurricularPlan> getPrecedentStudentCurricularPlans() {
    final Student student = getStudent();
    if (student == null) {
      return Collections.emptyList();
    }

    final List<StudentCurricularPlan> studentCurricularPlans =
        new ArrayList<StudentCurricularPlan>();
    for (final Registration registration : student.getRegistrationsSet()) {

      if (registration.isBolonha()) {
        final StudentCurricularPlan studentCurricularPlan =
            registration.getLastStudentCurricularPlan();

        for (final CycleType cycleType : getValidPrecedentCycleTypes()) {
          if (studentCurricularPlan.hasCycleCurriculumGroup(cycleType)) {
            final CycleCurriculumGroup cycle = studentCurricularPlan.getCycle(cycleType);

            if (!cycle.isConclusionProcessed() && !cycle.isConcluded()) {
              studentCurricularPlans.add(registration.getLastStudentCurricularPlan());
              break;
            }
          }
        }

      } else if (isPreBolonhaPrecedentDegreeAllowed()) {
        if (!registration.isConcluded() && !registration.isRegistrationConclusionProcessed()) {
          studentCurricularPlans.add(registration.getLastStudentCurricularPlan());
        }
      }
    }

    return studentCurricularPlans;
  }