The people model in SquadBear
Ask AI
Where a person's data lives once their employee record exists - profile, custom fields, teams and the org chart
A person's data lives on their employee record - profile, custom fields, contacts, team memberships, and the org chart. Creating that record is covered in Invite your team.
The profile
A profile has six tabs - Overview (contact and employment facts, manager, teams, country, holiday calendar, work schedule, workspace fields, and for admins emergency contacts), Teams & projects, Time off (Entitlements, Leave details, Requests, Leave ledger), Documents (their files), Processes (the runs about this person), Schedule (work model, working days, weekly hours, FTE, plus its history) - and, for admins, a seventh: Record & privacy, which holds the employment history alongside export and erase (see Data protection and GDPR).
Employment details
In Edit profile, the Employment group holds Country, which picks the holiday calendar; Employment start date, the first day with this employer; and Contract type. Contract type changes no leave amount and never blocks a request; Polish and Singapore statutory leave types show Contract type does not match on Time off. The Personal group holds Date of birth; only the person and admins see the full date. On the Overview, a "Used by" line under Start date and Holidays names the leave types that read them. Leave seniority and other leave answers live in Leave details. Managers never see the contract type, the Used by lines or Leave details.
Custom fields
Admins define the fields at Settings → Employee fields: text,
number, date, select, or boolean, grouped into a Personal, Job, or Other section. A
workspace can define up to 50; key and type are fixed once set, the label is not, and a
field is deactivated rather than deleted so its stored values persist. Values are set by
an admin from Edit profile and render on the Overview tab under "Workspace fields."
An agent reads the definitions with list_field_defs and writes values with
update_employee_fields.
Contacts and employment history
Emergency contacts are a dedicated, structured record - name, relation, phone, an optional email - capped at three per person, not a custom field. Employment history is a read-only timeline over the audit log (hire, invitation accepted, profile edits, field and contact changes, country changes, schedule changes), for admins on a plan that includes the audit log.
Teams and the org chart
A team's manager counts as a member - they show up in the member list and the count,
labelled Manager on their row. Reassigning the manager adds the new one to membership and
leaves the person stepping down in place; removing a sitting manager from membership is
refused with a 409 until someone else has the team. Someone on several teams has one
primary team, set from the member row's Make primary team, and that is the team
the directory names. Team pages live at People → Teams, where every member row opens
a profile; a viewer the profile gate refuses gets that person's directory card instead of
an error. The manager-report tree is its own page at People → Org chart, and the same
tree reaches an agent as get_org_chart.
Offboarding
Open the person from People → People and choose Offboard in the header. The
confirm asks for the Last day of employment: today by default, never after today or
before the employment start date. If time is closed for payroll through a date, the last
day cannot be earlier. Leave for the leaving year is prorated to that day.
Confirming it cancels their pending and approved leave after the last day (refunding the balance),
hands approvals waiting on them to their manager or, failing that, an admin, cancels the
runs their hire started, and moves their open process actions to the same fallback.
Offboarding emits employee.offboarded, so a process built on that trigger starts on its
own. An inactive person is not a legal assignee: actions a run routes to the subject
resolve to an admin instead - see Processes for how runs
work.
Worked example
Northlake is ordering hoodies for the next all-hands and wants to track sizes. Marta adds
a field at Settings → Employee fields: key tshirt_size, type
select, options S/M/L/XL, section "Other." It lands on every profile at once, blank
until Marta sets each person's value from Edit profile.

