Docspell помогает собрать счета, договоры, чеки, письма и сканы в единый архив: загруженные файлы проходят распознавание текста, преобразуются в удобную для просмотра PDF-копию, получают найденные даты и корреспондентов, а затем ищутся по содержимому, тегам, папкам и пользовательским полям. В рабочем окне можно проверить предложенные метаданные, объединить связанные вложения, массово изменить карточки, настроить импорт из почты и открыть ограниченный доступ к выбранной подборке документов.
Основная работа строится вокруг списка Items и детальной карточки. Слева находятся фильтры Inbox, Tags, Tag Categories, Folder, Correspondent, Concerning, Custom Fields, Date, Due Date, Source и Direction; в центре выводятся карточки с миниатюрой, именем, датой, участниками, тегами и числовыми полями. Щелчок по карточке открывает просмотр вложения рядом с формой метаданных, поэтому сведения можно сверять с оригиналом без постоянного переключения между окнами.
После загрузки документ сначала попадает в очередь обработки, а готовая карточка отмечается как новая. Практичный порядок действий такой: открыть Inbox, проверить распознанный текст и предложения, исправить имя, дату, адресата или теги, заполнить срок и нужные поля, затем подтвердить карточку. При таком подходе неподтвержденные материалы не смешиваются с уже разобранным архивом, а автоматические догадки остаются подсказками, а не окончательными значениями.
Скачать Docspell
- Редактирование PDF
- Русский интерфейс
- Просто новичкам
- Нет русского интерфейса
- Нужна серверная настройка
- OCR требует внешних утилит
Как устроено рабочее пространство Docspell
Стартовая страница может быть не просто приветственным экраном, а рабочей сводкой. На ней размещаются блоки со статистикой, новыми документами, ближайшими сроками, результатами сохраненного запроса и формой загрузки. Пользователь задает число колонок и промежуток между блоками, меняет их порядок перетаскиванием, отключает декоративные рамки и создает несколько вариантов панели. Одна панель назначается основной; остальные доступны из бокового меню. Полезно разделить их по задачам: личная панель для входящих счетов, общая — для документов коллектива, отдельная — для просроченных обязательств.

Левая навигация сочетает постоянные разделы и пользовательские элементы. Вверху находятся переходы к панели, списку документов и загрузке. Ниже показываются личные и общие закладки, затем настройки источников, публикаций и периодических запросов, а в блоке управления — организации, люди, оборудование, теги, папки и пользовательские поля. Благодаря этому справочники не спрятаны в отдельной административной консоли: их можно поправить сразу после того, как при разборе очередного счета обнаружено новое юридическое лицо или требуется новая категория.
В списке документов доступны плиточное и табличное представления. Плитки удобны при визуальной проверке сканов: миниатюра помогает отличить чек от договора до открытия. Таблица лучше подходит для длинных подборок, где важнее дата, корреспондент, срок и значения полей. Переключение вида не меняет активный запрос и фильтры, поэтому можно сначала сузить выдачу, а затем выбрать подходящую плотность представления.
Интерфейс рассчитан на большие экраны и мобильный браузер, однако сложная карточка с формой метаданных и встроенным просмотрщиком наиболее удобна на широком мониторе. На телефоне разумнее загружать фото и быстро просматривать найденное, а массовую классификацию выполнять позже. Темная и светлая темы настраиваются в параметрах пользователя; это влияет только на представление и не меняет общий набор данных коллектива.
Загрузка документов и понятие источника
Ручная загрузка принимает несколько файлов за один прием. Перед отправкой можно выбрать, должны ли они стать вложениями одной карточки или отдельными карточками. Первый вариант подходит для письма с приложениями, многочастного договора и комплекта счет плюс акт; второй — для пачки независимых чеков. После отправки файлы сохраняются, а задания передаются обработчику joex. Пока распознавание и конвертация не завершились, состояние видно в Processing Queue.
Источник Source — это не просто подпись о происхождении. Для него задаются имя, описание, состояние, приоритет обработки, папка и метаданные, которые должны автоматически добавляться ко всем поступившим материалам. Например, источник для сетевого сканера можно направить в папку Входящие со сканера, назначить язык распознавания и тег Бумажный оригинал. Источник для бухгалтерской почты можно пометить тегом Счет и более высоким приоритетом, чтобы очередь обрабатывала его раньше фонового импорта старого архива.

Для каждого источника создаются длинные идентификаторы публичной страницы и программного приема файлов. Идентификатор можно отозвать, отключив или удалив источник; имя пользователя и пароль в адресе не раскрываются. Публичная страница полезна, когда партнер должен передать документы прямо в заданную папку, а программный адрес применяется скриптом, мобильным клиентом или сканером с возможностью HTTP-загрузки. Такой доступ следует считать секретом: любой, кто получил идентификатор, может отправлять файлы, хотя читать архив через него нельзя.

