ФИНАНСОВАЯ ОБЛАСТЬP0L3

Пересчёт валютного остатка на дату отчёта

Как закрепить базу денежного остатка, отчётную дату и версии курса, рассчитать переоценку и избежать повторного включения разницы.

Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

Задача и границы#

Нужно получить стоимость открытого валютного денежного остатка в функциональной валюте на конец отчётного периода и объяснить разницу с его учётной стоимостью перед пересчётом. Конвертация отдельных оборотов и пересчёт конечного остатка отвечают на разные вопросы: сумма оборотов по историческим курсам не заменяет оценку остатка на отчётную дату.

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

Немонетарные статьи, трансляция зарубежных операций и пересчёт в валюту представления, деривативы и hedge accounting здесь не рассматриваются. Специальные случаи отсутствия обменяемости, гиперинфляции и чистой инвестиции в зарубежную операцию требуют отдельного анализа. Статья knowledge описывает проектный контракт, не опыт автора и не реализованный лабораторный расчёт.

Стандарт и проектный контракт#

Официальная страница IAS 21 объясняет назначение стандарта и функциональную валюту. Страница поддержки содержит материалы по применению. Полный текст на сайте IFRS Foundation может требовать подписки; обзор и материалы поддержки не заменяют применимую редакцию стандарта.

Для открытого первоисточника можно обратиться к IAS 21 в приложении к Регламенту ЕС 2023/1803: пункт 8 определяет денежные статьи и closing rate, пункт 23(a) предусматривает пересчёт валютных денежных статей по closing rate на конец периода, а пункт 28 устанавливает общее правило признания курсовых разниц с исключениями. Это опубликованная редакция, принятая ЕС в 2023 году, а не утверждение о составе всех последующих поправок или применимости права ЕС к любой организации. Для конкретного отчёта проверяют юрисдикцию, дату вступления поправок в силу и редакцию политики.

Далее предлагаются поля и контроли EDWH. Стандарт не предписывает их названия, идентификатор запуска или алгоритм хранения. Утверждённая политика конкретизирует источник и тип допустимого closing rate, правила округления и обработку исключений в пределах применимых требований. Она не может произвольно отменить эти требования. Отсутствующий курс нельзя автоматически заменить нулём или последним известным значением.

Зерно, база и временные отсечки#

В предлагаемой модели строка входа - открытая денежная позиция на дату отчёта: юридическое лицо, книга, счёт, идентификатор позиции, исходная валюта и версия снимка. Для денежного счёта идентификатором может служить согласованная аналитика счёта, для дебиторской задолженности - открытая позиция документа. Несколько строк одной позиции агрегируют до этого зерна до присоединения курсов. Выбор зерна округления является частью политики.

Сохраняют два разных значения: foreign_balance в основных единицах иностранной валюты и functional_basis в основных единицах функциональной валюты перед текущей корректировкой. В примере дебет положителен, кредит отрицателен. Масштаб каждой валюты и точность вычислений заданы отдельно. Остатки по разным датам не суммируются.

basis_id указывает, как получена база: снимок книги, набор проводок и включённые предыдущие переоценки. Это не просто исходная сумма при первом признании. Если книга уже содержит переоценку за текущую дату, её нельзя повторно включить как новую корректировку; нужен отдельный режим сверки уже переоценённого остатка.

Поле Смысл
reporting_date, business_date Дата оценки и учётная дата входных движений
knowledge_cutoff Отсечка доступности версий данных для этого выпуска
observed_at, available_at Получение версии и её доступность после проверок
snapshot_id, basis_id Версии валютного остатка и функциональной базы
functional_currency, classification_version Функциональная валюта и решение о денежной классификации
rate_id, rate_date, rate_type, provider Закреплённая версия курса, дата действия, тип и источник
policy_version, rounding_rule, run_id Правила оценки, округление и версия результата

Отчётная дата и отсечка знаний различаются. Выпуск за 31 января может использовать данные, принятые 2 февраля, если это разрешено контрактом выпуска. Поздняя корректировка остатка или курса создаёт новый выпуск с объяснимым мостом изменений. Дату действия курса не подменяют временем загрузки. Для отсечек timestamp фиксируют часовой пояс и включение границы, например available_at <= knowledge_cutoff.

Расчёт и синтетический пример#

