Financials (Accounting)
Part of the IP4CMS portal. β All module guides
What it's for β Financials is the accounting engine of IP4CMS. It is where you keep a financial account for every member, customer, supplier or location, raise invoices and quotes against them, capture receipts and refunds, and allocate payments to the invoices they settle. On top of that core ledger it adds recurring (automated) billing, account statements, debit-order collections through a payment gateway, hosted payment links, tax types and document numbering. Everything a member is charged or pays flows through this module and feeds their balance, ageing and statements β including what they see in the member portal.
Where to find it β In the main left-hand menu under Financials. The section opens at Financials β Transactions (/app/financials/transactions). Other areas live at /app/financials/accounts, /app/financials/statement-runs, /app/financials/billing-executions, /app/financials/usage-billing, /app/financials/disbursements, /app/financials/payment-links and /app/financials/collections (Authorizations and Settlements). Tax types and numbering are configured under Settings.
Before you start
- Your tenant licence must include the
financialsmodule for the menu to appear. Sub-areas are gated separately by sub-module: - Day-to-day invoicing/receipting needs
financials:transactions. - Customer/supplier/member accounts need
financials:accounts. - Recurring billing runs need
financials:automated_billingβ if this is not licensed the automated billing executions simply do not run. - Debit-order/mandate collections, settlements and payment links need
financials:collections. - Payment gateways and payment channels are configured under
financials:payment_gatewaysandfinancials:payment_channels. - Disbursements need
financials:disbursements. - Member/customer/location accounts also require the matching entity module to exist (e.g.
members,customers,suppliers,locations). - Get the groundwork in place first: at least one tax type (so VAT is calculated), the currencies you trade in, document numbering configured per transaction type, and β for recurring work β billing cycles, statement runs and a configured payment channel.
- Typical permissions:
financials:transactions:read/:create/:update/:approve/:void/:allocatefor the ledger;financials:accounts:read/:create/:updatefor accounts;financials:automated_billing:execute/:retryfor billing runs;financials:collections:*for collections, settlements and payment links;financials:transactions:manage_settingsfor tax types and numbering.admin:full:accesscovers everything.
Money is in cents. Throughout Financials, amounts are stored as whole cents (so R100.50 is held as10050). The portal always shows and accepts amounts in the normal major-unit form (e.g.100.50) and converts for you β but it explains why a balance must always reconcile exactly.
Key tasks
Manage financial accounts and the ledger
A financial account is the running ledger for one entity. Every account is tied to exactly one thing β a member, customer, supplier, location or organization (the system calls this its entity type). The account carries a balance, an ageing breakdown of what's overdue, and all of that entity's transactions.
- Go to Financials β Accounts (
/app/financials/accounts). Needsfinancials:accounts:read. - Search by account code or name, and filter by Entity Type (Member, Customer, Supplier, Location, Organization) and Status (Active, Suspended, Closed).
- The list shows Account Code, Account Holder, Type, Balance (shown red when the holder owes you, green when they're in credit), Currency, Status and Created. Use Activate on a suspended account to bring it back.
- Click Create Account to open a new account (needs
financials:accounts:create):
- Entity Type (required) β Member, Customer, Supplier, Location or Organization.
- Entity ID (required) β the ID of the underlying record the account belongs to.
- Account Code (optional, β€ 50 chars) β your own reference, e.g.
ACC-001. - Account Name (optional, β€ 200 chars) β a friendly label.
- Currency (required) β defaults to your tenant currency.
- Status β Active or Closed.
- Click an account to open its detail, which has three tabs:
- Transactions β every transaction on the account.
- Billing β the ageing summary (Current / 30 / 60 / 90 / 120+ days), plus this month's recurring billing items and usage billing items.
- Statements β generate and download statements (see Statements).
The detail header shows the current balance, entity type, currency, code, name and dates. Use View Entity to jump to the underlying member/customer/etc., or Update Status to set Active or Closed.
- Balance is always recomputed from the entity's approved transactions and their allocations β drafts, quotes and voided items never count. Invoices (debits) push the balance towards "owes you"; receipts (credits) bring it back down.
- Ageing buckets split the outstanding balance by how overdue it is, measured from each item's due date (or its creation date if none): Current, 30, 60, 90 and 120+ days.
Raise an invoice (or quote)
Invoices are how you charge an account; quotes are non-binding proposals that never touch the balance until converted.
- Go to Financials β Transactions and click New (or New Transaction). Needs
financials:transactions:create. - Pick the Account to bill using the account lookup (it shows the entity type β Member, Customer, etc.).
- Set Transaction type to Invoice (or Quote). The form switches to line-item entry and shows VAT/discount fields automatically.
- Fill the header: Currency, Reference number (your own free-text reference), Document number (usually left blank β it's assigned automatically on approval), Description, Notes and Due date.
- Add line items. For each line set:
- Description (required), Quantity (required), Unit price.
- Tax type β defaults to your default tax type; the tax rate fills in from it.
- Price inclusive β tick if the unit price already includes tax (otherwise tax is added on top).
- Optional per-line discount (Fixed amount or Percentage), notes, and a linked product (which auto-fills price, description and tax).
- Optionally apply a transaction-level discount and review the running Subtotal, Discount, VAT/Tax and Total.
- Save. The transaction is created as a Draft.
- To make it count, open it and click Approve (see Approve and post a transaction).
- Invoice = a debit (the account owes you). Quote = a debit-style document that never posts; from an approved quote's detail you can click Convert to Invoice, which creates a fresh invoice and leaves the quote untouched.
- Reference number is yours to set; document number is the system-generated sequence number assigned on approval.
- From a support ticket: you can also start any transaction from a Support ticket's Create transaction button. It opens this same form with the type, the ticket's linked account and a reference (the ticket number) pre-filled, and links the saved document back to the ticket. See the Support guide.
Capture a receipt or refund
- Financials β Transactions β New, choose the Account, and set Transaction type to Receipt (money received) or Refund (money paid back).
- Receipts and refunds use a single total amount rather than line items, and have no VAT field.
- While capturing, the allocations panel lists the account's outstanding invoices so you can apply the payment immediately (see Allocate a payment to invoices). You can also leave it unallocated and match it later.
- Save (creates a Draft), then Approve to post it.
- A Receipt and a Refund are both credits. A receipt reduces what the account owes; until allocated, the credit shows as an unallocated amount.
Allocate a payment to invoices
Allocation is how a receipt, refund or credit note is matched against the specific invoices it settles.
- Open an approved receipt / refund / credit note and click Create Allocation (or use the allocations panel while capturing). Needs
financials:transactions:allocate. - The panel lists the account's outstanding invoices with their Total and Amount Due.
- Tick the invoices to settle. Each ticked line pre-fills the amount to allocate (the smaller of the invoice's amount due and the credit still available); adjust if needed β you can't allocate more than an invoice's amount due.
- Watch Total Allocated vs Remaining; you'll be warned if you over-allocate.
- Save the allocations.
- Each invoice tracks an Amount Due (its total minus everything allocated to it); each credit tracks an Unallocated amount (what's left to apply). Allocations drive both ageing and the account balance.
Approve and post a transaction
New transactions start as drafts and have no effect until approved. The status path is Draft β (Pending) β Approved, or Void.
- Open the transaction (or select several in the list).
- Click Approve and confirm. Needs
financials:transactions:approve. To approve many at once, select rows in the list and use bulk Approve. - On approval the system: assigns the document number from your numbering config, stamps approved at / by, posts the amount to the account's ledger (invoices increase what's owed, receipts reduce it), sets the starting amount due / unallocated figures, validates any allocations, and recalculates the balance and ageing.
- To reverse an approved transaction, click Void and confirm (needs
financials:transactions:void). The balance and ageing are recomputed without it; the record is retained for audit.
- Status badges: Draft (grey), Pending (yellow), Approved (green), Rejected (red), Void (grey). Only drafts can be edited; only approved items can be voided. Quotes never post even when approved.
- From a transaction's detail you can also Send it (email/SMS/WhatsApp/push using a message template, with a preview), Print / Download PDF, or attach a Payment Link (debit transactions only).
Set up billing cycles and run recurring billing
Automated billing turns recurring charges on accounts into invoices on a schedule. (Needs the financials:automated_billing sub-module.)
- A billing cycle defines the cadence β its interval (monthly, quarterly, semi-annual, annual, weekly, daily), every N of that interval, the day it runs (first/last of month or a specific day), and whether it bills in advance or arrears. Accounts have recurring account items attached to a cycle; those become the invoice lines.
- Go to Financials β Billing Executions (
/app/financials/billing-executions) to see every run. The list shows Date, Cycle, Status, Items, Accounts (processed/total), Invoices generated and Duration. It auto-refreshes while a run is Processing. - To run a cycle now, click Execute Billing (needs
financials:automated_billing:execute). In the Execute Billing Cycle dialog:
- Pick the Billing Cycle and an Execution Date (defaults to today).
- A preview loads: accounts to bill, recurring vs one-time items, and estimated totals by currency.
- Tick the confirmation ("I understand this will generate N invoices") and click Execute.
- Open any run to see its summary stats, timeline (started/completed/duration/jobs) and a per-account items table with each account's status, amount and a View Invoice link. If a run is Partial or Failed, use Retry Failed Items (needs
financials:automated_billing:retry).
- Execution statuses: Pending, Processing, Completed, Partial (some accounts failed) and Failed. Per-account item statuses include Completed, Failed and Skipped (nothing to bill).
- Usage billing (
/app/financials/usage-billing) lists metered items (by metric, e.g. active users, storage, API calls) attached to accounts and the cycle that bills them.
Generate statements and statement runs
A statement is a per-account summary of activity and closing balance for a period. You can generate one on demand, or schedule them with a statement run.
- On demand: open an account's Statements tab, pick a From and To date, optionally tick Override existing (to regenerate a period you already produced), and click Generate statement. Each row shows the Period, Closing balance, Source (manual/automatic) and a Download PDF button.
- Scheduled: go to Financials β Statement Runs (
/app/financials/statement-runs) and create a run:
- Name, Interval (monthly, quarterly, semi-annual, annual, weekly, daily) and Every N.
- Day (first/last of month, or a specific day) and Period covered (
last_cycle,month_to_date, orsince_last_statement). - Tenant default β tick to auto-attach this run to every new account.
- The runs list shows the schedule, next run and status, with Set default, Disable/Enable, Delete, and a Runs drill-down showing each execution (scheduled date, status, accounts total, statements generated, failed).
- Attach or detach a run on a specific account from the account's statement-runs panel.
- If automated statement/billing infrastructure isn't licensed, scheduled runs simply don't execute β you can still generate statements manually if
financialsis on.
Set up payment channels and run collections
Collections handle recurring debit orders / mandates through a payment gateway, plus reconciling the money the gateway pays out. (Needs financials:collections; the gateway itself is configured as a payment channel under financials:payment_channels.)
- Create an authorization (mandate). Go to Financials β Collections β Authorizations (
/app/financials/collections/authorizations) and click Create New Authorization. Needsfinancials:collections:authorizations:create. Set:
- Payment Channel (required) β the gateway to use (only licensed channels appear).
- Authorization Type β DebiCheck Mandate, Card Authorization or Gateway Subscription.
- Contract Reference (β€ 50) and Client Reference (β€ 100) β your tracking IDs.
- For DebiCheck: Frequency (Weekly/Bi-weekly/Monthly/Quarterly/Annual), Collection Day, Instalment Amount, Total Instalments, and optional Max Collection Amount, Start / First Collection Date and First Collection Amount.
- Optional caps (Max amount per transaction / total), Requires OTP / Signature, Mobile Number, Notes, and a linked Account (so successful collections create transactions automatically).
- Add a payment method β pick an existing saved bank account/card, or capture a new one (bank: holder name, account number, account type, bank, branch, ID details, nickname; or card details).
- Submit and manage it. New authorizations start as Draft. From the list or detail use Sync to Gateway to submit a draft, then manage the live mandate with the dynamic action panel β typically Suspend, Resume, Amend, Cancel and instalment actions. Statuses run Draft β Pending Auth β Active, with Suspended, Cancelled, Expired and Completed.
- Reconcile settlements. Go to Financials β Collections β Settlements (
/app/financials/collections/settlements). A settlement report is a batch of payouts the gateway has made to you. Use Auto-Fetch Settlement Reports or the Fetch Settlement Report dialog (choose channel + date) to pull a report, then Auto-Match Settlements to reconcile automatically. Open a report to see its transactions and their reconciliation status (Pending, Matched, Unmatched, Disputed), and use Manual Reconcile (link to a Payment Link / Authorization / Invoice) or Dispute on any line.
- The collections engine is provider-agnostic β the same actions (create, amend, cancel, sync, instalments, settlements) work identically across every supported gateway. You never need to know which provider is behind a channel.
Create a payment link
A payment link is a shareable URL (with a QR code) a member or customer clicks to pay. (Needs financials:collections:payment_links:create.)
- Go to Financials β Payment Links (
/app/financials/payment-links), or open a debit transaction's detail and use its Payment Link action to bill that specific document. - Choose Automatic (Gateway) to have the gateway host the page, or Manual URL to supply your own link.
- Fill: Payment Channel (gateways that support immediate payment), Amount, Currency, Description (β€ 500), Reference (β€ 100, or click Generate), optional Account to link, optional Payer email/name/phone, Expires At (defaults to 30 days), optional Success/Cancel URLs, and Allow Multiple Payments with a Max Payments cap.
- Save to generate the link. From the list you can Copy Link, Download QR Code, Share via Email, Send via SMS/WhatsApp, or Cancel an active link. Statuses are Active, Completed, Expired and Cancelled, with a Times Used counter.
Configure tax types
Tax types define the VAT/GST rates the line-item calculations use. (Configured under Settings; needs financials:transactions:manage_settings.)
- Create a tax type with a Code (e.g.
VAT,GST), Name, Percentage (e.g.15.00for 15%), and Currency. - Mark one as Default β it's auto-selected on new transaction lines. Toggle Active to retire a rate without deleting it.
- Whether a price is tax-inclusive or exclusive is decided per line (the Price inclusive toggle), not on the tax type itself. System tax types can't be deleted.
Configure document numbering
Numbering controls the auto-generated document numbers assigned when a transaction is approved. (Needs financials:transactions:manage_settings.)
- Configure a sequence per transaction type (receipt, invoice, credit note, quote, etc.) within the
financialsmodule. - Set the prefix (e.g.
INV-), optional date component (e.g.YYYYMM), leading zeros (padding, e.g. 4 β0001), starting number, and reset frequency (never / yearly / monthly / daily).
- Numbering is per-period: with a reset frequency of monthly, the counter restarts each month (e.g.
INV-202410-0001in October, thenINV-202411-0001in November). Each transaction type has its own independent sequence.
How the data connects
- What you enter β where it lives. Every invoice, receipt, refund, credit note, journal or quote you capture is a transaction against a financial account. Transactions hold one or more lines (with their tax). All money is stored in cents.
- Drafts must be approved to post. A transaction does nothing until you approve it. Approval assigns its document number, posts it to the account ledger, and seeds its amount due (for invoices) or unallocated amount (for credits). Voiding reverses the posting.
- Allocations tie credits to debits. When you allocate a receipt/refund/credit note to invoices, each invoice's amount due and each credit's unallocated amount drop accordingly.
- What it feeds. Approved transactions and their allocations recompute the account balance and the ageing buckets (Current / 30 / 60 / 90 / 120+). Those, in turn, drive statements (manual or via statement runs), the billing summaries on the account, and the figures a member sees in the member portal β their own balance, invoices, receipts and statements. Automated billing creates new invoices from recurring/usage account items; collections pull money via mandates and reconcile gateway settlements back against transactions; payment links let a payer settle an invoice and (when linked to an account) create the matching receipt.
Permissions & access
- Licence modules gate whole areas.
financialsturns the module on; sub-modules add capabilities:financials:transactions(invoicing/receipting),financials:accounts(accounts),financials:automated_billing(recurring billing runs),financials:collections(mandates, settlements, payment links),financials:payment_gateways/financials:payment_channels(gateway setup),financials:disbursements. Accounts for an entity type also need that entity's module (members,customers,suppliers,locations). - Permissions within a licensed area decide who can do what. Common ones:
financials:transactions:read/read_own/create/update/approve/void/allocate;financials:accounts:read/create/update;financials:automated_billing:execute/retry;financials:collections:authorizations:*,:settlements:*,:payment_links:*; andfinancials:transactions:manage_settingsfor tax types and numbering.admin:full:accessgrants all of it. - Member vs admin visibility. Admins with read permission see all accounts and transactions. Members (and other portal users) are limited to their own account β the
read_ownstyle of access β so they see only their balance, their invoices/receipts and their statements, never anyone else's ledger.
Tips & gotchas
- Everything is in cents. The portal shows and accepts normal amounts (e.g.
100.50) but stores them as cents β which is why balances always reconcile to the last cent and why ageing + unallocated credit must sum exactly to the balance. - Drafts don't count. Nothing affects a balance, ageing or a statement until it's approved. If a figure looks wrong, check whether a transaction is still a draft.
- Quotes never post. Even an approved quote leaves the balance untouched. Use Convert to Invoice to actually charge it β the original quote stays as-is.
- Void instead of delete. Reversing an approved transaction is a Void; allocations are kept for audit rather than silently unwound.
- Unlicensed runs are skipped, not errored. If
financials:automated_billing(or the statement-run infrastructure) isn't on, those scheduled jobs simply don't run β there's no failure to chase; you just won't see new automated invoices/statements. - Numbering resets per period. With monthly (or yearly/daily) reset, the sequence restarts each period, so the same trailing number reappears across months β that's expected, the period prefix keeps them unique. Each transaction type numbers independently.
- Collections is gateway-neutral. Don't look for provider-specific buttons β every mandate action (sync, amend, cancel, instalments, fetch settlements) is the same regardless of which gateway sits behind the chosen payment channel.
- Tax inclusivity is per line. The Price inclusive toggle on each line β not the tax type β decides whether tax is extracted from the price or added on top. Mixing inclusive and exclusive lines on one document is allowed, so double-check it's what you intend.
- Send and reminders are tracked. A transaction records whether it was ever sent successfully and the last attempt, so the list's send/reminder columns tell you what still needs to go out.