Person Name Form
Field reference for person name records. A person can have multiple names (legal, preferred, maiden, etc.).
Fields
Backed by core.person_names.
| Field | Column | Type | Required | Notes |
|---|---|---|---|---|
| Person | person_id | UUID (FK) | Yes | Parent person record |
| Name Type | name_type_id | Select (Lookup) | Yes | NAME_TYPE |
| First Name | first_name | Text(100) | No | Nullable in the database |
| Middle Name | middle_name | Text(100) | No | |
| Last Name | last_name | Text(100) | No | Nullable in the database |
| Suffix | suffix | Text(20) | No | Jr., Sr., III, PhD |
| Is Current | is_current | Boolean | Yes | The currency flag |
| Is Searchable | is_searchable | Boolean | Yes | Whether people search matches this name |
| Effective Date | effective_date | Date | No | |
| End Date | end_date | Date | No | |
| Source | source | Text(8) | Yes (system) | SIS (entered on a screen, the default) or ODS (written by the Colleague import). Not editable. Migration 298 |
There is no prefix column and no is_primary — the current name is the one with is_current = true.
Contact records are end-dated, never deleted
is_current is the currency flag — there is no is_active column on any contact record. Removing a value sets is_current = false and stamps end_date; the row stays so the history survives. This holds through the admin API too. Contact values are also not unique: some 50,000 people share a phone number and 3,700 share an email, so key on the row id plus person_id, never on the value itself.
Name Type Values
| Code | Description | Notes |
|---|---|---|
| LEGAL_PRIMARY | Legal Name (Primary) | The record name: official documents, transcripts |
| LEGAL_SECONDARY | Legal Name (Secondary) | |
| PREFERRED | Preferred Name | The name shown on screens and rosters in place of the legal name |
| MAIDEN | Maiden Name | Previous name; imported from Colleague's name history |
| FORMER | Former Name | Previous name; imported from Colleague's name history, and kept by an approved Change of Name request |
Display Name
A person's display name is decided in one place, core.person_display_name (migration 298): the current PREFERRED name, else the current LEGAL_PRIMARY name. An instructor's display name puts Colleague's faculty listing name first -- see Teacher.
Because a person can now have a current PREFERRED name beside the current LEGAL_PRIMARY one, "the current name" is no longer a single row: anything that reads names must pick a type.
Where names come from
| Name | Written by |
|---|---|
| LEGAL_PRIMARY | The nightly Colleague import (rewritten from Colleague each run while Colleague holds names), or a Change of Name request on an instance that owns names |
| MAIDEN, FORMER | The import's name-history step; a Change of Name request adds the old legal name as FORMER |
| PREFERRED | The preferred_names import step from Colleague's chosen name (source = 'ODS'), or a screen (source = 'SIS'). The import updates and deletes only its own rows; a PREFERRED name typed in the SIS is never touched |
Validation Rules
- Person must exist before adding names
- End Date must be on or after Effective Date
- A previous name (MAIDEN, FORMER) that is already on file is not recorded twice
Related Screens
- Person - Parent person record