Set Kit API Reference

Set Kit представляет из себя программный комплекс состоящий из трёх компонентов: клиента (в данном случае web интерфейс для управления и конфигурированием сервера), сервера и база данных(с которой работает сервер). Версия документации в формате PDF

API Endpoint
https://localhost:8081/set-kit
Terms of Service: https://www.crystals.ru/agreement
Contact: setkit@crystals.ru
Schemes: http, https
Version: latest

Мягкий чек

Эти методы позволяют сохранять, изменять и удалять чек

Сохранить мягкий чек

POST /softcheques, /softcheques/shop/{shop}

Сохраняет присланный чек. В заголовке Location ответа возвращает путь, по которому можно получить этот чек. Важно, что используя этот метод, guid чека всегда гененируется на стороне SetKit. Для того чтобы сохранить МЧ в конкретном магазине ипользуем PATH с указанием shop. Для сохранения чека с guid внешней системы, необходмио использовать метод Обновить чек

Мягкий чек

shop: int
in path

номер магазина

Request Content-Types: application/json
Request Example
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
200 OK

Чек успешно сохранён

400 Bad Request

Невалидный запрос (см. также MissingPropertiesError)

Response Content-Types: application/json
Response Example (200 OK)
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
Response Headers (200 OK)
Location

URL страницы, по которой доступен этот чек

object
Response Example (400 Bad Request)
{
  "code": 1040,
  "message": "Не корректно сформирован json запрос."
}

Получить мягкий чек в определённом статусе по его guid

GET /softcheques/{guid}?status={status}, /softcheques/{guid}/shop/{shop}?status={status}

Возвращает чек с указанным guid

guid: string
in path

guid мягкого чека

shop: int
in path

номер магазина

status: string
in path

статус мягкого чека

200 OK

Чек найден

404 Not Found

Чек не найден (см. также AlreadyOnCash, AlreadyPaid, AlreadyRemoved)

Response Content-Types: application/json
Response Example (200 OK)
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
Response Example (404 Not Found)
{
  "code": 1010,
  "message": "Мягкий чек не найден."
}

Получить мягкий чек по его guid

GET /softcheques/{guid}, /softcheques/{guid}/shop/{shop}

Возвращает чек с указанным guid

guid: string
in path

guid мягкого чека

shop: int
in path

номер магазина

200 OK

Чек найден

404 Not Found

Чек не найден

Response Content-Types: application/json
Response Example (200 OK)
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
Response Example (404 Not Found)
{
  "code": 1010,
  "message": "Мягкий чек не найден."
}

Обновить чек

PUT /softcheques/{guid}, /softcheques/{guid}/shop/{shop}

Ищет в хранилище локальную версию чека по guid и обновляет записи. Если чека не существует, то создаст его. Будьте внимательны! Обновление, по своей сути, полностью затирает существующие данные. То есть, необходимо отсылать не изменения чека, а полную изменную версию. (каждый раз)

Мягкий чек

guid: string
in path

guid мягкого чека

shop: int
in path

номер магазина

Request Content-Types: application/json
Request Example
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
200 OK

Чек успешно сохранён

400 Bad Request

Невалидный запрос (см. также MissingPropertiesError)

Response Content-Types: application/json
Response Example (200 OK)
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
Response Example (400 Bad Request)
{
  "code": 1040,
  "message": "Не корректно сформирован json запрос."
}

Удалить мягкий чек

DELETE /softcheques/{guid}, /softcheques/{guid}/shop/{shop}

Переводит чек в статус deleted, и после этого его невозможно получить извне. Стоит сказать, что после этого его guid можно использовать для другого чека

guid: string
in path

guid мягкого чека

shop: int
in path

номер магазина

200 OK

Чек успешно сохранён

404 Not Found

Невалидные данные

Response Content-Types: application/json
Response Example (404 Not Found)
{
  "code": 1010,
  "message": "Мягкий чек не найден."
}

Обновить частично мягкий чек

