Course Form
Field reference for course catalog entries.
Fields
Backed by records.courses.
| Field | Column | Type | Required | Notes |
|---|---|---|---|---|
| Course ID | course_id | Integer | Auto | Primary key |
| Course Code | course_code | Text(20) | Yes | Subject and number together, e.g. BIOL-101 |
| Title | title | Text(200) | Yes | |
| Description | description | Text | No | |
| Credit Hours Min | credit_hours_min | Decimal | Yes | |
| Credit Hours Max | credit_hours_max | Decimal | No | Upper bound for variable-credit courses |
| Is Variable Credit | is_variable_credit | Boolean | Yes | The course may carry a range of credits. Whether students choose is set per section (course_sections.is_variable_credit); see Sections |
| Contact Hours | contact_hours | Decimal | No | One total; lecture/lab/other are not split out |
| Credit System | credit_system_id | Integer (FK) | Yes | |
| Course Level | course_level_id | Select (Lookup) | No | Lower division, upper division, graduate |
| Grading System | grading_system_id | Integer (FK) | No | |
| Is Repeatable | is_repeatable | Boolean | Yes | Repeatable for credit: every attempt counts toward GPA |
| Maximum Attempts | max_repeats | Integer | No | Total attempts, the first included; NULL = unlimited, at least 1. Only for repeatable courses -- see Repeats and Retakes |
| Allows Section Descriptor | allows_section_descriptor | Boolean | Yes | Sections may carry a subtitle |
| Year Pattern | year_pattern | Text(20) | Yes | Which years the course is offered |
| Lab Fee | lab_fee | Decimal | No | Default lab fee for the course |
| Source ID | source_id | Text(20) | No | Colleague/ODS source key |
| Status | status_id | Select (Lookup) | Yes | COURSE_STATUS |
| Effective Date | effective_date | Date | No | |
| End Date | end_date | Date | No |
Subject and catalogue number are not separate columns — course_code holds both. There is also no department_id on a course: ownership is reached through the course code's course code record, not stored on the course itself.
Computed Fields (Read-Only)
| Field | Description |
|---|---|
| Course Code | Concatenation of Subject + Course Number (e.g., "BIOL 101") |
| Credits Display | Shows range if variable (e.g., "1-3") or single value |
| Status Display | Human-readable status from lookup |
Validation Rules
- Subject + Course Number must be unique across all courses
- If Credits Max is set, it must be greater than Credits Min
- Maximum Attempts is ignored when Is Repeatable is false; a blank (or 0) is saved as unlimited
- End Date must be on or after Effective Date if set
Requisites
Prerequisites and corequisites come from two places, and only one of them is the real source.
Imported requisite rules (records.course_requisite_links)
Every Colleague requisite rule a course carries (migration 285), written by migrate-requirements --steps=course-prereqs. Read-only in the SIS: change the rule in Colleague and the next import follows. The rule's courses are the requirement-block tree the link points to.
| Field | Column | Type | Notes |
|---|---|---|---|
| Course | course_id | Integer (FK) | The course that carries the rule |
| Colleague Rule | acad_reqmt_id | Text(20) | ACAD_REQMTS id; unique per course |
| Rule Block | block_id | Integer (FK) | Top requirement block of the rule |
| Timing | timing | Char(1) | P prior: completed (or in progress, or planned) in an earlier term. E either: an earlier term or the same term. C concurrent: a corequisite, taken in the same term |
| Enforcement | enforcement | Text(2) | RQ required. RM recommended: never enforced |
| Position | position | Integer | Order on the course |
| Source | source | Text(20) | CRS_REQS (current), or CRS_PREREQS for the legacy rule on a course with no current prior rule |
courses.prereq_block_id remains as a pointer to the primary prior rule only. A course can carry several rules, for example a prerequisite and a corequisite.
Minimum grades sit on the rule's blocks and groups (min_grade_id, allowed_grades, migration 286). The nearest one above a course applies. A grade meets it when its grade points are at or above the minimum's, or when the rule lists it as allowed (for example S). Missing a prior rule is overridable. A corequisite (C) is only ever a warning.
Hand-entered requisites (records.course_requisites)
The Requisites sub-form on the course screen:
| Field | Column | Type | Notes |
|---|---|---|---|
| Requisite Type | requisite_type_id | Select (Lookup) | REQUISITE_TYPE |
| Required Course | requisite_course_id | Select (FK) | |
| Course Pattern | requisite_pattern | Text | |
| Minimum Grade | min_grade_id | Select (FK) | |
| Can Be Concurrent | can_be_concurrent | Boolean | |
| Group | requisite_group | Integer | Rows in the same group are alternatives |
Of these rows, only corequisites (type COREQ or COREQUISITE) are checked, as a warning alongside the imported ones. A hand-entered prerequisite is stored but not enforced; add it in Colleague instead. See Courses.
Related Screens
- Sections - Section offerings for this course
- Requirements - Degree requirements using this course