export type AssetType = 'etf' | 'stock' export type IntervalKey = | 'daily' | 'weekly' | 'biweekly' | 'monthly' | 'quarterly' | 'semiannual' | 'annual' export type EndMode = 'date' | 'count' export type PlanStatus = 'active' | 'created' | 'cancelled' export interface InvestAsset { code: string name: string type: AssetType /** 产品英文名称(来自 getSimpleStockPage) */ engName?: string /** 产品本地名称(来自 getSimpleStockPage) */ localName?: string /** 对接产品接口时的主键,如 SZMK-2728 */ productKey?: string exchangeCode?: string productCodeUnique?: string } export interface RecurringPlan { id: string /** 接口计划编号,如 SI-2026-10-08-… */ planNo?: string assets: InvestAsset[] amount: number /** 按数量定投时的每次股数 */ quantity?: number | null investmentType?: 'AMOUNT' | 'QUANTITY' frequencyType?: 'DAILY' | 'WEEKLY' | 'MONTHLY' frequencyDay?: string interval: IntervalKey startDate: string endMode: EndMode endDate: string endCount: number | null noEnd: boolean endDisplay: string status: PlanStatus /** 接口原始状态,如 ACTIVE */ apiStatus?: string } export interface RecurringPlanDraft { assets: InvestAsset[] amount: number interval: IntervalKey startDate: string endDisplay: string endMode: EndMode endDate: string endCount: number | null noEnd: boolean investmentType?: 'AMOUNT' | 'QUANTITY' quantity?: number orderPriceType?: 'MARKET' | 'LIMIT' limitPrice?: number frequencyDay?: string ctOffsetMinutes?: number } export const INTERVAL_KEYS: IntervalKey[] = [ 'daily', 'weekly', 'biweekly', 'monthly', 'quarterly', 'semiannual', 'annual', ]