PATCH /softcheques/{guid}, /softcheques/{guid}/shop/{shop}

Обновление МЧ(в данной версии выполняет только обновление статуса МЧ и информации о слипе).

Мягкий чек

guid: string
in path

guid мягкого чека

shop: int
in path

номер магазина

Request Content-Types: application/json
Request Example
{
  "status": "READY_TO_PAYMENT",
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  }
}
200 OK

Чек успешно обновлен

404 Not Found

Мягкий чек не найден. (см. также NotFound)

Response Content-Types: application/json
Response Example (200 OK)
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}
Response Example (404 Not Found)
{
  "code": 1010,
  "message": "Мягкий чек не найден."
}

Получить список мягких чеков по набору параметров

GET /softcheques?phone={phone}&status={status}&shortView={shortView}&lengthGuidNumber={lengthGuidNumber}&prefixGuid={prefixGuid}&offset={offset}&limit={limit}, /softcheques/shop/{shop}?phone={phone}&status={status}&shortView={shortView}&lengthGuidNumber={lengthGuidNumber}&prefixGuid={prefixGuid}&offset={offset}&limit={limit}, /softcheques/kitNumber/{kitNumber}?phone={phone}&status={status}&shortView={shortView}&lengthGuidNumber={lengthGuidNumber}&prefixGuid={prefixGuid}&offset={offset}&limit={limit}, /softcheques/kitNumber/{kitNumber}/shop/{shop}?phone={phone}&status={status}&shortView={shortView}&lengthGuidNumber={lengthGuidNumber}&prefixGuid={prefixGuid}&offset={offset}&limit={limit}

Возвращает список мягких чеков

shop: int
in path

номер магазина

kitNumber: string
in path

номер комплекта к которому относится мягкий чек

phone: string
in path

телефон клиента, может быть передано несколько через '|'(phone=79991234567|89991234567)

status: string
in path

статус мягкого чека

shortView: boolean
in path

признак, вывести результат в кратком виде

lengthGuidNumber: int
in path

длина номера мягкого чека без учета префикса

prefixGuid: string
in path

префикс номера мягкого чека

offset: int
in path

смещение выборки

limit: int
in path

кол-во мягких чеков в результате(по умолчанию 100)

200 OK

Список мягких чеков соответствующих набору параметров

200 - вкл. режим shortView

Список мягких чеков соответствующих набору параметров

Response Content-Types: application/json
Response Example (200 OK)
[
  {
    "guid": 1,
    "name": "Order",
    "status": "READY_TO_PAYMENT",
    "dateCreated": "2018-12-31 10:52",
    "kitNumber": "kit_0001",
    "isEditable": true,
    "receiptEditable": true,
    "positionsAddingAllowed": true,
    "positionsDeletingAllowed": true,
    "operationType": 1,
    "totalPrice": 46.32,
    "discountsValue": 0.18,
    "additionalInfo": "additional information",
    "location": "location",
    "positions": [
      {
        "positionOrder": 1,
        "code": "500-1",
        "departNumber": 1,
        "barcode": "5000001",
        "quantity": 4.5,
        "unitPrice": 10.29,
        "vat": -20,
        "vatValue": 20,
        "discountValue": 0.18,
        "totalPrice": 46.32,
        "isFixedPrice": false,
        "isFixedDiscounts": false,
        "additionalInfo": "{'comment':'Good client'}",
        "positionDiscounts": [
          {
            "cardNumber": "10001001-v",
            "quantity": 1,
            "advertisementId": "discount-001-code",
            "advertisementCode": "discount-001",
            "advertisementName": "discount-second-good-50rub",
            "actionDiscountType": "discount-type-01",
            "value": 0.18,
            "additionalInfo": "{'comment':'Discount for first position'}"
          }
        ]
      }
    ],
    "client": {
      "guid": "0001",
      "cardNumber": "10001001-v",
      "firstName": "Иван",
      "lastName": "Иванов",
      "middleName": "Иванов",
      "email": "ivanov@e1.com",
      "phone": "8-800-999-99-99",
      "accumulation": 2100000,
      "bonusBalance": 50000,
      "clientNotificationType": "BY_EMAIL",
      "juristicDetails": {
        "inn": "100000000012",
        "organizationName": "Организация"
      }
    },
    "slipMessage": {
      "message": "Слип из мягкого чека",
      "intoCheck": false
    },
    "payments": [
      {
        "typeId": "ExternalBankTerminalPaymentEntity",
        "bankId": "Фулфилмент",
        "amount": 10.2,
        "properties": [
          {
            "key": "card.number",
            "value": 1234
          },
          {
            "key": "auth.code",
            "value": 5678
          },
          {
            "key": "purchase.number",
            "value": 9012345
          }
        ]
      }
    ],
    "extendedAttributes": [
      {
        "key": "client.guid",
        "value": "1234"
      },
      {
        "key": "ext.code",
        "value": 5678
      }
    ]
  }
]
Response Example (200 - вкл. режим shortView )
[
  {
    "guid": 123,
    "dateCreated": "2017-12-20 16:58",
    "totalPrice": 1100,
    "kitNumber": "kit_0001"
  }
]

