REST API: товары, услуги и цены

Эта статья помогает разобраться, как через REST API получать товары, услуги, цены и признаки активности

Какая модель отвечает за номенклатуру

В REST API Ветменеджера товары и услуги описаны моделью `Good`.

В документации и OpenAPI нет отдельного endpoint `Nomenclature`. Если разработчик спрашивает про `Nomenclature`, обычно ему нужны:

  • `Good` - товар или услуга
  • `GoodGroup` - группа товара или услуги
  • `GoodSaleParam` - параметр продажи и цена


Основные endpoints

```http
GET /rest/api/good
GET /rest/api/good/{ID}
POST /rest/api/good
PUT /rest/api/good/{ID}
DELETE /rest/api/good/{ID}
```


Группы:

```http
GET /rest/api/GoodGroup
GET /rest/api/GoodGroup/{ID}
```

Параметры продажи:

```http
GET /rest/api/goodSaleParam
GET /rest/api/goodSaleParam/{ID}
PUT /rest/api/goodSaleParam/{ID}
```


Для подбора товаров и услуг в счетах используется метод:

```http
GET /rest/api/Good/ProductsDataForInvoice/
```


Пример:

```bash
curl --location --globoff 'https://{DOMAIN NAME}/rest/api/Good/ProductsDataForInvoice/?page[number]=1&page[size]=50&clinic_id=1&page[no_paging]=0&search_query=' \
--header 'X-REST-API-KEY: {REST API KEY}'
```


Как отличить услугу от товара

Признак услуги хранится в группе `GoodGroup.is_service`:

  • `0` - товар
  • `1` - услуга

В ответе `ProductsDataForInvoice` также может приходить поле `is_service`.


Где хранится цена

Основная цена хранится в параметре продажи `GoodSaleParam.price`.

Важные поля `GoodSaleParam`:

  • `good_id` - ID товара или услуги
  • `price` - цена
  • `clinic_id` - ID клиники
  • `status` - статус параметра продажи: `active` или `disabled`
  • `min_price` - минимальная цена
  • `max_price` - максимальная цена
  • `barcode` - штрихкод
  • `unit_sale_id` - единица продажи

Если в домене несколько филиалов, цена может отличаться по филиалам, потому что у параметра продажи есть `clinic_id`.


Где хранится активность

У товара или услуги `Good.is_active`: `1` - активен, `0` - деактивирован.

У параметра продажи `GoodSaleParam.status`: `active` - активен, `disabled` - отключен.

При интеграции лучше учитывать оба признака: активность самой позиции и активность параметра продажи.


Есть ли длительность у услуги

В прайсе у позиции `Good` длительность приема не задается. Длительность относится к записи на прием и передается в поле `Admission.admission_length`.

Для целей обращения длительность может быть задана в справочнике `Тип приема`. Получить цели обращения можно через `ComboManualName` / `ComboManualItem`.


Пример ответа по товару или услуге

```json
{
  "success": true,
  "message": "Record Retrieved Successfully",
  "data": {
  "totalCount": 1,
  "good": {
  "id": "485",
  "group_id": "30",
  "title": "Остеосинтез бедра, плеча",
  "is_active": "1",
  "is_for_sale": "1",
  "barcode": null,
  "group": { "id": "30", "title": "Ортопедия", "is_service": "1" },
  "goodSaleParams": [
   { "id": "1", "good_id": "485", "price": "3000.0000000000", "status": "active", "clinic_id": "1" }
   ]
 }
}
}
```


Ответственные врачи у услуги

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

В REST API-материалах отдельный endpoint или поле для чтения и изменения списка ответственных врачей услуги не описаны. Если интеграции нужно работать с ответственными врачами услуги, передайте задачу разработчику для проверки по OpenAPI и фактическому API домена.

👆 На этом пока всё