---
name: vet-drug-base
description: Получить сведения о ветеринарном препарате или его производителе из базы ветпрепаратов — состав, дозировку, противопоказания, текст инструкции, ссылку на сайт производителя, снимок упаковки, перечень препаратов компании. Используй, когда нужны данные по ветпрепаратам, зарегистрированным в России, и когда спрашивают, что за препарат, чем лечат, как дозировать, кто выпускает.
---

# База ветеринарных препаратов

Служба отвечает по 4933 карточкам препаратов, собранным из реестра ФГИС «ВетИС»
(компонент «Гален») и с сайтов производителей: 185 компаний, 35 842 фрагмента
инструкций в поисковом индексе. Числа — на 19.10.2026; нынешние — в
`GET /api/v1/stats`.

Доступ открыт, ключ не нужен: данные взяты из открытого реестра и с сайтов
производителей, все эндпоинты только читают. Взамен ограничена частота — около
шестидесяти обращений в минуту с одного адреса. Спрашивай по делу, не выкачивай
базу подряд.

Служба чужая и работает не у тебя. Ты только спрашиваешь: ни запускать, ни
чинить, ни пересобирать ничего нельзя и не нужно.

## Адрес службы

    https://vetdoc.agropredict.ru

Этот адрес уже вписан, настраивать нечего — навык работает сразу после
скачивания.

Переменная окружения `VET_API` перекрывает адрес, если служба развёрнута где-то
ещё. Задана она или нет, **другого адреса подбирать нельзя**: не пробуй
`localhost`, не угадывай по названию, не ищи службу поиском. Если по адресу
никто не отвечает — так и скажи пользователю.

## Эндпоинты

Все GET, все только читают. Ответы — JSON, поля по-русски.

### Поиск

    GET https://vetdoc.agropredict.ru/api/v1/search?q=Гестренол для кошек дозировка&limit=7

`limit` — сколько фрагментов инструкций вернуть, 1…15, по умолчанию 7.
`mode` — `hybrid` (по умолчанию), `vector`, `bm25`.
`отрасль` — отбор по отрасли (см. «Отрасль» ниже): поиск идёт только по
препаратам выбранной отрасли и по тем, у кого отрасль не определена.

    запрос        вопрос, как его получила служба
    препараты[]   опознанные препараты: id, название, производитель,
                  сайт_производителя, фото, инструкция_pdf, подробнее
    фрагменты[]   куски инструкций: карточка, документ, оценка, текст
    списочный_запрос  true, если спрашивали перечень («какие препараты
                  выпускает Х»), а не про один препарат
    при `отрасль` ещё: отрасль_отбора, карточек_в_ответе, всего_без_отбора
                  (сколько карточек нашлось бы без отбора), отсеяно_чужих,
                  в_отрасли_карточек, в_базе_карточек, предупреждения[]
                  (препараты, названные прямо, но из другой отрасли),
                  ничего_не_нашлось (фраза, когда в отрасли пусто)

**Ответ не формулируется — это твоя работа.** Эндпоинт отдаёт материал; вывод
делает твоя модель.

### Карточка препарата

    GET https://vetdoc.agropredict.ru/api/v1/drug/{id}

Всё, что известно: `состав`, `дозировка`, `противопоказания`,
`побочные_действия`, `хранение`, `срок_годности`, `фасовка`,
`регистрационный_номер`, `текст_инструкции` (полный текст, тысячи знаков),
`сайт_производителя`, `фото`, `инструкция_pdf`, `регистрация`,
`другие_источники`; а также `название`, `мнн` (действующее вещество),
`форма`, `назначение`, `производитель`, `название_на_странице` (как товар
назван на сайте), `описание_с_сайта`, `фото_источник` (адрес снимка на сайте
производителя); отрасли — `отрасли` (список по-русски), `виды_животных`,
`отрасль_источник` и, если спрошено с `?отрасль=…`, `другая_отрасль`; ссылки —
`страница` (открытая страница препарата) и `подробнее` (путь этого ответа).
Сверено с настоящим ответом 19.10.2026.

**`другая_отрасль: true`** — препарат есть, но он не из той отрасли, которую
ты спросил. Ответь по нему и **обязательно скажи об этом человеку**, назвав
настоящие отрасли из поля `отрасли`.

