---
# System prepended metadata

title: API информации о заказе

---

# API информации о заказе

Необходимо реализовать API для мобильной и десктопной версии сервиса информации о заказе.

## Десктоные API

Макеты для понимания задачи: https://www.figma.com/file/AfvW51JAtIabG2qVF2yDGF/%D0%9C%D0%BE%D0%B8-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B?node-id=4353%3A26995

### Основная информация

Entry point: `/orders/v1/#id/desktop-main-view`

#### Возможные секции контента
* Все товары (all)
* Отправление 1-... (parcel{id})
* Не вошло в заказ (not-included-to-order)
* Заявки {requests}
* Не вошло в заявку (not-included-to-request)

<details>
<summary>Схема ответа</summary>

```javascript
{
  id: 123456, // Идентификатор заказа/заявки
  type: 'order', // Тип заказ (order) или заявка СП (request)
  info: 'Активный, создан 04.04.2019, 15 товаров, 120 единиц', // Описание заказа
  actions: [
    {
      type: 'rotate',
      text: 'Повторить заказ',
    },
    {
      type: 'cancel',
      text: 'Отменить'
    },
    {
      type: 'pay-order',
      text: 'Оплатить заказ'
    }
  ],
  messages: [
    {
      type: 'description',
      content_type: 'template',
      text: 'Обратите внимание! Изменилось количество {link} не вошедших в заказ',
      fields: {
        link: {
          text: 'товаров',
          type: 'action',
          action: 'show-not-included',
        }
      }
    },
    {
      type: 'description',
      content_type: 'template',
      text: 'Обратите внимание! Некоторые {link} не вошли',
      fields: {
        link: {
          text: 'товары',
          type: 'action',
          action: 'show-diff'
        }
      }
    },
    {
      type: 'success',
      content_type: 'text',
      text: 'Пин-код для получения 1 посылки: 678037',
      icon: 'information'
    }
  ],
  sections: [
    {
      id: 'all',
      name: 'Все товары',
    },
    {
      id: 'parcel-1',
      name: 'Отправление 1',
    },
    {
      id: 'parcel-2',
      name: 'Отправление 2',
    },
    {
      id: 'not-included',
      name: 'Не вошло в заказ',
    }
  ],
}
```

</details>

---

### Дополнительная информация

Entry point: `/orders/v1/#id/desktop-additional-view`

#### Парметры запроса
* section - в зависимости от переданной секции формируется набор данных, если не передана, то следуюет возвращать ошибку

#### Блок стоимости (block type: cost)
Данные блока расчитывается для секции. Например, цена для секции «Все товары» расчитывается для всего заказа, а цена для секции «Отправлени 1» расчитывается только для отравления.

Не отображается в секециях «Заявки», «Не вошло в заказ» и «Не вошло в заявку».

#### Блок «Заметка организатора СП» (block type: note)
Отображается только на странице заявки если пользователь является организатором СП.

#### Блок персоны (block type: person)
Информация о менеджере отображается только для заказов, но не для заявок СП.

Информация о организаторе СП отображается только для заявок, в случае, если человек получатель, а не организатор СП.

#### Блок «Добавлено в заказ» (block type: actions-list)
Не отожрается в секции «Отправление», а так же в заявках.

#### Блок «Счета» (block type: actions-list)
Для секции отправлений заголовок блока становится «Счета к отправлению {number}»

Не отожрается в секции «Не вошло в заказ», а так же в заявках.

#### Блок «Получатель» (block type: recipient)
Отображается только на странице заявки если пользователь является организатором СП.

#### Блок «Файлы» (block type: files)
В макетах предполагается разделение на файлы для всего заказа и файлы для отправления. И, соответственно, это должно влиять на именя файлов. Если для всех заказов файл называется «Счета по заказу», то в отправлении будет «Счета по отравлению 1». Однако, я не уверен, что сервис посылок возвращает эти данные и мы эти данные способны получить в принципе. Если такой возможности нет, то нужно будет обсудить это отдельно, но, в рамках первоначальной реализации, стоит сделать вывод всех файлов и в секциях отправлений.