Сервис

Сервисные методы

Получить настройки и узнать состояние лицензии сервиса

GET /info
200 OK

Список параметров и состояние лицензии

Response Content-Types: application/json
Response Example (200 OK)
{
  "version": "2.0.0",
  "licenses": {
    "name": "SetKit",
    "count": 1,
    "licenseStatus": "OK",
    "licenseAgentStatus": "OK"
  },
  "properties": {
    "some.property": "some.value"
  }
}

Сбросить список магазинов, обслуживаемых по лицензии типа oneshop

GET /shops/reset
200 OK

Список успешно сброшен

Schema Definitions

SoftCheque: object

Мягкий чек / заказ.

guid: string

Уникальный идентификатор чека. При создании заказа не обязателен!

name: string

Наименование мягкого чека/заказа

status: string CREATED, READY_TO_PAYMENT, PAYMENT, COMPLETED, CANCELED

Статус мягкого чека. CREATED - Черновик, READY_TO_PAYMENT - Готов, PAYMENT - На кассе, COMPLETED - Оплачен, CANCELED - Отменён.

dateCreated: timestamp

Дата создания чека

shopNumber: integer (int32)

Номер магазина

isEditable: boolean

Управление запретом редактирования позиций (добавление новых/удаление переданных разрешено)

totalPrice: decimal

Конечная стоимость чека в рублях

discountsValue: decimal

Сумма все скидок в рублях (не учитывается кассой)

additionalInfo: object

Любая дополнительная информация

location: object

Место расчетов

positions: array

Список позиций, которые фигурируют в чеке

client: client

Информация о клиенте

slipMessage: slipMessage

Информация о слипе

operationType: integer (int32)

Признак расчета

prePayment: decimal

Сумма по чеку предоплатой (авансом)

receiptEditable: boolean

Управление полным запретом редактирования чека (добавление и удаление позиций, редактирование количеств)

destChequeGuid: string

GUID фактического МЧ (заполняется кассой при коммите данного МЧ)

payments: array

Список оплат, которыми должен быть автоматически оплачен чек. На данный момент кассой воспринимается только первая оплата из списка. Также, ни одна оплата из списка не будет приниматься в расчет, если задано поле prePayment.

extendedAttributes: array

Расширенные атрибуты чека.

positionsAddingAllowed: boolean

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

positionsDeletingAllowed: boolean

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

kitNumber: string

Номер комплекта к которому относится мягкий чек

