Enhance staffing management with uncovered teacher tracking
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 14s

- Updated `protocol.md` to clarify the concept of uncovered subjects and the number of additional teachers required.
- Introduced `teachersShort` property in the `StaffingSubject` interface to indicate how many more teachers are needed for a subject.
- Enhanced localization strings to reflect the new uncovered teacher information in both English and Russian.
- Updated the management panel UI to display the number of teachers short for each uncovered subject.
- Revised the `Uncovered` method in the staffing logic to return detailed information about uncovered subjects, including the shortfall of teachers.
- Added tests to validate the new uncovered teacher tracking functionality and ensure accurate reporting in the staffing API.
- Marked related tasks as complete in the documentation for the golden fixtures phase.
This commit is contained in:
Leonid Pershin
2026-08-19 23:53:37 +03:00
parent c27d43f66a
commit e5a0ae5b9d
27 changed files with 16055 additions and 38 deletions
+14 -14
View File
@@ -11,26 +11,26 @@
## Задачи
- [ ] Отпечаток ростера файлом в фикстурах: фиксированные сид, карта, набор имён и родной язык
- [ ] Тест печатает **первую** несовпавшую строку, а не «строки различаются»
- [ ] Правило записано рядом с фикстурой: отпечаток обновляется в том же коммите, что и генерация,
- [x] Отпечаток ростера файлом в фикстурах: фиксированные сид, карта, набор имён и родной язык
- [x] Тест печатает **первую** несовпавшую строку, а не «строки различаются»
- [x] Правило записано рядом с фикстурой: отпечаток обновляется в том же коммите, что и генерация,
и коммит объясняет, что поменялось
- [ ] Файл сейва текущего формата в фикстурах хоста; тест поднимает из него школу
- [ ] Рядом с ним — файл сейва **без** новых полей, чтобы «отсутствующее поле имеет разумное
- [x] Файл сейва текущего формата в фикстурах хоста; тест поднимает из него школу
- [x] Рядом с ним — файл сейва **без** новых полей, чтобы «отсутствующее поле имеет разумное
значение» проверялось, а не подразумевалось
- [ ] Форма голодного дня закрепляется тестом: приходят сытыми, к своей смене около 0.4, уходят
- [x] Форма голодного дня закрепляется тестом: приходят сытыми, к своей смене около 0.4, уходят
голодными, к утру снова полны. Числа подобраны замером и сейчас ничем не защищены
- [ ] `uncovered` в staffing говорит, скольких учителей не хватает предмету
- [ ] Клиент показывает это число в списке непокрытых, через `t(...)`
- [x] `uncovered` в staffing говорит, скольких учителей не хватает предмету
- [x] Клиент показывает это число в списке непокрытых, через `t(...)`
## Тесты, без которых фаза не закрыта
- [ ] Отпечаток ростера совпадает с файлом
- [ ] Школа поднимается из сохранённого файла: те же люди, то же время, тот же штат
- [ ] Сейв без поля родного языка грузится и не перетасовывает набор
- [ ] Кривая голода за учебный день держится в заявленных границах
- [ ] `PrimarySchool` на ванильной карте требует трёх учителей, и ответ это говорит
- [ ] Назначение второго учителя уменьшает нехватку, но не закрывает её
- [x] Отпечаток ростера совпадает с файлом
- [x] Школа поднимается из сохранённого файла: те же люди, то же время, тот же штат
- [x] Сейв без поля родного языка грузится и не перетасовывает набор
- [x] Кривая голода за учебный день держится в заявленных границах
- [x] `PrimarySchool` на ванильной карте требует трёх учителей, и ответ это говорит
- [x] Назначение второго учителя уменьшает нехватку, но не закрывает её
## Критерий готовности