Accounting and invoicing software testing
FintechAssuranceLabs tests accounting and invoicing software, products like QuickBooks, Xero, and FreshBooks. Test scope covers double-entry ledger math, bank feeds and reconciliation, invoice payments, VAT and sales tax computation, e-invoicing and 1099 outputs, and multi-currency revaluation. FintechAssuranceLabs engineers recompute ledger balances and tax amounts independently and hand over evidence that buyers and their auditors can review.
What breaks in ledgers, bank feeds, and invoice payments
Accounting software earns a subscription for the ledger, bank feeds, and tax outputs, plus fees on invoices paid through it. Each defect below repeats in every subscriber's books until an accountant finds it at close or in a tax filing.
- Invoice marked paid twice after a webhook retry. The payment processor retries a payment-succeeded webhook after a timeout, and the handler records a second payment against the same invoice. The invoice shows an overpayment, the clearing account holds money that never arrived, and the platform charges its invoice payment fee on both records. Bank reconciliation stops matching, and the platform refunds the duplicate fee. The payment idempotency guide shows the replay tests.
- Bank feed that goes silent at the 180-day renewal (EU). Article 10a of the SCA RTS, inserted by Delegated Regulation (EU) 2022/2360 from 25 July 2023, lets a bank skip SCA when an account information service reads balances or the last 90 days of transactions, except at first access and after more than 180 days since the last access with SCA. A connector that reads the resulting consent error as "no new transactions" imports nothing. Paid invoices stay open, reminders go to customers who already paid, and the subscriber pays for a feed that stopped. See PSD2 SCA.
- Revaluation counted twice at settlement. A EUR ledger holds a 10,000 USD receivable booked at 0.9000 EUR per USD, which is 9,000.00 EUR. Month-end revaluation at a closing rate of 0.9200 posts an unrealised gain of 200.00 EUR and is not reversed. The customer pays at 0.9300, and the payment posts a realised gain of 300.00 EUR against the original rate. Profit shows 500.00 EUR of exchange gain for a 300.00 EUR movement. IAS 21 paragraph 28 measures a settlement difference against the rate last used to translate the item, and under paragraph 23(b) prepayments and inventories at historical cost keep the transaction-date rate (IAS 21 in Regulation (EU) 2023/1803).
- VAT left in the invoice currency (EU). A subscriber in the euro area invoices a domestic customer in USD, the template prints the VAT amount only in USD, and the VAT report converts it at the payment date rate. Article 230 of the VAT Directive allows any invoice currency provided the VAT payable is expressed in the national currency through Article 91, which takes the rate at the time VAT becomes chargeable and obliges Member States to accept the latest European Central Bank rate. Each affected invoice misses the Article 230 condition, and the VAT return no longer matches the invoices.
- Card payments counted in Form 1099-NEC (US). Contractor bills paid by card through the software are added to box 1 totals. The IRS instructions for Forms 1099-MISC and 1099-NEC (12/2026) state that payment card and third-party network payments go on Form 1099-K from the payment settlement entity and are not subject to 1099-NEC reporting. The same income reaches the IRS twice under the contractor's TIN. Each wrong return needs a correction and can carry a penalty under IRC section 6721, which covers returns with incorrect information.
Licence flag and the evidence buyers, accountants, and auditors ask for
Accounting and invoicing software carries the licence flag "no": it runs as software, so evidence goes to enterprise buyers, accounting firms, and auditors, and its outputs must match tax authority rules. Sources in this section were checked on 2026-09-16.
Enterprise buyers, accounting firms, and auditors
- SOC 1 report. SOC 1 examines controls at a service organization likely to be relevant to user entities' internal control over financial reporting (AICPA). Under PCAOB AS 2601 paragraph .24, a report with tests of operating effectiveness may give the user auditor a basis for reducing assessed control risk below the maximum, and a report on controls placed in operation is not intended to. Evidence we produce: posting, revaluation, tax computation, and period lock control tests mapped to the report's control objectives.
- SOC 2 report and security questionnaires. Where processing integrity is in scope, criteria PI1.2 to PI1.5 cover complete and accurate inputs, processing, and outputs (SOC 2 testing requirements). Evidence we produce: reconciliation results per bank import, invoice run, and accounting sync.
- Bank feed data access terms. Buyers ask where account data comes from, under which consent, and what stops the feed when consent ends. Evidence we produce: consent, token refresh, revocation, and deletion test results per connector.
United States: bank data access and information returns
On 16 September 2026, the compliance dates of the CFPB Personal Financial Data Rights rule, 12 CFR Part 1033, are stayed by a court order of 29 October 2025, and the CFPB is reconsidering the rule (status and testing requirements).
T.D. 9972 requires electronic filing for 10 or more information returns in aggregate, for returns required to be filed on or after 1 January 2024, and for tax years beginning after 2025 the minimum reporting threshold for certain payments rose to 2,000 USD (IRS 1099 instructions, 12/2026). The last day to file through FIRE is 19 November 2026, and FIRE users must move to IRIS for tax year 2026 returns (IRS FIRE page, updated 7 August 2026). Evidence we produce: IRIS submission tests, a threshold and exclusion matrix per payee, and correction tests.
European Union: VAT invoices and e-invoicing
Belgium has required structured electronic invoices between Belgian VAT-liable enterprises since 1 January 2026 (einvoice.belgium.be). Council Directive (EU) 2025/516 lets Member States impose domestic e-invoicing from 14 April 2025 (Article 6(1)) and, from 1 July 2030, amends the VAT Directive so that:
- invoices are issued as electronic invoices under the European standard of Directive 2014/55/EU, EN 16931, with Member State options for domestic supplies (Article 218);
- invoices for intra-Community supplies of goods, and for supplies where the customer pays the VAT under Articles 194 to 197, are issued within 10 days of the chargeable event (Article 222);
- transaction data for those supplies is transmitted when the invoice is issued (Article 263).
Evidence we produce: EN 16931 validation results per invoice type and currency conversion checks against Articles 91 and 230.
Accounting software test scenarios
- Post invoices, credit notes, bills, and journals with line-level and document-level VAT rounding, and check that each journal balances in both currencies with the double-entry invariant test suite from ledger and reconciliation testing.
- Revalue receivables, payables, and foreign currency bank accounts at month end, reverse on the first day of the next period, settle at a third rate, and confirm that prepayments and inventories keep their transaction rates.
- Import a bank feed where a pending transaction posts with a new ID, reconnect with an overlapping date range, and reach the 180-day SCA renewal without duplicates or silent gaps.
- Match one deposit to several invoices, one invoice to partial payments, and a processor payout net of fees, then unmatch a transaction in a locked period.
- Replay payment webhooks twice and out of order, then refund and dispute an invoice payment; the invoice status, clearing entry, and platform fee each post once.
- Change a VAT rate mid-month, issue reverse-charge and exempt invoices with the required mentions, and issue a corrective invoice that references the original.
- Generate EN 16931 invoices in UBL and CII syntax, block malformed ones before sending, and process network rejections.
- Aggregate contractor payments per payee per calendar year at the 2,000 USD threshold, exclude card payments, and file originals and corrections through IRIS test endpoints.
- Migrate opening balances and open items from another accounting system and reconcile the trial balance per period.
Integrations and protocols to cover
- Bank data. Open banking account information APIs, US aggregator APIs, and statement files in ISO 20022 camt.053 and camt.054, BAI2, MT940, and OFX; the camt.053 reconciliation guide shows the field mapping.
- Invoice payments. Card and ACH processor APIs, payment webhooks, and payout reports with fees per payment.
- E-invoicing networks. Peppol access points and Peppol BIS Billing 3.0 messages in UBL 2.1 or UN/CEFACT CII, with delivery and rejection responses.
- Tax authority APIs. IRS IRIS application-to-application XML submissions, and the HMRC Making Tax Digital VAT API, where HMRC requires fraud prevention header data by law (HMRC developer hub).
- Exchange rates. Rate feeds such as European Central Bank euro reference rates, usually updated at around 16:00 CET on working days (ECB).
- App marketplace and ERP APIs. OAuth 2.0 apps that write invoices, journals, and contacts; ERP and accounting integration testing delivers the duplicate and missing record report.
Related
Standards
Services
Guides
- How to test ledger reconciliation against settlement files and bank statements
- How to reconcile camt.053 statements: format, batch entries, reversals, and MT940 mapping
- How to test FX markup: rate application and markup disclosure
- How to test payment idempotency
- How to test 90-day reauthentication, consent expiry, and token refresh in open banking
- How to test banker's rounding in payment and ledger code
Sample deliverable
Sample, synthetic data
| Connector | Happy path | Timeout and retry | Expired consent or token | Duplicate, out-of-order, or offline delivery | Coverage status and open defect |
|---|---|---|---|---|---|
| Bank connector 01 (Berlin Group NextGenPSD2) | Covered, 9 of 9 cases passed: POST /v1/consents reaches consentStatus valid after SCA, and the accounts, balances, and transactions calls return 200 for that consent | Covered, 6 of 6 cases passed: a timed-out transactions call is retried with a new X-Request-ID, and a 429 ACCESS_EXCEEDED response stops refreshes for that consent until the next day | Failed, 4 of 5 cases passed: after a 401 CONSENT_EXPIRED response, the connector keeps scheduling refreshes and shows a stale balance of 1,240.00 XTS as current | Covered, 5 of 5 cases passed: a pending transaction that returns with bookingStatus booked and a new transactionId replaces the pending entry, and overlapping dateFrom windows import no duplicates | Failed, retest scheduled after the INT-0203 fix. INT-0203 (medium): the bank connector does not set reconnect required after a 401 CONSENT_EXPIRED response |
| Bank feed 03 (OFX) | Covered, 7 of 7 cases passed: a STMTRQ for a checking account returns STMTRS with SONRS STATUS code 0, and each STMTTRN posts once to the ledger bank account | Covered, 4 of 4 cases passed: a statement request retried after a timeout reuses its TRNUID, and status 2019 Duplicate request is handled as already processed | Covered, 3 of 3 cases passed: SONRS status 15500 Signon invalid stops the bank feed and asks the user to reconnect, with no empty statement imported | Failed, 5 of 6 cases passed: overlapping DTSTART and DTEND windows repeat FITID values, and one repeated FITID with a changed TRNAMT imports as a second transaction | Failed, retest scheduled after the INT-0221 fix. INT-0221 (medium): a repeated FITID with a changed TRNAMT of 18.75 XTS imports as a second bank transaction |
| Card terminal SDK (offline mode) | Covered, 12 of 12 cases passed: online EMV contact and contactless sales return tag 8A value 00, and each approved sale posts one capture | Covered, 6 of 6 cases passed: an authorisation request with no host response before the timeout sends a reversal before the sale is retried | Covered, 4 of 4 cases passed: a terminal session token that expires while the terminal is offline is refreshed before the store-and-forward upload starts | Failed, 10 of 11 cases passed: offline sales under the terminal floor limit (tag 9F1B) complete with tag 8A value Y3, and one retried store-and-forward upload posts two captures | Blocked for release until the INT-0214 fix passes retest. INT-0214 (high): a store-and-forward upload retried after a lost acknowledgement captures one 42.50 XTS sale twice |
| Broker API A (FIX 4.4) | Covered, 10 of 10 cases passed: Logon (35=A) succeeds, and each ExecutionReport (35=8) with ExecType (150) F updates the imported position once | Covered, 5 of 5 cases passed: no inbound message within HeartBtInt (108) triggers a TestRequest (35=1), and a reconnect resumes at the next expected MsgSeqNum (34) | Covered, 3 of 3 cases passed: a Logon with an expired Password (554) is answered with Logout (35=5) and Text (58), and the broker link shows as disconnected with positions kept | Covered, 8 of 8 cases passed: a MsgSeqNum (34) gap triggers ResendRequest (35=2), and a resent ExecutionReport with PossDupFlag (43) Y and a known ExecID (17) is not counted as a second fill | Covered, with no open defects on Broker API A |
| Payout partner B (ISO 20022 pacs.008) | Covered, 8 of 8 cases passed: a pacs.008.001.08 credit transfer with a UETR returns pacs.002 TxSts ACSP and then ACSC, and the payout is marked settled once | Failed, 5 of 6 cases passed: a timed-out pacs.008 submission is followed by a pacs.028 status request, but one retry is sent as a new pacs.008 with a new UETR | Covered, 4 of 4 cases passed: a payout submitted with an expired API access token returns 401, and the token is refreshed before one resubmission with the same UETR | Covered, 6 of 6 cases passed: a pacs.002 TxSts RJCT after ACSP releases the payout hold once, and a repeated pacs.002 for the same UETR changes no balance | Blocked for release until the INT-0230 fix passes retest. INT-0230 (high): a pacs.008 retried after a timeout carries a new UETR and pays 250.00 XTS twice to one beneficiary |
Amounts use XTS, the ISO 4217 code reserved for testing. Connectors, banks, and partners are generic sandbox endpoints, and terminal sales use scheme test cards masked to BIN and last four.
Questions
What is double entry accounting?
What is multi-currency accounting?
How does multi-currency accounting work?
Scope your accounting software testing
Send your ledger model, bank feed connections, invoice payment rails, and tax outputs, and we return a test scope with the evidence buyers and their auditors request.
Scope your testing