- Создал(а) Неизвестный пользователь (i.nishchuk@micord.ru), редактировал(а) Воронин Андрей Сергеевич окт 06, 2025

Ревьюер | Проверено | Согласовано | Комментарий (замечания, предложения)
--- | --- | --- | ---
Ревьюер | Проверено | Согласовано | Комментарий (замечания, предложения)
Неизвестный пользователь (yuliya.semina) |

Неизвестный пользователь (malkov@micord.ru) |

- Предложение: добавить информацию о том, что парсинг шаблона и файла проходит до первой пустой колонки.

- Опечатка в формате даты: "DD.MM,YYYY"

Неизвестный пользователь (asvoronin@it-one.ru) |

GIT: https://git.gosuslugi.local/ervu/source/ervu-validate-recruits

## Назначение

Сервис форматно-логического контроля(ФЛК) ervu-validate-recruits предназначен для проверки файла в формате csv, полученного из личного кабинета реестра повесток для юридических лиц(ЛК РП ЮЛ).

## Описание

Сервис выполняет следующие функции:

- Подписывается на топик ervu.lkrp.download.request, который заполняется ЛК РП с информацией об успешной проверке файлов на вирусы.
- Скачивает файл из хранилища S3.
- Выполняет первичную проверку файла на соответствие формату и структуре, ориентируясь на шаблоны, хранящиеся в S3.
- Возвращает ответ в топик ervu.lkrp.download.response с одним из статусов: Код 04, 05, 09, 10
- Проводит вторичную проверку файла, снова ориентируясь на шаблоны из S3.
- Отправляет ответ в топик ervu.lkrp.validate.response в формате JSON, содержащий информацию о валидации файла, включая данные о корректно и/или некорректно заполненных строках.

## Валидация файла

Первичная проверка:

1. Загруженный файл должен быть в формате csv с кодировкой UTF-8.
2. Разделительный знак точка с запятой ";"
3. Файл должен соответствовать выбранному приложению(шаблону) для заполнения(расположение, название и количество столбцов).
   1. Сравнение шаблона с файлом пользователя осуществляется до первого пустого столбца в шаблоне.
   2. Шаблон на стороне сервера в формате xlsx.

Вторичная проверка:

1. Проверка строк на наличие пустых значений во всей строке. Тогда валидация файла должна быть сделана до этой строки, не содержащей в себе полезной нагрузки.
2. Проверка на заполненность обязательных полей: Наименование военного комиссариата, Фамилия, Имя, Дата рождения, Пол, Серия паспорта, Номер паспорта, Дата выдачи паспорта, СНИЛС. Минимум одно из трех полей должно быть заполнено: Адрес регистрации по месту жительства, Адрес регистрации по месту пребывания, Адрес фактического проживания (Кроме 2 приложения). А также:
   1. Для приложение 9: Работник/Учащийся, Принят/зачислен/уволен/отчислен.
      А также:
      - Сценарий 1: если поля Работник/Учащийся заполнено значением из справочника Работник и Принят/зачислен/уволен/отчислен = Принят. Тогда обязательные поля: Дата приема на работу/поступления в образовательную организацию, Должность/наименование профессии/специальности/направления подготовки, Номер трудового договора, Дата трудового договора.
      - Сценарий 2: если поле Работник/Учащийся = Учащийся и Принят/зачислен/уволен/отчислен = Зачислен. Обязательные поля: Дата приема на работу/поступления в образовательную организацию, Должность/наименование профессии/специальности/направления подготовки, Номер приказа о приеме/зачислении/увольнении/отчислении, Дата приказа о приеме/зачислении/увольнении/отчислении.
      - Сценарий 3: если поле Работник/Учащийся = Работник и Принят/зачислен/уволен/отчислен = Уволен. Обязательные поля: Дата увольнения с работы/отчисления из образовательной организации, Номер приказа о приеме/зачислении/увольнении/отчислении, Дата приказа о приеме/зачислении/увольнении/отчислении.
      - Сценарий 4: если поле Работник/Учащийся = Учащийся и Принят/зачислен/уволен/отчислен = Отчислен. Обязательные поля: Дата увольнения с работы/отчисления из образовательной организации, Номер приказа о приеме/зачислении/увольнении/отчислении, Дата приказа о приеме/зачислении/увольнении/отчислении.
      - Сравнение дат:
        - Дата приема на работу/поступления в образовательную организацию должна быть меньше или равна полям Дата увольнения с работы/отчисления из образовательной организации, Дата приказа о приеме/зачислении/увольнении/отчислении, Дата трудового договора. Допускается, когда Дата увольнения… пустое.
        - Дата увольнения с работы/отчисления из образовательной организации должна быть меньше или равна полям Дата приказа о приеме/зачислении/увольнении/отчислении

      - При заполнение Работник/Учащийся в поле Принят/зачислен/уволен/отчислен должен быть только один из 2 вариантов:
        Работник: Принят или Уволен.
        Учащийся: Зачислен или Отчислен

   2. Для приложение 10: Занимаемая должность (курс/класс), Номер телефона.

   3. Для приложение 11: Занимаемая должность (курс/класс), Номер телефона.

   4. Для приложение 12: Образование, Семейное положение, Должность (профессия).

   5. Для приложение 2: Вид изменений, Содержание изменений.

