Platform

One engine. Six areas. No interfaces to fall out of step.

Everything below writes through the same posting code path, against the same chart of accounts, inside the same transaction. That is not an architecture diagram — it is the reason the stock report and the ledger cannot disagree.

Accounting

A real double-entry ledger

Not invoices with a report bolted on. Every movement of value in this system is a balanced voucher against a chart of accounts, which is why the trial balance is derived rather than stored — there is no second copy of the truth to drift.

Vouchers, not documents

Sales, purchase, receipt, payment, contra, journal, credit and debit note, each posting through one code path with one set of rules. A voucher that does not balance is rejected before it reaches the database — and rejected again by the database, because the constraint is not something an application bug can talk its way past.

Multi-company, properly separated

Each company keeps its own chart of accounts, numbering series, financial years and opening balances. Separation is enforced by row-level security in PostgreSQL rather than by a WHERE clause somebody has to remember, so a missing filter is a query that returns nothing instead of a query that returns another company’s books.

Cost centres, projects and budgets

Allocate any line to a dimension and see the same figure by department, project or branch. Budgets are set per dimension per financial year, and variance is computed against the same postings the statements use — never against a separately maintained plan.

Period close that means something

Closing a period locks it. Posting into a closed period is refused, not warned about; correcting one is an explicit reopen with a reason, recorded in the audit trail. A close that a determined user can post through is not a close.

GST

GST working papers you can defend

GST is decided at the moment a voucher is posted, from the place of supply and the parties involved — not patched onto a printed invoice afterwards. That is what makes the return data reconcile to the ledger rather than approximate it.

Place of supply drives the split

CGST and SGST or IGST is derived from the supplier state, the place of supply and the registration type, evaluated once and stored on the line. Reverse charge, exports and SEZ each take their own path, and each is covered by tests that assert the computed heads and the return figures rather than the printed label. The composition scheme is not one of those paths: you can record the registration type and print a Bill of Supply that suppresses the tax columns and carries the declaration, but choosing it changes nothing the tax engine does, and the dealer’s own turnover tax is not computed.

Working papers, per return

GSTR-1 and GSTR-3B figures assembled from the postings, broken down so every total can be traced back to the vouchers that produced it. You can hand the working paper to an accountant and they can check it — which is the whole point.

Reconciliation against 2B

Import the portal’s 2B extract and match it against recorded purchases: matched, matched with a difference, missing in books, missing at the portal. The differences are what matter, so they are what the screen leads with.

E-invoicing and e-way bill, honestly

The integration is written against a provider interface with a mock implementation. It produces SANDBOX identifiers, the screen says so in as many words, and nothing is transmitted to any government system. When a real provider is connected it will be behind explicit consent, a confirmation screen and an idempotency key — none of which exist to be bypassed.

What it does not do

  • Nothing is filed with the GST portal. There is no filing credential anywhere in this system, and no code path that would use one.
  • Identifiers produced by the e-invoicing screen are marked SANDBOX and must not be issued to customers.
  • Rates and rules are configurable defaults, not tax advice. Confirm your position with your accountant.

Banking

Reconciliation you can explain line by line

Most reconciliation tools tell you a number agrees. This one tells you why, and what is left over. Every statement line is either matched to a posting, matched by a rule you wrote, or sitting in the unmatched list where you can see it.

Statements in, from several formats

CSV layouts from the common Indian banks, plus a generic mapper for anything else. Import is idempotent on a content hash, so the same file loaded twice does not produce a second set of transactions — the mistake everyone makes on a Monday morning.

Rules you write, applied consistently

Match on narration, amount, direction or counterparty and post to a chosen ledger with a chosen cost centre. Rules are evaluated in priority order, and every automatic match records which rule produced it so an unexpected posting can be traced to the rule that caused it rather than guessed at.

Reconciliation that balances

Opening balance, matched movement, unmatched in books, unmatched at the bank, closing balance — arranged so the arithmetic is visible. A reconciliation screen that shows only the difference is asking you to trust it.

Bank accounts as first-class masters

Each account carries its ledger, its statement format, its last imported range and its reconciliation status, so the state of the banking work is a fact on a screen rather than something you reconstruct.

