Pull to refresh

XBRL: просто о сложном − Глава 6. Погружение в XBRL − Часть 2. Совершенствуем результат

Reading time 12 min
Views 3.8K
Original author: Jos van der Heiden, Batavia XBRL BV

6.2. Совершенствуем результат


Вчера мы были вполне довольны полученным результатом. Но вот мы хорошо выспались и осознали, что это пока ещё не совсем то, что мы хотели бы получить.


Отчетная форма в нашем примере содержала несколько разделов – для итоговых значений, а также для группировки по полу и возрастным группам. И у нее не было этого безобразного заголовка ‘http://www.xbrl.org/2003/role/link’ в верхней части отчета.


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


Итак, первым делом нам надо настроить разделы отчета с заголовками, которые хоть что-то означают.


Примечание: Мы будем использовать копии предыдущих наработок, изменив дату с 2006-01-01 на 2006-01-02. Кроме того, сегодня мы создадим несколько версий, поэтому каждой из них сделаем свою папку (a, b, c и т.д.), и укажем ее во всех именах файлов. Будем подробно описывать только изменения относительно предыдущей версии.


6.2.1. Настройка разделов


Для настройки разделов в нашем отчете нужно сделать несколько изменений:


  • Создать новые роли для базы ссылок презентаций, по одной на каждый раздел отчета;
  • Определить абстрактный концепт для использования в качестве корневого элемента в каждом из разделов;
  • Добавить новые presentationLink в базу ссылок презентаций.

6.2.1.1. Новые роли


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


Отчетная форма из нашего примера разделена на три раздела: Итоговые значения, Пол и Возраст, поэтому мы определим соответствующие им роли. Они размещаются внутри элемента appinfo, который в свою очередь находится внутри элемента annotation:


<link:roleType
  roleURI="http://www.sample.com/totalEmployees" id="totalEmployees">
  <link:definition>Total number of employees</link:definition>
  <link:usedOn>link:presentationLink</link:usedOn>
</link:roleType>
<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: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:roleType>

Роли определяются как элементы link:roleType с двумя атрибутами и двумя дочерними элементами:


  • roleURI
    Имя роли указывается в виде URI. Мы использовали URI с нашего собственного сайта, как это обычно и делается.
  • id
    Идентификатор используется для обращения к роли из внешних документов. Он должен быть уникален в пределах схемы таксономии.
  • link:definition
    Этот дочерний элемент содержит понятное пользователям описание роли. При отображении таксономии или отчета это значение может использоваться в качестве заголовка раздела, что и делает наше простое приложение для визуализации отчета.
  • link:usedOn
    Этот дочерний элемент определяет, какими типами ссылок может использоваться роль. Таких элементов может быть несколько, но в нашем случае роль будет использоваться только базой ссылок презентаций.

6.2.1.2. Абстрактные корневые концепты


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


<element
  id="sample_section_totals"
  name="section_totals"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  abstract="true"
  nillable="true" />
<element
  id="sample_section_gender"
  name="section_gender"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  abstract="true"
  nillable="true" />
<element
  id="sample_section_age"
  name="section_age"
  xbrli:periodType="instant"
  type="xbrli:stringItemType"
  substitutionGroup="xbrli:item"
  abstract="true"
  nillable="true" />

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


6.2.1.3. Ссылки презентаций


Заключительным шагом является обновление базы ссылок презентаций. Прежде всего, нам надо сделать новые роли доступными для использования. Мы делаем это определением новых связей (reference).


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

  • xlink:type
    Типом связей указываем ‘simple’.
  • xlink:href
    Этот атрибут указывает на роль. Аналогично атрибуту href в локаторах, здесь используется идентификатор роли в схеме таксономии.
  • roleURI
    Внутри базы ссылок презентаций обращением ролям происходит по их URI. В нашем примере мы используем те же URI, что указывали в схеме таксономии.

Теперь мы можем определить отдельные presentationLink для каждого из разделов отчета.


<presentationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/totalEmployees" >

  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_section_totals"
    xlink:label="concept_section_totals" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_total"
    xlink:label="concept_nr_employees_total" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_totals"
    xlink:to="concept_nr_employees_total"
    order="1" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/label" />
</presentationLink>

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

  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_section_gender"
    xlink:label="concept_section_gender" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_male"
    xlink:label="concept_nr_employees_male" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_female"
    xlink:label="concept_nr_employees_female" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_gender"
    xlink:to="concept_nr_employees_male"
    order="1" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_gender"
    xlink:to="concept_nr_employees_female"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

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

  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_section_age"
    xlink:label="concept_section_age" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_age_up_to_20"
    xlink:label="concept_nr_employees_age_up_to_20" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_age_21_to_40"
    xlink:label="concept_nr_employees_age_21_to_40" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02a.xsd#sample_nr_employees_age_41_and_up"
    xlink:label="concept_nr_employees_age_41_and_up" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_age"
    xlink:to="concept_nr_employees_age_up_to_20"
    order="1" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_age"
    xlink:to="concept_nr_employees_age_21_to_40"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_section_age"
    xlink:to="concept_nr_employees_age_41_and_up"
    order="3" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

