123 lines
3.1 KiB
TypeScript
123 lines
3.1 KiB
TypeScript
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;
|
|
}
|