Database Schema
Core Definition: PostgreSQL core table structures and relationships.
Key Tables
- Users: User accounts with email/password
- Accounts: Chart of accounts (ASSET/LIABILITY/EQUITY/INCOME/EXPENSE)
- JournalEntries: Journal entry headers
- JournalLines: Journal entry lines (debit/credit)
- BankStatements: Imported statement headers
- BankStatementTransactions: Statement transactions
- ReconciliationMatches: Match records
- ChatSessions/ChatMessages: AI chat history
Design Constraints
Naming Conventions
- Explicit Enums: ALWAYS provide
nameparameter to SQLAlchemyEnum- ❌ Bad:
sa.Column(sa.Enum(Status)) - ✅ Good:
sa.Column(sa.Enum(Status, name="journal_entry_status"))
- ❌ Bad:
- Migration Length: Keep Alembic migration descriptions < 100 characters
Async Session Management
- Use
get_dbFastAPI dependency for routers - Routers handle commit/rollback; Services use
flush() - Ensure every session is closed
Recommended Patterns
- Use
DECIMAL(18,2)for amounts - Use
created_at/updated_ataudit fields - Use UUID primary keys
Prohibited Patterns
- NEVER use FLOAT for monetary amounts
- NEVER directly delete posted entries, only void
Index Strategy
CREATE INDEX idx_accounts_user_id ON accounts(user_id);
CREATE INDEX idx_journal_entries_user_id ON journal_entries(user_id);
CREATE INDEX idx_journal_entries_status ON journal_entries(status);
CREATE INDEX idx_journal_entries_date ON journal_entries(entry_date);
Source Files
- Models:
apps/backend/src/models/ - Migrations:
apps/backend/migrations/ - Schemas:
apps/backend/src/schemas/
Source: wangzitian0/finance_report — distributed by TomeVault.