# Консолидация

# Создание товаров

Для создания товаров можно полноценно использовать [Апи работы с товарами](https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/chapter/%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B),

а также [импорты/экспорты](https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteimportupload) excel файлов с номеклатурой.

Также полноценно работает и раздел Товары в [ЛК пользователя ](https://lk.kak2c.ru/)

В дополнение к этим стандартным возможностям - есть режим автосоздания номенклатуры для аккаунта Консолидации - прямо из [Апи заказов на отгрузку](https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteorders).

Для этого в order.items нужно - в дополнение к стандартным полям строrи заказа (num, variantId, price, quantity, vatRate) - передать поля:

<div id="bkmrk-skutype%2C-barcode%2C-na">**skuType, barcode, name, article**</div>```JSON
 {
 	...
	"items": [ 
                {
                    "num": 1,
                    "variantId": "100-201",
                    "price": 1000.00,              
                    "quantity": 2,                   
                    "skuType": "SKU",                   
                    "vatRate": "VAT_20",                  
                    "barcode": "461234567836",
                    "name": "Конструктор для развития творчества №12",
                    "article": "const-N12"
                }
                ...
             ]
}             
```

Система автоматически проверит наличие указанных товаров по их коду (поле variantId), и создаст, если не будет найден указанный товар.

# Создание заказов

Создание заказов работает по стандартному [Апи заказов](https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteorders). Используется "Свой склад" без контроля остатков.

Заказ создается/редактируется по указанному id. Если поле id не задано - то система сгенерирует очередной уникальный человекочитаемый номер из внутреннего пула (вида 1234-1000).

Чтобы заказ был готов к упаковке - необходимо передать статус подтверждения confirmStatus = APPROVED, а также комбинацию способа и статуса оплаты, позволяющую начать упаковку. А также остальные поля по строкам заказа, способу и адресу доставки.

# Упаковка заказов

Упаковка осуществляется передачей по заказу желаемого состояния упакованных мест (количество мест, их товарное содержимое, габариты и масса, уникальные номера товаров (например, честный знак), штрихкод места (опционально)).

### Создание/редактирование всех упакованных мест заказа

/api/lite/orders/consolidation/packing

Создание/редактирование набора упакованных мест заказов. Номер заказа обязательный параметр - поле id.

Система трактует переданный набор упакованных мест как итоговое желаемое состояние упакованных мест заказа. Если уже есть упакованные места - система проанализирует и приведет их в соответствие с переданным набором.

Сверка идет по полю num и barcode.

Если у мест передан штрихкод (поле barcode) - система запишет его, иначе присвоит ШК из внутреннего пула.

Система позволяет передавать сразу много заказов на упаковку в запросе (массив orders).

**Важно.** Сразу после первичной полной упаковки заказа (по данным системы - все товары заказа упакованы) - идет выгрузка заказа в Апи службы доставки. Если получены ошибки от службы доставки - операция вернет success = false и список полученных ошибок. Их необходимо исправить и повторно вызвать упаковку заказа.

####   
**Пример запроса**

```JSON
{
    "orders": [
        {
            "id": "60-71",
			"packings": [				
                {                                 
					"num": 1,
                    "barcode": "123456789",
					"items": [
						{
							"num":1,
							"variantId": "154",
							"quantity": 2,
                           	"accountingAttributes": [
                                  {
                                      "code": "chestnyznak",
                                      "stringValue":"010463001165001521WRA5MP18REV1Y91EE0692LsS8Yf4v2H/umBxy5U/QqZG+pWIGdAqdCktd7H5JAoI="
                                  }
                            	]                            
						},
                        {
							"num":2,
							"variantId": "100-201",
							"quantity": 2                                             
						}                                          
					],
                    "measurements": {
                        "weight": 565,
                        "dimensions": {
                            "height": 10,
                            "width": 11,
                            "depth": 13
                        }
                    } 
				}                
                                           
                ]
        }
    ]
}
```

#### Успешный ответ

```JSON
{
    "orders": [
        {
            "id": "60-71",
            "success": true
        }
    ],
    "success": true
}
```

##### Ошибка:

```JSON
{
    "errors": [
        {
            "code": 0,
            "message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
        }
    ],
    "orders": [
        {
            "errors": [
                {
                    "code": 0,
                    "message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
                }
            ],
            "id": "5113-1141",
            "success": false
        }
    ],
    "success": false
}
```

### Создание/редактирование упакованного места заказа поштучно

PUT /api/lite/orders/consolidation/packing

Создание/редактирование упакованного места заказа поштучно. Влияет только на одно место заказа и изменяет его согласно переданному желаемому состоянию. Остальные места заказа не затрагиваются.

Номер заказа обязательный параметр - поле id.

Формат запроса и ответа аналогичен POST запросу.

####   
**Пример запроса**

```JSON
{
    "orders": [
        {
            "id": "60-71",
			"packings": [				
                {                                 
					"num": 1,
                    "barcode": "123456789",
					"items": [
						{
							"num":1,
							"variantId": "154",
							"quantity": 2                                             
						},
                        {
							"num":2,
							"variantId": "100-201",
							"quantity": 2                                             
						}                                          
					],
                    "measurements": {
                        "weight": 565,
                        "dimensions": {
                            "height": 10,
                            "width": 11,
                            "depth": 13
                        }
                    } 
				}                
                                           
                ]
        }
    ]
}
```

#### Успешный ответ

```JSON
{
    "orders": [
        {
            "id": "60-71",
            "success": true
        }
    ],
    "success": true
}
```

### <span style="color: #000000;">Получение упакованных мест заказа</span>

/api/lite/orders/consolidation/packing

Возвращает перечень упакованных мест заказа.

Обязательный параметр: id заказа.

##### Пример ответа по частично упакованному заказу

```JSON
{
    "orders": [
        {
            "date": "2023-09-26 13:40:13",
            "externalId": "60-72",
            "id": "60-72",
            "items": [
                {
                    "article": "",
                    "barcode": "2000916300001",
                    "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                    "itemAmountState": {},
                    "itemDimensions": {
                        "depth": 1,
                        "height": 15,
                        "width": 5
                    },
                    "itemWeight": 80,
                    "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                    "num": 1,
                    "price": 2846.00,
                    "productExtId": "BR00T-000140",
                    "productId": "1013",
                    "productVariantCount": 3,
                    "quantity": 2,
                    "skuType": "SKU",
                    "variantExtId": "BR00T-000140-2",
                    "variantId": "154",
                    "vatRate": "NO_VAT",
                    "vatSkuProduct": "NO_VAT"
                },
                {
                    "article": "100-201-артикул",
                    "barcode": "100-100-201",
                    "itemAmountState": {},
                    "itemDimensions": {
                        "depth": 10,
                        "height": 10,
                        "width": 10
                    },
                    "itemWeight": 500,
                    "name": "Тест товар - 100-201",
                    "num": 2,
                    "price": 1000.00,
                    "productId": "1066",
                    "productVariantCount": 1,
                    "quantity": 2,
                    "skuType": "SKU",
                    "variantId": "100-201",
                    "vatRate": "VAT_20"
                },
                {
                    "article": "",
                    "barcode": "",
                    "name": "Доставка",
                    "num": 3,
                    "price": 0.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "notPackedItems": [
                {
                    "article": "100-201-артикул",
                    "barcode": "100-100-201",
                    "itemDimensions": {
                        "depth": 10,
                        "height": 10,
                        "width": 10
                    },
                    "itemWeight": 500,
                    "name": "Тест товар - 100-201",
                    "num": 2,
                    "productId": "1066",
                    "quantity": 1,
                    "skuType": "SKU",
                    "variantId": "100-201"
                },
                {
                    "article": "",
                    "barcode": "2000916300001",
                    "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                    "itemDimensions": {
                        "depth": 1,
                        "height": 15,
                        "width": 5
                    },
                    "itemWeight": 80,
                    "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                    "num": 1,
                    "productExtId": "BR00T-000140",
                    "productId": "1013",
                    "quantity": 1,
                    "skuType": "SKU",
                    "variantExtId": "BR00T-000140-2",
                    "variantId": "154"
                }
            ],
            "packings": [
                {
                    "barcode": "3837100281759",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "article": "",
                            "barcode": "2000916300001",
                            "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                            "itemDimensions": {
                                "depth": 1,
                                "height": 15,
                                "width": 5
                            },
                            "itemWeight": 80,
                            "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                            "num": 1,
                            "price": 2846.00,
                            "productExtId": "BR00T-000140",
                            "productId": "1013",
                            "productVariantCount": 3,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantExtId": "BR00T-000140-2",
                            "variantId": "154",
                            "vatRate": "NO_VAT",
                            "vatSkuProduct": "NO_VAT"
                        },
                        {
                            "accountingAttributes": [],
                            "article": "100-201-артикул",
                            "barcode": "100-100-201",
                            "itemDimensions": {
                                "depth": 10,
                                "height": 10,
                                "width": 10
                            },
                            "itemWeight": 500,
                            "name": "Тест товар - 100-201",
                            "num": 2,
                            "price": 1000.00,
                            "productId": "1066",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "100-201",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 13,
                            "height": 10,
                            "width": 11
                        },
                        "success": true,
                        "weight": 565
                    },
                    "num": 1
                }
            ],
            "status": "ORDER_INFO_READY_TO_PACK"
        }
    ],
    "recordsTotal": 1,
    "success": true
}
```

### <span style="color: #000000;">Получение стикера упакованного места</span>

/api/lite/orders/consolidation/packing/print

Возвращает pdf файл со стикером 6x6 см для переданного упакованного места, в формате base64.

Обязательный параметр: **barcode** - ШК упакованного места.

```JSON
{
	"success": true,
	"content": "base64"
}
```

Пример стикера:

[![image-1696274700224.png](https://wiki.kak2c.ru/uploads/images/gallery/2023-10/scaled-1680-/image-1696274700224.png)](https://wiki.kak2c.ru/uploads/images/gallery/2023-10/image-1696274700224.png)

# Отгрузка заказов (создание реестра отгрузки)

### Создание/редактирование реестра отгрузки

/api/lite/takeout\_list

Создание реестра отгружаемых заказов, объединенных одной службой доставки. По каждой службе доставки необходимо формировать отдеьный реестр. В отгруженный реестр вносить изменения состава заказов более нельзя.

```JavaScript
{
    "id":"1105",
    "courierCode":"LOGSIS",
    "takeoutDate": "2023-09-22",
    "takeoutHourStart":"09:00",
    "takeoutHourEnd":"18:00",
    "gatherType": "COURIER",
    "date":"2023-09-20 22:12:12", 
    "warehouseCode" : "e98f2e33-d488-d75c-4e38-b912e87429b6",   
    "orders": [{"id":"60-71"}, {"id":"60-72"}]
}
```

**id** - номер реестра,

**courierCode** - код курьерской компании (из перечисления),

<div id="bkmrk-takeoutdate---%D0%B4%D0%B0%D1%82%D0%B0-%D0%BF"><div><div><div>**takeoutDate** - дата передачи заказов в службу доставки,</div><div></div></div></div><div>**takeoutHourStart** - интервал сбора (начало),</div><div></div><div>**takeoutHourEnd** - интервал сбора (окончание),</div><div><div></div><div><div>**date** - дата документа реестра,</div><div></div><div>**gatherType** - способ сбора (COURIER - вызов курьера, SELF_PICKUP - самопривоз),</div><div></div><div><div><div>**warehouseCode** - код склада с которого идет отгрузка (из справочника складов аккаунта),</div><div></div><div><div><div>**orders** - список номеров заказов реестра</div></div></div></div></div></div></div></div>#### Успешный ответ

```JavaScript
{
    "id": "1105",
    "success": true
}
```

### <span style="color: #000000;">Получение реестра отгрузки</span>

/api/lite/takeout\_list

Возвращает реестр отгрузки по его id

Обязательный параметр: id реестра.

##### Пример успешного ответа

```JSON
{
    "recordsTotal": 1,
    "success": true,
    "takeoutLists": [
        {
            "availableForChanges": false,
            "courierCode": "LOGSIS",
            "date": "2023-09-22 11:53:44",
            "id": "1101",
            "orders": [
                {
                    "customer": "Тестовый Покупатель",
                    "date": "2023-09-19",
                    "id": "60-55"
                },
                {
                    "customer": "Тестовый Покупатель",
                    "date": "2023-09-19",
                    "id": "60-56"
                }
            ],
            "status": "SHIPPED",
            "takeoutDate": "2023-09-22",
            "updateTs": "2023-09-22 11:53:44.643",
            "warehouseCode": "e98f2e33-d488-d75c-4e38-b912e87429b6",
            "warehouseManager": {
                "address": {},
                "alternativePhone": "",
                "name": "Не задано",
                "passport": {},
                "patronymic": "",
                "phone": "+73434343434",
                "rawPhone": "Не задано",
                "surname": ""
            },
            "warehouseName": "Свой склад"
        }
    ]
}
```

### <span style="color: #000000;">Получение печатной формы реестра</span>

/api/lite/takeout\_list/print

Возвращает pdf файл спечатной формой реестра А4 для указанного реестра, в формате base64.

Обязательный параметр: **id** реестра.

Пример печатной формы:

[![image-1696275500785.png](https://wiki.kak2c.ru/uploads/images/gallery/2023-10/scaled-1680-/image-1696275500785.png)](https://wiki.kak2c.ru/uploads/images/gallery/2023-10/image-1696275500785.png)