feat(mileage): add daily operations report
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user