**`регистрация` — предупреждение о прекращённой регистрации.** Пусто, пока
препарат в госреестре. Строка вида «Регистрация прекращена: препарата нет в
госреестре с 26.08.2026.» значит, что запись исчезла из официальной выгрузки
— этим препаратом больше не торгуют законно. **Покажите это человеку первым,
до состава и дозировки**, и не советуйте препарат как доступный. Таких
карточек сегодня 8; служба помечает их сама, ежедневно.

**`другие_источники`** — тот же препарат на сайтах других производителей:
список из `компания`, `сайт`, `ссылка`. Пусто у почти всех карточек; не пусто
у общих названий (Гентамицин, Глюкоза), где одна карточка отвечает за
нескольких производителей. `сайт_производителя` остаётся главным.

**`страница`** — путь открытой страницы препарата на сайте службы
(`/preparat/2328/klindaspektin-poroshok`; полный адрес — с
`https://vetdoc.agropredict.ru` впереди). Её можно дать человеку ссылкой на
карточку: там разделы инструкции, снимок и PDF. **`подробнее`** — путь полного
ответа о препарате (`/api/v1/drug/{id}`); в выдаче поиска — переход от
строки результата к карточке.

**`дозировка` — это не схема применения, а содержание действующего вещества**:
у Отоферонола там «4 мг», у Премиума «20 мг/ 5 мг». Сколько капель, куда и как
часто — только в `текст_инструкции`. Отвечая на вопрос «как дозировать»,
**бери схему из текста инструкции**, иначе выйдет «дозировка — 4 мг», что для
ушных капель бессмыслица.

`id` непрозрачный (`apicenna__dirofen-cuspenziya__c9774246` или `10587`),
составить его самому нельзя — только взять из ответа поиска.

### Компании

    GET https://vetdoc.agropredict.ru/api/v1/companies?q=нита
    GET https://vetdoc.agropredict.ru/api/v1/company/{slug}

Первый — перечень с отбором по вхождению в название: `найдено` и `компании`, у
каждой `slug`, `название`, `сайт`, `препаратов`, `подробнее`. Второй — компания
и все её препараты: `название`, `инн`, `адрес`, `сайт`, `препаратов` и
`препараты` (перечень). Сверено с настоящим ответом 19.10.2026.

`slug` — из ответа `/companies` (`ооо_нита-фарм`, кириллица, при подстановке в
адрес кодировать).

Оба принимают `отрасль`: число препаратов считается по отбору, и рядом
остаётся полное — `препаратов` и `препаратов_всего` («12 из 70»). Скажи
человеку оба числа, иначе он решит, что у компании всего двенадцать.

### Отрасль

Служба сделана для промышленного животноводства, и у карточек есть отрасль —
производное от видов животных в реестре и в инструкции. Параметр `отрасль` у
четырёх адресов — `/search`, `/drug/{id}`, `/companies`, `/company/{slug}` —
принимает значение по-русски или латиницей:

    свиноводство        pigs
    птицеводство        poultry
    скотоводство        cattle
    домашние животные   pets
    все (по умолчанию)  all

**Неизвестное значение — отказ 400 с перечнем допустимых**, а не тихий поиск
по всему. Прочитай перечень из ответа и повтори запрос правильно.

Когда ставить: **если человек сказал, чем занимается** — «у меня
свинокомплекс», «мы держим бройлеров», «это для собаки», — ставь `отрасль` и
скажи ему, что искал только по этой отрасли. Не сказал — не ставь: отбор по
догадке отрежет нужное молча.

Отрасль определена не у всех: карточка без отрасли (`отрасли: []`) находится
при любом выборе. `отрасль_источник: модель` значит оценку, а не запись
реестра. Раскладка базы по отраслям — в `GET /api/v1/stats` → `отрасли`.

### Снимок и PDF

    GET https://vetdoc.agropredict.ru/api/photo/{id}/0    снимок упаковки
    GET https://vetdoc.agropredict.ru/api/pdf/{id}        инструкция PDF