При автоматизации важно заранее решить, что считать одним item. Если почтовое сообщение импортируется вместе с телом и тремя приложениями, все файлы логично оставить вложениями одной карточки: поиск по ней вернет единый деловой контекст. Если архив ZIP содержит сто независимых счетов, объединение в одну карточку затруднит сроки, корреспондентов и выгрузку. В спорных случаях лучше сначала разделить материалы на уровне сценария загрузки, потому что последующее объединение поддерживается, а обратное ручное разделение требует больше контроля.
Что происходит с файлом после отправки
Обработка включает определение типа, распаковку поддерживаемых контейнеров, преобразование в PDF для просмотра, извлечение текста, создание миниатюр и поиск метаданных. Исходник сохраняется без изменения. Это принципиально для архива: документ Word, фотографию или письмо можно скачать в первоначальном виде, даже если пользователь обычно работает с созданной PDF-копией. Если конвертация не удалась, оригинал все равно остается доступным, а причина отображается в задании обработки.
В типовом наборе обрабатываются PDF, изображения JPEG, PNG и TIFF, текстовые и офисные документы, HTML, Markdown, электронные письма EML и архивы ZIP. Офисные форматы преобразуются через LibreOffice или OpenOffice с помощью unoconv, HTML — отдельным конвертером, изображения — средствами OCR. Реальная совместимость зависит не только от расширения: поврежденный файл, нестандартный шрифт или защищенный паролем документ может не открыться внешней утилитой. Поэтому при сбое нужно смотреть журнал конкретного этапа, а не делать вывод по одному сообщению processing failed.
Архивы и письма рассматриваются как контейнеры. Содержимое ZIP распаковывается рекурсивно, а у EML извлекаются тело и вложения. Это удобно для миграции папок, но создает риск неожиданно большой задачи, если внутри находится вложенный архив с тысячами файлов. Перед массовой отправкой полезно проверить структуру и ограничить размер загрузки на сервере. Для почты отдельно решается, импортировать ли тело сообщения, только вложения или оба варианта.
PDF с нормальным текстовым слоем обычно не требует полного OCR: текст извлекается напрямую, что быстрее и точнее для цифровых счетов. Сканированные страницы проходят растеризацию и распознавание. При подключенном OCRmyPDF создается поисковый PDF с текстовым слоем, а при соответствующих настройках — архивная PDF/A-копия. Результат следует проверять на нескольких документах каждого типа, потому что качество зависит от языка, разрешения, поворота, контраста и особенностей макета.
OCR, языки и качество распознавания
За распознавание отвечает Tesseract, а подготовка PDF может задействовать Ghostscript и Unpaper. Ghostscript превращает страницы в изображения, Unpaper выравнивает и очищает сканы, Tesseract получает текст, а OCRmyPDF может встроить его в PDF. Отсутствие необязательного этапа не всегда останавливает задачу: например, без Unpaper распознавание продолжится, но на перекошенных или загрязненных листах результат обычно хуже. Если же недоступен основной конвертер для конкретного типа, PDF-копия не будет создана.
Язык выбирается для коллектива, источника или отдельной задачи импорта. Он должен соответствовать установленным языковым данным Tesseract. Указание немецкого языка без пакета немецкой модели приведет к ошибке запуска, а распознавание русского документа английской моделью даст похожие символы и непригодный полнотекстовый индекс. Для смешанного архива лучше создать источники по языкам или перед загрузкой явно выбирать язык, чем использовать одну универсальную настройку для всех документов.
Вертикальные и CJK-тексты требуют особых аргументов. В конфигурации можно сопоставить выбранный язык с собственным набором параметров Tesseract или OCRmyPDF, например изменить режим сегментации страницы и рендерер. Это не переключатель в карточке, а серверная настройка. После изменения старые документы автоматически не улучшаются: их нужно отправить на повторную обработку или пересоздать индекс, если текст уже был сохранен неверно.
Для сканера практическим ориентиром служит разрешение около 300 dpi. Меньшее значение ухудшает мелкий шрифт, а чрезмерное разрешение увеличивает память и время без гарантированного прироста точности. Перед массовым импортом стоит проверить пять типов: обычный текст, таблицу, чек на термобумаге, двухсторонний скан и цветной документ с фоном. По результатам можно решить, нужен ли Unpaper, следует ли отключить агрессивную оптимизацию и какие языки установить.
- Поверните страницы до загрузки или добавьте корректирующий этап, если сканер часто пишет листы боком.
- Проверьте, что текст можно выделить в созданной PDF-копии и найти через Contents.
- Сравните распознанную дату и имя организации с оригиналом, а не только внешний вид страницы.
- Не обучайте автотеги на документах с заведомо плохим извлеченным текстом.
- После изменения OCR-параметров повторно обработайте контрольную подборку, а не весь архив сразу.
Разбор новых документов через Inbox
Inbox показывает карточки, которые еще не подтверждены. Это не отдельная папка хранения, а фильтр по состоянию New. После обработки система предлагает метаданные, найденные в тексте и сопоставленные со справочниками. Пользователь видит дату, корреспондента, заинтересованное лицо, теги и другие варианты; при нескольких совпадениях можно выбрать подходящее. Подтверждение скрывает подсказки и переводит карточку в обычное состояние, но не блокирует дальнейшее редактирование.

Удобно разбирать входящие последовательно. Откройте первый item, проверьте имя и дату, затем корреспондента и направление, после чего теги, папку, срок и пользовательские поля. Встроенный просмотрщик остается рядом, поэтому номер счета или сумма читаются с документа. Нажатие Confirm завершает проверку; стрелки карточки позволяют перейти к соседнему материалу, не возвращаясь каждый раз к списку.

Изменения в форме применяются быстро, поэтому при случайном выборе неправильной организации лучше сразу исправить поле, а не закрывать вкладку в надежде отменить все целиком. Состояние New можно вернуть командой Unconfirm, если карточку подтвердили преждевременно. Это полезно для командного процесса: один сотрудник загружает документы, другой отбирает неподтвержденные и отвечает за качество классификации.
Предложения зависят от уже созданных сущностей. Если в справочнике нет поставщика, система не сможет корректно прикрепить его как организацию только по свободному тексту. Создав организацию и указав варианты написания, пользователь улучшает последующее сопоставление. Поэтому первые десятки документов требуют больше ручной работы, а качество растет по мере наполнения адресной книги и правильной разметки.
Метаданные: теги, участники, папки и направление
Теги подходят для признаков, которые могут встречаться одновременно: Счет, Оплачен, Гарантия, Автомобиль, Налоги. Категории тегов задают смысловую группу. Категория doctype может содержать Счет, Договор, Чек, а category state — К оплате, Ожидает ответа, Завершено. Фильтр категории позволяет найти документы с любым тегом этой группы или, наоборот, карточки без классификации по группе.
Теги не стоит использовать вместо всех остальных полей. Корреспондент лучше хранится как организация или человек, сумма — как Money, дата оплаты — как Date, а доступ — через папку. Тогда статистика панели может суммировать денежные значения, поиск ограничивается диапазоном дат, а переименование организации не требует менять сотни текстовых меток. Теги остаются гибким слоем, который отражает вид документа и рабочее состояние.
Correspondent описывает внешнюю сторону документа: банк, страховую компанию, магазин, клиента или конкретного человека. Concerning указывает, кого или чего касается материал внутри коллектива, например члена семьи, сотрудника, автомобиля или прибора. Equipment удобно применять к технике, счетчикам, автомобилям и иному объекту с собственными документами. Разделение этих ролей позволяет найти все письма от страховой о конкретном автомобиле, а не просто документы с двумя неструктурированными тегами.
Direction принимает входящее или исходящее значение. При импорте почты автоматический режим может сравнивать отправителя с адресами заинтересованных лиц: если письмо отправлено от известного собственного адреса, оно считается исходящим, иначе входящим. Для сканов и файлов без почтовых заголовков направление обычно проверяется вручную или задается метаданными источника.
Папки регулируют видимость между пользователями коллектива. Документ без папки доступен по общим правилам, а папка показывается только участникам. При переносе item в папку, членом которой пользователь не является, документ исчезнет из его выдачи; это ожидаемое следствие контроля доступа, а не потеря файла. Поэтому права на папки следует проверять до массового переноса.
Пользовательские поля для сумм, номеров и сроков
Custom Fields добавляют значения, которых нет в стандартной карточке. Поддерживаются форматы Number, Money, Text, Boolean и Date. Для чека можно создать amount как Money, для договора — contract_id как Text, для гарантии — warranty_until как Date, для признака наличия оригинала — Boolean. Имя поля служит идентификатором и ограничено простым набором символов без пробелов; отдельная метка Label может содержать понятное название и символы Unicode.

Формат определяет проверку и элемент ввода. Money требует две цифры после десятичного разделителя, Number допускает обычное десятичное значение, Boolean отображается флажком, Date ожидает календарную дату, Text принимает произвольную строку. Значения физически хранятся как строки, но интерфейс валидирует их по формату. Если изменить Text на Date, старое значение не преобразуется автоматически: оно может стать невидимым или вызвать сообщение о неверном формате, пока поле не вернут к Text или не исправят данные.
На одной карточке допускается одно значение каждого пользовательского поля. Это удобно для суммы счета, но не подходит для списка нескольких платежей. В таком случае лучше создать отдельные items, хранить итоговую сумму или использовать текстовое поле по согласованному шаблону. При массовом редактировании значение можно назначить нескольким карточкам, однако операция применяется сразу, поэтому перед вводом стоит проверить счетчик выделенных элементов.