Не отожрается в секции «Не вошло в заказ».


<details>
<summary>Схема ответа</summary>

```javascript
{
  blocks: [
    {
      title: null,
      type: 'cost',
      blocks: [
        {
          title: 'Товары',
          price: 18820,
          type: 'cost-row',
          block: null,
        },
        {
          title: 'Доставка',
          price: 1000,
          blocks: [ // Из чего слкадывается стоимость доставки
            {
              title: 'Доставка Сима-ленд',
              price: null,
              notice: 'Включена в стоимость',
            },
            {
              title: 'Доставка Сима-ленд',
              price: 450,
              notice: null
            }
          ]
        },
        {
          title: 'Итого', // или Итого за отправление 1
          price: 10000,
          type: 'cost-row',
          block: null,
        }
      ]
    },
    {
      title: null,
      type: 'note',
      blocks: [
        {
          notice: 'Просил не звонить ему'
        }
      ]
    },
    {
      title: null,
      type: 'person',
      blocks: [
        {
          title: 'Менеджер заказа',
          avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
          role: 'Менеджер по менеджерам',
          name: 'Марина Михайловская',
          email: 'per_ev@sima-land.ru',
          skype: 'per_ev_sima@outlook.com',
          phone: '+7 800 234 1000 (доб. 6784)',
          phone_url: 'tel:+78002341000,,6784'
          mobile_phone: '+7 912 042 94 53',
          mobile_phone_url: 'tel:+79120429453',
        },
        {
          title: 'Организатор закупки',
          avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
          role: 'Организатор совместной закупки',
          name: 'Сёмин Денис Геннадьевич (ежедневная отгрузка из Екатеринбурга)',
          email: 'per_ev@sima-land.ru',
          phone: '+7 800 234 1000 (доб. 6784)',
          phone_url: 'tel:+78002341000,,6784'
          mobile_phone: '+7 912 042 94 53',
          mobile_phone_url: 'tel:+79120429453',
          link: {
            text: 'Профиль организатора',
            url: '/path/to/profile/'
          }
          social: [
            {
              url: 'https://vk.com/oks2art',
              text: 'https://vk.com/oks2art',
            }
          ],
        }
      ]
    },
    {
      title: 'Добавлено в заказ',
      type: 'action-list',
      blocks: [
        {
          text: 'Дозаказ 02 апреля (ср) 15:00',
          action: 'show-reorders-modal',
          data: {
            id: 5628516, // Идентификатор дозаказа
          }
        },
        {
          text: 'Дозаказ 02 апреля (ср) 15:00',
          action: 'show-reorders-modal',
          data: {
            id: 5628516, // Идентификатор дозаказа
          }
        }
      ]
    },
    {
      title: 'Счета', // Счета к отправлению {number} (только для отправлений)
      type: 'action-list',
      blocks: [
        {
          text: 'ТДС01515025', // Название счета
          action: 'show-invoice-modal',
          data: {
            id: 1234567, // Идентификатор счета
          }
        },
      ]
    },
    {
      title: null,
      type: 'recipient',
      blocks: [
        {
          title: 'Получатель',
          type: 'info',
          blocks: [
            {
              type: 'text',
              content: 'Чернышева Светлана'
            },
            {
              type: 'link',
              content: {
                text: 'svetiklalalaa@mail.ru',
                href: 'mailto:svetiklalalaa@mail.ru'
              }
            },
            {
              type: 'link',
              content: {
                text: '+7 922 144 00 50',
                href: 'tel:+79221440050'
              }
            }
          ],
        },
        {
          title: 'Когда и куда доставлять',
          type: 'info',
          blocks: [
            {
              type: 'text',
              content: 'Ориентировочно 15 апреля (пн)'
            },
            {
              type: 'text',
              content: 'г. Екатеринбург ул. Патриса Лумумбы, д. 3, кв 35'
            }
          ]
        }
      ]
    },
    {
      title: 'Файлы',
      type: 'files',
      blocks: [
        {
          name: 'Счет по заказу',
          url: '/bill-123456.xls',
          format: 'xls',
        },
        {
          name: 'Отгрузочные документы',
          url: '/documents-123456.zip',
          format: 'zip'
        }
      ]
    },
  ],
}
```

