Перейти к содержимому

Поиск ​

МетодКогда у вас есть
search(query)Текст: название товара, слово, код
filter({ brand })Название бренда
filter({ barcode })Штрихкод с упаковки
searchSubpositions(query)Тип товара, без бренда
dvCert(number)Номер сертификата
card(code), get(code)Точный 17-значный код

Чтобы просматривать каталог по уровням, см. Каталог.

По тексту ​

ts
const page = await mxik.search('Maccoffee')

Ищет по названиям, брендам, атрибутам и кодам. Работает и кириллица, и латиница: 'кофе' и 'kofe' находят похожие результаты. Элементы имеют тип SearchItem.

По полям ​

filter() ищет по конкретным полям. Элементы имеют тип CatalogItem.

ts
await mxik.filter({ brand: 'Samsung' })
await mxik.filter({ barcode: '6934177746536' })
await mxik.filter({ text: 'vacuum', brand: 'Xiaomi' })
ФильтрЧто ищет
textСлова в названии, бренде, атрибутах и коде
brandНазвание бренда, частично и без учёта регистра
codeТочный 17-значный код
barcodeШтрихкод товара (GTIN)

Примечание

У barcode приоритет: если он задан, API игнорирует остальные фильтры.

По типу товара ​

ts
const page = await mxik.searchSubpositions('кофе')
page.items[0].mxikCode // '00901001004000000'
page.items[0].mxikName // 'Сублимированный кофе'

Находит субпозиции: общие коды типа товара, без бренда. Подходит, когда нужен код «молотого кофе», а не конкретного товара. Элементы имеют тип CatalogItem.

По номеру сертификата ​

ts
await mxik.dvCert(certNumber)

Возвращает коды, связанные с сертификатом, в виде CatalogItem.

Отдельный код ​

Получить код можно двумя способами. Оба возвращают null, если кода не существует.

card() возвращает карточку, которую показывает сайт: названия на одном языке, штрихкод, краткое название, льготу и упаковки с единицами измерения.

ts
const card = await mxik.card('00901001001048023')

card?.mxikName // 'Молотый (порошкообразный) кофе: Maccoffee, в пакет 3в1 20г'
card?.shortName // 'Молот. (порошко.) кофе Maccoffee в пак. 3в1 20г'
card?.internationalCode // '8887290101004'
card?.packages?.[0].name // 'шт. (пачка) 20 грамм'

get() возвращает названия сразу на русском и узбекском, но полей меньше:

ts
const details = await mxik.get('00901001001048023')

details?.subPositionNameRu // 'Молотый (порошкообразный) кофе'
details?.subPositionNameUz // 'Майдаланган (кукунсимон) кофе'

Все поля — в MxikCard и MxikDetails.

Внимание

Сайт больше не использует эндпоинты, на которых работают get() и dvCert(). Сейчас они отвечают, но могут быть отключены без предупреждения. В новом коде лучше использовать card().

У кодов бывают ведущие нули, поэтому храните их строками. Чтобы проверить формат до запроса, используйте isMxikCode():

ts
import { isMxikCode } from 'mxik'

isMxikCode('00901001001048023') // true
isMxikCode('901001001048023') // false

Страницы ​

search(), filter() и dvCert() возвращают по одной странице:

ts
const page = await mxik.search('кофе', { page: 2, size: 50 })
ПолеОписание
itemsРезультаты на этой странице
totalРезультаты на всех страницах
pageНомер страницы, начиная с 1
sizeРазмер страницы
hasNextЕсть ли следующая страница

По умолчанию на странице 20 результатов. Это меняется для отдельного запроса через size или для всего клиента через pageSize.

Все результаты ​

searchAll() и filterAll() сами проходят по всем страницам. Следующая страница запрашивается по ходу перебора, поэтому если остановиться раньше, лишних запросов не будет:

ts
for await (const item of mxik.filterAll({ brand: 'Xiaomi' })) {
  if (item.internationalCode === barcode)
    break
}

Чем больше size, тем меньше запросов. API принимает как минимум 500:

ts
mxik.searchAll('кофе', { size: 500 })

Язык ​

Названия в результатах search(), filter() и dvCert() по умолчанию на русском. На узбекский (кириллица) можно переключить для отдельного запроса или для всего клиента:

ts
await mxik.search('кофе', { lang: 'uz' })

const mxik = createMxik({ lang: 'uz' })

get() от языка не зависит: в карточке есть все названия на обоих языках, например subPositionNameRu и subPositionNameUz.

Неофициальный клиент, не связан с Налоговым комитетом Узбекистана и tasnif.soliq.uz.
Распространяется под лицензией MIT.