Накладная на трех страницах: восстановление перенесенной строки
Продолжение позиции соединяется с исходной строкой, повторные заголовки исчезают, итог пересчитывается по количеству и цене.
Задача и принятое решение
Длинное описание восьмой позиции переносится на следующую страницу. Если считать каждую строку товаром, появится лишняя позиция; если пропустить продолжение, потеряется характеристика.
Я сохранила номера страниц и тип строки до сборки таблицы. Продолжение присоединяется только к предыдущей позиции; повторный заголовок не меняет состояние. Экспорт останавливается при разрыве страниц и несовпадении контрольного итога.
На входе текстовый слой накладной с размеченными типами строк; качество OCR не заявляется.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Позиция | Описание | Количество | Цена | Сумма |
|---|---|---|---|---|
| 1 | Коробка архивная малая | 10 | 180 | 1800 |
| 2 | Папка с клапанами | 20 | 90 | 1800 |
| 3 | Бумага А4, пачка | 5 | 420 | 2100 |
| 4 | Лента бумажная | 8 | 125 | 1000 |
| 5 | Конверт картонный | 30 | 35 | 1050 |
| 6 | Пакет с ручкой | 20 | 65 | 1300 |
| 7 | Вкладыш защитный | 10 | 70 | 700 |
| 8 | Коробка транспортная усиленная с двойным дном; внутренний размер 300×200×180 мм | 10 | 250 | 2500 |
| 9 | Разделитель на 6 ячеек | 10 | 160 | 1600 |
| 10 | Наклейка маркировочная | 100 | 16 | 1600 |
Все страницы присутствуют.
Контрольная сумма сошлась.
Продолжения имеют исходную позицию.
Исходный набор
Авторский контрольный набор; не клиентские документы и не результаты внешней модели.
Изменить входные строки
Посмотреть исходные строки
| Страница | Тип | Позиция | Описание | Количество | Цена |
|---|---|---|---|---|---|
| 1 | заголовок | Наименование | 0 | 0 | |
| 1 | позиция | 1 | Коробка архивная малая | 10 | 180 |
| 1 | позиция | 2 | Папка с клапанами | 20 | 90 |
| 1 | позиция | 3 | Бумага А4, пачка | 5 | 420 |
| 1 | позиция | 4 | Лента бумажная | 8 | 125 |
| 1 | позиция | 5 | Конверт картонный | 30 | 35 |
| 1 | позиция | 6 | Пакет с ручкой | 20 | 65 |
| 1 | позиция | 7 | Вкладыш защитный | 10 | 70 |
| 1 | позиция | 8 | Коробка транспортная усиленная | 10 | 250 |
| 2 | заголовок | Наименование | 0 | 0 | |
| 2 | продолжение | с двойным дном; внутренний размер 300×200×180 мм | 0 | 0 | |
| 2 | позиция | 9 | Разделитель на 6 ячеек | 10 | 160 |
| 3 | заголовок | Наименование | 0 | 0 | |
| 3 | позиция | 10 | Наклейка маркировочная | 100 | 16 |
| 3 | итог | Итого по документу | 0 | 15450 |
Что получилось
Собраны 10 товарных позиций на 15450 ₽. Размер усиленной коробки сохранен в позиции 8; три повторных заголовка и строка итога не стали товарами. Разрыв страниц и изменение цены блокируют экспорт.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Получены 10 позиций, перенесенный размер сохранен | Пройдена |
| Пропуск второй страницы останавливает экспорт | Пройдена |
| Изменение цены не скрывается совпадающим заголовком | Пройдена |
Разметка типа строки задана во входе. Неизвестная структура документа потребует отдельного адаптера.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.