</details>

---

### Товары

Entry point: `/orders/v1/#id/desktop-items-view`

Ранее реализовывали API в [задаче #181](https://gitlab.sima-land.ru/dev-dep/dev/ilium/-/issues/181), можно взять его за основу, но изменить entry point.

#### Парметры запроса
* section - в зависимости от переданной секции формируется список товаров, если не передана, то следуюет возвращать ошибку
* after-sid — для переключения страниц

<details>
<summary>Схема ответа</summary>

```javascript
{
  parcel: {
    info: 'Отправление ждёт отмены. Это может занять несколько минут.',
    deliveryDate: 'Доставка 15 апреля (пн) с 14:00 до 20:00',
    deliveryType: 'Службой доставки Сима-ленд до двери по адресу: г. Екатеринбург, ул. Ленина, 1, кв 86',
    contact: {
      name: 'Иванов Иван',
      phone_number: 'tel:+91234567890',
      phone_number_formatted: '+7(123)456-78-90'
    }
    actions: [
      {
        type: 'action',
        text: 'Отменить отправление',
        action: 'cancel-parcel',
      },
      {
        type: 'action',
        text: 'Заказать еще',
        action: 'rotate-parcel',
      },
      {
        type: 'action',
        text: 'Отслеживание'
        action: 'show-tracking-modal',
        data: {
          trackNumber: 12345678910,
           website: 'http://elivery-service.ru/',
        }
      },
      {
        type: 'link',
        text: 'Отслеживание'
        url: 'http://delivery-service.ru/?trackId=123678910',
      },
      {
        type: 'show-pickup-point',
        text: 'Подробно о пункте выдачи',
        data: {
          id: 1234567, // Идентификатор пункт выдачи
        }
      }
    ]
  },
  items: [
    {
      id: 123456,
      sid: 456789,
      photo: 'https://cdn.host.com/path/to/img.jpg',
      title: 'Ножницы',
      qty: '10 наборов',
      unit: 'шт.', // единица измерения в Им падеже ед. числе
      totalPrice: 2500,
      price: 250,
      isNotAvailable: true,
      movedToOrder: {
        id: 123456,
        link: "link/to/order/123456",
      },
      deliveryCost: 100,
      wholesaleType: 'Опт "Крупный опт"',
      isWished: true,
    }
  ],
  nextPage: [
    {
      name: 'after-sid',
      value: '123456'
    }
  ]
}
```

</details>

---

## Мобильное API

Макеты для понимания задачи: https://www.figma.com/file/AfvW51JAtIabG2qVF2yDGF/%D0%9C%D0%BE%D0%B8-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B?node-id=4353%3A29178

### Основная информация
Entry point: `/orders/v1/#id/mobile-main-view`

#### Поле messages
В отличии от десктопного API в поле `messages` не нужно добавлять пин-коды.

#### Поле sections
В секциях отправлений необходимо выводить не более трех товаров, в остальных секция товары не нужны.

<details>
<summary>Схема ответа</summary>

```javascript
{
  id: 123456, // Идентификатор заказа/заявки
  type: 'order', // Тип заказ (order) или заявка СП (request)
  info: 'Активный, создан 04.04.2019, 15 товаров, 120 единиц', // Описание заказа
  actions: [
    {
      type: 'pay-order',
      text: 'Оплатить заказ'
    },
    {
      type: 'rotate',
      text: 'Повторить заказ',
    },
    {
      type: 'cancel',
      text: 'Отменить заказ'
    },
  ],
  messages: [
    {
      type: 'description',
      content_type: 'template',
      text: 'Обратите внимание! Изменилось количество {link} не вошедших в заказ',
      fields: {
        link: {
          text: 'товаров',
          type: 'action',
          action: 'show-not-included'
        }
      }
    },
    {
      type: 'description',
      content_type: 'template',
      text: 'Обратите внимание! Некоторые {link} не вошли',
      fields: {
        link: {
          text: 'товары',
          type: 'action',
          action: 'show-diff'
        }
      }
    },
  ],
  sections: [
    {
      id: 'all',
      name: 'Все товары',
      description: '26 товаров, 124 единицы',
      note: null,
      products: null,
    },
    {
      id: 'parcel-1',
      name: 'Отправление 1',
      description: 'Ожидает в пункте выдачи',
      note: 'Пин-код: 123456',
      products: [
        {
          title: 'Название товара',
          image: '/path/to/image.png'
        },
        {
          title: 'Название товара',
          image: '/path/to/image.png'
        },
        {
          title: 'Название товара',
          image: '/path/to/image.png'
        }
      ]
    },
    {
      id: 'parcel-2',
      name: 'Отправление 2',
      description: 'В пути',
      note: null,
      products: [
        {
          title: 'Название товара',
          image: '/path/to/image.png'
        },
      ]
    },
    {
      id: 'not-included',
      name: 'Не вошло в заказ',
      description: null,
      note: null,
      products: null,
    }
    {
      id: 'requests',
      name: 'Заявки',
      description: '86 заявок покупателей',
      note: null,
      products: null,
    }
  ],
}
```

</details>

---

### Дополнительная информация

Entry point: `/orders/v1/#id/mobile-additional-view`

Блоки:
- cost — выводится всегда
- note — выводится только на странице организатора СП
- person — менеджер выводится только на страницах заказов, а организатор СП только в заявках пользователей, не организаторов СП
- invoices — выводится только в заказах
- action-list (Добавлено в закаказ) — только в заказах у которых есть дозаказы
- recipient — только на странице организатора СП
- files — на всех страницах

<details>
<summary>Схема ответа</summary>

```javascript
{
  blocks: [
    {
      title: null,
      type: 'cost',
      blocks: [
        {
          title: 'Товары',
          price: 18820,
          type: 'cost-row',
          block: null,
        },
        {
          title: 'Доставка',
          price: 1000,
          blocks: [ // Из чего слкадывается стоимость доставки
            {
              title: 'Доставка Сима-ленд',
              price: null,
              notice: 'Включена в стоимость',
            },
            {
              title: 'Доставка Сима-ленд',
              price: 450,
              notice: null
            }
          ]
        },
        {
          title: 'Итого', // или Итого за отправление 1
          price: 10000,
          type: 'cost-row',
          block: null,
        }
      ]
    },
    {
      title: null,
      type: 'note',
      blocks: [
        {
          notice: 'Просил не звонить ему'
        }
      ]
    },
    {
      title: null,
      type: 'person',
      blocks: [
        {
          title: 'Менеджер заказа',
          avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
          role: 'Менеджер по менеджерам',
          name: 'Марина Михайловская',
          email: 'per_ev@sima-land.ru',
          skype: 'per_ev_sima@outlook.com',
          phone: '+7 800 234 1000 (доб. 6784)',
          phone_url: 'tel:+78002341000,,6784',
          mobile_phone: '+7 912 042 94 53',
          mobile_phone_url: 'tel:+79120429453',
        },
        {
          title: 'Организатор закупки',
          avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
          role: 'Организатор совместной закупки',
          name: 'Сёмин Денис Геннадьевич (ежедневная отгрузка из Екатеринбурга)',
          email: 'per_ev@sima-land.ru',
          phone: '+7 800 234 1000 (доб. 6784)',
          phone_url: 'tel:+78002341000,,6784',
          mobile_phone: '+7 912 042 94 53',
          mobile_phone_url: 'tel:+79120429453',
          link: {
            text: 'Профиль организатора',
            url: '/path/to/profile/'
          }
          social: [
            {
              url: 'https://vk.com/oks2art',
              text: 'https://vk.com/oks2art',
            }
          ],
        }
      ]
    },
    {
      title: 'Счета', // Счета к отправлению {number} (только для отправлений)
      type: 'invoices',
      blocks: [
        {
          id: 1234567, // Идентификатор счета
          name: 'ТДС01515025' // Название счета
        }
      ]
    },
    {
      title: 'Добавлено в заказ',
      type: 'action-list',
      blocks: [
        {
          text: 'Дозаказ 02 апреля (ср) 15:00',
          action: 'show-reorders-modal',
          data: {
            id: 5628516, // Идентификатор дозаказа
          }
        },
        {
          text: 'Дозаказ 02 апреля (ср) 15:00',
          action: 'show-reorders-modal',
          data: {
            id: 5628516, // Идентификатор дозаказа
          }
        }
      ]
    },
    {
      title: null,
      type: 'recipient',
      blocks: [
        {
          title: 'Получатель',
          type: 'info',
          blocks: [
            {
              type: 'text',
              content: 'Чернышева Светлана'
            },
            {
              type: 'link',
              content: {
                text: 'svetiklalalaa@mail.ru',
                href: 'mailto:svetiklalalaa@mail.ru'
              }
            },
            {
              type: 'link',
              content: {
                text: '+7 922 144 00 50',
                href: 'tel:+79221440050'
              }
            }
          ],
        },
        {
          title: 'Когда и куда доставлять',
          type: 'info',
          blocks: [
            {
              type: 'text',
              content: 'Ориентировочно 15 апреля (пн)'
            },
            {
              type: 'text',
              content: 'г. Екатеринбург ул. Патриса Лумумбы, д. 3, кв 35'
            }
          ]
        }
      ]
    },
    {
      title: 'Файлы',
      type: 'files',
      blocks: [
        {
          name: 'Счет по заказу',
          url: '/bill-123456.xls',
          format: 'xls',
        },
        {
          name: 'Отгрузочные документы',
          url: '/documents-123456.zip',
          format: 'zip'
        }
      ]
    },
  ]
}
```

</details>

---

### Товары

Entry point: `/orders/v1/#id/mobile-items-view`

API должно принимать секцию или идентификатор чека и возвращать товары для этой секции или чека. Если не передана ни секция, ни чек, то следует возвращать ошибку

#### Парметры запроса
* section - в зависимости от переданной секции формируется список товаров, если не передана, то следуюет возвращать ошибку
* after-sid — для переключения страниц

#### Поле «title»
В зависимости от переданных данных заголовок будет разный

* section=all — Товары из заказа
* section=parcel-1 — Отправление 1
* section=not-included-to-order - Не вошло в заказ
* section=requests — Заявки
* section=not-included-to-request — Не вошлов в заявку
* check={id} - Название чека, например «Счёт СЛ000007531»

#### Поле «subtitle»
Выводится, если передать следующие параметры

* section=all
* section=parcel-1
* section=not-included-to-order
* section=requests
* section=not-included-to-request

<details>
<summary>Схема ответа</summary>

```javascript
{
  title: 'Отправление 1',
  subtitle: '23 товара, 196 единиц',
  items: [
    {
      id: 123456,
      sid: 456789,
      photo: 'https://cdn.host.com/path/to/img.jpg',
      title: 'Ножницы',
      qty: '10 наборов',
      unit: 'шт.', // единица измерения в Им падеже ед. числе
      totalPrice: 2500,
      price: 250,
      isNotAvailable: true,
      movedToOrder: {
        id: 123456,
        link: "link/to/order/123456",
      },
      deliveryCost: 100,
      wholesaleType: 'Опт "Крупный опт"'
    }
  ],
  nextPage: [
    {
      name: 'after-sid',
      value: '123456'
    }
  ]
}
```

</details>

---

### Детальная информация экрана

Entry point: `/orders/v1/#id/details-screen-view`

API должно принимать секцию или идентификатор чека и возвращать данные для этой секции или чека. Если не передана ни секция, ни чек, то следует возвращать ошибку

#### Парметры запроса
* section - в зависимости от переданной секции формируется список данных, если не передана, то следует возвращать ошибку
* check — идентификатор чека

#### Блок messages
В поле ыводятся данные пин-кодов для отправлений, но, в будущем, здесь могут быть и другие данные.

#### Блок cost
Выводится стоимть для чека или для отправления

#### Блок parcel
Выводится детальные данные отправления

#### Блок files
Выводится файлы актуальные для отправления или счета

<details>
<summary>Схема ответа</summary>

```javascript
{
  blocks: [
    {
      title: null,
      type: 'messages',
      blocks: [
        {
          type: 'success',
          content_type: 'text',
          text: 'Пин-код для получения 1 посылки: 678037',
          icon: 'information',
        }
      ]
    },
    {
      title: null,
      type: 'cost',
      blocks: [
        {
          title: 'Товары',
          price: 18820,
          type: 'cost-row',
          block: null,
        },
        {
          title: 'Доставка',
          price: 1000,
          blocks: [ // Из чего слкадывается стоимость доставки
            {
              title: 'Доставка Сима-ленд',
              price: null,
              notice: 'Включена в стоимость',
            },
            {
              title: 'Доставка Сима-ленд',
              price: 450,
              notice: null,
            },
          ],
        },
        {
          title: 'Итого за отправление 1',
          price: 10000,
          type: 'cost-row',
          block: null,
        },
      ]
    },
    {
      title: null,
      type: 'parcel',
      blocks: [
        {
          info: 'Отправление ждёт отмены. Это может занять несколько минут.',
          deliveryDate: 'Доставка 15 апреля (пн) с 14:00 до 20:00',
          deliveryType: 'Службой доставки Сима-ленд до двери по адресу: г. Екатеринбург, ул. Ленина, 1, кв 86',
          contact: {
            name: 'Иванов Иван',
            phone_number: 'tel:+91234567890',
            phone_number_formatted: '+7(123)456-78-90'
          }
          actions: [
            {
              type: 'action',
              text: 'Отменить отправление',
              action: 'cancel-parcel',
            },
            {
              type: 'action',
              text: 'Заказать еще',
              action: 'rotate-parcel',
            },
            {
              type: 'action',
              text: 'Отслеживание'
              action: 'show-tracking-modal',
              data: {
                trackNumber: 12345678910,
                 website: 'http://elivery-service.ru/',
              }
            },
            {
              type: 'link',
              text: 'Отслеживание'
              url: 'http://delivery-service.ru/?trackId=123678910',
            },
            {
              type: 'show-pickup-point',
              text: 'Подробно о пункте выдачи',
              data: {
                id: 1234567, // Идентификатор пункт выдачи
              }
            }
          ]
        }
      ]
    },
    {
      title: null,
      type: 'files',
      blocks: [
        {
          name: 'Счет по заказу',
          url: '/bill-123456.xls',
          format: 'xls',
        },
        {
          name: 'Отгрузочные документы',
          url: '/documents-123456.zip',
          format: 'zip'
        }
      ]
    }
  ],
}
```

</details>

---

## Другие API

### Изменения в заказе

Entry point: `/orders/v1/#id/changed-items-view`

API должно возвращать список изменений в заказе

<details>
<summary>Схема ответа</summary>

```javascript
{
  items: [
    {
      id: 123456,
      sid: 456789,
      photo: 'https://cdn.host.com/path/to/img.jpg',
      title: 'Ножницы',
      qty: '10 наборов',
      unit: 'шт.', // единица измерения в Им падеже ед. числе
      totalPrice: 2500,
      price: 250,
      isNotAvailable: true,
      movedToOrder: {
        id: 123456,
        link: "link/to/order/123456",
      },
      deliveryCost: 100,
      wholesaleType: 'Опт "Крупный опт"',
      wasInOrder: '50 шт.', // Было в заказе
      bacameInOrder: '10 шт.', // Вы получите
      isWished: true,
    }
  ],
  nextPage: [
    {
      name: 'after-sid',
      value: '123456'
    }
  ]
}
```

</details>

---

### Список заявок

Entry point: `/orders/v1/#id/requests-view`

API должно возвращать список заявок относящихся к заказу организатора СП

<details>
<summary>Схема ответа</summary>

```javascript
{
  items: [
    {
      id: 123456,
      title: 'Заявка №8608172',
      info: '1 товар, 1 единица',
      cost: 17988166,
      author: 'Константиновопльский Константин Констанотинович',
      url: '/order/123456',
    }
  ],
  nextPage: [
    {
      name: 'after-id',
      value: '123456'
    }
  ]
}
```

</details>