🧠 Motor de Cotización y Tarifas (PricingService)

El cálculo del precio de un aviso clasificado no es lineal. El sistema utiliza un algoritmo progresivo que evalúa el texto y aplica reglas jerárquicas configuradas en el Admin Panel.
🧮 Fórmula Base
El costo total de un aviso se calcula en el siguiente orden:
- Precio Base del Producto: Define el valor mínimo (Ej: $5,000). Si el producto incluye duración (Ej: cubre 30 días), se calcula el Costo Diario (
BasePrice / DurationDays).
- Costo por Palabras Extra: Se cuentan las palabras y se restan las "Palabras Base" gratuitas. Las palabras excedentes se tasan según escalones (
WordPricingRanges) o un precio fallback.
- Costo por Caracteres Especiales: Símbolos como
!, $, % se cobran por unidad.
- Recargos de Estilo (Surcharges): Negrita, Recuadro o Posición Destacada.
- Descuentos y Promociones: Cupones promocionales (Monto fijo o Porcentaje).
🔍 Reglas Ocultas de Normalización de Texto
Para evitar que los clientes "engañen" al sistema uniendo palabras con símbolos (ej: VENDO!AUTO!BARATO), el motor realiza los siguientes pasos antes de cotizar:
- Extracción de Símbolos: Primero cuenta cuántos caracteres especiales hay según la configuración del rubro.
- Limpieza: Reemplaza los caracteres especiales por espacios en blanco (
VENDO AUTO BARATO).
- Conteo Real: Separa el texto limpio por espacios y saltos de línea para obtener la cantidad real y honesta de palabras.
🎫 Lógica de Cupones y Promociones
- Promociones Automáticas: Se aplican solas si cumplen la condición (
MinDays o DaysOfWeek).
- Cupones Manuales: El cajero o el usuario web ingresa el código. El sistema verifica:
- Que no esté vencido (
ExpiryDate).
- Que el cupón global no haya superado su límite (
MaxUsages).
- Que el usuario específico no haya superado su límite personal de usos (
MaxUsagesPerUser).
⚠️ Atención: Los descuentos se aplican sobre el subtotal de Días contratados, pero después de sumar los recargos visuales.