← All posts
PayrollContractorsWorker types

Beyond salaried: paying contractors, interns, and hourly workers in one run

August 31, 2026 · 7 min read · VeloHR Team

Most HRMS treat payroll as one thing: salaried headcount times twelve. But look at almost any real team and you’ll find a mix — a couple of contractors on retainer, a summer intern on a stipend, warehouse or support staff paid by the hour. Each is paid differently, taxed differently, and reported differently at year end. Force them all through a single salaried engine and you don’t just get ugly numbers — you get wrong ones, with statutory consequences.

Worker type is a payroll decision, not an HR label

The employment type on a person’s record looks like metadata. It isn’t. It decides whether you withhold tax, which statutory contributions apply, which form the person gets at year end, and how the gross pay is even calculated in the first place.

  • Salaried (W-2): a fixed annual figure spread over the pay calendar, full withholding and statutory contributions.
  • Contractor (1099): paid gross, no payer withholding, invoices rather than a salary cycle.
  • Intern: a fixed stipend with a deliberate statutory call — not automatically exempt.
  • Hourly: gross is computed from hours actually worked, so the timesheet is the source of truth.

Contractors: pay gross, don’t withhold, file a 1099

A 1099 contractor is not on payroll withholding, and running one through the W-2 engine is a real defect — you’d withhold tax that was never owed and issue the wrong year-end form. In the US the payer takes no FICA or federal withholding; the contractor is paid gross and receives a 1099-NEC. In India a contractor sits outside PF, ESI, and professional tax entirely; the correct lever is contractor TDS, not the salaried statutory stack.

Contractors also don’t belong on a monthly salary cadence. They invoice. So the payment channel is genuinely different: the contractor (or an admin) submits an invoice, it’s approved, and it’s paid off-cycle — not swept into the month-end salaried run where it would be mis-taxed and mis-reported.

Interns: a fixed stipend with an explicit statutory call

Interns are usually a fixed monthly stipend rather than a salaried CTC, and the tempting shortcut is to treat the stipend as automatically tax-free. It isn’t. In the US the student-employment exemption under §3121(b)(10) covers only students employed by the school they attend — a company intern is generally a W-2 worker. The safe design makes the statutory treatment a documented decision on the record, not a silent default, so payroll and year-end forms follow from an explicit choice.

Hourly workers: pay from approved time, not a fixed salary

Hourly pay can’t come from a salary field, because there isn’t one — the gross is approved hours × rate. That makes the timesheet the payroll input: hours logged against a cost code or task, run through an approval, then paid. Skip the approval step and you’ve paid whatever someone typed. Two things fall out of this once it’s wired properly:

  • Overtime — in the US, non-exempt hourly staff are owed time-and-a-half past 40 hours in a week under the FLSA; the rule has to live in the calculation, not in a spreadsheet.
  • Cost attribution — because the hours carry a project or task, the same approved time that drives pay can also drive client billing and utilization, with no double entry.

Off-cycle and non-monthly runs

The moment you have contractors invoicing and hourly staff logging time, one tidy monthly run stops being enough. A contractor invoice approved on the 9th shouldn’t wait three weeks; a correction shouldn’t force a re-run of everyone. Real mixed payroll needs off-cycle and non-monthly runs — the ability to pay a subset of people, for a specific reason, on a date that isn’t the last working day of the month.

One run, one employee record

The failure mode is four disconnected tools: a salaried payroll product, a contractor payments app, a spreadsheet for interns, and a timesheet export for hourly. Four sources of truth, four reconciliations, and one person who is somehow two records.

The clean model is the opposite — one reviewable payroll run over one employee record, where each person’s worker type routes them to the right calculation and the right year-end form automatically. Finance closes one period, not four; the audit trail is one place; a contractor who converts to full-time is the same record with a changed type, not a new onboarding.

VeloHR is built this way. Salaried, 1099 contractors (with first-class contractor invoices and off-cycle payment), interns (fixed stipend with an explicit statutory treatment), and hourly staff (paid from approved timesheet hours, overtime included) all run on one data plane, in one reviewable run, closing one period — against a single employee record whose type decides the rest. When you compare HRMS options, the question worth asking isn’t “do you support contractors?” but “do all four worker types close in the same run, on the same record?”