Как настроить распознавание нового типа документов
<< Click to Display Table of Contents >> Разработка > Примеры разработки > Интеллектуальная обработка документов Как настроить распознавание нового типа документов |
Ситуация
В системе по умолчанию поддерживается интеллектуальная обработка:
•входящих писем;
•входящих счетов;
•товарных накладных;
•актов выполненных работ;
•счетов-фактур полученных, в том числе корректировочных и исправленных;
•универсальных передаточных документов, в том числе корректировочных и исправленных;
•договоров и дополнительных соглашений.
Необходимо настроить систему, чтобы распознавались документы нового типа, например финансовые отчеты.
Решение
Чтобы настроить распознавание нового типа документов:
1.Настройте классификацию документов: дообучите базовый классификатор, проанализируйте результаты обучения и протестируйте работу классификатора, перенесите обученную модель классификации в продуктивную систему.
2.Настройте извлечение фактов из документов: создайте новую грамматику и обучите новую модель извлечения фактов, перенесите обученную модель извлечения фактов в продуктивную систему.
3.Создайте новый тип документа под задачи организации и подготовьте его к работе.
4.Разработайте функцию для создания карточки нового документа и заполнения его реквизитов. В качестве примера можно использовать функцию создания входящего письма.
5.Задайте соответствие нового класса грамматике и функции обработки результатов, созданных на втором и четвертом шаге.
6.Добавьте новый тип документа в интеллектуальные возможности системы по автоматическому дообучению классификатора. Для этого добавьте его в окно смены типа, а GUID, название модуля и название функции для создания и заполнения карточки в серверную функцию GetEntityTypeAndProcessingFunctionMapping():
/// <summary>
/// Получить словарь соответствий типа сущности паре модуль и имя функции обработки.
/// </summary>
/// <param name="entity">Сущность.</param>
/// <returns>Словарь соответствий.</returns>
[Public]
public override System.Collections.Generic.IDictionary<string, string[]> GetEntityTypeAndProcessingFunctionMapping(Sungero.Domain.Shared.IEntity entity)
{
const string ModuleName = "Sungero.SmartProcessing";
bool? isAdjustment = false;
if (Sungero.Docflow.AccountingDocumentBases.Is(entity))
isAdjustment = Sungero.Docflow.AccountingDocumentBases.As(entity).IsAdjustment;
var taxInvoiceFunctionName = isAdjustment != true
? Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateTaxInvoice
: Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateTaxInvoiceCorrection;
var universalTransferDocumentFunctionName = isAdjustment != true
? Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateUniversalTransferDocument
: Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateUniversalTransferCorrectionDocument;
var isKindAccBalance = true;
if (Sungero.Docflow.OfficialDocuments.Is(entity))
isKindAccBalance = Sungero.Docflow.OfficialDocuments.As(entity).DocumentKind.Id == DirRX.FinReports.PublicFunctions.Module.Remote.GetDocumentKind(DirRX.FinReports.PublicConstants.Module.Initialize.BalanceGuid).Id;
var finReportsDocumentFunctionName = isKindAccBalance == true
? DirRX.FinReports.PublicConstants.Module.ProcessingFunctionName.CreateAccBalanceDocument
: DirRX.FinReports.PublicConstants.Module.ProcessingFunctionName.CreateFinanceReportsDocument;
var mapping = new Dictionary<string, string[]>();
mapping.Add(Sungero.RecordManagement.PublicConstants.Module.IncomingLetterGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateIncomingLetter });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.ContractStatementInvoiceGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateContractStatement });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.WaybillInvoiceGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateWaybill });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.IncomingTaxInvoiceGuid,
new[] { ModuleName, taxInvoiceFunctionName });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.OutcomingTaxInvoiceGuid,
new[] { ModuleName, taxInvoiceFunctionName });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.UniversalTransferDocumentGuid,
new[] { ModuleName, universalTransferDocumentFunctionName });
mapping.Add(Sungero.Docflow.PublicConstants.AccountingDocumentBase.IncomingInvoiceGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateIncomingInvoice });
mapping.Add(Sungero.Contracts.PublicConstants.Module.ContractGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateContract });
mapping.Add(Sungero.Contracts.PublicConstants.Module.SupAgreementGuid,
new[] { ModuleName, Sungero.Docflow.PublicConstants.Module.ProcessingFunctionName.CreateSupAgreement });
mapping.Add(DirRX.FinReports.PublicConstants.Module.FinanceReportsGuid,
new[] { "DirRX.FinReports", finReportsDocumentFunctionName });
return mapping;
}
7.Добавьте новый тип документа в интеллектуальные возможности системы по перекомплектованию. Для этого добавьте информацию о нем в разделяемую функцию GetPackageDocumentTypePriorities():
/// <summary>
/// Получить приоритеты типов документов для определения ведущего документа в комплекте.
/// </summary>
/// <returns>Словарь с приоритетами типов.</returns>
[Public]
public override System.Collections.Generic.IDictionary<System.Type, int> GetPackageDocumentTypePriorities()
{
var leadingDocumentPriority = new Dictionary<System.Type, int>();
leadingDocumentPriority.Add(typeof(DirRX.FinReports.IFinanceReports).GetFinalType(), 10);
leadingDocumentPriority.Add(typeof(Sungero.RecordManagement.IIncomingLetter).GetFinalType(), 9);
leadingDocumentPriority.Add(typeof(Sungero.Contracts.IContract).GetFinalType(), 8);
leadingDocumentPriority.Add(typeof(Sungero.Contracts.ISupAgreement).GetFinalType(), 7);
leadingDocumentPriority.Add(typeof(Sungero.FinancialArchive.IContractStatement).GetFinalType(), 6);
leadingDocumentPriority.Add(typeof(Sungero.FinancialArchive.IWaybill).GetFinalType(), 5);
leadingDocumentPriority.Add(typeof(Sungero.FinancialArchive.IUniversalTransferDocument).GetFinalType(), 4);
leadingDocumentPriority.Add(typeof(Sungero.FinancialArchive.IIncomingTaxInvoice).GetFinalType(), 3);
leadingDocumentPriority.Add(typeof(Sungero.Contracts.IIncomingInvoice).GetFinalType(), 2);
leadingDocumentPriority.Add(typeof(Sungero.FinancialArchive.IOutgoingTaxInvoice).GetFinalType(), 1);
leadingDocumentPriority.Add(typeof(Sungero.Docflow.ISimpleDocument).GetFinalType(), 0);
return leadingDocumentPriority;
}
8.Опубликуйте изменения решения в локальную систему Directum RX.
9.Проверьте захват нового типа документов.
© Компания Directum, 2024 |