Парсеры XLS-прайсов
СОДЕРЖАНИЕ
- Описание
- Управление обработкой прайса
- Коллекция парсеров
- Генератор размещений
Описание
Прайсы принимающих туроператоров содержат цены, размещения (формулы размещения туристов разных форматов), названия номеров, пансионов (питания), отелей, курортов и другого рода информации. Данные, переносимые из них в базу отправляющего туроператора, являются основой для расчета конечных прайсов и онлайн-бронирования. Цены, указанные в прайсе принимающего туроператора, называются сырыми ценами. Особенность прайсов и вообще проблемы прайсов в том, что прайс каждого принимающего туроператора уникален в структуре данных, количестве и изощренности опечаток и степени видоизменяемости от года к году, от прайса к прайсу. Эта проблема решается в "Турпутевке", как и в других подобных программах, созданием неограниченного количества программ, содержащим код обработки только одного из форматов. Называются такие программы парсерами (от англ. parse - анализ, разбор). Программа не работает отдельно от модуля "Турпутевки", а является ее частью и используется только для преобразования уникального формата данных из файла прайса в набор данных одного формата, который в дальнейшем обрабатывается и заносится в базу.
Файлы прайсов должны иметь mime-тип application/vnd.ms-excel, в простонаречьи - быть XLS-файлами (формат MS Excel 97/2000/2003/2004). Формально поддерживается также CSV-формат, но на практике таких прайсов не встречается, главным образом из-за поголовного распространения MS Office, а также из-за того, что в CSV не поддерживается несколько листов. Другие форматы файлов не поддерживаются, хотя некоторые предельно непросвещенные принимающие туроператоры могут формировать прайсы в форматах PDF, DOC и прочих. Прайсы подобного рода придется вручную конвертировать в XLS.
Общая политика обработки прайсов: парсеры должны быть написаны таким образом, чтобы минимизировать количество изменений файла прайса вручную оператором. Рутина должна быть перенесена на плечи компьютера. Пусть из-за этого появятся лишние блоки кода и парсер станет более интеллектуальным. Отступать от этого правила стоит только тогда, когда в исходном прайсе явно нарушена логика, либо не хватает входных данных. Также бывают моменты, когда в угоду автоматизации приходится "балансировать на лезвии ножа" и работа кода становится неоднозначной, стремясь компенсировать сухость или ущербность исходной информации и может привести к ошибкам интерпретации. В таком случае стоит выбирать золотую середину между уверенностью распознавания и объемом предварительных ручных правок. Список самых часто встречаемых ошибок в исходных прайсах:
- Несуществующие дни месяца. 31 апреля, 31 ноября и прочие месяцы, в которых не существует 31 числа. На данный момент корректируется функцией распознавания ячейки автоматически.
- Слова-термины в формуле размещения, написанные с ошибкой: sigle, tiple, tpiple, trile, doube, даже disable вместо double... Перечень распознаваемых ошибок полнится, но их реестр никогда не будет полон ( вспомните: "ещё"/"исчо").
- Произвольные названия класса отеля. SPC.CAT, Special - это НЕ КЛАСС отеля, что бы об этом ни думали те, кто это пишет - так как это не несет никакой характеризующей информации. Приходится исправлять вручную.
- Национальные символы в англоязычных терминах. Например, турецкая буква "İ" в терминах C/IN, TRIPLE, SINGLE. Что-то распознается, что-то нет.
Сырой формат прайса
Прайс, цены в котором разбиты на составляющие. Типичный список составляющих: базовая цена за номер, доплата за детскую кровать, за взрослую кровать, за расширенный пансион, за обязательные ужины. Нетипичные: за вид на более живописную сторону, за кондиционер, и тд. Является более сложным в заливке и просчете, так как приходится генерировать места и калькулировать цены. Зачастую требует доработок в виде указания формулы максимального размещения, например: 1+1/2(2-6,6-12). Распространен среди мелких/молодых принимающих туроператоров или в странах, где отрасль туризма не так сильно развита. Особенность: цены прайса получаются более компактными в базе, главным образом за счет одной-двух строк с формулами размещения, вместо десятка и более строк, по одной на название размещения.
Готовый формат прайса
Прайс, в котором на один тип размещения в один момент времени указана только одна цена. Как правило, список возможных размещений немал (например в диапазоне от SINGLE до TRIPLE+2CHD(2-12) существует 9 различных размещений, каждое со своей ценой. Прайсы этого формата более легки для обработки и просчета, присущи странам с сильно развитым туризмом (Турция, Египет) и крупным туроператорам. Существуют промежуточные формы между сырым и готовым форматом, главным образом за счет доплат в праздники, иногда с другими доплатами. Цен для заливки в таком прайсе больше, чем в сыром виде. При просчете в выходном прайсе количество цен сырого и готового формата прайсов одинаково и зависит главным образом от количества туров, отелей, номеров в отелях, количества или формул размещений.
Типы листов прайса
В зависимости от формата прайса и количества данных, в нем может быть разное количество листов. Кроме листов с ценами, практически всегда существуют листы ссылок (в списке листов идут первыми). Если используется один лист на курорт, листов немного, но каждый из них имеет много информации - данные об отелях указаны один под другим. Второй вариант - каждый отель указан на отдельном листе. В этом случае листов с ценами гораздо больше и необходимость в листах ссылок сильнее. В этом случае в некоторых прайсах привязку отеля к курорту можно определить только по листам ссылок. Если парсер не поддерживает листы ссылок, их нужно пропускать при обработке.
Управление обработкой прайса
При обработке (заливке) прайса в базу возможно управлять объемом загружаемых данных (указывая диапазон обрабатываемых страниц), указывать дополнительные данные, которые будут занесены в базу в момент заливки и манипулировать стадиями обработки файла. Цены, залитые в справочник продукта в пакете, будут привязаны к пакету и продукту - для использования их в другом пакете придется продублировать операцию обработки прайса и заливки цен.
Окно настройки заливки данных доступно на странице ресурсов пакета, в рамках которого вы заливаете прайс. Кнопка открытия окна находится на поле конкретного продукта прайса (отель). Перед началом операции вы можете определить диапазон страниц, указать имя парсера, дополнительные жестко заданные значения полей (например, название страны, области, города, номера SPO и др.) и выбрать стадии, которые пройдет прайс во время обработки. Также можно включить сохранение файла журнала распознавания с полным и частичным журналированием. Будьте осторожны: журналирование потребляет ресурсы, и создает большие файлы журналов, особенно при полном журналировании.
Типичные стадии заливки файла в первый раз (в успешности заливки содержимого которого вы не уверены)
- Указываете все листы, содержащие полезную информацию. При этом, если парсер не поддерживает индексные страницы, вы должны исключить их из диапазона обработки (и наоборот). Указываете дополнительные значения (обычно страна, регион, иногда еще город(курорт), название компании-туроператора, номер СПО).
- Указываете, что пропускаете стадию заливки ("Только парсинг").
- Нажимаете "OK" и переходите на следующую страницу, где указываете загружаемый файл. Нажатие "Продолжить" на втором окне отправит файл на сервер и создаст отдельный процесс парсера файла.
- Обновляя страницу, следите за процентом обработки записей и сообщениями парсера. Если появилась ошибка, постарайтесь понять причину. Чаще всего причина в ошибочных данных какой-либо ячейки. При этом в сообщении указывается адрес ячейки и название листа в файле прайса.
- Если сообщения об ошибке достаточно для решения проблемы, решите ее, изменив файл прайса, и начните всю последовательность действий сначала, до тех пор, пока не исправите все ошибки, возникающие на стадии обработки записей. При этом осознавайте, что заливки в базу не произойдет - вы лишь подготавливаете файл к конечной, успешной обработке. Рекомендуется записывать все сделанные в файле исправления, чтобы не делать повторную работу с многократными заливками в случае присылания прайса с обновленными ценами.
- Если текст ошибки неясен:
- Запомните название листа прайса, указанного в ошибке (указан самым последним), откройте файл прайса и запомните номер этого листа в файле.
- Откройте снова окно настройки загрузки прайса в продукте. Кроме пункта "Только парсинг" выберите также два пункта "отладка" и "поверхностно".
- Укажите диапазон листов, а не все листы и укажите единственный номер - номер проблемного листа в обоих ячейках "с" и "по".
- Повторите операцию заливки файла и дождитесь повторения ошибки в сообщении парсера.
- Щелкните ссылку "Журнал парсера: предпросмотр".
- Визуально проанализируйте ошибку - перед вами будет схематичное изображение листа прайса с ячейками, окрашенными в разные цвета. Цвет, отличный от белого, означает, что ячейка была распознана, как несущая полезную информацию. Разные типы данных окрашивают ячейку в тот или иной цвет. В случае, если ячейка содержит сразу несколько разных типов информации, она будет окрашена только в один цвет. Если полученной информации достаточно для решения проблемы, исправьте файл прайса и повторите обработку без отладки и без вставки данных, пытаясь в итоге завершить чтение файла парсером без ошибок.
- Если информации недостаточно или если парсер не поддерживает цветовую отладку, повторите обработку этого листа, сняв галку в пункте "поверхностно". В этом случае размер файла журнала вырастет, а также увеличится объем доступной для анализа информации (используйте раскрывающиеся блоки текста в каждой строке).
- Если проблема до сих пор не может быть решенной, прекратите эксперименты и обратитесь к разработчику парсера, передав ему текст ошибки из сообщения парсера и файл прайса.
- Если все ошибки исправлены, либо их не возникло, либо вы загодя уверены в успешности операции импорта (обрабатывали этот же файл ранее) - вы можете не использовать пункт "только парсинг". При этом непосредственно после чтения файла и обработки записей посредством парсера, программа перейдет ко вставке всех найденных записей в базу (справочники). При этом также могут возникнуть ошибки. Если ошибки возникли:
- Откройте содержимое справочника отелей и укажите в фильтре значения, которые однозначно найдут строки, которые уже успели вставиться до возникновения ошибки. Если база относительно пуста, можно в качестве фильтра указать страну или область. Если существуют другие пакеты, содержащие данные тех же регионов, более верным будет фильтр по ID продукта (поле pid). Удалите все найденные строки.
- Затем перейдите на страницу управления справочником "Номера отелей" и выберите и выполните пункт "Очистить потерянное рекурсивно". Эти два шага вернут базу к первоначальному состоянию до начала неудачной операции вставки и вы сможете начать операцию заново.
- Исправьте ошибку, если поняли причину её возникновения или обратитесь к разработчику прайса, передав ему текст ошибки из сообщения при вставке и файл прайса.
- Если удалось пройти все стадии и залить все цены, переходите к следующим операциям настройки турпакета.
Коллекция парсеров
Генератор размещений
Генератор размещений используется при создании пакетов и только для сырых прайсов. На основе формулы максимального размещения в номере при создании прайса необходимо сгенерировать перечень всех возможных размещений и высчитать цену для каждого из них. На этапе просчета цен и создания выходных прайсов этим занимается функция генерации размещений (ts_price->GenPlace). Формула пишется вручную оператором, готовящим прайс, для каждого номера отеля на основе прочтения политик, указанных в рамках отеля. Некоторые парсеры автоматически создают формулу, если это позволяет смысловая конструкция прайса. Правила, прописанные отелем, зачастую неясны, осознаются косвенно из перечня имеющихся цен за дополнительные детские и взрослые места и тд. В этом случае от оператора требуется знание типовых вариантов и особенностей страны, иногда размера номера или любых других вещей. В конечном счете нужно добиться четких, непротиворечивых формул размещения, из которых генератор без накладок сгенерирует только действительно возможные размещения. В случае двоякой цены за размещение - например, при размещении ребенка на одной кровати с родителем и на отдельной, за более дорогую плату, предпочтение должно отдаваться большей цене, так как легче сделать скидку, чем объяснять, почему Вы продаете по заниженным ценам, а затем требуете неочевидных доплат или (что чаще всего, доплачиваете сами). Для реализации этого может понадобиться удаление строк с более низкими ценами, если этого не умеет сам парсер.
Описание формулы: "число предоплаченных взрослых"+"число дополнительно вмещающихся за отдельную плату взрослых или детей". В случае детей необходимо сразу за числом указывать в круглых скобках диапазон (или несколько диапазонов через любой разделитель) возрастов, например: (0-6|6-12). В случае, если в номер может быть подселен ЛИБО один взрослый за отдельную плату, ЛИБО ребенок (или два), указывать нужно и тех и других через символ косой черты, например: 2+1/2(2-12). В случае верхней планки заселяемости номера название размещения (не формула!) будет выглядеть как: DOUBLE+EXB, либо DOUBLE+2CHD(2-12). C предельными размещениями, равно как и с базовыми (без дополнительных мест) не существует особых сложностей. Проблемы могут возникнуть при генерации промежуточных размещений - именно они могут нарушить реальную политику отеля в отношении какого-либо номера и это может привести к конфликтной ситуации.
Что такое промежуточные размещения? Это размещения, создаваемые для заполнения всех мыслимых вариантов между минимально возможным (базовым) и максимально возможным размещениями. В качестве варьируемых элементов выступают дополнительные взрослые места и детские места (зачастую разных возрастов), как дополнительные, так и заменяющие предоплаченные взрослые. Парсер, обрабатывающий файл, должен иметь представление об особенностях страны или того набора отелей, который указан в прайсе и при необходимости регулировать генерацию размещений указанием политики отеля. Также политику размещений отеля можно редактировать вручную. Чтобы проще донести специфику, можно прибегнуть к примеру:
Формула | Размещение | Тип | Ценообразование | Коды блокировки |
2+1/1(0-6|6-12) | DBL | Базовое | базовая | |
DBL PP | Псевдо-размещение | базовая/кол-во мест | nopp |
DBL+EXB | Максимальное | базовая+доп.взрослая | |
DBL+CHD(0-6) | Максимальное | базовая+доп.детская1 | |
DBL+CHD(6-12) | Максимальное | базовая+доп.детская2 | |
SGL+CHD(0-6) SGL+CHD(6-12) | Промежуточные | базовая | genchd2ex, nogenchd |
SGL+2CHD(0-6) SGL+2CHD(0-6|6-12) SGL+2CHD(6-12) | Промежуточные с доп. местом для 2го ребенка | базовая+доп.детские | nogenchd |
3+1 | TRIPLE | Базовое | базовая | |
DBL PP | Псевдо-размещение | базовая/кол-во мест | nopp |
QUAD | Максимальное | базовая+доп.взрослая | |
TRIPLE+CHD(2-12) | Максимальное | базовая+доп.детская | nogenchd |
SINGLE+2CHD(2-12) DOUBLE+1CHD(2-12) | Промежуточные | базовая | genchd2ex,nogenchd |
SINGLE+3CHD(2-12) DOUBLE+2CHD(2-12) | Промежуточные с доп. местом для последнего ребенка | базовая+доп.детская | nogenchd |
1+1(0-10) | SINGLE | Базовое | | |
SGL+CHD(0-10) | Максимальное | базовая+доп.детская | |
Как видно из примеров, все промежуточные размещения могут быть заблокированы политикой отеля. Политика прописывается в виде перечня кодов, разделенных точкой с запятой (без пробелов!), например: nopp;genchd2ex и указывается в соответствующем столбце в справочнике отеля. Чаще всего эту политику указывает сам парсер, переносящий данные в базу из прайса.
Исключение накладок. Часто в прайсах дается две цены или даже три за один номер для каждого возможного базового размещения. Например, для одного номера отдельно указана цена за SINGLE и отдельно за DOUBLE. При этом также могут присутствать цены за extra bed (доп. взрослый) и за extra child (доп. ребенок). В таком случае формулу размещения нужно указывать напротив каждой базовой цены. Чаще всего для цены SINGLE формула будет равна просто "1", для цены DOUBLE - формула, предусматривающая все остальные возможные варианты. В случае, если в прайсе оговаривается отдельная цена для размещения, например, ребенка в каждом из вариантов цен (например, при одном взрослом цена за ребенка одна, при двух - другая) - то после отражения возможности размещения ребенка в SINGLE возникает возможность накладки размещений. Такимо образом, размещение SINGLE+CHD возможно как на основании базовой цены SINGLE (с доплатой за ребенка), так и на основании базовой цены DOUBLE (без доплаты), что приведет к дублированию размещений в прайсе с разными ценами и будет являться явной ошибкой. В этом случае парсер или оператор должен регулировать возможность создания промежуточных конфликтных размещений кодами блокировки в политике отеля.
Пример прайса, который может привести к накладке (желтым отмечены поля, добавленные оператором для парсера после прочтения имеющихся скидок отеля):
Hotel Name |
IBEROSTAR ALBATROS |
Region |
CAVTAT |
|
|
Category |
Board |
Currency |
|
|
4* |
HB |
EUR |
|
Periods |
09.05.2011 | 29.05.2011 | 26.06.2011 | 18.09.2011 |
|
29.05.2011 | 26.06.2011 | 18.09.2011 | 02.10.2011 |
|
|
Room type | STANDARD ROOM | max |
DOUBLE | 98 | 130 | 150 | 130 | 2+1/1(0-7|7-12) |
SINGLE | 74 | 98 | 113 | 98 | 1+1(0-7|7-12) |
|
Discounts: |
Child 0 -1,99 with 2 adults without bed 100% |
Child 0 - 6,99 with 2 adults on extra bed 100% |
Child 7 – 11,99 with 2 adults on extra bed 50% |
Child 0 - 6,99 with 1 adult on basic bed 50% |
Child 7 – 11,99 with 1 adult on basic bed 30% |
Adult on extra bed 20% |
В этом примере оператор или парсер должен добавить в политику отеля код genchd2ex. Этот код исключит генерирование размещений SINGLE+CHD(0-7) (98 у.е.) и SINGLE+CHD(7-12) (98 у.е.) на основе базовой цены DOUBLE, что конфликтовало по ценам бы с такими же размещениями, но с другими ценами (74+37 у.е. и 74+22 у.е.) на основе базовой цены SINGLE.
Перечень существующих политик и их расшифровка
- nopp - Не генерировать размещения per persone. Эти размещения не являются реальными, используются как маркетинговый ход для получения наиболее низкой цены и показывают, сколько заплатит турист, если будет платить за одного себя в поездке с компанией. Чаще всего это применяется к реальному размещению DOUBLE (подразумевается 2 человека в группе).
- nogenchd - Не генерировать детские места. Вообще. Либо детские места уже жестко прописаны, либо отель вообще не допускает размещения детей.
- genchd2ex - Генерировать детские места только на доп. кроватях (только если за них будет взиматься дополнительная плата). Например, при формуле 2+1 размещение с ребенком может быть только DBL+CHD.
- fcf - First Child is Free. За первого ребенка в размещении не будет взята дополнительная плата. Применяется только для дополнительных (extra) размещений детей.
- noinf - Не генерировать infant-ов (младенцев до 2-х лет) в динамических размещениях в номере. Генерация младенческих мест может быть включена настройками при генерации конкретного прайса. Если присутствует эта политика, младенческие места не будут сгенерированы ни в каком случае (например, они уже есть в формуле размещения).
- maxinf:N - Генерировать максимум N infant-ов (младенцев до 2-х лет) в динамических размещениях в номере. В определенном продукте возраст младенца может быть иным (обычно больше, до 5 лет). Для таких продуктов полезно увеличение количества младенцев при генерации размещений в номерах.
- noinfwsgl - Не генерировать infant-ов (младенцев до 2-х лет) в размещении с одним взрослым. Требуется в некоторых отелях. Генерация младенческих мест может быть включена настройками при генерации конкретного прайса, но эта политика главнее для конкретных размещений.
- genfrom:N - Минимально допустимое количество взрослых (ставьте число вместо N) в комнате при генерации промежуточных размещений. Если политика присутствует, тогда можно получить размещение DOUBLE, даже в случае формулы размещения 4+2. Употребляйте с осторожностью, чтобы не допустить самой распространенной ошибки - накладки сгенерированных размещений. Чаще всего употребляется, если цена указана всего один раз и за весь номер, без разницы от количества проживающих.
- maxchd:N - Максимальное количество детей в номере. По умолчанию 5. Используется для ограничения генерации промежуточных размещений, где оплаченные взрослые места заменяются детскими по той же цене. Особенно актуально это, например, в больших виллах, созданных как минимум для футбольных команд. Подставьте максимально возможное число детей вместо N.
- late_cin:N% - Цена за часть суток (поздний заезд). Проставляйте, если в этом отеле существует значительное расхождение между временем приезда и временем check-in/check-out (въезда-выезда из номера) и отель согласен брать часть цены. Тогда первые сутки (день) будут оплачиваться не полностью, а в указанном процентном соотношении. Подставьте число процентов вместо N.
- early_cout:N% - Цена за часть суток (ранний выезд). Проставляйте, если в этом отеле существует значительное расхождение между временем приезда и временем check-in/check-out (въезда-выезда из номера) и отель согласен брать часть цены. Тогда последние сутки (день) будут оплачиваться не полностью, а в указанном процентном соотношении. Подставьте число процентов вместо N.
- onlynightscol:fieldname - Позволять только то количество ночей, которое указано в столбце fieldname. Хак для распиленных пакетных цен чужого туроператора.
- tourdates:costdates - Позволять только те туры, которые совпадают по датам с началом и концом найденных периодов цен (startcost, stopcost). Хак для распиленных пакетных цен чужого туроператора.
- finalpercent:N - Заранее заданный процент накрутки на отель или номер. Применяется либо если у каждого отеля свой процент накрутки и всех их тяжело указывать через интерфейс редактирования накруток, либо если заранее известна цена, по которой требуется продавать номера и при этом накрутка указана в процентах. Во втором случае требуется больший процент (обратный), чтобы восстановить из себестоимости номера цену к продаже. Например, конечная цена 100$, накрутка уже включена: 20%. Если отнять от 100$ 20%, останется 80$, но чтобы восстановить 100$ из записанной цены 80$, нужно добавить не 20%, а 25%. Именно эти 25% нужно указать в этой политике. Следует заметить, что обратный процент не изменяется от цены к цене (другими словами, любому проценту соответствует свой обратный повышенный процент). Здесь допустимы дробные числа процента (до четырех знаков после запятой) для достижения точной конечной цены.
- agentpercent:N - Обычно указывается вместе с предыдущей политикой по тем же самым причинам. Означает процент агентской комиссии от конечной цены. Не может быть больше процента накрутки. Этот процент - не обратный, а прямой процент (от 100$ продажной цены туристу за номер 10% комиссии агенту составит 10$). Поддерживаются только целые числа.
- per_baseclient - Накрутка на цену применяется только на тех взрослых или детей, которые проживают в стандартном размещении, без дополнительных кроватей. То есть при размещении DBL+EXB, накрутка применится к двум местам из трех. Это допустимо только при указании цены за человека, а не за номер (это должно быть отражено в настройке продукта параметром "цена указана за" = client*day или = client*night).
- no_per_baseclient - Отменяет предыдущую политику. Это актуально, например, в политике отдельного номера, которая отличается от политики всего отеля.
- pansion_basecost - Не использовать никаких накруток за оплату питания, если эта цена указана (то есть посредники не получат свои комиссии за питание туристов).
- fixedprice:fieldname - Заранее известная накрутка на цену, выраженная в условных единицах, а не в процентах, указываемая для каждой строки цены в столбце fieldname. Используется, если накрутка не поддается общим принципам и индивидуальна для каждого размещения, каждого периода и, фактически, каждой строки прайса как минимум этого отеля. В этом случае почти невозможно указать политику накрутки стандартными методами. Наполнение этого поля соответствующими данными должен делать либо парсер, либо оператор вручную. ВНИМАНИЕ: если при этом указана цена за каждого клиента в ночь/день, а не просто за единицу времени и не используется политика per_baseclient, цена эта будет взята одинаково и за взрослого и за ребенка. Внимание: если поле будет называться dirty, эта накрутка будет изначально отниматься от себестоимости (грязный прайс, конечные цены в качестве исходных).
- fixedcommission:fieldname - Заранее известная агентская комиссия, выраженная в условных единицах, а не в процентах, указываемая для каждой строки цены в столбце fieldname. Используется, если накрутка не поддается общим принципам и индивидуальна для каждого размещения или каждого периода и, фактически, каждой строки прайса как минимум этого отеля. В этом случае почти невозможно указать политику комиссии стандартными методами. Наполнение этого поля соответствующими данными должен делать либо парсер, либо оператор вручную.
- costmode:word - Измененная политика подсчета цены (в настройках продукта в пакете это пункт "Цена указана за"). Позволяет изменить политику подсчета по умолчанию, указанную в настройках продукта, для конкретного отеля или номера в отеле. Например, все отели считают по ночам, но некоторые из них - по дням. В этом случае для этих некоторых следует указать политику costmode:day.
- comm_by_client - Комиссия агента указана за клиента, хотя цены могут быть за номер.
- pensioner_discount:N - Размер скидки для пенсионеров в у.е. Количество пенсионеров может быть указано на форме индивидуального тура. Может применяться в ценах на трансфер
- place_discount:Nf-Nt/Na/Nc/Np% - Скидка за место в у.е. или в процентах (если последний символ процента указан). Расшифровка полей: Nf - стартовое место (номер), с которого начинается блок, подападающий под скидку, Nt - конечное место (номер) этого блока, Na - размер скидки для взрослого, Nc - размер скидки для ребенка, Np - размер скидки для пенсионера. Применяется в ценах на трансфер. Пример: place_discount:45-51/1000/500/500.
- place_comm_discount:Nf-Nt/Na/Nc/Np% - Уменьшение комиссии агента в зависимости от места клиента. Формат тот же, что и в place_discount.
- nosale - Автоматическое снятие галочки на продукте отеля/проживания на форме индивидуального тура при выборе этого отеля. Может применяться для точек доставки, вида "таможня" или "905-й километр".
- currency:word - Измененная валюта для конкретного отеля. Допустим, в настройках продукта валюта отелей указана USD. Некоторые отели ведут расчет в EUR. В политике этих отелей нужно указать currency:EUR.
На данный момент политики размещения поддерживаются на уровне справочника отеля (поле policies) и на уровне справочника номера (поле policy). Политики на уровне номера важнее, чем политики на уровне отеля. Также столбец политик номера может отсутствовать (это не критично для работы системы). Политики на уровне номеров гибче (для каждого номера своя политика), но их тяжелее указывать, чем отельные. Рекомендуется столбец политик номеров заводить на уровне справочника привязки пакетов к номерам отелей, а не в самих номерах - так как от года к году (от пакета к пакету) политика номеров может меняться и несовпадение политик может задублировать номера в отелях при заливке новых прайсов.
Политики на уровне отелей можно указывать прямо в XLS-прайсе (чтобы не настраивать отели в базе после каждой заливки. Для этого в любой строке листа в первой ячейке нужно указать строку вида:
+policies=policy1:value1;policy2:value2
<< Оглавление | Наверх…