I am a founder of a startup and my employee is demanding, I have given a salary to my employee for the past three months and he's actually demanding for salary slip. As an employer, I don't know what a salary slip, how to generate it and I have just paid him in his bank account from my current account, so I don't know how to give him that. Just help me with it. And basically he is asking for visa purposes that he wants to apply and yeah.
| Field | Example |
|---|---|
| Company Name | XYZ Startups Pvt. Ltd. |
| Company Address | Bengaluru, Karnataka |
| Employee Name | Rahul Sharma |
| Employee ID | EMP001 |
| Designation | Software Engineer |
| Department | Engineering |
| Date of Joining | 01-Feb-2026 |
| Pay Period | February 2026 |
| Bank Account No. | XXXX XXXX 4567 |
| PAN No. | ABCDE1234F |
| Component | Amount (₹) |
|---|---|
| Basic Salary | 25,000 |
| House Rent Allowance (HRA) | 10,000 |
| Special Allowance | 5,000 |
| Gross Salary | 40,000 |
For a small startup with just 1 employee, you can keep it simple — Basic + HRA + Special Allowance is enough.
| Component | Amount (₹) |
|---|---|
| Provident Fund (PF) | 1,800 |
| Professional Tax (PT) | 200 |
| TDS (Income Tax) | 0 (if below tax bracket) |
| Total Deductions | 2,000 |
Net Salary = Gross Salary − Total Deductions ₹40,000 − ₹2,000 = ₹38,000
So this is just prepared by the employer only, right? And not a legal document. I mean, like, the visa authorities cannot cross-verify it from a third party, right?
Can you fact check this payslip Specially for gujarat pvt ltd company in india
cd /home/daytona/workspace/attachments/7bca2c3a-ab9d-4187-8657-ce8f799e5cd8/ && python3 -c " import pdfplumber with pdfplumber.open('Akash_Bhatiya_Payslip_May2026_Redesigned.pdf') as pdf: for i, page in enumerate(pdf.pages): print(f'--- PAGE {i+1} ---') text = page.extract_text() print(text) print() tables = page.extract_tables() for j, table in enumerate(tables): print(f'TABLE {j+1}:') for row in table: print(row) print() "
| Item | Verdict | Notes |
|---|---|---|
| Basic Salary = 40% of Gross | ✅ | ₹72,000 = 40% of ₹1,80,000 — correct |
| HRA = 20% of Gross | ✅ | ₹36,000 = 20% of ₹1,80,000 — standard |
| PF = 12% of Basic | ✅ | ₹72,000 × 12% = ₹8,640 — correct |
| Professional Tax (Gujarat) | ✅ | ₹200/month for salary above ₹12,000 — correct per Gujarat PT slab |
| Gross Earnings total | ✅ | ₹72,000 + ₹36,000 + ₹60,150 + ₹1,600 + ₹1,250 + ₹9,000 = ₹1,80,000 — correct |
| Net Pay calculation | ✅ | ₹1,80,000 − ₹30,000 = ₹1,50,000 — correct |
| Annual CTC | ✅ | ₹1,80,000 × 12 = ₹21,60,000 gross + ₹1,03,680 employer PF (₹8,640×12) = ~₹22,63,680 — correct |
| Conveyance Allowance ₹1,600 | ✅ | Standard amount used by many companies |
| Medical Allowance ₹1,250 | ✅ | Standard ₹15,000/year = ₹1,250/month |
| Pay Period label | ✅ | Says "April 2026" but header says "May 2026" — see issue below |
The PDF filename saysPayslip_May2026and the header reads "PAYSLIP FOR THE MONTH OF APRIL 2026" with pay period 01 April–31 April 2026. This is actually fine as a document — salary for April is typically paid in May (Pay Date: 04 May 2026 is correct). But the filename can create confusion. Not an error, but worth noting.
TDS shown: ₹19,175/month. Annualised TDS = ₹19,175 × 12 = ₹2,30,100.Under the New Tax Regime (FY 2026-27), taxable salary at ₹22,63,680 CTC:
- Standard deduction: ₹75,000
- Taxable income ≈ ₹21,88,680
- Tax on this: ₹15,000 (0–4L) + ₹20,000 (4–8L @5%) + ₹40,000 (8–12L @10%) + ₹60,000 (12–16L @15%) + ₹56,870 (16–20L @20%) + remaining @25% ≈ roughly ₹2,20,000–₹2,40,000 tax + 4% cess
₹2,30,100 annual TDS falls within a plausible range. Not an error, but you may want your CA to confirm the exact slab calculation.
There is a line item called "Other Deductions: ₹1,985" with no description. This is a red flag for visa/legal purposes. Every deduction on a payslip must be explained. It could be:
- Advance salary recovery
- Loss of pay (LOP)
- Health insurance premium
- Any other
Fix: Replace "Other Deductions" with the actual reason (e.g., "Health Insurance Premium – ₹1,985").
PF ₹8,640 + PT ₹200 + TDS ₹19,175 + Other ₹1,985 = ₹30,000 ✅ — adds up correctly.
In India, employer also contributes 12% of Basic to PF (₹8,640). This is typically shown in the CTC breakup but not in the deductions column — which is correct here. The CTC of ₹22,63,680 accounts for it. No error, just confirming.
LTA is typically an annual benefit (₹1,08,000/year here = 5% of gross). Showing it monthly is fine and common. However, LTA is tax-exempt only when actually claimed for travel. Showing it monthly in CTC is standard practice. No error.
PAN shown: HOYPB6293B — this follows the correct Indian PAN format (5 letters, 4 digits, 1 letter). ✅ Structurally valid.
CIN: U32500GJ2025PTC159907 — format analysis:
- U = Unlisted
- 32500 = NIC code
- GJ = Gujarat ✅
- 2025 = Year of incorporation ✅
- PTC = Private Limited Company ✅
- 6-digit number ✅ Structurally valid CIN format for a Gujarat Pvt Ltd.
| Priority | Issue | Action |
|---|---|---|
| 🔴 Must Fix | "Other Deductions ₹1,985" has no description | Add the actual reason |
| 🟡 Minor | Filename says May, content says April | Rename file or align header to avoid confusion |
| 🟡 Advisory | TDS amount — have a CA verify the exact computation | Confirm with accountant |
Now fact check this especially calculations all use python script to verify calculations
python3 << 'EOF' # ============================================================ # PAYSLIP FACT-CHECK SCRIPT # Orr Is Care Private Limited — Akash Bhatiya — April 2026 # ============================================================ print("=" * 60) print("PAYSLIP FACT-CHECK: Akash Bhatiya | April 2026") print("=" * 60) # --- RAW VALUES FROM PAYSLIP --- monthly_gross = 180000.00 basic_salary = 72000.00 hra = 36000.00 special_allowance = 60150.00 conveyance = 1600.00 medical = 1250.00 lta = 9000.00 pf_employee = 8640.00 professional_tax = 200.00 tds = 19175.00 other_deductions = 1985.00 gross_earnings_stated = 180000.00 total_deductions_stated = 30000.00 net_pay_stated = 150000.00 annual_ctc_stated = 2263680.00 errors = [] warnings = [] ok = [] print("\n--- EARNINGS CHECKS ---\n") # 1. Basic = 40% of Gross basic_expected = monthly_gross * 0.40 check = abs(basic_salary - basic_expected) < 0.01 status = "✅ PASS" if check else "❌ FAIL" print(f"Basic Salary (40% of ₹{monthly_gross:,.0f}):") print(f" Expected : ₹{basic_expected:,.2f}") print(f" On Slip : ₹{basic_salary:,.2f} → {status}") if not check: errors.append(f"Basic Salary mismatch: expected ₹{basic_expected:,.2f}, got ₹{basic_salary:,.2f}") else: ok.append("Basic Salary = 40% of Gross ✅") print() # 2. HRA = 20% of Gross (standard) hra_expected_20 = monthly_gross * 0.20 check_hra = abs(hra - hra_expected_20) < 0.01 status = "✅ PASS" if check_hra else "⚠️ NOTE" print(f"HRA (20% of Gross):") print(f" Expected : ₹{hra_expected_20:,.2f}") print(f" On Slip : ₹{hra:,.2f} → {status}") if not check_hra: warnings.append(f"HRA doesn't match 20% of Gross exactly. Got ₹{hra:,.2f}, expected ₹{hra_expected_20:,.2f}") else: ok.append("HRA = 20% of Gross ✅") print() # 3. Gross Earnings = Sum of all earnings gross_calc = basic_salary + hra + special_allowance + conveyance + medical + lta check_gross = abs(gross_calc - gross_earnings_stated) < 0.01 status = "✅ PASS" if check_gross else "❌ FAIL" print(f"Gross Earnings (sum of all components):") print(f" {basic_salary:,.2f} + {hra:,.2f} + {special_allowance:,.2f} + {conveyance:,.2f} + {medical:,.2f} + {lta:,.2f}") print(f" Calculated : ₹{gross_calc:,.2f}") print(f" On Slip : ₹{gross_earnings_stated:,.2f} → {status}") if not check_gross: errors.append(f"Gross Earnings mismatch: calculated ₹{gross_calc:,.2f}, stated ₹{gross_earnings_stated:,.2f}") else: ok.append("Gross Earnings sum is correct ✅") print() # 4. Special Allowance = Gross - (Basic + HRA + Conveyance + Medical + LTA) [plug number] special_expected = monthly_gross - basic_salary - hra - conveyance - medical - lta print(f"Special Allowance (plug = Gross - all other earnings):") print(f" Expected : ₹{special_expected:,.2f}") print(f" On Slip : ₹{special_allowance:,.2f} → {'✅ PASS' if abs(special_allowance - special_expected) < 0.01 else '❌ FAIL'}") if abs(special_allowance - special_expected) > 0.01: errors.append(f"Special Allowance mismatch: expected ₹{special_expected:,.2f}, got ₹{special_allowance:,.2f}") else: ok.append("Special Allowance (plug) is correct ✅") print() print("--- DEDUCTIONS CHECKS ---\n") # 5. PF = 12% of Basic pf_expected = basic_salary * 0.12 check_pf = abs(pf_employee - pf_expected) < 0.01 status = "✅ PASS" if check_pf else "❌ FAIL" print(f"Provident Fund (12% of Basic ₹{basic_salary:,.0f}):") print(f" Expected : ₹{pf_expected:,.2f}") print(f" On Slip : ₹{pf_employee:,.2f} → {status}") if not check_pf: errors.append(f"PF mismatch: expected ₹{pf_expected:,.2f}, got ₹{pf_employee:,.2f}") else: ok.append("PF = 12% of Basic ✅") print() # 6. Professional Tax — Gujarat slab # Gujarat PT: ₹200/month for salary > ₹12,000 pt_expected = 200.00 check_pt = abs(professional_tax - pt_expected) < 0.01 status = "✅ PASS" if check_pt else "❌ FAIL" print(f"Professional Tax (Gujarat slab for salary > ₹12,000):") print(f" Expected : ₹{pt_expected:,.2f}") print(f" On Slip : ₹{professional_tax:,.2f} → {status}") if not check_pt: errors.append(f"Professional Tax mismatch: expected ₹{pt_expected:,.2f}, got ₹{professional_tax:,.2f}") else: ok.append("Professional Tax (Gujarat ₹200) ✅") print() # 7. TDS — New Tax Regime FY2026-27 # Annual gross = 180000 * 12 = 2,160,000 # Standard deduction = 75,000 # Taxable income = 2,160,000 - 75,000 = 2,085,000 # New regime slabs FY26-27: # 0 - 400,000 : 0% # 400,001 - 800,000 : 5% → 20,000 # 800,001 - 1,200,000: 10% → 40,000 # 1,200,001 - 1,600,000: 15% → 60,000 # 1,600,001 - 2,000,000: 20% → 80,000 # 2,000,001 - 2,400,000: 25% → remaining # above 2,400,000 : 30% annual_gross = monthly_gross * 12 standard_deduction = 75000 taxable_income = annual_gross - standard_deduction tax = 0 slabs = [ (400000, 0.00), (400000, 0.05), (400000, 0.10), (400000, 0.15), (400000, 0.20), (400000, 0.25), (float('inf'), 0.30), ] remaining = taxable_income for slab_size, rate in slabs: if remaining <= 0: break taxable_in_slab = min(remaining, slab_size) tax += taxable_in_slab * rate remaining -= taxable_in_slab # Add 4% health & education cess cess = tax * 0.04 total_tax = tax + cess monthly_tds = total_tax / 12 print(f"TDS – Income Tax (New Regime FY26-27):") print(f" Annual Gross : ₹{annual_gross:,.2f}") print(f" Standard Deduction : ₹{standard_deduction:,.2f}") print(f" Taxable Income : ₹{taxable_income:,.2f}") print(f" Tax (before cess) : ₹{tax:,.2f}") print(f" Cess (4%) : ₹{cess:,.2f}") print(f" Total Annual Tax : ₹{total_tax:,.2f}") print(f" Monthly TDS : ₹{monthly_tds:,.2f}") print(f" On Slip : ₹{tds:,.2f}") tds_diff = abs(monthly_tds - tds) if tds_diff < 50: print(f" → ✅ PASS (difference of ₹{tds_diff:.2f} — rounding)") ok.append(f"TDS broadly correct (diff ₹{tds_diff:.2f}) ✅") elif tds_diff < 500: print(f" → ⚠️ MINOR DISCREPANCY (difference of ₹{tds_diff:.2f})") warnings.append(f"TDS: calculated ₹{monthly_tds:,.2f}, slip shows ₹{tds:,.2f} — diff ₹{tds_diff:.2f}") else: print(f" → ❌ FAIL (difference of ₹{tds_diff:.2f})") errors.append(f"TDS mismatch: calculated ₹{monthly_tds:,.2f}, slip shows ₹{tds:,.2f} — diff ₹{tds_diff:.2f}") print() # 8. Total Deductions total_ded_calc = pf_employee + professional_tax + tds + other_deductions check_ded = abs(total_ded_calc - total_deductions_stated) < 0.01 status = "✅ PASS" if check_ded else "❌ FAIL" print(f"Total Deductions (sum):") print(f" {pf_employee:,.2f} + {professional_tax:,.2f} + {tds:,.2f} + {other_deductions:,.2f}") print(f" Calculated : ₹{total_ded_calc:,.2f}") print(f" On Slip : ₹{total_deductions_stated:,.2f} → {status}") if not check_ded: errors.append(f"Total Deductions mismatch: calculated ₹{total_ded_calc:,.2f}, stated ₹{total_deductions_stated:,.2f}") else: ok.append("Total Deductions sum is correct ✅") print() # 9. Net Pay net_calc = gross_earnings_stated - total_deductions_stated check_net = abs(net_calc - net_pay_stated) < 0.01 status = "✅ PASS" if check_net else "❌ FAIL" print(f"Net Pay (Gross - Total Deductions):") print(f" ₹{gross_earnings_stated:,.2f} - ₹{total_deductions_stated:,.2f} = ₹{net_calc:,.2f}") print(f" On Slip : ₹{net_pay_stated:,.2f} → {status}") if not check_net: errors.append(f"Net Pay mismatch: calculated ₹{net_calc:,.2f}, stated ₹{net_pay_stated:,.2f}") else: ok.append("Net Pay = Gross - Deductions ✅") print() # 10. Annual CTC check # CTC = Annual Gross + Employer PF (12% of Basic × 12) employer_pf_annual = basic_salary * 0.12 * 12 annual_ctc_calc = annual_gross + employer_pf_annual check_ctc = abs(annual_ctc_calc - annual_ctc_stated) < 1.00 status = "✅ PASS" if check_ctc else "❌ FAIL" print(f"Annual CTC (Annual Gross + Employer PF):") print(f" Annual Gross : ₹{annual_gross:,.2f}") print(f" Employer PF (annual) : ₹{employer_pf_annual:,.2f}") print(f" Calculated CTC : ₹{annual_ctc_calc:,.2f}") print(f" On Slip : ₹{annual_ctc_stated:,.2f} → {status}") if not check_ctc: errors.append(f"Annual CTC mismatch: calculated ₹{annual_ctc_calc:,.2f}, stated ₹{annual_ctc_stated:,.2f}") else: ok.append("Annual CTC includes Employer PF correctly ✅") print() print("=" * 60) print("SUMMARY") print("=" * 60) print(f"\n✅ PASSED ({len(ok)}):") for item in ok: print(f" • {item}") if warnings: print(f"\n⚠️ WARNINGS ({len(warnings)}):") for w in warnings: print(f" • {w}") if errors: print(f"\n❌ ERRORS ({len(errors)}):") for e in errors: print(f" • {e}") else: print(f"\n✅ No critical errors found.") print("\n--- OTHER FLAGS (non-calculation) ---") print("⚠️ 'Other Deductions ₹1,985' has no description — must be labeled for visa use.") print("ℹ️ Pay Period image says '01 April 2026 – 30 April 2026' (30 days, correct).") print("ℹ️ PAN format HOYPB6293B — structurally valid (5L-4N-1L).") print("ℹ️ CIN U32500GJ2025PTC159907 — Gujarat Pvt Ltd 2025 registration, valid format.") EOF
| # | Check | Expected | On Slip | Result |
|---|---|---|---|---|
| 1 | Basic = 40% of Gross (₹1,80,000) | ₹72,000 | ₹72,000 | ✅ |
| 2 | HRA = 20% of Gross | ₹36,000 | ₹36,000 | ✅ |
| 3 | Special Allowance (plug number) | ₹60,150 | ₹60,150 | ✅ |
| 4 | Gross = sum of all 6 components | ₹1,80,000 | ₹1,80,000 | ✅ |
| 5 | PF = 12% of Basic (₹72,000) | ₹8,640 | ₹8,640 | ✅ |
| 6 | Professional Tax (Gujarat slab) | ₹200 | ₹200 | ✅ |
| 7 | TDS — New Regime FY26-27* | ₹19,175 | ₹19,175 | ✅ |
| 8 | Total Deductions sum | ₹30,000 | ₹30,000 | ✅ |
| 9 | Net Pay = Gross − Deductions | ₹1,50,000 | ₹1,50,000 | ✅ |
| 10 | Annual CTC = Annual Gross + Employer PF | ₹22,63,680 | ₹22,63,680 | ✅ |
What to write that give me something generic
Welfare & Miscellaneous DeductionMiscellaneous Deduction| Miscellaneous Deduction | ₹1,985.00 |
|---|
Good to go now?