Expense Approval Store
Component Detail
Data Layer
medium complexity
backend
0
Dependencies
2
Dependents
11
Entities
0
Integrations
Description
Data access layer managing queries and mutations against the expense_approvals, expenses, expense_receipts, and audit_logs PostgreSQL tables. Provides optimized queries with joins across users, activities, and expense_receipts for queue rendering, supports server-side pagination and multi-column filtering, and ensures transactional integrity when writing approval decisions alongside audit log entries.
expense-approval-store
Responsibilities
- Query pending expenses with joins to users, activities, expense_types, and expense_receipts
- Persist approval and rejection decisions to the expense_approvals table
- Support server-side pagination and filtering by status, date range, expense type, and user
- Write audit log entries within the same transaction as approval state changes
- Fetch receipt metadata and storage URLs for inline preview rendering
Interfaces
findPendingExpenses(orgId: string, filters: ExpenseQueueFilters, pagination: PaginationParams): Promise<PaginatedResult<ExpenseRow>>
findExpenseById(expenseId: string): Promise<ExpenseRow | null>
createApproval(approval: ExpenseApprovalRecord): Promise<ExpenseApprovalRecord>
updateExpenseStatus(expenseId: string, status: string): Promise<void>
createAuditEntry(entry: AuditLogRecord): Promise<void>
getReceiptsForExpense(expenseId: string): Promise<ExpenseReceiptRow[]>
countPendingByOrganization(orgId: string): Promise<number>
batchUpdateStatus(expenseIds: string[], status: string): Promise<number>
Relationships
Dependents (2)
Components that depend on this component
Related Data Entities (11)
Data entities managed by this component
Activity Approval
19 fields
core
Expense
23 fields
core
Expense Approval
13 fields
core
Expense Receipt
20 fields
core
Expense Type
20 fields
configuration
Reimbursement
17 fields
core
Activity Approvals
14 fields
core
Expense Approvals
13 fields
core
Expense Receipts
22 fields
core
Expense Types
25 fields
configuration
Expenses
31 fields
core