What it does not do

  • There is no bank feed. Nothing here connects to a bank’s systems and no bank credential is ever stored — statements are files you export and import.

Inventory

Stock that agrees with the ledger

Stock and books diverge when they are two systems politely kept in step. Here a stock movement *is* a posting: the valuation layer and the ledger entry are written in the same transaction, so they cannot disagree.

Valuation that survives a reversal

FIFO or weighted average per item, held as explicit valuation layers. Reversing a movement unwinds the layers it created — which is exactly where systems that store a single running average quietly go wrong.

Batches and expiry

Track batch numbers and expiry dates through receipt, issue and transfer, with a report on what expires when. Under weighted average there is one pooled layer, so expiry reads from the movement history rather than the layers — a detail that matters and is easy to get wrong.

Reorder and slow-moving

Reorder level and lead time per item, against real consumption. Slow and non-moving stock is derived from the last movement date, so the report tells you what is genuinely sitting still.

Manufacturing and job work

Bills of material with component consumption, work orders that value the issue at the current valuation before posting, and job work sent out and received back. The output is valued from what actually went into it.

Payroll

Payroll that posts, and keeps quiet about it

Payroll is the part of an accounting system where a leak is a person’s salary. Every number here posts to the ledger like any other voucher, and none of it reaches a log line.

Structures and statutory deductions

Earnings and deduction heads per employee, with PF, ESI and professional tax computed from the structure and the applicable ceilings. Employer contributions post as cost, not as a note.

Monthly TDS on salary

Estimated annual tax spread across the remaining months, recomputed as declarations and actuals change, under both the old and the new regime.

Full and final, loans and advances

Settlement on exit with leave encashment, notice recovery and outstanding loan balances brought into the same run rather than handled on a spreadsheet afterwards.

Bank advice

A payment file for the bank, generated from the run, with the payroll journal posted in the same operation so the advice and the ledger cannot describe different amounts.

What it does not do

  • No statutory return is filed for you. The system prepares figures; submission stays with you and your consultant.

Intelligence

The part that tells you something

The name of this product is a claim, so here is what backs it: a ledger that is continuously checked rather than periodically trusted, and reports that are computed from postings every time they are asked for.

An integrity engine, always running

Twenty-one rules over the whole ledger: unbalanced vouchers, orphaned allocations, negative stock, control accounts that disagree with their subsidiary, periods that should be closed, gaps in a numbering series. Each returns the rows that failed, not a red light.

A tamper-evident audit trail

Every recorded event is hashed with the hash of the event before it. Change one row in the database and every subsequent hash stops matching — and the Operations screen says so. Verified over 12,050 events in the load test.

Ageing and collections

Receivables aged into bands from the bill dates, then grouped by customer into a collections view with a stage worked out from how overdue the oldest bill is. The stage is derived on every load, so it cannot be stale.

Statements, computed not cached

Trial balance, profit and loss, balance sheet, cash flow and day book, all derived from postings. Forty-one milliseconds for a trial balance over a year of 100,000 vouchers on PostgreSQL — fast enough that there was never a reason to store a second copy.

Underneath all of it

One posting path, one set of rules

A sales invoice, a payroll run, a stock transfer and a landed-cost apportionment all end up in the same function, with the same balance check and the same audit event.

Isolation the database enforces

Sixty-seven row-level security policies with FORCE, plus a restricted role that cannot bypass them. The application refuses to serve production traffic on a connection where those policies would be inert — because that failure is invisible from every screen.

Built for more than one company

Companies, financial years, numbering series and consolidation with intercompany elimination. Group reporting is not a separate product here.

Nothing stored twice

Every total is derived from postings. There is no cached balance to go stale, no nightly rebuild, and no support ticket that begins “the report disagrees with the ledger”.
Integrity rules
25Run over the whole ledger
Capabilities
67Across 8 roles
Automated tests
1,594Green before every release
Isolation policies
91Enforced by the database

See it against real books.

The demo company has a year of transactions in it — post a voucher, reconcile a statement, run the integrity checks and watch them come back with rows.

Platform · Falcon