Sample output from the Risk Exposure & Risk Appetite Assessment prompt in the Sonar AI Prompt Library, run against a NetSuite test account. Every name and number here is test data. Back to the post · The library
TD3016323 · Finance Confidential — Board & Executive Distribution
Enterprise Risk · FY 2026

Risk Exposure &
Risk Appetite Assessment

An evaluation of current risk exposure against fiscal-year 2026 financial performance, with recommended risk appetite levels calibrated to profitability, capital allocation, and enterprise value creation.

As ofAugust 21, 2026
Period CoveredFY 2026 (Jan 1 – Aug 21)
SourceNetSuite GL & subledgers (live)
Prepared bySonar AI · reviewed data
Assessment in One Paragraph

The enterprise is outperforming on every profitability metric — revenue +19.1% year over year, net income +66.6%, gross margin up 210 bps — while carrying a materially mispriced credit-risk position: 86% of open receivables are past due and half sit beyond 90 days. Simultaneously, the balance sheet is over-defended: a 3.2 quick ratio and an 8-day payables cycle idle roughly $1.8M of deployable capital. The correct move is not uniformly “less risk” — it is a rebalancing: tighten credit appetite sharply, raise capital-deployment appetite deliberately, and close the data-integrity gaps that currently blind dimensional reporting.

Performance & Exposure at a Glance

FY 2026 year-to-date through August 21. All figures USD, computed from posted GL activity.
$8.39M
YTD Revenue
+19.1% vs. Jan–Aug 2025 ($7.04M)
$1.17M
YTD Net Income
+66.6% YoY · 14.0% margin (vs. 10.0%)
39.2%
Gross Margin
Up from 37.1% · but 32.0% in August
86.1%
Open AR Past Due
$799K of $928K open receivables
$473K
AR > 90 Days
50.9% of open AR · 13 invoices
3.2×
Quick Ratio
$4.76M cash + AR vs. $1.49M current liabilities

1 · Financial Performance, FY 2026

The earnings engine is strong and improving — which is precisely what makes the unmanaged credit exposure an unforced error rather than a survival necessity.
MonthRevenueCOGSGross ProfitGP %OpexNet Income
Jan906,916549,856357,06039.4%279,58377,477
Feb1,035,777563,809471,96845.6%276,746195,222
Mar971,980590,417381,56339.3%267,633113,930
Apr1,067,151640,526426,62540.0%257,383169,242
May1,090,887671,722419,16538.4%254,082165,083
Jun1,148,114682,751465,36340.5%243,339222,024
Jul1,106,264680,544425,72138.5%243,625182,096
Aug*1,061,505722,338339,16732.0%290,00149,166
YTD8,388,5945,101,9623,286,63239.2%2,112,3921,174,240
$200K $100K $0 77KJan 195KFeb 114KMar 169KApr 165KMay 222KJun 182KJul 49KAug*
Net income by month, FY 2026. August (red) collapsed to $49K on the year’s highest COGS ($722K, +6.1% MoM against −4.0% revenue) and an opex reversal to $290K after five months of steady decline. *August is a partial month (through the 21st) — costs may be accruing ahead of late-month revenue.
50% 40% 30% 32.0% 45.6% JanFebMarAprMayJunJulAug*
Gross margin by month. The 32.0% August print is 6–8 points below the FY 2026 corridor (38.4–45.6%) — a two-sigma deviation warranting a COGS account-level review before the September close.

Year-over-year comparison (Jan–Aug)

20252026Δ
Revenue7,042,8178,388,594+19.1%
Gross profit2,614,7903,286,632+25.7%
Operating expense1,909,9132,112,392+10.6%
Net income704,8771,174,240+66.6%

Operating leverage is real: revenue grew 19% while opex grew 11%, expanding net margin from 10.0% to 14.0%. Annualized run-rate net income is approximately $1.84M. This earnings quality is the capital base against which risk appetite should be recalibrated — the enterprise can now afford to be selective about credit risk and ambitious about capital deployment.

2 · Risk Exposure by Domain

Five domains assessed from live subledger and GL data. Severity reflects likelihood-weighted impact against the YTD earnings base.

