xMatix
Sign in Request demo
xMatix
PRODUCTS
SalesField SalesCRMRewardsClaimsInventoryProcurementWarehouse ManagementField ServiceServiceSupportTelephony & MessagingFinance & AccountingPayrollExpense ManagementCommercePortalsAnalytics & ReportingData StudioMobile AppSee all products →
PLATFORM
Platform overviewApp BuilderAutomationIntegrationsSecurity & GovernanceChange ManagementDevelopers
SENSE AI
Sense AI overviewSense AssistSense ControlSense VisionAI StudioTrust & governanceIn Claude & ChatGPTUse cases
SOLUTIONS
FMCG & DistributionManufacturing & Dealer NetworksAutomotive & DealershipsPharma & HealthcareConsumer DurablesAgri-InputsBuilding MaterialsService NetworksWarehousing & 3PLFinancial AccountingERP SoftwareIndia GST ComplianceUAE VAT & e-InvoicingSaudi ZATCA & VATAll solutions →
RESOURCES
Knowledge CenterDeveloper & CLIBlogGuidesWhat is xMatix?Company facts
COMPANY
AboutCareersPartnersEventsContactAuthorsLegal
Sign in Request demo
Home/Docs/Payroll/Running payroll
HOW-TO · Last reviewed

Running payroll

VIDEO
Running payroll: calculate, payslips, post
A 6-minute walkthrough of this page is coming soon — the written steps below cover the same ground.

A payroll run is the month's unit of work: one record that carries the calculation for every employee of a company for one payroll period, moves through an explicit lifecycle — Draft, Calculated, Pending Approval / Approved, Posted, Payment Generated, Paid — and leaves a journal, per-employee payable items and a salary payment batch behind it. Every stage is a named action button on the run's detail page, so nothing happens implicitly and everything can be reviewed before the next step.

Open the Payroll app from the App Launcher and choose Payroll Runs. The list shows every run with its Payroll Period, Status, total, processed and skipped resource counts and Total Net Pay; a run's name opens the detail page, which shows the action buttons, a lifecycle strip, a Details tab, a Related tab (the per-employee run details and the run's open items) and a Run Insights panel.

Prerequisites

  • Employees with an active compensation record naming a salary structure whose components carry GL and payable GL mappings.
  • A Payroll Period for the month (start date, end date, pay date) for the company being paid — Payroll Periods on the app bar.
  • A Payroll Payable control account for the company, and payable controls for every statutory component you post (see Payroll configuration).
  • Loss-of-pay inputs settled: unpaid leave for the period approved, adjustments entered and approved, loans disbursed.
  • If salary TDS should deduct: the financial year's tax rule tables seeded and employee declarations verified (see Income tax on salary), and a TDS-typed component on the salary structure.

Actions on the run

ButtonWhat it doesAllowed when
Project TDSRecomputes every employee's monthly TDS projection for the run's periodAny time before posting
CalculateProjects TDS, then replaces the run's calculation passRun not posted; no payslip of the run is Published
Generate PayslipsCreates one Draft payslip per processed employee that has none yetAfter Calculate
PostPosts the payroll accrual journal and raises per-employee payable open itemsCalculated run, not already posted
Generate PaymentBuilds a Draft Salary Payment Batch for the run's positive net paysPosted run
Prepare TDS ChallanDrafts or refreshes the period's salary-TDS deposit challan from posted TDSAfter Post
PrintRenders the run's print documentAny time

Two more buttons appear on the run but do nothing useful: Post Payroll is a screen-only action with no server behaviour (use Post), and Form 16 is declared without a handler, so clicking it returns an error rather than a certificate. Form 16 figures come from the Tax Center's TDS flow, not from the run.

Procedure

New Payroll Run form with three fields: Period (date picker), Status and Payroll Period, with Cancel and Save buttons
Creating a payroll run only saves the header: the month it settles, its starting status and the configured Payroll Period whose dates drive proration and the posting date.UI captured
  1. 1

    Period — pick the month the run settles; it labels the run and is required.

  2. 2

    Status — start at Draft; Calculate, Post, Generate Payment and Pay move it forward, so never hand-set Posted or Paid.

  3. 3

    Payroll Period — the configured period record whose start and end dates set calendar days for proration and whose pay date dates the accrual journal.

  4. 4

    Cancel discards the header if the list already holds a run for this period.

  5. 5

    Save creates the Draft run; calculation and posting are separate actions on the saved record.

Step 1 — Create the period and the run

Create the payroll period if it does not exist — its start and end dates set the calendar days used for proration and the window for unpaid leave, and its pay date becomes the posting date of the accrual. Then click New on Payroll Runs and fill the three header fields: Period (the month), Status (leave it at Draft) and Payroll Period. The run's payroll company is stamped from your company context on save; the calculation selects employees whose Payroll Company or Partner Account matches it. A period can carry more than one run — an off-cycle or correction run deposits into the same period's TDS challan.

