Skip to main content

Data Models

Entity Relationship Diagram

Models

User

Extends Django's AbstractUser. Key additions:

FieldTypeDescription
currency_preferenceCharField(3)Default: "PHP"
sync_enabledBooleanFieldWhether E2E sync is active
public_keyTextFieldE2E encryption public key (X25519)

Category

System defaults (18 seeded) plus user-created categories.

FieldTypeDescription
userFK(User), nullablenull = system default
nameCharField(100)Category name
iconCharField(50)Icon identifier
colorCharField(7)Hex color code
typeCharField"expense" or "income"
is_defaultBooleanFieldSystem default flag
sort_orderIntegerFieldDisplay ordering

Unique constraint: (user, name, type).

Transaction

UUID primary key for sync compatibility. Supports soft delete.

FieldTypeDescription
idUUIDField (PK)Client-generated UUID
userFK(User)Owner
typeCharField"expense" or "income"
amountDecimalField(12,2)Transaction amount
currencyCharField(3)Default: "PHP"
categoryFK(Category), nullableAssigned category
merchantCharField(255)Merchant/payee name
descriptionCharField(500)Short description
notesTextFieldAdditional notes
dateDateFieldTransaction date
timeTimeField, nullableTransaction time
payment_methodCharField(50)Payment method
is_recurringBooleanFieldGenerated from recurring rule
recurring_ruleFK(RecurringRule)Source rule
client_idUUIDField (unique)ID from mobile device
deleted_atDateTimeField, nullableSoft delete timestamp

TransactionLineItem

Individual items within a transaction (e.g., receipt line items).

FieldTypeDescription
transactionFK(Transaction)Parent transaction (cascade delete)
nameCharField(255)Item name
quantityDecimalField(8,3)Quantity (default: 1)
unit_priceDecimalField(10,2)Price per unit
total_priceDecimalField(10,2)Line total
sort_orderIntegerFieldDisplay ordering

Receipt

Receipt image with OCR/AI processing results.

FieldTypeDescription
idUUIDField (PK)Client-generated UUID
userFK(User)Owner
imageImageFieldReceipt image file
document_typeCharFieldreceipt, bill, screenshot, etc.
raw_ocr_textTextFieldRaw OCR output
parsed_dataJSONFieldStructured extraction result
ai_confidenceFloatFieldAI confidence score
processing_statusCharFieldpending, processing, completed, failed
transactionFK(Transaction)Created on confirm

Inherits TimestampMixin and SyncMixin.

Budget

Per-category or overall budgets with computed spend.

FieldTypeDescription
idUUIDField (PK)Client-generated UUID
userFK(User)Owner
categoryFK(Category), nullablenull = overall budget
amountDecimalField(12,2)Budget limit
periodCharFieldweekly, biweekly, monthly
start_dateDateFieldBudget start date
is_activeBooleanFieldActive flag

Spent and remaining amounts are computed from transactions at query time.

RecurringRule

Rules for auto-generating transactions on a schedule.

FieldTypeDescription
idUUIDField (PK)Client-generated UUID
userFK(User)Owner
typeCharField"expense" or "income"
amountDecimalField(12,2)Transaction amount
categoryFK(Category)Category
frequencyCharFieldweekly, biweekly, monthly, quarterly, annually
next_dateDateFieldNext generation date
end_dateDateField, nullableRule expiration
is_activeBooleanFieldActive flag