Расчет - Базовые понятия

В ПКАСКО существует 2 типа расчета:

  1. Базовый или общий - всегда идет по фиксированному набору параметров и использует справочники ПКАСКО
  2. Уточняющий - набор параметров зависит от конкретного калькулятора, оперирует справониками конкретного калькулятора
В тело запроса всегда передаётся необходимая JSON-структура.

Базовый расчет

Первым расчетом всегда должен идти базовый. В ответе на базовый расчет каждый калькулятор отдает набор своих установленные данных и результат расчета. Также калькулятор может вернуть сообщение об ошибке расчета.

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

Базовый расчет происходит по всем компаниям, которые включены в настройках аккаунта ПКАСКО.

Если Вам необхоимо сделать расчет только по некоторым компаниям из вашего аккаунта, то к адресу запроса нужно добавить параметр codes и перечислить нужные коды калькуляторов через запятую.
ЗАПРОС:

    POST https://pkasko.com/kasko/calc?api=1&codes=RESOWebservice,Ingosstrah
    
ОПИСАНИЕ
    api: (int) - вернуть уникальный идентификатор расчета
    codes: (string) - коды калькуляторов через запятую
    timeout: (int) - кол-во секунд, выделенное на расчет (калькуляторы, не успевшие произвести расчет, будут проигнорированы)
    

Ответ на базовый расчет представляет собой массив результатов расчета, каждый элемент которого - это результат одного калькулятора.
ОТВЕТ

    [
      // успешный расчет
      {
        "info": {   // информация о калькуляторе и дополнительные данные
          "code": "RenessansWebservice"  // код калькулятора (обязательно всегда в ответе)
        },
        "data": { // набор установленные данных этого калькулятора (для уточняющего расчета)
          ...,
          "orig": { ... },    // оригинальные данные расчета
          "meta": { ... },    // мета-информация по расчету
          "hidden": { ... },  // служебная информация
          "source": { ... }   // копия первого расчета
          ...
        },   
        "result": { ... },     // результат расчета (содержимое зависит от вида страхования)
        "warnings": [ ... ]    // предупреждения (индексный массив)
      },

      // расчет с ошибкой
      {
        "info": {
          "code": "RESOWebservice"
        },
        "error": {
          "message": "Сообщение об ошибке в расчете"
        }
      }
    ]
    

Блок info - унифицированный ответ от калькулятора по определённым значениям.

    "info": {
      "code": "RenessansWebservice",  // код калькулятора
    }    
    

Блок data - данные расчета нужного калькулятора.

    "data": {
      "carNew": "Нет",
      "owner": "Физическое лицо",
      "explDate": "2018-05-08",
      "multidrive": "Ограниченный список",
      "orig": { ... },
      "meta": { ... },
      "hidden": { ... },
      "source": { ... },
      ...
    }
    

Уточняющий расчет

Если необходимо уточнить базовый расчет по каким-то конкретным параметрам калькулятора, то в этом случае делается уточняющих расчет по данным, которые были получение из базового. В ответе на уточняющий запрос приходит весь набор установленных данных, результат расчета, справочники значений, разделы и порядок их расположения. Также калькулятор может вернуть сообщение об ошибке расчета.

Структура ответа на уточняющий запрос:

    {
       "data": { ... }, 
       "result": { ... },
       "values": { ... },   // справочники значений (все возможные варианты значений)
       "options": { ... },  // список опций и их типы
       "order": [ ... ],    // сортировка разделов и опций в них относительно друг-друга
       "warnings": [ ... ]
    }
    

Блок values - справочники значений опций (все возможные варианты значений). Ключ - имя опции, значение - варианты (индексный массив). Для полей с типом "input" в значении всегда будет массив с одним элементом

    "values": {
      "carNew": [
        "Нет",
        "Да"
      ],
      "owner": [
        "Физическое лицо",
        "Юридическое лицо"
      ],
      "explDate": [
        "2018-05-08"
      ],
      "multidrive": [
        "Ограниченный список",
        "С ограничением минимального стажа и возраста",
        "Без ограничений"
      ],
      "credit": [
        "Нет",
        "ВТБ 24",
        "Сбербанк",
        "Другой"
      ],
      "withoutCertificatesGlass": [
        "Отсутствует",
        "1 раз",
        "2 раза",
        "Без ограничений"
      ],
      "withoutCertificatesBody": [
        "Отсутствует",
        "1 раз",
        "2 раза",
        "Без ограничений"
      ],
      "franchise": [
        null
      ]
    }
    

Блок options - список разделов, находящихся в них опций, названия опций и типы. Данный блок сделан для интерфейсов, чтобы отображать параметры расчеты сгруппированные по разделам.

    "options": {
      "Транспортное средство": {
        "carNew": {
          "title": "Новое ТС",
          "type": "select"
        },
        "explDate": {
          "title": "Дата начала эксплуатации",
          "type": "input"
        }
      },
      "Базовые параметры": {
        "owner": {
          "title": "Страхователь",
          "type": "select"
        },
        "credit": {
          "title": "Кредитное ТС",
          "type": "select"
        }
      },
      "Условия страхования": {
        "withoutCertificatesBody": {
          "title": "Выплата без справок (кузов)",
          "type": "select"
        },
        "withoutCertificatesGlass": {
          "title": "Выплата без справок (стеклянные элементы)",
          "type": "select"
        }
      },
      "Лица, допущенные к управлению": {
        "multidrive": {
          "title": "Мультидрайв",
          "type": "select"
        }
      },
      "Франшиза": {
        "franchise": {
          "title": "Франшиза",
          "type": "input"
        }
      }
    }
    

Блок order - сортировка параметров внутри разделов. Данный блок сделан для интерфейсов, чтобы в правильном порядке разместить разделы и опции.

    "order": [
      {
        "group": "Транспортное средство",
        "options": [
          "carNew",
          "explDate"
        ]
      },
      {
        "group": "Базовые параметры",
        "options": [
          "owner",
          "credit"
        ]
      },
      {
        "group": "Условия страхования",
        "options": [
          "withoutCertificatesBody",
          "withoutCertificatesGlass"
        ]
      },
      {
        "group": "Лица, допущенные к управлению",
        "options": [
          "multidrive"
        ]
      }
      {
        "group": "Франшиза",
        "options": [
          "franchise"
        ]
      }
    ]
    

Обработка ошибок

В случае ошибки в расчете формат ответа будет выглядеть следующим образом

    {
      "info": {
        "code": "RESOWebservice"
      },
      "error": {
        "message": "С указанными данными ТС не страхуется или требуется согласование"
      }
    }