====== Процесс отправки документов ====== ~~TOC:2-4 ~~ [[{}:remd|← Назад]] Логика отправки ЭМД с описанием методов и процесса взаимодействия сервисов: 1. МИС формирует запрос методом POST/documents запрос в рег.РЭМД в сервис: a. emds-soap-service – soap формат запроса; b. emds-service – rest формат запроса; 2. Сервис emds-service выполняет обработку запроса POST /documents/ a. Запрос был успешно обработан: - Метаданные из запроса записываются в emds.med_docs; - Документ и подписи к нему помещаются в хранилище (в формате base64); - В МИС отправляется синхронный ответ о том, что запрос принят. b. В процессе обработки запроса была найдена ошибка: - В МИС отправляется синхронный ответ с ошибкой; - В таблице med_docs_reg_flk появляется запись с ошибочным запросом; 3. Сервис emds-service ставит в очередь документ на отправку во ФРЭМД (localUid документа и дата его создания заполняются в таблице emds.emdfr_send_task); 4. Сервис emds-outbound-scheduler согласно определенному в настройках расписанию проверяет наличие ЭМД, подлежащих выгрузке в федеральный сервис по таблице emds.emdfr_send_task с условием is_done ≠ ‘true’; 5. Сервис emds-outbound-scheduler формирует запрос методом POST/documents к сервису взаимодействия с ФРЭМД – emdr; a. Если отправка прошла успешно, в таблице emds.emdfr_send_task в поле is_done проставляется значение ‘true’; b. Если отправка прошла успешно, в таблице emds. doc_upload_status в поле status проставляется значение ‘1’; 6. Сервис emdr получает запрос от emds-outbound-scheduler и осуществляет следующие действия: a. Формирует запрос RegisterDocumentRequest в формате xml; b. Осуществляет валидацию запроса согласно xsd схеме; c. Осуществляет подписание запроса; d. Отправляет сформированный запрос в ФРЭМД по протоколу soap; e. Заполняет поля local_uid, message_id и sent_datetime в таблице emdrxchg.register_document. 7. Сервис emdr получает синхронный ответ от ФРЭМД о том, что запрос методом RegisterDocumentRequest был получен; 8. Заполняются поля header_message_id в таблице emdrxchg.register_document (если в синхронном ответе был статус success и идентификатор документа присвоенный в ФРЭМД); 9. Получение асинхронного ответа от ФРЭМД методом SendRegisterDocumentResult; 10. Заполнение таблицы emds.med_docs поля emdr_metadata результатами обработки документа в ФРЭМД (так же заполняются поля emdrId и doc_version если документ был успешно зарегистрирован);