---
# System prepended metadata

title: Отчеты по расписанию
tags: [ПФР, SOVA]

---

Отчеты по расписанию
==========================
###### tags: `SOVA` `ПФР`


## Макет дизайна 

{%figma https://www.figma.com/file/OHSnKmZUH5QsG1UlcWSk9m/SLA_12.04?node-id=2140%3A9008 %}

[Ссылка на дизайн в figma](https://www.figma.com/file/OHSnKmZUH5QsG1UlcWSk9m/SLA_12.04?node-id=2140%3A9008)

## Требования 
### Расписание

1. Отчеты должны строится автоматически по расписанию.
2. Расписание определяет циклически повторяющиеся интервалы на основе элементов календаря. По наступлению  даты и времени производится запуск процесса генерации отчета и устанавливается новая дата запуска. Для определения интервала могут использоваться следующие элементы:
    - месяц - каждые х месяцев
    - день недели - каждый ПН, ВТ итд (мультивыбор)
    - час - Каждые х часов или мультивыбор
6. При формировании интервала допускается использование нескольких элементов совместно.
4. Примеры возможности настроить расписание (комплексное): 
    - 2ого числа каждого второго месяца в 12 часов 
    - Каждую вторую неделю  в ПН в 14 часов.
    - Каждый день в 12 и в 18 часов
    - 1 и 15 числа каждого месяца в заданное время суток (мультивыбор)
8. В процессе генерации отчета происходит создание файла в формате, доступном при интерактивном создании отчета. Файл посылается в виде вложения в электронном письме. 
9. При создании расписания указывается список адресатов, которым производится рассылка результата. 
10. Адресатом может быть пользователь определенный в системе, принадлежащий к определенной З.О.
11. Одно расписание соответствует одному отчету.
12. В системе может быть несколько расписаний для одного интервала или даты
13. Одно расписание определяет только один отчет.
14. Окно расписания должно содержать следующие элементы
    * Имя/название расписания
    * Управление периодом расписания
    * Выбор отчета для генерации по расписанию
    * Фильтр объектов для отчета
    * З.О. Отчета
    * Список пользователей для рассылки 
15. Вариант библиотеки для Python - APScheduler ([Описание1](https://apscheduler.readthedocs.io/en/master/?badge=latest) или [Описание2](https://github.com/agronholm/apscheduler))
16. Имя расписания является строкой длинной не более 50 байт. Допускается использование пробелов. 
17. Для расписания должны быть предусмотрены следующие команды-кнопки:
    - Сохранение изменений 
    - Дублирование расписания с новым именем ("Сохранить как" или клонировать)



### Список расписаний
3. В системе должен быть предусмотрен список активных расписаний.
4. В списке расписании должны вводится следующие поля:
    - Название расписания
    - Название генерируемого отчета 
    - Дата последней модификации
    - Атрибут доступа - З.О.
    - Уровень доступа для для текущего пользователя (RO/RW)
    - Дата предыдущего исполнения
    - Дата следующего исполнения

1. В списке расписания должны быть предусмотрены команды/кнопки для
    - Удаления расписания
    - Добавления расписания
    - Редактирования (редактирование может быть через двойной "клик" мыши ) 
    - Подписки/отписки

1. Пользователь может добавить себя в список получателей, даже если отчет для него доступн по "read only". Такое добавление называется "подписка".  Подписаться должно быть можно из списка расписаний. 
1. Подписчиком на рассписание считается пользователь, который определен в списке рассылки в рассписании.
2. При подписке/отписке в окне списка рассписания происходит добавление или удаление (и сохранение) пользователя в список рассылки. 



### Доступ
1. Расписание отчета должно иметь права доступа определяемые двумя типами прав: 
    * Атрибуты доступа определяющий зону ответственности отчета и расписания. 
    * Уровень доступа:`только чтение`  и `чтение и запись` для определения области видимости пользователей.
##### Атрибут доступа
1. Атрибут доступа определяет только одну З.О. Назначается в расписании отчета. 
1. Получателями отчета могут быть назначены только пользователи принадлежащие к данной З.О. либо пользователь `Администратор` принадлежащие к З.О. выше по иерархии.
1. Пользователи, назначенные как получатели отчета, могут видеть расписание в режиме `только чтение` если не являются `Администратором`
3. Пользователи в группе `Администратор` и принадлежащие к З.О автоматически видят отчет в режиме `чтение и запись`, даже если не являются получателями отчета.
4. Любой пользователь `Администратор` может создавать новое расписание. Вновь созданному расписанию назначается атрибут доступа З.О, соответствующий З.О. пользователя. 
5. Пользователь `Администратор` З.О. Выше по иерархии также видит отчет с правами `чтение и запись`
6. Атрибут расписания З.О. может быть изменен на любое нижележащее по иерархии З.О. либо на соответствующее З.О пользователя, внесшего изменение.
7. При изменении З.О. список пользтаелей получателей автоматически очищается.  Необходимо предупредить пользователя (Список пользователей будет очищен ? ДА/НЕТ)
 
##### Уровень доступа 
1. Доступ `чтение и запись` назначается автоматчики всем пользователям `Администраторам` и являющимися либо членом З.О. отчета либо членом З.О. выше по иерархии.
3. 6. Пользователь с правами `чтение и запись` может редактировать все поля в или удалять расписание.
4. Пользователь с правами `только чтение` назначается автоматически на основе выбранного списка пользователей для рассылки.
5. Пользователь с правами `только чтение` может только просматривать параметры расписания.


### Набор объектов
1. Набор объектов определяется фильтром.
2. Фильтр объектов содержит все поля как и основной фильтр приложения.
3. Значение фильтра должно хранится вместе с расписанием. 
7. Должна быть предусмотрена возможность применить сохраненный в расписании фильтр в качестве общесистемного фильтра.
8. Должна быть предусмотрена возможность  загрузить обще системный фильтр в качестве фильтра расписания. 
8. В набор объектов могут входить только объекты, соответствующие З.О. расписания и объекты З.О ниже по иерархии.


## Варианты использования 
### Добавление расписания. Сценарий 1 

1. Пользователь открывает список расписаний
2. Пользователь нажимает кнопку "добавить новое расписание"
3. Выбирает отчет 
5. Выбирает расписание 
6. Устанавливает временной период 
7. Загружает текущий общесистемный фильтр.
8. Вводит дополнительные параметры отчета.
9. Выбирает емейлы пользователей, которым будет рассылаться отчет (выбирает из списка доступных).
10. Сохраняет расписание.

*Примечание: З.О. Устанавливается автоматически

### Редактирование расписания. Сценарий 2
1. Пользователь открывает список расписаний
2. Выбирает в списке нужное расписание
3. Открывает расписание
4. Меняет название расписания
5. Меняет З.О расписания (Выбирает из списка доступных)
6. Меняет временной период
7. Загружает сохраненный фильтр объектов в панель общесистемных фильтров.
7. Изменяет значение фильтра
8. Сохраняет значение текущего общесистемного фильтра в отчете
9. Выбирает емейл пользователей, которым будет рассылаться отчет (выбирает из списка доступных).
10. Сохраняет расписание.

### Редактирование расписания. Расширенное редактирование фильтра объектов. Сценарий 3
Пункты 1 - 6 аналогично сценарию 2
7. Загружает сохраненный фильтр объектов в панель обще системных фильтров.
8. Переходит в окно(вкладку) списка объектов
8. Изменяет поля фильтра
9. Применяет фильтр
10. Проверяет объекты, попавшие в выборку
11. Переходит в панель списка расписаний. (Во вкладке списка расписаний сохраняется форма редактирования расписания)
12. Загружает текущий общесистемный фильтр в расписание
13. Сохраняет расписание.

### Контроль исполнения расписания. Сценарий 4
1. Пользователь открывает список расписаний
2. Ищет в списке нужное расписание
3. Сортирует по дате следующего запуска, предыдущего запуска. дате сохранения итд.
4. Определяет время предыдущего запуска, следующего запуска соответствующее З.О.








