feat(scheduling): add backend type definitions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
99
src/server/routes/scheduling/types.ts
Normal file
99
src/server/routes/scheduling/types.ts
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
export interface SchedulingVehicleInfo {
|
||||||
|
plateNumber: string;
|
||||||
|
targetId: number;
|
||||||
|
targetName: string;
|
||||||
|
vehicleType: string;
|
||||||
|
totalMileage: number;
|
||||||
|
completionRate: number;
|
||||||
|
yearTarget: number;
|
||||||
|
region: string;
|
||||||
|
province: string;
|
||||||
|
customer: string | null;
|
||||||
|
customerAvgDaily: number;
|
||||||
|
predictedYearEnd: number;
|
||||||
|
daysLeft: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CandidateVehicle {
|
||||||
|
plateNumber: string;
|
||||||
|
targetId: number | null;
|
||||||
|
targetName: string | null;
|
||||||
|
vehicleType: string;
|
||||||
|
totalMileage: number;
|
||||||
|
completionRate: number;
|
||||||
|
yearTarget: number | null;
|
||||||
|
region: string;
|
||||||
|
province: string;
|
||||||
|
mileageGap: number;
|
||||||
|
predictedAfterSwap: number;
|
||||||
|
canQualifyAfterSwap: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SchedulingSuggestion {
|
||||||
|
id: string;
|
||||||
|
priority: 'high' | 'medium';
|
||||||
|
type: 'replace_qualified' | 'rescue_hopeless';
|
||||||
|
currentVehicle: SchedulingVehicleInfo;
|
||||||
|
candidates: CandidateVehicle[];
|
||||||
|
reason: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SchedulingSummary {
|
||||||
|
qualifiedCount: number;
|
||||||
|
hopelessCount: number;
|
||||||
|
suggestionCount: number;
|
||||||
|
estimatedGain: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SchedulingTargetOption {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
vehicleCount: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SchedulingResponse {
|
||||||
|
summary: SchedulingSummary;
|
||||||
|
suggestions: SchedulingSuggestion[];
|
||||||
|
targets: SchedulingTargetOption[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotifyRequest {
|
||||||
|
suggestionId: string;
|
||||||
|
currentPlate: string;
|
||||||
|
candidatePlate: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type VehicleClassification = 'qualified' | 'hopeless' | 'normal';
|
||||||
|
|
||||||
|
export interface EnrichedVehicle {
|
||||||
|
plateNumber: string;
|
||||||
|
targetId: number;
|
||||||
|
targetName: string;
|
||||||
|
vehicleType: string;
|
||||||
|
totalMileage: number;
|
||||||
|
currentYearMileage: number;
|
||||||
|
completionRate: number;
|
||||||
|
yearTarget: number;
|
||||||
|
isQualified: boolean;
|
||||||
|
currentYearIsQualified: boolean;
|
||||||
|
dailyRequiredMileage: number;
|
||||||
|
region: string;
|
||||||
|
province: string;
|
||||||
|
customer: string | null;
|
||||||
|
customerAvgDaily: number;
|
||||||
|
predictedYearEnd: number;
|
||||||
|
daysLeft: number;
|
||||||
|
classification: VehicleClassification;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface InventoryVehicle {
|
||||||
|
plateNumber: string;
|
||||||
|
vehicleType: string;
|
||||||
|
region: string;
|
||||||
|
province: string;
|
||||||
|
totalMileage: number;
|
||||||
|
targetId: number | null;
|
||||||
|
targetName: string | null;
|
||||||
|
yearTarget: number | null;
|
||||||
|
completionRate: number;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user