Пути приходят готовыми в полях `фото` и `инструкция_pdf`; если там `null`,
файла нет. Файл PDF открывается **только после входа на сайте**
(`инструкция_pdf_нужен_вход: true`): пользователю давай ссылку на страницу
препарата (`страница`), там текст инструкции открыт всем.

### Размер базы

    GET https://vetdoc.agropredict.ru/api/v1/stats

Пригодится, чтобы проверить связь и увидеть текущие числа: они меняются при
обновлении базы, а числа в этом файле — на день его выпуска.

## Когда служба не ответила

Различай случаи, они означают разное.

| ответ | что это | что делать |
|---|---|---|
| отказ связи, таймаут | служба недоступна | сказать пользователю, что база недоступна |
| `429` | обращений слишком часто | выдержать паузу и повторить один раз; подряд не долбить |
| `404` на `/drug/{id}` | такой карточки нет | взять другой id из поиска |
| `400` на `/search` | пустой параметр `q` | повторить с запросом |
| пустой `препараты[]` | препарат не опознан | попробовать иначе, потом сказать «не нашлось» |

При `429` служба сама говорит, сколько ждать: заголовок `Retry-After` и поле
`повторить_через` в теле ответа, обычно секунда. Предел — не ровный счётчик, а
запас, который тратится и восполняется: короткая очередь запросов проходит, но
несколько десятков подряд его исчерпывают.

**Служба молчит и «препарата нет в базе» — не одно и то же.** Сказать
пользователю второе, когда произошло первое, — самая грубая ошибка здесь.

**Непустой `препараты[]` тоже не значит, что препарат найден.** Поиск отвечает
на общие слова: запрос со словом «препарат» вытащит «Общая информация о
препаратах для медицинского применения» и «Поиск по препарату или веществу» —
остатки нетоварных карточек. Прежде чем отвечать, посмотри, **соответствует ли
название тому, о чём спрашивали**. Не соответствует — это не находка, а шум.

Чего делать нельзя:

- **Отвечать про препарат по собственным знаниям.** Смысл этой базы в том, что
  сведения берутся из инструкций производителя, а не из памяти модели.
  Придуманная дозировка ветеринарного препарата опаснее отсутствия ответа. Не
  можешь получить данные — скажи, что база недоступна.
- **Искать службу где-то ещё**, подставлять другой адрес, пробовать
  `localhost`.
- **Повторять запрос подряд без пауз.** Не ответила дважды — сообщи
  пользователю, а не долби.

## Порядок обычного вопроса

1. `/api/v1/search?q=…` — **отбрось вопросительные слова, оставь суть**:
   название препарата и то, что о нём спрашивают.

   Целый вопрос слать не стоит: «Какая дозировка у Отоферонола и какие
   противопоказания?» может увести выдачу на посторонние карточки, чьи
   заголовки начинаются с тех же слов. «Отоферонол дозировка противопоказания»
   даёт все четыре препарата. Сокращать до одного слова тоже не надо: поиск
   гибридный и работает по смыслу фразы. Падеж не мешает — «Отоферонола»
   находится.

   Вид животного пиши так, как он стоит в названиях товаров: «для кошек», а не
   «кошки». Голое «кошки» тянет товары с этим словом в названии: «Гестренол
   дозировка кошки» выдаёт «Принокат® кошки» и «Адвокат® кошки», а «Гестренол
   для кошек дозировка» — оба Гестренола для кошек (сверено 25.09.2026).
2. Если в `препараты[]` ровно один — забрать `/api/v1/drug/{id}` и отвечать по
   нему: там полный текст, а во фрагментах только куски.
3. Если несколько — перечислить с производителями и уточнить, о каком речь.
   Одноимённые препараты разных фирм в базе не редкость, а формы одного
   препарата различаются и схемой применения, и противопоказаниями.
4. Если пусто — попробовать иначе: по действующему веществу, без формы выпуска
   («суспензия», «таблетки»), латиницей. Не нашлось — так и сказать.
5. Ссылку на производителя давать из `сайт_производителя`, **не сочинять
   адрес** по названию фирмы.
6. Человек сказал, чем занимается («свинокомплекс», «бройлеры», «для
   собаки») — ставь `отрасль=…` и скажи, что искал только по ней; пришло
   `другая_отрасль: true` — ответь по препарату и назови его настоящие
   отрасли. Не сказал — параметр не ставь.

