Шаблоны объектов#

Common Object Template (Общий шаблон объектов)#

OID: 10000000-0000-0000-0000-200000000000

Наименование: Common object template

Описание: Базовый шаблон, содержащий общие атрибуты для всех типов объектов.

Атрибуты:#

Атрибут

Описание

name

Уникальное наименование объекта в системе

description

Дополнительное текстовое описание объекта в свободной форме

documentation

Техническая документация для объекта в формате AsciiDoc

subtype

Тип объекта. Необходим для разделения объектов одного класса по их назначению. Например, объекты OrgType могут быть: организация, подразделение, команда и т.д.

Role Object Template (Шаблон роли)#

OID: 10000000-0000-0000-0000-200000000300

Наименование: Role object template

Описание: Шаблон для объектов типа Role. Наследует атрибуты от Common Object Template.

Наследование:#

  • Включает: Common object template (OID: 10000000-0000-0000-0000-200000000000)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

name

-

❌

❌

❌

Наименование (заблокировано)

identifier

-

✅

❌

❌

Идентификатор роли

extension/criticality_pdn

-

❌

❌

❌

Критичность по ПДН

extension/criticality_bt

-

❌

❌

❌

Критичность по БТ

extension/criticality_dpk

-

❌

❌

❌

Критичность по ДПК

extension/incompatibleRoles

-

✅

✅

✅

Несовместимые роли

extension/date_last_change

-

❌

❌

❌

Дата последнего изменения

extension/date_last_verification

-

❌

❌

❌

Дата последней проверки

extension/sendVerification

-

❌

❌

❌

Отправка проверки

extension/version.id

version.id

❌

❌

❌

ID версии

extension/auditor_role

auditor_role

❌

❌

❌

Роль аудитора

extension/administrator_role

administrator_role

❌

❌

❌

Роль администратора

extension/tuz_role

tuz_role

❌

❌

❌

Роль ТУЗ

extension/insider_bitl

insider_bitl

❌

❌

❌

Инсайдер БИТЛ

extension/insider_issuer

insider_issuer

❌

❌

❌

Инсайдер эмитент

extension/insider_rcb

insider_rcb

❌

❌

❌

Инсайдер РЦБ

extension/insider_208_fz

insider_208_fz

❌

❌

❌

Инсайдер 208-ФЗ

extension/insider_controlling_org

insider_controlling_org

❌

❌

❌

Инсайдер контролирующей организации

extension/link.service_desk_id

link.service_desk_id

❌

❌

❌

Ссылка на Service Desk ID

extension/Administrative_status

Administrative_status

❌

❌

❌

Административный статус

extension/consistency

consistency

❌

❌

❌

Консистентность

extension/controlledByIDM

controlledByIDM

❌

❌

❌

Управляется IDM

extension/displayNameOrig

displayNameOrig

❌

❌

❌

Оригинальное отображаемое имя

Маппинги:#

name - Генерация имени с добавлением resourceOid

  • Источники: extension/resourceOid, name

  • Цель: name

  • Условие: resourceOid != null && !basic.norm(name).contains(basic.norm("_${resourceOid}"))

  • Код:

return "${name}_${resourceOid}" + iterationToken

User Template KIS (Шаблон пользователя KIS)#

OID: 10000000-0000-0000-0000-200000000200

Наименование: User Template KIS

Описание: Шаблон для объектов типа User, интегрируемых с КИС. Наследует атрибуты от Common Object Template.

Наследование:#

  • Включает: Common object template (OID: 10000000-0000-0000-0000-200000000000)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

fullName

-

✅

❌

❌

Полное имя пользователя (ФИО)

givenName

-

✅

✅

❌

Имя пользователя

familyName

-

✅

✅

❌

Фамилия пользователя (обязательное поле)

additionalName

-

✅

✅

❌

Отчество пользователя

nickName

-

✅

❌

❌

Псевдоним пользователя

title

-

✅

❌

❌

Должность пользователя

telephoneNumber

-

✅

❌

❌

Основной номер телефона (множественный)

employeeNumber

-

✅

❌

❌

Табельный номер сотрудника (множественный)

extension/birthdate

-

✅

❌

❌

Дата рождения

extension/sbercbdkiguid

