Текстовые накладные: проверка сумм до сравнения парсеров
Два парсера читают полные документы с точкой и запятой в цене; ошибочная дробь обнаруживается контрольным итогом.
Задача и принятое решение
Быстрый разбор бесполезен, если 12,50 превращается в 12. Исходная работа была про PDF, но без настоящего PDF-движка я ограничил результат текстовым слоем и сохранил все документы.
Baseline использует parseFloat напрямую. Revised нормализует десятичную запятую и сверяет сумму строк с явно заданным итогом. Ошибка не маскируется округлением или заявлением о скорости.
PDF и OCR не вызываются. Замер относится к разбору приложенных текстовых накладных.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Документ | Сумма | Итог | Разница | Приемка |
|---|---|---|---|---|
| N1 | 85 | 85 | 0 | Принято |
| N2 | 85 | 85 | 0 | Принято |
| N3 | 50 | 50 | 0 | Принято |
| N4 | 30 | 31 | -1 | Расхождение |
Исходный набор
Авторский набор. В timings.json записан фактически выполненный локальный замер кода; тариф модели и сеть в него не входят.
Изменить входные строки
Посмотреть исходные строки
| ID | Текст |
|---|---|
| N1 | Накладная N1 A;2;12.50 B;3;20.00 ИТОГО;85.00 |
| N2 | Накладная N2 A;2;12,50 B;3;20,00 ИТОГО;85,00 |
| N3 | Накладная N3 C;4;7,25 D;2;10,50 ИТОГО;50,00 |
| N4 | Накладная N4 E;3;10.00 ИТОГО;31.00 |
Что получилось
Оба парсера выполнены на четырех полных документах. Прямой parseFloat прошел один, нормализация запятой — три; четвертый остался отклонен из-за ошибочного итога в самом документе. Время сравнивается рядом с этим различием правильности.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Исправленный парсер принимает три документа, N4 оставляет расхождение 1 | Пройдена |
| Baseline теряет дробь и принимает только N1 | Пройдена |
| Исправление источника N4 на итог 30 закрывает конкретное расхождение | Пройдена |
Формат строк явно задан: код; количество; цена. Произвольные таблицы, сканы и PDF требуют другого адаптера.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css · benchmark.cjs · timings.json
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.