Hopshift
Employees

Employee Transfers

Permanently transfer an employee from one company to another within your group

An employee transfer permanently moves someone from one company in your group to another. Unlike an intercompany assignment, which is temporary and keeps the employee at their original employer, a transfer changes who the employee works for. A new employee record is created at the destination company, and the original record is terminated.

This guide covers how to initiate a transfer, what data carries over, how backdated transfers work, and how to reverse a transfer if it was a mistake.


When to Use a Transfer

Use a transfer when:

  • An employee is permanently moving to a different company in the group
  • The destination company will be responsible for their payroll going forward
  • The employee's reporting line, department, or position may change as part of the move
  • An organizational restructure requires employees to shift between legal entities

Do not use a transfer for temporary secondments, staff rotations, or situations where the employee will return to their original company. Use an intercompany assignment for those scenarios instead.

Mistakes are recoverable. A recent transfer can be undone with the Reverse Transfer action, as long as no finalized payroll run at the destination already includes the employee. See Reversing a Transfer below.


Prerequisites

Before initiating a transfer, make sure the following conditions are met:

RequirementDetails
Employee is activeOnly employees with Active status can be transferred.
No blocking payroll runsThe employee must not be included in a payroll run that is in Approved or Processing status. Finalize or revert the run first.
No active intercompany assignmentIf the employee has an active intercompany assignment, end it before transferring.
Admin accessYou must have admin access to both the source company and the destination company (or be a Group Admin).
Transfer date after last finalized payrollThe transfer date must be strictly after the source company's last Finalized payroll period that included this employee. Past dates are allowed up to that cutoff.

How to Initiate a Transfer

Step 1: Open the employee profile

Navigate to Employees, find the employee, and open their profile page.

Step 2: Click Transfer

Click the Transfer button on the employee profile. This opens the transfer dialog.

Step 3: The 4-step transfer dialog

The dialog walks you through four steps.

Step 1 of 4: Destination

FieldDescription
Destination companySelect the company the employee is moving to. Only companies in the same group are shown.
Transfer dateThe effective date of the transfer. The source record is terminated the day before; the new record is active on this date. Past dates are allowed up to the source's last finalized payroll period.
ReasonOptional free-text field for the reason behind the transfer.

Step 2 of 4: Carry-over options

OptionDefaultDescription
Carry leave balancesYesRemaining leave balances are copied to the new record. The source record's balances are zeroed out. A snapshot is stored so the carry-over can be reversed exactly if the transfer is later undone.
Carry seniority dateYesThe original hire date is preserved at the new company. Turning this off reveals a New Hire Date field in Step 3; if you leave that blank, the transfer date is used.
Retain historyYesKeeps the employee's past records visible on the source company's side for audit.

Step 3 of 4: New company details

Configure the employee's details at the destination company. Department and Position default to a name-match from the source - if the source had a "Front of House" department and the destination has one too, it's pre-selected.

FieldDescription
Employee IDA new employee ID for the destination company. Leave blank to auto-generate.
New Hire DateShown only when "Carry seniority date" is off. Sets the hire date at the destination.
Department / Position / ManagerDefaults applied from source where names match; otherwise blank.
Pay type / Base salary / Hourly / Daily ratesDefaults to the current values. Change if the transfer includes a pay adjustment. All monetary fields are shown with a ฿ prefix.

Step 4 of 4: Review

The review screen shows exactly what will happen when you confirm, including:

  • What will happen: how many clock records, shifts, and time-off requests will move to the new company; how many draft payroll items will be deleted at source; how many leave allocations (and days) will be carried over; and the exact source termination date.
  • Transfer summary: every Step 3 choice echoed back (Department, Position, Manager, Pay Type, Base Salary, Employee ID), so nothing is confirmed sight-unseen.

Review carefully and click Confirm Transfer to execute.


Backdated Transfers

Transfers can be backdated to any date after the source's last finalized payroll period that included this employee. When an admin notices weeks later that someone was effectively working at a different company, they can set a past transfer date and the system moves the right records with it:

  • Clock-in records (ClockRecord) where recordTime >= transferDate are moved from source to destination.
  • Shifts dated on or after transferDate (undated template shifts are left alone) are moved from source to destination.
  • Time-off requests with startDate >= transferDate are moved from source to destination.
  • Draft / Review payroll items for the source employee are deleted so the next payroll run at source doesn't include them.

This keeps attendance totals and payroll calculations correct on both sides.

Known edge case: a time-off request that spans the transfer date (e.g., leave from Apr 15 to Apr 25, transfer on Apr 20) is moved whole based on its startDate. Splitting across companies is a future enhancement.

Cutoff rule: if the source's last finalized payroll period ends on 2026-03-31, the earliest legal transfer date is 2026-04-01. Attempting to transfer earlier returns a specific PAYROLL_FINALIZED error with the cutoff date, so the admin can see which date is allowed.


What Carries Over

When a transfer is executed, the following data is copied to the new employee record:

DataNotes
Personal informationName, email, phone, date of birth, gender, nationality, emergency contacts
National ID / Tax ID / SSO numberAll identity documents are preserved
Bank account detailsBank name and account number
PhotoEmployee profile photo
Employment typeFull-time, Part-time, Contract, or Intern
Leave balancesIf "Carry leave balances" is selected, remaining balances are transferred. The source record's available balance is set to zero. A snapshot is stored so the carry-over can be reversed exactly.
Seniority / Hire dateIf "Carry seniority date" is selected, the original hire date is preserved
WHT year-to-date totalsGross income, tax withheld, and SSO contributions paid in the current calendar year are recorded as "prior employer YTD" on the new record. This ensures the destination company calculates withholding tax correctly for the remainder of the year.

What Moves vs. What Stays

