Add year-end tax report queries for period-specific reporting

Adds date-parameterized SQL queries for Income Statement, Expense
Detail, Vendor Payment Summary, and General Ledger. These filter
TransactionLines by date range instead of using cumulative balances,
enabling tax year and other period-specific financial reports.
This commit is contained in:
2026-02-22 18:26:19 -05:00
parent fdb813d647
commit 5693d7b451

View File

@@ -177,6 +177,74 @@ WHERE b.Status IN ('Open', 'Partial')
ORDER BY b.DueDate
```
## Year-End Tax Reports
Date-parameterized queries for tax year reporting. Replace `{start_date}` and `{end_date}` with Unix timestamps (e.g., 2025: start=1735776000, end=1767312000).
### Period Income Statement (P&L)
Sums TransactionLines by Income/Expense account for a date range (Schedule C core data):
```sql
SELECT a.Code, a.Name, a.Type,
SUM(tl.Debit) as Debits, SUM(tl.Credit) as Credits
FROM TransactionLines tl
JOIN Transactions t ON tl.Transaction = t.id
JOIN Accounts a ON tl.Account = a.id
WHERE a.Type IN ('Income', 'Expense')
AND t.Date >= {start_date} AND t.Date < {end_date}
GROUP BY a.Code, a.Name, a.Type
ORDER BY a.Type DESC, a.Code
```
### Period Expense Detail
All expense transactions with individual line items, grouped by account:
```sql
SELECT t.Date, a.Code, a.Name, t.Description, t.Reference, tl.Debit, tl.Credit
FROM TransactionLines tl
JOIN Transactions t ON tl.Transaction = t.id
JOIN Accounts a ON tl.Account = a.id
WHERE a.Type = 'Expense'
AND t.Date >= {start_date} AND t.Date < {end_date}
ORDER BY a.Code, t.Date
```
### Vendor Payment Summary
Total payments per vendor for 1099 determination ($600+ threshold):
```sql
SELECT v.Name as Vendor, COUNT(bp.id) as Payments, SUM(bp.Amount) as TotalPaid
FROM BillPayments bp
JOIN Bills b ON bp.Bill = b.id
JOIN Vendors v ON b.Vendor = v.id
WHERE bp.PaymentDate >= {start_date} AND bp.PaymentDate < {end_date}
GROUP BY v.Name
ORDER BY TotalPaid DESC
```
### Period General Ledger
All transactions in the period with full detail:
```sql
SELECT t.Date, t.Description, t.Reference, t.Status,
a.Code, a.Name, tl.Debit, tl.Credit, tl.Memo
FROM TransactionLines tl
JOIN Transactions t ON tl.Transaction = t.id
JOIN Accounts a ON tl.Account = a.id
WHERE t.Date >= {start_date} AND t.Date < {end_date}
ORDER BY t.Date, t.id, a.Code
```
### Point-in-Time Balance Sheet / Trial Balance
Use `Accounts.Balance` (cumulative) for businesses that started tracking in Grist during the reporting year. If prior-year data exists, subtract beginning-of-year balances. See the [Financial Reports](#financial-reports) section for balance queries.
> **Note**: If `tl.Transaction` JOIN fails due to the reserved word issue, fall back to `get_records` on TransactionLines + programmatic joining.
## Reconciliation Queries
### Cleared Balance for Bank Account