export interface Transaction { id?: string; date: Date; description: string; amount: number; // Personal portion (after business split) in CAD totalAmount?: number; // Total original amount in CAD businessAmount?: number; // Business portion in CAD businessPercentage?: number; // Percentage attributed to business (0-100) originalAmount?: number; // Original amount before conversion originalCurrency?: string; // Original currency (CAD, EUR, etc.) currency?: string; // Current/display currency (for backward compatibility) category: string; type: "recurring" | "one-time"; program?: string; status?: "actual" | "committed" | "projected"; fundType?: "restricted" | "unrestricted"; frequency?: "weekly" | "biweekly" | "monthly" | "quarterly" | "custom"; customMonths?: number; endDate?: Date; probability: number; isConfirmed: boolean; isTest?: boolean; notes?: string; projectedDate?: Date; runningBalance?: number; } export interface RevenueOpportunity { _id?: string; id?: string; source: string; amount: number; probability: number; targetDate: Date; stage: string; notes?: string; createdAt?: Date; updatedAt?: Date; } export interface CashFlowProjection { date: Date; balance: number; inflow: number; outflow: number; netFlow: number; projectedBalance: number; } export interface RunwayScenarios { conservative: number; realistic: number; optimistic: number; cashOnly: number; } export interface CashPosition { balance: number; totalInflow: number; totalOutflow: number; netFlow: number; } export interface TransactionForecast { month: Date; recurring: Transaction[]; oneTime: Transaction[]; pipeline: Transaction[]; totalInflow: number; totalOutflow: number; runningBalance: number; } export interface CombinedCashFlow { historical: CashFlowProjection[]; projected: CashFlowProjection[]; combined: CashFlowProjection[]; currentBalanceIndex: number; } export interface AffordabilityCheck { canAfford: boolean; currentAvailable?: number; newBalance?: number; currentRunwayWeeks?: number; newRunwayWeeks?: number; riskLevel?: string; recommendation?: string; reason?: string; availableAmount?: number; shortfall?: number; }