Methodology & guardrails
Dilipilot is a pre-QoE layer for smaller buyers — not a replacement for a full quality-of-earnings engagement. Here is exactly what the engine does and what it refuses to do.
Guardrails
Trust rules enforced in code, not in a prompt.
- Deterministic engines do all the math. The LLM only writes the memo from pre-computed JSON — it never calculates, and it cannot cite a number the engine didn't produce.
- Unparseable rows are skipped with warnings surfaced to you, never silently invented.
- Seller-computed totals (Total, Net income, EBITDA rows) are ignored and re-derived from line items.
- Add-backs are presented as analyst suggestions with evidence and confidence — never as facts — and require explicit accept/reject.
- Low-confidence GL label mappings are flagged for manual review.
- Memos go stale (are cleared) whenever the data or your add-back decisions change.
Add-back detection rules
Each suggestion carries its rule, evidence, and a confidence score.
- One-time languageLabels containing "settlement", "lawsuit", "one-time", "non-recurring", or "relocation" propose the full amount as an add-back pending documentation.
- Owner compensationOwner comp is annualized and compared to a $95k replacement general-manager salary; only the excess is proposed.
- Auto & vehicleFlagged in owner-operated businesses as frequently personal in whole or part.
- Meals & entertainmentCommonly discretionary in SMBs; full amount shown for review, partial acceptance is typical.
- Legal spikesMonths running >2x the median legal expense propose the excess over median as one-time.
- Owner/personal labelsAny label containing "owner" or "personal" outside owner comp is flagged.
Expected CSV format
Wide-format P&L export, the default shape from QuickBooks and most bookkeeping tools.
Account,Jan-25,Feb-25,Mar-25,... Service Revenue,168000,182000,194000,... Owner Salary,18500,18500,18500,... Legal & Attorney Fees,900,14500,900,...
First column is the account label; remaining columns are months (2025-01 or Jan-25). Parentheses are treated as negatives. Total rows are skipped and re-derived.
Built to merge with RunwayIQ
One platform, two products — the merge is a folder copy.
This app shares RunwayIQ's stack, design system, and provider-neutral LLM layer file-for-file. All diligence logic lives in namespaced modules (lib/diligence/, types/diligence.ts, components/diligence/, app/(app)/deals/, app/api/diligence/) with no imports into product-specific RunwayIQ code, so the two merge into one platform without refactoring. See MERGE.md in the repo for the step-by-step playbook.
