Añadir Pricing-Engine
34
Pricing-Engine.-.md
Normal file
34
Pricing-Engine.-.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# 🧠 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:
|
||||||
|
|
||||||
|
1. **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`).
|
||||||
|
2. **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*.
|
||||||
|
3. **Costo por Caracteres Especiales:** Símbolos como `!`, `$`, `%` se cobran por unidad.
|
||||||
|
4. **Recargos de Estilo (Surcharges):** Negrita, Recuadro o Posición Destacada.
|
||||||
|
5. **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:
|
||||||
|
|
||||||
|
1. **Extracción de Símbolos:** Primero cuenta cuántos caracteres especiales hay según la configuración del rubro.
|
||||||
|
2. **Limpieza:** Reemplaza los caracteres especiales por **espacios en blanco** (`VENDO AUTO BARATO`).
|
||||||
|
3. **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.
|
||||||
Reference in New Issue
Block a user