moysklad-ts
Version:
Полностью типизированный, современный и лёгкий клиент МойСклад JSON API
1,448 lines (1,371 loc) • 465 kB
TypeScript
import { ConditionalKeys } from 'type-fest';
import { EmptyObject } from 'type-fest';
import { HasOptionalKeys } from 'type-fest';
import { IsEmptyObject } from 'type-fest';
import { IsEqual } from 'type-fest';
import { IsNever } from 'type-fest';
import { OptionalKeysOf } from 'type-fest';
import { Primitive } from 'type-fest';
import { ReadonlyKeysOf } from 'type-fest';
import { RequireExactlyOne } from 'type-fest';
import { SetOptional } from 'type-fest';
import { SetRequired } from 'type-fest';
/** Счёт юрлциа / контрагента */
export declare interface Account extends Idable, Meta<Entity.Account> {
/** ID учетной записи */
readonly accountId: string;
/** Номер счета */
accountNumber: string;
/** Адрес банка */
bankLocation?: string;
/** Наименование банка */
bankName?: string;
/** БИК */
bic?: string;
/** Корреспондентский счет */
correspondentAccount?: string;
/** Является ли счет основным */
isDefault: boolean;
/** Момент последнего обновления */
readonly updated: DateTime;
}
export declare interface AccountModel extends Model {
object: Account;
requiredCreateFields: "accountNumber";
}
declare type AddAttributesFilters<M extends Model, F> = "attributes" extends keyof M["object"] ? IsNever<F> extends false ? F & {
[attributeUrl: string]: Filter;
} : {
[attributeUrl: string]: Filter;
} : F;
export declare type AllAssortmentOptions = Omit<ListAssortmentOptions, "pagination">;
export declare type AllBonusTransactionsOptions = Omit<ListBonusTransactionsOptions, "pagination">;
export declare type AllCounterpartiesOptions = Omit<ListCounterpartiesOptions, "pagination">;
export declare type AllCustomerOrdersOptions = Omit<ListCustomerOrdersOptions, "pagination">;
export declare type AllDemandsOptions = Omit<ListDemandsOptions, "pagination">;
export declare type AllEntersOptions = Omit<ListEntersOptions, "pagination">;
/**
* Опции для получения всех счетов-фактур выданных
*/
export declare type AllFactureOutsOptions = Omit<ListFactureOutsOptions, "pagination">;
export declare type AllInventoryOptions = Omit<ListInventoryOptions, "pagination">;
export declare type AllInvoiceOutsOptions = Omit<ListInvoiceOutsOptions, "pagination">;
export declare type AllOrganizationsOptions = Omit<ListOrganizationsOptions, "pagination">;
/** Опции для получения всех входящих платежей */
export declare type AllPaymentInsOptions = Omit<ListPaymentInsOptions, "pagination">;
export declare type AllPaymentOutsOptions = Omit<ListPaymentOutsOptions, "pagination">;
export declare type AllProcessingPlansOptions = Omit<ListProcessingPlansOptions, "pagination">;
export declare type AllProductFoldersOptions = Omit<ListProductFoldersOptions, "pagination">;
export declare type AllProductionStageCompletionMaterialOptions = Omit<ListProductionStageCompletionMaterialsOptions, "pagination">;
export declare type AllProductionStageCompletionOptions = Omit<ListProductionStageCompletionsOptions, "pagination">;
export declare type AllProductionStageCompletionResultOptions = Omit<ListProductionStageCompletionResultsOptions, "pagination">;
export declare type AllProductionStagesOptions = Omit<ListProductionStagesOptions, "pagination">;
export declare type AllProductionTaskMaterialsOptions = Omit<ListProductionTaskMaterialsOptions, "pagination">;
export declare type AllProductionTasksOptions = Omit<ListProductionTasksOptions, "pagination">;
export declare type AllProductsOptions = Omit<ListProductsOptions, "pagination">;
export declare type AllPurchaseOrdersOptions = Omit<ListPurchaseOrdersOptions, "pagination">;
/** Опции для получения всех регионов */
export declare type AllRegionsOptions = Omit<ListRegionsOptions, "pagination">;
/**
* Опции для получения всех Возвратов покупателей
*/
export declare type AllSalesReturnsOptions = Omit<ListSalesReturnsOptions, "pagination">;
export declare type AllSuppliesOptions = Omit<ListSuppliesOptions, "pagination">;
export declare type AllVariantsOptions = Omit<ListVariantsOptions, "pagination">;
/** API клиент */
declare class ApiClient {
private baseUrl;
private userAgent;
private auth;
private batchGetOptions;
constructor(options: ApiClientOptions);
/**
* Сделать запрос к API МойСклад.
*
* @param endpoint - относительный путь до ресурса
* @param options - опции запроса
*
* @example
* ```ts
* const response = await apiClient.request("/entity/counterparty", { method: "POST", body: { name: "ООО Ромашка" } });
* ```
*/
request(endpoint: string, { searchParameters, ...options }?: RequestOptions): Promise<Response>;
/**
* Shorthand для GET запроса.
*
* {@linkcode request}
* */
get(url: string, options?: RequestOptionsWithoutMethod): Promise<Response>;
/**
* Shorthand для POST запроса.
*
* {@linkcode request}
*/
post(url: string, options?: RequestOptionsWithoutMethod): Promise<Response>;
/**
* Shorthand для PUT запроса.
*
* {@linkcode request}
*/
put(url: string, options?: RequestOptionsWithoutMethod): Promise<Response>;
/**
* Shorthand для DELETE запроса.
*
* {@linkcode request}
*/
delete(url: string, options?: RequestOptionsWithoutMethod): Promise<Response>;
/**
* Нормализует URL, удаляя лишние слеши.
*
* @param url - URL
*
* @returns Нормализованный URL
*/
private normalizeUrl;
/**
* Строит объект типа `URL` из строки.
*
* @param url - URL
*
* @returns Объект типа `URL`
*/
private buildStringUrl;
/**
* Cтроит объект типа `URL` из массива строк.
*
* @param url - массив строк URL
*
* @returns Объект типа `URL`
*/
private buildArrayUrl;
/**
* Строит URL из строки или массива строк.
*
* @param url - строка или массив строк URL
*
* @returns Объект типа `URL` с нормализованным URL и базовым адресом, указанным в опциях инциализации
*
* @example С массивом строк
* ```ts
* buildUrl(["entity", "counterparty", "5427bc76-b95f-11eb-0a80-04bb000cd583"])
* // "https://api.moysklad.ru/api/remap/1.2/entity/counterparty/5427bc76-b95f-11eb-0a80-04bb000cd583"
* ```
*
* @example Со строкой
* ```ts
* buildUrl("entity/counterparty/5427bc76-b95f-11eb-0a80-04bb000cd583")
* // "https://api.moysklad.ru/api/remap/1.2/entity/counterparty/5427bc76-b95f-11eb-0a80-04bb000cd583"
* ```
*/
buildUrl(url: string | string[]): URL;
/**
* Получить все сущности из API. Но лучше используйте метод `.all()` в эндпоинтах (например, `moysklad.counterparty.all()`).
*
* @param fetcher - функция, которая делает запрос к API и возвращает список сущностей
* @param hasExpand - флаг, указывающий на наличие expand в запросе
*
* @returns Объект с массивом сущностей и контекстом
*/
batchGet<T, E extends Entity>(fetcher: (limit: number, offset: number) => Promise<ListResponse<T, E>>, hasExpand?: boolean): Promise<BatchGetResult<T, E>>;
}
/**
* Опции для инициализации API клиента
*
* @see https://github.com/MonsterDeveloper/moysklad-ts?tab=readme-ov-file#%D0%BE%D0%BF%D1%86%D0%B8%D0%B8-%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8
*/
export declare type ApiClientOptions = {
/**
* Базовый URL
*
* @default https://api.moysklad.ru/api/remap/1.2
*/
baseUrl?: string;
/**
* User-Agent header
*
* @default `moysklad-ts/${version} (+https://github.com/MonsterDeveloper/moysklad-ts)`, где `{version}` - версия библиотеки
*/
userAgent?: string;
/**
* Опции авторизации
*
* {@linkcode Auth}
*/
auth: Auth;
/**
* Опции для получения всех сущностей из API (метод `.all()`).
*
* Устанавливает ограничения на размер запросов с expand и без него, а также ограничение на количество одновременных запросов.
*
* @default { limit: 1000, expandLimit: 100, concurrencyLimit: 3 }
*/
batchGetOptions?: BatchGetOptions;
};
/**
* Archived filter that supports boolean values, boolean filter operators,
* and an array of both [true, false] to include both archived and non-archived items.
*/
export declare type ArchivedFilter = BooleanFilter | [boolean, boolean];
/**
* Ассортимент
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-assortiment
*/
export declare interface AssortmentEndpoint {
/**
* Получить список товаров, комплектов, услуг и модификаций в виде списка.
*
* @param options - Опции для получения списка {@linkcode ListAssortmentOptions}
* @returns Объект с списком
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-assortiment-poluchit-assortiment
*
* @example
* ```ts
* const { rows } = await moysklad.assortment.list();
* ```
*/
list<T extends ListAssortmentOptions>(options?: Subset<T, ListAssortmentOptions>): Promise<ListResponse<AssortmentModel["object"], Entity.Assortment>>;
/**
* Получить все товары, комплекты, услуги и модификации.
*
* @param options - Опции для получения всех позиций {@linkcode AllAssortmentOptions}
* @returns Объект с всеми позициями
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-assortiment-poluchit-assortiment
*
* @example
* ```ts
* const { rows } = await moysklad.assortment.all();
* ```
*/
all<T extends AllAssortmentOptions>(options?: Subset<T, AllAssortmentOptions>): Promise<BatchGetResult<AssortmentModel["object"], Entity.Assortment>>;
/**
* Получить первую позицию в списке.
*
* @param options - Опции для получения первой позиции {@linkcode FirstAssortmentOptions}
* @returns Объект с первой позицией
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-assortiment-poluchit-assortiment
*
* @example
* ```ts
* const { rows } = await moysklad.assortment.first();
* ```
*/
first<T extends FirstAssortmentOptions>(options?: Subset<T, FirstAssortmentOptions>): Promise<ListResponse<AssortmentModel["object"], Entity.Assortment>>;
/**
* Получить общее количество ассортимента.
*
* @returns Общее количество ассортимента
*/
size(options?: AllAssortmentOptions): Promise<ListMeta<AssortmentEntity>>;
}
export declare type AssortmentEntity = Entity.Product | Entity.Service | Entity.Bundle | Entity.Variant | Entity.Consignment;
/**
* Тип сущности для фильтрации ассортимента
*/
export declare enum AssortmentEntityType {
/** Товар */
Product = "product",
/** Услуга */
Service = "service",
/** Комплект */
Bundle = "bundle",
/** Модификация */
Variant = "variant",
/** Серия */
Consignment = "consignment"
}
declare type AssortmentFields = {
/** Остаток */
readonly stock: number;
/** Резерв */
readonly reserve: number;
/** Ожидание */
readonly inTransit: number;
/** Доступно */
readonly quantity: number;
};
/**
* Ассортимент
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-assortiment
*/
export declare type AssortmentModel = ProductAssortmentModel | VariantAssortmentModel | BundleAssortmentModel | ConsignmentAssortmentModel | ServiceAssortmentModel;
export declare type Attribute = TimeAttribute | LinkAttribute | StringAttribute | TextAttribute | FileAttribute | BooleanAttribute | DoubleAttribute | LongAttribute | ContractAttribute | CounterpartyAttribute | ProjectAttribute | StoreAttribute | EmployeeAttribute | ProductAttribute | CustomEntityAttribute;
export declare enum AttributeType {
Time = "time",
Link = "link",
String = "string",
Text = "text",
File = "file",
Boolean = "boolean",
Double = "double",
Long = "long",
Contract = "contract",
Counterparty = "counterparty",
Project = "project",
Store = "store",
Employee = "employee",
Product = "product",
CustomEntity = "customentity"
}
/**
* Объединенный тип для всех возможных diff
*/
export declare type AuditDiff = RegistrationAuditDiff | PublicationAuditDiff | EmailAuditDiff | DeleteAuditDiff | UpdateAuditDiff;
/**
* Событие аудита
*
* События аудита содержат подробную информацию о произошедших изменениях, например, изменение значения поля.
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/audit/#audit-audit-sobytiq
*/
export declare type AuditEvent = (BaseAuditEvent & {
readonly eventType: AuditEventType.Registration;
readonly diff?: RegistrationAuditDiff;
}) | (BaseAuditEvent & {
readonly eventType: AuditEventType.OpenPublication | AuditEventType.ClosePublication;
readonly diff?: PublicationAuditDiff;
}) | (BaseAuditEvent & {
readonly eventType: AuditEventType.SendEmailFromEntity;
readonly diff?: EmailAuditDiff;
}) | (BaseAuditEvent & {
readonly eventType: AuditEventType.Delete;
readonly diff?: DeleteAuditDiff;
}) | (BaseAuditEvent & {
readonly eventType: AuditEventType.Update | AuditEventType.PutToArchive | AuditEventType.RestoreFromArchive | AuditEventType.PutToRecycleBin | AuditEventType.RestoreFromRecycleBin;
readonly diff?: UpdateAuditDiff;
}) | (BaseAuditEvent & {
readonly eventType: AuditEventType.BulkOperation | AuditEventType.Create | AuditEventType.Print | AuditEventType.ReplaceToken;
readonly diff?: AuditDiff;
});
/**
* Тип изменения
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/audit/#audit-audit-sobytiq-atributy-suschnosti
*/
export declare enum AuditEventSource {
/** Регистрация аккаунта */
Registration = "registration",
/** Автоматическая очистка корзины */
ClearRecycleBin = "clearrecyclebin",
/** Объединение */
Combine = "combine",
/** Массовое создание */
BulkCreate = "bulkcreate",
/** Синхронизация с ИМ */
Connectors = "connectors",
/** Копирование */
Copy = "copy",
/** Отправка сообщения */
EmailSend = "emailsend",
/** Синхронизация с Эвотор */
Evotor = "evotor",
/** Экспорт */
Export = "export",
/** Экспорт в 1С Клиент ЭДО */
ExportEdiClient1c = "exportediclient1c",
/** Импорт */
Import = "import",
/** Импорт в 1С Клиент ЭДО */
ImportEdiClient1c = "importediclient1c",
/** JSON API (remap-1.0, remap-1.1, remap-1.2) */
JsonApi = "jsonapi",
/** Вход или выход из МоегоСклада */
LoginLogout = "loginlogout",
/** Phone API */
Phone = "phone-1.0",
/** POS API */
PosApi = "posapi",
/** REST API */
RestApi = "restapi",
/** Точка продаж */
Retail = "retail",
/** Работа со сценариями */
Scriptor = "scriptor"
}
/**
* Действие события аудита
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/audit/#audit-audit-sobytiq-tipy-sobytij
*/
export declare enum AuditEventType {
/** Регистрация */
Registration = "registration",
/** Массовая операция */
BulkOperation = "bulkoperation",
/** Удаление публикации */
ClosePublication = "closepublication",
/** Создание сущностей */
Create = "create",
/** Удаление сущностей */
Delete = "delete",
/** Создание публикации */
OpenPublication = "openpublication",
/** Печать документа */
Print = "print",
/** Помещение в архив */
PutToArchive = "puttoarchive",
/** Помещение в корзину */
PutToRecycleBin = "puttorecyclebin",
/** Смена токена для Точки продаж */
ReplaceToken = "replacetoken",
/** Извлечение из архива */
RestoreFromArchive = "restorefromarchive",
/** Извлечение из корзины */
RestoreFromRecycleBin = "restorefromrecyclebin",
/** Отправка письма */
SendEmailFromEntity = "sendemailfromentity",
/** Изменение сущностей */
Update = "update"
}
/**
* Тип сущностей для настроек
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/audit/#audit-audit-sobytiq-atributy-suschnosti
*/
export declare enum AuditObjectType {
/** Настройки сущностей */
EntitySettings = "ENTITY_SETTINGS",
/** Настройки состояний */
StateSettings = "STATE_SETTINGS",
/** Настройки шаблонов */
TemplateSettings = "TEMPLATE_SETTINGS"
}
/**
* Опции для авторизации
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/#mojsklad-json-api-obschie-swedeniq-autentifikaciq
*/
export declare type Auth = BasicAuth | TokenAuth;
export declare type Barcodes = {
ean13?: string;
ean8?: string;
code128?: string;
gtin?: string;
}[];
declare interface BaseAttribute extends Idable, Meta<Entity.AttributeMetadata> {
name: string;
type: AttributeType;
value: boolean | string | number | (Meta<Entity> & {
name: string;
});
}
/**
* Базовое событие аудита
*/
declare interface BaseAuditEvent {
/** Дополнительная информация о Событии */
readonly additionalInfo?: string;
/** Метаданные контекста */
readonly audit: Meta<Entity.AuditEvent>;
/**
* Метаданные сущности.
*
* Не будет выводиться только для товаров, услуг, модификаций, комплектов удаленных до 20.08.2017
*/
readonly entity?: Meta<Entity>;
/** Название сущности */
readonly entityType: Entity;
/** Время создания события */
readonly moment: DateTime;
/** Имя сущности */
readonly name: string;
/** Количество измененных объектов */
readonly objectCount?: number;
/**
* Тип сущностей, с которыми связанно данное изменение.
*
* Поле присутствует только для `entityType` = `entitysettings` или `statesettings` или `templatesettings`
*
* {@linkcode AuditObjectType}
*/
readonly objectType?: AuditObjectType;
/**
* Тип изменения
*
* {@linkcode AuditEventSource}
*/
readonly source: AuditEventSource;
/**
* Был ли доступ произведен поддержкой от имени пользователя.
*
* Флаг отсутствует, если значение false
*/
readonly supportAccess?: boolean;
/** Логин Сотрудника */
readonly uid: string;
}
declare interface BaseBonusProgram extends Idable, Meta<Entity.BonusProgram> {
readonly accountId: string;
active: boolean;
agentTags: string[];
allAgents: boolean;
allProducts: boolean;
earnRateRoublesToPoint?: number;
earnWhileRedeeming: boolean;
maxPaidRatePercents?: number;
name?: string;
postponedBonusesDelayDays?: number;
spendRatePointsToRouble?: number;
welcomeBonusesEnabled: boolean;
}
declare interface BaseCounterparty extends Idable, Meta<Entity.Counterparty> {
readonly accountId: string;
accounts: unknown;
actualAddress?: string;
actualAddressFull?: {
addInfo?: string;
apartment?: string;
city?: string;
comment?: string;
country?: Meta<Entity.Country>;
house?: string;
postalCode?: string;
region?: Meta<Entity.Region>;
street?: string;
};
legalAddress?: string;
legalAddressFull?: {
addInfo?: string;
apartment?: string;
city?: string;
comment?: string;
country?: Meta<Entity.Country>;
house?: string;
postalCode?: string;
region?: Meta<Entity.Region>;
street?: string;
};
archived: boolean;
attributes?: Attribute[];
bonusPoints?: number;
bonusProgram?: unknown;
code?: string;
companyType: CounterpartyCompanyType;
contactpersons?: unknown;
created: DateTime;
description?: string;
discountCardNumber?: string;
discounts?: unknown;
email?: string;
externalCode: string;
fax?: string;
files: unknown;
group: Meta<Entity.Group>;
name: string;
notes?: unknown;
owner?: Meta<Entity.Employee>;
phone?: string;
priceType?: unknown;
readonly salesAmount: number;
shared: boolean;
state?: Meta<Entity.State>;
syncId?: string;
tags?: string[];
readonly updated: DateTime;
}
declare interface BaseOptions<A extends WizardAction> {
action: A;
/** Ссылка на юрлицо в формате Метаданных. Обязателен со значением `evaluate_vat` параметра `action` */
organization: Meta<Entity.Organization>;
/** Ссылка на контрагента в формате Метаданных. Обязателен со значениями `evaluate_price`, `evaluate_discount` параметра `action` */
agent: Meta<Entity.Counterparty>;
/** Учитывается ли НДС */
vatEnabled: boolean;
/** Включен ли НДС в цену */
vatIncluded?: boolean;
/** Валюта. Если не передано, заполняется валютой учета */
rate: {
currency: Meta<Entity.Currency>;
};
/** Ссылка на склад в формате Метаданных. Обязателен со значением `evaluate_cost` параметра `action` */
store: Meta<Entity.Store>;
/** Дата проведения документа. Влияет на расчет себестоимости */
moment: DateTime;
/** Позиции документа */
positions: {
/** Ссылка на товар/услугу/серию/модификацию/комплект, которую представляет собой позиция, в формате Метаданных */
assortment: Meta<AssortmentEntity>;
/** Количество товаров/услуг данного вида в позиции. Если позиция - товар, у которого включен учет по серийным номерам, то значение в этом поле всегда будет равно количеству серийных номеров для данной позиции в документе. */
quantity?: number;
}[];
}
/**
* Юрлицо
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica
*/
declare interface BaseOrganization extends Idable, Meta<Entity.Organization> {
/** ID учетной записи */
readonly accountId: string;
/** Метаданные счетов юрлица */
accounts: ListMeta<Entity.Account>;
/** Фактический адрес Юрлица */
actualAddress?: string;
/**
* Фактический адрес Юрлица с детализацией по отдельным полям
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica-attributy-wlozhennyh-suschnostej-adres
*/
actualAddressFull?: {
/** Другое */
addInfo?: string;
/** Квартира */
apartment?: string;
/** Город */
city?: string;
/** Комментарий */
comment?: string;
/** Метаданные страны */
country?: Meta<Entity.Country>;
/** Дом */
house?: string;
/** Почтовый индекс */
postalCode?: string;
/** Метаданные региона */
region?: Meta<Entity.Region>;
/** Улица */
street?: string;
};
/**
* Налоговая ставка для авансов для плательщиков НДС.
*
* Можно использовать значение только из существующих ставок НДС.
*/
advancePaymentVat?: number;
/** Юридический адрес Юрлица */
legalAddress?: string;
/**
* Юридический адрес Юрлица с детализацией по отдельным полям
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica-attributy-wlozhennyh-suschnostej-adres
*/
legalAddressFull?: {
/** Другое */
addInfo?: string;
/** Квартира */
apartment?: string;
/** Город */
city?: string;
/** Комментарий */
comment?: string;
/** Метаданные страны */
country?: Meta<Entity.Country>;
/** Дом */
house?: string;
/** Почтовый индекс */
postalCode?: string;
/** Метаданные региона */
region?: Meta<Entity.Region>;
/** Улица */
street?: string;
};
/** Номер городского телефона */
phone?: string;
/** Адрес электронной почты */
email?: string;
/** Добавлено ли Юрлицо в архив */
archived: boolean;
/** Массив метаданных дополнительных полей юрлица */
attributes?: Attribute[];
/** Бонусные баллы по активной бонусной программе */
readonly bonusPoints?: number;
/** Метаданные активной бонусной программы */
bonusProgram?: Meta<Entity.BonusProgram>;
/** Главный бухгалтер */
chiefAccountant?: string;
/**
* Подпись главного бухгалтера
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica-attributy-wlozhennyh-suschnostej-podpisi-i-pechat
*/
chiefAccountSign?: unknown;
/** Код Юрлица */
code?: string;
/**
* Тип Юрлица
*
* {@linkcode OrganizationCompanyType}
*/
companyType: OrganizationCompanyType;
/** Дата создания */
created: DateTime;
/** Комментарий к Юрлицу */
description?: string;
/** Руководитель */
director?: string;
/** Должность руководителя */
directorPosition?: string;
/**
* Подпись руководителя
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica-attributy-wlozhennyh-suschnostej-podpisi-i-pechat
*/
directorSign?: unknown;
/** Внешний код Юрлица */
externalCode: string;
/** Номер факса */
fax?: string;
/** Идентификатор в ФСРАР */
fsrarId?: string;
/** Отдел сотрудника */
group: Meta<Entity.Group>;
/** Включен ли ЕГАИС для данного юрлица */
isEgaisEnable?: boolean;
/** Наименование Юрлица */
name: string;
/** Владелец (Сотрудник) */
owner?: Meta<Entity.Employee>;
/** Является ли данное юрлицо плательщиком НДС */
payerVat?: boolean;
/** Общий доступ */
shared: boolean;
/**
* Печать
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-jurlico-jurlica-attributy-wlozhennyh-suschnostej-podpisi-i-pechat
*/
stamp?: unknown;
/** ID синхронизации. После заполнения недоступно для изменения. */
syncId?: string;
/** Дата договора с ЦРПТ */
trackingContractDate?: DateTime;
/** Номер договора с ЦРПТ */
trackingContractNumber?: string;
/** Момент последнего обновления Юрлица */
readonly updated: DateTime;
/** IP-адрес УТМ */
utmUrl?: string;
}
/**
* Опции для Basic авторизации
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/#mojsklad-json-api-obschie-swedeniq-autentifikaciq
*/
export declare type BasicAuth = {
/** Логин */
login: string;
/** Пароль */
password: string;
};
export declare interface BatchDeleteResult {
info: string;
}
/**
* Опции для получения всех сущностей из API (метод `.all()`).
*/
export declare interface BatchGetOptions {
/** URL параметр `limit` для каждого запроса */
limit?: number;
/** URL параметр `limit` для каждого запроса с `expand` */
expandLimit?: number;
/** Ограничение количества одновременных запросов */
concurrencyLimit?: number;
}
export declare type BatchGetResult<T, E extends Entity> = Pick<ListResponse<T, E>, "rows" | "context">;
/**
* Бонусная программа
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-programma-bonusnye-programmy
*/
export declare type BonusProgram = BonusProgramWithoutWelcomeBonuses | BonusProgramWithWelcomeBonuses;
/**
* Модель бонусной программы
*
* {@linkcode BonusProgram}
*/
export declare interface BonusProgramModel extends Model {
object: BonusProgram;
expandable: EmptyObject;
filters: EmptyObject;
}
declare interface BonusProgramWithoutWelcomeBonuses extends BaseBonusProgram {
welcomeBonusesEnabled: false;
}
declare interface BonusProgramWithWelcomeBonuses extends BaseBonusProgram {
welcomeBonusesEnabled: true;
welcomeBonusesMode: WelcomeBonusMode;
welcomeBonusesValue: number;
}
/**
* Бонусная операция
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-bonusnye-operacii
*/
export declare interface BonusTransaction extends Idable, Meta<Entity.BonusTransaction> {
/** ID учетной записи */
readonly accountId: string;
/** Метаданные Контрагента, связанного с бонусной операцией */
agent: Meta<Entity.Counterparty>;
/** Отметка о проведении */
applicable: boolean;
/** Метаданные бонусной программы */
bonusProgram?: Meta<Entity.BonusProgram>;
/** Количество бонусных баллов */
bonusValue?: number;
/**
* Категория бонусной операции.
*
* {@linkcode BonusTransactionCategoryType}
*/
readonly categoryType?: BonusTransactionCategoryType;
/** Код Бонусной операции */
code?: string;
/** Момент создания Бонусной операции */
created: DateTime;
/**
* Дата обработки операции.
*
* При создании или редактировании бонусной операции начисления данный атрибут позволяет указать дату обработки операции. Если атрибут не указан, то операция будет обработана сразу, без задержки.
* Для возможности указания даты обработки в будущем должна быть включена тарифная опция "Расширенная бонусная программа".
*/
executionDate?: DateTime;
/** Внешний код Бонусной операции */
externalCode: string;
/** Отдел сотрудника */
group: Meta<Entity.Group>;
/** Время проведения бонусной операции */
moment?: DateTime;
/** Наименование Бонусной операции */
name?: string;
/** Метаданные юрлица */
organization?: Meta<Entity.Organization>;
/** Владелец (Сотрудник) */
owner?: Meta<Entity.Employee>;
/** Метаданные связанного документа бонусной операции */
parentDocument?: Meta<never>;
/** Общий доступ */
shared: boolean;
/**
* Статус бонусной операции
*
* {@linkcode BonusTransactionStatus}
*/
readonly transactionStatus?: BonusTransactionStatus;
/**
* Тип бонусной операции
*
* {@linkcode BonusTransactionType}
*/
transactionType: BonusTransactionType;
/** Момент последнего обновления Бонусной операции */
updated: DateTime;
}
/** Категория бонусной операции */
export declare enum BonusTransactionCategoryType {
Regular = "REGULAR",
Welcome = "WELCOME"
}
/**
* Бонусные операции
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-bonusnye-operacii
*/
export declare interface BonusTransactionEndpoint {
/**
* Получить список бонусных операций.
*
* @param options - Опции для получения списка {@linkcode ListBonusTransactionsOptions}
* @returns Объект с списком бонусных операций
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-poluchit-bonusnye-operacii
*
* @example
* ```ts
* const { rows } = await moysklad.bonusTransaction.list();
* ```
*/
list<T extends ListBonusTransactionsOptions = Record<string, unknown>>(options?: Subset<T, ListBonusTransactionsOptions>): Promise<ListResponse<GetFindResult<BonusTransactionModel, T["expand"]>, Entity.BonusTransaction>>;
/**
* Получить все бонусные операции
*
* @param options - Опции для получения списка {@linkcode ListBonusTransactionsOptions}
* @returns Массив бонусных операций
*
* @example
* ```ts
* const { rows } = await moysklad.bonusTransaction.all();
* ```
*/
all<T extends ListBonusTransactionsOptions = Record<string, unknown>>(options?: Subset<T, ListBonusTransactionsOptions>): Promise<BatchGetResult<GetFindResult<BonusTransactionModel, T["expand"]>, Entity.BonusTransaction>>;
/**
* Получить количество бонусных операций.
*
* @param options - Опции для получения списка {@linkcode AllBonusTransactionsOptions}
* @returns Количество бонусных операций
*
* @example
* ```ts
* const count = await moysklad.bonusTransaction.size();
* ```
*/
size(options?: AllBonusTransactionsOptions): Promise<ListMeta<Entity.BonusTransaction>>;
/**
* Получить первую бонусную операцию, соответствующую фильтру
*
* @param options - Опции для поиска {@linkcode FirstBonusTransactionOptions}
* @returns Бонусная операция
*
* @example
* ```ts
* const { rows: [transaction] } = await moysklad.bonusTransaction.first({ filter: { bonusValue: 100 } });
* ```
*/
first<T extends FirstBonusTransactionOptions = Record<string, unknown>>(options?: Subset<T, FirstBonusTransactionOptions>): Promise<GetFindResult<BonusTransactionModel, T["expand"]>>;
/**
* Получить бонусную операцию по ID
*
* @param id - ID бонусной операции
* @param options - Опции для получения {@linkcode GetBonusTransactionOptions}
* @returns Бонусная операция
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-poluchit-bonusnuu-operaciu
*
* @example
* ```ts
* const transaction = await moysklad.bonusTransaction.get("a7404397-83a7-11ed-0a80-0e9700500d7e");
* ```
*/
get<T extends GetBonusTransactionOptions = Record<string, unknown>>(id: string, options?: Subset<T, GetBonusTransactionOptions>): Promise<GetFindResult<BonusTransactionModel, T["expand"]>>;
/**
* Создать новую бонусную операцию
*
* @param data - Данные для создания бонусной операции
* @param options - Опции для создания {@linkcode CreateBonusTransactionOptions}
* @returns Созданная бонусная операция
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-sozdat-bonusnuu-operaciu
*
* @example
* ```ts
* const transaction = await moysklad.bonusTransaction.create({
* agent: { meta: { href: "..." } },
* bonusValue: 100
* });
* ```
*/
create<T extends CreateBonusTransactionOptions = Record<string, unknown>>(data: GetModelCreatableFields<BonusTransactionModel>, options?: Subset<T, CreateBonusTransactionOptions>): Promise<GetFindResult<BonusTransactionModel, T["expand"]>>;
/**
* Обновить бонусную операцию
*
* @param id - ID бонусной операции
* @param data - Данные для обновления
* @param options - Опции для обновления {@linkcode UpdateBonusTransactionOptions}
* @returns Обновленная бонусная операция
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-izmenit-bonusnuu-operaciu
*
* @example
* ```ts
* const transaction = await moysklad.bonusTransaction.update(
* "a7404397-83a7-11ed-0a80-0e9700500d7e",
* { bonusValue: 200 }
* );
* ```
*/
update<T extends UpdateBonusTransactionOptions = Record<string, unknown>>(id: string, data: GetModelUpdatableFields<BonusTransactionModel>, options?: Subset<T, UpdateBonusTransactionOptions>): Promise<GetFindResult<BonusTransactionModel, T["expand"]>>;
/**
* Создать или обновить бонусную операцию
*
* @param data - Данные для создания или обновления
* @param options - Опции для операции {@linkcode UpsertBonusTransactionOptions}
* @returns Созданная или обновленная бонусная операция (или массив операций)
*
* @example
* ```ts
* const transaction = await moysklad.bonusTransaction.upsert({
* meta: {
* href: "https://api.moysklad.ru/api/remap/1.2/entity/bonustransaction/a7404397-83a7-11ed-0a80-0e9700500d7e",
* type: Entity.BonusTransaction,
* mediaType: MediaType.Json,
* },
* bonusValue: 300
* });
* ```
*
* @example
* ```ts
* const transactions = await moysklad.bonusTransaction.upsert([
* // Создание
* {
* bonusValue: 100
* },
* // Обновление
* {
* meta: {
* href: "https://api.moysklad.ru/api/remap/1.2/entity/bonustransaction/b8515408-94b8-12fe-1b91-1f8811600e8f",
* type: Entity.BonusTransaction,
* mediaType: MediaType.Json,
* },
* bonusValue: 200
* }
* ]);
* ```
*/
upsert<TData extends ModelCreateOrUpdateData<BonusTransactionModel>, TOptions extends UpsertBonusTransactionOptions = Record<string, unknown>>(data: TData, options?: Subset<TOptions, UpsertBonusTransactionOptions>): Promise<MatchArrayType<TData, GetFindResult<BonusTransactionModel, TOptions["expand"]>>>;
/**
* Удалить бонусную операцию
*
* @param id - ID бонусной операции
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-bonusnaq-operaciq-udalit-bonusnuu-operaciu
*
* @example
* ```ts
* await moysklad.bonusTransaction.delete("a7404397-83a7-11ed-0a80-0e9700500d7e");
* ```
*/
delete(id: string): Promise<void>;
/**
* Удалить несколько бонусных операций
*
* @param ids - Массив ID бонусных операций
*
* @example
* ```ts
* await moysklad.bonusTransaction.batchDelete([
* "a7404397-83a7-11ed-0a80-0e9700500d7e",
* "b8515408-94b8-12fe-1b91-1f8811600e8f"
* ]);
* ```
*/
batchDelete(ids: string[]): Promise<void>;
}
export declare interface BonusTransactionModel extends Model {
/** Основная сущность бонусной операции {@linkcode BonusTransaction} */
object: BonusTransaction;
expandable: {
agent: CounterpartyModel;
owner: EmployeeModel;
group: GroupModel;
bonusProgram: BonusProgramModel;
organization: OrganizationModel;
};
orderableFields: "id" | "applicable" | "bonusValue" | "code" | "created" | "executionDate" | "externalCode" | "moment" | "name" | "shared" | "updated";
requiredCreateFields: "agent" | "transactionType";
filters: {
accountId: IdFilter;
agent: IdFilter;
applicable: BooleanFilter;
bonusProgram: IdFilter;
bonusValue: NumberFilter;
code: StringFilter;
created: DateTimeFilter;
externalCode: StringFilter;
group: IdFilter;
id: IdFilter;
moment: DateTimeFilter;
name: StringFilter;
organization: IdFilter;
owner: IdFilter;
shared: BooleanFilter;
updated: DateTimeFilter;
updatedBy: IdFilter;
};
}
/** Статус бонусной операции */
export declare enum BonusTransactionStatus {
WaitProcessing = "WAIT_PROCESSING",
Completed = "COMPLETED",
Canceled = "CANCELED"
}
/** Тип бонусной операции */
export declare enum BonusTransactionType {
Earning = "EARNING",
Spending = "SPENDING"
}
export declare interface BooleanAttribute extends BaseAttribute {
type: AttributeType.Boolean;
value: boolean;
}
export declare type BooleanFilter = Partial<EqualityFilter<boolean>> | boolean;
/**
* Комлект
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-komplekt
*/
export declare interface Bundle extends Idable, Meta<Entity.Bundle> {
/** ID учетной записи */
readonly accountId: string;
/** Добавлен ли Комплект в архив */
archived: boolean;
/** Артикул */
article?: string;
/** Коллекция доп. полей */
attributes?: Attribute[];
/**
* Штрихкоды Комплекта
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-komplekt-komplekty-komponenty-komplekta-shtrihkody
*/
barcodes?: Barcodes;
/** Код Комплекта */
code?: string;
/** Массив компонентов Комплекта */
components: ListMeta<Entity.BundleComponent>;
/** Метаданные Страны */
country?: Meta<Entity.Country>;
/** Описание Комплекта */
description?: string;
/** Признак запрета скидок */
discountProhibited: boolean;
/** Реальный НДС % */
readonly effectiveVat?: number;
/**
* Дополнительный признак для определения разграничения реального НДС.
*
* - (`effectiveVat` = `0`, `effectiveVatEnabled` = `false`) -> "без НДС"
* - (`effectiveVat` = `0`, `effectiveVatEnabled` = `true`) -> `0%`
*/
readonly effectiveVatEnabled?: boolean;
/** Внешний код Комплекта */
externalCode: string;
/** Метаданные массива Файлов */
files?: unknown[];
/** Метаданные отдела сотрудника */
group: Meta<Entity.Group>;
/** Массив метаданных Изображений */
images?: unknown[];
/**
* Минимальная цена
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-komplekt-komplekty-atributy-wlozhennyh-suschnostej-minimal-naq-cena
*/
minPrice?: {
value: number;
currency: Meta<Entity.Currency>;
};
/** Наименование Комплекта */
name: string;
/**
* Дополнительные расходы
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/dictionaries/#suschnosti-komplekt-komplekty-atributy-wlozhennyh-suschnostej-dopolnitel-nye-rashody
*/
overhead?: {
value: number;
currency: Meta<Entity.Currency>;
};
/** Метаданные владельца (Сотрудника) */
owner?: Meta<Entity.Employee>;
/** Управление состоянием частичного выбытия маркированного товара */
partialDisposal?: boolean;
/** Наименование группы, в которую входит Комплект */
readonly pathName?: string;
/**
* Признак предмета расчета
*
* {@linkcode BundlePaymentItemType}
*/
paymentItemType?: BundlePaymentItemType;
/** Метаданные группы Комплекта */
productFolder?: Meta<Entity.ProductFolder>;
/** Цены продажи */
salePrices?: {
value: number;
currency: Meta<Entity.Currency>;
priceType: Meta<Entity.PriceType>;
}[];
/** Общий доступ */
shared: boolean;
/** ID синхронизации */
readonly syncId?: string;
/**
* Код системы налогообложения
*
* {@linkcode TaxSystem}
*/
taxSystem?: TaxSystem;
/** Код ТН ВЭД */
tnved?: string;
/**
* Тип маркируемой продукции
*
* {@linkcode TrackingType}
*/
trackingType?: TrackingType;
/** Единицы измерения */
uom?: Meta<Entity.Uom>;
/** Момент последнего обновления сущности */
readonly updated: string;
/** Используется ли ставка НДС родительской группы */
useParentVat: boolean;
/** НДС % */
vat?: number;
/** Включен ли НДС для товара */
vatEnabled?: boolean;
/** Объем */
volume?: number;
/** Вес */
weight?: number;
}
export declare type BundleAssortmentModel = BundleModel & {
object: AssortmentFields;
};
/**
* Компонент комплекта
*
* {@linkcode Bundle}
*/
export declare interface BundleComponent extends Idable, Meta<Entity.BundleComponent> {
/** ID учетной записи */
readonly accountId: string;
/** Метаданные товара/услуги/серии, которую представляет собой компонент */
assortment: Meta<AssortmentEntity>;
/** Количество товаров/услуг данного вида в компоненте */
readonly quantity: number;
}
/**
* Модель компонента комплекта
*
* {@linkcode BundleComponent}
*/
export declare interface BundleComponentModel extends Model {
object: BundleComponent;
expandable: {
assortment: AssortmentModel;
};
}
/**
* Модель комплекта
*
* {@linkcode Bundle}
*/
export declare interface BundleModel extends Model {
object: Bundle;
expandable: {
group: GroupModel;
owner: EmployeeModel;
components: BundleComponentModel;
};
filters: {
id: IdFilter;
accountId: IdFilter;
archived: ArchivedFilter;
article: StringFilter;
code: StringFilter;
description: StringFilter;
externalCode: StringFilter;
group: IdFilter;
name: StringFilter;
owner: IdFilter;
pathName: StringFilter;
shared: BooleanFilter;
syncId: IdFilter;
updated: DateTimeFilter;
volume: NumberFilter;
weight: NumberFilter;
};
}
/**
* Признак предмета расчёта комплекта
*
* {@linkcode Bundle}
*/
export declare enum BundlePaymentItemType {
/** Товар */
Good = "GOOD",
/** Подакцизный товар */
ExcisableGood = "EXCISABLE_GOOD",
/** Составной предмет расчета */
CompoundPaymentItem = "COMPOUND_PAYMENT_ITEM",
/** Иной предмет расчета */
AnotherPaymentItem = "ANOTHER_PAYMENT_ITEM"
}
/**
* Прибыльность по модификациям
*
* @see https://dev.moysklad.ru/doc/api/remap/1.2/reports/#otchety-otchet-pribyl-nost-poluchit-pribyl-nost-po-modifikaciqm
*/
export declare interface ByVariantProfitReport {
/** Краткое представление Модификации, Услуги или Комплекта в отчете. */
assortment: {
/** Метаданные Модификации, Услуги или Комплекта */
meta: Metadata<AssortmentEntity>;
/** Наименование сущности */
name: string;
/** Код сущности */
code: string;
/** Артикул Модификации или Комплекта */
article?: string;
/** Изображение Модификации */
image?: unknown;
/** Единица измерения */
uom: {
meta: Metadata<Entity.Uom>;
name: string;
};
};
/** Рентабельность */
margin: number;
/** Прибыль */
profit: number;
/** Себестоимость возвратов в копейках */
returnCost: number;
/** Сумма себестоимостей возвратов в копейках */
returnCostSum: number;
/** Цена возвратов */
returnPrice: number;
/** Возвращенное количество */
returnQuantity: number;
/** Сумма возвратов */
returnSum: number;
/** Себестоимость в копейках */
sellCost: number;
/** Сумма себестоимостей продаж в копейках */
sellCostSum: number;
/** Цена продаж (средняя) */
sellPrice: number;
/** Проданное количество */
sellQuantity: number;
/** Сумма продаж */
sellSum: number;
}
export declare interface ByVariantProfitReportListOptions {
pagination?: PaginationOptions;
filter?: FilterOptions<ByVariantProfitReportModel>;
/**
* При отсутствии параметров `momentFrom` и `momentTo` отображаются отчеты за последний месяц.
*
* При отсутствии параметра `momentFrom` и указании параметра `momentTo` отображаются отчеты с начала текущего года по `momentTo`.
*
* При отсутствии параметра `momentTo` и указании параметра `momentFrom` отображаются отчеты с `momentFrom` по текущий день.
*/
momentFrom?: DateTime;
/**
* При отсутствии параметров `momentFrom` и `momentTo` отображаются отчеты за последний месяц.
*
* При отсутствии параметра `momentFrom` и указании параметра `momentTo` отображаются отчеты с начала текущего года по `momentTo`.
*
* При отсутствии параметра `momentTo` и указании параметра `momentFrom` отображаются отчеты с `momentFrom` по текущий день.
*/
momentTo?: DateTime;
}
export declare interface ByVariantProfitReportModel extends Model {
object: ByVariantProfitReport;
filters: {
/** ссылка на товар, услугу, комплект, модификацию или серию, по которой нужно произвести фильтрацию. Можно передать несколько значений. Одновременная фильтрация по `product` и `productFolder` не поддерживается. */
product: IdFilter;
/** параметр для фильтрации по нескольким группам товаров. Значение параметра - ссылка на группу товаров, которая должна быть включена в выборку или исключена из нее. Можно передать несколько значений. Одновременная фильтрация по `product` и `productFolder` не поддерживается. */
productFolder: IdFilter;
/** параметр учета вложенных подгрупп. Работает только при наличии фильтра по `productFolder`. По умолчанию `true`, выводятся товары из дочерних подгрупп фильтруемой группы / групп товаров. При передаче `false` выводятся только товары из фильтруемой группы / групп, без учета подгрупп. */
withSubFolders: BooleanFilter;
/** строка с названием группы контрагентов, по которой нужно произвести фильтрацию. */
agentTag: EqualityFilter<string>;
/** ссылка на контрагента, по которому нужно произвести фильтрацию. */
counterparty: IdFilter;
/** ссылка на юрлицо, по которому нужно произвести фильтрацию. */
organization: IdFilter;
/** ссылка на склад, по которому нужно произвести фильтрацию. */
store: IdFilter;
/** ссылка на проект, по которому нужно произвести фильтрацию. */
project: IdFilter;
/** ссылка на точку продаж, по которой нужно произвести фильтрацию. */
retailStore: IdFilter;
/** параметр для фильтрации по поставщику. Значение параметра - ссылка на контрагента или организацию. В выборку будут включены товары с указанным поставщиком. */
supplier: IdFilter;
/** ссылка на канал продаж, по которому нужно провести фильтрацию. Допустимо повторное использование фильтра, когда требуе