ECTS Credits and Grading System Explained
The European Credit Transfer and Accumulation System (ECTS) is the foundation of academic credit recognition across 49 countries in the European Higher Education Area. One ECTS credit represents 25–30 hours of student workload; grades A through E are assigned relative to the cohort distribution rather than fixed percentage cutoffs. This page explains how ECTS works, what the Diploma Supplement contains, how it differs from national scales, and how OpenEduCat generates fully Bologna-compliant transcripts and Diploma Supplements.
What Are ECTS Credits?
The Credit Definition
One ECTS credit represents 25 to 30 hours of total student workload. Workload includes all forms of learning activity: attending lectures and seminars, private study, preparing for assessments, laboratory work, and writing assignments. A module worth 6 ECTS credits expects approximately 150–180 hours of student effort.
1 ECTS
= 25–30 hours student work
60 ECTS
= 1 full academic year
180 ECTS
= standard 3-year bachelor's degree
ECTS for Credit Transfer
ECTS was originally designed to facilitate student mobility across European institutions. When a student completes 30 ECTS credits at a partner institution during an Erasmus exchange, those credits are directly recognised at the home institution, the ECTS value tells both parties how much learning effort those courses represent. This credit portability is what makes ECTS the standard for Erasmus+ agreements across the EHEA.
The ECTS Relative Grading Scale
ECTS grades A–E are assigned based on a student's position within the distribution of passing students in the cohort, not on a fixed percentage cutoff.
| ECTS Grade | Definition | Cohort Position | Typical % Band | Earns Credit? |
|---|---|---|---|---|
| A | Excellent, outstanding performance | Best 10% of passing students | ~75–100 | Yes |
| B | Very good, above average performance | Next 25% of passing students | ~65–74 | Yes |
| C | Good, generally sound performance | Next 30% of passing students | ~55–64 | Yes |
| D | Satisfactory, acceptable performance | Next 25% of passing students | ~45–54 | Yes |
| E | Sufficient, minimum passing performance | Lowest 10% of passing students | ~40–44 | Yes |
| FX | Fail, some improvement needed before credit can be awarded | Failing, not in cohort distribution | ~30–39 | No |
| F | Fail, considerable work required before credit can be awarded | Failing, not in cohort distribution | Below 30 | No |
How cohort distribution works in OpenEduCat: The gradebook_analytics.precompute_cohort_stats() function aggregates passing grades across a two-year window for each subject. The ECTS grading table is then computed from this distribution and published to Diploma Supplement Section 4. The low_n=True flag marks tables built on fewer than 30 passing students as statistically unreliable.
ECTS vs National Grading Scales
The ECTS scale does not replace national scales, it sits alongside them.
Two Grades on Every Record
European institutions typically award students both a national grade (on their local scale) and an ECTS grade (for mobility and recognition purposes). In France, a student might receive 14/20 (their national mark) alongside ECTS grade B (they were in the top 25% + 10% of passing students in the cohort). In Germany, a 1.5 (sehr gut) corresponds to an ECTS A.
OpenEduCat's Bologna module handles this with the evaluation_type = 'european' hook, which formats the result as "14.98/20, Bien" (national scale first), while the ECTS grading table in the Diploma Supplement provides the relative positioning. The institution_max_mark field on the course record controls the denominator (20 for French institutions, 100 for others).
Module Templates: German Modul and French Unité d'Enseignement
Different European systems group subjects into larger units: German programmes use Modulnoten (module grades) that aggregate multiple subjects into a single grade; French programmes use Unités d'Enseignement (UE) that allow a student to pass even if one subject fails, as long as the UE average meets the threshold.
OpenEduCat's advance.module.template records support both patterns. The ects_weighted flag enables ECTS-weighted averaging within a module; the allow_compensation flag enables French UE-style compensation at the module level.
The Diploma Supplement
A Bologna Process mandate for all EU institutions. Issued free of charge with every degree.
| Section | Title | What It Contains |
|---|---|---|
| Section 1 | Holder of the Qualification | Student name, date of birth, student ID, and national identification number |
| Section 2 | Information Identifying the Qualification | Degree title, field of study, institution name, country, and status of institution |
| Section 3 | Information on the Level and Duration of the Programme | EHEA level (e.g., first cycle), programme duration in years and ECTS credits, admission requirements |
| Section 4 | Information on the Contents and Results Obtained | Overall classification, ECTS grading table (cohort distribution for the award), mode of study, programme details |
Who Can Request the Diploma Supplement
Under the Bologna Process, every EU institution must issue the Diploma Supplement to every graduate automatically, free of charge, in at least one major European language. Students, their authorised representatives, and receiving institutions can request it. Employers and foreign universities use it to understand the qualification without needing to contact the issuing institution for clarification.
OpenEduCat Diploma Supplement Generation
OpenEduCat's diploma_supplement_report.py generates the four-section PDF from published gradebook data (state=='published' filter on gradebooks). Section 4 includes the pre-computed ECTS grading table showing the cohort distribution used to assign the student's ECTS grades. The report is available via the student portal for download and can be batch-printed by the registrar for the entire graduating cohort.
How OpenEduCat Implements the Bologna Module
European Evaluation Hook
Setting evaluation_type='european' on a gradebook activates the _compute_final_grade_european() hook. In the Bologna module, this override formats the result using the institution's national scale (controlled by institution_max_mark on the course). The result displays as "14.98/20, Bien" or equivalent, depending on the national system.
ECTS-Weighted Module Grades
The advance.module.template model groups subjects into modules (Modul, UE). When ects_weighted=True, OpenEduCat uses ECTS-weighted averaging within the module: each subject's grade is weighted by its ECTS credit count. The resulting Modulnote (advance.module.grade) is recomputed whenever any subject grade changes.
Cohort Statistics and Grading Table
gradebook_analytics.precompute_cohort_stats() aggregates passing grades across a two-year window. The resulting distribution (what percentage of passing students fell into each grade band) is used to generate the ECTS grading table for the Diploma Supplement. A low_n flag marks tables based on fewer than 30 students.
PAF Group Grade Wizard
The Programme Achievement Factor (PAF) wizard allows a cohort-wide adjustment before ECTS grades are computed. A fixed multiplier or clamp can be applied to all subject grades in a subject group before the cohort distribution calculation runs. This supports French PAF moderation practices without requiring individual grade edits.
Frequently Asked Questions
Common questions about the ECTS grading system and Bologna Process.
Generate Bologna-compliant Diploma Supplements automatically
OpenEduCat's Bologna module handles ECTS credit tracking, relative grading table computation, and four-section Diploma Supplement PDF generation, all from published gradebook data.