export type MileageReportStatus = 'PREVIEW' | 'ARCHIVED'; export type MileageReportSource = 'LIVE' | 'AUTO' | 'XLSX_IMPORT'; export type MileageReportTone = 'positive' | 'warning' | 'critical' | 'neutral'; export interface MileageReportTrendPoint { date: string; totalMileage: number; } export interface MileageReportBreakdown { name: string; vehicleCount: number; totalMileage: number; averageMileage: number; } export interface MileageReportVehicle { plate: string; status: string; customer: string | null; department: string | null; inventoryRegion: string | null; dailyMileage: number; cumulativeMileage: number; completionRate: number; mileageBand: 'LOW' | 'HIGH' | 'INVENTORY'; /** 以日报日期为结束日的近7日逐日里程;旧快照迁移前可能为空。 */ trend?: MileageReportTrendPoint[]; } export interface MileageReportGroup { targetId: number; targetName: string; displayName: string; vehicleCount: number; operatingCount: number; inventoryCount: number; dailyMileage: number; operatingMileage: number; inventoryMileage: number; yesterdayMileage: number; dayOverDayDelta: number; dayOverDayRate: number | null; lowMileageCount: number; highMileageCount: number; cumulativeMileage: number; totalMileageTarget: number; completionRate: number; qualifiedCount: number; halfQualifiedCount: number; currentYearTarget: number; currentYearCompleted: number; remainingMileage: number; dailyRequiredMileage: number; assessmentPeriods: string[]; trend: MileageReportTrendPoint[]; inventoryRegions: MileageReportBreakdown[]; departments: MileageReportBreakdown[]; vehicles: MileageReportVehicle[]; } export interface MileageReportTotals { vehicleCount: number; operatingCount: number; inventoryCount: number; dailyMileage: number; operatingMileage: number; inventoryMileage: number; yesterdayMileage: number; dayOverDayDelta: number; dayOverDayRate: number | null; averageOperatingMileage: number; lowMileageCount: number; highMileageCount: number; qualifiedCount: number; halfQualifiedCount: number; dailyRequiredMileage: number; dailyTaskGap: number; } export interface MileageReportInsight { tone: MileageReportTone; title: string; detail: string; } export interface MileageReportQualityNote { level: 'info' | 'warning'; message: string; } export interface DailyMileageReport { version: 1; reportDate: string; title: string; status: MileageReportStatus; source: MileageReportSource; generatedAt: string; sourceUpdatedAt: string | null; totals: MileageReportTotals; trend: MileageReportTrendPoint[]; groups: MileageReportGroup[]; insights: MileageReportInsight[]; qualityNotes: MileageReportQualityNote[]; } export interface MileageReportHistoryItem { reportDate: string; status: MileageReportStatus; source: MileageReportSource; generatedAt: string; vehicleCount: number; operatingCount: number; inventoryCount: number; dailyMileage: number; dayOverDayRate: number | null; } export interface MileageReportHistoryResponse { items: MileageReportHistoryItem[]; latestDate: string | null; }