## Маршрут

Классы: числа 1-45; пустой список ищет по всем классам. Страница начинается с 1, размер 1-50. `total` относится к одному запросу, режиму и фильтру. `next_page` называет следующую страницу; не объявляй весь поиск проверенным, прочитав одну. Следующую страницу запрашивай с теми же параметрами. При большой выдаче сузь обозначение или классы, не выгружай реестр целиком. Общий бюджет запроса ограничен; квоту или отказ не обходи сменой IP или повторением одинаковых запросов.

## Результат

- `status="ok"`: платформа отдала проверенную структуру выдачи. `total=0` означает только отсутствие находок для этого запроса и фильтра на `checked_at`.
- `status="unavailable"`: поиск не выполнен. `error.code` и `error.message` называют HTTP, сеть, время ожидания, отказ платформы или изменение протокола. `total` и `results` равны `None`. Не превращай их в пустую выдачу и не подменяй проверку веб-поиском.
- В записи сохраняются номер заявки, регистрации, классы, правообладатель, даты и ссылки на карточки. Неизвестное обозначение, статус или дата остаются `None`; служебная дата года 0001 не выводится как дата приоритета или регистрации. `status_code` является сырым кодом платформы: без подтверждённого словаря или карточки не расшифровывай его в «действует» или «не действует». Наличие номера регистрации само по себе не означает, что право действует. `goods` сокращается только с явным `goods_truncated`; сокращённый текст может не включать товары нужного класса, поэтому для оценки их перечня прочитай полную карточку.
