import mongoose, { Schema, Document, Model } from 'mongoose'; export interface IFactorPaquetes { sobre: number; mediano: number; grande: number; } export interface ITarifasConfig extends Document { version: string; tarifaPasajeroFija: number; // Tarifa fija en COP por puesto Cali <-> Buenaventura precioBasePaquete: number; // Costo base inicial para mensajería precioKmPaquete: number; // Costo por kilómetro recorrido factorPaquetes: IFactorPaquetes; // Multiplicador según volumen: sobre (1.0), mediano (1.5), grande (2.0) seguroBasePaquete: number; // Seguro obligatorio por encomienda porcentajeComisionAdmin: number; // Porcentaje que retiene la plataforma (ej. 15 = 15%) costoPenalidadCancelacion: number; // Cargo impuesto al usuario si cancela en estado ACTIVE radioMaxPoolingMetros: number; // Distancia máxima en metros para agrupar pasajeros en Cali ($near / $geoWithin) numeroAtencionWhatsApp: string; // Número de WhatsApp oficial para atención, soporte y mensajes nombreSoporte: string; // Nombre del canal de soporte oficial estaActiva: boolean; createdAt: Date; updatedAt: Date; } const TarifasConfigSchema = new Schema( { version: { type: String, required: true, unique: true, default: 'v1.0', }, tarifaPasajeroFija: { type: Number, required: true, default: 35000, // $35.000 COP tarifa base habitual }, precioBasePaquete: { type: Number, required: true, default: 12000, }, precioKmPaquete: { type: Number, required: true, default: 750, // $750 COP por km }, factorPaquetes: { sobre: { type: Number, default: 1.0 }, mediano: { type: Number, default: 1.5 }, grande: { type: Number, default: 2.0 }, }, seguroBasePaquete: { type: Number, default: 5000, }, porcentajeComisionAdmin: { type: Number, required: true, default: 15, // 15% min: 0, max: 100, }, costoPenalidadCancelacion: { type: Number, required: true, default: 15000, // $15.000 COP penalidad por cancelación tardía }, radioMaxPoolingMetros: { type: Number, default: 4000, // 4 km a la redonda para pooling }, numeroAtencionWhatsApp: { type: String, default: '573167455877', trim: true, }, nombreSoporte: { type: String, default: 'Atención Pacifictrans Go', trim: true, }, estaActiva: { type: Boolean, default: true, }, }, { timestamps: true, } ); export const TarifasConfig: Model = mongoose.models.TarifasConfig || mongoose.model('TarifasConfig', TarifasConfigSchema);