Full transfer
Term codes are the spine of every downstream academic record. This pathway walks the canonical mapping from Banner validation tables to Workday academic period objects, and the edge cases that silently corrupt enrolment history at cutover.
In a Banner-centred estate, the term code drives registration, billing, financial aid disbursement, and transcript assembly. It is referenced by dozens of operational spokes, most of which read it directly rather than through an integration layer. Before any record moves to Workday Student, the term dimension has to be reconciled — or the migration inherits fifteen years of quietly inconsistent term semantics.
Banner stores term definitions in a validation table. The columns that matter for a migration are the code itself, its descriptive label, the start and end dates, and the housekeeping flags that determine which terms are still active for reporting.
| Column | Role | Migration note |
|---|---|---|
STVTERM_CODE | Primary term identifier | Encodes year + semester; parsing convention varies by institution |
STVTERM_DESC | Human label | Free text — not safe as a join key |
STVTERM_START_DATE | Period start | Maps to the Workday period start |
STVTERM_END_DATE | Period end | Watch inclusive vs exclusive end conventions |
STVTERM_FA_PROC_YR | Financial aid year | Often diverges from the academic year — do not assume equality |
Workday models time hierarchically rather than as a flat code. A Banner term maps onto an academic period that sits under an academic year, which itself sits under an academic calendar tied to a program of study. The one-to-one assumption most teams start with breaks the moment a Banner term is reused across multiple programs with different calendars.
Extracting STVTERM cleanly is trivial. Reconciling it against the twenty-plus spokes that read the term code directly — and building the translation layer that keeps them running during a phased cutover — is where projects stall. That reconciliation is the isolated, fixed-scope engagement we build first.
Run the risk calculator →Rather than translating Banner directly into Workday, route both through a canonical academic-period record. The source system publishes into it; the target consumes from it. When the ERP is eventually deprecated, the canonical record and every spoke reading from it are untouched.
// canonical academic period — the contract both systems map onto { "period_id": "2026-FA", "source_refs": { "banner_stvterm": "202610", "workday_period": "AY2026_Fall_Semester" }, "start": "2026-08-24", "end": "2026-12-13", "fa_year": "2026-2027", "status": "active" }
STVTERM_FA_PROC_YR not equalling the academic year silently misaligns disbursement records if mapped as identical.A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
/* Banner STVTERM → Workday Academic Period mapping (canonical) */ SELECT stvterm_code AS Academic_Period_ID , stvterm_desc AS Academic_Period_Name , TO_CHAR(stvterm_start_date,'YYYY-MM-DD') AS Start_Date , TO_CHAR(stvterm_end_date ,'YYYY-MM-DD') AS End_Date , SUBSTR(stvterm_code,1,4) AS Academic_Year , CASE SUBSTR(stvterm_code,5,1) /* session-digit → Workday term */ WHEN '1' THEN 'Spring' WHEN '2' THEN 'Summer' WHEN '3' THEN 'Fall' WHEN '4' THEN 'Winter' END AS Term FROM stvterm WHERE stvterm_fice_code = '001' AND stvterm_active_ind = 'Y'; /* Sample output rows */ stvterm_code | stvterm_desc | Start_Date | End_Date | AY | Term -----------------+-------------------+------------+------------+-----+-------- 202410 | Fall 2024 | 2024-08-19 | 2024-12-13 | 2024 | Fall 202510 | Fall 2025 | 2025-08-18 | 2025-12-12 | 2025 | Fall 202411 | Spring 2025 | 2025-01-13 | 2025-05-09 | 2025 | Spring /* Edge-case guard: Banner 8-term codes (e.g. 2024A) break Workday validation */ WHERE REGEXP_LIKE(stvterm_code,'^[0-9]{5}$') /* enforce YYYYS format */ AND stvterm_end_date > SYSDATE - 730; /* exclude stale terms */
How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.
This pathway maps Ellucian Banner validation table STVTERM to Workday Student Academic Periods, the foundational anchor for all downstream academic records. Errors here corrupt enrollment history, grading periods, and financial aid windows silently and irreversibly.
STVTERM rows where STVTERM.STATUS_IND is not 'I' (inactive). Pull STVTERM_CODE, STVTERM_DESC, STVTERM_START_DATE, STVTERM_END_DATE, STVTERM_SESS_CODE, and STVTERM_TERM_CODE (the parent term for sub-terms). Cross-reference STVSESS to confirm session type mappings. Validate against the academic calendar in STVACAT. Confirm whether the institution uses numeric term codes (e.g., 202410) or alphanumeric (e.g., 2024FA) — this varies by Banner release and institutional configuration.STVTERM_CODE as YYYYTS — Year (4), Term type (1), Session code (1). Build the parent Academic Year period (e.g., 2024-2025) first, then terms, then sessions. Confirm the Workday Academic Period Type参照値 list matches Banner term type codes via STVTTYP.STVTERM_START_DATE to Academic Period Start Date and STVTERM_END_DATE to End Date. Map STVTERM_DESC to Academic Period Name. Map STVTERM_SESS_CODE to determine if this is a parent Term or a child Session — sessions get the parent term reference populated; standalone terms leave it null. Set Status to Active for current and future terms; historical terms set to Inactive only after confirming no open enrollment or grading windows remain.STVTERM, STVSESS, and STVRAPT (reporting term). Schedule the Workday Inbound Integration as a Academic Periods — Student connector. Set the Workday tenant to use Academic Period Reference ID as the idempotency key. Configure the integration to PUT (update) existing periods and POST (create) new ones — do not use PATCH or replace modes, which truncate child session associations.STVTERM rows (excluding inactive) must equal total Academic Periods in Workday (excluding system-generated placeholders). Spot-check date ranges — STVTERM_START_DATE must fall within the parent Academic Year bounds. Validate that every session term has a populated Parent Academic Period reference pointing to its base term. Run the Workday Student Academic Calendar report post-load and compare term counts and date spans against Banner STVTERM.STVTERM data changes at the source for the duration of the cutover window. Validate the count one final time, then set the Workday integration to production mode and enable the Workday Business Process that prevents manual Academic Period creation (enforce source-of-truth).| Banner Field | Workday Field | Transform / Notes |
|---|---|---|
STVTERM.STVRAPT_CODE |
Academic Period Reference ID | Direct map. Must be unique within Workday tenant. |
STVTERM.STVDESC |
Academic Period Name | Direct map. Trim to Workday character limit (verify via tenant config). |
STVTERM.STVTERMDESC |
Academic Period Long Name | Optional. Use if institution has a formal long description. |
STVTERM.STVSTART_DATE |
Start Date | Direct map. Must align with Academic Year start boundary. |
STVTERM.STVEND_DATE |
End Date | Direct map. Must not exceed Academic Year end boundary. |
STVTERM.STVTtrm.STVSESS_CODE |
Parent Academic Period Reference | If STVSESS.STVSESS_SESS_CODE is not null and is a child session, set to parent term's STVRAPT_CODE. Else null. |
STVTERM.STVTtrm.STVACAT_CODE |
Academic Period Type | Join to STVCATD to derive type. Map to Workday Academic Period Type参照値 via lookup table (TODO: verify against institutional configuration). |
STVTERM.STVSTATUS_IND |
Academic Period Status | Map 'A' to Active, 'I' to Inactive. Historical terms should remain Inactive in Workday even if Active in Banner for reporting continuity. |
STVTERM row per session. Each must be created as a child Academic Period with the correct parent reference. Missing the parent linkage renders sessions orphaned and invisible to enrollment processes.20251 for Spring 2025 starting Dec 2024). The STVTERM_START_DATE predates the academic year numeric prefix. Workday Academic Year boundaries must accommodate this, or the term will fail load validation.STVTERM. Workday has a single Academic Period concept — co-terms require multiple period associations on the student record, not duplicate periods.STVTERM.STATUS_IND = 'I' means inactive, but Banner may retain records for historical reporting. Workday requires a definitive Active/Inactive status per period. Setting active terms to Inactive in Workday breaks open enrollment windows without warning.202410A1 for a sub-session). Parsing logic that assumes YYYYTS breaks silently on 7+ character codes. Validate code length distribution in discovery.STVTERM row counts, date ranges, and parent-child relationships against Workday Academic Period objects immediately after the initial load. Lock STVTERM at the Banner source for the cutover window — any late-term code additions must be staged in a shadow table and merged post-validation. Before unlocking, confirm that a test student record can successfully attach to a Workday academic period and that enrollment date validation fires correctly. If any period fails validation or is missing a parent linkage, roll back the integration run, correct the mapping, and re-execute — do not patch individual records manually in Workday. Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.