2.1 Credit & Receivables High

Open customer receivables total $928,247 across 37 customers. Of this, $799,240 (86.1%) is past due and $472,913 (50.9%) is more than 90 days past due — including single exposures aged 460, 327, and 262 days. Against invoice-channel revenue, effective DSO is ~168 days. The 90+ bucket alone equals 40% of YTD net income; a full write-off would erase four months of earnings.

$500K $250K $129KCurrent $6K1–30 days $181K31–60 days $139K61–90 days $473K90+ days
Open AR by aging bucket as of Aug 21, 2026. The distribution is inverted — a healthy book concentrates in Current; this one concentrates past 90 days.
CustomerOpen AROverdueMax Days Overdue
Global Information110,579110,579262
Red Rivers Consulting102,906102,906155
Magna Tech Limited97,94297,94232
Falcon Systems86,00786,00782
Mercury Co.80,07980,079460
Gotter inc.68,11968,119256
Blockster Inc.53,42453,42480
Haskell Associates43,94143,941327

Note that two of the top-10 delinquent accounts — Red Rivers Consulting and Magna Tech Limited — are simultaneously top-5 revenue customers this year. Collections posture toward them is a commercial decision, not merely a finance one; the recommended appetite framework (Section 3) prices that trade-off explicitly rather than leaving it implicit.

Two governance observations: credit limits are set on all 37 customers with open balances and none currently exceeds its limit — the control exists but is not binding, because limits do not throttle aged exposure, only new orders. And the Renewal Risk classification field (CUSTENTITY_RENEWAL_RISK) is unpopulated on all 274 customers, so the firm currently has no forward-looking credit signal in its system of record.

2.2 Concentration Elevated (supplier side)

CUSTOMER — share of FY26 transactional revenue ($1.35M, 102 customers) Top 17.6% Top 535.3% Top 1063.8% SUPPLIER — share of FY26 purchase volume ($1.79M, 407 bills) Top 124.0% Top 572.2% Top 1090.8% 0%50%100%
Concentration comparison. Customer concentration is moderate and diversified across 102 active accounts. Supplier concentration is the standout exposure: five vendors carry 72% of purchase volume, led by Generation N at 24% ($431K).

A disruption at any of the top three suppliers (Generation N $431K, Bedline $309K, Broyhill $201K) would impair fulfillment across the inventory-led revenue base with limited near-term substitution. No dual-sourcing structure is visible in the purchasing data.

2.3 Liquidity & Capital Allocation Low risk — but inefficient

Cash stands at $2.60M (two operating checking accounts: $1.56M Sub 1, $1.04M Sub 2), the quick ratio at 3.2×, and open payables at just $180.9K — effectively all within terms. Days payable outstanding is ~8 days against a typical vendor-terms norm of 25–30. The liquidity risk here is not shortage; it is surplus: at a ~$264K monthly opex run rate, the firm holds nearly 10 months of opex in non-earning demand deposits and voluntarily finances its suppliers by paying three weeks early. Both are quiet, continuous transfers of enterprise value to counterparties.

2.4 Inventory Moderate

On-hand inventory at cost is $1.12M across 189 items, turning at a healthy ~7.1× annualized. Two flags: 49 items ($40.7K, 3.6% of on-hand value) have stock on hand but zero sales in 2026 — candidates for markdown or liquidation; and the GL inventory balance ($2.13M) exceeds the costing-subledger value by roughly $1.0M, a reconciliation gap that must be resolved before inventory can be used as a reliable planning input (see 2.5).

2.5 Data Integrity & Reporting Visibility Elevated

Three structural findings limit the precision of every other analysis in this document, and constitute a risk domain in their own right:

• 84% of GL revenue posts via journal entries ($7.04M of $8.39M), not customer invoices. Journals carry no item, class, or customer lines, so dimensional analysis (by product category, subsidiary, customer) covers only the ~$1.35M transactional slice.
• 36% of transactional revenue is unclassified ($493K carries no product class), and class 5 (Electronics) shows zero sales lines all year.
• GL/subledger divergence: GL AR ($2.16M) vs. open invoices ($0.93M), and GL inventory ($2.13M) vs. costing value ($1.12M). Until reconciled, balance-sheet-derived ratios should be treated as ranges, not points.

