6.3. Вычисления и валидация


Теперь, когда у нас есть таксономия, позволяющая построить неплохой отчет, настало время приступить к решению ещё одного вопроса – валидация.


Как вы помните, в нашей компании работает один ‘одаренный’ математик. Несмотря на то, что отчет в целом выглядит хорошо, 27 мужчин и 15 женщин никак не могут дать общее количество сотрудников, равное 41.


К счастью, в XBRL есть решение на такой случай – базы ссылок вычислений (calculation linkbases).


6.3.1. Схема таксономии


Нам нужно внести несколько изменений в схему таксономии, чтобы начать использовать базу ссылок вычислений:


  • Определить связь с базой ссылок;
  • Разрешить использование необходимых ролей.

6.3.1.1. Связь с базой ссылок

Чтобы включить базу ссылок вычислений в DTS (связанный комплекс таксономий), необходимо определить связь с ней.


<link:linkbaseRef
  xlink:type="simple"
  xlink:href="sample-2006-01-03-calculation.xml"
  xlink:role="http://www.xbrl.org/2003/role/calculationLinkbaseRef"
  xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" />

Мы ссылаемся на документ, содержащий базу ссылок вычислений, с помощью атрибута href. Атрибуту role присваивается значение calcLinkbaseRef, указывающее на тип базы ссылок.


6.3.1.2. Роли вычислений

Есть два вычисления, которые мы можем сделать:


  • Сумма детальных значений в гендерной иерархии должна давать корректное общее количество сотрудников;
  • Сумма детальных значений в возрастной иерархии должна давать корректное общее количество сотрудников.

Поскольку у нас определен только один концепт для общего количества сотрудников, в каждом из вычислений должна использоваться своя роль. Забудь мы это, и получим задвоенное общее количество сотрудников – сложатся детальные значения обеих иерархий.


Ранее мы уже определяли роли для базы ссылок презентаций, давайте разрешим их использование также и для вычислений.


<link:roleType
  roleURI="http://www.sample.com/genderDemographics" id="genderDemographics">
  <link:definition>Gender related demographics on employees</link:definition>
  <link:usedOn>link:presentationLink</link:usedOn>
  <link:usedOn>link:calculationLink</link:usedOn>
</link:roleType>
<link:roleType
  roleURI="http://www.sample.com/ageDemographics" id="ageDemographics">
  <link:definition>Age related demographics on employees</link:definition>
  <link:usedOn>link:presentationLink</link:usedOn>
  <link:usedOn>link:calculationLink</link:usedOn>
</link:roleType>

Разрешить использование роли в базе ссылок вычислений – означает просто добавить в нее элемент usedOn со значением calculationLink.


6.3.2. База ссылок вычислений


Начало документа, содержащего базу ссылок, должно выглядеть знакомым для вас.


<?xml version="1.0" encoding="utf-8"?>
<linkbase
  xmlns="http://www.xbrl.org/2003/linkbase"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:xbrli="http://www.xbrl.org/2003/instance"
  xsi:schemaLocation="http://www.xbrl.org/2003/instance
                      http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
</linkbase>

6.3.2.1. Связи с ролями

Как и в случае с базой ссылок презентаций, нам нужно определить связь с ролями из схемы таксономии.


<roleRef
  xlink:type="simple"
  xlink:href="sample-2006-01-03.xsd#genderDemographics"
  roleURI="http://www.sample.com/genderDemographics" />
<roleRef
  xlink:type="simple"
  xlink:href="sample-2006-01-03.xsd#ageDemographics"
  roleURI="http://www.sample.com/ageDemographics" />

Опять же, никаких сюрпризов для вас тут быть не должно.


6.3.2.2. Ссылки вычислений

Мы определяем элемент calculationLink для каждого вычисления, используя роли, чтобы различать их.


<calculationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/genderDemographics" >
</calculationLink>
<calculationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/ageDemographics" >
</calculationLink>

6.3.2.3. Локаторы

Локаторы полностью аналогичны тем, что мы определяли в базах ссылок ярлыков и презентаций, поэтому не будем повторяться.


6.3.2.4. Дуги вычислений

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


<calculationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item"
  xlink:from="concept_nr_employees_total"
  xlink:to="concept_nr_employees_male"
  weight="1.0"
  order="1" />
<calculationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item"
  xlink:from="concept_nr_employees_total"
  xlink:to="concept_nr_employees_female"
  weight="1.0"
  order="2" />

<calculationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item"
  xlink:from="concept_nr_employees_total"
  xlink:to="concept_nr_employees_age_up_to_20"
  weight="1.0"
  order="1" />
<calculationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item"
  xlink:from="concept_nr_employees_total"
  xlink:to="concept_nr_employees_age_21_to_40"
  weight="1.0"
  order="2" />
<calculationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item"
  xlink:from="concept_nr_employees_total"
  xlink:to="concept_nr_employees_age_41_and_up"
  weight="1.0"
  order="3" />

Для атрибута arcrole указано значение summation-item, означающее, что from-концепт является суммой to-концептов.


Здесь вы можете также увидеть полезный атрибут weight – он определяет коэффициент, на который умножается to-концепт при расчете общей суммы. В нашем случае для простого суммирования мы везде используем коэффициенты ‘1.0’. А для вычитания to-концепта из общей суммы достаточно указать коэффициент ‘-1.0’.


6.3.3. Что в результате?


Когда мы построим отчет в нашем приложении, вот что мы увидим:


image


Расчет по гендерной демографии привел к ошибке валидации: указанное значение ‘41’ не соответствует рассчитанному значению ‘42’. Все как мы и ожидали.


Но здесь также видно и одно из ограничений базы вычислений: наше приложение для визуализации отчета не смогло определить, для какого факта показать ошибку. Факты по концепту 'Total number employees' (общее количество сотрудников) указаны в каждом разделе отчета, поэтому и ошибка выведена также в каждый раздел.


Возможно, какое-нибудь из более функциональных приложений для визуализации отчета обнаружит, что роль вычисления относится к разделу гендерной демографии, и покажет ошибку только в нем. Но это не лучшее решение, поскольку мы могли создать новые роли для базы вычислений и утратить связь с базой презентаций. В этом случае приложение не сможет определить, где показать ошибку.


По-видимому, на данный момент единственным решением является использование разных концептов для общего количества сотрудников в каждом из разделов отчета. Однако, это противоречит принципу однократной передачи каждого факта.


6.3.3.1. Корректировка

Если мы исправим данные отчета, изменив количество сотрудников-мужчин на 26, то при формировании отчета ошибки не будет.


image





Комментарии (0)