// ============================================================= // FINANCE FEATURE GRAPHICS // ============================================================= const useTickF = (interval = 1800) => { const [t, setT] = React.useState(0); React.useEffect(() => { const id = setInterval(() => setT(x => x + 1), interval); return () => clearInterval(id); }, [interval]); return t; }; // ============== INVOICE BUILDER ============== const InvoiceMock = () => (
app.primehr.in/invoices/new
INVOICE
WH-2026-0481 · IRN ✓
USD Sent
Bill to
Surya Pharma Pvt Ltd
GSTIN 27AABCS1234A1Z5
Indore, Madhya Pradesh
Issued / Due
30 Apr 2026
30 May 2026 · Net-30
{[ { d: 'PrimeHR Growth · 80 emp × 12 mo', q: 80, r: 1068, a: 854400 }, { d: 'FFA module · 25 field staff', q: 25, r: 6000, a: 150000 }, { d: 'Tally premium connector', q: 1, r: 24000, a: 24000 }, ].map((r, i) => (
0 ? '1px dashed var(--line)' : 'none' }}> {r.d} {r.q} ₹ {r.r.toLocaleString('en-IN')} ₹ {r.a.toLocaleString('en-IN')}
))}
{[['Subtotal', '10,28,400'], ['CGST 9%', '92,556'], ['SGST 9%', '92,556']].map(([k,v]) => (
{k}₹ {v}
))}
Total ₹ 12,13,512
Tally synced e-Invoice IRN Razorpay link
); // ============== BANK STATEMENT UPLOAD ============== const BankStatementMock = () => { const t = useTickF(1400); const stages = ['Uploading', 'Parsing', 'Categorizing', 'Ready']; const stage = Math.min(3, t % 5); return (
app.primehr.in/banking/import
bank statement upload
HDFC · April 2026.pdf
{/* Drop zone */}
📄
HDFC_Statement_Apr2026.pdf
2.4 MB · 184 transactions detected
{stages[stage]}…
{/* Parsed transactions */}
DateDescriptionCategoryAmount
{[ { d: '28 Apr', desc: 'NEFT-SURYAPHA-INV0481', cat: 'Sales · Receipt', amt: 1213512, sign: '+' }, { d: '27 Apr', desc: 'UPI-AWS-MAR-INFRA', cat: 'Cloud · Hosting', amt: 84500, sign: '−' }, { d: '26 Apr', desc: 'IMPS-PAYROLL-APR-BAT1', cat: 'Payroll', amt: 1842300, sign: '−' }, { d: '25 Apr', desc: 'CHQ-RAJ-OFFICE-RENT', cat: 'Rent · Office', amt: 95000, sign: '−' }, ].map((r, i) => (
= 2 ? 1 : 0.4, transition: 'opacity 0.5s' }}> {r.d} {r.desc} {r.cat} {r.sign} ₹ {r.amt.toLocaleString('en-IN')}
))}
); }; // ============== EXPENSE & PAYMENT ============== const ExpensePaymentMock = () => (
app.primehr.in/payments/queue
payment queue · friday batch
₹ 4,18,560 ready to pay
8 vendors All approved
{[ { v: 'AWS India', cat: 'Cloud', amt: 84500, due: 'Apr 30', mode: 'NEFT' }, { v: 'Indrajit Realty (Rent)', cat: 'Office', amt: 95000, due: 'May 1', mode: 'Cheque' }, { v: 'Tally Solutions', cat: 'Software', amt: 24000, due: 'May 1', mode: 'UPI' }, { v: 'Naukri.com', cat: 'Recruitment', amt: 48000, due: 'May 2', mode: 'NEFT' }, ].map((p, i) => (
{p.v[0]}
{p.v}
{p.cat} · Due {p.due}
₹ {p.amt.toLocaleString('en-IN')} {p.mode}
))}
); // ============== RECONCILIATION ============== const ReconciliationMock = () => { const t = useTickF(1500); return (
app.primehr.in/reconcile
reconciliation · auto-match
184 of 188 matched (97.8%)
AI matched
{/* Bank side */}
Bank statement
{[ { d: 'NEFT-SURYAPHA-INV0481', amt: 1213512 }, { d: 'IMPS-PAYROLL-APR', amt: 1842300 }, { d: 'UPI-AWS-MAR', amt: 84500 }, ].map((b, i) => (
{b.d}
₹ {b.amt.toLocaleString('en-IN')}
))}
{/* Connector */}
{[0, 1, 2].map(i => ( ))}
{/* Ledger side */}
PrimeHR ledger
{[ { d: 'Invoice #WH-0481 · Surya Pharma', amt: 1213512 }, { d: 'Payroll Run · Apr 2026', amt: 1842300 }, { d: 'AWS · Cloud hosting · Mar', amt: 84500 }, ].map((b, i) => (
{b.d}
₹ {b.amt.toLocaleString('en-IN')}
))}
⚠️ 4 transactions need manual review — possible duplicate entries.
); }; Object.assign(window, { InvoiceMock, BankStatementMock, ExpensePaymentMock, ReconciliationMock });