Unlike older versions of this flow, operational records dated on or after the transfer date are moved to the destination (so they can't keep accruing at a company that no longer employs the person). The table below lists each record type.

DataBefore transferDateOn/after transferDate
Clock-in recordsStays at sourceMoves to destination
Shifts (dated)Stays at sourceMoves to destination
Time-off requestsStays at sourceMoves to destination
Draft / Review payroll items-Deleted at source
Finalized payroll itemsStays at source (immutable)Transfer is blocked before this can happen
Performance reviewsStays at sourceStays at source
Uploaded documentsStays at sourceStays at source

Impact on Payroll

Draft payroll runs

If the source company has a Draft or Review payroll run that includes the transferred employee, the employee's payroll items are automatically removed from that run during the transfer. This prevents the source company from accidentally paying someone who has already moved.

Finalized payroll runs

Payroll runs that are already Finalized are not affected. The employee's pay records in those runs are permanent and remain unchanged at the source company. They also act as the cutoff for backdating (see above).

Payroll at the destination

After the transfer, the employee will appear in the destination company's next payroll run. The system uses the "prior employer YTD" figures to calculate withholding tax correctly, so the employee is not over-taxed or under-taxed for the remainder of the calendar year.

The WHT year-to-date carry-over only applies within the same calendar year. If the transfer happens on 1 January, the prior employer YTD will be zero because a new tax year has started.


After the Transfer

Once the transfer is complete:

  • The source company shows the employee as Terminated with a termination reason of "Transferred to [Company Name]". The termination date is set to the day before the transfer date.
  • The destination company has a new Active employee record with a fresh clock code.
  • The employee's user account (login) is moved to the new record automatically. The employee can log in as usual and will see the destination company as their current employer. If they didn't previously have a company membership at the destination, one is created.
  • TRANSFER_OUT and TRANSFER_IN events are written to both employee profiles for audit.

Finding transferred employees

To view the transfer history:

  • On either employee's profile, open the Transfer History tab.
  • The two records are linked internally via transferredFromEmployeeId, so searching by name will show both.

Reversing a Transfer

If a transfer was made in error, you can undo it from the destination employee's Transfer History tab by clicking Reverse on the COMPLETED transfer row.

When a transfer can be reversed

The reverse action is only available when all of the following are true:

  • The transfer is in COMPLETED status (not already cancelled, not a draft)
  • No Finalized payroll run at the destination already includes the employee (if any do, the tax filings they produced would be invalidated by a reversal)
  • No pending leave, overtime, or attendance-correction approvals on the destination employee
  • No active intercompany assignment on the destination employee
  • The source employee is still in exactly the state the original transfer left it (TERMINATED, termination date matching transferDate - 1 day) - if someone edited it afterwards, a reversal would conflict
  • The destination employee has not been transferred further to a third company
  • The original transfer captured a leave-carryover snapshot (transfers made before this feature existed can't be reversed cleanly)

If any guardrail fails, the Reverse dialog tells you exactly which one and how to resolve it.

What happens on reverse

When you confirm, the server atomically:

  1. Moves clock-in records, shifts, and time-off requests dated ≥ transferDate back from the destination to the source employee
  2. Deletes any draft/review payroll items created at the destination for this employee
  3. Reverses the leave carry-over exactly, using the snapshot stored at transfer time
  4. Cleans up target-only collateral: location assignments, pay items, and employee events at the destination
  5. Restores the source employee (ACTIVE, clears termination date and reason)
  6. Moves the user account back to the source record; removes the company membership at the destination if it was auto-created by the transfer
  7. Hard-deletes the destination employee row
  8. Flips the transfer record to CANCELLED and records cancelledBy and cancelledAt
  9. Writes a TRANSFER_REVERSED event at the source

The page then redirects you to the restored source employee.

What is lost on reverse

Anything the destination created after the transfer that can't meaningfully exist at the source:

  • Profile photos uploaded at the destination
  • Pay items added at the destination
  • Location assignments made at the destination

The Reverse dialog explicitly warns you about these before you confirm.


Transfers vs. Intercompany Assignments

TransferIntercompany Assignment
NaturePermanent change of employerTemporary or ongoing work arrangement
Employee recordsTwo records (old terminated, new active)One record (stays at source company)
Payroll responsibilityMoves to the new companyStays with the source company
BillingNo recharges needed; the new company handles everythingHost company is billed via intercompany recharges
Best forPermanent relocations, restructuringSecondments, rotations, shared staff

For more detail on intercompany assignments, see Intercompany Assignments & Billing.


Frequently Asked Questions

Can I transfer an employee to a company outside the group?

No. Transfers are only supported between companies within the same group. For moves outside the group, terminate the employee at the current company and create a new employee record at the other organization.

What if the employee has pending leave requests?

Requests with a startDate on or after the transfer date move to the destination automatically. Earlier requests stay at source. A request that spans the transfer date is moved whole based on its start.

Can I backdate a transfer?

Yes - up to the source company's last finalized payroll period that included this employee. If payroll at source is finalized through 2026-03-31, you can set a transfer date of 2026-04-01 or later. Earlier dates return a PAYROLL_FINALIZED error with the exact cutoff.

What happens to the employee's login?

The employee's user account is automatically moved to the new employee record. They can log in with the same credentials and will see the destination company. If they didn't have a membership at the destination before, one is created; this is reversed cleanly on a reversal.

Can I transfer multiple employees at once?

Currently, transfers are done one employee at a time. For bulk restructuring, you will need to process each transfer individually.

Can I reverse a transfer after payroll has run at the destination?

No. Once a finalized payroll run at the destination includes the employee, the reversal is blocked - reversing would invalidate filed tax/SSO documents. The correct path in that case is a new transfer back to the source company.

On this page