One month's payroll for one company: the header record that drives the whole payroll cycle through its actions. Project TDS refreshes the month's salary-tax projection, Calculate builds one Payroll Run Detail per employee with the component lines behind it, Generate Payslips creates Draft payslips, Post writes the accrual journal and one Payroll Payable open item per employee, Generate Payment builds a Draft salary payment batch, and Prepare TDS Challan drafts the period's salary-TDS deposit. Status is the run's lifecycle stage and is moved by these actions and by the approval process; Payroll Posting Status and the GL link are the proof that the accrual journal exists. Recalculating replaces the previous pass and is refused once the run is posted or one of its payslips is published. Nothing reopens a posted run: reversing its journal in Finance does not clear the GL link, so corrections go into a later period as payroll adjustments.
Fields
| Field | Label | Type | Required | What it does |
|---|---|---|---|---|
ApprovalStatus | Approval Status | PickList | Mirrors the approval process outcome on this run: Pending, Approved or Rejected, cleared on recall. Written by the approval bridge, not by the payroll actions. A final approval also posts the run's accrual unless the run is already posted. | |
BranchId | Branch | Lookup → Branch | Branch dimension written onto the accrual journal, its lines and the Payroll Payable open items, and used for the bank journal when the batch is paid. Limited to branches of the selected company and defaulted on save from the creating user's default branch. It does not filter which employees are paid. | |
BusinessUnitId | Business Unit | Lookup → BusinessUnit | Business unit stamped onto the Payroll Payable open items raised at posting. It is on no seeded form and does not reach the journal lines or the employee selection. | |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
GLId | GL | Lookup → Journal | The payroll accrual journal written by Post (or by final approval). While it is set the run counts as posted, so Post and Calculate are both refused, even if Payroll Posting Status was changed by hand. | |
Id | Id | Guid | Yes | |
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Name | Text | Yes | The run number. Filled automatically on save by the Payroll Run Name Setting (series PR, the month and year, and a six-digit counter), and used as the document number on the accrual journal, on each employee's Payroll Payable open item and in the payment batch name. |
OwnerId | Owner | Lookup → UserAccount | Yes | |
PartnerAccountId | Partner Account | Lookup → Account | The company whose payroll this is. Filled on save from the creating user's default company when left blank, and limited to partner accounts. The calculation picks employees whose Payroll Company or company matches it; the Payroll Payable control account, the salary bank account and the professional-tax slabs are all resolved under it. A run with no company calculates nobody and cannot generate a payment. | |
PaymentBatchId | Payment Batch | Lookup → PayrollPaymentBatch | The salary payment batch that paid this run. Set only when that batch is paid, so it stays empty while a generated batch is still Draft. | |
PayrollPeriodId | Payroll Period | Lookup → PayrollPeriod | The pay cycle. Its start and end dates set the calendar days for proration and the window for unpaid leave, its pay date (or end date) dates the accrual journal, and it selects the period's payroll adjustments and TDS projections. Without it a run calculates with no proration, adjustments or salary TDS, posts on today's date, and cannot prepare a TDS challan. | |
PayrollPostingStatus | Payroll Posting Status | PickList | Whether the accrual journal exists. New runs start at NotPosted, the calculation leaves it there and Post sets Posted. Failed and Reversed are never set by the system: reversing the accrual journal in Finance leaves this field and the GL link unchanged. Values: Not Posted, Posted, Reversed, Failed. | |
Period | Period | PickList | Yes | The month the run settles, chosen from January to December. It labels the run; the dates the calculation actually uses come from Payroll Period, so keep the two consistent. Values: January, February, March, April, May, June, July, August, September, October, November, December. |
ProcessedResources | Processed Resources | Number | Number of employees who got a Payroll Run Detail in the last calculation. | |
RecordTypeId | Record Type | Guid, hidden | ||
SkippedResources | Skipped Resources | Number | Number of employees considered but not calculated in the last pass: no active Resource Compensation naming a salary structure, or a structure with no active component lines. Chase these before posting. | |
Status | Status | PickList | Yes | The run's lifecycle stage. Calculate sets Calculated, Post sets Posted, Generate Payment sets PaymentGenerated and paying the salary batch sets Paid. When the shipped approval process is active, submission sets Pending Approval, a rejection returns the run to Review, a recall to Draft, and final approval posts the run. Inputs Loaded, Closed and Reversed are never set by the system. The field can also be edited by hand, which changes no figures and posts nothing. Values: Draft, PendingApproval, Inputs Loaded, Calculated, Processed, Review, Approved, Posted, Payment Generated, Paid, Closed, Reversed. |
SubscriptionKey | Subscription Key | Guid, hidden | Yes | |
TotalNetPay | Total Net Pay | Calculated (calculated) | Sum of net pay on the run's Payroll Run Detail rows, set by the last calculation. Posting and payment do not change it. | |
TotalResources | Total Resources | Number | Number of employees considered by the last calculation: every employee of the run's company who is linked to a person record and is not Exited. Compare it with Processed Resources and Skipped Resources. | |
UpdatedDateTime | Modified Date | DateAndTime | Yes |
Actions
| Action | Label | Type | What it does |
|---|---|---|---|
BulkDelete | Delete | Delete | Delete the selected records. |
CalculateRun | Calculate | ServerAction (CalculatePayrollRun) | Projects TDS, then replaces the run's previous calculation with a fresh one: one Payroll Run Detail and its component lines per employee, adjustments for the period, and one installment for every active loan or advance. Sets Status to Calculated. Refused when the run is posted or one of its payslips is Published. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
Delete | Delete | Delete | Delete |
DeleteRecord | Delete | Delete | Delete |
Edit | Edit | EditInline | Edit |
EditListRow | Edit | Edit | EditListRow |
EditRecord | Edit | Edit | Edit |
Form16 | Form 16 | ServerAction | Inactive. Form 16 certificates are issued from the Tax Center and printed from the certificate (Print Form 16), not from the run. |
GeneratePaymentBatch | Generate Payment | ServerAction (GeneratePaymentBatch) | Builds a Draft salary payment batch with one line per employee with positive net pay, paying from the company's default bank account (or its only bank account), and sets Status to PaymentGenerated. Requires a posted run. It does not check for an existing batch, so each click creates another batch. |
GeneratePayslips | Generate Payslips | ServerAction (GeneratePayslips) | Creates one Draft payslip for every Payroll Run Detail that does not have one yet. Running it again only fills gaps. |
New | New | New | New |
PostPayroll | Post Payroll | UIAction | Inactive screen-only action with no server behaviour. Use Post instead. |
PostRun | Post | ServerAction (PostPayrollRun) | Posts the payroll accrual journal (debit expense, credit deductions and statutory payables, credit Payroll Payable per employee), raises one Payroll Payable open item per employee with positive net pay, and sets Status and Payroll Posting Status to Posted. Needs calculated lines, a Payroll Payable control account for the company, and GL mappings on every component used. |
PrepareSalaryTdsChallan | Prepare TDS Challan | ServerAction (PrepareSalaryTdsChallan) | Creates or refreshes the period's salary-TDS challan from the TDS on every posted run detail of the same company and period. A challan that is already paid is left alone and the difference is reported. |
Print | Print register | Prints the Payroll register template (one line per employee, statutory deductions, net pay). | |
ProjectTds | Project TDS | ServerAction (ProjectTds) | Recomputes the month's salary-TDS projection for every TDS-applicable, non-exited employee of the run's company, using the run's Payroll Period. Does nothing when the run has no period. |
PublishPayslips | Publish Payslips | ServerAction (PublishPayslips) | On a posted run: renders each payslip from the Payslip print template, stores the PDF on the payslip, sets it Published and notifies the employee by push and email. Skips payslips that already have their PDF. |
Lookup filters
| Filter | Lookup field | Notes |
|---|---|---|
| BranchFilter | BranchId | BranchFilter |
| PartnerAccountFilter | PartnerAccountId | PartnerAccountFilter |
Related entities
- BusinessUnit — looks up via
BusinessUnitId - UserAccount — looks up via
OwnerId - UserAccount — looks up via
ModifiedById - Journal — looks up via
GLId - UserAccount — looks up via
CreatedById - Branch — looks up via
BranchId - Account — looks up via
PartnerAccountId - PayrollPaymentBatch — looks up via
PaymentBatchId - PayrollPeriod — looks up via
PayrollPeriodId - Payslip — referenced by via
PayrollRunId - PaymentSalaryDisbursement — referenced by via
PayrollRunId - Payment — referenced by via
PayrollRunId - PayrollRunDetail — referenced by via
PayrollRunId - ExpenseClaim — referenced by via
IncludedInPayrollRunId - PayrollPaymentBatch — referenced by via
PayrollRunId - Journal — referenced by via
SourceRecordId - LoanAdvanceRecovery — referenced by via
PayrollRunId - InterestCharge — referenced by via
SourceRecordId - OpenTransaction — referenced by via
SourceRecordId - PayrollRunComponentLine — referenced by via
PayrollRunId
