Source code for portfolio_toolkit.account.transaction

from dataclasses import dataclass
from datetime import date
from typing import List, Optional

import pandas as pd


[docs] @dataclass class AccountTransaction: """ Represents a transaction in an account. """ transaction_date: date transaction_type: str amount: float description: Optional[str] = None def __post_init__(self): allowed_types = {"buy", "sell", "deposit", "withdrawal", "income"} if self.transaction_type not in allowed_types: raise ValueError(f"Invalid transaction type: {self.transaction_type}")
[docs] @classmethod def to_dataframe(cls, transactions: List["AccountTransaction"]) -> pd.DataFrame: """Convert a list of AccountTransaction objects to a pandas DataFrame.""" if not transactions: return pd.DataFrame() data = [] for tx in transactions: data.append( { "date": tx.transaction_date, "type": tx.transaction_type, "amount": tx.amount, "description": tx.description, } ) return pd.DataFrame(data)
def __repr__(self): return ( f"AccountTransaction(date={self.transaction_date}, " f"type={self.transaction_type}, amount={self.amount}, " f"description={self.description})" )