March 10pm. CA Send FY invoices, GST split, advance proof. Drive INV-12 final FINAL2.pdf 23 files, GOS/25-26/014 missing, taxType CGST? IGST? forgotten, advance ₹30k not linked. You Give me 2 days — ₹5k CA extra + penalty risk.
Year-round compliance is invoices typed correctly once so March is export, not reconstruct.
Why Indian Freelancers Rush in March
Three gaps compound monthly:
- GST split guessed.
taxType cgst_sgst|igstsrc/app/api/invoices/route.ts:124decides9+9 vs 18. SheetsGST 18%doesn't split; re-calc 40 invoicesMar 28→ err₹18k→ GSTR-1 mismatch. - Invoices untethered.
invoices invoiceNumber uniquesrc/lib/db/schema.ts:67+issueDatesrc/lib/db/schema.ts:71should beGOS/25-26/014. DriveFINAL2breaks trail; missingdueDatesrc/lib/db/schema.ts:72→cron sent→overduesrc/app/api/cron/daily/route.ts:46never flipped. - Advances invisible.
advance ₹30kasUPInottransactions category:Project Advancesrc/app/api/transactions/route.ts:57→syncProjectAdvancesrc/app/api/transactions/route.ts:21never updatedprojects advancesrc/lib/db/schema.ts:36. CA sees₹5Lvs bank₹5.3L— gap, not proof.
Scattered files make compliance = March reconstruction. Linked graph makes compliance = daily correctness.
The Year-Round Linked Compliance Graph
RunoSO tenant_${id} src/lib/db/tenant.ts:47 stores tax correctness at write time, not March:
invoices(id, invoiceNumber unique src/lib/db/schema.ts:67, issueDate timestamp src/lib/db/schema.ts:71, dueDate, amount numeric(12,2) src/lib/db/schema.ts:69, currency INR, items jsonb src/lib/db/schema.ts:74, discount numeric src/lib/db/schema.ts:75, taxRate numeric(5,2) src/lib/db/schema.ts:76, taxType varchar(50) src/lib/db/schema.ts:77, recurringInterval varchar(20) src/lib/db/schema.ts:80, recurringNextDate timestamp src/lib/db/schema.ts:81, clientId fk, projectId fk)
transactions(type income|expense src/lib/db/schema.ts:87, amount numeric, category varchar(100), currency INR, date timestamp src/lib/db/schema.ts:96, clientId, projectId, invoiceId)
cron daily 30 3 * * * vercel.json:4 → flips sent→overdue lt(dueDate, now) src/app/api/cron/daily/route.ts:49 + advances recurring via nextRecurringDate() src/lib/utils/recurring.ts:5What auto correctness gives:
- GST at source.
POST /api/invoicessrc/app/api/invoices/route.ts:84validatestaxRate 0..100+taxType none|cgst_sgst|igst. Servertax = taxable*rate/100src/app/api/invoices/route.ts:121→computedTotalsrc/app/api/invoices/route.ts:127toFixed(2)— no9+9 vs 18error. - Invoice trail gap-free.
invoiceNumber GOS/25-26/014status draft|sent|paid|overduesrc/lib/db/schema.ts:58+items jsonb—items + taxRate + taxTypeis GSTRtaxable + tax.GET /api/invoices page+pageSizesrc/app/api/invoices/route.ts:43paginates FY audit. - Advance & paid sync.
status paid→ autotransactions Invoice Paymentsrc/app/api/invoices/route.ts:154→syncInvoicePaidStatussrc/app/api/transactions/route.ts:44flipssent→paidelse cronsent→overdue. CA seesadvance 30k + invoice 014 paid = ₹90klinked. - Retainers compliant yearly.
recurringInterval monthly|quarterly|yearlysrc/lib/utils/recurring.ts:5clones preservingdueGapMssrc/app/api/cron/daily/route.ts:92—Apr 2025→2026sequence unbroken.
Month-by-Month Calm, Not March Rush
| Month | 30-min habit | RunoSO query that proves it | ||
|---|---|---|---|---|
| Apr | Create FY GOS/25-26/001 issueDate Apr 1 taxType cgst_sgst 18 | GET /api/invoices?startDate=2025-04-01 | ||
| May-Jun | Log transactions Professional + Project Advance | GET /api/transactions?type=expense&category=Professional | ||
| Jul | Q1 GSTR: export Apr-Jun amount + tax | sum(amount) where taxType != none | ||
| Aug-Sep | Review finance_charts true src/lib/plans/limits.ts:59 trend — provision 18% GST saved? | FinanceOverviewClient Recharts | ||
| Oct | Q2 export + `investments sip | stock | crypto src/lib/db/schema.ts:267` for 80C buffer | investments with transactionId |
| Jan | Q3 + advance tax 3rd instalment proof transactions date src/app/api/transactions/route.ts:88 | GET /api/transactions?startDate=2025-04-01 | ||
| Mar | One-click FY export invoices + transactions → CA No reconstruction | data_export true src/lib/plans/limits.ts:58 |
30 min/mo = 6 hours/yr. March reconstruction 2 days × 6h = 12h + ₹5k CA extra. Year-round wins by double.
Excel vs QuickBooks vs FreshBooks vs RunoSO — India Compliance
| Need | Excel/Sheets | QuickBooks | FreshBooks | RunoSO | ||
|---|---|---|---|---|---|---|
| GST split | Text 18% — manual 9+9 err | US tax, not `cgst_sgst | igst` | US | `taxType cgst_sgst | igst + taxRate src/app/api/invoices/route.ts:121` |
| Invoice compliance | final FINAL2.pdf no unique | Sequential no items | Sequential | invoiceNumber unique + issueDate/dueDate + amount numeric audit-ready | ||
| Auto overdue | Manual Overdue? | Flag | Reminder | Cron 30 3 * * * vercel.json:4 sent→overdue src/app/api/cron/daily/route.ts:49 | ||
| Advance proof | YES text | No sync | No | syncProjectAdvance + syncInvoicePaidStatus src/app/api/transactions/route.ts:21 | ||
| Recurring FY | Copy row dup 015→015 | Recurring US | Recurring | `recurringInterval monthly | quarterly | yearly src/lib/utils/recurring.ts:5` auto |
| Cost | Free + penalty risk | ₹1,200/mo US | ₹1,500/mo US | Free 5/mo src/lib/plans/limits.ts:28 → Solo ∞ |
Excel is free but FY-gap risky; QuickBooks/FreshBooks auto-compute US tax not Indian cgst_sgst|igst. RunoSO auto cgst_sgst|igst + linked advance + cron.
Three Mistakes That Trigger Notices
Mixing inter vs intra without taxType. Mumbai cgst_sgst 9+9 vs Delhi igst 18 — set correct taxType at POST or credits disallowed.
Invoicing late. Work Mar 28 invoice Apr 02 slips FY. Create issueDate = work done date src/lib/db/schema.ts:71.
Not linking invoiceId. UPI ₹59k without invoiceId src/lib/db/schema.ts:98 → CA can't tie TDS → always POST invoiceId when Invoice Payment.
RunoSO makes every invoice GST-correct at creation — cgst_sgst|igst split, amount server-computed, advance linked, overdue auto — so March is export, not emergency.
→ Stay Compliant All Year — Try RunoSO Free
By Gautam Parmar — solo founder. Indian freelance finance that stays compliant daily, not yearly.
Keep Reading
- Invoice right: GST Invoicing for Indian Freelancers.
- Fast invoices: How to Create a Professional Invoice in 60 Seconds.
- Chasing paid: How to Chase Late Payments Without Awkward Emails.
FAQ
Do I need GST if under ₹20L? Under threshold you may be exempt, but many clients need GST-compliant invoice for ITC — taxType none with taxRate 0 src/app/api/invoices/route.ts:30 works until you cross. Track sum amount where taxType != none to know when you cross — year-round view beats March surprise.
How does RunoSO handle CGST vs IGST? At POST /api/invoices choose taxType:cgst_sgst intra-state 9+9 or igst inter-state 18 src/app/api/invoices/route.ts:124. Server tax = taxable*rate/100 src/app/api/invoices/route.ts:121 computed once — no Sheet =B2*18% vs =B2*9% error.
Can I export FY data for my CA? Yes — GET /api/invoices + GET /api/transactions?startDate=2025-04-01&endDate=2026-03-31 src/app/api/transactions/route.ts:88 paginated pageSize 20 src/app/api/invoices/route.ts:44. Solo data_export true src/lib/plans/limits.ts:58 enables bulk; free 5/mo src/lib/plans/limits.ts:28 tracks count via checkPlanLimit src/app/api/invoices/route.ts:101.



