Course Section Form
Field reference for course section offerings.
Fields
Backed by records.course_sections.
| Field | Column | Type | Required | Notes |
|---|---|---|---|---|
| Section ID | section_id | Integer | Auto | Primary key |
| Course | course_id | Integer (FK) | Yes | Parent course |
| Term | term_id | Integer (FK) | Yes | |
| Sub-Term | sub_term_id | Integer (FK) | No | |
| Section Code | section_code | Text(20) | Yes | e.g. 001, ONL1 |
| Section Descriptor | section_descriptor | Text(100) | No | Subtitle, when the course allows one |
| Campus | campus_id | Integer (FK) | No | |
| Credit Hours Min / Max | credit_hours_min, credit_hours_max | Decimal | No | Section-level credit range; when blank the course's range applies |
| Students Choose Their Credits | is_variable_credit | Boolean | Yes | Default false. The student picks credits within the range at planning or registration (migration 279). Only on a section of a variable-credit course (refused by trigger otherwise), and only meaningful when the range is a real one |
| Credit Increment | credit_increment | Decimal(4,2) | Yes | Default 1, must be > 0. Allowed choices are min, min + increment, ... up to max (the max is always allowed). The range must span at least one increment |
| Billing Credits | billing_credits | Decimal | No | Credits used for billing, if different. Must be blank on a variable-credit section, which bills the credits the student chose |
| Max Enrollment | max_enrollment | Integer | Yes | |
| Current Enrollment | current_enrollment | Integer | Yes | Maintained by the system |
| Seats Planned | seats_planned | Integer | No | |
| Seats Blocked In Process | seats_blocked_in_process | Integer | Yes | Held by in-flight registrations |
| Waitlist Capacity | waitlist_capacity | Integer | Yes | Most students the waitlist may hold. 0 (every imported section) = no limit. A student can join only when the section is full; see Waitlist |
| Current Waitlist | current_waitlist | Integer | Yes | Maintained by the system |
| Delivery Mode | delivery_mode_id | Select (Lookup) | No | DELIVERY_MODE |
| Instruction Mode | instruction_mode_id | Select (Lookup) | No | INSTRUCTION_MODE — modality, derived (see below) |
| Instructional Method | instructional_method_id | Select (Lookup) | No | INSTRUCTIONAL_METHOD — pedagogy, declared by Colleague |
| Grading System | grading_system_id | Integer (FK) | No | |
| Status | section_status_id | Select (Lookup) | Yes | |
| Is Cross-Listed | is_cross_listed | Boolean | Yes | |
| Enrollment Deadline Override | enrollment_deadline_override | Date | No | Overrides the term deadline |
| Section Fee | section_fee | Decimal | No | |
| Section Lab Fee | section_lab_fee | Decimal | No | |
| Fee Type | fee_type_id | Integer (FK) | No | |
| Billing Method | billing_method | Text(1) | No | |
| LMS Platform | lms_platform_id | Integer (FK) | No | |
| LMS Course ID | lms_course_id | Text(200) | No | Identifier in the external LMS |
| Colleague Section ID | colleague_section_id | Integer | No (system) | Colleague's COURSE_SECTIONS_ID, stamped by the nightly import (migration 293). The import matches on it, so a section Colleague renames is renamed in place, and a stamped section Colleague deletes is deleted when nothing student-facing or financial references it. NULL for sections created in the SIS, which the import never touches |
There is no CRN, no title override, no is_open flag, no section-level start/end dates and no registration window on a section. Dates come from the term, moderated by enrollment_deadline_override. Staged registration windows belong to the term too. There are no notes columns either.
Variable credits
The section API returns effective_credit_hours_min / effective_credit_hours_max (the section's range, else the course's) alongside the flag and increment. The student's choice is stored on the plan (planned_courses.credits_selected) and then on the enrollment (student_section_enrollments.credits_attempted). Billing, GPA, the degree audit and the credit-load checks all read it. A value sent for a fixed section is ignored, and a missing value means the minimum.
Meeting times and rooms are not columns here: they hang off the section through the scheduling endpoints (/academic/sections/{sectionID}/scheduling).
Computed Fields (Read-Only)
| Field | Description |
|---|---|
| Available Seats | Max Enrollment - Current Enrollment |
| Section Display | Course Code + Section Code (e.g., "BIOL 101-001") |
| Waitlist Count | Number of students on waitlist |
Instructor Assignment Sub-Form
| Field | Type | Required | Notes |
|---|---|---|---|
| Teacher | Select (FK) | Yes | Faculty member |
| Role | Select (Lookup) | Yes | INSTRUCTOR_ROLE (Primary, Secondary, TA) |
| Assignment Percentage | Decimal | No | For shared sections (totals 100%) |
| Start Date | Date | No | If different from section dates |
| End Date | Date | No | If different from section dates |
Source (source) | System | - | SIS (the default: added on a screen) or ODS (imported). The nightly import deletes an ODS assignment once Colleague stops listing that instructor on a Colleague-owned section; SIS assignments are never removed by it (migration 293) |
The name shown for an instructor is their instructor display name.
Meeting Time Sub-Form
| Field | Type | Required | Notes |
|---|---|---|---|
| Days | Multi-Select | Yes | M, T, W, Th, F, Sa, Su |
| Start Time | Time | Yes | Class start time |
| End Time | Time | Yes | Class end time |
| Building | Select (FK) | No | Meeting location |
| Room | Select (FK) | No | Specific room |
| Start Date | Date | No | If different from section dates |
| End Date | Date | No | If different from section dates |
Modality vs. instructional method
These are two fields, not one, and they are populated by different means.
instructional_method_id is what Colleague declares — the pedagogy: a lecture, a lab, a practicum, an internship, a music lesson. Twenty-six values, decoded from Colleague's own XODS_INSTR_METHODS valcode and stored verbatim. It is fully editable from Admin → Lookup Tables like any ordinary lookup.
instruction_mode_id is derived from it — the modality: where the student physically is. Four values, and the one students and advisors actually read on the registration and planning screens. The importer (internal/migration/daily/sections.go) derives it from four declared Colleague fields:
| Result | When |
|---|---|
ONLINE | SEC_INSTR_METHODS is ONL, or any meeting's CSM_INSTR_METHOD is ONL, or any meeting's CSM_BLDG is ON/WEB (placeholders for "no room", not real buildings), or SEC_LOCATION is one of ON, ONAH, OA, OF, AD |
HYBRID | otherwise, if SEC_INSTR_METHODS or any meeting's CSM_INSTR_METHOD is HYB |
IN_PERSON | otherwise |
Do not read modality off the section number
1,685 sections are numbered WEB, and it is tempting to treat that as the answer. In a four-year window 25 of them carry no online signal in any declared field, and 1,111 genuinely online sections are not numbered WEB. The importer counts and reports those 25 for the registrar to correct in Colleague rather than guessing — a classification comes from the source system's declared field or from a human, never from the shape of a code.
Before migration 263, this column was fabricated
The importer never read any ODS field for instruction_mode_id. It resolved IN_PERSON once at startup and wrote that same id to every row, so all ~76,000 sections read "In Person" — including the 1,111 Colleague declares as online. The value was shown to students, shown to advisors in the planner, and published to external dashboards as dashboard.fact_section_enrollments.instruction_mode. Any analysis of section modality drawn from this database before September 2026 is wrong; re-run migrate-daily -steps sections to repair it.
Validation Rules
- Course + Term + Section Code must be unique
- Credits must be within the course's min/max credit range
- Max Enrollment must be greater than 0
- Meeting times must not overlap for the same instructor
- Room capacity should accommodate max enrollment (warning only)
- Students Choose Their Credits requires a variable-credit course, a maximum not below the minimum, a range of at least one Credit Increment, and blank Billing Credits
Related Screens
- Courses - Parent course definition
- Enrollment - Student enrollments in this section