Partial-update payload — all fields are optional.
is_active lets the Users tab's Active toggle deactivate and reactivate
a staff member through the same PUT the rest of the form uses; unlike the
other fields, the update targets a staff row in either active state (see
update_staff) so a previously deactivated member can be turned back on.
pin — when present — replaces the login PIN (obtained from
generate-pin, re-checked for uniqueness, auto-replaced on a race, and
surfaced in StaffResponse.pin). Omit it to keep the current PIN.
email distinguishes omitted from explicit null via the request's
model_fields_set (see update_staff): omitting it keeps the current
email, sending null clears it.
role_id — when present — reassigns the member's role (validated against
the property). Omit it to keep the current role.