from dataclasses import dataclass from datetime import datetime from typing import Optional @dataclass class Address: """Address information for tax calculations""" province: str city: str postal_code: str country: str = "Canada" @dataclass class Receipt: id: str file_name: str upload_date: datetime receipt_date: datetime amount: float tax: float vendor: str category: str description: str # Tax rule fields billing_address: Optional[Address] = None shipping_address: Optional[Address] = None currency: str = "CAD" is_meals_entertainment: bool = False @dataclass class Transaction: id: str transaction_date: datetime amount: float vendor: str notes: str # Tax rule fields currency: str = "CAD" fx_rate: Optional[float] = None @dataclass class Asset: """Asset for depreciation calculations""" id: str name: str purchase_date: datetime purchase_amount: float useful_life_years: int residual_value: float cca_rate: float # Capital Cost Allowance rate asset_class: str @dataclass class Match: receipt: Receipt transaction: Transaction confidence_score: float match_reason: str tax_analysis: Optional[dict] = None