Step 2 — Calculate

Click Calculate. It first refreshes the month's salary-TDS projection for every TDS-applicable employee, then computes the run:

  1. Any previous pass is cleared — details, component lines and Draft payslips are retired, and loan installments the old pass recovered are put back on the loans and their open items.
  2. Every non-exited employee of the company with a linked Resource is considered (Total Resources). Each needs their latest active Resource Compensation record naming a salary structure with active lines; otherwise they are counted in Skipped Resources.
  3. Attendance: calendar days of the period are the total; loss-of-pay days are the approved leave requests overlapping the period whose leave type is marked unpaid (LWP / loss of pay / leave without pay), counting half-days as half. Payable days = total − LOP, and the proration factor is payable over total.
  4. Component lines are evaluated in sequence: Fixed uses the value; Percentage takes a percentage of CTC or of an earlier named component's un-prorated amount; a PT component marked Slab is resolved against the professional-tax slab table (February amount when the period ends in February); a TDS-typed component takes the month's projection; Formula, Slab on non-PT components and Manual fall back to the stored value. Min/Max clamps apply, then proration for components flagged proratable — the shortfall on earnings accumulates into the employee's loss-of-pay amount.
  5. The period's payroll adjustments for the employee whose approval status is Approved or blank are appended as extra lines, and one installment (installment amount, or the remaining balance if smaller) is deducted for every Active loan or advance with a positive balance.
  6. One Payroll Run Detail per employee is written — gross earnings, total deductions, employer contribution total, net pay, PF / ESI / TDS totals summed from components of those statutory types, payable and LOP days — and the run header gets its counts, Total Net Pay and status Calculated.

Chase the skipped count now, not after pay day. Calculating again replaces the previous pass entirely, so recalculation after a fix is always safe while the run is unposted.

Step 3 — Review

Payroll Run detail page for a Calculated run: action bar with Project TDS, Calculate, Post, Generate Payment and Generate Payslips, a twelve-step lifecycle strip, the Details tab with run information, resource counts and financial summary, and a Run Insights panel showing 9 total, 9 processed, 0 skipped and total net pay
After Calculate, the Details tab and the Run Insights panel must agree: nine employees considered, nine processed, none skipped, and a total net pay that the accrual journal will later have to match.UI captured
  1. 1

    The run's actions: Project TDS, Calculate, Post, Generate Payment, Generate Payslips (Prepare TDS Challan, Print and the inert Post Payroll / Form 16 sit under the arrow).

  2. 2

    Lifecycle strip: the run is at Calculated; Post moves it to Posted, Generate Payment to Payment Generated, Pay on the batch to Paid.

  3. 3

    Payroll Period, Partner Account and Branch — the period supplies the dates, the partner account is the company whose employees are selected.

  4. 4

    Resource counts: Total minus Processed equals Skipped — employees with no usable compensation record or structure.

  5. 5

    Total Net Pay is stamped by the calculation; the payment batch total must equal the sum of positive net pays.

  6. 6

    Run Insights repeats the counts and net pay; Related (beside Details) lists the per-employee run details and the generated payslips.

The Details tab keeps the run's period, company, lifecycle status and the calculated control totals together, and the Run Insights panel repeats the counts. Reconcile total, processed and skipped resources before relying on net pay, and do not infer posting from Status alone: Payroll Posting Status and the linked GL journal are the posting evidence.

Payroll Run detail page, Related tab, for a Calculated run: the All Payroll Run Detail View grid with nine employees showing paid days, LWP days, gross earnings, TDS and PF, and an empty All Open Transaction grid beneath it
The Related tab is the payroll register: one Payroll Run Detail per processed employee with days, gross, TDS and PF totals. The open-transaction grid below fills with one Payroll Payable item per employee once the run is posted.UI captured
  1. 1

    Related tab — switch here after Calculate to review the per-employee results before generating payslips or posting.

  2. 2

    Each row is a Payroll Run Detail; open it for the component lines behind the totals.

  3. 3

    Pa Days (paid days) and LWP Days show the attendance basis: 30 paid, 0 loss-of-pay means no proration applied.

  4. 4

    TDS is the month's projection read by the TDS component — a 0 next to non-zero rows means that employee has no projection or is marked not TDS-applicable.

  5. 5

    PF sums deduction components whose statutory type is PF; scroll right for ESI, total deductions, employer contribution and net pay.

  6. 6

    All Open Transaction is empty before posting; Post raises one payable open item per employee here, and Pay settles them.

