Как перенести скан счёта в Excel с помощью ИИ и проверить все позиции
Извлеките позиции счёта без потери ведущих нулей и повторного учёта промежуточных сумм. Пример на двух страницах, промпт и проверка готового Excel.
Чтобы получить из скана счёта пригодный для работы Excel, извлеките позиции вместе с номерами исходных страниц, отделите итоговые суммы от товарных строк и сверьте числа в скачанном файле. Даже нормально открывающаяся книга может содержать пропущенную строку, изменённый SKU или промежуточный итог, принятый за покупку.
В примере используется созданный автором вымышленный счёт: две страницы, шесть позиций, никаких данных клиентов. Страницы PDF — растровые изображения без текстового слоя; извлечение текста без OCR ничего не возвращает. Эталонные значения позволяют проверить результат, а не довериться правдоподобной таблице. Это учебное задание, не оценка точности на любых счетах. Образец не следует считать российским счётом-фактурой с установленными реквизитами.
Сначала скачайте исходник
Возьмите скан счёта в PDF, а эталонные значения не прикладывайте к запросу на извлечение. Если дать оба файла, вы проверите копирование ответа, а не чтение документа.
На второй странице повторяется заголовок таблицы. Первая заканчивается переносимой суммой USD 185.40, которая снова указана на второй перед общим подытогом. Ни одна из этих записей не является седьмой позицией. Все SKU начинаются с нулей. Это обычные сложности: даже аккуратный документ без рукописного текста и сильных дефектов скана может превратиться в неверную таблицу.
| Что восстановить | Верное значение в образце |
|---|---|
| Количество товарных строк | 6 |
| Сумма позиций страницы 1 | USD 185.40 |
| Сумма позиций страницы 2 | USD 104.59 |
| Подытог счёта | USD 289.99 |
| Налог, округлённый один раз от подытога | USD 29.00 |
| Итог счёта | USD 318.99 |
Правило налога напечатано в образце. Это не налоговая рекомендация для другой юрисдикции и не указание пересчитывать счёт поставщика по выбранному вами правилу. В реальных документах бывают построчное округление, скидки, доставка, удержания и несколько ставок. Сохраняйте исходные значения и выясняйте причины расхождений. Валюта примера — USD, без пересчёта в рубли.
Выберите способ извлечения под документ
Попробуйте выделить предложение в PDF и скопировать его. Связный текст обычно указывает на пригодный текстовый слой. Если выделяется только картинка, нужен OCR либо модель, способная читать изображение страницы. Но и доступный для поиска PDF может иметь плохой OCR-слой: сравните один SKU и одну сумму с видимым оригиналом.
Для одного счёта ассистент с поддержкой файлов может объединить извлечение, запись исключений и создание книги. Для тысяч документов со стабильными формами и правилами поддерживаемый конвейер обработки обычно удобнее повторять и контролировать. Рейтинг моделей помогает выбрать кандидатов для проверки, но не доказывает правильность конкретного счёта. Материал о выборе OCR-модели (на английском) посвящён выбору, а здесь главное — готовый Excel.
Убедитесь, что интерфейс действительно принимает PDF и создаёт скачиваемые XLSX. API с поддержкой изображений не обязательно принимает PDF. Таблица в ответе чата тоже не равна вложению Excel. Если доступны только изображения, экспортируйте каждую страницу отдельно и сохраните порядок. Успешная загрузка первой не оправдывает пропуск второй.
Заранее задайте структуру книги
Одна напечатанная позиция должна соответствовать одной строке. Минимальные столбцы: invoice_id, sku, description, quantity, unit_price, line_amount, currency, source_file, source_page, review_status. Если поставщик не нумерует позиции, добавьте стабильный идентификатор строки. Не удаляйте дубликаты только по SKU: один товар может законно встречаться дважды.
Идентификаторы храните как текст, количества и суммы — как числа, валюту — отдельно. Число 101, отображаемое форматом как 000101, не равно строковому идентификатору 000101. Внешне правильная ячейка может потерять нули при последующем экспорте CSV.
На листе InvoiceSummary храните подытог, налог, итог и их расположение в источнике. На Exceptions — неразборчивые поля, арифметические расхождения и подозрительные повторы. Пустой лист исключений имеет смысл только после реальных проверок. Просите перечислить проверки, а не просто написать «проверено».
Отправьте проверяемое задание
Откройте отдельный диалог в Ofox Chat и приложите только синтетический PDF. Перед отправкой убедитесь, что представлены обе страницы. Ниже — повторно используемая спецификация; актуальную поддержку файлов и полученное вложение всё равно нужно проверить. Английский промпт сохранён без перевода для воспроизведения исходного теста.
Read the attached synthetic invoice PDF. Extract all printed item rows from
all pages into a downloadable XLSX. Do not browse or use external sources.
Create three sheets:
1. LineItems: invoice_id, sku, description, quantity, unit_price,
line_amount, currency, source_file, source_page, review_status.
2. InvoiceSummary: the printed subtotal, tax, total, tax/rounding wording,
and the source page for each value.
3. Exceptions: unreadable fields, inconsistent amounts and any rows that
require a person to check the image.
Preserve identifiers, including leading zeros, as text. Do not treat repeated
headers, carried-forward amounts, subtotals, tax or totals as item rows.
Do not deduplicate repeated SKUs unless the printed rows are proven duplicates.
For an unreadable value, leave the numeric cell empty and explain why.
Do not infer a missing number just to make the invoice balance.
Compare quantity × unit price with each printed line amount. Reconcile the
item sum with the printed subtotal and the subtotal plus printed tax with
the printed total. Preserve both printed and calculated values when they
conflict. State the page count and item count. Return the actual XLSX file,
not only a Markdown table. Keep the original PDF unchanged.
Запрос намеренно разделяет чтение и вычисления. Если ассистент меняет напечатанное число, чтобы сошёлся итог, результат перестаёт быть извлечением. Расхождение должно оставаться видимым, даже если модель считает, что поняла задуманную сумму.
Для счетов с конфиденциальными данными используйте копии только с данными, которые вам разрешено обрабатывать. Уберите ненужные банковские реквизиты и персональные данные. Синтетический пример не подтверждает, что ваша организация разрешает отправлять тому же сервису документы поставщиков.
Проверяйте скачанные ячейки, а не только предпросмотр
Сначала откройте LineItems. Должно быть шесть строк: три со ссылкой на страницу 1 и три — на страницу 2. Найдите 000101 и 000108, проверьте сохранённые значения или строку формул, а не только формат отображения. Сверьте каждое описание и число с исходной страницей.
Независимо пересчитайте суммы. В примере:
Page 1: 2 × 19.95 + 3 × 8.50 + 1 × 120.00 = 185.40
Page 2: 4 × 6.25 + 2 × 14.80 + 1 × 49.99 = 104.59
Subtotal: 185.40 + 104.59 = 289.99
Tax: 289.99 × 10%, rounded to cents = 29.00
Total: 289.99 + 29.00 = 318.99
Совпадения общего итога недостаточно. Две ошибки способны компенсировать друг друга, а неверный SKU не меняет арифметику. Отдельно проверяйте соответствие каждой строки исходной позиции, охват страниц и арифметические связи. В большом наборе сначала сверяйте каждый счёт и валюту, затем объединяйте данные.
Если в книге есть формулы, пересчитайте её в Excel или другом совместимом приложении. Скрипт Python, читающий кэш формул, может получить отсутствующие или устаревшие значения. Документация openpyxl (на английском) различает запись формулы и её вычисление. Для автоматической проверки рассчитайте ожидаемые суммы отдельно с помощью десятичной арифметики: строка формулы ещё не вычисленный ответ.
Что получилось в реальном запуске
7 ноября 2026 года мы загрузили в Ofox Chat в режиме Balanced только двухстраничный синтетический PDF, без эталонного JSON. Получили книгу Excel для самостоятельной проверки с листами LineItems, InvoiceSummary и Exceptions. Документ, запрос и интерфейс были английскими. Эта локализация описывает тот же запуск, а не отдельный тест русскоязычных счетов.