3. Формат и валидность данных:
   1. ФИО: не содержит латиницу, цифры и спец. знаки, кроме "-" и " ".
   2. Формат паспортных данных: Серия и номер паспорта должны состоять из 4 и 6 цифр (формат: "XXXX" "XXXXXX").
   3. Формат СНИЛС: должен состоять из 11 цифр (формат: "XXX-XXX-XXX XX").
   4. Формат даты: все даты (например, "Дата рождения", "Дата приема на работу/поступления в образовательную организацию", "Дата приказа", "Дата трудового договора") должны быть из цифр в формате "DD.MM.YYYY". Проверка на корректность формата и существование даты (например, нет ли даты 30 февраля).
   5. Адреса, должности/профессии/специальности/направления подготовки, наименование образовательного учреждения и т.п.: не содержат латиницу и знаки "!", "?", "@", "%", "$" и т.п. (используются: дефис "-", скобки "()", апостроф "'", косая черта "/", амперсанд "&", кавычки """, запятая ",", точка ".", плюс "+")
4. Проверка соответствия с листом "Справочник". Название столбцов должно совпадать и их ячейки должны быть заполнены вариантами из Справочника.
5. Логические проверки:
   1. Дата приема… должна быть раньше Даты приказа:
      В шаблоне Прил_9_Приемзачисление_увольнениеотчисление: "Дата приема на работу/поступления в образовательную организацию" <= "Дата приказа о приеме/зачислении/увольнении/отчислении"
   2. Если есть Дата увольнения..., она должна быть позже Дата приема…:
      В шаблоне Прил_9_Приемзачисление_увольнениеотчисление: "Дата приема на работу/поступления в образовательную организацию" <= "Дата увольнения с работы/отчисления из образовательной организации"
6. Проверка на скрытые символы. На пример: NBSP символ неразрывного пробела в тексте.

## Статусы файла:

Код | Статус | Описание
--- | --- | ---
Код | Статус | Описание
1 | Загрузка. ЛК РП | Файл принят до проверки на вирусы.
2 | Проверка не пройдена ЛК РП | Проверка на вирусы не пройдена
3 | Направлено в ЕРВУ ЛК РП | Проверка на вирусы пройдена успешно, файл направлен в очередь
4 | Получен ЕРВУ | Файл был принят в обработку
5 | Отклонено ЕРВУ | Структура файла не соответствует шаблону
6 | Принято частично ЕРВУ | Часть записей не прошла проверку ФЛК
7 | Принято ЕРВУ | Все записи успешно прошли проверку ФЛК
8 | Ошибка валидации | Ошибка при прохождении валидации
9 | Не получен ЕРВУ | Не удалось получить файл
10 | Отклонен ЕРВУ | Кодировка csv отличается от стандарта UTF-8
11 |
    Невозможно проверить файл ЛК РП
| Невозможно проверить файл по причине недоступности или ошибки в работе антивируса
12 | Некорректная ЭП | Неуспешная проверка ЭП
13 | Некорректная МЧД | Неуспешная проверка МЧД

## Коды ошибок

Код ошибки | Описание | Действия
SUC01 | Пройден ФЛК | Возвращаем номера строк
ERR01 | Документ не соответствует шаблону | прекращаем проверку
ERR02 | Обязательные поля не заполнены | Возвращаем номера строк
ERR03 | Дублирующиися записи | Возвращаем номера строк
ERR04 | Дублирование паспорта или СНИЛС | Возвращаем номера строк
ERR05 | Неверный формат даты | Возвращаем номера строк
ERR06 | Неверно заполнены паспортные данные | Возвращаем номера строк
ERR07 | Неверно заполнен СНИЛС | Возвращаем номера строк
ERR08 | Значение не соответствует справочнику | Возвращаем номера строк
ERR09 | Несоответствие дат | Возвращаем номера строк
ERR10 | Неверное количество заполненных колонок | Возвращаем номера строк
ERR11 | Содержит латиницу, цифры или недопустимые спец.символы | Возвращаем номера строк
ERR12 | Содержание скрытых символов | Возвращаем номера строк
ERR13 | Несоответствие взаимосвязанных значений | Возвращаем номера строк
ERR14 | Дата не может превышать текущую | Возвращаем номера строк

## Отображение на фронте

### ЛК РП

На фронте ЛК РП имеется возможность загрузить 5 видов шаблонов в формате CSV.

PDF

Загрузка файла
PDF
Сведения направлены
PDF

## Топики Kafka

### Consumer

ervu.lkrp.download.request

Ответ от ЛК РП ЮЛ о успешном проверенном файле на вирусы

Пример сообщения Развернуть исходный код
expand source?

1 2 3 4 5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
`{`
`` `"orgInfo"``: {`
`` `// идентификатор организации из ЕРВУ`
`` `"orgId"``:` `"a9cd9118-2e00-44ee-ba63-6d379ee1b45f"``,`
`` `// Название организации`
`` `"orgName"``:` `"Звезда"``,`
`` `"senderInfo"``: {`
`` `// идентификатор сотрудника в ЕСИА, ответственный за военно-учетную работу, загрузивший файл`
`` `"prnOid"``:` `"1000322154"``,`
`` `"lastName"``:` `"Максимов"``,`
`` `"firstName"``:` `"Геннадий"``,`
`` `"middleName"``:` `"Валентинович"`
`` `}`
`` `},`
`` `"fileInfo"``: {`
`` `// ИД файла, полученный при создании записи о файле в реестр организаций (в ЕРВУ)`
`` `"fileId"``:` `"001f999d-49fc-4c57-9311-720fe5536fd9"``,`
`` `// Название файла`
`` `"fileName"``:` `"Прил_9_Приемзачисление_увольнениеотчисление.xlsx"``,`
`` `"fileUrl"``:` `"s3://lkrp-av/test_12.csv"``,`
`` `// Номер шаблона (Формы)`
`` `"filePatternCode"``:` `"9"``,`
`` `"filePatternName"``:` `"Сведение о приеме на работу (увольнении), зачислении в образовательное учреждение (или отчислении)"``,`
`` `// Дата-время отправки`
`` `"departureDateTime"``:` `"12.03.2023 13:54"``,`
`` `// Таймзона`
`` `"timeZone"``:` `"+03:00"``,`
`` `"fileStatus"``: {`
`` `"code"``:` `"03"``,`
`` `"status"``:` `"Направлено в ЕРВУ"``,`
`` `"description"``:` `"Проверка на вирусы пройдена успешно, файл направлен в очередь"`
`` `}`
`` `}`
`}`

### Producer

ervu.lkrp.download.response

Ответ после первичной проверки с одним из статусов (Код 04, 05, 08, 09). Данный топик слушает сервис ervu-organization-registry команда РП и ЛК РП(Микорд), чтобы обновить статус файла.

Пример сообщения Развернуть исходный код
expand source?

1 2 3 4 5
6
7
8
9
10
11
12
13
14
15
16
17
`{`
`` `"orgInfo"``: {`
`` `"orgName"``:` `"Звезда"``,`
`` `"orgId"``:` `"a9cd9118-2e00-44ee-ba63-6d379ee1b45f"``,`
`` `"prnOid"``:` `"1000322154"`
`` `},`
`` `"fileInfo"``: {`
`` `"fileId"``:` `"001f999d-49fc-4c57-9311-720fe5536fd9"``,`
`` `"fileName"``:` `"Прил_9_Приемзачисление_увольнениеотчисление.xlsx"``,`
`` `"fileUrl"``:` `"s3://lkrp-av/test_12.csv"``,`
`` `"fileStatus"``: {`
`` `"code"``:` `"04"``,`
`` `"status"``:` `"Получен ЕРВУ"``,`
`` `"description"``:` `"Файл был принят в обработку"`
`` `}`
`` `}`
`}`

ervu.lkrp.validate.response

Ответ после валидации, содержащий информацию о корректно и/или некорректно заполненных строках в файле. Данный топик слушает сервис ervu-organization-registry, чтобы начать парсинг файла.

Пример сообщения Развернуть исходный код
expand source?

1 2 3 4 5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
`{`
`` `"orgInfo"``: {`
`` `"orgName"``:` `"Звезда"``,`
`` `"orgId"``:` `"a9cd9118-2e00-44ee-ba63-6d379ee1b45f"``,`
`` `"prnOid"``:` `"1000322154"`
`` `},`
`` `"fileInfo"``: {`
`` `"fileId"``:` `"001f999d-49fc-4c57-9311-720fe5536fd9"``,`
`` `"fileUrl"``:` `"s3://lkrp-av/test_12.csv"``,`
`` `"fileStatus"``: {`
`` `"code"``:` `"07"``,`
`` `"status"``:` `"Принято ЕРВУ"``,`
`` `"description"``:` `"Все записи успешно прошли проверку ФЛК"`
`` `}`
`` `},`
`` `"validationInfo"``: [`
`` `{`
`` `"code"``:` `"SUC01"``,`
`` `"description"``:` `"Пройден ФЛК"``,`
`` `"rows"``: [`
`` `2`
`` `]`
`` `}`
`` `],`
`` `"rowsSuccess"``: 1,`
`` `"rowsCount"``: 1`
`}`

## S3 корзины

Сервис имеет доступ к следующим корзинам

Пользователь | Корзина | Права на UAT
--- | --- | ---
Пользователь | Корзина | Права на UAT
ervu-validate-recruits | mz-attachment | read
ervu-validate-recruits | mz-mock-adapter | read
ervu-validate-recruits | validate-template | read, write
ervu-validate-recruits | lkrp-av | read

validate-template — корзина, используемая исключительно нашим сервисом, в которой хранятся шаблоны(формы) для сверки с загружаемыми пользователями файлами.

lkrp-av — корзина, создаваемая на стороне ЛК РП и используемая в нескольких сервисах. В этой корзине хранятся файлы, которые прошли проверку антивирусом со стороны ЛК РП. Эти файлы необходимо провалидировать через сервис ervu-validate-recruits и распарсить сервисом ervu-organization-registry.

## Схема взаимодействия с сервисами

## Файлы по сервису

1. Формы(Шаблоны) и приложения

2. Инструкция_по_заполнению_шаблонов_v_1_0_6.docx

3. Инструкция_по_сохранению_их_CSV_v_1_0_4.docx
4. Файлы_для_теста_v4 от 02.10.2024

1. Формы_и_Примеры_от_17.09.2024.7z
2. Документ
3. Документ
4. Файлы_для_теста_v4.7z

Фильтровать данные таблицы Создать сводную таблицу Создать диаграмму
Configure buttons visibility
Нравится Станьте первыми кому понравится это

- Нет меток
- Редактировать метки

Написать комментарий...

Добавить комментарий

Обзор
Инструменты контента
{"serverDuration": 124, "requestCorrelationId": "b45377f05a69cbb5"}
search
recentlyviewed
attachments
weblink
advanced
image-effects
image-attributes

- Абзац

- Жирный
- Курсив
- Подчеркнутый
- Cредство выбора цвета
  Дополнительные цвета
- Форматирование

- Маркированный список
- Нумерованный список

- Список задач

- Убрать отступ
- Сделать отступ

- Выровнить по левому краю
- Выровнить по центру
- Выровнить по правому краю

- Разметка страницы

- Ссылка

- Таблица

- Вставить

- Разметка страницы

- Отменить
- Восстановить

- Найти/Заменить

- Справка по быстрым ссылкам на клавиатуре

Подключение...