Payroll — Pay Runs, Posting and Payout

The monthly cycle: create the run, recompute if needed, post to your books, then pay out via bank.

The monthly cycle: create the run, recompute if needed, post to your books, then pay out via bank.

Time to read: ~10 minutes. You’ll need: the Payroll add-on active, at least one employee with a salary structure set up — see Payroll Employees & Pay Heads.


What you get when this is done

  • A monthly pay run with one payslip per active employee.
  • A single balanced journal voucher per run that posts to your books (Dr Salary Expense / Cr each per-component payable / Cr Salary Payable).
  • A separate pay-out voucher when you actually transfer money to employees (Dr Salary Payable / Cr Bank).
  • Server-rendered PDF payslips (A4, bank-masked, amount-in-words, LOP callout) for every employee.

Where to find the screens

  • Payroll → Pay Runs — list of all pay runs (draft / posted / paid).
  • Payroll → Pay Runs → [Run] — the detail view for one pay run with its payslips.

Run states — a quick mental model

A pay run moves through three states:

StateWhat’s trueWhat you can do
draftPayslips computed but nothing posted to books.Recompute, add variable pay, edit attendance overrides.
postedSingle journal voucher posted to your books (Dr Salary Expense / Cr Payables). Employees haven’t been paid yet — the amounts sit on Salary Payable.Pay out (next step).
paidBank payout voucher posted (Dr Salary Payable / Cr Bank). Employees’ salaries have hit their accounts.View only — for audit.

You don’t have to pay out the same day you post. A common pattern: post on the 1st (so the books reflect the month’s salary cost), pay out on the 5th (after closing previous month).


Step-by-step — the basic cycle

Step 1 — Create a new pay run

  1. Payroll → Pay Runs → click + New pay run.
  2. Period — pick the month (e.g. 2026-04 for April).
  3. LOP days default (optional) — a default Loss-of-Pay deduction days count to apply to every employee unless overridden by attendance. Leave at 0 for the common case.
  4. Click Create.

Booksmor generates one payslip per active employee, computing each component from their salary structure, attendance records, loans, and tax declarations.

Step 2 — Review payslips

The detail view shows every employee with their gross, deductions, and net. Click a row to expand its line-by-line breakdown.

For each payslip you can:

  • Variable pay — add one-off earnings (commission, OT, bonus) or one-off deductions (advance recovery, fines) just for this payslip. Use the Variable pay button on the expanded row.
  • Override LOP — set a different LOP days for this employee (overrides attendance + default).
  • Override loan EMI — trim or skip the auto-injected loan deduction (e.g. employee asked to skip this month).
  • Override TDS — if you’re not using the tax engine, type the TDS directly.

Step 3 — Recompute

After any override, click Recompute at the top of the pay run. Booksmor recalculates every payslip with the new inputs. Payslip IDs are preserved across recomputes, so any external references (e.g. PDFs you’ve already downloaded) stay valid.

Step 4 — Post the run

When everything looks right, click Post.

Booksmor posts one balanced journal voucher for the entire run:

  • Dr Salary Expense (total gross across all payslips).
  • Cr each per-component statutory payable (PF Payable, ESI Payable, PT Payable, TDS Payable) for the deducted amount.
  • Cr Salary Payable (the net amount you’ll actually pay employees).

The run’s status flips from draft to posted. The journal voucher appears in Daily → Transactions as a normal voucher you can view, print, or share.

Step 5 — Pay out

When you’re ready to transfer money to employees:

  1. From the pay run detail, click Pay out.
  2. Pick the bank account the money will leave from.
  3. Click Confirm.

Booksmor posts a second voucher: Dr Salary Payable / Cr [Bank account] for the total net. The run flips from posted to paid.

You can pay out partial amounts (e.g. some employees today, others when their banks update) — but typically a single pay-out covers the whole run.


Per-payslip PDF

Click any payslip in the detail view → PDF.

The server-rendered PDF includes:

  • Company header (your name, address, GSTIN).
  • Employee name, code, designation, department, period.
  • Two-column Earnings + Deductions table.
  • LOP days callout if non-zero.
  • Amount in words in Indian numbering (Crore / Lakh / Thousand).
  • Bank account masked (last 4 digits + IFSC).
  • Net pay highlighted.

The PDF is generated server-side via reportlab — works the same in any browser, prints reliably.

To email the payslip directly: use the same email infrastructure as invoices (set up tenant SMTP under Settings).


Variable pay deep-dive

Many SMBs have employees on a variable component (commission, sales bonus, OT). Variable pay is per-payslip, not per-employee — you add it after the run is created.

On the expanded payslip row:

  1. Click Variable pay.
  2. Add one row per ad-hoc item:
    • Description — what it’s for, e.g. “April sales commission”.
    • Type — earning or deduction.
    • Amount — rupees.
  3. Save.

Click Recompute to feed the variable pay into the calculation. Booksmor appends variable lines before the auto-injected loan EMI, so the larger gross flows into ESI and PT gates if relevant — but PF/HRA bases stay on BASIC alone (correctly).

Variable pay posts to statutory_payable by default for deductions, Salary Expense for earnings. Override the account if needed by editing the resulting journal voucher.


Common questions

Can I have two pay runs for the same month? No — periods are unique per tenant. The workaround is to use variable pay within the existing pay run to add a mid-month bonus or correction.

I posted the run but realised an employee’s data was wrong. You can unpost the run (button visible while in posted state, before paid) and re-post after fixing. After paid, you’d need to issue a correction via the next pay run’s variable pay.

Can I pay employees in installments? The standard pay-out posts one voucher for the whole net. For partial pay-outs, you’d post separate journal vouchers manually — not a recommended pattern. Better: pay out the full amount and reverse one employee’s payslip via a credit/debit against Salary Payable.

My run period is finished but a payslip looks wrong — what to do? While in draft or posted (but not yet paid), override LOP / loan / variable pay on that payslip and recompute. The voucher rewrites cleanly. Once paid, fix on next month via variable pay.

Can I skip pay-runs for some employees? Yes — set the employee to Inactive before creating the run. They’ll be excluded. After the run is created, you can also delete an individual payslip from the run detail (the recompute regenerates only active employees).

How do I handle full-and-final settlement when an employee leaves? Run their final payslip as part of the normal monthly pay run, including any leave-encashment (via variable pay) and final HRA/SPECIAL allocations. After paying out, set the employee to Inactive.

Where do I see the per-component payable balances? Payroll → Statutory — shows PF / ESI / PT / TDS outstanding (credits − debits across posted vouchers). When you pay these to the government, Statutory → Pay statutory posts the discharge.


Troubleshooting

Pay run won’t post — “salary expense account missing”. The India COA template needs to include salary_expense (5500), salary_payable (2150), statutory_payable (2160). These are lazy-created — Booksmor adds them on the first attempt. If they’re missing after that, run the bootstrap from Masters → Chart of Accounts → Load standard COA again (idempotent).

Pay-out fails with “no account_id”. You didn’t pick the bank account in the pay-out dialog. Re-open Pay out, pick the account, confirm.

Two team members tried to post the same run simultaneously and both got errors. Posting is atomic. The first to succeed gets the voucher; the second sees an error. The run is consistent — no duplicate post.

Variable pay isn’t appearing on the recomputed payslip. Recompute only updates payslips that are still in draft status. If the run is posted, variable pay is ignored on recompute. Unpost first, then add variable pay, then re-post.

Need more help? Email support@booksmor.com with the run period, payslip ID, and a screenshot of what’s wrong.