Формирование руководства пользователя на ГОСТ-ОН

Руководство пользователя системы выводится такой конструкцией (в проекте должна быть структура «документ» -> «раздел РП» -> «подраздел РП» -> «шаг»). Скриншоты шагов вставляются фильтром image, поэтому получают подпись и номер рисунка:

{% set doc = document[0] %}
{% for phase in doc.rp_phase %}
##​ {{ phase.name }}
{% if phase.rp_phase %}{{ phase.rp_phase }}{% endif %}
{% for stage in phase.rp_stage if stage.name %}
###​ {{ stage.name }}
{% if stage.description %}
{{ stage.description }}
{% endif %}
{% if stage.roles %}Условия доступа:
{{ stage.roles | as_bullet_list }}
{% endif %}
{% if stage.user_guide_steps %}
{% for step in stage.user_guide_steps %}
{{ step.steps_list | punctuate_list }}
{% if step.screen %}
{{ step.screen | image('Рисунок {figure_num} — ' ~ stage.name) }}

{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}

Если руководство строится по задачам системы, подойдет такая конструкция (структура: «компонент» -> «задача» -> «подраздел РП» -> «шаг»).

Горизонтальные связи читаются через related

Подчиняющий родитель у объекта ровно один: подраздел РП подчинен разделу (rp_phase), а с задачей связан горизонтальной связью (relates). Иерархические циклы горизонтальные связи не видят, поэтому обращаться к ним надо через related.

{% for comp in component %}
#​ {{ comp.name }}
{% for task in comp.client_task %}
##​ {{ task.name }}
{% if task.rp_desc %}{{ task.rp_desc }}{% endif %}
{% for stage in task.related.rp_stage if stage.name %}
###​ {{ stage.name }}
{% if stage.description %}
{{ stage.description }}
{% endif %}
{% if stage.roles %}Условия доступа:
{{ stage.roles | as_bullet_list }}
{% endif %}
{% if stage.user_guide_steps %}
{% for step in stage.user_guide_steps %}
{{ step.steps_list | punctuate_list }}
{% if step.screen %}
{{ step.screen | image('Рисунок {figure_num} — ' ~ stage.name) }}

{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}