Списочные вопросы («что выпускает Нита-Фарм») — через `/companies` →
`/company/{slug}`, а не через поиск: поиск вернёт лишь верхние совпадения.

## Чего в базе может не быть

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

- **Ссылка на производителя есть примерно у четырёх карточек из пяти** (4027 из
  4961), **снимок упаковки — у семи из десяти** (3552). `null` в этих полях
  значит «не нашли», а не «не существует». Пример: все четыре Отоферонола есть
  с полными инструкциями и с PDF, но без снимка и без ссылки — сайт их
  производителя не обойдён.
- **`форма` и `регистрационный_номер` пусты у карточек, собранных с сайтов** —
  эти поля приходят из реестра, а в реестре есть не всё.
- **В базе есть карточки калькуляторов дозировок.** Опознаются по названию
  («КАЛЬКУЛЯТОР ДОЗИРОВОК ПРЕПАРАТА ЭЙМИЦИД…») или по адресу с `/kalkulator/`;
  у некоторых название сырое, взятое из адреса, — `Fulgard`, `Gan`,
  `Ivermek on`. Это **страница расчёта дозы для препарата, а не сам препарат**:
  `состав` и `дозировка` у неё пусты. Такую карточку можно назвать
  пользователю как «калькулятор дозировок на сайте производителя», но выдавать
  её за препарат нельзя.
- **Название иногда сырое**, взятое из адреса страницы. Если название выглядит
  как кусок ссылки, посмотри карточку целиком, прежде чем называть препарат так
  пользователю.
- **Часть имён несёт приставку** «ИНСТРУКЦИЯ ПО ПРИМЕНЕНИЮ»: «ИНСТРУКЦИЯ ПО
  ПРИМЕНЕНИЮ МАРБОФЛОКСАЦИН 10%» — это карточка препарата «Марбофлоксацин
  10%», а не отдельный документ. Называй препарат без приставки.
- **Статьи, разделы каталога и справочник действующих веществ из базы
  вычищены** — снято больше семисот таких карточек, из них 401 23.09.2026, —
  но остаток возможен.
  Опознаётся так: двоеточие или вопрос в названии, вопросительное начало,
  пустые `состав` и `дозировка`. **Не выдавай такую карточку за препарат** —
  пропусти и бери следующую. Длинное название само по себе не признак мусора:
  «Вирусвакцина „ВГНКИ“ сухая культуральная против…» — настоящий препарат.
- **Полного текста инструкции может не быть.** Смотри длину
  `текст_инструкции`: пусто — значит есть только поля реестра.
- **Отрасль есть не у всех.** Такая карточка приходит при любом `отрасль=…`
  и без предупреждения; `отрасль_источник: модель` — оценка модели по тексту,
  а не запись реестра.

## Что это за сведения

Инструкции производителей и данные реестра, а не врачебные назначения.
Приводя дозировку, показания или противопоказания, называй препарат и то, что
это сведения из инструкции. Решение о лечении принимает ветеринарный врач.

## Когда этот навык устарел

**Сверен: 19.10.2026** — числа и поля ответа сверены с работающей службой
(`GET /api/v1/stats`, `GET /api/v1/drug/{id}`, `GET /api/v1/search?…&отрасль=`,
`GET /api/v1/companies`, `GET /api/v1/company/{slug}`), а не с памятью; сам
файл прочитан через `GET /api/skill` и совпал с этим.

Навык устарел, если:

- **число карточек в `GET /api/v1/stats` отличается от записанного здесь
  больше чем на сотню** — скачай навык заново (`GET /api/skill`): база
  заметно изменилась, и примеры с числами могли устареть;
- **числа в нём не совпадают с `GET /api/v1/stats`**. Сверять их при каждой
  правке навыка, а не раз в месяц: правка без сверки оставляет в файле пометку
  о сверке, которая врёт (так случилось 14.09.2026 с `refresh-base`);
- в ответе `/api/v1/drug/{id}` появились поля, которых здесь нет: сверяйте
  перечень полей с настоящим ответом, а не с этим списком.
