feat: заявление на отпуск — по файлу на каждую компанию совместителя одним запросом в ЭДО
Сотрудник заполняет заявку один раз, а в ЭДО уходит по документу на каждую компанию, где он работает: своя шапка (компания, должность) и свой БИН в массиве file_company_bins. Подписант один — сам сотрудник, от имени физлица. Запрос один на все файлы: принимается целиком или отклоняется целиком, повтор безопасен. Компания без БИН в справочнике пропускается и показывается в сообщении. Удалять согласующих при составлении может редактор маршрута (во всех формах, не только в трёх). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,15 +7,21 @@ import { IFioParts } from './fio';
|
||||
/** Путь приёма документов на подпись от интеграций (TANSU ЭДО, multipart/form-data). */
|
||||
const SIGNING_REQUESTS_PATH = '/api/v1/integration/signing-requests';
|
||||
|
||||
/** Что отправляем в ЭДО: одного получателя, он же подписант, и один файл. */
|
||||
/** Файл на подпись и компания, от имени которой он идёт (по её сертификату Sigex в ЭДО). */
|
||||
export interface IEdoSigningFile {
|
||||
name: string;
|
||||
content: Blob;
|
||||
/** БИН компании файла. У сотрудника-совместителя файлы одного запроса идут от разных компаний. */
|
||||
companyBin: string;
|
||||
}
|
||||
|
||||
/** Что отправляем в ЭДО: одного получателя, он же подписант (физлицо), и файлы. */
|
||||
export interface IEdoSigningRequest {
|
||||
/** Подписывающий: ЭДО заводит его по ИИН, если нет, и зовёт подписать письмом. */
|
||||
recipient: { iin: string; email: string; name: IFioParts };
|
||||
/** БИН компании, от имени которой документ идёт на подпись (нужен сертификат Sigex этой компании в ЭДО). */
|
||||
companyBin: string;
|
||||
/** Кому сообщать о подписи. */
|
||||
initiatorEmail: string;
|
||||
file: { name: string; content: Blob };
|
||||
files: IEdoSigningFile[];
|
||||
}
|
||||
|
||||
/** Ответ ЭДО: то, что нужно показать пользователю. */
|
||||
@@ -32,7 +38,7 @@ interface IEdoResponseBody {
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет документ на подпись в ЭДО.
|
||||
* Отправляет документы на подпись в ЭДО одним запросом: либо принимаются все, либо ни один.
|
||||
*
|
||||
* Токен берётся для приложения ЭДО текущего пользователя (AadHttpClient), поэтому в ЭДО
|
||||
* запрос приходит от того, кто нажал «Согласовать», — он заводится там автоматически при
|
||||
@@ -52,9 +58,12 @@ export async function submitSigningRequest(
|
||||
form.append('last_name', request.recipient.name.lastName);
|
||||
form.append('first_name', request.recipient.name.firstName);
|
||||
if (request.recipient.name.middleName) form.append('middle_name', request.recipient.name.middleName);
|
||||
form.append('company_bin', request.companyBin);
|
||||
form.append('initiator_email', request.initiatorEmail);
|
||||
form.append('files', request.file.content, request.file.name);
|
||||
// БИН файлов — массивом, по порядку файлов: общий company_bin не нужен, подписант один (физлицо).
|
||||
for (const file of request.files) {
|
||||
form.append('files', file.content, file.name);
|
||||
form.append('file_company_bins', file.companyBin);
|
||||
}
|
||||
|
||||
let response: HttpClientResponse;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user