- Создатель Синицын Владислав (доб.130), отредактировано 09 февр. 2024
Выпущено в релизе 1.15
Описание работы с дополнительными КС
Общие правила для КС
Когда срабатывает дополнительная валидация?
Модуль расширенной валидации выполняется только вместе с основной валидацией.
К каким данным применяется дополнительная валидация
Все контрольные соотношения созданные в в модуле расширенной валидации применяются исключительно к данным находящимся в основном табличном слое, т.е. только для текущего rend-слоя.
Для переменных объявленных в КС, действует правило группировки. Т.е. переменные связанные с показателями открытых осей будут схлопнуться до уровня переменной с минимальным кол-вом измерений.
Операторы + функции
Так же в Кс можно использовать функции. Список доступных функций с описанием доступности (ниже)
Список опереаторов доступный в контрольных соотношениях :
- > - больше
- >= - больше либо равно
- < - меньше
- <= - меньше либо равно
- = - равно
- != - не равно
- <> - не равно
- ! - отритцание
- & - объединение условий по и
- | - объединение условий по или
Функция fill
fill - функция проверяет существует ли хотя бы одно значение в указанной форме[таблице], если есть значение, функция вернет - истина, иначе ложь.
Параметры вызова :
- formCode - код формы, в которой нужно проверить наличие значений, обязательно
- tableCode - код таблицы в форме formCode, в которой нужно проверить наличие значений, не обязательно
- fill('formCode') - проверяет наличие хотя бы одного значения во всех таблицы принадлежащих форме formCode
- fill('formCode', 'tableCode') - проверяет наличие хотя бы одного значения в конкретной форме и таблице принадлежащей этой форме.
Проверить заполнена ли форма "SR_0420409_m" если в форме "SR_Sved_ObOtchOrg_OtvLicza" не указан признак нулевой отчетности
- Название КС (ext_va_) (?) :Validation_FILL_Sved
- Форма (?) : SR_Sved_ObOtchOrg_OtvLicza.
- Таблица (?) : SR_Sved_ObOtchOrg_OtvLicza.
- Описание КС (?) Проверяет на соответствие регулярному выражению значения передаваемого в переменной.
- Контрольное выражение (?): (fill('SR_0420409_m') & !in(v1, ['mem-int:ZnachPokOtsMember']) ) || (!fill('SR_0420409_m') && in(v1, ['mem-int:ZnachPokOtsMember']) )
- Где:
- fill - функция
- SR_0420409_m - существует ли хотя бы одно значение в указанной форме
- & - оператор "объединение условий по и"
- ! отрицание
- in - функция - проверяет что значение переменной, соответствует хотя бы одному из значений содержащийся в списке, переданным вторым параметром
- v1 - назначаем переменную в форме "SR_Sved_ObOtchOrg_OtvLicza=>SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" где нулевой признак.
- mem-int:ZnachPokOtsMember - т.к "SR_Sved_ObOtchOrg_OtvLicza=>SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" - это выпадающий список берем его "mem-in"
- || - объединение условий по или
- Т.е мы видим две части выражения через условие || (или)
- Первая часть: (fill('SR_0420409_m') & !in(v1, ['mem-int:ZnachPokOtsMember']) )
- Вторая часть: !fill('SR_0420409_m') && in(v1, ['mem-int:ZnachPokOtsMember'])
- Если в SR_0420409_m форме нет значений и в форме "SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" не установлен признак нулевой отечности - То сработает КС и будет выведена "Ошибка"
- Если в SR_0420409_m форме нет значений и в форме "SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" установлен признак нулевой отечности - То тест КС будет успешным.
- Если в SR_0420409_m форме есть значения и в форме "SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" не установлен признак нулевой отечности - То тест КС будет успешным.
- Если в SR_0420409_m форме есть значения и в форме "SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" установлен признак нулевой отечности - То сработает КС и будет выведена "Ошибка"
- Форма не заполнена
- Где:
- № п/п Название переменной: Выбрали монетарную ячейку v1 = "SR_Sved_ObOtchOrg_OtvLicza=>SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4"
Валидация
Если в SR_0420409_m форме нет значений и в форме "SR_Sved_ObOtchOrg_OtvLicza=>R__7C__4" не установлен признак нулевой отечности - То сработает КС и будет выведена "Ошибка"
Функция match
match - проверяет на соответствие регулярному выражению значения передаваемого в переменной.
Параметры вызова :
- Expression - регулярное выражение(можно использовать любое, мы рассмотрим на примере '^\d+(\.\d+)?$' )
- varName - имя переменной
Примеры вызова:
match('^\d+(\.\d+)?$', varName) - проверяем, что в переменной varName, записано именно число, возможно дробное, но точно не отрицательное.
- Название КС (ext_va_) (?) : Validation_match.
- Форма (?) : FR_2_001_01c_01.
- Таблица (?) : FR_2_001_01c_01.
- Описание КС (?) Проверяет на соответствие регулярному выражению значения передаваемого в переменной.
- Контрольное выражение (?): match('^\d+(\.\d+)?$', V1)
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку "FR_2_001_01c_01=>FR_2_001_01c_01=>R__6C__3"
- Присвоили переменную: v1
Валидация:
Т.к в ячейке занесено отрицательное число (-1), то сработал наш контроль.
Функция in
in - проверяет что значение переменной, соответствует хотя бы одному из значений содержащийся в списке, переданным вторым параметром
Параметры вызова :
- varName - имя переменной.
- listValues - список допустимых значений.
Примеры вызова:
- in(varName, ['mem-int:Strana_004AfgAfganistanMember', 'mem-int:Strana_008AlbAlbaniyaMember', 'mem-int:Strana_010AtaAntarktidaMember']) - проверяем, что в переменной записана страна из допустимого списка
Пример в XBRLCA
- Название КС (ext_va_) (?) : Validation_IN
- Форма (?) : FR_1_001_01c_01
- Таблица (?) : FR_1_001_01c_01
- Описание КС (?) проверяет что значение переменной, соответствует хотя бы одному из значений содержащийся в списке, переданным вторым параметром
- Контрольное выражение (?): in(v1, ['mem-int:VTysyachaxRossijskixRublejMember'])
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку "FR_2_001_01c_01=>FR_2_001_01c_01=>R__6C__3"
- Присвоили переменную: v1
Функция floor
floor - округляет значение к наименшему целому, т.е.
- floor(5.2) = 5
- floor(5.8) = 5
Параметры вызова :
- varName - имя переменной, обязательно
Примеры вызова:
- floor(varName) - где varName содержит значение показателя монетарного/дробного/целочисленного/процентного типа
- Название КС (ext_va_) (?) : Validation_floor
- Форма (?) : FR_2_001_01c_01.
- Таблица (?) : FR_2_001_01c_01.
- Описание КС (?) округляет значение к наименьшему целому
- Контрольное выражение (?):floor(v1) = 5 ( КС сработает т.к в ячейке указано значение "4.55" с помощью функции floor округлится до 4.00 и не будет равняться 5)
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку
- v1 = "FR_2_001_01c_01=>FR_2_001_01c_01=>R__6C__3"
Валидация
КС сработает т.к в ячейке указано значение "4.55" с помощью функции floor округлится до 4.00 и не будет равняться 5)
Функция ceil
ceil - округляет значение к наибольшему целому, т.е.
- ceil(5.2) = 6
- ceil(5.8) = 6
Параметры вызова :
- varName - имя переменной, обязательно
Примеры вызова:
ceil(varName) - где varName содержит значение показателя монетарного/дробного/целочисленного/процентного типа
- Название КС (ext_va_) (?) : Validation_ceil
- Форма (?) : FR_2_001_01c_01.
- Таблица (?) : FR_2_001_01c_01.
- Описание КС (?) округляет значение к наибольшему целому.
- Контрольное выражение (?):ceil(v1) = 6 ( КС сработает т.к в ячейке указано значение "4.33" с помощью функции ceil округлится до 5.00 и не будет равняться 6)
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку v1 = "FR_2_001_01c_01=>FR_2_001_01c_01=>R__6C__3"
Валидация
- КС сработает т.к в ячейке указано значение "4.33" с помощью функции ceil округлится до 5.00 и не будет равняться 6)
1
Функция round
round - округляет значение с заданной точностью, если точность не задана, округляет до 2-х знаков после точки
Параметры вызова :
- varName - имя переменной, обязательно
- precision - точность, не обязательно, по умолчанию = 2
Примеры вызова
- round(varName, 4) - где varName содержит значение показателя монетарного/дробного/целочисленного/процентного типа, а "4" округление до 4 знаков.
- Название КС (ext_va_) (?) : Validation_round
- Форма (?) : FR_2_001_01c_01.
- Таблица (?) : FR_2_001_01c_01.
- Описание КС (?) округляет значение к наибольшему целому.
- Контрольное выражение (?): itog = round(v1+v2+v3,0)
- Где:
- itog = 5
- v1 =1.14
- v2 = 3.33
- v3 = 1.21
- ,0 = округление до целого числа
- ( КС сработает т.к сумма ячеек v1+v2+v3 = 5.68 и округляется по математическому правилу до 6.00 и 6.00 ни как не равно itog(5)
- Где:
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку:
- itog = FR_2_001_01c_01=>FR_2_001_01c_01=>R__6C__3
- v1 = FR_2_001_01c_01=>FR_2_001_01c_01=>R__5C__3
- v2 = FR_2_001_01c_01=>FR_2_001_01c_01=>R__4C__3
- v3 = FR_2_001_01c_01=>FR_2_001_01c_01=>R__3C__3
Валидация
Функция dim
dim - получает значения определенного измерения в факте
Параметры вызова :
- varName - имя переменной, обязательно
- dimName- название измерения, обязательно
Примеры вызова
- dim(varName, 'dim-int:ID_CzennojBumagiTaxis') =varName - где varName является выходом из отчета xbrl, если требуемое измерение у факта отсутствует, выдается ошибка.
Если показатель «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки» заполнен, то значение по данному показателю должно соответствовать той же строке формы 0420459 с идентификатором «Идентификатор ценной бумаги», значение которого соответствует значению по показателю «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки».
- Название КС (ext_va_) (?) : 0420459_Id
- Форма (?) :SR_0420459
- Таблица (?) :SR_0420459
- Описание КС (?) Если показатель «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки» заполнен, то значение по данному показателю должно соответствовать строке формы 0420459 с идентификатором «Идентификатор ценной бумаги», значение которого соответствует значению по показателю «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки».
- Контрольное выражение (?): dim(v1, 'dim-int:ID_CzennojBumagiTaxis') =v1
- Где:
- v1= указанный показатель в таблице 0420459 "Идентификатор ценной бумаги, лежащей в основе депозитарной расписки"
- dim-int:ID_CzennojBumagiTaxis = это значение идентификатора
- dim-int:ID_CzennojBumagiTaxis = это значение идентификатора
- v1= указанный показатель в таблице 0420459 "Идентификатор ценной бумаги, лежащей в основе депозитарной расписки"
- ( КС сработает т.к в ячейке "Идентификатор ценной бумаги, лежащей в основе депозитарной расписки" указано значение "id_2", а в идентификаторе указано "id_1"
- Где:
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку:
- v1 = SR_0420459=>SR_0420459=>RA__1C__14
Функция existDimVal
existDimVak - проверяет наличие фактов (хотя бы одного) с определенным значением конкретного измерения в заданной форме/таблице.
Параметры вызова :
- dimName - название измерения, обязательно.
- var - название переменной из которой брать значение, обязательно.
- formCode - код формы, в которой нужно проверить наличие значений, обязательно.
- tableCode - код таблицы в форме formCode, в которой нужно проверить наличие значений, не обязательно.
Примеры вызова
- existDimVal('dim-int:ID_CzennojBumagiTaxis', v1, 'SR_0420459', 'SR_0420459') - где v1 является фактом из отчета xbrl, если факты с определенным значением конкретного измерения в заданной форме/таблице отсутствуют, выдается ошибка.
Если показатель «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки» заполнен, то значение по данному показателю должно соответствовать любой строке формы 0420459 лист 0420459 с идентификатором «Идентификатор ценной бумаги», значение которого соответствует значению по показателю «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки».
- Название КС (ext_va_) (?) : 0420459_Id_cen_bumag
- Форма (?) :SR_0420459
- Таблица (?) :SR_0420459
- Описание КС (?) Если показатель «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки» заполнен, то значение по данному показателю должно соответствовать строке формы 0420459 с идентификатором «Идентификатор ценной бумаги», значение которого соответствует значению по показателю «Идентификатор ценной бумаги, лежащей в основе депозитарной расписки».
- Контрольное выражение (?): existDimVal('dim-int:ID_CzennojBumagiTaxis', v1, 'SR_0420459', 'SR_0420459')
- Где:
- v1= указанный показатель в таблице 0420459 "Идентификатор ценной бумаги, лежащей в основе депозитарной расписки"
- dim-int:ID_CzennojBumagiTaxis= это значение идентификатора
- dim-int:ID_CzennojBumagiTaxis= это значение идентификатора
- v1= указанный показатель в таблице 0420459 "Идентификатор ценной бумаги, лежащей в основе депозитарной расписки"
- ( КС сработает в том случае если в показателе "ценной бумаги, лежащей в основе депозитарной расписки" будет указано значение, которого нет ни в одной строке указанным в идентификаторе отрытой оси.
- Где:
- Сообщение об ошибке (?): Ошибка.
- № п/п Название переменной: Выбрали монетарную ячейку:
- v1 = SR_0420459=>SR_0420459=>RA__1C__14
Примеры
Простое математическое не равенство
var1 + var2 > var3 - var4
Простое математическое равенство с использованием функции
var1 + var2 > round(var3 - var4)
Группировка условий с использованием оператора & (и). Такое КС истинно когда есть значение в var3 и выполняется неравенство var1 + var 5 < var7
(var1 + var 5 < var7) & match('.+', var3)
Группировка условий с использованием оператора | (или). Такое КС истинно когда есть значение в var3 или выполняется неравенство var1 + var 5 < var7
(var1 + var 5 < var7) | match('.+', var3)
- Нет меток