Files
ln-bi/src/shared/mileage/daily-report.ts
T

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;
}