Разбор имени файла договора¶
Модуль contract_filename_parser.py извлекает реквизиты договора из имени файла. Это позволяет создавать записи документов в архиве без распознавания содержимого --- только на основании того, как файл назван.
Назначение¶
При контрактном импорте (загрузке папки с файлами договоров) программа пытается извлечь из имени каждого файла:
- номер договора;
- дату договора;
- наименование контрагента;
- признак дополнительного соглашения;
- базовый номер договора (если номер содержит суффикс).
Если хотя бы номер договора удалось извлечь, файл импортируется с заполненными реквизитами. Если нет --- файл пропускается или импортируется без реквизитов.
Поддерживаемые форматы имён файлов¶
Основной формат:
{номер} от {дата}_{контрагент}.pdf
Примеры:
| Имя файла | Номер | Дата | Контрагент |
|---|---|---|---|
08V0801 от 01.07.2008_Л-Волгограднефтегаз.pdf |
08V0801 |
01.07.2008 |
Л-Волгограднефтегаз |
08V1238 доп 2 от 10.10.2008_ООО ЛУКОЙЛ-ИНФОРМ.pdf |
08V1238 |
10.10.2008 |
ООО ЛУКОЙЛ-ИНФОРМ |
06V2005 от 16.10.2006_д.с 4 от 22.07.2008_ПКФ Центральный грузовой порт.pdf |
06V2005 |
16.10.2006 |
ПКФ Центральный грузовой порт |
Алгоритм разбора¶
Удаление расширения¶
Из имени файла убирается расширение .pdf, .tiff или .tif (без учёта регистра).
Определение дополнительного соглашения¶
Файл считается дополнительным соглашением, если имя содержит:
доп Nилидоп. N(где N --- цифра);д.с Nилид.с. N.
Признак is_supplement устанавливается в True.
Извлечение даты¶
Дата ищется по двум шаблонам (в порядке приоритета):
от ДД.ММ.ГГГГ--- дата после слова «от»;ДД.ММ.ГГГГ--- дата в любом месте имени.
Извлечение номера и контрагента¶
Если дата найдена, имя разделяется на две части: всё до даты считается номером договора (с удалением слова «от» и суффиксов дополнительных соглашений), всё после --- контрагентом (с удалением разделителя _).
Если в части контрагента содержится ещё одна дата (характерно для дополнительных соглашений вида д.с 4 от 22.07.2008_Контрагент), берётся текст после последней даты.
Если дата не найдена, всё имя считается номером.
Откат к имени папки¶
Если из имени файла не удалось извлечь номер, программа пытается извлечь реквизиты из имени родительской папки. Это покрывает случай, когда файлы внутри папки названы по порядку (например, 001.pdf, 002.pdf), а номер договора указан в имени самой папки.
Очистка номера¶
Из номера удаляются суффиксы дополнительных соглашений (доп N) и конечные точки и пробелы. Номера длиннее 10 цифр, состоящие только из цифр, отклоняются как мусорные (скорее всего это номер скана, а не номер договора).
Извлечение базового номера¶
Для номеров вида 09V0206001 (две цифры, буква V, четыре цифры основного номера, три цифры суффикса) извлекается базовый номер 09V0206. Это позволяет группировать документы по базовому номеру договора.
Предпросмотр разбора¶
Функция preview_folder_files принимает список файлов и возвращает результаты разбора для каждого из них. Используется в пользовательском интерфейсе при контрактном импорте: пользователь видит, какие реквизиты программа сможет извлечь из имён файлов, и может принять решение о продолжении импорта.
Результат для каждого файла содержит:
| Поле | Описание |
|---|---|
filename |
Исходное имя файла |
path |
Путь к файлу |
parse_ok |
Удалось ли извлечь хотя бы номер |
contract |
Номер договора |
date |
Дата договора |
contractor |
Контрагент |
is_supplement |
Признак дополнительного соглашения |
base_contract |
Базовый номер (если есть суффикс) |