Пусть r выражен в основных единицах функциональной валюты за одну основную единицу иностранной валюты. Тогда target = round(foreign_balance * r) и adjustment = target - functional_basis. Первое значение - оценка состояния, второе - разница с согласованной базой. Эта формула не определяет автоматически счёт признания, курсовой результат периода или его представление в отчёте.

Синтетическая дебиторская позиция имеет остаток +100 USD, база составляет +9000 RUB, выбранный курс на дату отчёта равен 95 RUB/USD. Округление в примере выполняется до двух десятичных знаков RUB. Целевая стоимость равна +9500.00 RUB, корректировка равна +500.00 RUB. Для кредиторской позиции -100 USD с базой -9000 RUB получаем -9500.00 RUB и -500.00 RUB. Одинаковое изменение курса даёт разные последствия для актива и обязательства; знак корректировки не является универсальным знаком прибыли.

Если в базу дебиторской позиции уже вошла предыдущая переоценка +300 RUB, база равна +9300 RUB, и новая разница составляет +200 RUB, а не +500 RUB. Если переоценка текущей даты уже отражена и база равна +9500 RUB, сверка должна дать ноль при тех же входах. Повторное прибавление +500 RUB завысило бы стоимость.

Примеры являются арифметической иллюстрацией, не SQL/Python и не тестом СУБД. Разделение разниц по погашенным и открытым позициям, счёт признания и направление корректирующей проводки задают отдельно по утверждённой политике с учётом исключений IAS 21. EDWH может только сверять результат ERP либо рассчитывать предложение для последующего утверждения; эти режимы не должны смешиваться.

Последовательность и альтернативы#

Ниже псевдокод, не исполняемый SQL или Python:

Закрепить дату отчёта, cutoff знаний, снимки и версию политики.
Отобрать открытые позиции с подтверждённой денежной классификацией.
Проверить валютный остаток и функциональную базу на одном зерне.
Установить, какие переоценки уже включены в базу.
Для каждой позиции разрешить ровно одну допустимую версию курса.
Рассчитать целевую стоимость и разницу с базой на зерне округления.
Сохранить входы, результат, происхождение и статус контролей.
Сверить результаты; передать корректировки только в разрешённом режиме.

Расчёт по открытым позициям позволяет объяснять погашения и округление, но требует согласованного состояния каждой позиции. Агрегирование по счёту и валюте уменьшает объём, однако может потерять детализацию базы и дать другую сумму округления. Выбор зависит от учётного процесса, а не от удобства SQL. Общий контракт курса и правила точности здесь используются без повторения их алгоритмов.

Ни одна СУБД не определяет денежную классификацию или допустимый курс. Десятичная арифметика, транзакционный снимок и ограничения уникальности помогают реализовать контракт, но сами по себе не доказывают финансовую корректность. Исполняемого решения для PostgreSQL или SQLite в этой статье нет.

Инварианты и граничные случаи#

На ключ позиции и запуск должна приходиться одна строка результата и одна разрешённая версия курса. Контролируют покрытие всех ожидаемых позиций, отсутствие размножения при соединениях и равенство functional_basis + adjustment = target в согласованной точности. Итоги сверяют отдельно по юридическому лицу, книге, счёту и валютной паре. Нулевой общий итог разниц не доказывает полноту.

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

Отсутствие курса, неоднозначная классификация, неизвестная база и конфликт версий блокируют окончательный результат. Отдельно проверяют выходной день на отчётную дату, исправление курса после cutoff, изменение состава открытых позиций и включённую в базу текущую переоценку. При отсутствии обменяемости обычный путь расчёта останавливают и передают вопрос на оценку по применимым требованиям IAS 21. Это не разрешение самовольно переносить последнюю котировку.

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

Связанные темы и вопросы#

Алгебра состояния разобрана в остатках и оборотах, версии выпуска - в закрытии периода, происхождение результата - в финансовой lineage.

  1. Как установить, какие переоценки уже входят в функциональную базу?
  2. Почему сумма конвертированных оборотов не заменяет пересчёт открытого остатка?
  3. Какие контроли отличают новую корректировку от сверки уже переоценённой книги?

Источники и документация

  1. IFRS Foundation - IAS 21 supporting material ↗
  2. IFRS Foundation - IAS 21 overview and history ↗
  3. European Union - Regulation (EU) 2023/1803, Annex, IAS 21 ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.