almeira-web/transporte-cali-buenaventura/backend/src/models/TarifasConfig.ts

96 lines
2.7 KiB
TypeScript

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<ITarifasConfig>(
{
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<ITarifasConfig> =
mongoose.models.TarifasConfig || mongoose.model<ITarifasConfig>('TarifasConfig', TarifasConfigSchema);