Example
{
  "guid": 1,
  "name": "Order",
  "status": "READY_TO_PAYMENT",
  "dateCreated": "2018-12-31 10:52",
  "kitNumber": "kit_0001",
  "isEditable": true,
  "receiptEditable": true,
  "positionsAddingAllowed": true,
  "positionsDeletingAllowed": true,
  "operationType": 1,
  "totalPrice": 46.32,
  "discountsValue": 0.18,
  "additionalInfo": "additional information",
  "location": "location",
  "positions": [
    {
      "positionOrder": 1,
      "code": "500-1",
      "departNumber": 1,
      "barcode": "5000001",
      "quantity": 4.5,
      "unitPrice": 10.29,
      "vat": -20,
      "vatValue": 20,
      "discountValue": 0.18,
      "totalPrice": 46.32,
      "isFixedPrice": false,
      "isFixedDiscounts": false,
      "additionalInfo": "{'comment':'Good client'}",
      "positionDiscounts": [
        {
          "cardNumber": "10001001-v",
          "quantity": 1,
          "advertisementId": "discount-001-code",
          "advertisementCode": "discount-001",
          "advertisementName": "discount-second-good-50rub",
          "actionDiscountType": "discount-type-01",
          "value": 0.18,
          "additionalInfo": "{'comment':'Discount for first position'}"
        }
      ]
    }
  ],
  "client": {
    "guid": "0001",
    "cardNumber": "10001001-v",
    "firstName": "Иван",
    "lastName": "Иванов",
    "middleName": "Иванов",
    "email": "ivanov@e1.com",
    "phone": "8-800-999-99-99",
    "accumulation": 2100000,
    "bonusBalance": 50000,
    "clientNotificationType": "BY_EMAIL",
    "juristicDetails": {
      "inn": "100000000012",
      "organizationName": "Организация"
    }
  },
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  },
  "payments": [
    {
      "typeId": "ExternalBankTerminalPaymentEntity",
      "bankId": "Фулфилмент",
      "amount": 10.2,
      "properties": [
        {
          "key": "card.number",
          "value": 1234
        },
        {
          "key": "auth.code",
          "value": 5678
        },
        {
          "key": "purchase.number",
          "value": 9012345
        }
      ]
    }
  ],
  "extendedAttributes": [
    {
      "key": "client.guid",
      "value": "1234"
    },
    {
      "key": "ext.code",
      "value": 5678
    }
  ]
}

SoftChequePart: object

Используется при обновлении МЧ, описывает часть МЧ которая будет обновлена.

status: string CREATED, READY_TO_PAYMENT, PAYMENT, COMPLETED, CANCELED

Статус мягкого чека. CREATED - Черновик, READY_TO_PAYMENT - Готов, PAYMENT - На кассе, COMPLETED - Оплачен, CANCELED - Отменён.

slipMessage: slipMessage

Информация о слипе

Example
{
  "status": "READY_TO_PAYMENT",
  "slipMessage": {
    "message": "Слип из мягкого чека",
    "intoCheck": false
  }
}

SoftChequeShortView: object

Мягкий чек / заказ.

guid: string

Уникальный идентификатор чека

dateCreated: timestamp

Дата создания чека

totalPrice: decimal

Конечная стоимость чека в рублях

kitNumber: string

Номер комплекта к которому относится мягкий чек

Example
{
  "guid": 123,
  "dateCreated": "2017-12-20 16:58",
  "totalPrice": 1100,
  "kitNumber": "kit_0001"
}

SoftCheques: array

Список мягких чеков

