Skip to main content

Database Schema

Core Tables

companies

Multi-tenant root table.

ColumnTypeDescription
idUUIDPrimary key
company_codeVARCHAR(20)Unique code
company_nameVARCHAR(255)Display name
base_currencyVARCHAR(3)Functional currency
fiscal_year_start_monthINTEGERFY start month

users

System users.

ColumnTypeDescription
idUUIDPrimary key
emailVARCHAR(255)Unique email
password_hashVARCHAR(255)Bcrypt hash
is_activeBOOLEANSoft delete

company_users

User-company membership with roles.

ColumnTypeDescription
company_idUUIDFK to companies
user_idUUIDFK to users
roleVARCHAR(20)ADMIN, ACCOUNTANT, etc.

chart_of_accounts

Chart of accounts with hierarchy.

ColumnTypeDescription
company_idUUIDFK to companies
codeVARCHAR(20)Account code (numeric)
nameVARCHAR(255)Account name
account_typeVARCHAR(20)ASSET, LIABILITY, etc.
normal_balanceVARCHAR(10)DEBIT or CREDIT
parent_idUUIDSelf-ref for hierarchy
is_cash_equivalentBOOLEANFor cash flow statement

journal_entries

Journal entry headers.

ColumnTypeDescription
company_idUUIDFK to companies
journal_numberVARCHAR(50)Auto-generated
journal_dateDATETransaction date
statusVARCHAR(20)DRAFT, POSTED, etc.
total_debitDECIMAL(19,4)Must equal total_credit
total_creditDECIMAL(19,4)Must equal total_debit
fiscal_period_idUUIDFK to fiscal_periods

journal_lines

Journal entry line items.

ColumnTypeDescription
journal_entry_idUUIDFK to journal_entries
account_idUUIDFK to chart_of_accounts
debit_amountDECIMAL(19,4)Debit (0 if credit)
credit_amountDECIMAL(19,4)Credit (0 if debit)
cost_center_idUUIDFor P&L accounts

fiscal_periods

Monthly/quarterly periods.

ColumnTypeDescription
company_idUUIDFK to companies
fiscal_yearINTEGERYear
period_numberINTEGER1-12
statusVARCHAR(20)OPEN, CLOSED

documents

Source document metadata.

ColumnTypeDescription
company_idUUIDFK to companies
filenameVARCHAR(255)Original filename
sha256_hashVARCHAR(64)Content hash
storage_pathVARCHAR(500)S3 path
journal_entry_idUUIDLinked journal

audit_log

Complete audit trail.

ColumnTypeDescription
entity_typeVARCHAR(50)journal_entry, account
entity_idUUIDRelated entity
actionVARCHAR(20)CREATE, POST, REVERSE
old_valuesJSONBPrevious state
new_valuesJSONBNew state
changed_byUUIDUser who made change