Skip to content

Instantly share code, notes, and snippets.

@cherehapa
Last active December 6, 2017 23:01
Show Gist options
  • Save cherehapa/c9251fb8e2c8f336a448ce4648c7e2b7 to your computer and use it in GitHub Desktop.
Save cherehapa/c9251fb8e2c8f336a448ce4648c7e2b7 to your computer and use it in GitHub Desktop.
Поля ответа метода /v2/quote

Общая структура ответа

{
  "data": [...],
  "productPerCompany": [..],
  "assistances": [...],
  "preCalc": {...},
  "request": {...},
  "status": 200
}

Поля:

  1. data - неотфильтрованный и неотсортированный массив результатов расчета. Включает в себя все доступные к расчету продукты страховых компаний (может быть несколько продуктов на одну страховую)
  2. productPerCompany - неотсортированный массив результатов расчета, по одному наиболее подходящему под запрос продукту для каждой страховой компании (так в выдаче на сайте cherehapa.ru). Полный список страховых компаний: https://api.cherehapa.ru/v2/company
  3. assistances - массив кодов ассистансов, присутствующих в результатах расчета (можно использовать для отображения фильтра по ассистансам). Полный список ассистансов: https://api.cherehapa.ru/v2/assistance
  4. preCalc - результаты предварительного расчета оптимальной начальной суммы медицинского страхования (появляется, если в запросе указан параметр preCalc[]=medicine.
  5. request - данные обработанного запроса (т.е. те данные, которые были переданы на вход, плюс несколько дополнительных полей, появившихся в результате обработки)
  6. status - HTTP-код ответа

data

Полные результаты расчета. Все страховые компании. Все продукты, на которые условиями расчета не наложены ограничения. Может включать несколько продуктов на одну страховую компанию. (Например: Ecomom - 100 руб, Classic - 300 руб, VIP - 500 руб). Массив элементов со следующими полями:

{
  "productId": 9, //внутренний числовой код страхового продукта
  "companyId": 23, //внутренний числовой код страховой компании, см. https://api.cherehapa.ru/v2/company
  "insuranceSubProductId": 53, //внутренний код варианта страхового продукта
  "territory": { //расчитанная территория действия страхового полиса (скорее для внутреннего использования, это территория страховой компании)
    "id": 351,  //внутренний числовой код территории
    "code": "t8", //внутренний символьный код территории
    "countryGroup": [...] //символьные коды групп стран, входящих в состав территории
  },
  "insuredDays": 365, //срок действия страхового полиса (в днях)
  "sport": [ //массив данных о группах спорта, включенных в страховой полис (скорее для внутреннего использования, это группы страховой компании)
    {
      "id": 2, //внутренний числовой код группы спорта
      "code": "alfa-sport" //внутренний символьный код группы спорта
    }
  ],
  "currency": "EUR", //код валюты, в которой расчитан страховой полис (в некоторых случаях может отличаться от запрошенной валюты)
  "price": 2306.8, //стоимость страхового полиса в валюте
  "priceRub": 162307.37, //стоимость страхового полиса в рублях
  "assistances": [ //массив ассистансов, обслуживающих данный страховой полис. в большинстве случаев тут один элемент, но в случае неопределенности со стороны страховой компании, тут их может быть несколько
    {
      "code": "best", //внутренний символьный код ассистанса
      "name": " Best Service" //название ассистанса
    }
  ],
  "matchRating": 0.7137, //рейтинг соответствия продукта запросу. Чем ближе к 1, тем больше соответствие.
  "matchDetails": { //дополнительные параметры соотнесения продукта с запросом
    "totalServices": 20, //общее количество услуг в продукте
    "additionalServices": 19, //количество дополнительных услуг в продукте (которых нет в запросе, но есть в продукте)
    "missingServices": 0, //количество отстутствующих услуг (есть в запросе, но нет в продукте)
    "matchingServices": 1, //количество услуг, соответствующих запросу
    "higherSumms": 0, //количество услуг с большей страховой суммой
    "lowerSumms": 0, //количество услуг с меньшей страховой суммой
    "matchingSumms": 1, //количество услуг с совпадающей страховой суммой
    "expertRaiting": 0, //экспертный рейтинг страхового продукта (не используется, тут всегда 0)
    "isLimited": 0, //является ли этот продукт ограниченным (всегда 0, ограниченные не продаем)
    "priceRating": 0.007, //рейтинг стоимости (чем выше, тем сравнительно дороже продукт)
    "payoutRating": 0.01065 //рейтинг выгодности для продажи (не применяется)
  },
  "serviceProduct": { //массив услуг, входящих в состав продукта (со страховыми суммами)
    ...
    "searchActivities": 0,
    "legal": 5000,
    "deathRepatriation": 10000,
    "medicine": 50000,
    ...
  }, 
  "info": { //массив дополнительных сведений о расчете, сюда включается франшиза
    "medicine": [
      {
        "type": "franchise", //тип сведений: franscise - франшиза, других не припомню
        "value": "30" //м.б. число, тогда следует интерпретировать как абсолютное значение в валюте расчета или текст (который надо показать пользователю)
      }
    ]
  },
  "services": [...], //для внутреннего использования и отладки, разбивка стоимости по услугам в соответствии с примененными правилами расчета
  "infoPerTourist": [...] //для внутреннего использования и отладки, разбивка стоимости по туристам в соответсвии с примененными правилами расчета
}

productPerCompany

Массив структуры, аналогичной той, что в data, за тем исключением, что для каждой страховой компании в нем оставлено по одному, наиболее подходящему продукту (т.е. тому, у которого matchRating максимальный). Алгоритм отсечения тот же, что и на cherehapa.ru. Массив отсортирован по убыванию matchRating продукта.

assistances

Массив символьных кодов ассистансов, присутствующих в результатах расчета. См. https://api.cherehapa.ru/v2/assistance

"assistances": [
  "best",
  "europ",
  "gva",
  "class",
  "remed",
  "apc"
],

preCalc

При сборе предварительных сведений об условиях страхования, страховая сумма по медицинскому страхованию у пользователя не спрашивается, однако от этого параметра достаточно сильно зависит выдача результатов. В зависимости от направления и текущего курса (по законодательству траховая сумма не может быть меньше 2 млн. руб.) количество страховых компаний в выдаче может сильно варироваться. Если выбранная по-умолчанию страховая сумма слишком маленькая, то компаний может быть слишком много, что отпугнет пользователя. Выбор слишком большой страховой суммы может создать ощущение навязывания более дорогих продуктов. Поэтому мы делаем предварительный расчет со всеми доступными страховыми суммами по медицинскому страхованию и выбираем минимальную страховую сумму, при которой количество страховых компаний выше заданного порога (сейчас - 6). Этот элемент появляется в выдаче только в том случае, если в запросе присутствует указание на необходимость проведения предварительного расчета: preCalc[]=medicine, при этом параметр service[medicine]=... можно не указывать, он будет выбран автоматически.

"preCalc": {
  "serviceCode": [ //коды услуг, по которым проводятся предварительные расчеты (medicine)
    "medicine"
  ],
  "serviceValues": [ //перечень доступных страховых сумм
    "30000",
    "35000",
    "40000",
    "50000",
    "100000"
  ],
  "companiesCount": { //количество страховых компаний в результатах расчета по каждой страховой сумме
    "30000": 3,
    "35000": 5,
    "40000": 4,
    "50000": 8,
    "100000": 8
  },
  "serviceValue": "50000" //выбранная сумма медицинского страхования
}

request

Исходный запрос на расчет с некоторыми дополнительными полями. Примечание - если в запросе возраст туриста передается числом, то в некоторых случаях это может привести в неточностях к расчетах, т.к. при указании точной даты рождения может быть применен возрастной коэффициент (для его применения разные страховые компании могут использовать возраст на дату покупки, возраст на дату начала действия страхового полиса, возраст на дату окончания действия страхового полиса, возраст на бОльшую часть поездки). Расхождения встречаются редко, но если турист отмечает День Рождения в поездки, то возможны.

"request": {
  "dateStart": "10.12.2017", //дата начала поездки
  "dateEnd": "09.12.2018", //дата окончания поездки
  "insuredDays": 365, //срок действия страхового полиса (в днях)
  "currency": "EUR", //валюта страхования
  "currencyRate": { //курсы валют на дату расчета
    "USD": "59.6325",
    "EUR": "70.3604"
  },
  "country": [ //символьные коды выбранных стран
    "thailand"
  ],
  "service": { //символьные коды и выбранные страховые суммы для страховых услуг (по услугам типа вкл/выкл - 0/1)
    "medicine": 50000,
    "urgentStomatology": 0
  },
  "tourist": [ //данные о туристах (в расчетах кроме возраста/даты рождения ничего не нужно)
    {
      "age": 24, //возраст на дату покупки страхового полиса
      "endAge": 24, //возраст на дату окончания действия страхового полиса
      "beginAge": 24, //возраст на дату начала действия страхового полиса
      "longestAge": 24 //возраст на бОльшую часть поездки (т.е. если 6/10 дней туристу было 24 года и 4/10 - 25, то тут будет 24)
    },
    {
      "age": 43,
      "endAge": 43,
      "beginAge": 43,
      "longestAge": 43
    }
  ],
  "sport": [ //массив кодов выбранных видов спорта
    "boxing"
  ],
  "filterCompanies": [ //массив страховых компаний, по которым отфильтровать выдачу
    ...
    {
      "id": "23", //числовой код страховой компании
      "code": "alfa", //символьный код страховой компании
      "name": "АльфаСтрахование" //название страховой компании
    },
    ...
  ]
}

Дополнительные справочные данные

Справочные данные по значениям полей можно получить из справочных методов API:

Общая структура ответа

{
  "status": 200,
  "request": {...},
  "tourist": [...],
  "order": {...},
  "policy": [...],
  "transaction": {...},
  "data": [...],
  "task": {...}
}

Некоторые поля могут появлятся раньше или позже, в зависимости от текущего статуса выполнения задачи. Поля:

  1. request - основные данные обрабатываемого запроса
  2. tourist - данные туристов из запроса
  3. order - устаревшие данные заказа, в длительном состоянии удаления
  4. policy - данные страховых полисов, выписанных по заказу
  5. transaction - данные по транзакции денежных средств (оплате заказа)
  6. data - дополнительные сведение, которые не "влезли" в другие поля
  7. task - данные о задаче/заказе на выписку страховых полисов
  8. status - HTTP-код ответа

request

Основные данные обрабатываемого запроса: даты, количество дней, валюта страхования. Привязка к странам, услугам и видам спорта в этих данных не указывается.

"request": {
  "id": 3348597, //внутренний числовой код запроса
  "insurerId": null, //внутренний числовой код страхователя (тут не заполняется)
  "dateStart": "29.11.2017", //дата начала поездки
  "dateEnd": "29.11.2017", //дата окончания поездки
  "dateVisa": null, //дата похода в визовый центр
  "insuredDays": 1, //количество дней страхового покрытия
  "currencyId": "USD", //символьный код валюты страхования
  "source": null, //??
  "url": null, //??
  "dateCreated": "21.11.2017", //дата создания запроса
  "dateUpdated": "21.11.2017" //дата последнего обновления запроса
},

tourist

Массив с данными туристов из запроса

"tourist": [
  {
    "id": 387118, //внутренний числовой код туриста
    "birthday": "01.01.1990", //дата рождения (дд.мм.гггг)
    "firstName": "TEST", //имя
    "lastName": "TESTOV", //фамилия
    "secondName": null, //отчество
    "hidden": 0, //спрятан ли турист в личном кабинете
    "age": 27 //возраст туриста
  }
],

order

Устаревшее поле. Лучше на него не опираться и никакие данные из него не использовать.

policy

Массив данных о страховых полисах, выписанных в рамках данного заказа. В зависимости от выбранных услуг, количества туристов и максимального количества туристов в полисе страховой компании, тут их может быть несколько.

"policy": [
  {
    "id": 312205, //внутренний числовой код полиса
    "code": "0070330-0279869/17МП", //код полиса, он же номер Бланка Строгой Отчетности, он же номер, напечатанный на полисе
    "type": "travel", //тип полиса (travel - туристический, avia - полис авиастрахования, osago - полис ОСАГО)
    "externalId": "69B09859-F3DF-4E2E-AFDD-C36163491624", //уникальный код полиса в API страховой компании (есть не у всех)
    "companyId": 51, //числовой код страховой компании
    "file": 300176, //числовой код файла
    "insuranceSubProductId": 906, //числовой код варианта продукта, по которому выписан страховой полис
    "calculationId": 340087, //числовой код структуры с результатами расчета (для внутреннего использования)
    "price": 46.23, //стоимость полиса (данного конкретного, а не всего заказа) в рублях
    "feeRate": 0.1, //комиссионное вознаграждение (в долях, т.е. тут это 10%)
    "partnerId": 1, //числовой код партнера, которому засчитана продажа
    "insurerId": 1, //внутренний числовой код страхователя (заполняется, если пользователь был авторизован)
    "taskId": 1432276, //числовой код подзадачи, в рамках которой был выписан полис
    "dateCreated": "21.11.2017 14:32:10", //дата создания полиса
    "dateConfirmed": "21.11.2017 14:32:29", //дата активации полиса (перевода в "действующий режим")
    "dateUpdated": "21.11.2017 14:37:43", //дата последнего изменения в данных о полисе
    "dateCancelled": "21.11.2017 14:37:43", //дата отмены страхового полиса
    "isArhive": 0, //признак переноса в архив, сейчас всегда 0
    "fileLink": "https://api.cherehapa.ru/v2/file/download/300176", //ссылка на скачивание полиса
    "marker": "c8577wols-91552", //маркер, который присвоил заказу партнер
    "referer": "http://travel-insurance-online.ru/", //сайт, с которого пользователь вышел на заказ
    "fee": 4.62, //размер партнерской комиссии за полис в рублях
    "status": "canceled", //статус полиса (paid - оплачен и готов, processing - в обработке, canceled - отменен)
    "partner": "Черехапа Страхование", //символьное название партнера
    "order": [], //дубль данных из поля order уровнем выше (устарело, не стоит использовать)
    "transaction": [] //дубль данных из поля transaction уровнем выше (лучше брать их оттуда)
  }
],

transaction

Данные о транзакции денежных средств, т.е. фактически данные об обработки платежа в процессинге/эквайринге.

"transaction": {
  "id": 470844, //уникальный числовой код заказа (суррогатный, для внутреннего использования)
  "uuid": "dc12a640-6c03-4124-977a-7322760dc953", //уникальный UUID заказа, используется в процессинге
  "dateCreate": "21.11.2017 14:32:12", //дата создания транзакции
  "dateUpdate": "21.11.2017 14:37:44", //дата последнего обновления данных о транзакции
  "paymentSystemId": 7, //числовой код платежной системы (см. http://api.sandbox.cherehapa.ru/v2/paymentSystem)
  "orderId": 268437, //устаревшее поле, привязка к старой структуре заказа (использовать не стоит)
  "taskId": 1432275, //числовой код заказа/задачи, в рамках которой обрабатывался этот платеж
  "partnerId": 1, //числовой код партнера, с которым ассоциирована данная транзакция
  "type": 2, //стадийность транзакции (1 - деньги списываются в одну стадию, 2 - в две стадии: блокировка+снятие)
  "status": "cancelled", //статус транзакции (processing - идет обработка, blocked - деньги заблокированы,
                           success - деньги успешно списаны, error - возникла ошибка при оплате,
                           cancelled - транзакция отменена, деньги возвращены,
                           redirected - пользователь должен быть перенаправлен на remoteUrl для оплаты
  "remoteUrl": {
    "url": "https://acs.utb.ru/PaReqVISA.jsp", //адрес, на который должен быть перенаправлен пользователь для продолжения оплаты
    "method":"POST", //метод HTTP-запроса (тут, как правило, GET)
    "data":null //дополнительные данные, которые нужно передать в запросе
  }, 
  "additionalData": null, //дополнительные данные для обработки (могут появлятся в зависимости от платежной системы)
  "errorCode": "CARD_EXPIRED", //код последней ошибки (зависит от платежной системы, для Payture - http://payture.com/integration/api/#error-codes_)
  "termId": "CherehapaVTB", //символьный код терминала, по которому проходила оплата (для внутреннего использования)
  "amount": 46.23, //итоговая стоимость заказа в рублях (т.е. суммарная стоимость всех полисов)
  "externalId": null, //код заказа в платежной системе (если отличается от uuid)
  "redirectUrl": "https://mobile.cherehapa.ru/Loading/" //URL, на который будет возвращен пользователь после завершения оплаты
},

data

Массив дополнительных данных, но сейчас в нем только временные ссылки на скачивание pdf-файлов индивидуальных полисов из заказа

"data": [
  {
  "links": { //хэш-массив временных ссылок на скачивание индивидуальных полисов (лучше пользоваться ссылкой из policy - она постоянная)
      "0070330-0279869/17МП": "https://che-production.s3.amazonaws.com/0070330-027986917.pdf?AWSAccessKeyId=AKIAJB34MLD6JD5MGAJA&Expires=1511265777&Signature=Wb9EyKyz1OnaNjBidfaKWNCuK6w%3D"
    }
  }
],

task

Данные о зказе/задаче на выписку полиса (завершилась или нет, когда была создана и т.п.)

"task": {
  "id": 1432275, //внутренний числовой идентификатор задачи
  "code": "CreateOrder", //символьный код типа задачи (выполняются не только задачи на выписку полисов, могут быть и другие:
                           CreatePolicy, ProcessBlockPayment, ConfirmPolicy, ProcessChargePayment, SendSms и пр.)
  "isSuccess": true, //признак успешного выполнения задачи, лучше ориентироваться на completeness === 1
  "isProcessing": false, //признак обработки задачи, не надежный
  "isCancelled": false, //признак отмены обработки задачи, не надежный
  "isFatal": false, //признак наличия фатальных ошибок (т.е. выполнение задачи не может быть возобновлено), не надежный
  "hasError": false, //признак наличия ошибок в задаче (временных и фатальных), не надежный
  "isInQueue": false, //признак нахождения задачи в очереди обработки, не надежный
  "completeness": 1, //процент выполнения задачи, 0..1 (где 1 это 100%)
  "currentAction": false //символьный код текущего действия, выполняемого в рамках задачи (например "Order\CreateOrderPolicies")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment