| name | report |
| description | Навичка створення періодичних звітів про ментальний стан користувача за шаблоном та оновлення покажчиків і журналів. |
| metadata | {"version":"0.1.0","repository":"https://github.com/BogdanovychA/mental-health"} |
Навичка: Створення звітів (Report)
Ця навичка використовується для аналізу ментального стану користувача за певні періоди (за замовчуванням — календарні тижні з понеділка по неділю), створення аналітичних звітів за шаблоном templates/report.md (орієнтир: examples/report.md) та оновлення покажчиків і журналів.
Робочий процес
Коли користувач просить створити звіт або коли запускається автоматична генерація, Агент повинен виконати такі дії:
Крок 1. Аналіз стану бази даних
- Відкрити головний покажчик
data/index.md та перевірити наявність розділів ## Звіти (Reports) та ## Вхідні матеріали (Raw).
- Перевірити наявність файлу профілю
data/profile.md. Якщо він порожній або відсутній, негайно припинити виконання та вимагати запуску навички onboarding.
- Зібрати всі записи про вхідні матеріали (Raw) та вже створені звіти (Reports) з файлу
data/index.md:
- Якщо вхідних матеріалів (Raw) немає — зупинити процес та повідомити користувача про відсутність вихідних даних для аналізу.
Крок 2. Визначення періодів для звітів
- Відсортувати дати всіх наявних raw-файлів у хронологічному порядку. Визначити найпершу дату (
earliest_raw_date) та найновішу дату (latest_raw_date).
- Визначити дату початку першого нового звіту (
start_date):
- Якщо звітів ще не було:
start_date = earliest_raw_date.
- Якщо звіти вже створювалися: знайти звіт з останньою датою завершення (
last_report_end_date). Дата початку нового періоду: start_date = last_report_end_date + 1 день (це має бути понеділок).
- Розбити період від
start_date до latest_raw_date на тижневі інтервали за такими правилами:
- Перший тиждень:
- Якщо
start_date припадає на понеділок, то перший звіт робиться за повний тиждень (понеділок-неділя).
- Якщо
start_date припадає на середину тижня (вівторок-неділя) і це найперший звіт у проєкті, то він робиться за неповний тиждень — від start_date до неділі цього ж тижня включно. Це єдиний виняток, коли дозволено створювати неповний звіт за замовчуванням.
- Наступні тижні:
- Завжди мають тривати з понеділка по неділю.
- Для кожного потенційного періоду
[period_start, period_end] (де period_end — завжди неділя):
- Якщо
period_end <= latest_raw_date:
- Перевірити наявність raw-файлів у межах цього періоду.
- Важливо: За замовчуванням створення порожніх звітів (якщо за весь тиждень немає жодного raw-філу) ЗАБОРОНЕНО. Якщо тиждень порожній, Агент має попередити користувача та запропонувати дочекатися нових записів. Створення порожнього звіту допускається лише тоді, коли користувач явно наполягає на цьому.
- Якщо період містить дані та є завершеним (досяг неділі), додати його до списку на генерацію.
- Якщо
period_end > latest_raw_date:
- Період вважається неповним. Неповні звіти за замовчуванням робити ЗАБОРОНЕНО.
- Визначити "залишок" (кількість днів від
period_start до latest_raw_date включно).
- Попередити користувача про цей залишок (наприклад: "Залишок становить N днів (з YYYY-MM-DD по YYYY-MM-DD), звіт за цей період не створюється, оскільки тиждень ще не завершився. Рекомендується дочекатися завершення тижня").
- Якщо користувач явно наполягає на створенні звіту за неповний тиждень — створити його за вказаний період.
Крок 3. Парсинг та агрегація даних
Для кожного звітного періоду [period_start, period_end]:
- Зчитати список категорій користувача з файлу
data/profile.md (розділ ## Типові категорії активностей).
- Ініціалізувати баланс балів для всіх категорій значенням
0.
- Знайти та прочитати всі raw-файли у
data/raw/YYYY/MM/, дати яких припадають на звітний період.
- Увага: Якщо за одну й ту саму дату існує кілька raw-файлів (наприклад,
DD-inbox-1.md та DD-inbox-2.md), Агент повинен пропарсити кожен із них та об'єднати/підсумувати дані з обох джерел.
- Для кожного такого файлу:
- Пропарсити таблицю під заголовком
## Активності.
- Для кожного рядка активності вилучити бали (наприклад,
+3, -2) та категорію (очистивши її від зворотних апострофів: "`").
- Додати бали до балансу відповідної категорії.
- Обчислити загальний Баланс балів за період як суму балів усіх оброблених активностей (або суму балансів усіх raw-файлів за цей період).
Крок 4. Генерація вмісту та збереження файлу звіту
- Створити вміст звіту за шаблоном
templates/report.md.
- Заповнити розділи:
- Заголовок: Вказати точний період YYYY-MM-DD — YYYY-MM-DD (з використанням довгих дефісів/тире
— та пробілів).
- Стислий підсумок (Summary):
- Вказати загальний розрахований баланс балів за період (у форматі
+N, -N або 0).
- Короткий висновок: На основі аналізу активностей сформулювати лаконічний висновок (1-2 речення) українською мовою про загальний стан користувача, ключові події та тенденції.
- Баланс за категоріями: Заповнити таблицю для всіх категорій з профілю (включаючи кастомні). Форматувати бали як
+K, -K або 0.
- Детальний опис (Detailed Description): Сформулювати аналітичний текст українською мовою, що детально описує:
- Емоційний стан користувача протягом періоду.
- Взаємозв'язки між активностями та настроєм.
- Вплив окремих сфер життя (сім'я, робота, спорт тощо).
- Рекомендації та висновки на наступний період.
- Джерела (Raw): Скласти таблицю з посиланнями на всі використані raw-файли та вказати їхні дати і добові баланси балів:
| [YYYY/MM/DD-inbox-X](../../../raw/YYYY/MM/DD-inbox-X.md) | YYYY-MM-DD | +/-M |
(Шлях ../../../raw/... є правильним відносно каталогу data/reports/YYYY/MM/).
- Увага: Усі raw-файли періоду мають бути перелічені в цій таблиці окремими рядками, навіть якщо кілька файлів відносяться до однієї дати.
- Визначити ім'я та шлях для збереження файлу:
- Каталог збереження:
data/reports/YYYY/MM/, де YYYY та MM — рік та місяць дати початку періоду (period_start).
- Назва файлу:
DD-PREFIX-report-X.md, де:
DD — день дати початку періоду (period_start).
PREFIX — номер тижня у форматі WXX (наприклад, W29), розрахований на основі звітного тижня.
X — індекс копії звіту. За замовчуванням 1. Якщо файл з таким ім'ям вже існує, збільшувати індекс на одиницю (2, 3 тощо).
- Зберегти файл.
Крок 5. Оновлення покажчика (Index)
- Відкрити головний індекс
data/index.md.
- У розділі
## Звіти (Reports) додати новий рядок до таблиці:
| [YYYY/MM/DD-PREFIX-report-X](./reports/YYYY/MM/DD-PREFIX-report-X.md) | YYYY-MM-DD—YYYY-MM-DD| +/-N |Короткий висновок |
- Забезпечити хронологічне сортування рядків у таблиці за періодом.
- Зберегти індекс.
Крок 6. Оновлення журналу активності (Log)
- Відкрити журнал
data/log.md.
- Додати запис про створення кожного звіту в кінець файлу за шаблоном:
## YYYY-MM-DD report | Звіт: сформовано аналітичний звіт за тиждень YYYY-WXX
- Створено звіт: [YYYY/MM/DD-PREFIX-report-X](./reports/YYYY/MM/DD-PREFIX-report-X.md)
- Оновлено: [index](index.md)
- Де
YYYY-MM-DD у заголовку — поточна дата виконання операції.
YYYY-WXX — рік та номер тижня звітного періоду.
Крок 7. Завершення та звітність
- Надати користувачеві посилання на створені звіти та повідомити про наявність "залишку" днів (якщо такий є).