SoftCheque
Example
[
  {
    "guid": 1,
    "name": "Order",
    "status": "READY_TO_PAYMENT",
    "dateCreated": "2018-12-31 10:52",
    "kitNumber": "kit_0001",
    "isEditable": true,
    "receiptEditable": true,
    "positionsAddingAllowed": true,
    "positionsDeletingAllowed": true,
    "operationType": 1,
    "totalPrice": 46.32,
    "discountsValue": 0.18,
    "additionalInfo": "additional information",
    "location": "location",
    "positions": [
      {
        "positionOrder": 1,
        "code": "500-1",
        "departNumber": 1,
        "barcode": "5000001",
        "quantity": 4.5,
        "unitPrice": 10.29,
        "vat": -20,
        "vatValue": 20,
        "discountValue": 0.18,
        "totalPrice": 46.32,
        "isFixedPrice": false,
        "isFixedDiscounts": false,
        "additionalInfo": "{'comment':'Good client'}",
        "positionDiscounts": [
          {
            "cardNumber": "10001001-v",
            "quantity": 1,
            "advertisementId": "discount-001-code",
            "advertisementCode": "discount-001",
            "advertisementName": "discount-second-good-50rub",
            "actionDiscountType": "discount-type-01",
            "value": 0.18,
            "additionalInfo": "{'comment':'Discount for first position'}"
          }
        ]
      }
    ],
    "client": {
      "guid": "0001",
      "cardNumber": "10001001-v",
      "firstName": "Иван",
      "lastName": "Иванов",
      "middleName": "Иванов",
      "email": "ivanov@e1.com",
      "phone": "8-800-999-99-99",
      "accumulation": 2100000,
      "bonusBalance": 50000,
      "clientNotificationType": "BY_EMAIL",
      "juristicDetails": {
        "inn": "100000000012",
        "organizationName": "Организация"
      }
    },
    "slipMessage": {
      "message": "Слип из мягкого чека",
      "intoCheck": false
    },
    "payments": [
      {
        "typeId": "ExternalBankTerminalPaymentEntity",
        "bankId": "Фулфилмент",
        "amount": 10.2,
        "properties": [
          {
            "key": "card.number",
            "value": 1234
          },
          {
            "key": "auth.code",
            "value": 5678
          },
          {
            "key": "purchase.number",
            "value": 9012345
          }
        ]
      }
    ],
    "extendedAttributes": [
      {
        "key": "client.guid",
        "value": "1234"
      },
      {
        "key": "ext.code",
        "value": 5678
      }
    ]
  }
]

SoftChequesShortView: array

Список мягких чеков в кратком виде

SoftChequeShortView
Example
[
  {
    "guid": 123,
    "dateCreated": "2017-12-20 16:58",
    "totalPrice": 1100,
    "kitNumber": "kit_0001"
  }
]

Client: object

Клиент (информация о клиенте).

cardNumber: string

Номер карты клиента

guid: string

Идентификатор клиента в системе (не учитывается кассой)

firstName: string

Имя (не учитывается кассой)

lastName: string

Фамилия (не учитывается кассой)

middleName: string

Отчество (не учитывается кассой)

email: string

Адрес электронной почты

phone: string

Моб. телефон

accumulation: decimal

Общая сумма накоплений (денежные, на основании истории покупок) (не учитывается кассой)

bonusBalance: decimal

Баланс активных бонусов (не учитывается кассой)

clientNotificationType: string BY_EMAIL, BY_PHONE

Способ отправки электронной копии чека покупателю

juristicDetails: juristicDetails

Информация о ЮЛ

Example
{
  "guid": "0001",
  "cardNumber": "10001001-v",
  "firstName": "Иван",
  "lastName": "Иванов",
  "middleName": "Иванов",
  "email": "ivanov@e1.com",
  "phone": "8-800-999-99-99",
  "accumulation": 2100000,
  "bonusBalance": 50000,
  "clientNotificationType": "BY_EMAIL",
  "juristicDetails": {
    "inn": "100000000012",
    "organizationName": "Организация"
  }
}

Position: object

Позиция в чеке

positionOrder: integer (int32)

Порядковый номер позиции в заказе (МЧ) (не учитывается кассой)

code: string

Код (артикул) товара

departNumber: integer (int64)

Номер отдела (не учитывается кассой)

barcode: string

Штриховой код товара

quantity: decimal

Количество товара в позиции

unitPrice: decimal

Цена за единицу товара в рублях

vat: float

Ставка НДС (в процентах)

vatValue: decimal

Сумма НДС в рублях (не учитывается кассой)

discountValue: decimal

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

totalPrice: decimal

Стоимость позиции с учётом скидок в рублях (не учитывается кассой)

isFixedPrice: boolean

Запрет изменения цены позиции лояльностью

isFixedDiscounts: boolean

