CustomsCalc

Библиотека для расчёта стоимости растаможки автомобилей в Беларуси по ставкам ЕАЭС. Не знает ничего о DOM и не имеет зависимостей — подходит для любого окружения.

Таможенная пошлина по таблицам ЕАЭС (под 3, 3–5, старше 5 лет)
Утилизационный сбор — физические и юридические лица
Льгота 50% по Указу №140
Электромобили — отдельные ставки утилсбора, без пошлины
Динамические фиксированные расходы в EUR / USD / BYN
Комиссия банковского перевода
Конвертация валют через произвольные курсы
Итого в EUR и USD

Установка

npm install customs-calculator

TypeScript / ESM:

import { calculate, calcDutyEur, calcUtil, Age, PersonType, EngineType, Currency } from 'customs-calculator';

CommonJS:

const { calculate, Age, EngineType } = require('customs-calculator');
Браузер без бандлера — подключите через CDN, экспорты будут доступны через CustomsCalc:
<script src="https://unpkg.com/customs-calculator/dist/index.global.js"></script>
<script> const result = CustomsCalc.calculate({ ... }); </script>

При наличии npm: node_modules/customs-calculator/dist/index.global.js

Быстрый старт

Три шага: задайте курсы валют, опишите расходы, вызовите calculate().

import { calculate, Age, PersonType, EngineType, Currency } from 'customs-calculator';

// 1. Курсы BYN (например, от НБРБ)
const rates = { usd: 2.82, eur: 3.3 };

// 2. Фиксированные расходы — любой набор в любой валюте
const fixedCosts = [
  { id: 'delivery',   amount: 1400, currency: 'EUR' },
  { id: 'warehouse',  amount: 200,  currency: 'BYN' },
  { id: 'epts',       amount: 70,   currency: 'BYN' },
];

// 3. Расчёт
const result = calculate({
  age:        'under3',   // возраст авто
  price:      15000,      // стоимость
  currency:   'EUR',      // валюта цены
  engineType: 'fuel',     // тип двигателя
  volume:     2000,       // объём, см³
  face:       'individual', // физ. лицо
  discount:   false,      // льгота 50%
  fixedCosts,
  rates,
});

console.log(result.totalEur); // итого в EUR

TypeScript с Enums

import { calculate, Age, PersonType, EngineType, Currency } from 'customs-calculator';

// те же rates и fixedCosts...
const result = calculate({
  age:        Age.Under3,
  price:      15000,
  currency:   Currency.EUR,
  engineType: EngineType.Fuel,
  volume:     2000,
  face:       PersonType.Individual,
  discount:   false,
  fixedCosts,
  rates,
});

С комиссией банковского перевода

const result = calculate({
  // ...остальные параметры...
  commission: 1.5,  // +1.5% к цене авто в totalEur
  fixedCosts,
  rates,
});

Прямой вызов низкоуровневых функций

import { calcDutyEur, calcUtil } from 'customs-calculator';

// Только пошлина, без остального
const duty = calcDutyEur('under3', 15000, 2000);

// Только утилизационный сбор
const util = calcUtil('individual', 'fuel', 2000, 'under3');

Типы данных

Enums

Строковые значения совместимы с обычным JS — можно передавать литералы 'under3' вместо Age.Under3.

EnumЗначения
Age Under3 = 'under3', From3To5 = '3to5', Over5 = 'over5'
PersonType Individual = 'individual', Legal = 'legal'
EngineType Fuel = 'fuel', Electric = 'electric'
Currency EUR = 'EUR', USD = 'USD', BYN = 'BYN'
import { Age, PersonType, EngineType, Currency } from 'customs-calculator';

FixedCostItem

Описывает один фиксированный расход. Передаётся в массиве fixedCosts.

ПолеТипОписание
id string Произвольный идентификатор. Используется UI-слоем для привязки к элементу вывода.
amount number Сумма расхода.
currency 'EUR' | 'USD' | 'BYN' Валюта суммы. Библиотека автоматически конвертирует в EUR для итогового расчёта.
{ id: 'delivery', amount: 1400, currency: 'EUR' }
{ id: 'warehouse', amount: 200,  currency: 'BYN' }

Rates

Курсы валют — рублей (BYN) за единицу. Получаются, например, из API НБРБ.

ПолеТипОписание
usd number Сколько BYN стоит 1 USD.
eur number Сколько BYN стоит 1 EUR.
{ usd: 2.82, eur: 3.3 }

CalcResult

Объект, который возвращает calculate(). Все суммы — числа с плавающей точкой; округляйте по необходимости.

ПолеТипОписание
priceEur number Стоимость авто в EUR (без комиссии).
priceUsd number Стоимость авто в USD (без комиссии).
dutyEur number Таможенная пошлина, EUR. 0 для электромобилей.
dutyNote string Пояснение к пошлине: '(электромобиль)', '(−50% Указ №140)' или пустая строка.
utilByn number Утилизационный сбор, BYN. Постановление №195 (апрель 2026).
commissionEur number Сумма комиссии банковского перевода в EUR. 0, если commission не задана.
totalEur number Итоговая стоимость в EUR: цена + комиссия + пошлина + все фиксированные расходы + утилсбор.
totalUsd number Итоговая стоимость в USD.

