YipiiYipii Mobility Docs
Management

Pay Profiles

Per-employee payroll settings — hourly rate, overtime rules, break defaults, employee code. Feeds the pay-period CSV.

Pay Profiles

A pay profile is one row per employee that tells the payroll engine how to turn their approved hours into money. Without a pay profile, an employee can still clock in and out, but their gross-pay columns in the pay-period CSV will be zero.

The page lives at Time & Payroll → Timesheets → Pay Profiles. Admins and fleet managers only.

Setting up a profile

Click New profile in the header. Fill the dialog:

Basics

FieldWhat it does
EmployeeThe user this profile applies to. One profile per employee per tenant.
Pay typeHourly, Salary, or Not on payroll. Only Hourly produces gross-pay figures in the CSV today.
Currency3-letter ISO code (EUR, USD, GBP…). Included verbatim in the CSV.
Hourly ratePay per hour in the currency above. Drives every monetary column.
Annual salaryReference only — payroll always uses the hourly rate. Put the full-time salary here if it's useful for your own records.
Employee codeOptional external ID for your payroll tool (e.g. the Gusto employee number). Emitted as-is in the CSV.
Default break (minutes)Length of the unpaid break you expect for a standard shift.
Auto-deduct default breakSwitch. When on, every completed clock-out has this many minutes applied as break_minutes, regardless of what the worker did. When off, managers set break per entry.

Overtime

The OT rule is weekly threshold + multiplier. Hours above the threshold in a calendar week are paid at the multiplier.

FieldTypical value
Overtime starts after (hours / week)40.00 (US / EU common baseline)
Overtime pay multiplier1.5 ("time and a half")

Double-time (optional)

Leave the threshold blank and double-time is off entirely. If set, hours beyond this weekly threshold pay at the double-time multiplier.

FieldExample
Double-time starts after (hours / week)48.00
Double-time pay multiplier2.0

Thresholds are weekly and reset every ISO week (Monday – Sunday). The payroll engine splits each entry into the correct bucket in order of clock-in time. Daily overtime (e.g. California's "over 8 per day") is not currently supported — open a support ticket if you need it.

Worked examples

1. Standard 40-hour week, 10 hours of OT

  • Rate €15.00, OT threshold 40, OT multiplier 1.5.
  • Employee works 50 hours in a week, all approved.
BucketHoursPay
Regular4040 × 15 = 600.00
Overtime1010 × 15 × 1.5 = 225.00
Gross50825.00

2. Double-time kicks in

  • Rate €20.00, OT threshold 40, OT multiplier 1.5, DT threshold 48, DT multiplier 2.0.
  • Employee works 52 hours.
BucketHoursPay
Regular4040 × 20 = 800.00
Overtime88 × 20 × 1.5 = 240.00
Double-time44 × 20 × 2.0 = 160.00
Gross521200.00

3. Break auto-deduct

  • Rate €15.00, default break 30, auto-deduct on.
  • Two 8-hour shifts → 480 + 480 = 960 raw minutes logged.
  • Server sweeps in 30 + 30 = 60 break minutes on clock-out.
  • Payable minutes across the shifts: 960 − 60 = 900 = 15 h. CSV row shows Regular Hours = 15.00, Break Hours = 1.00.

Editing a profile

Click any row in the list to open the edit dialog. Fields are identical to the create form except Employee is locked — one profile per employee per tenant. Changes apply prospectively: already-locked pay periods don't recompute.

Deleting

The trash icon on a row removes that profile. The employee stays but future pay periods won't include them in the CSV until a new profile is created. Existing locked pay periods aren't affected — their rows were computed at lock time.

How the list table maps to the profile

ColumnProfile field
Codeemployee_code
Pay typepay_type
Ratehourly_rate (or salary_annual / year, if hourly is blank)
Overtime afterovertime_threshold_weekly in hours
Overtime ×overtime_multiplier
Breakdefault_break_minutes, with " auto" appended when auto-deduct is on

Permissions

  • Admin — every action.
  • Fleet manager — every action.
  • Regular users — can fetch their own profile only via GET /api/{tenant}/user-pay-profiles/{userId}; the UI doesn't expose that yet.

On this page