initial commit
This commit is contained in:
commit
95b8af2360
15 changed files with 1519 additions and 0 deletions
99
models.py
Normal file
99
models.py
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
from datetime import datetime
|
||||
from enum import Enum
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class AccountType(str, Enum):
|
||||
ASSET = "asset"
|
||||
LIABILITY = "liability"
|
||||
EQUITY = "equity"
|
||||
REVENUE = "revenue"
|
||||
EXPENSE = "expense"
|
||||
|
||||
|
||||
class Account(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
account_type: AccountType
|
||||
description: Optional[str] = None
|
||||
user_id: Optional[str] = None # For user-specific accounts
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class CreateAccount(BaseModel):
|
||||
name: str
|
||||
account_type: AccountType
|
||||
description: Optional[str] = None
|
||||
user_id: Optional[str] = None
|
||||
|
||||
|
||||
class EntryLine(BaseModel):
|
||||
id: str
|
||||
journal_entry_id: str
|
||||
account_id: str
|
||||
debit: int = 0 # in satoshis
|
||||
credit: int = 0 # in satoshis
|
||||
description: Optional[str] = None
|
||||
|
||||
|
||||
class CreateEntryLine(BaseModel):
|
||||
account_id: str
|
||||
debit: int = 0
|
||||
credit: int = 0
|
||||
description: Optional[str] = None
|
||||
|
||||
|
||||
class JournalEntry(BaseModel):
|
||||
id: str
|
||||
description: str
|
||||
entry_date: datetime
|
||||
created_by: str # wallet ID of user who created it
|
||||
created_at: datetime
|
||||
reference: Optional[str] = None # Invoice ID or reference number
|
||||
lines: list[EntryLine] = []
|
||||
|
||||
|
||||
class CreateJournalEntry(BaseModel):
|
||||
description: str
|
||||
entry_date: Optional[datetime] = None
|
||||
reference: Optional[str] = None
|
||||
lines: list[CreateEntryLine]
|
||||
|
||||
|
||||
class UserBalance(BaseModel):
|
||||
user_id: str
|
||||
balance: int # positive = castle owes user, negative = user owes castle
|
||||
accounts: list[Account] = []
|
||||
|
||||
|
||||
class ExpenseEntry(BaseModel):
|
||||
"""Helper model for creating expense entries"""
|
||||
|
||||
description: str
|
||||
amount: int # in satoshis
|
||||
expense_account: str # account name or ID
|
||||
is_equity: bool = False # True = equity contribution, False = liability (castle owes user)
|
||||
user_wallet: str
|
||||
reference: Optional[str] = None
|
||||
|
||||
|
||||
class ReceivableEntry(BaseModel):
|
||||
"""Helper model for creating accounts receivable entries"""
|
||||
|
||||
description: str
|
||||
amount: int # in satoshis
|
||||
revenue_account: str # account name or ID
|
||||
user_wallet: str
|
||||
reference: Optional[str] = None
|
||||
|
||||
|
||||
class RevenueEntry(BaseModel):
|
||||
"""Helper model for creating revenue entries"""
|
||||
|
||||
description: str
|
||||
amount: int # in satoshis
|
||||
revenue_account: str
|
||||
payment_method_account: str # e.g., "Cash", "Bank", "Lightning"
|
||||
reference: Optional[str] = None
|
||||
Loading…
Add table
Add a link
Reference in a new issue