Is the company reinvesting enough to sustain its asset base — or quietly consuming it to flatter free cash flow?
For the first 20 months of available GL history (Sep 2024 – Apr 2026), the company recorded steady depreciation & amortization — roughly $800/month — while investing exactly $0 in capital equipment. Every dollar of D&A in that window flowed straight through to free cash flow with no offsetting reinvestment: the textbook pattern of an eroding asset base.
That changed in May 2026. Three months of purchases (May–Jul) added $12,100 of gross PP&E, lifting the FY2026 capex-to-depreciation ratio to 1.67× — a genuine reinvestment cycle. But it only partially repairs the cumulative picture: lifetime capex still covers just 0.60× of lifetime D&A, leaving an $8,002 cumulative underinvestment gap.
The more consequential finding is one of scale: this business generated $10.9M of revenue in FY2025 across two retail stores, two distribution centers, and light manufacturing — on effectively no capitalized asset base. Capex intensity is ~0.14% of revenue in FY2026 (retail/distribution peers typically run 2–5%). Either the operating assets are leased and expensed, or fixed assets are systematically under-capitalized on these books. Three data-integrity issues found during the analysis (below) point toward the latter contributing.
The erosion pattern is real, but it has just inflected. Twenty consecutive months of zero reinvestment against ~$17,300 of accumulated D&A is exactly the "eat the asset base" signature. The May–Jul 2026 purchase cycle ($12,100) is the first counter-signal — sustained at this pace, coverage returns to parity in roughly 8–10 months. The number to watch is the cumulative ratio, not the single-year one: 0.60× today, and only a sustained coverage above 1.0× closes it.
Depreciation is the accounting echo of past investment — the cost of assets being used up. Capex is the cash cost of replacing them. When capex ÷ depreciation < 1.0 persistently:
The inverse also matters: a coverage ratio above 1.0× (as in FY2026 here) signals growth investment or catch-up replacement — healthy, provided it is sustained rather than episodic.
| Fiscal Year | Capex | D&A Expense | Coverage | Gap (Capex − D&A) | Revenue | Capex / Revenue |
|---|---|---|---|---|---|---|
| FY 2024 (Sep–Dec) | 0 | 3,131.53 | 0.00× | (3,131.53) | 3,432,291 | 0.00% |
| FY 2025 | 0 | 9,723.37 | 0.00× | (9,723.37) | 10,898,026 | 0.00% |
| FY 2026 (thru Aug) | 12,100.00 | 7,247.56 | 1.67× | +4,852.44 | 8,388,594 | 0.14% |
| Cumulative | 12,100.00 | 20,102.46 | 0.60× | (8,002.46) | 22,718,911 | 0.05% |
| Date | Transaction | Account | Amount | Memo | In FAM Register? |
|---|---|---|---|---|---|
| 2026-05-01 | Vendor Bill 31726 | 1610 Machinery & Equipment | 3,300.00 | LP - Asset Procurement | Yes (FAM000001–2) |
| 2026-05-01 | Vendor Bill 40314 | 1620 Furniture & Fixtures | 1,500.00 | — | Yes (FAM000003 or 4) |
| 2026-05-01 | Vendor Bill 40316 | 1620 Furniture & Fixtures | 1,000.00 | — | Not matched |
| 2026-06-01 | Vendor Bill 31730 | 1620 Furniture & Fixtures | 3,000.00 | LP - Asset Split | Partially ($1,500) |
| 2026-07-01 | Vendor Bill 31734 | 1610 Machinery & Equipment | 3,300.00 | LP - Reject Asset | No — rejected in FAM, still on GL |
| Total GL capex | 12,100.00 | FAM register covers $6,300 (52%) | |||
Three issues surfaced during the analysis. Each one distorts the capex/depreciation picture and is worth fixing regardless of this report.
Journal JE78 (2026-08-07, internal id 24127) credits 1710 Acc. Depr. – Machinery & Equipment for $750.00 but debits 8000 Other Expenses instead of a 68xx depreciation account. This understates the reported D&A line, overstates Other Expenses, and — because analysts add D&A back when computing EBITDA — quietly understates EBITDA by $750. This report reclassifies it as depreciation.
The Fixed Assets Management register (customrecord_ncfar_asset) holds 4 assets totaling $6,300, against $12,100 of GL additions. Notably, Vendor Bill 31734 ($3,300, memo "LP - Reject Asset") appears to have been rejected in the FAM asset-proposal flow but its GL posting to 1610 remains. Assets not in FAM will never generate depreciation — the GL will carry them at cost forever, silently overstating net PP&E.
Cumulative D&A expense is $20,102, but the accumulated-depreciation accounts (1700-series) carry only $841.67 of credits. The historical amortization expense (account 6880) was loaded via the "Beg Balance Entries" journals with the balancing entries absorbed elsewhere in those journals — no corresponding accumulated-amortization balance was established. The balance sheet therefore cannot corroborate the P&L's depreciation history, and net-book-value or asset-age analysis (accumulated depreciation ÷ gross assets) is impossible on these books.
All data was extracted live from NetSuite via SuiteQL on 2026-08-24. Account groupings were mapped from the chart of accounts by internal id, then every GL line touching those accounts was inspected individually before aggregation (58 lines total — small enough to audit by hand).
Query 1 — Map the fixed-asset side of the chart of accounts
Identifies gross PP&E, accumulated depreciation, ROU-asset, and depreciation-expense accounts.
SELECT
a.id,
a.acctnumber,
a.fullname,
a.accttype,
a.isinactive,
a.parent
FROM account a
WHERE a.accttype = 'FixedAsset'
OR LOWER(a.fullname) LIKE '%depreciation%'
OR LOWER(a.fullname) LIKE '%amortization%'
OR LOWER(a.fullname) LIKE '%accum%'
ORDER BY a.accttype, a.acctnumber
Query 2 — Annual activity by account group
Buckets GL postings into GROSS_PPE / ACCUM_DEPR / DEPR_EXPENSE / AMORT_EXPENSE by internal id. Account ids were taken from Query 1.
SELECT
TO_CHAR(t.trandate, 'YYYY') AS fiscal_year,
CASE
WHEN a.id IN (150, 14, 15, 16, 151, 17) THEN 'GROSS_PPE'
WHEN a.id IN (3644, 3645) THEN 'ROU_ASSET'
WHEN a.id IN (152, 153, 18, 19, 20, 21) THEN 'ACCUM_DEPR'
WHEN a.id = 3646 THEN 'ACCUM_DEPR_ROU'
WHEN a.id IN (66, 61, 62, 172, 173, 174) THEN 'DEPR_EXPENSE'
WHEN a.id = 59 THEN 'AMORT_EXPENSE'
WHEN a.id = 230 THEN 'SYS_ACCUM_DEPR'
END AS account_group,
ROUND(SUM(tal.debit), 2) AS total_debits,
ROUND(SUM(tal.credit), 2) AS total_credits,
ROUND(SUM(tal.amount), 2) AS net_amount,
COUNT(DISTINCT t.id) AS tran_count
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE t.posting = 'T'
AND a.id IN (150,14,15,16,151,17,3644,3645,152,153,18,19,20,21,3646,
66,61,62,172,173,174,59,230)
GROUP BY TO_CHAR(t.trandate, 'YYYY'), CASE ... END
ORDER BY fiscal_year, account_group
Query 3 — Line-level audit of every posting to those accounts
This is the query that surfaced JE78's misclassification and the "LP - Reject Asset" bill. Monthly D&A figures in the charts come from these rows.
SELECT
t.id,
t.tranid,
t.type,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS trandate,
a.acctnumber,
a.fullname AS account_name,
ROUND(tal.amount, 2) AS amount,
t.memo
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE t.posting = 'T'
AND tal.account IN (150,14,15,16,151,17,3644,3645,152,153,18,19,20,21,3646,
66,61,62,172,173,174,59,230)
ORDER BY t.trandate, t.id, a.acctnumber
Query 4 — Annual revenue (for capex-intensity scaling)
SELECT
TO_CHAR(t.trandate, 'YYYY') AS fiscal_year,
ROUND(SUM(-tal.amount), 2) AS revenue
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE t.posting = 'T'
AND a.accttype IN ('Income', 'OthIncome')
GROUP BY TO_CHAR(t.trandate, 'YYYY')
ORDER BY fiscal_year
Query 5 — Fixed Assets Management register
Cross-check of the FAM subledger against GL capex (Flag 2).
SELECT
fa.id,
fa.name,
fa.custrecord_assetcost AS asset_cost,
fa.custrecord_assetcurrentcost AS current_cost,
BUILTIN.DF(fa.custrecord_assetstatus) AS status,
BUILTIN.DF(fa.custrecord_assettype) AS asset_type,
TO_CHAR(fa.custrecord_assetpurchasedate, 'YYYY-MM-DD') AS purchase_date,
fa.custrecord_assetlifetime AS lifetime_months
FROM customrecord_ncfar_asset fa
ORDER BY fa.id
Query 6 — GL detail of the flagged journals (JE78, JE100)
SELECT
a.acctnumber,
a.fullname AS account_name,
ROUND(tal.amount, 2) AS amount,
tal.credit,
tal.debit
FROM transactionaccountingline tal
JOIN account a ON a.id = tal.account
WHERE tal.transaction IN (24127, 31736)
ORDER BY tal.transaction, a.acctnumber
This analysis is derived exclusively from general-ledger data in NetSuite account TD3016323 as of 2026-08-24 and reflects only what is recorded in the books. Dollar amounts in this account are small in absolute terms; the analytical patterns (coverage ratios, register reconciliation gaps, classification errors) are what generalize. This document is informational and does not constitute accounting, audit, or investment advice. Figures computed programmatically from GL extracts; monthly detail available on request.