Денежные поля участвуют в сводках Count, Sum, Avg, Min и Max. Чтобы статистика оставалась осмысленной, валюты лучше разнести по отдельным полям, например EUR и CHF, как показано в интерфейсе, а не смешивать числа в одном поле без валютного контекста. Поле Сумма с разными валютами математически сложится, но результат не будет иметь делового смысла.
Поиск по именам, содержимому и фильтрам
Строка поиска имеет режимы Names и Contents. Names выполняет поиск подстроки в имени item, именах корреспондентов и заинтересованных сущностей. Contents обращается к полнотекстовому индексу и ищет в извлеченном содержимом вложений, именах файлов, названии карточки и заметках. Если активен полнотекстовый поиск без дополнительных ограничений, выдача сортируется по релевантности, а не обязательно по дате.
Левая форма сочетает включающие и исключающие фильтры. Щелчок по тегу сначала включает его, повторный переводит в режим исключения, третий снимает условие. Несколько включенных тегов требуют, чтобы карточка содержала их все; несколько исключенных удаляют документы с любым нежелательным тегом. Аналогичный трехсоставный выбор применяется к категориям.
Диапазоны Date и Due Date решают разные задачи. Date относится к дате самого документа; если она не задана, при фильтрации может использоваться дата создания item. Due Date показывает только карточки с установленным сроком. Поэтому поиск счета января следует строить по Date, а список обязательств на следующую неделю — по Due Date. Смешивание этих полей приводит к пропущенным или лишним результатам.
Custom Fields поддерживают поиск по выбранному полю и шаблоны со звездочкой. Одна звездочка означает любое непустое значение; шаблон в начале или конце работает как подстрока. Для числовых и денежных полей лучше сохранять единый формат, иначе текстовые шаблоны будут давать неожиданный порядок. Фильтр Source помогает отличить документы сканера, почты, публичной формы и ручной загрузки.
Folder показывает только доступные пользователю папки. Если ожидаемый фильтр отсутствует, сначала нужно проверить членство, а не очищать индекс. Trash выводит удаленные карточки, Direction делит входящие и исходящие, Inbox оставляет неподтвержденные. Комбинация фильтров формирует запрос, который можно сохранить как закладку или применить в блоке панели.
Язык запросов и сохраненные подборки
Для сложных условий предусмотрен собственный язык запросов. Он позволяет обращаться к идентификаторам и именам тегов, папок, корреспондентов, дат, полей и другим свойствам, объединять условия и создавать устойчивые выборки. Идентификатор надежнее имени в долгоживущей публикации: переименование тега не разрушит условие, которое ссылается на его id. Человеку удобнее начать с формы поиска, а затем посмотреть сформированное выражение и сохранить его.
Bookmarks бывают личными и общими для коллектива. Закладка хранит запрос, а не копию результатов, поэтому список меняется при появлении новых подходящих документов. Так можно сделать Неоплаченные счета, Гарантии до конца квартала или Письма банка без подтверждения. Для фиксированного набора следует использовать статическую публикацию по идентификаторам или заранее зафиксировать документы другим способом.
Полнотекстовый индекс может работать через Apache Solr или средства PostgreSQL в зависимости от настройки. Если функция отключена, структурные фильтры остаются доступны, но поиск Contents не дает ожидаемой полноты. После восстановления или миграции базы индекс иногда нужно перестроить административной командой. Перед этим стоит убедиться, что извлеченный текст действительно сохранен: переиндексация не исправит плохое OCR, она лишь заново индексирует имеющиеся данные.
Массовое редактирование без открытия каждой карточки
Select Mode меняет список: у карточек появляется пунктирная рамка, а выбранные элементы затемняются и получают крупную отметку. Выбор не обязан ограничиваться текущей страницей: можно изменить фильтр, добавить еще карточки и продолжить набор. Счетчик наверху показывает итоговое количество, поэтому перед операцией следует сверить его с ожидаемым числом.

В режиме Edit слева открывается форма общих изменений. Можно подтвердить или снять подтверждение, изменить теги, папку, поля, даты, корреспондента, заинтересованное лицо, направление и имя. Изменение применяется к выбранным items сразу, без отдельной финальной кнопки для всей серии. Это ускоряет классификацию пачки, но не оставляет безопасного этапа предварительного просмотра.

Для тегов доступны Add, Remove и Replace. Add добавляет выбранные метки, сохраняя существующие; Remove снимает только указанные; Replace сначала удаляет все текущие теги, затем назначает новый набор. Ошибка режима Replace особенно опасна для разнотипной подборки, потому что она уничтожит индивидуальные метки. Перед заменой лучше сузить выдачу и убедиться, что все карточки должны получить одинаковую классификацию.
Массовое удаление используется только после проверки фильтра и счетчика. Если цель — временно скрыть документы, безопаснее назначить папку или тег. В корзине карточки можно находить через Trash, но операционный процесс не должен рассчитывать на корзину как на систему версий. Для значимых изменений нужен резервный снимок базы и файлового хранилища.
Объединение связанных карточек
Merge переносит вложения и метаданные нескольких items в одну карточку, а остальные карточки после успешной операции удаляются. Сначала выбирают не менее двух элементов, затем открывают экран порядка. Первый элемент становится целевым; порядок важен для свойств, у которых допускается только одно значение.

Теги и вложения объединяются как наборы. Заметки соединяются с разделителями. Для пользовательских полей действует правило формата: Number и Money суммируются, Text объединяется через запятую, Boolean и Date берутся из первого элемента с подходящим значением. Корреспондент, заинтересованное лицо, папка и основные даты также определяются порядком. Поэтому перед Merge нужно поставить первой карточку с правильными одиночными полями, а не просто самую раннюю по списку.
Объединение удобно для письма и приложений, страниц одного сканирования, счета и акта, а также документа, который случайно загрузили частями. Оно не создает новый многостраничный PDF из всех вложений; карточка может содержать несколько файлов, которые переключаются во встроенном просмотрщике. Для физического склеивания страниц потребуется внешний инструмент или подходящий addon.
Если карточки отличаются валютами, суммирование одноименного денежного поля может быть ошибочным. Аналогично текстовые поля с кодами не всегда стоит соединять запятой. Перед операцией лучше убрать конфликтующие значения или использовать разные поля. После Merge следует проверить итоговое число вложений, сумму, папку, дату и корреспондента.
Автоматические теги и предложения метаданных
Auto-Tagging обучается на уже размеченных документах и связи текста с тегами. Он не угадывает рабочее состояние из поведения пользователя. Метка Оплачено или Проверено обычно не выражена в тексте счета, поэтому обучение на ней создаст ложные корреляции. Напротив, категории типов документов — счет, договор, чек, уведомление — часто имеют устойчивые слова и подходят лучше.

