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

Потоковый ввод документов

Модуль потокового ввода документов предназначен для обработки результата потокового сканирования (или любого другого источника электронных документов).

Настройка модуля потокового ввода документов описана в Руководстве администратора

Система оперирует обработчиками потокового ввода. По умолчанию доступны следующие обработчики:

  • Потоковый ввод по ШК. Распознавание отсканированного штрих-кода и прикрепление скана документа к карточке.
    Поддерживаемые форматы документов: png, jpg, jpeg, pdf, tif, tiff.
  • Потоковый ввод входящих писем с использованием ИИ. Распознавание данных отсканированного входящего документа с использованием ИИ. С последующим созданием/обновлением входящих документов.
    Поддерживаемые форматы документов: png, jpg, jpeg pdf, tif, tiff, doc, docx, xls, xlsx.

Собственные обработчики потокового ввода

Система позволяет зарегистрировать и использовать собственные обработчики потокового ввода. Для этого необходимо реализовать наследник IDocLoadFilesBehavior:

using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Tessa.Imaging.DocLoad; using Tessa.Platform.Plugins;

namespace Tessa.Extensions.Default.Imaging.Ai { public sealed class MyDocLoadBehavior : IDocLoadFilesBehavior { #region IDocLoadFilesBehavior Members

/// <summary> /// Обработка набора файлов в потоковом вводе. /// </summary> /// <param name="context">Контекст выполнения плагина Кронос.</param> /// <param name="settings">Настройки потокового ввода.</param> /// <param name="subfolderSettingsInfo"> /// Объект с настройками характерными для обрабатываемой подпапки. /// </param> /// <param name="inputFilePaths">Входящий набор путей к файлам.</param> /// <param name="outputFolder"> /// Имя конечной папки, сформированное по формату, /// указанному в настройке: <c>DocLoad.OutputFolderFormat</c>. /// </param> /// <param name="cancellationToken"> /// Объект, посредством которого можно отменить асинхронную задачу. /// </param> /// <returns>Асинхронная задача.</returns> public async Task ProcessFilesAsync( IPluginExecutingContext context, IDocLoadSettings settings, Dictionary<string, object?>? subfolderSettingsInfo, IList<string> inputFilePaths, string outputFolder, CancellationToken cancellationToken = default) { // Тут должна быть описана обработка файлов из inputFilePaths ... // Так же тут можно получать настройки специфичные для данного обработчика var mySettingBoolean = StorageHelper.tryGet<boolean>(json, 'MySettingBoolean'); }

/// <summary> /// Настройки по умолчанию для сценария обработки. /// </summary> public Dictionary<string, object?> DefaultSettings => // Тут подразумевается Storage объект // с дополнительными настройками необходимыми для обработчика. // Если настроек нет - необходимо просто вернуть пустой Dictionary. new() { { "MySettingBoolean", false } };

/// <summary> /// Имя. /// </summary> public string Name => "$DocLoad_MyDocLoadBehavior";

/// <summary> /// Описание. /// </summary> public string Description => "$DocLoad_MyDocLoadBehavior_Description";

#endregion } }

Обработка в рамках метода ProcessFilesAsync может быть любая, например с использованием OCR или ИИ.

Полученный класс необходимо зарегистрировать его в IDocLoadBehaviorResolver:

using Tessa.Imaging.DocLoad; using Tessa.Platform;

namespace Tessa.Extensions.Default.Imaging.Ai { [Registrator] public class Registrator : RegistratorBase { public override void RegisterUnity() { this.UnityContainer // Register DocLoad Behaviors .TryResolve<IDocLoadBehaviorResolver>()? .Register<MyDocLoadBehavior>(nameof(MyDocLoadBehavior)) ; } } }

Дополнительные настройки обработчиков потокового ввода

Обработчики потокового ввода могут иметь дополнительные настройки. Настройки по умолчанию задаются в IDocLoadFilesBehavior.DefaultSettings, а для их указания в интерфейсе необходимо реализовать наследник DocLoadFilesBehaviorUIConfigurator длл WEB-клиента:

import { injectable, localize } from '@tessa/application'; import { IStorage } from '@tessa/core'; import { DocLoadFilesBehaviorUIConfigurator } from 'tessa/ui/imaging/docLoadFilesBehaviorUIConfigurator'; import { PropertyGridBuilder } from 'tessa/ui/propertyGrid';

@injectable() export class MyDocLoadBehaviorUIConfigurator extends DocLoadFilesBehaviorUIConfigurator { //#region constructors

constructor() { super( // Тут указывается имя обработчика для которого реализуется UIConfigurator 'MyDocLoadBehavior', // Вторым параметром передаётся делегат, который возвращает массив // PropertyGrid контрол для редактирования настроек. dataProvider => { const mySettingBooleanProperty = PropertyGridBuilder.createBooleanProperty({ data: dataProvider, alias: 'MySettingBoolean', visibility: true, captionVisibility: true, caption: '$CardTypes_Controls_DocLoad_MySettingBoolean' });

return [mySettingBooleanProperty]; }, // Третьим параметром передаётся делегат, преобразующий настройки в читаемый формат // для их красивого отображения в строке таблицы. jsonSettingsString => { const json = JSON.parse(jsonSettingsString) as IStorage; const mySettingBoolean = json['MySettingBoolean'] as boolean; return ( localize('$CardTypes_Controls_DocLoad_MySettingBoolean') + ': ' + (mySettingBoolean ? localize('$UI_Common_Yes') : localize('$UI_Common_No')) ); } ); } //#endregion }

Данный класс необходимо зарегистрировать в DI контейнере:

import { ExtensionRegistrator } from '@tessa/application'; import { IDocLoadFilesBehaviorUIConfigurator$, IDocLoadFilesBehaviorUIConfiguratorResolver$ } from 'tessa/ui/imaging'; import { MyDocLoadBehaviorUIConfigurator } from './myDocLoadBehaviorUIConfigurator';

export const ImagingRegistrator: ExtensionRegistrator = { async registerTypes(container) { // Регистрация Resolver-а конфигураторов. container .bind(IDocLoadFilesBehaviorUIConfiguratorResolver$) .toFactory(({ container }) => (id: string) => { if (container.isBoundNamed(IDocLoadFilesBehaviorUIConfigurator$, id)) { return container.getNamed(IDocLoadFilesBehaviorUIConfigurator$, id); } else { return undefined; } });

// Регистрация конфигураторов. container .bind(IDocLoadFilesBehaviorUIConfigurator$) .to(MyDocLoadBehaviorUIConfigurator) .inRequestScope() .whenTargetNamed('MyDocLoadBehavior'); } };

ImagingRegistrator.registerTypes() должен быть учтён при регистрации бандла в Application.instance.registerBundle()

Back to top