Запрет участия в любой лояльности

additionalInfo: string

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

positionDiscounts: array

Подробная информация о сработавших cкидках на позицию

ccdDeclaration: string

Номер Грузовой Таможенной Декларации (ГТД) товара. Формат: XXXXXXXX/XXXXXX/XXXXXXX, где X - цифра.

countryOfOriginCode: string

Код страны происхождения товара. Код должен задаваться согласно Общероссийскому Классификатору Стран Мира (ОКСМ). Например, код России согласно ОКСМ это 643.

calculationMethod: integer (int32)

Признак способа расчета

calculationSubject: integer (int32)

Признак предмета расчета

mark: string

Марка (для маркированного товара)

marks: array

Марки (для маркированного товара)

sourceChequeGuid: string

GUID исходного мягкого чека (заполняется кассой при формировании фактического МЧ)

returnRestricted: boolean

Признак запрета возврата позиции

storage: string

Склад отгрузки товара

sellerCode: string

Код продавца

name: string

Наименование товара

productionDate: string

Дата производства

extendedAttributes: array

Расширенные атрибуты позиции.

canChangePrice: boolean

Признак разрешения ручного изменения стоимости позиции (коррекция стоимости)

Example
{
  "code": "500-1",
  "departNumber": 1,
  "barcode": "5000001",
  "quantity": 4.5,
  "unitPrice": 10.29,
  "vat": 10,
  "vatValue": 20,
  "discountValue": 0.18,
  "totalPrice": 46.32,
  "isFixedPrice": false,
  "isFixedDiscounts": false,
  "positionDiscounts": [
    {
      "cardNumber": "10001001-v",
      "quantity": 1,
      "advertisementId": "discount-001-code",
      "advertisementCode": "discount-001",
      "advertisementName": "discount-second-good-50rub",
      "actionDiscountType": "discount-type-01",
      "value": 0.18,
      "additionalInfo": "{'comment':'Discount for first position'}"
    }
  ],
  "ccdDeclaration": "12345678/123456/1234567",
  "countryOfOriginCode": "643",
  "calculationMethod": 4,
  "calculationSubject": 1,
  "mark": "01056000921lмVzф1",
  "marks": [
    "01056000921lмVzф2",
    "01056000921lмVzф3"
  ],
  "returnRestricted": false,
  "storage": "К00000002",
  "sellerCode": "00007",
  "name": "Товар из МЧ",
  "productionDate": "2021-09-30",
  "extendedAttributes": [
    {
      "key": "counterparty.vat",
      "value": "20.0"
    },
    {
      "key": "ext.code",
      "value": 5679
    }
  ],
  "canChangePrice": true
}

Discount: object

Скидка на позицию

cardNumber: string

Номер дисконтной карты

positionOrder: integer (int64)

Порядковый номер позиции на которую предоставлена скидка (не учитывается кассой)

code: string

Код скидки (не учитывается кассой)

quantity: decimal

Количество товара, на которое далась скидки

advertisementId: string

Идентификатор скидки в системе лояльности

advertisementCode: string

Внешний код скидки (external code)

advertisementName: string

Наименование скидки в системе лояльности

actionDiscountType: string

Тип скидки в системе лояльности (аналогичный импортируемому в РА SET10)

value: decimal

Значение скидки в рублях

additionalInfo: object

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

Example
{
  "cardNumber": "10001001-v",
  "positionOrder": 1,
  "code": 1,
  "quantity": 1.01,
  "advertisementId": "discount-001-code",
  "advertisementCode": "discount-001",
  "advertisementName": "discount-second-good-50rub",
  "actionDiscountType": "discount-type-01",
  "value": 25000,
  "additionalInfo": "Скидка на 500-1 товар"
}

SlipMessage: object

Информация о слипе.

message: string

Сообщение в слипе

intoCheck: boolean

Признак печати в чеке

Example
{
  "message": "Слип из мягкого чека",
  "intoCheck": false
}

AppInfo: object

Информация по сервису.

version: string

