The wages are a journal the books receive
There is no HR module. The payroll engine's result — by department: gross, PF, ESI, PT, TDS, advances, net — is imported once a month, posted as one journal, and paid: the staff, then each authority with a challan.
The wages are worked out elsewhere — Tally, Keka, the accountant's spreadsheet. What finance receives is the result, by department and cost centre, and it is received as one journal a month.
The import
One row per employee: gross, the employer's PF and ESI, the employee's PF, ESI, professional tax and TDS on salary, advances recovered, other deductions, net. A file already imported is refused by its hash; a month with a posted run takes no second run until the first is reversed; every row's net is checked to equal gross less the deductions; a recovery of an advance never given is refused.
The journal
Each department's payroll account debited — the uniform system wants payroll in the department — and salaries payable, PF, ESI, PT and TDS on salaries credited. It lands on the month's last day if the month is audited, else on the business date; a locked month refuses it.
Paying it
The net to the staff, in parts if the bank file is split; PF, ESI, PT and TDS each to its authority with the challan number. Over-paying a liability is refused. A month's salary advanced to someone is recovered from the next payroll, oldest first. An expense claim with receipts goes through the payables machine with the employee as the payee; a corporate card is a bank account of its own kind whose statement is imported like any other. The service-charge pool the restaurant builds up is handed to the staff through the same run.
The month whose file is late
An accrual by department, dated the month's last day and reversed on the first, so the month can close before the file arrives; refused once the real payroll is posted.