---
name: create-rp
description: Создаёт рабочую программу дисциплины (РП) на основе шаблона проекта CoursePlanMaker. Запрашивает у пользователя недостающие данные (цели, задачи, ФИО, литературу, компетенции, часы), если они недоступны в БД или проекте.
---

# Создание рабочей программы дисциплины (РП)

Используй этот навык, когда пользователь просит создать рабочую программу
дисциплины (РП) для вуза. Навык автоматизирует сбор данных из БД проекта,
шаблона и уточняет у пользователя то, чего нет в проекте.

## Порядок действий

### 1. Определи параметры дисциплины

Спроси у пользователя (или возьми из его запроса):

- **Шифр дисциплины** (например, `Б1.О.05.05`)
- **Название дисциплины** (например, `Базы данных`)
- **Год набора** (например, `2025`)
- **Код направления** (например, `09.03.01`)
- **Профиль** (например, `Автоматизированные системы и вычислительные машины в промышленных комплексах`)
- **Форма обучения** (очная / заочная)
- **ФИО разработчика**
- **Цель изучения** (1–2 предложения)
- **Задачи изучения** (3–5 пунктов, маркированный список)

### 2. Проверь наличие в БД

Если параметры известны, выполни запрос к `db/disciplines.db`:

```sh
sqlite3 db/disciplines.db "
SELECT d.code, d.name, dip.semester, dip.hours_total, dip.credits,
       dip.exam_form, dip.hours_lecture, dip.hours_practice,
       dip.hours_lab, dip.hours_self_study, dip.hours_exam
FROM disciplines d
JOIN disciplines_in_plans dip ON d.id = dip.discipline_id
JOIN study_plans sp ON dip.plan_id = sp.id
JOIN profiles p ON sp.profile_id = p.id
JOIN directions dir ON sp.direction_id = dir.id
WHERE d.code = '<шифр>'
  AND sp.year = <год>
  AND p.name = '<профиль>'
  AND dir.code = '<код направления>';
"
```

Если данные есть в БД, но **расходятся с данными от пользователя**
(например, разные ЗЕТ или часы) — приоритет у пользователя.
Отметь расхождение в итоговом отчёте.

Если данных нет в БД — **запроси у пользователя**:
- Семестр
- Общее количество часов и ЗЕТ
- Часы по видам занятий: ЛК, ПЗ, ЛР, СРС
- Часы на экзамен/зачёт
- Форма аттестации (зачёт / экзамен / зачёт с оценкой)

### 3. Прочитай шаблон

Прочитай файл `Шаблоны/рабочая_программа_дисциплины.md` — это основа
для создания РП.

### 3.5. Прочитай пример готовой РП

Прочитай один из готовых примеров в `docs/` (например,
`РП.БазыДанных.2025.md`) — это задаёт стиль оформления: как
форматировать компетенции, как писать итоги, какие TODO остаются
в шапке документа.

### 4. Определи компетенции

Если в БД нет компетенций — **запроси у пользователя** перечень
компетенций (ОПК, ПК, УК) с индикаторами. Если пользователь не знает —
предложи найти через веб-поиск по запросу:

> ФГОС ВО <код направления> <название направления> компетенции

### 5. Определи литературу

Если пользователь не указал конкретные учебники — **запроси**, откуда
брать литературу (например, сайт urait.ru). Если пользователь не знает —
предложи найти самостоятельно через веб-поиск.

> **Для urait.ru:** сайт требует авторизации, поиск через веб-поиск
> может давать неполные результаты. Используй `tavily-extract` по
> конкретным URL, если они известны. Если веб-поиск недоступен —
> запроси у пользователя конкретные источники или ISBN.

### 6. Собери содержание дисциплины

**Запроси у пользователя** структуру разделов/модулей дисциплины:
- Количество модулей (рекомендуется 2)
- Названия разделов и их темы
- Распределение часов по разделам

Если пользователь не знает — предложи типовую структуру на основе
названия дисциплины и имеющихся часов.

### 7. Создай файл РП

Создай файл по пути `РП.<НазваниеДисциплины>.<год_начала_подготовки>.md` (без пробелов
в названии, в CamelCase).

Заполни:

#### YAML frontmatter

Все поля из шаблона. Если значение неизвестно — оставь
`{{ TODO_Поле }}`.

#### Раздел 1 (организационно-методический)

- **Цель и задачи** — из ответа пользователя
- **Место дисциплины** — по шаблону: «Дисциплина изучается на
  <курс>-м курсе в <семестр>-м семестре. Для успешного освоения
  требуются знания, полученные при изучении дисциплин:
  <пререквизиты>».
  > Курс = ceil(семестр / 2). Например, семестр 4 → курс 2.