В настройке указывается белый или черный список категорий, количество items для обучения и расписание. Белый список безопаснее для начала: модель использует только специально выбранные категории. Нулевое ограничение количества означает обработку всего доступного набора, что на большом архиве увеличивает время. Кнопка Start Now запускает задачу вне расписания и удобна после исправления разметки.
Качество зависит от объема и чистоты примеров. Если один и тот же вид счета помечен то Invoice, то Bill, результат будет нестабилен. Перед обучением полезно объединить дубли тегов, исключить служебные состояния и проверить распознанный текст. На первых десятках документов предложения следует воспринимать как ускорение выбора, а не как замену проверки.
Сопоставление корреспондентов и дат также использует извлеченный текст и справочники. Для организаций полезно хранить варианты названия, адреса и электронные адреса, встречающиеся в документах. Неправильное совпадение исправляется в карточке; последующие документы получают пользу только при последовательной корректировке. Если оставить ошибки подтвержденными, автоматизация закрепит плохие образцы.
Импорт писем через IMAP
В пользовательских настройках сначала создается IMAP-соединение, затем одна или несколько задач Scan Mailbox. Задача выбирает соединение, папки почтового ящика, глубину просмотра в часах, расписание, фильтры, действие после импорта и метаданные. Несколько задач позволяют разделить личную почту, общий ящик счетов и папку сканера.
Имя INBOX обычно обрабатывается без учета регистра, но остальные папки могут быть чувствительны к регистру и использовать другой разделитель. Если путь с косой чертой не работает, следует проверить вариант с точкой и точное имя на сервере. Received Since Hours ограничивает временное окно: задача, запускаемая раз в шесть часов, может смотреть назад на восемь часов, чтобы не пропустить письмо при кратком сбое.

File Filter принимает шаблоны имен. Значение для PDF исключит тело письма, потому что тело представляется как mail.html; чтобы сохранить и тело, шаблоны объединяют оператором OR. Subject Filter отбирает сообщения по теме, например письма сканера с постоянным префиксом. Опция только вложения полезна для автоматических счетов, где HTML-тело содержит лишь уведомление, но она удаляет контекст обычной переписки.
После чтения письмо можно перенести в другую папку или удалить. Удаление действительно удаляет сообщение и не обязано перемещать его в корзину. Если не включено ни перемещение, ни удаление, то при следующем запуске письмо может попасть в окно повторно; защита от дублей помогает не всегда, особенно если меняются вложения или способ формирования сообщения. Безопасный вариант — отдельная папка Для Docspell и перенос в Импортировано.
Фиксированные теги, папка, направление и язык назначаются всем items задачи. Автоматическое направление использует заголовок From и адресную книгу: письмо от адреса, принадлежащего заинтересованному лицу коллектива, трактуется как исходящее. Чтобы это работало, собственные адреса нужно добавить соответствующим людям. Если выбранная папка недоступна пользователю, созданные документы не появятся в его обычной выдаче.
Каталоги наблюдения, CLI и мобильная загрузка
Командный клиент dsc загружает файлы, проверяет наличие по контрольной сумме и может наблюдать каталоги. Режим watch подходит для NAS или сетевой папки сканера: клиент рекурсивно отслеживает новые файлы и отправляет их через источник либо авторизованную сессию. Чтобы не забрать незавершенный файл, сканер лучше сначала писать во временное имя, а после закрытия переименовывать, либо настроить задержку на стороне сценария.
Конфигурация dsc хранит адрес сервера, учетную запись, формат вывода и другие параметры. Табличный и CSV-вывод удобны человеку, JSON и Lisp — скриптам. Сессионный токен сохраняется рядом с конфигурацией и обновляется до истечения срока; если команд долго не было, требуется повторный вход. Файл конфигурации и токен нужно защищать правами ОС, особенно когда там указан административный секрет.
Android-клиент предназначен прежде всего для передачи файлов через системное меню Поделиться. Само сканирование выполняет другое приложение камеры или сканера, после чего результат отправляется в Docspell. Это полезно для единичных чеков и квитанций, но не заменяет пакетный сканер с автоподатчиком. Для мобильной передачи желательно отдельное Source с ограниченными метаданными, чтобы его можно было быстро отозвать.
Анонимный источник, CLI и IMAP решают одну задачу разными путями. Источник подходит внешним отправителям и устройствам, CLI — контролируемым каталогам и сценариям, IMAP — существующему потоку писем. Не стоит включать все каналы без учета дублей: один и тот же счет может прийти по почте, сохраниться сканером и быть отправлен вручную. Проверка контрольной суммы уменьшает риск, но измененная PDF-копия считается другим файлом.
Сроки, уведомления и периодические запросы
Due Date задается в карточке и используется для выборок ближайших обязательств. Срок можно показать на панели, отфильтровать диапазоном и связать с уведомлением. Это не полноценный менеджер задач: у карточки нет сложной цепочки статусов, исполнителей и зависимостей. Рабочий процесс обычно строят тегами категорий state и сохраненными запросами.
Каналы уведомлений могут отправлять сообщения по электронной почте, в Matrix или Gotify при соответствующей настройке. Пользователь создает канал и правило, определяет события или запрос, после чего периодическая задача проверяет условия. Если уведомления не приходят, нужно отдельно проверить расписание, активность канала, соединение с внешней системой, часовой пояс сервера и наличие подходящих документов.
Периодический запрос полезен для повторяемой выборки: счета со сроком в ближайшие дни, гарантии перед окончанием, неподтвержденные документы старше недели. Условие должно быть достаточно узким, иначе канал будет посылать шум. Перед включением расписания запрос лучше открыть вручную и убедиться, что он возвращает именно те карточки, которые требуют действия.
Срок и календарная дата имеют часовой контекст на сервере и в браузере. При контейнерной установке неверный часовой пояс проявляется запуском задач не в ожидаемый момент и смещением границ сегодня. Следует согласовать timezone контейнеров, базы и хоста, затем проверить фактическое время следующего запуска в интерфейсе.
Публикация выбранных документов
Shares создают режим только для чтения по длинному непредсказуемому идентификатору. Публикация связана с запросом и обязательной датой окончания; дополнительно ставится пароль. Динамическая публикация выполняет запрос заново при каждом открытии, поэтому новые подходящие документы появятся автоматически. Статическая содержит явный набор идентификаторов и меняется только при удалении выбранной карточки.