-

✅

❌

❌

GUID КДИ (Сбер)

extension/sbercbdkiouguid

-

✅

❌

❌

GUID подразделения КДИ (Сбер)

extension/hiredate

-

✅

❌

❌

Дата приема на работу

extension/ismanager

-

✅

❌

❌

Признак руководителя

extension/sbersmkis

-

✅

❌

❌

СМ КИС (Сбер)

extension/titleId

-

✅

❌

❌

ID должности

extension/titleLong

-

✅

❌

❌

Полное наименование должности

extension/sex

-

✅

❌

❌

Пол

extension/snils

-

✅

❌

❌

СНИЛС

extension/sberPlansID

-

✅

❌

❌

ID плана (Сбер)

extension/user_status

-

✅

❌

❌

Статус пользователя

extension/user_statusML

-

✅

❌

❌

Статус пользователя ML

extension/createDate

-

✅

❌

❌

Дата создания

extension/kis_id

-

✅

❌

❌

ID КИС

extension/sapLogin

-

✅

❌

❌

Логин SAP

extension/emailAddressInternal

-

✅

❌

✅

Внутренний email адрес

extension/emailAddressExternal

-

✅

❌

✅

Внешний email адрес

extension/rootOrganizationName

-

✅

❌

❌

Наименование корневой организации

extension/mailAlias

-

✅

❌

❌

Почтовый псевдоним

extension/dn_card

-

✅

❌

❌

DN карты

extension/dn_account

-

✅

❌

❌

DN учетной записи

extension/firedate

-

✅

❌

❌

Дата увольнения

extension/sberkisource

-

✅

❌

❌

Источник КИС (Сбер)

extension/phoneinternal

-

✅

❌

❌

Внутренний телефон

extension/absCode

-

✅

❌

❌

Код АБС

extension/absDescr

-

✅

❌

❌

Описание АБС

extension/absBegDate

-

✅

❌

❌

Дата начала АБС

extension/absEndDate

-

✅

❌

❌

Дата окончания АБС

extension/sberGroupCode

-

✅

❌

❌

Код группы (Сбер)

extension/sberGroupDescr

-

✅

❌

❌

Описание группы (Сбер)

extension/sbermanageraccess

-

✅

❌

❌

Доступ менеджера (Сбер)

extension/sberworktype

-

✅

❌

❌

Тип работы (Сбер)

extension/sberinsidertype

-

✅

❌

❌

Тип инсайдера (Сбер)

extension/sberRiskCoordinator

-

✅

❌

❌

Координатор рисков (Сбер)

extension/orgAbbr

-

✅

❌

❌

Сокращенное наименование организации

extension/givenName_history

-

✅

❌

❌

История имен

extension/familyName_history

-

✅

❌

❌

История фамилий

extension/additionalName_history

-

✅

❌

❌

История отчеств

extension/ki_id

-

✅

❌

❌

ID КИ

extension/source_id

-

✅

❌

❌

ID источника

extension/employeeID

-

✅

❌

❌

ID сотрудника

extension/sberkisourceabbr

-

✅

❌

❌

Сокращенный источник КИС (Сбер)

extension/connectmodel

-

✅

❌

❌

Модель подключения

extension/connectmodelname

-

✅

❌

❌

Наименование модели подключения

extension/usertype

-

✅

❌

❌

Тип пользователя

emailAddress

emailAddress

✅

❌

❌

Email адрес

organization

-

✅

❌

❌

Организация

extension/isimSecondaryIdentifier

-

✅

❌

❌

Вторичный идентификатор ISIM

extension/sbertbcode

-

✅

❌

❌

Код ТБ (Сбер)

extension/needReconcile

-

✅

❌

❌

Требуется сверка

extension/need_sync_isim

-

✅

❌

❌

Требуется синхронизация с ISIM

extension/contractStatus

-

✅

❌

❌

Статус контракта

extension/primaryAuthInternal

-

✅

❌

❌

Основная внутренняя аутентификация

extension/rolesLiteInternal

-

✅

❌

❌

Упрощенные внутренние роли

extension/primaryAuthExternal

-

✅

❌

❌

Основная внешняя аутентификация

extension/rolesLiteExternal

-

✅