Версия сервиса

license: object

Информация по лицензии

properties: object

Набор настроек сервиса

Example
{
  "version": "2.0.0",
  "licenses": {
    "name": "SetKit",
    "count": 1,
    "licenseStatus": "OK",
    "licenseAgentStatus": "OK"
  },
  "properties": {
    "some.property": "some.value"
  }
}

JuristicDetails: object

Информация о ЮЛ.

inn: string

ИНН

organizationName: string

Название организации

Example
{
  "inn": "100000000012",
  "organizationName": "Организация"
}

Payment: object

Оплата

typeId: string

Идентификатор типа оплаты. В случае плагинной оплаты - это id соответствующего плагина, внешний банковский терминал - ExternalBankTerminalPaymentEntity, предоплата - PrepaymentEntity. Автоматическое внесение оплаты поддерживается только для перечисленных типов. Для остальных типов - оплата будет лишь выбрана, но не внесена.

bankId: string

Идентификатор банка. По сути это название банка из Set10 (Кассовый модуль - Банки).

amount: decimal

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

properties: array

Дополнительные свойства оплаты

Example
{
  "typeId": "ExternalBankTerminalPaymentEntity",
  "bankId": "Фулфилмент",
  "amount": 10.2,
  "properties": [
    {
      "key": "card.number",
      "value": 1234
    },
    {
      "key": "auth.code",
      "value": 5678
    },
    {
      "key": "purchase.number",
      "value": 9012345
    }
  ]
}

Property: object

Дополнительное (расширенное) свойство / атрибут

key: string

Ключ (наименование свойства/атрибута)

value: string

Значение

Example
{
  "key": "card.number",
  "value": 1234
}

ValidationError: object

code: integer (int32)
message: string
Example
{
  "code": 1040,
  "message": "Не корректно сформирован json запрос."
}

MissingPropertiesError: object

code: integer (int32)
message: string
error: array
Example
{
  "code": 1041,
  "message": "Отсутствуют параметры в запросе",
  "error": [
    "isEditable: Поле должно быть определено."
  ]
}

NotFound: object

Чек не найден

code: integer (int32)
message: string
Example
{
  "code": 1010,
  "message": "Мягкий чек не найден."
}

AlreadyOnCash: object

Ответ в случае, если уже на кассе

code: integer (int32)
message: string
Example
{
  "code": 1011,
  "message": "Мягкий чек оплачивается на кассе."
}

AlreadyPaid: object

Ответ в случае, если уже оплачен

code: integer (int32)
message: string
Example
{
  "code": 1012,
  "message": "Мягкий чек оплачен."
}

AlreadyRemoved: object

Ответ в случае, если уже удалён

code: integer (int32)
message: string
Example
{
  "code": 1013,
  "message": "Мягкий чек удалён."
}

AnotherShop: object

Ответ в случае, если прикреплен к другому магазину

code: integer (int32)
message: string
Example
{
  "code": 1014,
  "message": "Мягкий чек прикреплен к другому магазину."
}

LicenseExpired: object

Ответ в случае, если лицензия истекла

code: integer (int32)
message: string
Example
{
  "code": 1050,
  "message": "Лицензия истекла."
}

LicenseOfflineModeExpired: object

Ответ в случае, если период работы в оффлайн режиме истек

code: integer (int32)
message: string
Example
{
  "code": 1051,
  "message": "Работа в оффлайн режиме с агентом лицензирования истекла."
}

LicenseNotFound: object

Ответ в случае, если лицензия не найдена

code: integer (int32)
message: string
Example
{
  "code": 1052,
  "message": "Отсутствует лицензия на подключение."
}

LicenseUnsuitable: object

Ответ в случае, если полученных лицензий недостаточно для обработки запроса с данного магазина (тип лицензии 'oneshop')

code: integer (int32)
message: string
Example
{
  "code": 1053,
  "message": "Сервис мягких чеков не обслуживает данный магазин. Обратитесь в службу поддержки для получения лицензии."
}