До и после
До: фактура как приходит
Три PDF из прогона (документы синтетические — чужие фактуры на витрину не выкладываем, а поля и форматы — как в жизни).
- Немецкая Rechnung: VIN в строке «Fahrgestellnummer», сумма «18.500,00 EUR» (точка — тысячные!), USt-IdNr. с пробелами, покупатель из Литвы со своим PVM kodas.
- Польская faktura VAT: NIP UE записан с дефисами «PL 113-245-67-89», сумма «62 400,00 PLN», VIN в строке «Nr nadwozia».
- Английский invoice с дырами: VIN «to be advised», VAT-номера нет вовсе — проверка, что парсер не выдумывает.
После: поля и статус VAT
Каждое поле привязано к строке-источнику в PDF. Чего в документе нет — честное «не распознано», а не выдуманное значение.
| поле | Rechnung (DE) | faktura VAT (PL) | invoice (EN, с дырами) |
|---|---|---|---|
| номер фактуры | RE-2026-4711 | FV/2026/09/0142 | INV-0937 |
| дата → ISO | 2026-09-15 | 2026-09-22 | 2026-09-18 из «18 September 2026» |
| VIN | WVWZZZ3CZLE012345 формат верен | WAUZZZ8K9BA123456 формат верен | не распознано — в PDF его нет |
| сумма | 18 500,00 EUR | 62 400,00 PLN | 9 750,00 EUR |
| контрагент | Autohaus Westfalen GmbH | AUTO-HANDEL KOWALSKI Sp. z o.o. | Atlantic Motors Ltd |
| VAT-номер | DE811223344 формат DE верен | PL1132456789 формат PL верен | не распознано — в PDF его нет |
| VIES | invalid номер вымышлен — реестр честно его не знает | invalid то же: вымышлен | skipped — проверять нечего |
Отчёт разбора — каждое поле со строкой-источником
Фрагмент отчёта по немецкой Rechnung: откуда взято каждое значение.
| Номер | RE-2026-4711 — строка 4: RECHNUNG Nr. RE-2026-4711 |
|---|---|
| Дата | 2026-09-15 — строка 5: Rechnungsdatum: 15.09.2026 |
| VIN | WVWZZZ3CZLE012345 — строка 13: Fahrgestellnummer (VIN): …. Формат верен (17 симв., без I/O/Q); чек-цифра не совпала — и это норма: она обязательна только в США/Канаде |
| Сумма | 18500.00 EUR — строка 22: Endbetrag: 18.500,00 EUR — точка распознана как тысячный разделитель, не как десятичная |
| Контрагент | Autohaus Westfalen GmbH — строка 1 («шапка» документа) |
| VAT продавца | DE811223344 — строка 3: USt-IdNr.: DE 811 223 344; VAT покупателя LT100004466113 не перепутан с продавцом — лежит отдельным полем |
VIES — живой, со всеми его капризами
Валидный номер: ответ реестра как есть
Живой запрос к VIES при сборке этой страницы — известный валидный номер Google Ireland:
GOOGLE IRELAND LIMITED
3RD FLOOR, GORDON HOUSE,
BARROW STREET, DUBLIN 4
проверено 29.09.2026 11:02 UTC
Невалидный — тоже честно
Вымышленные номера из наших фикстур реестр не знает — и статус так и показан: invalid. Формат при этом верный, то есть до VIES запрос дошёл. Кривой формат (8 цифр у DE, код «RU») отсекается до сети — статус bad_format, лишних запросов нет.
VIES висит? Статус «недоступен», а не враньё
VIES славится таймаутами и ответами MS_UNAVAILABLE, когда реестр отдельной страны лёг. Скрипт делает до 3 повторов с паузой, а если сервис так и не ответил — пишет vies_unavailable: проверить позже. «Недоступен» никогда не превращается в «номер плохой».
Как это встраивается
Папка PDF → таблица
Скрипт смотрит за папкой (почтовые вложения, выгрузка из сканера): новый PDF — строка в CSV для Excel и JSON, плюс отчёт «что распознано, что нет» по каждому файлу. Работает на вашей машине или сервере — фактуры никуда не уходят.
В 1С / CRM / учёт
JSON с полями и статусом VIES кладётся в обмен: 1С (загрузка поступлений), Битрикс24/CRM (карточка сделки по VIN), склад. Контрагент с невалидным VAT подсвечивается до оплаты, а не после.
Сканы — отдельно и честно
Разбирается текстовый слой PDF. Скан без слоя не «разбирается наугад»: файл помечается «похоже на скан — нужен OCR», и это отдельная понятная работа, а не сюрприз в данных.
Деталь, которая решает всё
Ничего не выдумывать
Извлекатели полей любят показывать красивую таблицу без пустых клеток. Откуда значения — вопрос: чего в документе не было, то «дораспозналось». Через месяц в учёте — VIN, которых не существует.
Здесь у каждого поля — строка-источник в PDF. Чего нет — честное «не распознано» в отчёте и пустая клетка в таблице. Недоступный VIES — статус «проверить позже», а не случайный ответ. На вымышленных номерах демо показывает invalid — потому что так отвечает реестр.
Пришлите 2–3 своих фактуры
Пришлите фактуры, как они приходят вам (можно замазать лишнее) — вернём таблицу полей, отчёт разбора по каждой строке и статусы контрагентов в VIES. Под ваши форматы дописывается словарь меток: обычно это день работы.
Разовая пачка PDF → таблица — от 5 000 ₽. Конвейер «папка → таблица/1С» с проверкой VIES — 1–2 дня, от 15 000 ₽.
Прислать фактуры