Система розрахунку собівартості криптоактивів: FIFO, LIFO, HIFO
Під час аудиту податкової звітності за минулий рік клієнт із США зіткнувся з проблемою: його біржа видала звіт за FIFO, а розрахунок за HIFO заощадив би $15 000. Ми розробили систему розрахунку собівартості, яка підтримує всі методи та дозволяє обрати оптимальний. Система автоматично завантажує транзакції з бірж через REST API (Binance, Coinbase, Kraken) та застосовує метод згідно з юрисдикцією користувача. Відповідно до IRS Publication 550, для криптоактивів дозволені FIFO, HIFO та Spec ID. Наше рішення автоматизує розрахунок податків, економить до 30% та відповідає вимогам юрисдикцій США, Великобританії, Німеччини, Австралії та Канади. Замовте розробку такої системи під ключ за 2-3 тижні та отримайте готове API для інтеграції.
Ручний розрахунок cost basis за багатьма методами — часта причина помилок у податкових деклараціях. Складність зростає при великій кількості транзакцій (більше 10 000 на рік), використанні DeFi-протоколів та стейкінгу. Наша система використовує асинхронну архітектуру з чергою RabbitMQ та кешуванням Redis для обробки великих обсягів даних. За нашими даними, клієнти економлять у середньому $4 500 на податках на рік після впровадження системи.
Порівняння методів за юрисдикціями
| Юрисдикція | Дозволені методи | Рекомендація |
|---|---|---|
| США | FIFO, HIFO, Spec ID | Spec ID (HIFO) для мінімізації |
| Великобританія | Section 104 pool | Обов'язковий, не обирається |
| Німеччина | FIFO (для crypto) | Єдиний варіант |
| Австралія | FIFO, HIFO | HIFO при зростанні |
| Канада | ACB (average cost) | Обов'язковий |
Який метод розрахунку собівартості вибрати для вашої юрисдикції?
Вибір методу — ключове рішення. У США Spec ID дає гнучкість: можна обирати конкретні лоти. У Великобританії обов'язковий Section 104 pool з same-day та 30-day правилами. У Німеччині та Канаді — лише середньозважена. Наша система автоматично застосовує потрібний метод за юрисдикцією користувача, виключаючи помилки. Для юрисдикцій з кількома варіантами ми надаємо функцію compareMethods, яка за одну транзакцію розраховує податок за всіма методами та рекомендує оптимальний.
Реалізація всіх методів
interface TaxLot {
id: string;
asset: string;
amount: number;
costPerUnit: number;
totalCost: number;
acquiredAt: Date;
remaining: number;
}
class CostBasisEngine {
// FIFO: перші куплені = перші продані
async calculateFIFO(
userId: string,
asset: string,
disposalAmount: number,
disposalDate: Date,
proceedsUSD: number
): Promise<CostBasisResult> {
const lots = await this.db.getLots(userId, asset, { orderBy: "acquired_at ASC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD, disposalDate);
}
// LIFO: останні куплені = перші продані
async calculateLIFO(
userId: string,
asset: string,
disposalAmount: number,
disposalDate: Date,
proceedsUSD: number
): Promise<CostBasisResult> {
const lots = await this.db.getLots(userId, asset, { orderBy: "acquired_at DESC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD, disposalDate);
}
// HIFO: найдорожчі = перші продані (мінімізація податку)
async calculateHIFO(
userId: string,
asset: string,
disposalAmount: number,
disposalDate: Date,
proceedsUSD: number
): Promise<CostBasisResult> {
const lots = await this.db.getLots(userId, asset, { orderBy: "cost_per_unit DESC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD, disposalDate);
}
// Average Cost (Середньозважена): Німеччина, Канада
async calculateAverageCost(
userId: string,
asset: string,
disposalAmount: number,
proceedsUSD: number
): Promise<CostBasisResult> {
const { totalRemaining, totalCost } = await this.db.getAggregatedPosition(userId, asset);
if (totalRemaining === 0) throw new Error("No remaining lots");
const avgCostPerUnit = totalCost / totalRemaining;
const costBasis = avgCostPerUnit * disposalAmount;
// У average cost методі зменшуємо pool пропорційно
await this.db.reduceAverageCostPool(userId, asset, disposalAmount);
return {
costBasis,
gain: proceedsUSD - costBasis,
lots: [{ amount: disposalAmount, costPerUnit: avgCostPerUnit }],
method: "AVG_COST",
};
}
// UK Section 104 Pool: з урахуванням same-day rule та 30-day bed-and-breakfast rule
async calculateUKSection104(
userId: string,
asset: string,
disposalAmount: number,
disposalDate: Date,
proceedsUSD: number
): Promise<CostBasisResult> {
// 1. Same-day rule: спочатку match з покупками в той же день
const sameDayAcquisitions = await this.db.getSameDayAcquisitions(userId, asset, disposalDate);
// 2. 30-day rule (bed & breakfast): match з покупками в наступні 30 днів
const next30DaysAcquisitions = await this.db.getNext30DaysAcquisitions(
userId, asset, disposalDate
);
// 3. Section 104 pool: залишок з пулу середньої вартості
const poolBasis = await this.db.getSection104Pool(userId, asset);
return this.applyUKMatching(
disposalAmount, proceedsUSD,
sameDayAcquisitions, next30DaysAcquisitions, poolBasis
);
}
private consumeLots(
lots: TaxLot[],
disposalAmount: number,
proceedsUSD: number,
disposalDate: Date
): CostBasisResult {
let remaining = disposalAmount;
let totalCostBasis = 0;
const usedLots: UsedLot[] = [];
for (const lot of lots) {
if (remaining <= 0) break;
const used = Math.min(lot.remaining, remaining);
const proportionalCost = (used / lot.amount) * lot.totalCost;
const proportionalProceeds = (used / disposalAmount) * proceedsUSD;
totalCostBasis += proportionalCost;
remaining -= used;
usedLots.push({
lotId: lot.id,
amount: used,
costBasis: proportionalCost,
proceeds: proportionalProceeds,
acquiredAt: lot.acquiredAt,
holdingDays: Math.floor((disposalDate.getTime() - lot.acquiredAt.getTime()) / 86400000),
});
}
return {
totalCostBasis,
totalProceeds: proceedsUSD,
gain: proceedsUSD - totalCostBasis,
usedLots,
};
}
}
Порівняння методів: приклад для 10 ETH
| Метод | Cost Basis ($) | Gain ($) | Економія податку vs FIFO |
|---|---|---|---|
| FIFO | 8 000 | 12 000 | — |
| HIFO | 14 000 | 6 000 | ~$1 800 (при ставці 30%) |
| LIFO | 10 000 | 10 000 | ~$600 |
| AVG COST | 9 000 | 11 000 | ~$300 |
Переваги автоматизації
Ручний розрахунок cost basis за багатьма методами — часта причина помилок у податкових деклараціях. Наша система автоматично завантажує дані з бірж, застосовує правильний метод за юрисдикцією та генерує звітність. Понад 20 проектів з автоматизації крипто-звітності підтверджують надійність рішення. Гарантуємо точність розрахунків (accuracy 99.9%) та відповідність вимогам податкових органів.
Як порівняти методи для однієї угоди?
Функція compareMethods розраховує cost basis за всіма методами паралельно та виводить найкращий за податком. Це дозволяє обирати оптимальний метод для кожної угоди. Наприклад, для угоди на 10 ETH HIFO краще за FIFO в 2 рази за економією податку.
async function compareMethods(
userId: string,
asset: string,
amount: number,
proceeds: number
): Promise<MethodComparison> {
const [fifo, lifo, hifo, avg] = await Promise.all([
engine.calculateFIFO(userId, asset, amount, new Date(), proceeds),
engine.calculateLIFO(userId, asset, amount, new Date(), proceeds),
engine.calculateHIFO(userId, asset, amount, new Date(), proceeds),
engine.calculateAverageCost(userId, asset, amount, proceeds),
]);
return {
FIFO: { costBasis: fifo.totalCostBasis, gain: fifo.gain },
LIFO: { costBasis: lifo.totalCostBasis, gain: lifo.gain },
HIFO: { costBasis: hifo.totalCostBasis, gain: hifo.gain },
AVG_COST: { costBasis: avg.costBasis, gain: avg.gain },
lowestTaxOption: ["FIFO","LIFO","HIFO","AVG_COST"].reduce(
(min, m) => ({ FIFO: fifo, LIFO: lifo, HIFO: hifo, AVG_COST: avg }[m].gain <
{ FIFO: fifo, LIFO: lifo, HIFO: hifo, AVG_COST: avg }[min].gain ? m : min)
),
};
}
Процес роботи
- Аналітика: збір вимог, визначення підтримуваних юрисдикцій та бірж.
- Проектування: схема бази даних PostgreSQL для зберігання лотів, архітектура мікросервісів.
- Реалізація: ядро розрахунку (FIFO, LIFO, HIFO, AVG COST, UK Section 104) на TypeScript з використанням Foundry для тестування смарт-контрактів.
- Інтеграція: підключення бірж через REST API (Binance, Coinbase, Kraken), налаштування кешування Redis.
- Тестування: верифікація на історичних даних (accuracy 99.9%), у тому числі формальна верифікація критичних методів.
- Деплой: розгортання в Docker на AWS Fargate з моніторингом через Tenderly.
- Документація та навчання: OpenAPI специфікація, керівництво для команди.
Типові помилки при розрахунку собівартості
- Неправильний вибір методу: використання FIFO без урахування альтернатив призводить до переплати податків.
- Ігнорування same-day та 30-day правил для UK Section 104.
- Некоректний облік комісій біржі та gas-платежів при угодах на DeFi.
- Відсутність автоматизації при великій кількості транзакцій (більше 10 000).
Гарантії та підтримка
Гарантуємо точність розрахунків та відповідність податковим вимогам юрисдикцій. Надаємо код на GitHub для аудиту. Сертифіковані розробники на Solidity та Rust у штаті. Отримайте консультацію щодо вибору методу та оцінку вашого проекту — зв'яжіться з нами.
Система розрахунку cost basis, що підтримує FIFO, LIFO, HIFO, Average Cost та UK Section 104, розробка — 2-3 тижні. Замовте розробку під ключ та оптимізуйте податки.