The Related tab lists the per-employee Payroll Run Details — this is the payroll register: paid and LWP days, gross earnings, TDS, PF, ESI, total deductions, employer contribution and net pay, with the component lines behind each row one click away. Compare against last month, verify employees with loss-of-pay days, and confirm the TDS column is not unexpectedly zero (a zero usually means no projection existed, the employee is marked not TDS-applicable, or the structure carries no TDS-typed component — see Troubleshooting). Fix inputs and recalculate as often as needed.

Step 4 — Generate payslips

Click Generate Payslips. One Draft payslip is created per employee detail — running it again only fills gaps, it never duplicates. Slips are created as Draft and there is no Publish action: Publish Status is an editable field on the slip whose only effect is to block recalculation of the run, and no employee self-service screen exists, so distribute slips with Print Payslip after pay day. What a slip carries is covered in Payslips.

The generated slips are listed on Payslips (Payroll app bar), each linked to its run and period; filter the list by the run to verify that every processed employee has exactly one slip. Listing them is not a substitute for reviewing the register before generation.

Step 5 — Post

Post the accrual either by submitting the run to the approval process — final approval sets the run Approved and posts it immediately; a rejection returns it to Review, a recall to Draft — or directly with Post. Posting builds one journal of type Payroll dated on the period's pay date (falling back to the period end date): each earning and reimbursement line debits its component's GL account, each deduction line credits its payable GL account, employer contributions do both, and each employee's net pay is credited to the company's Payroll Payable control — raising one payable open item per employee for exactly what is owed. A line whose component lacks its required mapping fails the post by name; nothing posts partially. After posting the run is Posted, each detail's posting status is Posted, and the run can no longer be recalculated — a correction from here is a reversal of the journal, not an edit.

Step 6 — Generate the payment and pay it

Click Generate Payment on the posted run. It builds a Salary Payment Batch in Draft — one line per employee with positive net pay, carrying the bank account number and IFSC read from the person (Resource) record — drawing on the company's salary bank: the company profile's default bank GL if set, otherwise its only bank account, with an explicit error naming the candidates when several banks exist and none is the default. The run becomes Payment Generated. Review the batch, then click Pay on it: one journal settles every employee's Payroll Payable open item against the bank, batch and lines are marked Paid, and the run finishes Paid with its batch recorded. No bank payment file is produced — the batch is the accounting record; the transfer itself happens in your banking channel.

Expected result

The run progresses in order from Draft to Paid without duplicate calculation lines or journals. Employee details reconcile to the register, payslips reflect the reviewed calculation, the posted journal equals the run's gross, deduction and net totals, and the final bank journal clears the person-keyed Payroll Payable open items. A mismatch at any checkpoint should be resolved in that stage rather than hidden by a manual journal or a second run.

Common problems

Calculate is refused. Two states block it, deliberately: the run is already posted (reverse the accrual first), or a payslip of the run has its Publish Status set to Published (set it back to Draft if the slip has not actually been distributed).

Total Resources is zero. No employee's Payroll Company or Partner Account matches the run's company, or the employees have no linked Resource. Check the employee records rather than the run.

Post fails naming a component line. That line's payroll component is missing its GL mapping — an earning without an expense account, a deduction without a payable account, or an employer contribution missing either. An adjustment entered without a payroll component has no accounts at all and fails the same way. Map the account and post again.

Generate Payment is refused. The run must be posted, at least one employee must have positive net pay, and the company's bank must be resolvable — set the company profile's default bank GL when the company holds several bank accounts.

TDS deducted zero for everyone. Either no monthly projection existed (usually the financial year's tax rule tables are not seeded) or the salary structure has no component with statutory type TDS. Calculate re-projects automatically, so once both exist, recalculating fixes the run. See Income tax on salary.

Common questions

Can I run payroll twice in one period?

Yes — a period can hold several runs, and off-cycle or correction runs are normal. Statutory deposits are per period, not per run: Prepare TDS Challan sums posted TDS across every posted run of the period, so a correction run lands in the same deposit.

What order do posting and payslips have to happen in?

Payslips can be generated any time after calculation. Posting requires a calculated run; payment requires a posted run. The safe sequence is the one above: calculate, review, generate payslips, post (or approve), generate payment, pay, then print and distribute the slips.

What does the accrual journal look like?

Expenses on the debit side (each earning and employer contribution under its mapped account), liabilities on the credit side (each deduction and contribution under its payable account, and one Payroll Payable credit per employee for net pay). It is a normal journal — visible in the ledger, reversible like any other, and dated on the period's pay date so it lands in the right accounting period.

Who is included in a run?

Every employee of the run's company whose employment status is not Exited, who is linked to a Resource, and who has an active compensation record naming a salary structure with active lines. Exited employees are settled through full and final settlement instead.