API Reference

calculate(params)

Основная функция. Принимает все параметры сделки, возвращает полный расчёт.

import { calculate } from 'customs-calculator'
calculate(params: CalculateParams): CalculateResult

Параметры

ПараметрТипОписание
age Age req Возраст автомобиля. Определяет таблицу ставок пошлины и ключ утилсбора.
price number req Стоимость авто в валюте, указанной в currency.
currency Currency req Валюта параметра price. Регистр не важен.
engineType EngineType req Тип двигателя. Для 'electric' пошлина равна 0; утилсбор — по отдельной строке таблицы.
volume number req* Объём двигателя, см³. Игнорируется, если engineType === 'electric'.
face PersonType req Физическое ('individual') или юридическое ('legal') лицо. Влияет на таблицу утилсбора.
discount boolean req Таможенная льгота 50% по Указу №140. Применяется только к пошлине, не к утилсбору.
fixedCosts FixedCostItem[] req Массив фиксированных расходов. Может быть пустым. Каждый расход конвертируется в EUR для расчёта итога.
rates Rates req Курсы USD и EUR к BYN. Используются для конвертации цены, фиксированных расходов в BYN и утилсбора.
commission number opt Комиссия банковского перевода, %. Прибавляется к цене в итоге: priceEur × commission / 100. На пошлину не влияет.
Формула итога:
totalEur = priceEur + commissionEur + dutyEur + Σ(fixedCosts → EUR) + utilByn / rates.eur

Ставки пошлины (встроенные таблицы)

Ставки соответствуют решению Совета ЕЭК для физических лиц.

До 3 лет — MAX(% от стоимости в EUR, EUR × см³):

До, EUR% от ценыEUR/см³
8 50054%2.50
16 70048%3.50
42 30048%5.50
84 50048%7.50
169 00048%15.00
48%20.00

От 3 до 5 лет и старше 5 лет — EUR × см³ (ставка по объёму):

До, см³3–5 лет (EUR/см³)>5 лет (EUR/см³)
1 0001.503.00
1 5001.703.20
1 8002.503.50
2 3002.704.80
3 0003.005.00
3.605.70

calcDutyEur(age, priceEur, volumeCc)

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

import { calcDutyEur } from 'customs-calculator'
calcDutyEur(age: Age, priceEur: number, volumeCc: number): number
ПараметрТипОписание
age Age Возраст автомобиля.
priceEur number Стоимость авто в EUR.
volumeCc number Объём двигателя, см³.

Возвращает: пошлину в EUR.

Функция не знает о типе двигателя. Вызывайте её только для топливных авто — для электромобилей пошлина всегда 0.
// BMW X5, 3.0 л, возраст 1 год, цена 50 000 EUR
calcDutyEur('under3', 50000, 3000);
// → MAX(50000 × 0.48, 3000 × 5.5) = MAX(24000, 16500) = 24000

// VW Golf, 1.6 л, возраст 4 года, цена 12 000 EUR
calcDutyEur('3to5', 12000, 1600);
// → 1600 × 2.5 = 4000

calcUtil(face, engineType, volumeCc, age)

Возвращает утилизационный сбор в BYN по Постановлению №195 (апрель 2026). Ставки для физических лиц зависят только от возраста; для юридических — от типа двигателя, объёма и возраста.

import { calcUtil } from 'customs-calculator'
calcUtil(face: PersonType, engineType: EngineType, volumeCc: number, age: Age): number
ПараметрТипОписание
face PersonType Физическое или юридическое лицо.
engineType EngineType Тип двигателя. Для 'electric' применяется отдельная строка таблицы юрлиц.
volumeCc number Объём двигателя, см³. Для электромобилей игнорируется.
age Age Возраст авто. '3to5' и 'over5' попадают в группу «от 3 лет».

Возвращает: утилизационный сбор в BYN.

Ставки утилизационного сбора (физические лица, BYN)

ВозрастСумма
До 3 лет624.92
От 3 лет1 282.02

Ставки утилизационного сбора (юридические лица, BYN)

ТипОбъём, см³До 3 летОт 3 лет
Электро1 229.282 950.38
Топливодо 1 0006 811.1617 386.97
Топливодо 2 00025 226.2244 374.56
Топливодо 3 00070 885.91107 322.94
Топливодо 3 50081 393.68124 611.62
Топливо103 649.00136 253.33
// Физлицо, авто до 3 лет
calcUtil('individual', 'fuel', 2000, 'under3'); // → 624.92

// Юрлицо, топливо 1.6 л, старше 3 лет
calcUtil('legal', 'fuel', 1600, 'over5'); // → 44374.56

// Юрлицо, электромобиль до 3 лет
calcUtil('legal', 'electric', 0, 'under3'); // → 1229.28

Интерактивное демо

Меняйте параметры — расчёт и фрагмент кода обновляются мгновенно.

Параметры
Результат
Стоимость авто
Комиссия перевода
Таможенная пошлина
Утилизационный сбор
Итого