> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Wave audit profile, Vortex IQ

> What the Vortex IQ Wave health audit checks: Wave: AR Collection Health, Books Hygiene, Income Recognition & Revenue-at-Risk

**[Nerve Centre KPIs](/nerve-centre/kpi-cards/wave) · [Audit Profile](/nerve-centre/kpi-cards/wave/audit) · [Sentiment Settings](/nerve-centre/kpi-cards/wave/sentiment)**

The questions a solo founder / micro-SMB owner asks at 9am on Monday when Wave is their free books + invoicing + payments stack: how much cash is stuck in overdue receivables and is it concentrating on customers still ordering, did yesterday's storefront orders all become Wave invoices or income transactions, are money transactions categorised and reviewed so the books (and sales-tax base) are accurate, and is net income actually moving the right way. Cross-references the ecommerce platforms (BigCommerce / Shopify / Adobe Commerce) and the PSP siblings (Stripe / PayPal) - an order with no matching Wave invoice, overdue AR on a still-ordering customer, or a PSP payout with no reconciled Wave transaction are the killer findings no single tool can see. Wave has NO inventory module, so inventory-parity checks are intentionally absent (unlike Intacct / Acumatica).

## What this audit checks

### Authentication & access

* Bearer token (OAuth2 access token or Full Access Token) authenticates against the GraphQL endpoint - the `businesses` query returns at least one business without a 401
* OAuth2 refresh succeeds when an access token expires (client\_id + client\_secret + refresh\_token against [https://api.waveapps.com/oauth2/token/](https://api.waveapps.com/oauth2/token/)) - or a long-lived Full Access Token is in use
* Configured business\_id resolves to a business the token can read (currencyCode + name returned)
* Token scope grants read access to invoices, customers, accounts and moneyTransactions - a partial scope silently empties downstream cards

### AR collection health

* Invoices in OVERDUE status above the collection threshold (cash stuck past due date)
* AR aged 60+ days above 15% of total AR balance (least-collectible bucket concentrating)
* Days Sales Outstanding (DSO) above 60 days (cash sitting too long in receivables)
* SENT/VIEWED invoices never followed by payment after the due date + grace window (silent non-payers)

### Books hygiene & income recognition

* moneyTransactions in UNREVIEWED status above threshold (books drift from reality, sales-tax base understated)
* Money transactions with no category / account assigned (uncategorised income or expense)
* Net income (INCOME-type minus EXPENSE-type) regressing >20% vs trailing period
* Draft (DRAFT/SAVED) invoices older than the billing cadence - revenue not yet issued to the customer

### Cross-channel: Wave vs ecommerce / PSP reconciliation

* Storefront order has no matching Wave invoice / income transaction after the sync window (sibling = bigcommerce.order / shopify.order / adobe\_commerce.order, by poNumber=order\_reference or customer email)
* Customer with AR aged 60+ days / OVERDUE invoices still placing new ecom orders (credit risk compounding, sibling = ecommerce customer by email)
* Repeat ecom customer with completed orders absent from the Wave customer master after 7d (sibling = bigcommerce.customer / shopify.customer, by email)
* PSP payout (stripe.payout / paypal.payout) with no reconciled Wave money transaction after 7d, by reference (sibling = payment\_gateway)

## Data sources

* `POST https://gql.waveapps.com/graphql/public` - Single GraphQL endpoint - all reads (businesses / invoices / customers / accounts / moneyTransactions queries) POST here
* `POST https://api.waveapps.com/oauth2/token/` - OAuth2 token refresh (authorization-code grant) when the access token expires
