Skip to content

Course Section Form ​

Field reference for course section offerings.

Fields ​

Backed by records.course_sections.

FieldColumnTypeRequiredNotes
Section IDsection_idIntegerAutoPrimary key
Coursecourse_idInteger (FK)YesParent course
Termterm_idInteger (FK)Yes
Sub-Termsub_term_idInteger (FK)No
Section Codesection_codeText(20)Yese.g. 001, ONL1
Section Descriptorsection_descriptorText(100)NoSubtitle, when the course allows one
Campuscampus_idInteger (FK)No
Credit Hours Min / Maxcredit_hours_min, credit_hours_maxDecimalNoSection-level credit range; when blank the course's range applies
Students Choose Their Creditsis_variable_creditBooleanYesDefault 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 Incrementcredit_incrementDecimal(4,2)YesDefault 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 Creditsbilling_creditsDecimalNoCredits used for billing, if different. Must be blank on a variable-credit section, which bills the credits the student chose
Max Enrollmentmax_enrollmentIntegerYes
Current Enrollmentcurrent_enrollmentIntegerYesMaintained by the system
Seats Plannedseats_plannedIntegerNo
Seats Blocked In Processseats_blocked_in_processIntegerYesHeld by in-flight registrations
Waitlist Capacitywaitlist_capacityIntegerYesMost students the waitlist may hold. 0 (every imported section) = no limit. A student can join only when the section is full; see Waitlist
Current Waitlistcurrent_waitlistIntegerYesMaintained by the system
Delivery Modedelivery_mode_idSelect (Lookup)NoDELIVERY_MODE
Instruction Modeinstruction_mode_idSelect (Lookup)NoINSTRUCTION_MODE — modality, derived (see below)
Instructional Methodinstructional_method_idSelect (Lookup)NoINSTRUCTIONAL_METHOD — pedagogy, declared by Colleague
Grading Systemgrading_system_idInteger (FK)No
Statussection_status_idSelect (Lookup)Yes
Is Cross-Listedis_cross_listedBooleanYes
Enrollment Deadline Overrideenrollment_deadline_overrideDateNoOverrides the term deadline
Section Feesection_feeDecimalNo
Section Lab Feesection_lab_feeDecimalNo
Fee Typefee_type_idInteger (FK)No
Billing Methodbilling_methodText(1)No
LMS Platformlms_platform_idInteger (FK)No
LMS Course IDlms_course_idText(200)NoIdentifier in the external LMS
Colleague Section IDcolleague_section_idIntegerNo (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) ​

FieldDescription
Available SeatsMax Enrollment - Current Enrollment
Section DisplayCourse Code + Section Code (e.g., "BIOL 101-001")
Waitlist CountNumber of students on waitlist

Instructor Assignment Sub-Form ​

FieldTypeRequiredNotes
TeacherSelect (FK)YesFaculty member
RoleSelect (Lookup)YesINSTRUCTOR_ROLE (Primary, Secondary, TA)
Assignment PercentageDecimalNoFor shared sections (totals 100%)
Start DateDateNoIf different from section dates
End DateDateNoIf 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 ​

FieldTypeRequiredNotes
DaysMulti-SelectYesM, T, W, Th, F, Sa, Su
Start TimeTimeYesClass start time
End TimeTimeYesClass end time
BuildingSelect (FK)NoMeeting location
RoomSelect (FK)NoSpecific room
Start DateDateNoIf different from section dates
End DateDateNoIf 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:

ResultWhen
ONLINESEC_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
HYBRIDotherwise, if SEC_INSTR_METHODS or any meeting's CSM_INSTR_METHOD is HYB
IN_PERSONotherwise

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 ​

  1. Course + Term + Section Code must be unique
  2. Credits must be within the course's min/max credit range
  3. Max Enrollment must be greater than 0
  4. Meeting times must not overlap for the same instructor
  5. Room capacity should accommodate max enrollment (warning only)
  6. 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

Student Information System Documentation