Каждый элемент presentationLink использует роль, определенную для соответствующего раздела отчета. Иерархии внутри presentationLink формируются также только из концептов, относящихся к соответствующему разделу.


6.2.1.4. Посмотрим, что получилось

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


image


Обратите внимание, что мы построили новый отчет. Данные в нем те же самые, что и в прошлом, единственная разница – в таксономии, на которую он ссылается.


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


Один из вариантов решения этой проблемы – переложить ее на плечи приложения для визуализации отчета. Как это нередко бывает, наше простое приложение сортирует разделы по алфавиту. Изменяя описание ролей, мы можем задавать порядок следования разделов.


image


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


6.2.2. Возвращаемся к разработке


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


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


6.2.2.1. Новые роли

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


<link:roleType
  roleURI="http://www.sample.com/employeeDemographics"
  id="employeesDemographics">
  <link:definition>Employees demographics</link:definition>
  <link:usedOn>link:presentationLink</link:usedOn>
</link:roleType>

6.2.2.2. Абстрактные концепты

Мы оставим абстрактный концепт ‘presentation_root’ и абстрактные корневые концепты секций из прошлой версии. Это даст нам достаточно концептов для построения красивой иерархии.


6.2.2.3. Ярлыки

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


6.2.2.4. Многоуровневые ссылки презентаций

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


<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_section_totals"
  order="1" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/label" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_totals"
  xlink:to="concept_nr_employees_total"
  order="1" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/label" />

<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_section_gender"
  order="2" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/label" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_gender"
  xlink:to="concept_nr_employees_male"
  order="1" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_gender"
  xlink:to="concept_nr_employees_female"
  order="2" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />

<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_presentation_root"
  xlink:to="concept_section_age"
  order="3" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/label" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_age"
  xlink:to="concept_nr_employees_age_up_to_20"
  order="1" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_age"
  xlink:to="concept_nr_employees_age_21_to_40"
  order="2" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
<presentationArc
  xlink:type="arc"
  xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
  xlink:from="concept_section_age"
  xlink:to="concept_nr_employees_age_41_and_up"
  order="3" priority="0" use="optional"
  preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />

Под абстрактным концептом presentation_root расположены три дочерних абстрактных корневых концепта секций. Под каждым из них содержатся дочерние концепты соответствующей секции.


6.2.2.5.Посмотрите на это!

Результат новой версии отчета выглядит следующим образом:


image


Такая иерархия позволяет нам указать точное расположение и порядок следования концептов. Но это по-прежнему не то, что хотелось бы получить. Нам пришлось вернуться к использованию лишь одного раздела. Что, если кто-то захочет использовать только один из разделов отчета? Чувствую, будет третья версия!


6.2.3. Пересматриваем разделы отчета


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


Имейте в виду, что разделы отчета XBRL имеют свойство группировать связанную информацию. Кто-нибудь может решить использовать только один раздел и все равно рассчитывать получить полноценный отчет.


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


Захочет ли кто-то, интересующийся демографией, довольствоваться только общим числом сотрудников? Возможно, но маловероятно. С другой стороны, глядя на детализацию демографических данных по полу или возрастной группе, хочется также видеть итоговые значения (представьте себе сложный отчет с более чем двумя концептами в разделе).


Что, если нам разделить отчет на два раздела – гендерная и возрастная демография, каждый из которых будет включать в себя итоговые значения? Этим мы и займемся в новой версии.


6.2.3.1. Роли

Определяем секции аналогично первой версии (2006-01-02a), но только для пола и возраста.


6.2.3.2. Абстрактные концепты

Как вы далее увидите, нам больше не потребуются абстрактные концепты.


6.2.3.3. Презентационная иерархия

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


<presentationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/genderDemographics" >
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_total"
    xlink:label="concept_nr_employees_total" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_male"
    xlink:label="concept_nr_employees_male" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_female"
    xlink:label="concept_nr_employees_female" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_nr_employees_male"
    order="1" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_nr_employees_female"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

<presentationLink
  xlink:type="extended"
  xlink:role="http://www.sample.com/ageDemographics" >
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_total"
    xlink:label="concept_nr_employees_total" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_age_up_to_20"
    xlink:label="concept_nr_employees_age_up_to_20" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_age_21_to_40"
    xlink:label="concept_nr_employees_age_21_to_40" />
  <loc
    xlink:type="locator"
    xlink:href="sample-2006-01-02c.xsd#sample_nr_employees_age_41_and_up"
    xlink:label="concept_nr_employees_age_41_and_up" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_nr_employees_age_up_to_20"
    order="1" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />

  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_nr_employees_age_21_to_40"
    order="2" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
  <presentationArc
    xlink:type="arc"
    xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child"
    xlink:from="concept_nr_employees_total"
    xlink:to="concept_nr_employees_age_41_and_up"
    order="3" priority="0" use="optional"
    preferredLabel="http://www.xbrl.org/2003/role/terseLabel" />
</presentationLink>

6.2.3.4. Получившийся отчет

Итак, вот чего нам удалось добиться:


image


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





Tags:
Hubs:
+5
Comments 0
Comments Leave a comment

Articles