GL Detail Reports — Cash Account Register & Transaction Detail¶
Date: 2026-07-01
Problem / motivation¶
Two Peachtree General Ledger reports drill into posted ledger activity: Cash Account Register
("transactions in a cash account including a running balance") and Transaction Detail Report ("all
transactions matching your search criteria"). We have the ledger_entries / ledger_entry_lines data;
these expose it as an account register with a running balance and as a filterable line-level detail
report. Closes two GL rows on the
Peachtree Report Parity tracker.
In scope¶
cash_account_register(account_id, date_filter)— opening balance, then every posted line for that account in the range with a running balance, and the closing balance.transaction_detail_report(date_filter, account_id?, source_type?, generate_csv)— posted ledger lines matching the filters, in date/entry order; CSV-exportable.- Posted entries only (
is_posted = TRUE).Path.REPORTS.
Out of scope¶
- Working Trial Balance (adjustment-column worksheet) — needs persisted adjustments; deferred.
- Cash Account Register is not restricted to cash-type accounts server-side (any account id works); the frontend passes a bank/cash account. Signed as debit − credit (natural for asset accounts).
Data model changes¶
None. Reads ledger_entries (entry_date, entry_number, source_type, memo, is_posted) and
ledger_entry_lines (account_id, debit_amount, credit_amount, memo) joined to accounts. No
migration, no new Path/Resource.
What's being implemented¶
- Responses —
app/graphql/reports/strawberry/gl/gl_report_response.py(CashAccountRegisterResponse+ line type,TransactionDetailResponse). - Repository —
app/graphql/reports/repositories/gl/gl_report_repository.py(cash_account_opening,cash_account_lines,transaction_detail). - Service —
app/graphql/reports/services/gl/gl_report_service.py. - Queries —
app/graphql/reports/queries/gl/gl_report_queries.py. - Tests —
tests/graphql/reports/test_gl_reports.py.
GraphQL surface¶
cashAccountRegister(accountId: UUID!, dateFilter: DateRangeFilter!): CashAccountRegister!
transactionDetailReport(dateFilter: DateRangeFilter!, accountId: UUID, sourceType: SourceType, generateCsv: Boolean! = false): GenericReportPage!
type CashAccountRegister {
accountCode: Int!, accountName: String, startDate: Date!, endDate: Date!,
openingBalance: Decimal!, closingBalance: Decimal!, rows: [CashAccountRegisterLine!]!
}
type CashAccountRegisterLine { entryDate: Date!, entryNumber: String!, sourceType: SourceType, memo: String, debitAmount: Decimal!, creditAmount: Decimal!, runningBalance: Decimal! }
type TransactionDetail { entryDate: Date!, entryNumber: String!, sourceType: SourceType, memo: String, accountCode: Int!, accountName: String, lineMemo: String, debitAmount: Decimal!, creditAmount: Decimal! }
Frontend contract¶
- Cash Account Register: pick a bank/cash account + date range; render
rowswith a running balance column;openingBalance/closingBalancebracket the period. - Transaction Detail: optional
accountIdandsourceTypefilters over a date range; flat line list,generateCsv: true→csvUrl.
Future additions¶
- Working Trial Balance once adjustment entries are persisted.