Как работает сверка остатков и чего она не видит

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

Идея

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

Две проверки, выбираются сами

По текущему остатку, строка за строкой

Когда остаток напечатан хотя бы у 60 % строк, каждая строка обязана удовлетворять прошлый остаток + сумма = остаток этой строки. Строки без напечатанного остатка переносят текущую сумму дальше, поэтому пропуск не сбивает идущие следом. Каждая строка проверяется отдельно, а расхождение пересинхронизируется на напечатанный остаток — одна плохая строка не превращается в страницу ложных тревог.

От входящего к исходящему

Если колонки остатка нет — выписки в стиле Chase разбиты на разделы и её не печатают — проверка такая: входящий остаток + Σ(все суммы) = исходящий остаток. Слабее, потому что это одно уравнение вместо многих, но она по-прежнему ловит потерянную, задвоенную или неверно прочитанную строку: любая из них сдвигает итог.

Источник: src/parse/reconcile.ts.

Знаки вычисляются, а не угадываются

Многие выписки печатают суммы без знака, оставляя направление заголовку колонки или названию раздела. Гадание — это способ, которым конвертеры молча превращают приход в расход. Вместо этого: если строка не проходит проверку, но прошла бы с обратным знаком, знак переворачивается, потому что колонка остатка доказывает направление, — и о каждом перевороте сообщается в результате. Исправление, о котором вам не сказали, неотличимо от ошибки.

Чего проверка поймать не может

Это та часть, которую другие страницы опускают. Проверка проверяет итоги, поэтому её переживает любая ошибка, сохраняющая итог:

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

Когда не сходится

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

Сканы отклоняются

PDF, где на странице меньше 100 извлекаемых символов, не имеет текстового слоя — это фотография выписки. OCR здесь пока нет, поэтому такие файлы отклоняются с понятной ошибкой, а не возвращаются полупустой таблицей, выглядящей правдоподобно. Свой файл вы проверите за десять секунд: откройте PDF и попробуйте выделить строку текста. Если ничего не подсвечивается, честно прочитать его не сможет ни один текстовый конвертер.

Проверьте сами

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