Reglas de precio

Un plan tarifario tiene un precio base. Todo lo demás
que mueva el precio de una noche es una capa aplicada encima, y las capas
corren en un solo orden fijo. El calendario, una reserva y el channel manager
leen todos el resultado de ese mismo recorrido — no hay una segunda manera de
calcular un precio.

flowchart TD
    START(["Una noche,<br/>un plan tarifario"]) --> CUSTOM{"¿Vendida a un<br/>precio acordado?"}
    CUSTOM -- Sí --> FIN(["Precio final"])
    CUSTOM -- No --> BASE["Tomar el precio base"]
    BASE --> MAN{"¿Hay un precio escrito a mano<br/>para esta noche?"}
    MAN -- Sí --> USEMAN["Usarlo y no<br/>evaluar nada más"]
    MAN -- No --> SEA{"¿Alguna temporada<br/>cubre la noche?"}
    SEA -- Sí --> SEAWIN["Aplicar la temporada de mayor prioridad"]
    SEA -- No --> DEM
    SEAWIN --> DEM
    DEM{"¿Alguna regla de demanda<br/>cumple su condición?"}
    DEM -- Sí --> DEMWIN["Aplicar la regla más cerca<br/>de su umbral"]
    DEM -- No --> DIS
    DEMWIN --> DIS
    DIS{"¿Califica algún<br/>descuento?"}
    DIS -- Sí --> DISWIN["Aplicar SOLO el mayor"]
    DIS -- No --> CLAMP
    DISWIN --> CLAMP
    CLAMP{"¿Fuera del piso o<br/>techo del plan?"}
    CLAMP -- Sí --> FIX["Ajustar al límite"]
    CLAMP -- No --> SUB
    FIX --> SUB
    USEMAN --> SUB
    SUB{"¿Es una variación?"}
    SUB -- Sí --> SUBADJ["Aplicar su propio ajuste"]
    SUB -- No --> NEG
    SUBADJ --> NEG
    NEG{"¿Hay tarifa negociada<br/>de grupo en esta línea?"}
    NEG -- Sí --> NEGWIN["Aplicarla — reemplaza<br/>todo lo de arriba"]
    NEG -- No --> FEES
    NEGWIN --> FEES
    FEES["Sumar los fees de huésped del plan"] --> FIN

Dos reglas separan casi toda la confusión que hay acá:

  • Las capas se acumulan. "Es temporada alta", "estoy casi vacío" y "reservó
    con seis meses de anticipación" son hechos simultáneos sobre la misma noche.
    Las tres aplican.
  • Dentro de una capa, gana exactamente una regla. Una temporada, una regla de
    demanda, un descuento. Nunca dos del mismo tipo.

Las capas

Temporadas — ajustes acotados por fechas que se superponen a la tarifa base
para ciertos días de la semana, unidades y planes. Cuando varias cubren una
noche, gana la de mayor prioridad.

Reglas de demanda — ajustes guiados por la ocupación que se apilan encima de
lo que haya producido la temporada. Cuando varias califican, gana la regla cuyo
umbral esté más cerca de cruzarse.

Descuentos — cuando varios califican, aplica solo el mayor. No se
acumulan.

Piso y techo — topes en porcentaje sobre el resultado compuesto. Existen para
atrapar lo que el motor apiló por su cuenta — una temporada encima de una regla
de demanda que deja una noche al 57.6% de la base sin que nadie haya escrito ese
número.

Un precio escrito a mano termina el recorrido

Si alguien escribió un precio para esa noche en el calendario, ese es el precio
de venta. No lo mueve ninguna temporada, ninguna regla de demanda, ningún
descuento, y ni siquiera el piso y el techo del propio plan.

El razonamiento: cada capa responde la misma pregunta — cuánto cuesta esta noche
— y una persona mirando esa fecha concreta la respondió. Ninguna regla automática
tiene más autoridad que eso. El tope existe para corregir al motor, no para
corregir a alguien que escribió una cifra a propósito.

Lo que termina el recorrido es el precio, no cualquier cosa escrita en esa
fecha. Un precio diario que solo cambia restricciones — cerrar la llegada, subir
la estadía mínima — deja la noche con su precio compuesto: temporada, demanda y
descuento siguen aplicando. Las restricciones tienen su propio orden, explicado en
Planes tarifarios.

Solo dos pasos corren después, y ninguno es una capa de precio: el ajuste propio
de una variación (que es la definición de esa variación) y los fees de huésped
del plan (que se suman al lado del precio por noche, no adentro).

El costo, dicho claro. Un mes de precios escritos a mano apaga el programa
de reserva anticipada para ese mes, y lo hace en silencio salvo que alguien
abra la explicación de precio. Ese es el precio de una regla lo bastante simple
como para explicarse.

