REST API: клиенты, дубли и питомцы

Эта статья описывает частые вопросы по созданию клиентов и питомцев через REST API.

Клиент

Модель клиента: `Client`. Основные endpoints:

```http
GET /rest/api/client
GET /rest/api/client/{ID}
POST /rest/api/client
PUT /rest/api/client/{ID}
```


Основные поля:

  • `id` - ID клиента
  • `last_name` - фамилия
  • `first_name` - имя
  • `middle_name` - отчество
  • `cell_phone` - мобильный телефон
  • `phone_prefix` - код страны
  • `email` - email
  • `city_id` - ID города
  • `status` - статус клиента


Статусы клиента:

  • `ACTIVE` - активный
  •  `DISABLED` - неактивный
  • `DELETED` - удален
  • `TEMPORARY` - временный


Создание клиента

```http
POST /rest/api/client
```


Пример:

```bash
curl --location --request POST 'https://{DOMAIN NAME}/rest/api/client' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \
--data-raw '{
  "last_name": "Иванов",
  "first_name": "Иван",
  "cell_phone": "79000000000",
  "phone_prefix": "7",
  "city_id": 252,
  "status": "ACTIVE"
}'
```


В интерфейсе Ветменеджера обязательные поля клиента - фамилия и город. При создании через API рекомендуется передавать фамилию, телефон и город, если город известен.


Поиск клиента по телефону

Перед созданием клиента нужно выполнить поиск, чтобы не создать дубль.

```http
GET /rest/api/client/clientsSearchData?search_query={phone}
```


Пример:

```bash
curl --location --request GET 'https://{DOMAIN NAME}/rest/api/client/clientsSearchData?search_query=79000000000' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}'
```


Телефон передавайте только цифрами, с кодом страны или без. Поиск `clientsSearchData` выполняется не только по телефону, но и по ФИО, email, кличке питомца и названию породы.


Что делать, если найдено несколько клиентов на один телефон

В Ветменеджере нет автоматического объединения карточек клиентов.

Если поиск вернул несколько клиентов:

  1. Не создавайте нового клиента автоматически. 
  2. Покажите найденные варианты пользователю интеграции или передайте ситуацию администратору клиники.
  3. Выберите основную карточку клиента.
  4. Если дубль уже создан, питомца можно перенести к основному владельцу, а дублирующую карточку деактивировать.


При ручном добавлении клиента программа проверяет совпадения по ФИО и мобильному телефону и показывает возможные совпадения. Через API такую проверку нужно выполнять самостоятельно до создания клиента.


Мультиклиника

Если в домене несколько клиник, после создания клиента нужно связать клиента с клиникой через модель `clinicsToClients`.

При работе через интерфейс программа заполняет связь автоматически. При работе через API это нужно делать самостоятельно.

Подробнее: Мультиклиниковость.


Питомец

Модель питомца: `Pet`. Основные endpoints:

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


Основные поля:

  • `owner_id` - ID владельца
  • `type_id` - ID вида питомца
  • `alias` - кличка
  • `sex` - пол
  • `birthday` - дата рождения
  • `breed_id` - ID породы
  • `status` - статус питомца


Статусы питомца:

  • `alive` - жив
  • `dead` - умер
  • `deleted` - удален


Вид и порода питомца

Получить виды питомцев: `GET /rest/api/petType`. Получить породы: `GET /rest/api/breed`.

Порода связана с видом питомца через `pet_type_id`.

В OpenAPI поле `breed_id` допускает `null`, но в пользовательских сценариях Ветменеджера вид и порода могут быть важны, например для личного кабинета клиента. Поэтому лучше передавать реальную породу из справочника.

Если порода неизвестна, заранее согласуйте с клиникой, какое значение использовать: подходящую породу из справочника или отдельное значение вроде "Метис" / "Без породы".

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