๐ Finance & Reports
Chart of Accounts (CoA)
Every tenant is pre-seeded with 60 accounts covering Assets / Liabilities / Equity / Income / Expenses โ the standard Indian tree. Customize freely.
- Finance โ Chart of Accounts
- Add: + New Account โ pick Account Type (Asset/Liability/Equity/Income/Expense), Account Category, Account No (e.g. 1150), Account Name
- Edit: click any row โ change Name / Category / Blocked flag. Blocked accounts don't appear in JV pickers.
Manual Journal Voucher (JV)
For adjustments not covered by other flows: bank charges, provisions, month-end accruals, opening balances.
- Finance โ Journal Entry โ + New JV
- Enter Voucher No (auto), Date, Journal Type (General / Bank / Cash), Narration
- Add lines: Account + Debit or Credit. Add as many lines as needed.
- Total Debit MUST equal Total Credit โ trigger enforces at post time.
- Optional: attach Dimensions (Cost Center, Department) for later slicing
- Click Post. GL Entries created. Print JOURNAL_VOUCHER for audit file.
Trial Balance
Every account with a non-zero balance. First check before any financial statement โ Dr side must equal Cr side.
- Finance โ Trial Balance
- Enter From Date + To Date (usually FY start to today)
- Click โถ Generate. Table shows: Account No / Name / Category / Total Debit / Total Credit / Balance
- Bottom row: totals must match. If mismatch, GL invariant trigger caught something โ check Admin โ GL Balance Audit.
- Click โค Excel to export for CA.
Profit & Loss (Income Statement)
- Finance โ Income Statement
- Enter From Date + To Date. Optionally filter by Dimension (per-store P&L, per-department P&L)
- Click โถ Generate. Shows Income โ Expenses = Net Profit/Loss
- Click any account row โ drills into GL detail for that account
Balance Sheet
- Finance โ Balance Sheet
- Enter As-of Date. Optionally filter by Dimension.
- Click โถ Generate. Assets = Liabilities + Equity (auto-balanced via Retained Earnings from P&L).
- Groups: Current Assets โ Fixed Assets โ Current Liabilities โ Long-term Liabilities โ Equity
AR / AP Aging Analysis
"Who owes me?" (AR = Accounts Receivable) and "Who do I owe?" (AP = Accounts Payable) โ bucketed by days overdue.
- Finance โ Aging Analysis
- Choose tab: AR (Customer) or AP (Vendor)
- Enter As-of Date (usually today). Click โถ Load
- Rows: one per open invoice. Buckets: Current / 1-30 / 31-60 / 61-90 / 91+ days overdue
- Click a customer/vendor row โ drills into their full ledger
- โค Excel to send to collections/finance team
Bank Reconciliation
Match your bank statement rows against posted GL entries. Detect: missed entries, duplicates, cheques not cleared.
- Finance โ Bank Statement Import โ upload PDF bank statement. AI extracts rows.
- Review extracted rows. Correct if needed. Click Import.
- Finance โ Bank Reconciliation โ pick your bank account + date range
- Left panel: Bank statement rows. Right panel: GL entries to this account.
- Click Auto-match โ pairs rows with equal amount + within ยฑ3 days
- Manually match remaining rows: tick left row + right row(s) that sum equal โ Match
- Bottom shows: Bank closing + Outstanding deposits โ Outstanding cheques = Adjusted Bank. Compare to GL. Diff should be zero.
Recurring Journals (monthly rent, insurance, etc)
- Finance โ Recurring Journals โ + New Template
- Define: Name ("Office Rent"), Cadence (Monthly / Quarterly / Yearly), Next Due Date
- Add balanced lines. Total Debit MUST equal Total Credit like any JV.
- Optional: Dry-run to preview next post
- Save + activate. RecurringJournalWorker auto-posts on due date + advances Next Due Date.
- Pause any time โ flip Active = No.
Year-End Close
End of financial year (31st March in India): close P&L accounts to Retained Earnings + carry over Balance Sheet.
- Finance โ Year-End Close โ + New Close
- Pick Fiscal Year ending 31-Mar
- Click โถ Preview โ shows what will happen without committing. Verify totals + Retained Earnings.
- Click โถ Dry-run โ commits to a shadow ledger. Still reversible.
- Click โถ Commit โ locks the fiscal year. New year starts fresh with opening balances = closing of prior year.
- Reverse button available for 30 days after commit if you spot an error.
Rounding Setup (per doc type + currency)
Invoice-level rounding rules โ mandatory for GST-compliant printing.
- Finance โ Rounding Setup
- Each row = one rule: DocType (Purchase/Sales/POS/Hospitality), Currency (INR/USD/โฆ), Invoice Precision (1.00 = nearest rupee, 0.01 = nearest paise), Method (Nearest / Up / Down), Rounding GL Account (default 6190 Rounding Off)
- Every new tenant seeded with 28 rules (4 doc types ร 7 currencies). Owners can edit any.
Number Series (document numbering)
Every document type โ Purchase Order, GRN, Purchase Invoice, Sales Order, Sales Invoice, Payment, Journal Voucher, Stock Transfer, etc. โ draws its number from a Number Series. You control the prefix, starting number, padding, and reset behavior. Separate series for unposted (draft) vs posted are supported.
Create a number series
- Go to Finance โ GL Setup (or Admin โ GL Setup).
- Click the ๐ข Number Series tab in the left sidebar of the page.
- In the All Number Series card, click + New.
- Fill in the modal:
- Series Code โ short identifier, uppercase (examples:
PO,GRN,PI,SO,SI,JV,TO,PMT). Must be unique per tenant. - Series Name โ human label (e.g. "Purchase Order").
- Prefix โ printed on every document number (e.g.
PO/yieldsPO/000001). - Starting No โ usually
1. - Padding โ how many digits after the prefix (padding = 6 gives
PO/000001). - Date Order โ if checked, embeds the posting-date in the number (e.g.
PO/20260803-001). - Fiscal Year Reset โ if checked, sequence resets to Starting No at the start of every fiscal year.
- Manual Allowed โ if checked, users can overwrite the auto-generated number when creating a document.
- Default Nos โ leave on unless you want to reserve the series only for manual entries.
- Is Active โ must be on for the series to be picked up by document creation.
- Series Code โ short identifier, uppercase (examples:
- Save. The series is immediately available in the Document Number Series assignment card.
Attach a number series to a specific document
The Document Number Series card (same page, below the series list) is where you link each series to a document type. This is the mapping the app reads when a user hits "Save" on a new PO / GRN / Invoice.
- In the Document Number Series card, find the row for your document type (Purchase Order, GRN, Purchase Invoice, Sales Order, Sales Invoice, Journal Voucher, Transfer, Payment).
- Set the Unposted Series โ used while the document is still Draft (e.g.
POseries for a draft PO). - Set the Posted Series โ used once the document is posted. You may leave it the same as Unposted if you want a single number that stays with the document through its lifecycle. Split it if you want a separate posted-doc series (e.g. drafts use
DRAFT-PO, posted usePO). - Click Save assignments at the bottom of that card.
- Next time a user creates that document type, the app calls
sp_GetNextNowith the assigned series code and returns the next number (PO/000001,PO/000002, โฆ).
Store-specific overrides
Retail chains often want different number series per store (so PO/000001 from Store A never clashes with PO/000001 from Store B). Set the StoreID column when creating a series, then the document creation picks the store-specific series first, falling back to the global one if none is defined for that store.
Behavior + gotchas
- Uniqueness is per-tenant, per-series. Two tenants can both have a
POseries without collision. - Numbers are consumed atomically.
sp_GetNextNoholds a row-level lock on the series row for the transaction โ no two concurrent saves can pick the same number. - Deactivating a series stops new numbers from being drawn but doesn't touch documents already using it. Assign a new series first, then deactivate the old.
- Changing the prefix or padding only affects numbers generated after the change. Historical documents keep their original numbers.
- Missing series โ if a document type has no series assigned, the Save handler returns "Could not generate X number (NumberSeries 'X' missing or inactive)." Fix: go back to GL Setup โ Number Series and assign one.
Print Templates (invoices, receipts, KOTs)
Every printed document — Sales Invoice, POS Receipt, Purchase Order, GRN, KOT, Bank Payment Voucher — runs through a Print Template. Templates are per-tenant, per-document-type, editable HTML/CSS. You can either edit the HTML by hand OR upload a photo of your existing paper layout and let Solvexa's AI generate the template.
Design a print template by uploading a photo (recommended)
- Go to Setup → Print Templates.
- Pick the Document Type: Sales Invoice / POS Receipt / Purchase Order / GRN / KOT / Payment Voucher.
- Click the 🎨 Design from photo button.
- Upload a clear photo (or PDF/scan) of a receipt you currently use. Solvexa runs OCR (Tesseract for text extraction) then a small local LLM (qwen2.5:3b) to reconstruct the header / body / footer + CSS.
- Preview appears in ~10 seconds. Adjust: tweak logo path, add/remove columns, resize text.
- Save. All future prints of that doc type use this template.
Edit a template manually
- Setup → Print Templates → pick doc type → Edit HTML.
- Three tabs: Header (company logo, address, GSTIN, invoice-no block), Body (line-item table + subtotal/tax/total), Footer (bank details, terms, signature, QR code).
- Placeholders available:
{{CompanyName}},{{DocumentNo}},{{PostingDate}},{{Customer.Name}},{{Customer.GSTIN}},{{Lines[]}},{{SubTotal}},{{TotalTax}},{{TotalInWords}},{{QRCode}}. See "Placeholder reference" tab for the full list per doc type. - CSS is inline in the <style> block — use it for fonts, borders, print-width (58mm thermal / 80mm thermal / A4).
- Preview button renders the template with a sample document.
- Save — next print job uses the new template.
Multiple templates per doc type
Retail chains often want different receipt styles per store (English at store 10, Hindi at store 11). Create multiple templates for the same doc type; assign a template to a Store on Setup → Store → edit → Print Templates tab. The store-specific template wins; if none is set, the tenant-default template is used.
Approval Setup + Delegation
Solvexa can block a document from posting until a manager approves it. Rules are per-tenant, per-doc-type, threshold-based. Approvals are optional — if no rule is set, the document posts immediately.
Configure an approval rule
- Go to Admin → Approval Setup.
- Click + New Rule. Pick:
- Document Type: PO, GRN, PI, SO, SI, JV, Payment, Transfer — or "*" for any.
- Threshold Amount: rule fires when TotalAmount ≥ this value (leave 0 to require approval on every document of this type).
- Approver User or Approver Role: who can approve.
- Escalate After: hours until it auto-escalates to a fallback approver.
- Fallback Approver: takes over if primary doesn't act in time.
- Save. Next time a user hits Post on a matching document, the app raises an ApprovalRequest, marks the doc as PendingApproval, and emails/WhatsApps the approver.
Approve or reject as a manager
- Go to Admin → Approvals. Pending requests assigned to you show up here.
- Click a request. Preview shows the full document. Click Approve or Reject (with reason).
- On Approve: the original poster receives a notification; their next attempt to post the document goes through.
- On Reject: the document stays Draft and the poster sees your reason.
Delegation (holiday cover)
- Go to Admin → Approval Delegation.
- Click + New Delegation. Pick:
- Delegate From: the user who's going on leave.
- Delegate To: the temporary approver.
- Valid From / Valid To: date range.
- During that window, every approval routed to "Delegate From" is auto-forwarded to "Delegate To" instead — no manual intervention needed.
Dimensions & Cost Centres
Dimensions are analytical tags you attach to every posted document so your P&L can slice by Department, Project, Cost Centre, Branch, Salesperson, etc. Solvexa supports 6 dimensions per posting: 2 Global (recommended: Department + Cost Centre) and 4 Shortcut (open for your own use).
Set up Dimension values
- Go to Finance → Dimensions (or Admin → Dimension Setup).
- Pick the dimension slot (Global 1 / Global 2 / Shortcut 3 / 4 / 5 / 6).
- Give it a name (e.g. "CostCentre") and a code (e.g. "CC").
- Add values under it: e.g.
CC-KITCHEN,CC-FRONTOFHOUSE,CC-ADMIN.
Attach dimensions to a document
- Every document form (PO, GRN, PIH, SI, JV, POS Sale) has a Dimensions panel — usually collapsed under an "Advanced" toggle.
- Pick a value from each active dimension dropdown. Values default from the Customer / Vendor / Store / Item master defaults (set them on those master records so users rarely have to pick manually).
- On post, all GLEntry rows for the document inherit the dimensions — every ledger row is dimension-tagged.
Report by dimension
- Open Reports → P&L (or Trial Balance / Balance Sheet).
- Use the Filter panel: pick a Dimension slot and one or more values.
- Report re-runs restricted to GLE rows tagged with your chosen dimension — e.g. "P&L for CostCentre = KITCHEN this month".
- Reports → Cost Centre Analysis is a pre-built report that groups Revenue / Direct Cost / Overhead by Cost Centre — useful for restaurant chains that want per-outlet or per-station profitability.
Default dimensions from masters
To avoid users picking dimensions manually every time, set defaults on the master:
- Customer → Dimensions tab — every SI to that customer inherits these unless the user overrides.
- Vendor → Dimensions tab — every PIH inherits.
- Store → Dimensions tab — every POS sale inherits.
- Item → Dimensions tab — line-level dimensions inherit from the item.
The stamper on posting merges: line-level (from Item) → header-level (from Customer/Vendor/Store) → explicit user selection (if provided). Most-specific wins.