fix: счёт на оплату кладётся в библиотеку под латинским именем (OCR терял расширение)
Tests / frontend-test (pull_request) Successful in 1m24s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-27 14:49:25 +05:00
parent edd5008120
commit 6460a2a22d
@@ -8,7 +8,7 @@ import { WebPartContext } from '@microsoft/sp-webpart-base';
import { APPROVAL_API_CLIENT_ID, DATA_SITE_URL, DICTIONARY_API_BASE_URL } from '../../../shared/config'; import { APPROVAL_API_CLIENT_ID, DATA_SITE_URL, DICTIONARY_API_BASE_URL } from '../../../shared/config';
import { PAYMENT_INVOICES_LIBRARY_TITLE } from '../../../shared/listTitles'; import { PAYMENT_INVOICES_LIBRARY_TITLE } from '../../../shared/listTitles';
import { getSP } from '../../../shared/pnp/pnpjs'; import { getSP } from '../../../shared/pnp/pnpjs';
import { fileStamp, storedFileName } from '../../../shared/chat/chatFileNames'; import { fileStamp } from '../../../shared/chat/chatFileNames';
/** Колонка библиотеки, куда OCR кладёт распознанный текст счёта. */ /** Колонка библиотеки, куда OCR кладёт распознанный текст счёта. */
const FILE_CONTENT_FIELD = 'file_content'; const FILE_CONTENT_FIELD = 'file_content';
@@ -37,10 +37,13 @@ export function validateInvoiceFile(file: File): string | undefined {
/** /**
* Сохранить файл счёта в библиотеку. Делаем это сразу при выборе файла, до * Сохранить файл счёта в библиотеку. Делаем это сразу при выборе файла, до
* сохранения самой заявки: OCR работает с элементом библиотеки, а не с вложением. * сохранения самой заявки: OCR работает с элементом библиотеки, а не с вложением.
* Отметка времени в имени исключает перезапись счёта с тем же именем из другой заявки. * Имя в библиотеке — только латиница и цифры: OCR-сервис получает имя в multipart и
* на кириллице теряет расширение («unsupported file type ''»). Исходное имя
* хранится в данных заявки (InvoiceFileName), поэтому в библиотеке оно не нужно.
* Метка времени и случайный хвост исключают перезапись счёта другой заявки.
*/ */
export async function storeInvoice(file: File): Promise<IStoredInvoice> { export async function storeInvoice(file: File): Promise<IStoredInvoice> {
const storedName = storedFileName(fileStamp(new Date()), 1, file.name); const storedName = `invoice-${fileStamp(new Date())}-${Math.random().toString(36).slice(2, 8)}.pdf`;
const root = getSP().web.lists.getByTitle(PAYMENT_INVOICES_LIBRARY_TITLE).rootFolder; const root = getSP().web.lists.getByTitle(PAYMENT_INVOICES_LIBRARY_TITLE).rootFolder;
const added = await root.files.addUsingPath(storedName, file); const added = await root.files.addUsingPath(storedName, file);
// Id элемента библиотеки нужен OCR, а addUsingPath отдаёт только сведения о файле. // Id элемента библиотеки нужен OCR, а addUsingPath отдаёт только сведения о файле.