# Фаза 12. Наём, предметы и предел бюджета ## Зависимости - [Фаза 11](11-applicants.md) ## Зачем Игрок нанимает людей и раздаёт предметы, а выделенная сумма ограничивает, сколько он может себе позволить. Экрана ещё нет — всё через API. ## Задачи - [ ] Выделяемая на месяц сумма — в `SimulationOptions`, с умолчанием - [ ] Фонд оплаты школы: сумма базовых ставок плюс надбавки за предметы сверх первого - [ ] Наём: соискатель уходит из пула, становится работником, попадает в ростер. Родитель остаётся родителем — новой сущности не заводится - [ ] Назначение предмета нанятому и снятие предмета - [ ] Предел проверяется **в момент действия**: наём или назначение, выводящее фонд за выделенную сумму, отклоняется с внятным кодом ошибки, а не откладывается до конца месяца - [ ] Покрытие предметов: какие предметы преподаются в существующих параллелях и не имеют ни одного учителя - [ ] `GET /api/schools/{id}/staffing` — деньги, покрытие, пул и штат; читает опубликованный снимок, воркер не трогает - [ ] Наём и назначение идут в воркер через мейлбокс с `TaskCompletionSource`, как create и delete - [ ] Состав пишется на диск при изменении, снимок публикуется заново - [ ] `docs/protocol.md` пополняется в том же коммите, что и обработчики ## Критерий готовности - Нанять двоих на 3 000 и 7 000 при выделенных 10 000 — третий наём отклонён - Снять предмет — фонд уменьшился, наём снова возможен - Назначение, не влезающее в предел, отклонено, и в ответе видно почему - Перезапуск сервера поднимает школу с тем же штатом и теми же назначениями - Тесты API: наём, повторный наём того же человека, отклонение по пределу, неизвестная школа, неизвестный соискатель - `dotnet test` проходит ## Стоп Не увольнять. Не платить зарплату по месяцам — предел проверяется, деньги не движутся. Не расписание.