❌

❌

Упрощенные внешние роли

extension/primaryAuthPCIDSS

-

✅

❌

❌

Основная аутентификация PCI DSS

extension/rolesLitePCIDSS

-

✅

❌

❌

Упрощенные роли PCI DSS

extension/sberPostponedLockType

-

✅

✅

✅

Тип отложенной блокировки (Сбер)

extension/sberPostponedLockDate

-

✅

✅

✅

Дата отложенной блокировки (Сбер)

extension/justification

-

✅

✅

✅

Обоснование

extension/generatedPrimaryIdentifier

-

✅

❌

❌

Сгенерированный первичный идентификатор

extension/roleMembershipInfo

-

❌

❌

❌

Информация о членстве в ролях

extension/ownerEmployeeNumber

-

✅

❌

❌

Табельный номер вышестоящей карточки

extension/firstStageCleanup

-

✅

❌

❌

Признак проведения первого этапа очистки ПДН

extension/secondStageCleanup

-

✅

❌

❌

Признак проведения второго этапа очистки ПДН

Игнорируемые атрибуты (processing: ignore):#

  • honorificSuffix

  • honorificPrefix

  • preferredLanguage

  • locale

  • timezone

  • costCenter

  • organizationalUnit

  • locality

  • description

  • documentation

  • lifecycleState

  • indestructible

  • jpegPhoto

Маппинги:#

1. Заполнение атрибута fullName

  • Источники: givenName, additionalName, familyName

  • Код:

def fullName = new StringBuilder()
fullName.append(familyName)
if (givenName != null) {
    fullName.append(" ")
    fullName.append(givenName)
}
if (additionalName != null) {
    fullName.append(" ")
    fullName.append(additionalName)
}
return fullName.toString()

2. Заполнение атрибута emailAddressExternal

  • Источники: extension/mailAlias

  • Код:

if (mailAlias != null) {
    return mailAlias + "@" + "sberbank.ru";
}
return null;

3. Заполнение атрибута emailAddressInternal

  • Источники: extension/mailAlias

  • Код:

if (mailAlias != null) {
    return mailAlias + "@" + "omega.sbrf.ru";
}
return null;

4. Заполнение lifecycleState на основе user_status

  • Источники: extension/user_status

  • Код:

import com.evolveum.midpoint.schema.constants.SchemaConstants;

if (user_status == 0) {
    return SchemaConstants.LIFECYCLE_ACTIVE; // Processed Records
} else if (user_status == 1) {
    return SchemaConstants.LIFECYCLE_DRAFT; // Ready Records
} else if (user_status == 2) {
    return SchemaConstants.LIFECYCLE_FAILED; // Rejected Records
}
return null;

Валидация:#

familyName - Проверка на обязательность

import com.evolveum.midpoint.prism.polystring.PolyString
import com.evolveum.midpoint.schema.result.OperationResult
import com.evolveum.midpoint.schema.result.OperationResultStatus

def result = new OperationResult("Validate family name")
result.setMessage("FamilyName cannot be null or blank")
result.setStatus(OperationResultStatus.SUCCESS)
if (input == null || (input instanceof PolyString && input.getOrig().isBlank())) {
    result.setStatus(OperationResultStatus.FATAL_ERROR)
}
return result.createOperationResultType()

Org Template KIS (Шаблон организации KIS)#

OID: 10000000-0000-0000-0000-200000000100

Наименование: Org Template KIS

Описание: Шаблон для объектов типа Org, интегрируемых с КИС. Наследует атрибуты от Common Object Template.

Наследование:#

  • Включает: Common object template (OID: 10000000-0000-0000-0000-200000000000)

Атрибуты:#

Атрибут

Чтение

Добавление

Изменение

Описание

name

✅

❌

❌

Уникальное наименование подразделения в системе

displayName

✅

❌

❌

Удобочитаемое наименование подразделения

description

✅

❌

❌

Дополнительное описание для подразделения

identifier

✅

❌

❌

Уникальный идентификатор подразделения

extension/parent_org

✅

❌

❌

Родительская организация

extension/sbercbdkiouguid

✅

❌

❌

GUID подразделения КДИ (Сбер)

extension/sbercbdkiouname

✅

