From 985ee23810091d9914d17a1e46b274b20aab4214 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sat, 29 Nov 2025 19:29:14 +0300 Subject: [PATCH] =?UTF-8?q?feat(n8n):=20RAG=20workflow=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B8=D0=B7=D0=B2=D0=BB=D0=B5=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновлён Code1: нормализация данных из give_data1 с поддержкой payload.applicant, ai_analysis, wizard_plan - Обновлён Code6: генерация промптов для RAG (user, project, offenders) - Добавлена документация по настройке n8n нод для OCR статуса - Добавлен эндпоинт check-ocr-status в documents.py - Добавлен лог сессии с полным описанием workflow Workflow itX62h38faB51y9J успешно извлекает: - Данные пользователя (ФИО, контакты, адрес) - Данные проекта (сумма, предмет, даты договора) - Несколько контрагентов с разными ролями (seller, service_provider) --- .../week5/399441_Ходатайство_по_делу_.pdf | Bin 0 -> 49622 bytes ..._заявление_потребителя_Селдушев____стр.pdf | Bin 0 -> 97134 bytes test/LanguageManager/Workflow2 | 2 +- ticket_form/backend/app/api/documents.py | 70 +++ .../SESSION_LOG_2025-11-29_RAG_WORKFLOW.md | 433 ++++++++++++++++++ ticket_form/docs/n8n_nodes/README_SETUP.md | 99 ++++ .../docs/n8n_nodes/check_all_ready.json | 32 ++ .../docs/n8n_nodes/publish_docs_ready.json | 20 + .../docs/n8n_nodes/redis_incr_ready.json | 19 + .../docs/n8n_nodes/update_ocr_error.json | 21 + .../docs/n8n_nodes/update_ocr_status.json | 20 + 11 files changed, 715 insertions(+), 1 deletion(-) create mode 100644 storage/2025/November/week5/399441_Ходатайство_по_делу_.pdf create mode 100644 storage/2025/November/week5/399445_1_заявление_потребителя_Селдушев____стр.pdf create mode 100644 ticket_form/docs/SESSION_LOG_2025-11-29_RAG_WORKFLOW.md create mode 100644 ticket_form/docs/n8n_nodes/README_SETUP.md create mode 100644 ticket_form/docs/n8n_nodes/check_all_ready.json create mode 100644 ticket_form/docs/n8n_nodes/publish_docs_ready.json create mode 100644 ticket_form/docs/n8n_nodes/redis_incr_ready.json create mode 100644 ticket_form/docs/n8n_nodes/update_ocr_error.json create mode 100644 ticket_form/docs/n8n_nodes/update_ocr_status.json diff --git a/storage/2025/November/week5/399441_Ходатайство_по_делу_.pdf b/storage/2025/November/week5/399441_Ходатайство_по_делу_.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e7cc136f52abe6815deaa2ac69320b5c9e83c157 GIT binary patch literal 49622 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