- Add audit subagent that runs automatically after bill entries - Create download-attachment.sh for retrieving invoice/receipt PDFs - Create verify-pdf.py for PDF extraction with OCR fallback - Restructure SKILL.md from 856 to 177 lines using reference files - Move detailed content to references/: - schema.md: table schemas - workflows.md: code examples - queries.md: SQL queries and financial reports - audit.md: audit queries and remediation steps
4.1 KiB
4.1 KiB
SQL Queries and Reports
Common queries and financial report templates.
Contents
Common Queries
Unpaid Bills by Vendor
SELECT v.Name, b.BillNumber, b.BillDate, b.Amount, b.AmountDue
FROM Bills b
JOIN Vendors v ON b.Vendor = v.id
WHERE b.Status IN ('Open', 'Partial')
ORDER BY b.DueDate
Bills Summary by Vendor
SELECT v.Name as Vendor, COUNT(b.id) as Bills, SUM(b.Amount) as Total, SUM(b.AmountDue) as Due
FROM Bills b
JOIN Vendors v ON b.Vendor = v.id
GROUP BY v.Name
ORDER BY Total DESC
Account Balances (Non-Zero)
SELECT Code, Name, Type, Balance
FROM Accounts
WHERE Balance != 0
ORDER BY Code
Owner Reimbursement Balance
SELECT Balance FROM Accounts WHERE Code = '2203'
Expense Summary by Account
SELECT a.Code, a.Name, a.Balance
FROM Accounts a
WHERE a.Type = 'Expense' AND a.Balance != 0
ORDER BY a.Balance DESC
Transaction History for Account
SELECT t.Date, t.Description, t.Reference, tl.Debit, tl.Credit
FROM TransactionLines tl
JOIN Transactions t ON tl.Transaction = t.id
WHERE tl.Account = {account_id}
ORDER BY t.Date DESC
Verify All Transactions Balance
SELECT id, Description, Total, IsBalanced
FROM Transactions
WHERE IsBalanced = false
Financial Reports
Balance Sheet
Shows Assets = Liabilities + Equity at a point in time.
Important: Parent accounts roll up child balances. Query only top-level parents (Parent = 0) to avoid double-counting.
-- Assets, Liabilities, Equity (top-level only)
SELECT Code, Name, Type, Balance
FROM Accounts
WHERE Type IN ('Asset', 'Liability', 'Equity')
AND Parent = 0
ORDER BY Type, Code
-- Net Income (for Equity section)
SELECT
COALESCE(SUM(CASE WHEN Type = 'Income' THEN Balance ELSE 0 END), 0) -
COALESCE(SUM(CASE WHEN Type = 'Expense' THEN Balance ELSE 0 END), 0) as NetIncome
FROM Accounts
WHERE Type IN ('Income', 'Expense')
AND id NOT IN (SELECT DISTINCT Parent FROM Accounts WHERE Parent != 0)
Presentation:
| Assets | |
|---|---|
| Cash & Bank Accounts | $X.XX |
| Accounts Receivable | $X.XX |
| Total Assets | $X.XX |
| Liabilities | |
|---|---|
| Accounts Payable | $X.XX |
| Due to Owner | $X.XX |
| Total Liabilities | $X.XX |
| Equity | |
|---|---|
| Retained Earnings | $X.XX |
| Net Income (Loss) | $X.XX |
| Total Equity | $X.XX |
| Total Liabilities + Equity | $X.XX |
Income Statement
Shows Revenue - Expenses = Net Income for a period.
SELECT Code, Name, Type, Balance
FROM Accounts
WHERE Type IN ('Income', 'Expense')
AND Balance != 0
AND id NOT IN (SELECT DISTINCT Parent FROM Accounts WHERE Parent != 0)
ORDER BY Type DESC, Code
Presentation:
| Income | |
|---|---|
| Service Revenue | $X.XX |
| Total Income | $X.XX |
| Expenses | |
|---|---|
| Software & Subscriptions | $X.XX |
| Professional Services | $X.XX |
| Total Expenses | $X.XX |
| Net Income (Loss) | $X.XX |
Trial Balance
Lists all accounts with non-zero balances. Debits should equal Credits.
SELECT
Code,
Name,
Type,
CASE WHEN Type IN ('Asset', 'Expense') THEN Balance ELSE 0 END as Debit,
CASE WHEN Type IN ('Liability', 'Equity', 'Income') THEN Balance ELSE 0 END as Credit
FROM Accounts
WHERE Balance != 0
AND id NOT IN (SELECT DISTINCT Parent FROM Accounts WHERE Parent != 0)
ORDER BY Code
Accounts Payable Aging
SELECT
v.Name as Vendor,
b.BillNumber,
b.BillDate,
b.DueDate,
b.AmountDue,
CASE
WHEN b.DueDate >= strftime('%s', 'now') THEN 'Current'
WHEN b.DueDate >= strftime('%s', 'now') - 2592000 THEN '1-30 Days'
WHEN b.DueDate >= strftime('%s', 'now') - 5184000 THEN '31-60 Days'
ELSE '60+ Days'
END as Aging
FROM Bills b
JOIN Vendors v ON b.Vendor = v.id
WHERE b.Status IN ('Open', 'Partial')
ORDER BY b.DueDate