❌

❌

Наименование подразделения КДИ (Сбер)

extension/ou

✅

❌

❌

Организационная единица

extension/sbereasupcodebranch

✅

❌

❌

Код филиала (Сбер)

extension/sbereasupcodesubbranch

✅

❌

❌

Код подфилиала (Сбер)

extension/sbereasupcodetb

✅

❌

❌

Код ТБ (Сбер)

extension/sbereasupfuncblockcode

✅

❌

❌

Код функционального блока (Сбер)

extension/sbereasupfuncblockname

✅

❌

❌

Наименование функционального блока (Сбер)

extension/manager

✅

❌

❌

Руководитель

extension/archive

✅

❌

❌

Архив

extension/extid

✅

❌

❌

Внешний ID

extension/ci

✅

❌

❌

CI

extension/ngamGuid

✅

❌

❌

GUID NGAM

extension/guid_co

✅

❌

❌

GUID CO

extension/resourceOid

✅

❌

❌

OID ресурса

extension/resourceType

✅

❌

❌

Тип ресурса

Игнорируемые атрибуты (processing: ignore):#

  • documentation

  • lifecycleState

  • tenant

  • preferredLanguage

  • locale

  • timezone

  • mailDomain

  • securityPolicyRef

  • emailAddress

  • displayOrder

  • telephoneNumber

  • costCenter

  • locality

  • indestructible

  • jpegPhoto

  • requestable

  • delegable

  • idempotence

  • riskLevel

Маппинги:#

assignment - Назначение родительской организации

  • Условие: Исключая определенные организации

  • Код:

import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType

String parentOrg = mapLib.execute("getExtFieldValueAsString", ["focus": focus, "fieldName": "parent_org"]);
String orgOid
if (parentOrg == null) {
    // ORG: Кадровая служба
    orgOid = "3fac1eb0-07bd-4221-98ba-f5c41ef20b4d"
} else {
    def query = midpoint.getPrismContext().queryFor(OrgType.class)
            .item(OrgType.F_IDENTIFIER).eq(parentOrg)
            .build()
    def searchResult = midpoint.searchObjects(OrgType.class, query)
    if (searchResult.size() == 0) {
        // ORG: С ошибочным родителем
        orgOid = "e9018830-54f2-4010-aa03-25a4144e2fab"
    } else if (searchResult.size() == 1) {
        orgOid = searchResult.get(0).getOid();
    } else {
        throw new RuntimeException("Найдено несколько организаций по идентификатору: " + parentOrg)
    }
}

def assignment = new AssignmentType();
def objectReference = new ObjectReferenceType();
objectReference.setOid(orgOid);
objectReference.setType(OrgType.COMPLEX_TYPE);
assignment.setTargetRef(objectReference);

return assignment

Исключаемые организации:

  • e494f8fc-0ae4-4ea7-9aa3-19425a678a61 - Функциональная Организационная Структура

  • 3fac1eb0-07bd-4221-98ba-f5c41ef20b4d - Кадровая служба

  • fe96cfc4-7c3a-4e58-a330-a78e3c17c38c - Сберджайл

  • 7e6c3a3f-1e36-4347-b9ed-9684f6219f8b - Roles catalog

Meta Role Object Template (Шаблон мета-роли)#

OID: 10000000-0000-0000-0000-400000000300

Наименование: Meta role object template

Описание: Шаблон для мета-ролей. Наследует атрибуты от Role Object Template.

Наследование:#

  • Включает: Role object template (OID: 10000000-0000-0000-0000-200000000300)

Атрибуты:#

Атрибут

Чтение

Добавление

Изменение

Описание

name

✅

❌

❌

Наименование

description

✅

❌

❌

Описание

displayName

✅

❌

❌

Отображаемое имя

extension/incompatibleRoles

✅

❌

❌

Несовместимые роли

extension/date_last_change

✅

❌

❌

Дата последнего изменения

extension/guid_co

✅

❌

❌

GUID CO

extension/ci

✅

❌

❌

CI

extension/version.id

✅

❌

❌

ID версии

extension/version.main

✅

❌

❌

Основная версия

extension/version.auditor_role

✅

❌

❌

Версия роли аудитора

extension/version.administrator_role

