Розробка системи розрахунку себестоимості (FIFO, LIFO, HIFO)
Метод cost basis безпосередньо впливає на податкове зобов'язання. FIFO при зростанні ринку дає вищий податок (продаємо найдешевші, накопичені рано). HIFO мінімізує поточний податок. Середня вартість найпростіша, потрібна в Німеччині та Нідерландах.
Вибір методу за юрисдикціями
| Юрисдикція | Дозволені методи | Рекомендація |
|---|---|---|
| США | FIFO, HIFO, Spec ID | Spec ID (HIFO) для мінімізації |
| Великобританія | Section 104 pool | Обов'язковий |
| Німеччина | FIFO (для crypto) | Єдиний варіант |
| Австралія | FIFO, HIFO | HIFO при зростанні |
| Канада | ACB (average cost) | Обов'язковий |
Реалізація
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, proceedsUSD: number) {
const lots = await this.db.getLots(userId, asset, { orderBy: "acquired_at ASC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD);
}
// LIFO: останні куплені = перші продані
async calculateLIFO(userId: string, asset: string, disposalAmount: number, proceedsUSD: number) {
const lots = await this.db.getLots(userId, asset, { orderBy: "acquired_at DESC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD);
}
// HIFO: найдорожчі = перші продані (мінімізація податку)
async calculateHIFO(userId: string, asset: string, disposalAmount: number, proceedsUSD: number) {
const lots = await this.db.getLots(userId, asset, { orderBy: "cost_per_unit DESC" });
return this.consumeLots(lots, disposalAmount, proceedsUSD);
}
}
Система розрахунку cost basis з підтримкою FIFO, LIFO, HIFO, Average Cost та UK Section 104 — 2-3 тижні розробки.







