diff --git a/Pricing-Engine.-.md b/Pricing-Engine.-.md new file mode 100644 index 0000000..c93b0c8 --- /dev/null +++ b/Pricing-Engine.-.md @@ -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. \ No newline at end of file