December 23, 2025

Новый год, новый НДС, СНО

Для кого это?

Первые - для тех кто не хочет обновлять фронтол на версию поддерживающую новые ставки НДС (22/122).

Вторые - для тех кто в ночь с 31 на 1 хочет встретить с оливье и игристым, а не с кассой и учетной системой.

Третьи - кто не уверен, что в праздники хочет поймать какую то непонятную ошибку в, потенциально, сыром релизе Фронтола (на момент публикации это 28.0).

Вводные данные:

0. То что написано ниже - актуально для фискальных регистраторов Атол, работающих на 10 драйвере!!!!

- Прошиваем кассу на 5.17.0

- Устанавливаем драйвер ККМ с поддержкой ставки НДС 22-122% (это 10.10.8.0 или 10.10.8.20)

- Дальше нам нужно сделать небольшой скрипт для драйвера ККТ (даже 2 - для продажи и для возврата). Сами скрипты драйвера находятся в папке c:\Program files(x86)\Atol\Frontol6\bin\json_scripts

так папка выглядит по умолчанию

- теперь сделаем простой скрипт для драйвера с подменой ставки НДС 20 на ставку НДС 22. Для этого вэ той папке создаем файл json_sell:

const receipt = require('fptr10_base_receipt');
const validator = require('fptr10_validators');

function validateTask(task) {
    return receipt.validate(task);
}

function execute(task) {

    var targetDay = new Date('2026-01-01'); // <= yyyy-MM-dd
    var nowDay = new Date();

    if (nowDay > targetDay) {
        task = changeVat(task)
    }

    return receiptResult = receipt.executeReceipt(task);
}

function changeVat(task) {
    for (var i = 0; i < task.items.length; i++) {
        var item = task.items[i];

        if (item.type !== "position")
            continue;

        if (validator.isMissing(item.tax))
            continue;

        if (item.tax.type === "vat20")
            item.tax.type = "vat22";

        if (item.tax.type === "vat120")
            item.tax.type = "vat122";
    }

    return task;
}

- абсолютно аналогичный код будет у чека возврата прихода - json_sellReturn.

Таким образом два файла дадут вам автоматический переход на 22% НДС.

Так же можно автоматически менять СНО (предварительно только нужно зарегистрировать кассу на нужную СНО).

Добавим в скрипт переход на другу СНО с 1 января:

const receipt = require("fptr10_base_receipt");
const validator = require("fptr10_validators");

function validateTask(task) {
    return receipt.validate(task);
}

function execute(task) {

    var targetDay = new Date("2026-01-01"); // <= yyyy-MM-dd
    var nowDay = new Date();

    if (nowDay > targetDay) {
        task = changeVat(task);
        task = changeTaxStation(task);
    }

    return receiptResult = receipt.executeReceipt(task);
}

function changeVat(task) {
    for (var i = 0; i < task.items.length; i++) {
        var item = task.items[i];

        if (item.type !== "position")
            continue;

        if (validator.isMissing(item.tax))
            continue;

        if (item.tax.type === "vat20")
            item.tax.type = "vat22";

        if (item.tax.type === "vat120")
            item.tax.type = "vat122";
    }

    return task;
}

function changeTaxStation(task) {
    var targetTaxStation = "usnIncomeOutcome"; // osn usnIncome usnIncomeOutcome esn patent 

    if (validator.isMissing(task.taxationType))
        return;

    task.taxationType = targetTaxStation;

    return task;
}

В общем - ничего сложного. И будет работать со всеми версиям фронтола (в том числе и "дотарифными").