✅

❌

❌

Версия роли администратора

extension/version.tuz_role

✅

❌

❌

Версия роли ТУЗ

extension/version.insider_bitl

✅

❌

❌

Версия инсайдера БИТЛ

extension/version.insider_issuer

✅

❌

❌

Версия инсайдера эмитент

extension/version.insider_rcb

✅

❌

❌

Версия инсайдера РЦБ

extension/version.insider_208_fz

✅

❌

❌

Версия инсайдера 208-ФЗ

extension/version.insider_controlling_org

✅

❌

❌

Версия инсайдера контролирующей организации

extension/criticality_pdn

✅

❌

❌

Критичность по ПДН

extension/criticality_bt

✅

❌

❌

Критичность по БТ

extension/criticality_dpk

✅

❌

❌

Критичность по ДПК

extension/version.Administrative_status

✅

❌

❌

Версия административного статуса

extension/version.comment

✅

❌

❌

Версия комментария

extension/version.psi_protocol_link

✅

❌

❌

Версия ссылки на протокол ПСИ

extension/link.service_desk_id

✅

❌

❌

Ссылка на Service Desk ID

extension/consistency

✅

❌

❌

Консистентность

Resource Role Object Template (Шаблон роли ресурса)#

OID: 10000000-0000-0000-0000-200000000400

Наименование: Resource Role Object Template

Описание: Шаблон для ролей ресурсов. Наследует атрибуты от Role Object Template.

Наследование:#

  • Включает: Role object template (OID: 10000000-0000-0000-0000-200000000300)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

extension/criticality_pdn

-

✅

✅

✅

Критичность по ПДН

extension/criticality_bt

-

✅

✅

✅

Критичность по БТ

extension/criticality_dpk

-

✅

✅

✅

Критичность по ДПК

extension/date_last_change

-

✅

❌

❌

Дата последнего изменения

extension/date_last_verification

-

✅

❌

❌

Дата последней проверки

extension/sendVerification

-

✅

❌

❌

Отправка проверки

extension/version.id

version.id

✅

❌

❌

ID версии

extension/auditor_role

auditor_role

✅

❌

❌

Роль аудитора

extension/administrator_role

administrator_role

✅

❌

❌

Роль администратора

extension/tuz_role

tuz_role

✅

❌

❌

Роль ТУЗ

extension/insider_bitl

insider_bitl

✅

❌

❌

Инсайдер БИТЛ

extension/insider_issuer

insider_issuer

✅

❌

❌

Инсайдер эмитент

extension/insider_rcb

insider_rcb

✅

❌

❌

Инсайдер РЦБ

extension/insider_208_fz

insider_208_fz

✅

❌

❌

Инсайдер 208-ФЗ

extension/insider_controlling_org

insider_controlling_org

✅

❌

❌

Инсайдер контролирующей организации

extension/link.service_desk_id

link.service_desk_id

❌

❌

❌

Ссылка на Service Desk ID

extension/Administrative_status

Administrative_status

✅

❌

❌

Административный статус

extension/consistency

consistency

✅

❌

❌

Консистентность

extension/displayNameOrig

displayNameOrig

✅

❌

❌

Оригинальное отображаемое имя

extension/accountingProlongedInactivity

displayNameOrig

✅

✅

✅

Учет длительной неактивности. Если false, то функционал учета длительной неактивности отключается (Исключение для карточек и учеток для которых accountingProlongedInactivity = true).

extension/acceptableInactivityPeriodAfterCreate

displayNameOrig

✅

✅

✅

Допустимый период неактивности до блокировки после создания УЗ

extension/acceptableInactivityPeriod

displayNameOrig

✅

✅

✅

Допустимый период неактивности до блокировки

extension/significantActivities

displayNameOrig

✅

✅

✅

Перечень значимых активностей в УЗ

extension/activeSessionDuration

displayNameOrig

✅

✅

✅

Длительность сессии активности

Спецификация итерации:#

  • Максимум итераций: 999

  • Токен итерации:

if (iteration == 0) {
    return "";
} else {
    return "_" + sprintf("%03d", iteration);
}

7. Resource Template (Шаблон ресурса)#

OID: 10000000-0000-0000-0000-200000000500