Ссылка без пароля фактически является ключом доступа. Любой получатель видит документы и метаданные, возвращаемые запросом. Пароль следует передавать другим каналом, а срок не растягивать без необходимости. Публикацию можно отключить, не удаляя настройки, и включить снова. Для конфиденциальной папки нужно проверить запрос под учетной записью автора: публикация выполняется с его правами и может включить документы, которых не видят другие участники коллектива.
Полнотекстовые условия в публикациях не поддерживаются, поэтому подборку строят на тегах, папках, корреспондентах, датах или явных id. Это ограничение важно для сценария показать все документы, где встречается фраза: результат придется сначала пометить тегом или выбрать вручную. После создания интерфейс показывает адрес и QR-код, а при настроенной почте предлагает отправить сообщение.
Публичный просмотр не предназначен для совместного редактирования, комментариев или загрузки исправленной версии. Для передачи бухгалтеру можно открыть статический набор налоговых документов, для семейных инструкций — динамическую выборку по тегу Manual. Когда требуется двусторонняя работа, лучше создать пользователя с доступом к отдельной папке, а не расширять возможности публичной ссылки.
Отправка по электронной почте и заметки
При настроенном SMTP item или его вложения можно отправить из карточки. Адреса подсказываются из адресной книги, но допускается ввод произвольного адреса. Перед отправкой важно выбрать нужный вариант файла: исходник может быть редактируемым документом, а конвертированная PDF-копия — удобной для просмотра. Для нескольких вложений следует проверить общий размер, поскольку ограничение обычно задает почтовый сервер.
Заметки хранятся вместе с item и поддерживают Markdown-предпросмотр. Они участвуют в поиске Contents, поэтому подходят для пояснений, номера дела и результата телефонного разговора. Не стоит помещать туда единственный экземпляр структурированной суммы или срока: такие данные лучше искать и агрегировать через поля. При объединении items заметки соединяются, что нужно учитывать при длинных журналах.
Письмо из Docspell не превращает карточку в систему переписки и не отслеживает ответ автоматически. Ответ может вернуться через IMAP как новый item. Чтобы связать цепочку, используют общий тег, папку, корреспондента и при необходимости объединение. Для формальной истории обмена лучше сохранять исходные EML, а не только PDF-тело.
Скачивание, экспорт и сохранность оригиналов
Отдельное вложение можно скачать как оригинал или использовать созданную PDF-копию. Массовая команда Download all появляется только после применения хотя бы одного фильтра. Пользователь выбирает оригинальные или конвертированные файлы, сервер формирует ZIP, а внутри раскладывает документы по году, месяцу и корреспонденту. Из-за серверной подготовки большая подборка не начинается мгновенно; состояние зависит от очереди и свободного места.
Требование выбрать фильтр защищает от случайной выгрузки всего архива, но его легко выполнить слишком широким условием. Перед созданием ZIP следует проверить число items и приблизительный объем. Если карточка содержит несколько вложений, итоговое число файлов больше числа карточек. Конвертированные PDF удобны для единого архива, оригиналы нужны для юридически значимых файлов, подписанных документов и последующего редактирования.
Резервное копирование нельзя заменять экспортом из интерфейса. В базе находятся карточки, пользователи, теги, запросы, задания и связи, а файлы могут храниться в базе или отдельном backend. Полный снимок должен охватывать базу и файловое хранилище в согласованный момент. Перед копированием рекомендуется остановить restserver и joex или использовать транзакционно согласованный способ базы, чтобы не получить метаданные без соответствующего файла.
После восстановления проверяют вход, несколько старых и новых вложений, миниатюры, поиск по содержимому и очередь. Полнотекстовый индекс можно пересоздать, но отсутствующий оригинал из него не восстановится. Периодические проверки восстановления важнее факта наличия ежедневного архива.
Учетные записи, коллективы и безопасность
Учетная запись состоит из имени коллектива и пользователя. Несколько пользователей могут работать с общими данными коллектива, сохраняя личные настройки и закладки. Папки ограничивают видимость, а панели могут быть личными или общими. При создании общего dashboard любой участник коллектива может его изменить или удалить, поэтому для критичных сводок стоит хранить описание конфигурации отдельно.
Регистрация на сервере настраивается как открытая, закрытая или по приглашениям. Открытый режим удобен только в изолированной сети на этапе запуска. После создания нужных пользователей его лучше закрыть либо требовать приглашение. Административные маршруты защищаются отдельным секретом из конфигурации, а не ролью обычного пользователя; этот секрет нельзя передавать в браузерные скрипты или хранить в общедоступном файле.
Встроенная двухфакторная защита использует TOTP. Пользователь сканирует QR-код приложением-аутентификатором и подтверждает шестизначный код. Секрет показывается только во время настройки; потеря устройства блокирует вход, пока администратор не отключит второй фактор через административную команду. Поэтому процедуру восстановления и секрет администратора нужно проверить до обязательного включения TOTP для всех.

