SUPPORT-9525: Fix

This commit is contained in:
Eduard Tihomiorv 2025-10-31 17:03:59 +03:00
parent d106b37d8e
commit 17b2469b2b
5 changed files with 59 additions and 45 deletions

View file

@ -339,16 +339,19 @@ public class EmployeeInfoFileUploadService {
String signerInfo = verifyDocumentSignResponse.getSignerInfo();
Map<String, String> signerInfoMap = parseKeyValuePairs(signerInfo);
String chiefMiddleName = chiefModel.getPerson().getMiddleName();
String chiefLastName = chiefModel.getPerson().getLastName();
String chiefFirstName = chiefModel.getPerson().getFirstName();
boolean isSignerLastName = signerInfoMap.get("SN").equalsIgnoreCase(chiefLastName);
boolean isSignerFirstNameAndMiddleName = signerInfoMap.get("G")
.equalsIgnoreCase(chiefFirstName + " " + chiefMiddleName);
boolean isSignerOgrn = signerInfoMap.get("ОГРН").equalsIgnoreCase(ogrn);
if (isSignerLastName && isSignerFirstNameAndMiddleName && isSignerOgrn) {
String signSnils = signerInfoMap.get("СНИЛС");
boolean isSignerSnils = signSnils.equalsIgnoreCase(
chiefModel.getPerson().getSnils().replaceAll("[\\s-]", ""));
if (isSignerSnils) {
String signOgrn = signerInfoMap.get("ОГРН");
if (signOgrn == null ) {
handeSignError(fileInfo, signFileInfo, uploadOrgInfo, response);
throw new LocalizedException("sign_ogrn_null", MESSAGE_SOURCE);
}
if (!signOgrn.equals(ogrn)) {
handeSignError(fileInfo, signFileInfo, uploadOrgInfo, response);
throw new LocalizedException("sign_ogrn_invalid", MESSAGE_SOURCE);
}
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
new FileInfo[] {fileInfo, signFileInfo}, fileInfo.getFileStatus()
);
@ -372,24 +375,13 @@ public class EmployeeInfoFileUploadService {
if (mchdFile == null) {
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
);
List<String> falseResults = new ArrayList<>();
if (!isSignerLastName) {
falseResults.add("фамилия");
}
if (!isSignerFirstNameAndMiddleName) {
falseResults.add("имя или отчество");
}
if (!isSignerOgrn) {
falseResults.add("организация");
}
String result = String.join(", ", falseResults);
throw new LocalizedException("mchd_null", MESSAGE_SOURCE, result);
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
}
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo}, fileInfo.getFileStatus()
);
try {
validateMchd(mchdFile, ogrn, signerInfoMap.get("СНИЛС"));
validateMchd(mchdFile, ogrn, signSnils);
if (sendMessage(fileStatusResponse)) {
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
@ -567,10 +559,15 @@ public class EmployeeInfoFileUploadService {
}
MchdInfoModel mchdInfoModel = mchdService.getMchdInfoModel(mchdGuid);
LocalDate now = LocalDate.now();
if (!mchdInfoModel.getStatus().equals("A") || now.isAfter(mchdInfoModel.getExpiredOn())
|| mchdInfoModel.getIssuedOn().isAfter(now)) {
if (!mchdInfoModel.getStatus().equals("A")) {
throw new LocalizedException("mchd_status_invalid", MESSAGE_SOURCE);
}
if (now.isAfter(mchdInfoModel.getExpiredOn())) {
throw new LocalizedException("mchd_expired", MESSAGE_SOURCE);
}
if (mchdInfoModel.getIssuedOn().isAfter(now)) {
throw new LocalizedException("mchd_issued_on_invalid", MESSAGE_SOURCE);
}
boolean validAgent = mchdInfoModel.getAgents()
.getElements()
.stream()
@ -581,7 +578,13 @@ public class EmployeeInfoFileUploadService {
while (mchdInfoModel.getParentGuid() != null) {
mchdInfoModel = mchdService.getMchdInfoModel(mchdInfoModel.getParentGuid());
if (!mchdInfoModel.getStatus().equals("A")) {
throw new LocalizedException("mchd_tree_expired", MESSAGE_SOURCE);
throw new LocalizedException("mchd_tree_status_invalid", MESSAGE_SOURCE, mchdInfoModel.getGuid());
}
if (now.isAfter(mchdInfoModel.getExpiredOn())) {
throw new LocalizedException("mchd_tree_expired", MESSAGE_SOURCE, mchdInfoModel.getGuid());
}
if (mchdInfoModel.getIssuedOn().isAfter(now)) {
throw new LocalizedException("mchd_tree_issued_on_invalid", MESSAGE_SOURCE, mchdInfoModel.getGuid());
}
}
MchdInfoModel.Element principal = mchdInfoModel.getPrincipals().getElements().get(0);

View file

@ -31,7 +31,7 @@ public class MchdService {
public MchdInfoModel getMchdInfoModel(String guid) {
String accessToken = EsiaAuthInfoStore.getSystemEsiaToken();
boolean isNewToken = (accessToken == null);
boolean isNewToken = accessToken == null;
if (isNewToken) {
accessToken = esiaAuthService.getSystemAccessToken();
}

View file

@ -5,12 +5,17 @@ crl_certificate_expired=Превышено время ожидания отве
cert_trust_revocation=Неизвестен статус отзыва сертификата или одного из сертификатов в цепочке (проблема с CRL)
cert_untrusted_root=Сертификат или цепочка сертификатов основана на ненадежном корневом сертификате
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации. Не совпадает {0}
temp_sign_error=Ошибка проверки файлов. Подписант не является руководителем организации. Приложите подпись руководителя
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
file_sign_validate=Некорректная электронная подпись
mchd_validate_agent=Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
mchd_null=Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации.
sign_ogrn_null=Приложена электронная подпись физического лица.
sign_ogrn_invalid=Файл подписан не той организацией, под которой была осуществлена загрузка.
mchd_status_invalid=Недействующая машиночитаемая доверенность.
mchd_issued_on_invalid=Не наступил срок действия машиночитаемой доверенности.
mchd_expired=Истек срок действия машиночитаемой доверенности.
mchd_tree_status_invalid=Одна из родительских доверенностей недействующая. Номер доверенности: {0}
mchd_tree_issued_on_invalid=У одной из родительских доверенностей истек срок действия. Номер доверенности: {0}
mchd_tree_expired=У одной из родительских доверенностей не наступил срок действия. Номер доверенности: {0}
mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Файлы заражены вирусом
mchd_cant_parse=Некорректный формат машиночитаемой доверенности

View file

@ -5,11 +5,17 @@ crl_certificate_expired=Превышено время ожидания отве
cert_trust_revocation=Неизвестен статус отзыва сертификата или одного из сертификатов в цепочке (проблема с CRL)
cert_untrusted_root=Сертификат или цепочка сертификатов основана на ненадежном корневом сертификате
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации. Не совпадает {0}
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
file_sign_validate=Некорректная электронная подпись
mchd_validate_agent=Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
mchd_null=Подписант не является руководителем организации и отсутствует машиночитаемая доверенность.
sign_ogrn_null=Приложена электронная подпись физического лица.
sign_ogrn_invalid=Файл подписан не той организацией, под которой была осуществлена загрузка.
mchd_status_invalid=Недействующая машиночитаемая доверенность.
mchd_issued_on_invalid=Не наступил срок действия машиночитаемой доверенности.
mchd_expired=Истек срок действия машиночитаемой доверенности.
mchd_tree_status_invalid=Одна из родительских доверенностей недействующая. Номер доверенности: {0}
mchd_tree_issued_on_invalid=У одной из родительских доверенностей истек срок действия. Номер доверенности: {0}
mchd_tree_expired=У одной из родительских доверенностей не наступил срок действия. Номер доверенности: {0}
mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Файлы заражены вирусом
mchd_cant_parse=Некорректный формат машиночитаемой доверенности