Requirements Form
Field reference for degree requirement blocks and items.
Requirement Block Fields
| Field | Type | Required | Max Length | Validation | Notes |
|---|---|---|---|---|---|
| Program Catalog | Select (FK) | Yes | - | Must exist | Parent program/catalog year |
| Parent Block | Select (FK) | No | - | Must exist | Parent block for nesting |
| Block Type | Select (Lookup) | Yes | - | BLOCK_TYPE | GENERAL_ED, MAJOR, MINOR, etc. |
| Name | Text | Yes | 200 | - | Block name (e.g., "Core Requirements") |
| Description | Text Area | No | 1000 | - | Description of requirement |
| Min Credits | Decimal | No | 5,2 | >= 0 | Minimum credits required |
| Max Credits | Decimal | No | 5,2 | >= Min Credits | Maximum credits counted |
| Min Courses | Integer | No | - | >= 0 | Minimum number of courses |
| Max Courses | Integer | No | - | >= Min Courses | Maximum courses counted |
| Sort Order | Integer | Yes | - | - | Display order |
Minimum Grade (min_grade_id) | Select (FK) | No | - | A grade in grading_system_grades | Minimum grade a course must earn to count toward this block and every block beneath it. NULL = any passing grade (or inherit). Imported from Colleague ACRB_MIN_GRADE (migration 286) |
Allowed Grades (allowed_grades) | Text array | No | 10 per letter | - | Letter grades that count regardless of the minimum -- the ", S" in "Minimum Grade C-, S". Imported from Colleague ACRB_ALLOWED_GRADES; not editable through the API (migration 286) |
Block Type Values
| Code | Description |
|---|---|
| GENERAL_ED | General education requirements |
| MAJOR | Major/program requirements |
| MINOR | Minor requirements |
| CORE | Core curriculum |
| ELECTIVE | Free electives |
| CONCENTRATION | Concentration/track requirements |
| CAPSTONE | Capstone/culminating experience |
Requirement Item Fields
| Field | Type | Required | Max Length | Validation | Notes |
|---|---|---|---|---|---|
| Block | Select (FK) | Yes | - | Must exist | Parent requirement block |
| Requirement Type | Select (Lookup) | Yes | - | REQUIREMENT_TYPE | How requirement is satisfied |
| Course | Select (FK) | Conditional | - | Must exist | Specific course required |
| Course Pattern | Text | Conditional | 50 | Pattern syntax | Pattern like "MATH 2*" |
| Activity Type | Select (Lookup) | Conditional | - | ACTIVITY_TYPE | For non-course requirements |
| Min Credits | Decimal | No | 5,2 | >= 0 | Credits needed from this item |
| Min Count | Integer | No | - | >= 0 | Number of courses/activities needed |
| Minimum Grade | Select (FK) | No | - | Must exist | Stored on the item (requirement_items.min_grade_id) but not read by the degree audit or the prerequisite gate, which take the minimum from the item's group or block (below) |
| Is Required | Boolean | No | - | - | Core vs. elective within block |
| Sort Order | Integer | Yes | - | - | Display order |
Requirement Type Values
| Code | Description | Requires |
|---|---|---|
| SPECIFIC_COURSE | A specific course | Course field |
| COURSE_PATTERN | Courses matching pattern | Course Pattern field |
| COURSE_LIST | Choose from list | Course List items |
| ACTIVITY | Non-course activity | Activity Type field |
| SUB_BLOCK | Nested block reference | Parent Block |
Minimum grades on blocks and groups
Requirement groups (requirement_groups) carry the same two columns, min_grade_id and allowed_grades. Colleague block types 30-33 are imported as groups, and that is where most course-requisite minimums sit (ACCT-122's "Take ACCT-121; Minimum Grade C-, S" is a group). Both tables are filled by migrate-requirements -steps grades (migration 286); before it the columns were empty and a D satisfied a C- requirement.
Inheritance. A rule applies to its block or group and everything beneath it, the nearest declaration winning; a group's own value overrides its block's. The two halves inherit independently -- a group can list S while its minimum comes from a block above.
How a course's grade is judged -- the same in the degree audit (audit/grade_rules.go) and in the registration prerequisite gate and failed-course cascade (registration/service_cascade.go), so the two never disagree:
| The course has | Counts? |
|---|---|
| No grade yet (in progress) | Counts as in progress |
A letter on allowed_grades | Yes, passing or not, as Colleague declared (S, IS, N, I, IP, even F) |
| A non-passing grade | No |
| Transfer or non-credit work | Yes: its minimum was applied when its equivalency was evaluated |
| No minimum in effect | Yes |
| Grade points at or above the minimum | Yes. Compared by numeric_equivalent, so a rule holds across the undergraduate and graduate scales |
| A passing grade with no points (P, S) | Only if allowed |
Course Pattern Syntax
| Pattern | Matches |
|---|---|
MATH 1* | Any MATH course 100-199 |
BIOL 2* | Any BIOL course 200-299 |
* 101 | Any 101-level course |
CHEM *L | Any CHEM lab course |
Computed Fields (Read-Only)
| Field | Description |
|---|---|
| Items Count | Number of items in this block |
| Child Blocks Count | Number of nested blocks |
Validation Rules
- If Min Credits is set, block must have course items or child blocks
- Max Credits must be >= Min Credits if both are set
- Requirement items must have exactly one of: Course, Course Pattern, or Activity Type
- Blocks cannot reference themselves (no circular nesting)
- A block or group Minimum Grade is inherited by everything beneath it unless overridden