Для единого входа поддерживается OpenID Connect. При подключении внешнего провайдера важно сопоставить адрес возврата, базовый путь и заголовки обратного прокси. Ошибка чаще проявляется циклическим переходом на страницу входа или неверным адресом после авторизации. Сначала следует проверить обычный вход напрямую, затем прокси, и только после этого SSO.
Публичные источники и Shares решают противоположные задачи: Source позволяет только отправлять, Share — только читать выбранное. Оба используют длинные идентификаторы и требуют аккуратного обращения. Отзыв источника не закрывает ранее созданные публикации, а выключение Share не запрещает загрузку через Source.
Настройка обработки и зависимостей
Для ручного запуска требуются restserver и joex с общей конфигурацией базы. Restserver обслуживает интерфейс и API, joex выполняет тяжелые задания распознавания, конвертации, импорта и анализа. Если работает только restserver, вход и просмотр старых документов могут быть доступны, но новые загрузки останутся в очереди. Если запущен только joex, пользователю некуда войти и отправить запрос.
В качестве базы поддерживаются PostgreSQL, MariaDB и H2; для постоянного многопользовательского архива обычно выбирают PostgreSQL. Оба компонента должны указывать на одну базу и одинаковые параметры схемы. H2 удобна для короткой пробы, но файл в временном каталоге опасен: очистка каталога или запуск от другого пользователя приводит к исчезновению ожидаемой базы.
Внешние команды следует проверять под тем же пользователем, который запускает joex. Наличие tesseract в интерактивной оболочке не гарантирует, что systemd-сервис видит тот же PATH. Для каждой утилиты полезно выполнить тестовую команду и проверить права на временные каталоги. Таймауты конвертации настраиваются; слишком короткий прерывает большие документы, слишком длинный удерживает рабочий слот на поврежденном файле.
Полнотекстовый поиск может потребовать Solr или соответствующую настройку PostgreSQL. Solr дает отдельный мощный индекс, но добавляет сервис, память, схему core и процедуру резервного восстановления. PostgreSQL упрощает топологию. Выбор следует делать по размеру архива, существующей инфраструктуре и готовности обслуживать дополнительный компонент, а не только по скорости первой демонстрации.
Контейнерный набор обычно включает базу, restserver, joex, индекс и dsc для каталога потребления. Образ joex велик, потому что содержит OCR и конвертеры. Обновление нужно начинать с резервной копии и чтения изменений схемы. Понижение структуры базы не поддерживается как обычная операция, поэтому откат выполняют восстановлением снимка, а не запуском старых контейнеров поверх уже измененной базы.
Производительность и очередь заданий
Распознавание, преобразование офисных файлов и создание PDF/A нагружают процессор, память и диск. Restserver можно оставить отзывчивым, вынеся тяжелую работу в один или несколько joex. Однако увеличение числа исполнителей без учета базы и временного каталога вызывает конкуренцию за ресурсы. Начинать лучше с одного исполнителя и измерять время на типовых документах.
В Processing Queue видны ожидающие, выполняемые и завершившиеся задания, их приоритет и сообщения. Приоритет источника помогает провести срочные счета впереди фоновой миграции, но не отменяет уже выполняемую тяжелую задачу. Зависшее задание можно отменить, после чего устранить причину и запустить повторно. Простое многократное повторение без чтения журнала обычно создает одинаковые ошибки.
Большой офисный документ может долго запускать LibreOffice; отдельный listener unoconv уменьшает накладные расходы на старт. Многостраничный цветной скан требует значительного временного места при растеризации. Если диск заполнен, ошибка может выглядеть как сбой Ghostscript или невозможность записать PDF. Контроль свободного места должен охватывать постоянное хранилище, каталог базы и временную директорию joex.
Миниатюры создаются с заданным DPI. Увеличение делает плитки четче, но раздувает хранилище и время генерации. После изменения параметра старые миниатюры не обязаны обновиться сами; для них применяется отдельная операция регенерации. Для списка достаточно небольших изображений, потому что точная проверка выполняется во встроенном просмотрщике.
Типовые ошибки и способы их устранения
Файл остается в очереди
Сначала проверьте, запущен ли joex и видит ли restserver его через общую базу и очередь. Затем откройте конкретное задание: отсутствие исполнителя отличается от падения конвертера. Если задания вообще не подхватываются, сравните параметры базы, блокировки и сетевую доступность. Если подхватываются и завершаются ошибкой, переходите к команде, указанной в журнале.
OCR возвращает пустой или бессмысленный текст
Проверьте язык, наличие языкового пакета и качество исходного изображения. Убедитесь, что документ не содержит уже существующий, но поврежденный текстовый слой, из-за которого этап OCR пропускается. Для сложного PDF протестируйте прямое извлечение и принудительное распознавание на копии. После исправления выполните повторную обработку и только потом перестраивайте полнотекстовый индекс.
Офисный файл не преобразуется
Запустите unoconv или LibreOffice от имени пользователя сервиса, проверьте шрифты и доступ к временной папке. Защищенные паролем документы и файлы с поврежденной структурой требуют ручного открытия и пересохранения. Если listener используется отдельно, убедитесь, что он действительно работает и joex обращается к правильному порту или сокету. Оригинал при этом остается в карточке, поэтому его можно скачать и исправить.
HTML или письмо теряет оформление
Внешние изображения могут быть недоступны конвертеру, а сложные стили и скрипты не обязаны переноситься в PDF. Для архивной ценности важнее сохранить EML и вложения, чем добиться пиксельного совпадения с почтовым клиентом. Если тело письма не нужно, ограничьте задачу вложениями; если нужно, проверьте кодировку, mail.html и выбранный HTML-конвертер.
Поиск Contents ничего не находит
Откройте карточку и посмотрите извлеченный текст. Если текста нет, причина в обработке, а не индексе. Если текст есть, проверьте включенный backend полнотекстового поиска, состояние Solr или PostgreSQL FTS и наличие item в индексе. После миграции допустимо выполнить полную переиндексацию, но перед ней сделайте резервную копию и оцените нагрузку.
Документ исчез после переноса
Снимите часть фильтров, проверьте Trash и затем членство в папке. Item, перенесенный в недоступную папку, пропадает из обычного списка пользователя. Администратор или участник с правами может вернуть его либо добавить пользователя в папку. Источник и дата создания помогают найти документ под другой учетной записью.
Импорт почты повторяет сообщения
Согласуйте Received Since Hours с расписанием, включите перемещение успешно обработанных писем и проверьте точное имя целевой папки. Если фильтр темы исключает сообщение, настройка post-processing определяет, будет ли оно также перенесено. Повторы из-за измененных вложений не всегда распознаются как дубль по контрольной сумме, поэтому состояние на IMAP-сервере остается главным маркером.
Публикация показывает лишние файлы
Откройте исходный запрос под автором Share и проверьте динамические условия. Новый документ мог получить тот же тег и автоматически попасть в выдачу. Для фиксированного набора пересоздайте публикацию из ручного выбора. Установите пароль, более близкую дату окончания и после проверки отключите старую ссылку.
После обновления сервис не стартует
Не пытайтесь бесконечно перезапускать оба компонента. Сначала сохраните журналы, проверьте миграции базы и изменения конфигурации, затем убедитесь, что restserver и joex используют согласованные параметры. Если база уже мигрирована, запуск прежнего выпуска поверх нее не является надежным откатом. Восстановите совместимый резервный снимок в отдельной среде и проверьте запуск там.
Практические сценарии работы
Домашние счета и гарантии
Создайте категории doctype и state, поля Amount и Warranty Until, а также сущности для членов семьи и техники. Счета поступают через почту или сканер, получают корреспондента и сумму, после оплаты тег меняется на Оплачен. Чеки на технику связываются с Equipment и сроком гарантии. Панель показывает новые документы, суммы по валютам и гарантии, заканчивающиеся в ближайший месяц.
Документы небольшого бизнеса
Разделите папки по клиентам или уровню доступа, а организации используйте для контрагентов. Источнику входящих счетов назначьте высокую очередь и тег Invoice. В Inbox сотрудник проверяет номер, сумму, дату и due date, затем подтверждает. Сохраненный запрос собирает неоплаченные счета, периодическое уведомление сообщает о сроках, а статический Share передает бухгалтеру только выбранный набор.
Архив договоров
Для договора полезны поля contract_id, signed_on и valid_until, теги по типу и состоянию, а также корреспондент. Основной PDF, приложения и письмо можно держать вложениями одного item. При поступлении дополнительного файла создайте отдельную карточку, проверьте метаданные и объедините, поставив первой карточку с правильными датами. Поиск выполняется по номеру, стороне, тексту и сроку.
Сетевой сканер и NAS
Сканер пишет PDF в каталог на NAS, dsc watch отслеживает завершенные файлы и отправляет их через отдельный Source. Источник задает папку Inbox Scanner, язык и тег Paper. После успешной передачи файл перемещается в архивный каталог скриптом или остается на NAS по вашей политике. Контрольная сумма не дает повторно загрузить неизменный файл, а оператор разбирает все новые карточки в интерфейсе.
Семейная библиотека инструкций
Инструкции связываются с Equipment и тегом Manual. Динамическая публикация по этому тегу дает членам семьи простой просмотр без доступа ко всему архиву. Конфиденциальные чеки и договоры не должны иметь Manual и исключаются папкой. Публикацию защищают паролем и периодически продлевают, чтобы забытая ссылка не работала бесконечно.
Сравнение Docspell с аналогами
| Программа | Лучше подходит для | Главное ограничение |
|---|---|---|
| Docspell | Семейных и небольших архивов с адресной книгой, OCR, почтовым импортом и гибкими метаданными | Требует настройки нескольких серверных компонентов и внешних средств обработки |
| Paperless-ngx | Быстрого перевода домашней и офисной бумаги в полнотекстовый архив с автоматической классификацией | Развертывание и обслуживание остаются задачей владельца сервера |
| Papermerge | Сканированных документов, OCR и визуальной работы со страницами в веб-интерфейсе | Для сложной автоматизации требуется внимательная настройка рабочих процессов |
| Mayan EDMS | Организаций, которым нужны версии, роли, события, рабочие процессы и строгий контроль доступа | Администрирование заметно сложнее для небольшого домашнего архива |
| Teedy | Легкого совместного хранения, тегирования и поиска документов небольшой командой | Инструменты интеллектуального разбора сканов менее центральны, чем в специализированных OCR-архивах |
Docspell имеет смысл выбирать, когда важны не только OCR и теги, но и различие между корреспондентом, заинтересованным человеком или оборудованием, почтовые задачи, источники загрузки и пользовательские денежные поля. Paperless-ngx обычно проще воспринимается как поток потребление — OCR — корреспондент — тип — архив. Papermerge подходит тем, кто уделяет больше внимания сканированным страницам. Mayan EDMS оправдан при формальных ролях, версиях и процессах. Teedy удобен как компактное совместное хранилище. PDF Commander решает другую задачу — редактирование отдельных PDF, поэтому он полезен до загрузки или после выгрузки, но не заменяет многопользовательский архив.
Ограничения, которые стоит учесть заранее
Русского перевода интерфейса в стандартной поставке нет, хотя русский текст в документах можно распознавать при установленной языковой модели Tesseract. Пользователю придется работать с английскими названиями разделов и сообщений. Для команды это означает необходимость короткой внутренней инструкции с соответствием Items, Inbox, Correspondent, Concerning, Source, Collective и других терминов.
Качество конвертации зависит от внешних программ. Одинаковая конфигурация Docspell на двух серверах может по-разному обработать офисный файл из-за версии LibreOffice, набора шрифтов или доступного HTML-конвертера. Контейнеры уменьшают расхождения, но увеличивают объем загрузки и требования к памяти. Контрольная подборка должна храниться рядом с инструкцией обновления.
Встроенный просмотрщик предназначен для чтения и проверки, а не для полноценного изменения текста и графики PDF. Поворот, склейка страниц и другие операции могут выполняться addon или внешним редактором. Исправленный файл затем загружается как новое вложение или новая карточка. Не следует ожидать инструментов верстки, как в специализированном PDF-редакторе.
Автоматизация метаданных не устраняет ручную проверку. Даты в счете могут включать дату выставления, срок оплаты и период услуги; алгоритм не знает, какая из них является основной для вашего процесса. Имя организации может совпасть с упоминанием банка или посредника. Inbox и Confirm существуют именно для контроля таких неоднозначностей.
Публичные ссылки не предоставляют детального управления действиями получателя: это просмотр по запросу. Для редактирования, загрузки ответов и разграничения по ролям нужен пользователь и папка. Полнотекстовое условие в Share не поддерживается, поэтому некоторые подборки придется предварительно размечать.
Встроенная модель папок не заменяет сложную систему корпоративных разрешений, согласований и неизменяемого аудита. Для малого коллектива она понятна, но предприятие с нормативными требованиями должно отдельно оценить журналы, политику хранения, резервное копирование, юридическую значимость оригиналов и процедуру удаления.
Как организовать внедрение без хаоса
- Подготовьте отдельную тестовую базу и загрузите 30–50 документов, представляющих все реальные типы.
- Создайте минимальные категории тегов, справочники участников и несколько полей; не переносите старую структуру папок буквально.
- Настройте один канал поступления и проверьте путь от загрузки до подтверждения, поиска и выгрузки.
- Зафиксируйте языки OCR, правила именования, назначение Date и Due Date, форматы сумм и владельцев папок.
- После стабильной ручной классификации включите автотеги только для одной категории типов документов.
- Добавьте IMAP, каталог наблюдения и публичные источники по одному, контролируя дубли и очередь.
- Настройте резервное копирование базы и файлов, затем выполните пробное восстановление.
- Только после этого переносите большой исторический архив с пониженным приоритетом.
Минимальная схема тегов лучше подробной, которую никто не соблюдает. Для начала достаточно типа документа и рабочего состояния. Корреспондентов храните в адресной книге, объекты — в Equipment, суммы и номера — в полях. Новую метку следует добавлять, когда по ней действительно планируется поиск или действие. Дубли Invoice, Invoices и Bill ухудшают выдачу и обучение.
Для каждой автоматической задачи определите владельца. Кто проверяет Inbox, кто реагирует на просроченную очередь, кто обновляет сертификат прокси, кто восстанавливает TOTP, кто тестирует резервные копии. Docspell автоматизирует обработку файлов, но эксплуатационные обязанности не исчезают. Без ответственных даже хорошо настроенный импорт постепенно превращает архив в неподтвержденный склад.
Перед массовой миграцией оцените не только число документов, но и число вложений, средний размер, долю сканов и ожидаемое время OCR. Исторические материалы можно загружать партиями по году или источнику, назначая низкий приоритет. После каждой партии проверяйте ошибки, количество items, полнотекстовый поиск и место на диске. Такой темп позволяет скорректировать правила до того, как ошибка повторится десятки тысяч раз.
Интеграции через API, webhooks и addons
Почти все действия интерфейса опираются на HTTP API с обменом JSON. Маршруты разделены на открытые, защищенные пользовательской сессией, публичные для Shares и административные. Это позволяет автоматизировать загрузку, поиск, изменение метаданных и служебные операции без имитации нажатий в браузере. Перед написанием скрипта следует открыть спецификацию API именно на своем сервере и проверить схему запроса: названия полей и пути важнее примеров из старых сторонних инструкций.
Обычный вход возвращает короткоживущий токен. Клиент передает его в cookie или специальном заголовке и при необходимости обновляет через маршрут сессии. Скрипт не должен хранить пароль в каждой команде и печатать токен в журнал. Для длительного процесса лучше использовать dsc либо собственный клиент с корректным обновлением сессии, обработкой кодов ответа и ограничением повторов. Ошибка 401 означает проблему авторизации, а не отсутствие искомого документа.
Административные маршруты по умолчанию отключены и включаются секретом конфигурации. Они предназначены для операций вроде сброса пароля, отключения потерянного TOTP или полной перестройки индекса. Этот секрет дает возможности, отличные от прав обычного пользователя, поэтому его нельзя помещать в веб-страницу, мобильное приложение или публичный репозиторий. Для автоматизации администрирования используйте отдельный защищенный файл и ограничьте доступ к хосту, с которого выполняется команда.
Webhooks помогают передать событие во внешнюю систему, когда в Docspell произошло нужное изменение. Практический сценарий — сообщить внутреннему сервису о новой карточке, чтобы он забрал идентификатор и выполнил дополнительную проверку. Получатель должен уметь переживать повторную доставку и временную недоступность: одна и та же операция не должна создавать дубли. Полезно логировать идентификатор item, тип события и результат, не записывая содержимое конфиденциального документа.
Addons расширяют обработку файла программами, которые запускаются на стороне joex. Дополнение описывает входные данные, параметры и результат, а исполняемый код получает временные файлы. Так можно подключить специфический классификатор, преобразование страниц или внутреннюю проверку номера. Поскольку addon фактически выполняет код на сервере обработки, его нужно рассматривать как доверенный компонент: проверить происхождение, права, таймаут, сетевой доступ и поведение на поврежденном файле.
Интеграцию разумно начинать с операции чтения. Сначала скрипт находит одну тестовую карточку и выводит JSON, затем обновляет безвредное поле, после чего проверяет результат через интерфейс. Только после этого включаются массовые изменения. Для каждой серии сохраняйте запрос, число найденных items и список идентификаторов. Такой журнал позволяет восстановить ход операции, если фильтр оказался шире ожидаемого.
Проектирование справочников до массового импорта
Структуру архива лучше строить от будущих вопросов. Если пользователь хочет находить документы по стороне договора, организация должна быть Correspondent; если по члену семьи — Person в роли Concerning; если по автомобилю — Equipment. Тег нужен, когда один item может иметь несколько независимых признаков, а папка — когда требуется ограничить видимость. Пользовательское поле оправдано, когда значение проверяется по типу, участвует в диапазоне или статистике.
Не переносите дерево бумажных папок один к одному. Глубокая иерархия часто кодирует сразу год, контрагента, тип и состояние, тогда как Docspell хранит эти признаки отдельно. Папка 2025/Банк/Счета/Оплачено затрудняет смену состояния и права. Более устойчиво оставить папку для доступа, дату хранить в Date, банк — в Correspondent, счет — в теге типа, оплату — в теге состояния.
Справочник организаций следует очищать от дублей до обучения. Названия ООО Ромашка, Ромашка ООО и Romashka могут быть вариантами одной стороны, а не тремя корреспондентами. Если создать дубли, документы распределятся между ними, статистика и поиск станут фрагментарными. Основная запись должна иметь понятное имя, а дополнительные обозначения и адреса используются как данные для сопоставления.
Для тегов полезно заранее определить регистр, число и язык. Одновременное использование Invoice, invoice и Счет создает три фильтра. Категория ограничивает область смысла и облегчает автотеги, но не запрещает назначить несколько тегов одной категории. Если процесс требует ровно одного типа документа, правило контролируется инструкцией и периодическим запросом, который находит карточки без типа или с конфликтующим набором.
Пользовательские поля именуются как стабильные идентификаторы. Метку можно перевести и изменить, а имя лучше не трогать после интеграции, потому что на него могут ссылаться запросы и скрипты. Для денег создавайте отдельные поля по валюте либо договоритесь о единой валюте коллектива. Номер документа храните как Text, а не Number: в нем встречаются нули в начале, дефисы, косые черты и буквы.
Дата item должна иметь единое значение для каждого класса. Для счета это может быть дата выставления, для договора — дата подписания, для письма — дата отправки. Срок оплаты или окончания договора помещается в Due Date либо отдельное поле, если нужны несколько сроков. Если разные сотрудники выбирают разные даты из одного документа, сортировка и отчеты теряют смысл, даже когда OCR распознал все значения верно.
Контроль качества архива и эксплуатационные метрики
Количество items само по себе не показывает качество. Полезнее следить за долей New, числом ошибок обработки, карточками без типа, корреспондента или даты, дубликатами тегов и документами с просроченным Due Date. Эти показатели можно представить сохраненными запросами на отдельной панели. Цель — не нулевое число во всех блоках, а понятная очередь, которая не растет быстрее обработки.
Создайте контрольный набор файлов и не удаляйте его после запуска. В него входят цифровой PDF с текстом, скан без слоя, фотография чека, TIFF, офисный документ, письмо с HTML и вложением, ZIP и файл с русским текстом. После изменения контейнеров, OCR, шрифтов или базы загрузите копии через тестовый Source и сравните извлеченный текст, миниатюру, PDF-копию, время и предложенные метаданные.
Журналы restserver, joex, базы и обратного прокси отвечают на разные вопросы. Код 413 в прокси означает ограничение размера запроса до приложения; ошибка подключения joex к базе не исправляется настройкой браузера; сбой tesseract виден в логе задания обработки. При расследовании зафиксируйте время, идентификатор item или job и компонент, а затем сопоставляйте сообщения. Поиск только по имени файла ненадежен, потому что одинаковые имена встречаются в разных загрузках.
Наблюдайте за временем ожидания и временем выполнения отдельно. Длинное ожидание указывает на недостаток исполнителей, зависшее задание или приоритеты; долгое выполнение — на тяжелый файл, OCR, конвертер или ресурсы. Увеличение числа joex сокращает очередь только пока база, процессор и диск выдерживают параллельность. После точки насыщения оно ухудшает работу и увеличивает вероятность таймаутов.
Проверка резервной копии должна завершаться поиском реального документа, а не только успешным импортом дампа. В восстановленной среде войдите под обычным пользователем, откройте item из защищенной папки, скачайте оригинал, выполните Contents-поиск и проверьте пользовательское поле. Затем убедитесь, что новая загрузка обрабатывается. Так тест охватывает базу, файлы, индекс, права и очередь.
Секреты и сроки тоже требуют ревизии. Просмотрите активные Sources, отключите неиспользуемые идентификаторы, найдите Shares с дальней датой окончания, проверьте приглашения и административный секрет. Отдельно убедитесь, что почтовые пароли, токены уведомлений и параметры OIDC не попадают в резервные копии, доступные широкому кругу, либо защищены вместе с ними.
Итоговый рабочий порядок
Для ежедневной работы достаточно устойчивой последовательности: документы поступают через выбранные источники, joex создает PDF-копии и извлекает текст, ответственный открывает Inbox, проверяет метаданные по встроенному просмотру и подтверждает карточки. Поиск, закладки и панели затем превращают разметку в практическую пользу: находят нужный договор, показывают неоплаченные счета, собирают документы по человеку или оборудованию и предупреждают о сроках.
Наиболее сильная сторона Docspell проявляется в связке инструментов. OCR сам по себе дает текст, адресная книга — участников, теги — тип и состояние, поля — сумму и номер, папки — доступ, а Source — происхождение и автоматические значения. Если использовать только загрузку и полнотекстовый поиск, большая часть структуры останется незадействованной; если создать слишком много метаданных без правил, разбор станет медленным. Баланс достигается через несколько обязательных полей и понятный Inbox-процесс.
Надежный архив определяется не количеством загруженных файлов, а возможностью восстановить данные, повторить обработку и объяснить, почему документ виден конкретному пользователю. Поэтому настройка базы, файлового backend, очереди, внешних конвертеров, резервных копий и прав важна не меньше интерфейса. После пробного восстановления и проверки контрольных документов система готова к постоянному потоку, а дальнейшие улучшения можно добавлять постепенно: почтовые задачи, уведомления, публикации, автотеги и интеграции через API.
Регулярно просматривайте неподтвержденные items, ошибки очереди, свободное место, просроченные Shares и состояние резервных копий. Раз в несколько месяцев полезно объединять дубли справочников и тегов, проверять неиспользуемые источники и тестировать поиск по контрольной фразе. Эти действия сохраняют предсказуемость архива и не дают автоматизации скрыть проблемы до момента, когда срочно понадобится конкретный документ.