3 · Recommended Risk Appetite Levels

Appetite is set per domain, with quantified limits and an early-warning threshold at 80% of each limit. The guiding principle: take risk where the firm is paid for it, and stop taking risk where it is not.
DomainCurrent Effective PostureRecommended AppetiteQuantified Limits (Board KPIs)
Credit / AR Unbounded — passive tolerance of 86% overdue LOW — tighten sharply Overdue ≤ 25% of open AR · 90+ bucket ≤ 5% · blended DSO ≤ 55 days · single-name AR ≤ 10% of book · establish ~$264K reserve (50% of 90+, 20% of 61–90)
Supplier concentration Unmonitored — top-5 at 72% MODERATE — reduce over 12 months Top-1 supplier ≤ 20% of spend · top-5 ≤ 55% · dual-source the top 3 purchase categories
Customer concentration Naturally diversified (top-1 at 7.6%) MODERATE — maintain Top-1 customer ≤ 12% of revenue · top-10 ≤ 65% · growth may consume headroom
Liquidity / capital Over-conservative — 10 months opex in idle cash, DPO 8 days HIGHER — deploy deliberately Minimum cash floor = 3 months opex (~$0.8M) + $0.4M buffer · excess (~$1.4–1.8M) into laddered T-bills / growth investment · DPO target 20–25 days (within terms, never late)
Inventory Adequate turns, unmanaged tail MODERATE — maintain, prune tail Turns ≥ 6× · slow-moving (no sale 12 mo) ≤ 2% of on-hand value · liquidate the current $41K tail
Data integrity Degraded — journals dominate, subledgers diverge MINIMAL — zero tolerance GL/subledger reconciliation gaps closed by Q4 close · unclassified revenue ≤ 5% · renewal-risk field populated for all active customers

Why asymmetric appetite is the value-maximizing answer

Every dollar of 90+ receivable is capital lent, involuntarily and at 0% interest, to the counterparties least likely to repay — risk with no compensation. Every idle dollar above the cash floor forgoes a riskless ~4.5% — safety with no benefit. Cutting the uncompensated risk and deploying the uncompensated safety are the same decision viewed from two sides, and together they are worth roughly $0.5M of annual pre-tax value against a $1.8M earnings base:

Value LeverOne-Time CashAnnual RecurringMechanism
Collect / resolve 90+ ARup to 472,913Structured collections on 13 invoices; escalate or settle by day 120
DSO 168 → 55 days (invoice channel)≈ 300,000≈ 13,500Working capital released; earns yield thereafter
Extend DPO 8 → 25 days≈ 366,000≈ 16,500Stop early-paying; hold cash within terms
Treasury yield on $1.8M excess cash≈ 81,000Laddered T-bills at ~4.5%
Liquidate slow-moving inventory≈ 20,000–40,000Markdown 49 dead items; recover storage capacity
Avoided write-off (reserve + discipline)risk-adjusted ≈ 400,000 protectedReserve absorbs; new-order credit gate prevents recurrence
Indicative total≈ $1.1–1.2M cash≈ $110K + protection
Risks of the recommendation itself

4 · 90-Day Action Program

Sequenced for dependency: measure, then collect, then deploy.
  1. Stand up the collections sprint (Weeks 1–4)Assign owner; work the 13 invoices in the 90+ bucket ($473K) oldest-first. Payment plan, settlement, or legal referral decision on each by day 30. Book the ~$264K reserve at September close so earnings absorb the risk on your schedule, not a surprise’s.
  2. Close the COGS/opex question on August (Weeks 1–2)Account-level review of the $722K COGS and $290K opex prints once August closes. Determine timing vs. trend before Q4 planning locks.
  3. Reconcile GL to subledgers (Weeks 2–8)AR ($2.16M GL vs. $0.93M open invoices) and inventory ($2.13M GL vs. $1.12M costing). Identify the journal-posting practice driving 84% of revenue and either dimension those journals or route revenue through transactions.
  4. Activate the credit framework (Weeks 3–6)Populate CUSTENTITY_RENEWAL_RISK for all active customers; add an order-entry hold for any account > 60 days past due; set the board KPI dashboard on the Section 3 limits with 80%-of-limit early warnings.
  5. Rebalance the treasury (Weeks 4–10)Move to the 25-day DPO cadence; ladder ~$1.4–1.8M of excess cash into 1–6 month T-bills above the $1.2M floor (3 months opex + buffer).
  6. Begin supplier diversification (Weeks 6–13)Qualify a second source for the Generation N and Bedline categories; target top-1 ≤ 20% of spend within 12 months.

