{% extends "base.html" %} {% block title %}Payroll · {{ month_name }} · WageWise Neo{% endblock %} {% block content %}
🔒 This run is finalized — attendance, OT hours, and bank transfer figures for {{ month_name }} are locked to prevent a mismatch with what may already have been reported to PF/ESI or paid out. {% if run.finalized_at %}Finalized {{ run.finalized_at[:10] }}{% if run.finalized_by %} by {{ run.finalized_by }}{% endif %}.{% endif %} {% if run.revision_count and run.revision_count > 0 %} Last revised {{ run.last_revised_at[:10] if run.last_revised_at else '' }}{% if run.last_revised_by %} by {{ run.last_revised_by }}{% endif %}. {% endif %} {% if is_admin %}Only an Admin can reopen it for correction.{% endif %}
| When | Action | By | Reason |
|---|---|---|---|
| {{ a.created_at[:16] if a.created_at else '' }} | {{ a.action }} | {{ a.full_name or a.username or '' }} | {{ a.reason or '—' }} |
⚠ {{ date_warnings|length }} employee(s) have a Date of Joining or Date of Leaving that couldn't be read — treated as if that restriction doesn't apply for this run, so their pay may be wrong until you fix their record:
| Employee | Days | Gross Earned | PF (Emp) | ESI (Emp) | PT | TDS | Net Pay | |
|---|---|---|---|---|---|---|---|---|
| {{ slip.full_name }} | {{ slip.days_worked }} | ₹{{ "{:,.0f}".format(slip.gross) }} | ₹{{ "{:,.0f}".format(slip.pf_employee) }} | ₹{{ "{:,.0f}".format(slip.esi_employee) }} | ₹{{ "{:,.0f}".format(slip.pt) }} | ₹{{ "{:,.0f}".format(slip.tds) }} | ₹{{ "{:,.0f}".format(slip.net_pay) }} | |
| Total | — | ₹{{ "{:,.0f}".format(totals.gross) }} | ₹{{ "{:,.0f}".format(totals.pf_emp) }} | ₹{{ "{:,.0f}".format(totals.esi_emp) }} | ₹{{ "{:,.0f}".format(totals.pt) }} | ₹{{ "{:,.0f}".format(totals.tds) }} | ₹{{ "{:,.0f}".format(totals.net) }} |
| PF — Employee deduction | ₹{{ "{:,.0f}".format(totals.pf_emp) }} |
| PF — Employer contribution | ₹{{ "{:,.0f}".format(totals.pf_er) }} |
| Total PF to remit to EPFO | ₹{{ "{:,.0f}".format(totals.pf_emp + totals.pf_er) }} |
| ESI — Employee deduction | ₹{{ "{:,.0f}".format(totals.esi_emp) }} |
| ESI — Employer contribution | ₹{{ "{:,.0f}".format(totals.esi_er) }} |
| Total ESI to remit to ESIC | ₹{{ "{:,.0f}".format(totals.esi_emp + totals.esi_er) }} |
| Professional Tax (state) | ₹{{ "{:,.0f}".format(totals.pt) }} |
| TDS (to remit to IT dept) | ₹{{ "{:,.0f}".format(totals.tds) }} |
Due dates: PF by 15th of next month · ESI by 15th of next month · PT by 20th · TDS by 7th of next month
Monthly gratuity provision is enabled. This amount should be set aside (not deducted from employee) as a company liability. Add to your books accordingly.
| Employee | Basic + DA | Years of Service | Monthly Provision |
|---|---|---|---|
| {{ g.full_name }} | ₹{{ "{:,.0f}".format(g.basic_da) }} | {{ g.years_of_service }} | ₹{{ "{:,.0f}".format(g.monthly_provision) }} |
| Total Provision | ₹{{ "{:,.0f}".format(grat_total) }} | ||
Gratuity is set to At Exit Only mode. No monthly provision is deducted or set aside. View the full gratuity register → Gratuity Register
OT note: Employees with "In Gross" OT — overtime is included in gross earned, so ESI/PF are calculated on it. Employees with "External" OT — overtime is added directly to net pay, bypassing ESI/PF deductions. Both types appear in the Bank Slip with the correct final transfer amount.