Перейти к содержанию

Руководство по маппингу

Практический гайд: как данные из типичной системы вуза соотносятся с сущностями API.

Общий порядок заполнения данных

Сущности зависят друг от друга — важно соблюдать порядок создания:

1. Справочники вуза (OrgDirectionList, DictionaryValueList)
2. Образовательные программы (EducationalProgramList)
3. Приёмная кампания (CampaignList)
4. Конкурсы (CompetitionList)
5. Конкурсные группы (CompetitiveGroupList)
   ├── Вступительные испытания (EntranceTestList)
   ├── Расписание ВИ (EntranceTestPlaceList)
   ├── Льготы (CompetitiveGroupBenefitList)
   └── Индивидуальные достижения (CompetitiveGroupAchievementList)
6. Заявления (ApplicationList)
   ├── Профиль поступающего (EntrantList)
   └── Документы (DocumentList)

Типы данных API → язык программирования

Тип XSD Ограничение Java C# Python Примечание
BigIntType 1 .. 9223372036854775807 long long int ID объекта в токене, ID из ФИС
Int4Type 1 .. 2147483647 int int int Ссылки на классификаторы
Int2Type 1 .. 32767 short short int Маленькие классификаторы (пол)
NonNegativeInt4Type 0 .. 2147483647 int int int Баллы, количества
UidType string, 1–36 String string str UUID v4, 36 символов
SnilsType \d{11} String string str Только 11 цифр, без пробелов и дефисов
xs:date YYYY-MM-DD LocalDate DateOnly date Формат: 2006-01-02
xs:dateTime RFC3339 OffsetDateTime DateTimeOffset datetime Формат: 2006-01-02T15:04:05+03:00
String256Type 1–256 chars String string str ⚠️ в разных схемах maxLength разный (см. KNOWN-ISSUES)
FuiType 60–62 chars String string str Формат уникального идентификатора
SourceType enum enum enum str Oovo / Epgu / SSPVO
Value10000Type float 0–10000 float float float Баллы ЕГЭ и ВИ

Классификаторы — кэширование

Классификаторы редко меняются, их стоит загружать один раз в начале сессии и кэшировать:

/api/cls/get?ClsType=GenderCls         — пол (2 значения)
/api/cls/get?ClsType=DocumentTypeCls   — типы документов (~50 значений)
/api/cls/get?ClsType=OksmCls           — гражданство (страны мира)
/api/cls/get?ClsType=RegionCls         — регионы РФ
/api/cls/get?ClsType=SubjectCls        — предметы ЕГЭ
/api/cls/get?ClsType=BenefitCls        — льготы
/api/cls/get?ClsType=EducationLevelCls — уровни образования
/api/cls/get?ClsType=BudgetLevelCls    — уровни бюджета

Используй поле Actual: true — неактуальные значения оставлять в UI не стоит, но при чтении они могут встречаться в старых данных.

Частые ловушки при маппинге

СНИЛС. Хранишь с пробелами 123-456-789 00? Очищай до 11 цифр перед отправкой.

Даты. Проверяй timezone в xs:dateTime — сервер работает в UTC+3, передавай со смещением (+03:00), иначе ошибка 207.

IdObject. Это не ID из ФИС, это твой временный ID объекта в рамках одного токена. Используй порядковый номер внутри токена (1, 2, 3...). Настоящий ID из ФИС придёт в Response.

Адреса. Нужно передавать минимум один адрес — регистрационный (IsRegistration: true). Если адрес проживания отличается — добавляй второй объект.

Гражданство vs. страна рождения. IdOksm — это гражданство (классификатор OksmCls), не страна рождения. Место рождения — текстовое поле Birthplace.

Первое высшее образование. FirstHigherEducation: true означает «у поступающего НЕТ высшего образования» (признак первого ВО). Логика инвертированная относительно интуитивного понимания.