📒 Accounting
The Accounting module is your company's bookkeeping — the General Ledger (GL), the single place where every invoice, payment, expense and stock movement turns into a real accounting record. From it you read your true financial picture: assets, profit, what customers owe you, what you owe.
Open it from Accounting (/admin/tsync_accounting). Everything below is reachable from the Accounting menu in the sidebar.
The dashboard — your financial picture at a glance
The first screen is a financial dashboard, with every figure read straight from the General Ledger:
- Total assets, liabilities and equity — the shape of the business right now.
- Income and expenses — both year-to-date and month-to-date.
- Net profit — what's left after expenses.
- Accounts receivable (money customers owe you) and accounts payable (money you owe).
- Cash & bank — how much liquid money you hold.
- Recent journal entries and an income-vs-expense chart to see the trend.
- A period-close status line — the last month you closed, the next one due, and whether any are overdue.
"Post to GL" — fill an empty dashboard in one click
If you started using TSync after you already had invoices, payments or expenses, those older documents were never written into the ledger — so the dashboard looks empty or near-zero even though your business is busy.
When that happens you'll see a yellow banner at the top, something like "N documents are not yet posted to the General Ledger," with a Post to GL button (visible to admins).
Click it once. TSync posts the whole backlog using the normal accounting rules, and — importantly — never double-posts. The dashboard then fills with your real figures.
💡 You only do this once. From then on, every new invoice, payment, expense, credit note, purchase, stock receipt, production order and payroll run is posted to the ledger automatically — the Accounting module is where these documents land, you rarely post by hand.
The chart of accounts
The chart of accounts is the list of accounts (codes + names) that organise your bookkeeping. The Romanian and Moldovan standard plans are both supported. You can look at it three ways.
Accounts list
Open Chart of accounts (/admin/tsync_accounting/chart_of_accounts) for the flat list. Each row shows the account code, name, type/class and its current balance (read from the posting history). You can add, edit or delete an account, and select several rows for a bulk action (activate / deactivate / delete).
💡 No accounts yet? Import a standard plan in one step via Portability → "Apply GL codes" (or Import chart of accounts,
/admin/tsync_accounting/account_import), then come back here to review it.
Account types
Open Account types (/admin/tsync_accounting/account_types). An account type is the broad family an account belongs to — asset, liability, equity, income, expense — and it decides the account's normal side (debit or credit) and where it shows on the reports. The standard types come ready; you can add your own and delete the ones you created (the built-in system types can't be removed).
Chart of accounts — tree view
Open Chart of accounts (tree) (/admin/tsync_accounting/chart_of_accounts_tree) for the hierarchical view. TSync builds the tree from the account codes (so account 411 sits under class 4), and each group/header account shows the rolled-up balance of its children. This is the easiest way to see the structure and totals by class.
Registers — drill into one account
Open Registers (/admin/tsync_accounting/registers) for the per-account ledger. The page lists your active accounts; click View register on any one to see every debit and credit movement on that account between two dates, with a running balance. Use it to investigate or reconcile a single account.
💡 The same drill-down is available straight from the chart: each account has an account history view (
/admin/tsync_accounting/account_history) showing its posted lines and balance as of a date.
Account transfers — move money between accounts
Open Transfers (/admin/tsync_accounting/transfer) to record a move of money from one cash/bank account to another (for example, moving funds from one bank account to another). Click New transfer, pick the from and to accounts, the amount, date and an optional memo. TSync posts one balanced journal entry (debit the destination, credit the source) so your books stay in balance automatically.
Journal entries ("note contabile")
Every posting creates a visible journal entry, so nothing happens behind your back.
Open Journal entries (/admin/tsync_accounting/journal_entry) for the full list of entries (drafts and posted). You can open any entry and inspect its lines — which accounts were debited and credited, and for how much. The dashboard's Recent journal entries list links straight into them.
Create one by hand
Click New entry for a manual journal entry. Fill the header (date, description, reference) and add debit/credit lines — one account and amount per line. The debits must equal the credits before TSync lets you save. You can save it as a draft or post it straight to the ledger.
- Post turns a draft into a real ledger entry (it re-checks that the lines balance).
- Void reverses a posted entry (it books an equal-and-opposite entry and marks the original voided) — posted entries are never silently deleted.
- Delete removes a draft entry that was never posted.
Recurring journal entries
A journal entry can be marked recurring so TSync re-creates and posts it automatically on a schedule — perfect for a monthly rent accrual, a standing depreciation line, or any entry you'd otherwise retype every month. The recurring runner is an automatic background job (see Automatic background jobs below); you can also trigger it on demand with Run recurring now from the journal screen.
💡 Recurring posting is off by default — turn it on in Settings once you've set up your recurring templates.
The two GL-mapping pages — and how they differ
GL mapping is what connects your everyday documents to the right ledger accounts. TSync has two mapping pages, for two layers, and it helps to know which is which.
GL mapping — the named registry (the technical base)
Open GL mapping (/admin/tsync_accounting/gl_mapping). This is the named registry: a fixed set of roles the posting engine asks for by name — clearing, fees, FX difference, transit, accounts receivable, accounts payable, expense, and so on. Each role points to one account code, and the page tells you whether that account exists and is postable in your chart, so you can spot a gap before it blocks a posting. This is the single technical source the Finance & Treasury engine resolves against.
Operational mapping ("Mapare GL") — your documents → accounts
Open Mapare GL (/admin/tsync_accounting/mapping). This is the operational mapping: it tells TSync which ledger account each kind of document should hit — sales, purchases, stock, payroll, banking, expenses. With it in place, postings land on the right accounts automatically, so your books stay correct without manual sorting.
You don't have to fill it by hand. The Auto-fill from registry button seeds the operational mapping from the named registry above (and from the country standard), reporting how many rows it created, updated and kept (your manual choices are never overwritten). If a row couldn't be resolved (its account isn't in the chart yet), the page warns you.
Apply GL codes — start from a standard plan
If your chart is empty, the fastest start is Portability → "Apply GL codes" (MD/RO): it imports a full standard chart, fills the named registry, and seeds the operational mapping — all idempotently, in one step. Then come back to the two pages above only to adjust anything specific to your company.
Banking — import statements and post them automatically
The Accounting module can take a bank statement, import it, and turn each line into a posting — with rules that classify the lines for you.
Import a statement (CSV)
Open Bank CSV import (/admin/tsync_accounting/banking_csv_import). Pick the bank account, choose your CSV file, set the delimiter (comma by default) and whether the file has a header row to skip. TSync reads the columns (date, description, amount, reference, payee, balance), recognises common date formats automatically, treats a positive amount as money in and a negative as money out, and — importantly — skips duplicates (a line you already imported won't be added twice). The imported lines arrive as pending transactions, not yet posted.
Banking rules — auto-classify transactions
Open Banking rules (/admin/tsync_accounting/banking_rules) to teach TSync how to classify recurring bank lines. A rule matches on the direction (money in / out / either), a field (description, payee, reference…), how to compare it (contains, equals, starts with, range…) and an optional amount range. When a line matches, the rule books it to one or more GL accounts (you can split an amount by fixed value, percentage, or "the rest"). Create, edit and delete rules as your bank traffic settles into patterns.
Apply rules and review
Open Posted bank transactions (/admin/tsync_accounting/posted_bank_transactions) to see imported lines with their status (pending / posted), filterable by bank account. Use Apply rules to run your active rules over all pending lines at once — each matched line is posted to the GL (bank account on one side, the rule's accounts on the other) and marked posted with the rule that matched; lines that match nothing stay pending for you to handle. You can also apply rules to a single line.
Payables — what you owe and paying it
Bills (vendor invoices)
Open Bills (/admin/tsync_accounting/bills) for the vendor-invoice console. A bill is something you owe a supplier; add, edit or delete bills here and track how much is still unpaid.
Pay Bills — settle several at once
Open Pay Bills (/admin/tsync_accounting/pay_bills) to pay multiple bills in one batch. Select the bills, enter the amount to pay for each, choose the bank account to pay from, and save. TSync records the payment batch, updates each bill's paid amount, and posts the GL entry (debit payables, credit the bank account) in one go.
Checks / dispositions
Open Checks (/admin/tsync_accounting/checks) to record checks and payment dispositions against a bank account — useful where payments are made by check or a formal disposition document.
Customer advances ("avansuri clienți")
A customer advance is money a customer pays you before there's an invoice. Open Customer advances (/admin/tsync_accounting/customer_advances) to manage them. The list filters by customer, status and date, and shows each advance's amount, its still-open (unapplied) balance, and status (open → partial → applied, or refunded / cancelled).
- Receive an advance — click New advance, pick the customer, the amount and currency, the received date, payment method and bank account. Tick "requires VAT invoice" if the advance is subject to VAT (it then gets a VAT-invoice due date). On save, TSync books it to the GL (debit cash/bank, credit the customer-advance liability).
- Apply to invoices — once you raise the real invoice(s), open the advance and apply part or all of its open balance to one or more of the customer's invoices. The status moves to partial or applied automatically.
- Refund — pay back the whole open balance; the advance becomes refunded and the reversal is posted.
- Emit the advance VAT invoice — generate the VAT invoice for the advance ("factură de avans"), as required by the Romanian Fiscal Code, art. 282 (VAT becomes due when the advance is collected). TSync computes net + VAT from the advance amount and links the resulting invoice to the advance. It's idempotent — if a VAT invoice already exists for that advance, it reuses it.
- Cancel — cancel an advance that hasn't been posted to the GL yet.
💡 Automatic VAT-invoice reminder. A daily background job checks for advances that require a VAT invoice but still don't have one after 5 working days (the art. 282 deadline) and flags them so they don't slip. You choose how it behaves in Settings: notify (log a reminder — the list also shows an overdue badge; this is the default), auto (emit the VAT invoices automatically), or off.
Fiscal periods
Open Fiscal periods (/admin/tsync_accounting/periods). Each year has 12 monthly periods, each open or closed. When a month is finished you can close (lock) its period so no further postings change it, and reopen it later if you find a correction to make (reopening needs admin rights and is audited).
- Generate periods — create all 12 monthly periods for a given year in one click. It's safe to re-run: existing months are skipped, only missing ones are added.
- TSync gently reminds you about periods left open past their time — but this is a single, tidy, recurring notification, not a flood. By default it warns when a period has been open for more than about two months, and only once every few days.
💡 You control the rhythm. In Accounting → Settings → "Alert frequency (days)" (default 7) you set how often the reminder may reappear, or turn it off entirely.
The period-close wizard
For a proper month-end close, open the Period close wizard (/admin/tsync_accounting/period_close_select). It walks you through the close step by step:
- Select — choose the month you're closing.
- Checks (preflight) — TSync runs automatic checks: are all postings balanced, do their dates fall inside the period, does the ledger's receivable/payable balance agree with open invoices, is there cash/bank to confirm against the statement, is an FX revaluation due? Blocking problems stop you here; warnings let you continue knowingly.
- Accruals & adjustments — optionally run end-of-month entries: FX revaluation (mark foreign-currency balances at the period-end rate) and depreciation (if the Assets module is active). You can skip this step.
- Confirm — review a trial-balance snapshot as of the period end before committing.
- Finalize — confirm and (optionally) add a note. TSync locks the period, stamps who closed it and when, and saves the trial-balance snapshot for the audit trail.
If you later need to undo a close, reopen the period from here (admin only, with a reason recorded).
Partner opening balances
Open Partner opening balances (/admin/tsync_accounting/partner_openings) when you start using TSync mid-year and need to carry over what each customer owes you (or what you owe each supplier). Enter the account (receivable/payable), the partner, the opening amount and the date. These opening balances let your AR/AP figures and aging reports be correct from day one. You can edit or delete entries here.
Income-statement modifications (P&L adjustments)
Open P&L modifications (/admin/tsync_accounting/income_statement_mods) to add manual adjustments that apply when the Profit & Loss report is computed — for presentation tweaks or reclassifications that shouldn't be a posted journal entry. Each adjustment has a description, the account code(s) it touches, an amount, and an active/inactive toggle so you can turn it on or off without deleting it.
Budgets
Open Budgets (/admin/tsync_accounting/budgets) to plan ahead. A budget belongs to a fiscal year and holds planned amounts per account, per month.
The budget list shows, for each budget:
| Column | Meaning |
|---|---|
| Total budgeted | the sum you've planned |
| Lines | how many account rows it has |
| vs Actual | a link to compare plan against reality |
On the budget form, use Add line to add the accounts you want to plan. As you type, each row shows its live total and a grand total updates automatically. The account picker is searchable — start typing and it shows code — name. On the wide 12-month grid the account column and header stay visible while you scroll sideways.
From the budget list you can also:
- Export CSV — download a budget (account, every month, total) to open in Excel.
- Import — load planned amounts from a spreadsheet.
- Duplicate — copy a budget into another year (e.g. start next year from this year's plan), then edit.
💡 A budget is a planning tool — creating one doesn't touch the ledger. You compare it to reality in the budget reports below.
Reports — and exporting them
Open Reports (/admin/tsync_accounting/reports) for all the financial statements. Every report has Export CSV and Export PDF buttons in its header, and the export keeps whatever date range or filter you set, so what you download matches what you see (CSV files open cleanly in Excel, diacritics included).
Core statements
- Trial balance — debit/credit totals per account.
- Balance sheet — assets, liabilities and equity at a chosen date.
- Profit & loss — revenue, expenses and net profit for a period (it applies your P&L modifications).
- General journal — every posting in date order.
- General ledger — all movements on a chosen account between two dates.
If one report shows 0.00 and another shows the money
This happens on installs where multi-company was switched on after you had already been working for a while. Postings made while multi-company was off carry company 0; when you enable the module and create your real company, it gets a different number. From that point on:
- company-scoped reports (the accounting sub-reports, the journal register) ask for the active company, which has no postings — and answer, correctly, 0.00;
- unscoped reports (the reports console) find the company-0 rows — and answer, also correctly, with the money.
No report is wrong and no money is missing. They are two correct answers to what you read as a single question.
So that you no longer have to discover this by comparing two screens, the Health page now raises the finding "ledger anchored to a company nobody is looking at": it tells you how many rows exist, which company numbers actually hold them, and that both screens are right.
TSync re-anchors nothing on its own — moving ledger rows from one company to another is irreversible and is a decision about whose books these are, not a repair a validator may perform. You have three options, with different consequences for every historical document: migrate the company-0 postings to the real company, scope the reports console by company as well, or declare company 0 itself to be your real company. The choice is yours — ask for help first if it is not obvious.
VAT / tax
- Tax detail — every posting to a VAT account.
- Tax summary — totals per VAT account (collected vs paid).
- Tax liability — the computed amount you owe (collected minus paid).
Aging
- AR aging — how long customer balances have been outstanding (per partner or by age bucket).
- AP aging — the same for what you owe suppliers.
Reconciliation
- Reconciliation summary — your bank-reconciliation batches with matched/unmatched counts.
- Reconciliation detail — the matched statement lines and postings for one reconciliation.
Budget
- Budget overview — a budget's monthly plan against the actual P&L.
- Budget vs actual — plan and actual side by side for a fiscal year.
- Budget performance — the variance (over/under budget) per account.
Audit log
Open Audit log (/admin/tsync_accounting/audit_log) for a read-only, per-transaction record of who changed what, and when. Filter by date range, staff member, event type, related entity or free text. Open any row for the full detail, and use Export CSV to download the filtered list (with the full details) for compliance or review. The audit log is a history — it isn't editable.
Diagnostics
Open Diagnostics (/admin/tsync_accounting/diagnostics, also a button on the dashboard) for a one-page health check of your finance setup — chart, GL posting, treasury and multi-company isolation — grouped into blockers / warnings / notes. It's read-only: it tells you what to fix, it never changes anything.
▶️ The "Post to Accounting" button
The dashboard tells you how many invoices, payments and expenses are not yet in the ledger, and the button posts them in one go.
It now tells you which of three things happened, because they used to share one sentence:
- N document(s) posted — as before;
- N could NOT be posted, with the reason — for example "account 5121 is not in this chart". The fix is named right there: Mapare GL, or Portability → Apply GL codes for your country, then press again;
- nothing was posted, and N are still waiting — the run did not even reach them.
If some went in and some did not, you see both halves. Previously a run in which every posting was refused reported exactly the same "0 posted" as a run with nothing left to do.
🔇 Postings that were refused
If a document could not be recorded in the books — the account it needs is not in your chart, the period is closed, the two sides don't balance — it is listed here, with the reason, for the last 30 days.
This matters more than it sounds. A refused posting used to be completely silent: the invoice still went to Paid, the payment was still saved, and nothing at all reached the ledger. You could find out weeks later, when a balance didn't add up.
What you'll see: "3 GL posting(s) were REFUSED in the last 30 days — those documents are not in the books, while their own screens say they are settled. Most common: account_not_found:5121 (2), period_locked (1)."
The reason names the account, so the fix is usually one step: map the role on Mapare GL, or run Portability → Apply GL codes for your country, then re-post the documents.
💳 Payment modes nobody has classified
A payment mode has to say what kind of money it is — cash, bank transfer, card, and so on. That is what decides which account a payment posts to.
A mode with no answer posts to your default bank account, whatever it really is. So an unclassified "Cash" mode takes money over the counter straight into the bank: the cash balance never moves, and nothing tells you why. Diagnostics now lists those modes by name.
Fix it in Setup → Payment modes: open each one and answer "What kind of money is this?". TSync deliberately does not guess from the name — a mode called "Cash" is probably cash, and probably is not good enough for money.
💱 Foreign-currency lines posted at rate 1
A line in another currency recorded at rate exactly 1.00 means no rate was published for that date, so the engine assumed par. Diagnostics counts them, names the currencies and the total, and says what reads that figure downstream.
It is a warning, not a blocker — these are historical entries, and they are deliberately not corrected automatically: nobody can know what the rate should have been on a past date. Publish the missing rate and re-post the document if a line matters.
If the count is large, check the cause first: an accounting base currency that disagrees with your exchange -rate base makes ordinary local postings look foreign. See Exchange rates.
Automatic background jobs
A few things run quietly on the daily schedule so you don't have to remember them:
- Currency-rate fetch — downloads the latest exchange rates (BNR for RON, BNM for MDL). On/off in Settings.
- FX revaluation — once a day, revalues your foreign-currency balances at today's rate and books the gain/loss.
- Advances VAT check — checks for customer advances overdue for their VAT invoice (5 working days, art. 282) and either reminds you or auto-emits the invoices (your choice in Settings; throttled to about once a day).
- Period-close reminder — the recurring, tidy notification about periods left open past their time. Its frequency is the "Alert frequency (days)" setting (default 7), and it can be turned off.
- Recurring journal entries — posts your recurring journal templates on schedule (off by default; enable in Settings).
Settings
In Settings (/admin/tsync_accounting/settings) you choose:
- the chart country (which standard plan applies),
- the fiscal-year start, numbering and accounting method,
- the period-reminder frequency (the "Alert frequency (days)" above),
- the advance VAT-invoice automation (notify / auto / off), and
- whether recurring journal entries run automatically.
💡 GL accounts live in one place. Settings no longer holds a separate copy of the default accounts — you set them on the GL mapping page (a single source of truth). Settings shows a button that takes you straight there.
In short
- The General Ledger behind your whole company — assets, profit, receivables, payables — read by a self-filling dashboard (year-to-date / month-to-date).
- Post to GL brings existing documents into the books once, then new documents post automatically.
- A chart of accounts (Romanian & Moldovan plans) with account types, a tree view, per-account registers/history, and transfers between accounts.
- Visible journal entries you can open and inspect, including recurring ones posted on a schedule.
- Two GL-mapping pages: the named registry (the technical base) and the operational Mapare GL (your documents → accounts), seeded in one step by Apply GL codes.
- Banking: import a statement (CSV), let rules auto-classify it, then apply rules to post pending lines.
- Payables: bills, Pay Bills (several at once) and checks.
- Customer advances: receive, apply to invoices, refund, emit the VAT invoice (RO art. 282) or cancel — with an automatic VAT-invoice reminder.
- Fiscal periods you can close/lock, generate for a year, and close properly through a step-by-step wizard, with partner opening balances and P&L modifications alongside.
- Budgets per fiscal year, with live totals, vs Actual, import/export and duplicate into next year.
- A full set of reports (trial balance, balance sheet, P&L, journal, ledger, VAT, aging, reconciliation, budget) — each exportable to CSV and PDF.
- An audit log of every change, a Diagnostics health-check, and quiet automatic jobs (rates, FX revaluation, advance VAT, period reminders, recurring entries).