public List<DegreeCourseStatisticsDTO> run(
      CompetenceCourse competenceCourse, ExecutionSemester executionSemester)
      throws FenixServiceException {
    Map<Degree, List<CurricularCourse>> groupedCourses =
        competenceCourse.getAssociatedCurricularCoursesGroupedByDegree();

    List<DegreeCourseStatisticsDTO> results = new ArrayList<DegreeCourseStatisticsDTO>();

    for (Degree degree : groupedCourses.keySet()) {
      List<Enrolment> enrollments = new ArrayList<Enrolment>();
      List<CurricularCourse> curricularCourses = groupedCourses.get(degree);

      for (CurricularCourse curricularCourse : curricularCourses) {
        enrollments.addAll(curricularCourse.getActiveEnrollments(executionSemester));
      }

      DegreeCourseStatisticsDTO degreeCourseStatistics = new DegreeCourseStatisticsDTO();
      degreeCourseStatistics.setExternalId(degree.getExternalId());
      degreeCourseStatistics.setName(degree.getSigla());
      createCourseStatistics(degreeCourseStatistics, enrollments);

      results.add(degreeCourseStatistics);
    }

    return results;
  }