В современном бизнес-среде организации постоянно ищут способы оптимизации своих финансовых процессов, повышения эффективности и экономии затрат. Одной из областей, которая имеет значительный потенциал для улучшения, является кредиторская задолженность. На высоком уровне процесс кредиторской задолженности включает в себя получение и сканирование счетов, извлечение соответствующих данных из отсканированных счетов, проверку, утверждение и архивирование. Второй этап (экстракция) может быть сложным. Каждый счет и квитанция выглядят по-разному. Этикетки несовершенны и противоречивы. Наиболее важные части информации, такие как цена, название поставщика, адрес поставщика и условия оплаты, часто не помечены явно и должны интерпретироваться в зависимости от контекста. Традиционный подход с привлечением рецензентов для извлечения данных требует много времени, подвержен ошибкам и не поддается масштабированию.
В этом посте мы покажем, как автоматизировать процесс обработки кредиторской задолженности с помощью Amazon Textract для извлечения данных. Мы также предоставляем эталонную архитектуру для создания конвейера автоматизации счетов, который обеспечивает извлечение, проверку, архивирование и интеллектуальный поиск.
Обзор решения
На следующей схеме архитектуры показаны этапы рабочего процесса обработки квитанций и счетов. Все начинается с этапа ввода документов для безопасного сбора и хранения отсканированных счетов-фактур и квитанций. Следующим этапом является этап извлечения, на котором вы передаете собранные счета и квитанции в Amazon Textract. AnalyzeExpense
API для извлечения финансовых связей между текстом, таким как имя поставщика, дата получения счета, дата заказа, причитающаяся сумма, уплаченная сумма и т. д. На следующем этапе вы используете предопределенные правила расходов, чтобы определить, следует ли вам автоматически утверждать или отклонять квитанцию. Утвержденные и отклоненные документы попадают в соответствующие папки в корзине Amazon Simple Storage Service (Amazon S3). Для утвержденных документов вы можете выполнять поиск по всем извлеченным полям и значениям с помощью Amazon OpenSearch Service. Вы можете визуализировать проиндексированные метаданные с помощью панелей мониторинга OpenSearch. Утвержденные документы также могут быть перемещены в Amazon S3 Intelligent-Tiering для долгосрочного хранения и архивирования с использованием политик жизненного цикла S3.
В следующих разделах описан процесс создания решения.
Предварительные условия
Для развертывания этого решения необходимо иметь следующее:
- Аккаунт AWS.
- Среда AWS Cloud9. AWS Cloud9 — это облачная интегрированная среда разработки (IDE), которая позволяет писать, запускать и отлаживать код с помощью всего лишь браузера. Он включает в себя редактор кода, отладчик и терминал.
Чтобы создать среду AWS Cloud9, укажите имя и описание. Оставьте все остальное по умолчанию. Выберите ссылку IDE на консоли AWS Cloud9, чтобы перейти к IDE. Теперь вы готовы использовать среду AWS Cloud9.
Развертывание решения
Чтобы настроить решение, вы используете AWS Cloud Development Kit (AWS CDK) для развертывания стека AWS CloudFormation.
- В терминале IDE AWS Cloud9 клонируйте Репозиторий GitHub и установите зависимости. Выполните следующие команды, чтобы развернуть
InvoiceProcessor
куча:
Развертывание занимает около 25 минут с настройками конфигурации по умолчанию из репозитория GitHub. Дополнительная информация о результатах также доступна в консоли AWS CloudFormation.
- После завершения развертывания AWS CDK создайте правила проверки расходов в таблице Amazon DynamoDB. Вы можете использовать тот же терминал AWS Cloud9 для запуска следующих команд:
- В сегменте S3, который начинается с
invoiceprocessorworkflow-invoiceprocessorbucketf1-*
создайте папку загрузок.
В Amazon Cognito у вас уже должен быть существующий пул пользователей под названием OpenSearchResourcesCognitoUserPool*
. Мы используем этот пул пользователей для создания нового пользователя.
- В консоли Amazon Cognito перейдите к пулу пользователей.
OpenSearchResourcesCognitoUserPool*
. - Создайте нового пользователя Amazon Cognito.
- Укажите имя пользователя и пароль по вашему выбору и запишите их для дальнейшего использования.
- Загрузите документы случайный_счет1 и случайный_счет2 на S3
uploads
папку для запуска рабочих процессов.
Теперь давайте углубимся в каждый из этапов обработки документа.
Захват документов
Клиенты обрабатывают счета и квитанции во множестве форматов от разных поставщиков. Эти документы принимаются по таким каналам, как печатные копии, отсканированные копии, загружаемые в хранилище файлов, или общие устройства хранения. На этапе сбора документов вы храните все отсканированные копии квитанций и счетов-фактур в хорошо масштабируемом хранилище, например в корзине S3.
Добыча
Следующим этапом является этап извлечения, на котором вы передаете собранные счета и квитанции в Amazon Textract. AnalyzeExpense
API для извлечения финансовых связей между текстом, таким как имя поставщика, дата получения счета, дата заказа, сумма к оплате/оплаченная сумма и т. д.
AnalyExpense — это API, предназначенный для обработки документов счетов и квитанций. Он доступен как синхронный, так и асинхронный API. Синхронный API позволяет отправлять изображения в байтовом формате, а асинхронный API позволяет отправлять файлы в форматах JPG, PNG, TIFF и PDF. AnalyzeExpense
Ответ API состоит из трех отдельных разделов:
- Поля сводки – Этот раздел включает как нормализованные ключи, так и явно упомянутые ключи вместе с их значениями.
AnalyzeExpense
нормализует ключи для контактной информации, такой как имя поставщика и адрес поставщика, ключи, связанные с идентификатором налогоплательщика, такие как идентификатор налогоплательщика, ключи, связанные с платежами, такие как сумма к оплате и скидка, а также общие ключи, такие как идентификатор счета, дата доставки и номер счета. Ключи, которые не нормализованы, по-прежнему отображаются в полях сводки как пары «ключ-значение». Полный список поддерживаемых полей расходов см. в разделе «Анализ счетов и квитанций». - Позиции – Этот раздел содержит нормализованные ключи отдельных позиций, такие как описание товара, цена за единицу, количество и код продукта.
- блок оптического распознавания символов – Блок содержит необработанный текстовый фрагмент со страницы счета-фактуры. Извлечение необработанного текста можно использовать для постобработки и идентификации информации, которая не включена в поля сводки и отдельных позиций.
В этом посте используется Конструкции Amazon Textract IDP CDK (Компоненты AWS CDK для определения инфраструктуры для рабочих процессов интеллектуальной обработки документов (IDP), что позволяет создавать настраиваемые рабочие процессы IDP для конкретных случаев использования. Конструкции и примеры представляют собой набор компонентов, позволяющих определять процессы IDP на AWS и опубликованных в GitHub. Основными используемыми концепциями являются конструкции AWS CDK, фактические стеки AWS CDK и пошаговые функции AWS.
На следующем рисунке показан рабочий процесс Step Functions.
Рабочий процесс извлечения включает в себя следующие этапы:
- InvoiceProcessor-Decider – Функция AWS Lambda, которая проверяет, поддерживается ли формат входного документа Amazon Textract. Более подробную информацию о поддерживаемых форматах см. в разделе «Входные документы».
- Разделитель документов – Лямбда-функция, которая генерирует из документов фрагменты объемом 2500 (максимум) страниц и может обрабатывать большие многостраничные документы.
- Карта штата – Лямбда-функция, которая обрабатывает каждый фрагмент параллельно.
- TextractAsync – Эта задача вызывает Amazon Textract с использованием асинхронного API, следуя передовым практикам использования уведомлений и использования Amazon Simple Notification Service (Amazon SNS).
OutputConfig
для сохранения выходных данных Amazon Textract JSON в корзину S3, созданную вами ранее. Он состоит из двух функций Lambda: одна для отправки документа на обработку, а другая активируется при уведомлении SNS. - ТекстрактАсинктоJSON2 – Поскольку
TextractAsync
задача может создавать несколько выходных файлов с разбивкой на страницы,TextractAsyncToJSON2
процесс объединяет их в один файл JSON.
Мы обсудим детали следующих трех шагов в следующих разделах.
Проверка и одобрение
На этапе проверки SetMetaData
Лямбда-функция проверяет, является ли загруженный файл действительными расходами в соответствии с правилами, настроенными ранее в таблице DynamoDB. Для этого поста вы используете следующие примеры правил:
- Проверка успешна, если
INVOICE_RECEIPT_ID
присутствует и соответствует регулярному выражению(?i)(0-9){3}(a-z){3}(0-9){3}$
и еслиPO_NUMBER
присутствует и соответствует регулярному выражению(?i)(a-z0-9)+$
- Проверка не увенчалась успехом, если
PO_NUMBER
илиINVOICE_RECEIPT_ID
неверно или отсутствует в документе.
После обработки файлов функция проверки расходов перемещает входные файлы либо в approved
или declined
папки в одной корзине S3.
Для целей этого решения мы используем DynamoDB для хранения правил проверки расходов. Однако вы можете изменить это решение для интеграции с вашими собственными или коммерческими решениями для проверки или управления расходами.
Интеллектуальный индекс и поиск
С OpenSearchPushInvoke
Лямбда-функция, извлеченные метаданные о расходах помещаются в индекс службы OpenSearch и доступны для поиска.
Финал TaskOpenSearchMapping
Step очищает контекст, который в противном случае может превысить квоту Step Functions на максимальный размер входных или выходных данных для выполнения задачи, состояния или рабочего процесса.
После создания индекса OpenSearch Service вы можете искать ключевые слова из извлеченного текста с помощью панелей мониторинга OpenSearch.
Архивирование, аудит и аналитика
Чтобы управлять жизненным циклом и архивированием счетов и квитанций, вы можете настроить правила жизненного цикла S3 для перевода объектов S3 из стандартных классов хранения в классы хранения с интеллектуальным многоуровневым хранением. S3 Intelligent-Tiering отслеживает шаблоны доступа и автоматически перемещает объекты на уровень нечастого доступа, если к ним не обращались в течение 30 дней подряд. После 90 дней отсутствия доступа объекты перемещаются на уровень мгновенного доступа к архиву без влияния на производительность или эксплуатационных расходов.
Для аудита и аналитики это решение использует службу OpenSearch для выполнения аналитики по запросам счетов. Служба OpenSearch позволяет легко принимать, защищать, искать, агрегировать, просматривать и анализировать данные для ряда вариантов использования, таких как анализ журналов, поиск приложений, корпоративный поиск и многое другое.
Войдите в OpenSearch Dashboards и перейдите к Управление стеком, Сохраненные объектытогда выбирай Импортировать. Выбрать счета-фактуры.ndjson файл из клонированного репозитория и выберите Импортировать. Это предварительно заполняет индексы и создает визуализацию.
Обновите страницу и перейдите к Дом, Панель приборови открыть Счета-фактуры. Теперь вы можете выбирать и применять фильтры, а также расширять временной интервал, чтобы просмотреть прошлые счета.
Очистить
Завершив оценку Amazon Textract для обработки квитанций и счетов-фактур, мы рекомендуем очистить все ресурсы, которые вы могли создать. Выполните следующие шаги:
- Удалить весь контент из корзины S3.
invoiceprocessorworkflow-invoiceprocessorbucketf1-*
. - В AWS Cloud9 выполните следующие команды, чтобы удалить ресурсы Amazon Cognito и стеки CloudFormation:
- Удалите среду AWS Cloud9, созданную вами из консоли AWS Cloud9.
Заключение
В этом посте мы представили обзор того, как мы можем построить конвейер автоматизации счетов с использованием Amazon Textract для извлечения данных и создать рабочий процесс для проверки, архивирования и поиска. Мы предоставили примеры кода о том, как использовать AnalyzeExpense
API для извлечения критических полей из счета.
Чтобы начать работу, войдите в консоль Amazon Textract, чтобы попробовать эту функцию. Чтобы узнать больше о возможностях Amazon Textract, обратитесь к Руководству разработчика Amazon Textract или к ресурсам Textract. Чтобы узнать больше о IDP, ознакомьтесь с публикациями IDP с сервисами AWS AI, часть 1 и часть 2.
Об авторах
Сушант Прадхан — старший архитектор решений в Amazon Web Services, помогающий корпоративным клиентам. Его интересы и опыт включают контейнеры, бессерверные технологии и DevOps. В свободное время Сушант любит проводить время на природе со своей семьей.
Шибин Михаэльрадж — старший менеджер по продукту в команде AWS Textract. Он занимается созданием продуктов на базе искусственного интеллекта и машинного обучения для клиентов AWS.
Супракаш Дутта — старший архитектор решений в Amazon Web Services. Он специализируется на стратегии цифровой трансформации, модернизации и миграции приложений, анализе данных и машинном обучении. Он является частью сообщества AI/ML в AWS и разрабатывает интеллектуальные решения для обработки документов.
Маран Чандрасекаран — старший архитектор решений в Amazon Web Services, работающий с нашими корпоративными клиентами. Вне работы он любит путешествовать и кататься на мотоцикле по Техас-Хилл-Кантри.