Cambiar muchas noches de una vez

Un cambio en bloque ("subir 10% los fines de semana de diciembre", "cerrar la
llegada el 24 y el 25") toma unidades, planes tarifarios, un rango de fechas y,
si hace falta, días de la semana. Puede fijar un precio o subirlo y bajarlo por
porcentaje o por monto, y cambiar estadía mínima, máxima y los cierres.

No es una capa nueva. Lo que escribe son precios diarios, campo por campo, así
que todo lo de esta página sigue valiendo:

  • Un cambio de precio congela esas noches. "Subir 10%" parte del precio que
    la noche tiene hoy (con temporada, demanda y descuento incluidos) y lo guarda
    como precio escrito a mano. Desde ese momento esas noches ya no siguen a las
    temporadas, la demanda ni los descuentos. El resumen previo lo dice antes de
    aplicar, con cuántas noches quedan congeladas.
  • Un cambio de solo restricciones no congela nada. El precio sigue saliendo
    de las capas.
  • Un plan se cambia entero, no por unidad. Si un plan elegido también se
    vende en unidades que no se eligieron, el cambio les llega igual; el resumen
    avisa cuáles.
  • Las reservas existentes no se tocan. El resumen cuenta cuántas caen en esas
    fechas, solo como dato.

Siempre son dos pasos: un resumen que no escribe nada y muestra el antes y el
después de cada fecha, y la aplicación de exactamente ese resumen.

Las tarifas personalizadas lo terminan todavía más fuerte

Una tarifa personalizada es un precio que una persona acordó para una estadía
concreta — un huésped que llamó, que negoció en el mostrador, o que llegó por un
canal que no pasa por ningún plan tarifario.

La reserva no tiene plan tarifario, y rate_plan_id: null es el marcador —
no hay una bandera aparte. Una reserva lleva entonces o un plan tarifario o una
tarifa personalizada, nunca las dos y nunca ninguna.

No se evalúa nada. No es "se evaluó y perdió", como una temporada pierde contra
un precio escrito a mano — una tarifa personalizada se calcula por un camino
aparte que jamás carga una ventana de temporada, demanda o descuento. La cifra
que escribió la persona es literalmente todo el cálculo.

Dos consecuencias:

  • Todo está incluido. Ni fee de niño, ni fee de limpieza, ni fees del plan —
    no hay plan del cual heredarlos, e inventar uno rompería la regla de que el
    total es exactamente lo acordado. Los huéspedes extra siguen contando contra la
    capacidad de la unidad; simplemente no mueven el precio.
  • Mover las fechas exige un precio nuevo. El mapa de noches cubre exactamente
    la estadía, así que cambiar las fechas lo invalida. Aloha Hospitality no va a repetir el
    precio de la última noche ni a repartir el total sobre un rango nuevo — las dos
    cosas serían adivinar un número que nadie dijo.

Un precio acordado es siempre el bruto

El perfil de impuestos de una propiedad dice si sus precios ya traen impuesto
adentro. Para una tarifa publicada eso es una convención de precios corriente: un
precio de lista de 500 bajo un perfil exclusivo se vende a 560, y nadie se
sorprende.

Para un precio acordado no lo es. 500 es lo que una persona prometió por
teléfono, así que 500 es lo que paga el huésped y el impuesto sale de adentro —
bajo ambos perfiles. Cobrar 560 contra un acuerdo de 500 no llega como una
pregunta de configuración; llega como un reclamo del huésped.

Esto cubre las tarifas personalizadas y la tarifa negociada fija por noche de
un grupo. No cubre la tarifa negociada por porcentaje de un grupo — esa
es un descuento medido contra lo que la noche se habría vendido, así que lo que
llega al folio sigue siendo un precio de lista con un modificador encima, y el
perfil sigue gobernando.

Los fees de un plan tarifario son montos configurados, no acordados, así que
siguen obedeciendo al perfil incluso dentro de una reserva cuyas noches no.

En la API

  • Merchant: /api/merchant/pricing-seasons, /pricing-demand-rules,
    /pricing-discount-rules; los precios diarios en
    /rate-plans/{id}/daily-rules, y en bloque con POST /pricing/bulk/preview
    y POST /pricing/bulk. Una tarifa personalizada se fija en la propia reserva.
  • External: GET /rates devuelve precios con cada
    regla aplicable ya aplicada. Deliberadamente no dice qué regla fijó un
    precio — quien integra debería mostrar el precio, no explicarlo. Para cotizar
    una estadía concreta va POST /quote.

Relacionado


Did this page help you?