Appendix A · Methodology & Source Queries

All figures were computed live against NetSuite via SuiteQL on August 21, 2026. Key queries reproduced verbatim for reproducibility; re-running them will reflect subsequent postings.
A.1 — Monthly P&L, FY 2026
Period ids 173–182 are the Jan–Aug 2026 monthly accounting periods. Revenue is sign-corrected (NetSuite stores income as credits/negatives). FY 2025 comparison uses period ids 156–165.
SELECT ap.periodname, ap.startdate,
 ROUND(SUM(CASE WHEN a.accttype IN ('Income','OthIncome') THEN -tal.amount ELSE 0 END),2) AS revenue,
 ROUND(SUM(CASE WHEN a.accttype = 'COGS' THEN tal.amount ELSE 0 END),2) AS cogs,
 ROUND(SUM(CASE WHEN a.accttype IN ('Expense','OthExpense') THEN tal.amount ELSE 0 END),2) AS opex
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN account a ON tal.account = a.id
JOIN accountingperiod ap ON t.postingperiod = ap.id
WHERE t.posting = 'T'
  AND ap.id IN (173,174,175,177,178,179,181,182)
  AND a.accttype IN ('Income','OthIncome','COGS','Expense','OthExpense')
GROUP BY ap.periodname, ap.startdate
ORDER BY ap.startdate
A.2 — AR aging as of run date
Open invoices only (status 'A'); buckets on days past due. The AP aging (Section 2.3) uses the identical shape with type = 'VendBill'.
SELECT
  CASE WHEN t.duedate >= TRUNC(SYSDATE) OR t.duedate IS NULL THEN '0_current'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 1 AND 30 THEN '1_1-30'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 31 AND 60 THEN '2_31-60'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 61 AND 90 THEN '3_61-90'
       ELSE '4_90plus' END AS bucket,
  COUNT(*) AS invoices,
  ROUND(SUM(t.foreignamountunpaid),2) AS open_amt
FROM transaction t
WHERE t.type = 'CustInvc' AND t.status = 'A' AND t.foreignamountunpaid > 0
GROUP BY CASE WHEN t.duedate >= TRUNC(SYSDATE) OR t.duedate IS NULL THEN '0_current'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 1 AND 30 THEN '1_1-30'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 31 AND 60 THEN '2_31-60'
       WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) BETWEEN 61 AND 90 THEN '3_61-90'
       ELSE '4_90plus' END
ORDER BY 1
A.3 — Top customers by open AR, with overdue portion
SELECT c.entityid AS customer,
  COUNT(t.id) AS open_invoices,
  ROUND(SUM(t.foreignamountunpaid),2) AS open_ar,
  ROUND(SUM(CASE WHEN t.duedate < TRUNC(SYSDATE) THEN t.foreignamountunpaid ELSE 0 END),2) AS overdue_ar,
  MAX(CASE WHEN t.duedate < TRUNC(SYSDATE) THEN TRUNC(SYSDATE)-TRUNC(t.duedate) ELSE 0 END) AS max_days_overdue
