Перейти к содержанию

Разбор имени файла договора

Модуль 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.

Извлечение даты

Дата ищется по двум шаблонам (в порядке приоритета):

  1. от ДД.ММ.ГГГГ --- дата после слова «от»;
  2. ДД.ММ.ГГГГ --- дата в любом месте имени.

Извлечение номера и контрагента

Если дата найдена, имя разделяется на две части: всё до даты считается номером договора (с удалением слова «от» и суффиксов дополнительных соглашений), всё после --- контрагентом (с удалением разделителя _).

Если в части контрагента содержится ещё одна дата (характерно для дополнительных соглашений вида д.с 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 Базовый номер (если есть суффикс)