Мы также проверили скачанный файл. Все шесть SKU сохранены строками, описания и числовые поля совпали с источником, в столбце страниц было по три позиции на страницу. Независимый десятичный расчёт воспроизвёл USD 289.99 и USD 318.99. Переносимая сумма осталась в сводном листе и не учитывалась как покупка.
В Exceptions есть информационная строка «No exceptions»: лист не буквально пуст. Не считайте её ошибочной товарной позицией. Напечатанные и вычисленные значения сохранены раздельно. Запуск подтверждает работу процедуры на этом чистом английском образце, но не устанавливает точность OCR, качество распознавания рукописи, повреждённых сканов, других языков или набора поставщиков.
Исправляйте только ошибочную часть
| Симптом | Где искать причину | Следующий шаг |
|---|---|---|
| Семь или восемь позиций | Переносимая сумма или подытог стали товаром | Сравнить лишнюю строку с источником и убрать только подтверждённую итоговую запись |
| Итог верен, SKU неверен | Распознавание или тип ячейки | Исправить по изображению и сохранить текстовый тип |
| Только три позиции | Нет второй страницы либо обработка частичная | Приложить страницу 2 и добавить проверенные строки с источниками |
| Количество × цена не сходится | OCR, скидка, пересчёт единиц или ошибка оригинала | Сохранить напечатанные числа, записать разницу, затем решить порядок учёта |
| Итог USD 504.39 | Возможен повторный учёт переноса | Проверить лишние USD 185.40, а не вычитать вслепую |
| Нет ссылки на книгу | Не выполнена доставка результата | Попросить XLSX; при отсутствии поддержки использовать документированный импорт CSV с сохранением текстовых столбцов |
Адресный запрос проще проверить, чем «попробуй ещё». Ниже гипотетическое исправление, а не ошибка, наблюдавшаяся в описанном запуске:
Reopen the original invoice page 2. The carry-forward amount 185.40 is not
an item row. Remove that row from LineItems only if its source location
confirms it is the carry-forward. Preserve the six printed item rows,
SKUs and source pages. Recompute the reconciliation and export a new
workbook named invoice-reviewed-v2.xlsx. Describe exactly what changed.
Храните обе версии. Если текст неразборчив, новый промпт может не помочь: нужен более чёткий скан или ручная проверка источника. Оценка уверенности, созданная моделью, её не заменяет.
Превратите одну проверку в повторяемый процесс
До обработки папки проверьте обработку кредит-нот (credit notes), разные валюты, одинаковые номера у разных поставщиков, скидки и таблицы на нескольких страницах. Определите, допустимы ли отрицательные значения и как выявляются дубли счетов. Шесть английских строк не показывают качество на этих случаях, японских или русских сканах.
После проверки извлечения используйте анализ Excel для сводок и графиков либо объединение файлов Excel для сборки подтверждённых записей с происхождением. В API-конвейере после OCR пригодится проверка извлечения текста в JSON: корректный JSON всё ещё требует сверки счёта.
Полезный результат — книга, которую другой человек может сопоставить с оригиналом. Начните с образца в Ofox Chat и примените те же проверки перед использованием в реальной работе.