- **Объём** — таблица из шаблона, заполненная часами из БД или от
  пользователя. Следи за сходимостью:
  - `ЛК + ПЗ + ЛР = Ауд`
  - `Ауд + СРС + Экзамен = Всего`
  - Если `exam_form = 'экзамен'`, то `hours_exam` указывается в
    строке «Форма промежуточной аттестации» и в итоговой сумме.
  - Если `exam_form = 'зачёт'`, то `hours_exam = 0`.

#### Раздел 2 (компетенции)

Для каждой компетенции:
- Индикаторы (3 шт.: знать, уметь, иметь навыки)
- Знать / Уметь / Владеть (текст, привязанный к дисциплине)

#### Раздел 3 (содержание)

- **Таблица 3.1.1** — структура дисциплины с разбивкой по модулям,
  разделам и часам. Суммы по столбцам должны сходиться с итоговыми.
  > ⚠️ В таблице 3.1.1 строка «Всего часов» = ЛК+ПЗ+ЛР+СРС
  > (без экзамена). Экзамен (36 ч) добавляется к итогу отдельно:
  > 72 + 36 = 108. Это нормально, не ошибка.
  >
  > ⚠️ Избегай символа `|` (вертикальная черта) внутри ячеек
  > Markdown-таблиц — он ломает парсинг. Заменяй на «/», «,»
  > или словесное описание.
- **Таблица 3.2.1** — лекции (тема, содержание, часы)
- **Таблица 3.2.2** — практические (если ПЗ = 0, напиши
  «Практические занятия учебным планом не предусмотрены»)
- **Таблица 3.2.3** — лабораторные (тема, содержание, часы)
- **Таблица 3.3** — СРС (содержание, виды деятельности, часы).
  Включи сюда подготовку к экзамену, если экзамен есть.

#### Раздел 5 (литература)

- **Основная печатная** — 1–3 источника
- **Основная ЭБС** — 1–3 источника с URL
- **Дополнительная печатная** — 1–2 источника
- **Дополнительная ЭБС** — 1–2 источника с URL
- **Базы данных** — таблица (название, ссылка)

#### Раздел 6 (ПО)

- **Общего назначения** — из раздела «Часто используемые данные»
  проекта (ОС Windows, Microsoft Office, ABBYY FineReader, ESET NOD32,
  Foxit Reader, АИБС «МегаПро»)
- **Специального назначения** — под конкретную дисциплину

#### Раздел 7 (МТО)

Используй стандартную таблицу из раздела «Часто используемые данные»
проекта.

#### Раздел 8 (методические рекомендации)

Используй стандартный текст из раздела «Часто используемые данные»
проекта.

### 8. Валидируй

После создания файла запусти скрипт валидации:

```sh
python3 scripts/validate_rp.py docs/РП.<НазваниеДисциплины>.<год>.md
```

Скрипт проверяет:

- **Таблица 3.1.1** — суммы по строкам (`ЛК+ПЗ+ЛР+СРС = Всего часов`),
  суммы по столбцам (строка Итого), сходимость `Ауд + СРС = Всего`
- **Таблица 3.2.1** — сумма часов лекций
- **Таблица 3.2.3** — сумма часов лабораторных
- **Таблица 3.3** — сумма часов СРС

Если скрипт выдал ошибки — исправь их до того, как показывать
результат пользователю.

Дополнительно проверь вручную:

- [ ] Все TODO-поля либо заполнены, либо оставлены как `{{ TODO_... }}`
- [ ] Суммы часов сходятся: `ЛК+ПЗ+ЛР = Ауд`, `Ауд+СРС+Экзамен = Всего`
- [ ] Суммы по строкам в таблице 3.1.1 совпадают с итоговыми
- [ ] Компетенции соответствуют направлению подготовки
- [ ] Форма аттестации совпадает с БД

### 9. Сообщи пользователю

Кратко опиши, что сделано, какие поля остались незаполненными
(`{{ TODO_... }}`), и что нужно сделать дальше (например, создать ФОС).

## Важные правила

1. **Не выдумывай данные.** Если чего-то нет — спроси у пользователя.
   Не придумывай цели, задачи, компетенции, литературу без явного
   разрешения пользователя.
   > **Исключение:** если пользователь явно сказал «придумай сам»,
   > «на своё усмотрение» или «сгенерируй» — можно сгенерировать.
   > Во всех остальных случаях — спрашивай.

2. **Спрашивай, а не предполагай.** Если у тебя нет информации по
   какому-либо пункту — задай вопрос. Не пытайся угадать.

3. **Не делай слишком много разделов.** Оптимально: 2–3 модуля,
   3–5 разделов. Не раздувай программу.

4. **Следи за сходимостью часов.** Это частая ошибка. Всегда проверяй
   суммы.

5. **Используй реальные источники литературы.** Если пользователь
   указал конкретный сайт (urait.ru, znanium.com и т.д.) — ищи там.
   Если не указал — спроси.

6. **Не заполняй ФИО декана, даты, номер приказа ФГОС** — это
   остаётся пользователю.
