diff --git a/src/server/routes/scheduling/types.ts b/src/server/routes/scheduling/types.ts new file mode 100644 index 0000000..eac2b5a --- /dev/null +++ b/src/server/routes/scheduling/types.ts @@ -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; +}