Наименование: Resource Template

Описание: Шаблон для объектов типа Resource. Наследует атрибуты от Common Object Template.

Наследование:#

  • Включает: Common object template (OID: 10000000-0000-0000-0000-200000000000)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

extension/rateLimitCounter

Rate Limit Counter

✅

❌

❌

Счетчик ограничения скорости

extension/previousRateLimitCounter

Previous Rate LimitCounter

✅

❌

❌

Предыдущий счетчик ограничения скорости

extension/maxRateLimitCount

Max Rate Limit Count Value

✅

✅

✅

Максимальное значение ограничения скорости

extension/rateLimitUpdateDate

Rate Limit Update Date

✅

❌

❌

Дата обновления ограничения скорости

extension/rateLimitStartDate

Rate Limit Start Date

✅

❌

❌

Дата начала ограничения скорости

extension/nextRateLimitUpdateDate

Next Rate Limit Update Date

✅

❌

❌

Дата следующего обновления ограничения скорости

extension/rateLimitUpdateDuration

Rate Limit Update Interval

✅

❌

❌

Интервал обновления ограничения скорости

extension/avgExecutionTime

Avg Execution Time

✅

❌

❌

Среднее время выполнения

extension/weightedMaxRateLimitCount

Weighted Max Rate Limit Count Value

✅

❌

✅

Взвешенное максимальное значение ограничения скорости

extension/executionTime

-

❌

❌

❌

Время выполнения

extension/intermediateExecutionTimesCount

-

❌

❌

❌

Количество промежуточных времен выполнения

extension/intermediateAvgExecutionTime

-

❌

❌

❌

Промежуточное среднее время выполнения

AD Role Object Template (Шаблон роли AD)#

OID: 10000000-0000-0000-0000-200000000600

Наименование: AD Role Object Template

Описание: Шаблон для ролей Active Directory. Наследует атрибуты от Role Object Template.

Наследование:#

  • Включает: Role object template (OID: 10000000-0000-0000-0000-200000000300)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

extension/controlledByIDM

controlledByIDM

✅

✅

✅

Управляется IDM

FA Role Object Template (Шаблон роли функционально администратора АС)#

OID: 10000000-0000-0000-0000-200000000700

Наименование: FA Role Object Template

Описание: Шаблон для ролей FA (Функциональный администратор АС). Наследует атрибуты от Role Object Template.

Наследование:#

  • Включает: Role object template (OID: 10000000-0000-0000-0000-200000000300)

Атрибуты:#

Атрибут

DisplayName

Чтение

Добавление

Изменение

Описание

extension/criticality_pdn

-

✅

✅

✅

Критичность по ПДН

extension/criticality_bt

-

✅

✅

✅

Критичность по БТ

extension/criticality_dpk

-

✅

✅

✅

Критичность по ДПК

extension/date_last_change

-

✅

❌

❌

Дата последнего изменения

extension/date_last_verification

-

✅

❌

❌

Дата последней проверки

extension/sendVerification

-

✅

❌

❌

Отправка проверки

extension/version.id

version.id

✅

❌

❌

ID версии

extension/auditor_role

auditor_role

✅

❌

❌

Роль аудитора

extension/administrator_role

administrator_role

✅

❌

❌

Роль администратора

extension/tuz_role

tuz_role

✅

❌

❌

Роль ТУЗ

extension/insider_bitl

insider_bitl

✅

❌

❌

Инсайдер БИТЛ

extension/insider_issuer

insider_issuer

✅

❌

❌

Инсайдер эмитент

extension/insider_rcb

insider_rcb

✅

❌

❌

Инсайдер РЦБ

extension/insider_208_fz

insider_208_fz

✅

❌

❌

Инсайдер 208-ФЗ

extension/insider_controlling_org

insider_controlling_org

✅

❌

❌

Инсайдер контролирующей организации

extension/link.service_desk_id

link.service_desk_id

❌

❌

❌

Ссылка на Service Desk ID

extension/Administrative_status

Administrative_status

✅

❌

❌

Административный статус

extension/consistency

consistency

✅

❌

❌

Консистентность

extension/displayNameOrig

displayNameOrig

✅

❌

❌

Оригинальное отображаемое имя