FROM transaction t
JOIN customer c ON t.entity = c.id
WHERE t.type = 'CustInvc' AND t.status = 'A' AND t.foreignamountunpaid > 0
GROUP BY c.id, c.entityid
ORDER BY SUM(t.foreignamountunpaid) DESC
FETCH FIRST 10 ROWS ONLY
A.4 — Customer revenue concentration, FY 2026 YTD
Transactional revenue only (CustInvc + CashSale lines); elimination subsidiary 4 excluded. Denominator: 102 customers, $1,353,244.45.
SELECT c.entityid AS customer,
  ROUND(SUM(ABS(tl.netamount)),2) AS ytd_revenue
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id
JOIN customer c ON t.entity = c.id
WHERE t.type IN ('CustInvc','CashSale') AND t.posting = 'T'
  AND t.trandate >= TO_DATE('2026-01-01','YYYY-MM-DD')
  AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.subsidiary <> 4
GROUP BY c.id, c.entityid
ORDER BY SUM(ABS(tl.netamount)) DESC
FETCH FIRST 10 ROWS ONLY
A.5 — Vendor concentration, FY 2026 YTD
Denominator: 407 bills, $1,794,815.12.
SELECT v.entityid AS vendor, COUNT(*) AS bills,
  ROUND(SUM(ABS(t.foreigntotal)),2) AS ytd_purchases
FROM transaction t
JOIN vendor v ON t.entity = v.id
WHERE t.type = 'VendBill'
  AND t.trandate >= TO_DATE('2026-01-01','YYYY-MM-DD')
GROUP BY v.id, v.entityid
ORDER BY SUM(ABS(t.foreigntotal)) DESC
FETCH FIRST 10 ROWS ONLY
A.6 — Balance sheet GL snapshot & cash by account
SELECT a.accttype, ROUND(SUM(tal.amount),2) AS balance
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN account a ON tal.account = a.id
WHERE t.posting = 'T'
  AND a.accttype IN ('Bank','AcctRec','AcctPay')
GROUP BY a.accttype
-- Cash detail: same body filtered to accttype = 'Bank', grouped by a.id, a.fullname.
-- Inventory GL: accttype = 'OthCurrAsset' restricted to inventory accounts (ids 10, 119, 149, 227, 237).
A.7 — Slow-moving inventory
Items with on-hand quantity and zero CustInvc/CashSale lines in 2026. On-hand value from the aggregateitemlocation costing table.
SELECT COUNT(*) AS slow_movers, ROUND(SUM(v),2) AS slow_value FROM (
  SELECT ail.item, SUM(ail.onhandvaluemli) AS v
  FROM aggregateitemlocation ail
  WHERE ail.quantityonhand > 0
  GROUP BY ail.item
  HAVING NOT EXISTS (
    SELECT 1 FROM transactionline tl
    JOIN transaction t2 ON tl.transaction = t2.id
    WHERE tl.item = ail.item
      AND t2.type IN ('CustInvc','CashSale')
      AND t2.trandate >= TO_DATE('2026-01-01','YYYY-MM-DD')))
A.8 — Credit-limit coverage check
SELECT
  SUM(CASE WHEN x.creditlimit IS NULL OR x.creditlimit = 0 THEN 1 ELSE 0 END) AS no_limit_customers,
  SUM(CASE WHEN x.creditlimit > 0 AND x.open_ar > x.creditlimit THEN 1 ELSE 0 END) AS over_limit_customers,
  COUNT(*) AS customers_with_open_ar,
  ROUND(SUM(x.open_ar),2) AS total_open_ar
FROM (
  SELECT c.id, c.creditlimit, SUM(t.foreignamountunpaid) AS open_ar
  FROM transaction t
  JOIN customer c ON t.entity = c.id
  WHERE t.type = 'CustInvc' AND t.status = 'A' AND t.foreignamountunpaid > 0
  GROUP BY c.id, c.creditlimit
) x

Appendix B · Assumptions, Definitions & Limitations

Assumptions
Limitations
This assessment was prepared from live NetSuite data on August 21, 2026 by Sonar AI under the direction of the finance user. Figures are unaudited and derived from posted GL and subledger activity as of the run date. Recommendations are decision support, not accounting, investment, or legal advice; reserve policy, credit actions, and treasury deployment require appropriate management and, where applicable, auditor review. Queries in Appendix A permit full independent verification of every figure herein.
TD3016323 · FY26 ERA-01