Розробка платформи для бронювання віделів
Платформа бронювання віделів — складна система з управлінням номерним фондом, тарифами, динамічним ціноутворенням, інтеграцією з PMS-системами віделів та GDS-дистрибуцією. Розробка з нуля до рівня Booking.com — багаторічний проект, але регіональний агрегатор або B2B-інструмент для мережі віделів — реалістична задача.
Модель даних: номерний фонд
Hotel
└── RoomType (Стандарт, Делюкс, Сьют)
├── Атрибути (площа, вид, вміщення, зручності)
└── Inventory (кількість номерів даного типу)
└── Rate Plans (Невозвратний, Гібкий, Завтрак включено)
└── Availability × Date × Price
Управління доступністю: для кожного типу номера та кожної дати зберігається quota (доступна кількість) та price. При бронюванні quota зменшується на 1.
CREATE TABLE room_availability (
room_type_id, date DATE, rate_plan_id,
available_count INT NOT NULL DEFAULT 0,
price_per_night DECIMAL(10,2),
PRIMARY KEY (room_type_id, date, rate_plan_id)
);
-- Атомарне бронювання з перевіркою остатку
UPDATE room_availability
SET available_count = available_count - 1
WHERE room_type_id = $1 AND date = ANY($dates)
AND rate_plan_id = $2 AND available_count > 0;
Мультиночне бронювання
Бронювання охоплює кілька ночей. Ціна підсумовується по ночах (на різні дати можуть бути різні тарифи). Потрібно оновити availability для кожної дати чекіну.
Динамічне ціноутворення
Revenue Management System (RMS) автоматично коригує тарифи на основі:
- Заповняємості (occupancy): якщо номери швидко закінчуються — ціну вверх
- Опережаючого попиту: багато пошуків на певну дату → ціну вверх
- Сезонності та подій (конференції, святи)
- Цін конкурентів (rate parity monitoring)
Простої реалізації: cron-задача раз на годину пересчитує тарифи за правилами.
Пошук з фільтрами
Пошук «відели в Сочі, 2–5 серпня, 2 гості, 1 номер»:
SELECT h.*, rt.*, ra.price_per_night
FROM hotels h
JOIN room_types rt ON rt.hotel_id = h.id
JOIN room_availability ra ON ra.room_type_id = rt.id
WHERE h.city = 'Sochi'
AND ra.date BETWEEN '2024-08-02' AND '2024-08-04'
AND rt.max_occupancy >= 2
GROUP BY h.id, rt.id
HAVING MIN(ra.available_count) > 0 -- всі ночи доступні
ORDER BY SUM(ra.price_per_night) ASC;
Інтеграція з Channel Manager / PMS
Відели використовують PMS (Property Management System: Opera, Fidelio, SHELTER) для управління номерним фондом. Оновлення доступності та цін повинні синхронізуватися:
OTA-інтеграція: стандарт OTA XML (Open Travel Alliance) для двосторонньої синхронізації з GDS та OTA-каналами.
Channel Manager: проміжний шар (SiteMinex, Effortless, MyAllocator) агрегує дані віделю та розподіляє по каналах через єдиний API.
Прямий PMS API: для великих віделів — пряма інтеграція через REST або SOAP API конкретної PMS.
Політика скасування
Тарифні плани мають різні політики:
- Невозвратний (Non-refundable): знижка 10–20%, скасування без повернення
- Гібкий (Flexible): скасування за 24–48 годин — повний повернення
- Частковий повернення: % залежить від часу до заїзду
Оплата та гарантії
Два режими оплати:
- Pay now: оплата при бронюванні (через Stripe/ЮКасса)
- Pay at hotel: гарантія картою (авторизація без списання), оплата на стійці
Для «Pay at hotel» — Stripe PaymentIntent з capture_method: manual. Авторизуємо карту при бронюванні, capture — при чекіні.
Карти та геопошук
Відображення віделів на карті — Mapbox GL JS або Leaflet з кластеризацією. PostGIS для геопошуку («відели в 2 км від пляжу» або «всередину вибраної області на карті»).
Терміни
MVP (каталог віделів, пошук по датах, бронювання, оплата, ЛК): 4–5 місяців. З Channel Manager, динамічними тарифами, мобільним додатком, PMS-інтеграцією: 8–14 місяців.







