Add course schedules for ISF and ITZS programs for 2026 and 2024 sessions

- Created new snapshot files for ISF credits and daily schedules for the 26-АРХ and 26-ПГС programs.
- Added summer 2026 and winter 2024 exam schedules for the 23-ИТзс program, detailing lectures, labs, and consultations.
This commit is contained in:
2026-10-19 22:55:28 +03:00
parent 15851b26cd
commit e38c388462
24 changed files with 73775 additions and 70942 deletions

View File

@@ -80,14 +80,29 @@ npm run sync
Это не универсальный парсер любых документов Word: без заголовков групп, дней и времени импорт возвращает понятную ошибку. Это не универсальный парсер любых документов Word: без заголовков групп, дней и времени импорт возвращает понятную ошибку.
**Даты занятий рассчитываются по университетской таблице «Расписание белых и зеленых недель»** из корня каталога: неделя 1 начинается 01.09.2026 (вторник), нечётные недели белые, чётные зелёные. Пометка в белой или зелёной строке относится только к неделям этого цвета: `1-13н` в белой строке — недели 1, 3, …, 13, а в объединённой строке — каждая неделя. `с 3н.` означает «до конца таблицы». Текстовые даты вроде «15 октября» и списки дат числами («10.09;15.10;19.11;17.12», не меньше двух дат, чтобы время пары не путалось с датой) привязываются к своему дню. Нераспознанные пометки (`2,6-12-16н`) не скрываются, а помечаются для сверки с Word; исходная пометка всегда видна. Разбор пометок общий для сервера и браузера (`shared/weeks.js`), поэтому старые сохранённые расписания тоже получают даты. Вне периода таблицы приложение показывает все строки Word. Номера подгрупп соответствуют столбцам внутри группы; именованных подгрупп в этих шаблонах нет. **Даты занятий рассчитываются по университетской таблице «Расписание белых и зеленых недель»** из корня каталога: неделя 1 начинается 01.09.2026 (вторник), нечётные недели белые, чётные зелёные. Пометка в белой или зелёной строке относится только к неделям этого цвета: `1-13н` в белой строке — недели 1, 3, …, 13, а в объединённой строке — каждая неделя. `с 3н.` означает «до конца таблицы», а части пометки через `;` или `,` (`1-4н.;6-12н.`, `2-5 н., 10-17 н.`) складываются. Текстовые даты вроде «15 октября» и списки дат числами («10.09;15.10;19.11;17.12», не меньше двух дат, чтобы время пары не путалось с датой) привязываются к своему дню. Нераспознанные пометки (`2,6-12-16н`) не скрываются, а помечаются для сверки с Word; исходная пометка всегда видна. Разбор пометок общий для сервера и браузера (`shared/weeks.js`), поэтому старые сохранённые расписания тоже получают даты. Вне периода таблицы приложение показывает все строки Word. Номера подгрупп соответствуют столбцам внутри группы; именованных подгрупп в этих шаблонах нет.
Поля предмета, преподавателя и аудитории извлекаются по типовым обозначениям; сложные многострочные записи могут содержать несколько преподавателей/аудиторий. Поэтому полный текст всегда доступен в деталях. Если в ячейке явно указано особое время, например `16.50` для кураторского часа, оно имеет приоритет; окончание не выдумывается. Поля предмета, преподавателя и аудитории извлекаются по типовым обозначениям; сложные многострочные записи могут содержать несколько преподавателей/аудиторий. Поэтому полный текст всегда доступен в деталях. Если в ячейке явно указано особое время, например `16.50` для кураторского часа, `9.00`, `18.35.`, интервал `11:10-11:30` или несколько времён (`17.00 и 18.35`, `18.35+20.10` — тогда это отдельные занятия), оно имеет приоритет; окончание не выдумывается. Дата в начале ячейки (`13.10`, `3.12`, `24.11.`, `12.09.26г.`) делает запись разовой. Запись вида `20.10` может быть и датой, и началом восьмой пары: если такая дата приходится на другой день недели, чем строка, или после неё идёт пометка недель, это время.
Для старых `.doc` на сервере нужен LibreOffice Writer (`soffice` в PATH или `LIBREOFFICE_BIN`). Конвертация может изменить сложное форматирование, результат нужно сверить. Реальные документы выбранного источника — `.docx`; поддержка `.doc` проверяется отдельно на образце, преобразованном LibreOffice. Для старых `.doc` на сервере нужен LibreOffice Writer (`soffice` в PATH или `LIBREOFFICE_BIN`). Конвертация может изменить сложное форматирование, результат нужно сверить. Реальные документы выбранного источника — `.docx`; поддержка `.doc` проверяется отдельно на образце, преобразованном LibreOffice.
PDF, Excel, изображения и сканы пока не импортируются. Они не выдаются за распознанное расписание. PDF, Excel, изображения и сканы пока не импортируются. Они не выдаются за распознанное расписание.
**Подозрительные ячейки.** После разбора каждый документ каталога проверяется (`server/diagnostics.js`), и `GET /api/diagnostics` показывает ячейки, которые прочитаны неуверенно, с исходным текстом. Фильтры: `?group=23-АРХ`, `?doc=<id>`, `?code=weeks_partly`. Число таких ячеек есть и в `/api/health` (`directory.problems`). Коды:
- `weeks_partly` — пометка недель прочитана не целиком (`1-4н.;6-12н.`);
- `weeks_unreadable` — пометка недель не прочитана (`2,6-12-16н`);
- `weeks_like_date` — «недели» похожи на дату с опечаткой (`19,11, 03.12`);
- `weeks_out_of_range` — номер недели больше, чем недель в семестре;
- `date_in_subject`, `time_in_subject` — дата или время в начале ячейки попали в название (`24.11.`, `9.00`, `11:10-11:30`);
- `dates_unread` — в ячейке есть даты, но ни одна не распознана;
- `date_weekday` — дата приходится на другой день недели, чем строка;
- `date_out_of_year` — дата вне учебного года;
- `subject_missing` — название предмета не выделено;
- `time_invalid` — время пары неправдоподобно;
- `group_empty` — у группы из заголовка нет ни одного занятия.
Такие ячейки — повод сверить документ с Word и, если это новый формат, научить парсер.
## Проверки ## Проверки
```sh ```sh
@@ -95,7 +110,17 @@ npm test
npm run build npm run build
``` ```
Тесты используют реальные Word-документы источника в `test/fixtures/` с URL и метаданными рядом. Проверяются изоляция 23-БА/23-ЛГ, общие события, объединения ячеек, варианты недель, отдельное время кураторского часа, даты сессии и отклонение повреждённых файлов, а также таблица недель и звонков, разбор пометок с учётом цвета строки и согласие всех пометок 23-БА с таблицей. Тесты используют реальные Word-документы источника в `test/fixtures/` с URL и метаданными рядом. Результат разбора каждого из них вместе с найденными диагностикой ячейками сравнивается построчно со снимком в `test/snapshots/`. Если разбор изменился намеренно, снимки обновляются командой `UPDATE_SNAPSHOTS=1 npm test`; разницу в `test/snapshots/` стоит прочитать перед коммитом. Проверяются изоляция 23-БА/23-ЛГ, общие события, объединения ячеек, варианты недель, отдельное время кураторского часа, даты сессии и отклонение повреждённых файлов, а также таблица недель и звонков, разбор пометок с учётом цвета строки и согласие всех пометок 23-БА с таблицей.
Перед изменением парсера стоит снять снимок всего каталога и после правки сравнить с ним:
```sh
npm run snapshot -- fetch # скачать все документы каталога в .data/originals/
npm run snapshot -- save # разобрать их текущим парсером и сохранить эталон
npm run snapshot # после правки: что изменилось по каждому документу
```
Проверка выводит по каждому документу пропавшие и появившиеся занятия (с `--all` — все, иначе первые десять) и как изменилось число подозрительных ячеек по кодам. Если что-то изменилось, команда завершается с кодом 1. Документы и эталон лежат в `.data/` и в git не попадают.
## Docker ## Docker

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,7 @@
"start": "node server/index.js", "start": "node server/index.js",
"test": "node --test test/*.test.js", "test": "node --test test/*.test.js",
"sync": "node scripts/sync.js", "sync": "node scripts/sync.js",
"snapshot": "node scripts/snapshot.js",
"icons": "node scripts/icons.js" "icons": "node scripts/icons.js"
}, },
"dependencies": { "dependencies": {

36
scripts/snapshot-lines.js Normal file
View File

@@ -0,0 +1,36 @@
// One readable line per parsed lesson, the form both snapshots compare: what a student sees
// (day, time, weeks or dates, subject, kind, room, teacher, groups), not ids or source colours.
const DAYS = ["", "пн", "вт", "ср", "чт", "пт", "сб", "вс"];
const weeks = (ranges) =>
ranges?.map(([a, b]) => (b === null ? `с ${a}` : a === b ? `${a}` : `${a}-${b}`)).join(",") || "";
export const lessonLine = (l) =>
[
`${l.date || DAYS[l.day]} ${l.start}${l.end ? `–${l.end}` : ""}`,
(l.date ? "один раз" : l.dates?.length ? `даты ${l.dates.join(",")}` : l.weekRanges ? `нед. ${weeks(l.weekRanges)}` : "каждую неделю") +
(l.variant === "upper" ? ", верхняя строка" : l.variant === "lower" ? ", нижняя строка" : ""),
l.subject,
l.type,
l.room,
l.teacher,
[...l.groups, ...l.subgroups.map((s) => `${s.group}/${s.label.replace("Подгруппа ", "п")}`)].join(","),
]
.map((part) => String(part ?? "").replace(/\s+/g, " ").trim())
.join(" | ");
/** Sorted lesson lines of a parsed document, with its groups and period on top. */
export const snapshotOf = (schedule) => [
`# ${schedule.period} · ${schedule.groups.join(", ")}`,
...schedule.lessons.map(lessonLine).sort(),
];
/** Lines only in `before` (removed) and only in `after` (added), duplicates counted. */
export function diffLines(before, after) {
const count = (lines) => lines.reduce((m, x) => m.set(x, (m.get(x) || 0) + 1), new Map());
const a = count(before), b = count(after);
const removed = [], added = [];
for (const [line, n] of a) for (let i = b.get(line) || 0; i < n; i++) removed.push(line);
for (const [line, n] of b) for (let i = a.get(line) || 0; i < n; i++) added.push(line);
return { removed, added };
}

136
scripts/snapshot.js Normal file
View File

@@ -0,0 +1,136 @@
// Catalog snapshot: every catalog document re-parsed by the current parser and compared with
// a saved result, so a parser change shows what it changes across all faculties before the
// container is rebuilt. The originals and the snapshot live in .data/ (not in git).
//
// npm run snapshot -- fetch download every catalog document into .data/originals/
// npm run snapshot -- save parse them and save the result as the reference
// npm run snapshot parse them again and print what changed (exit code 1 if anything)
// npm run snapshot -- --all the same, with every changed line instead of the first ten
import { readFile, writeFile, mkdir, readdir } from "node:fs/promises";
import { fileURLToPath } from "node:url";
import { parseWord, PARSER_VERSION } from "../server/parser.js";
import { diagnose } from "../server/diagnostics.js";
import { snapshotOf, diffLines } from "./snapshot-lines.js";
const data = fileURLToPath(new URL("../.data/", import.meta.url));
const originals = data + "originals/";
const reference = data + "snapshot.json";
const args = process.argv.slice(2);
const command = args.find((a) => !a.startsWith("--")) || "check";
const limit = args.includes("--all") ? Infinity : 10;
const catalog = async () => {
const { getCatalog } = await import("../server/source.js");
return getCatalog();
};
async function fetchAll() {
const { request } = await import("../server/source.js");
const files = (await catalog()).files;
await mkdir(originals, { recursive: true });
const index = {};
let failed = 0;
for (const file of files) {
try {
await writeFile(originals + file.id, await request(file.path));
index[file.id] = { name: file.name, year: file.year, modified: file.modified, faculty: file.faculty };
process.stdout.write(".");
} catch (e) {
failed++;
console.error(`\n${file.name}: ${e.message}`);
}
}
await writeFile(originals + "index.json", JSON.stringify(index, null, 1));
console.log(`\nСкачано ${Object.keys(index).length} из ${files.length} документов${failed ? `, ошибок: ${failed}` : ""}.`);
}
/** Every downloaded document parsed now: {id: {name, lines, problems} | {name, error}}. */
async function parseAll() {
let index;
try {
index = JSON.parse(await readFile(originals + "index.json", "utf8"));
} catch {
throw new Error("Нет скачанных документов: сначала npm run snapshot -- fetch");
}
const present = new Set(await readdir(originals));
const result = {};
for (const [id, meta] of Object.entries(index)) {
if (!present.has(id)) continue;
try {
const schedule = await parseWord(await readFile(originals + id), { ...meta, fileId: id });
const problems = {};
for (const p of diagnose(schedule)) problems[p.code] = (problems[p.code] || 0) + 1;
result[id] = { name: meta.name, lines: snapshotOf(schedule), problems };
} catch (e) {
result[id] = { name: meta.name, error: e.message };
}
}
return result;
}
const total = (docs) =>
Object.values(docs).reduce((sum, d) => {
for (const [code, n] of Object.entries(d.problems || {})) sum[code] = (sum[code] || 0) + n;
return sum;
}, {});
async function save() {
const docs = await parseAll();
await writeFile(reference, JSON.stringify({ parserVersion: PARSER_VERSION, savedAt: new Date().toISOString(), docs }));
const lessons = Object.values(docs).reduce((n, d) => n + (d.lines?.length - 1 || 0), 0);
console.log(`Снимок сохранён: ${Object.keys(docs).length} документов, ${lessons} занятий, парсер ${PARSER_VERSION}.`);
console.log("Подозрительные ячейки:", total(docs));
}
async function check() {
let saved;
try {
saved = JSON.parse(await readFile(reference, "utf8"));
} catch {
throw new Error("Нет сохранённого снимка: сначала npm run snapshot -- save");
}
const now = await parseAll();
let changed = 0, same = 0;
for (const id of new Set([...Object.keys(saved.docs), ...Object.keys(now)])) {
const before = saved.docs[id], after = now[id];
const name = (after || before).name;
if (!before || !after) {
changed++;
console.log(`\n${before ? "−" : "+"} ${name}: документ ${before ? "пропал" : "появился"}`);
continue;
}
if (before.error || after.error) {
if (before.error === after.error) { same++; continue; }
changed++;
console.log(`\n~ ${name}: ${after.error ? `теперь не разбирается — ${after.error}` : "теперь разбирается"}`);
continue;
}
const { removed, added } = diffLines(before.lines, after.lines);
if (!removed.length && !added.length) { same++; continue; }
changed++;
console.log(`\n~ ${name}: −${removed.length} +${added.length}`);
for (const line of removed.slice(0, limit)) console.log(` − ${line}`);
if (removed.length > limit) console.log(` … ещё ${removed.length - limit}`);
for (const line of added.slice(0, limit)) console.log(` + ${line}`);
if (added.length > limit) console.log(` … ещё ${added.length - limit}`);
}
const was = total(saved.docs), is = total(now);
const codes = [...new Set([...Object.keys(was), ...Object.keys(is)])].sort();
console.log(`\nПарсер ${saved.parserVersion} → ${PARSER_VERSION}. Изменённых документов: ${changed}, без изменений: ${same}.`);
if (codes.length)
console.log(
"Подозрительные ячейки:",
codes.map((c) => `${c} ${was[c] || 0}→${is[c] || 0}`).join(", "),
);
if (changed) process.exitCode = 1;
}
const commands = { fetch: fetchAll, save, check };
if (!commands[command]) {
console.error(`Неизвестная команда «${command}». Есть: fetch, save, check.`);
process.exitCode = 2;
} else
await commands[command]().catch((e) => {
console.error(e.message);
process.exitCode = 2;
});

116
server/diagnostics.js Normal file
View File

@@ -0,0 +1,116 @@
import { parseWeekRanges, weekday, DATE_LIST } from "../shared/weeks.js";
// The parser never guesses: a cell it cannot read becomes a lesson "every week" or keeps its
// whole text as the subject. These checks find such cells after parsing, so a new format or a
// typo in Word shows up as soon as the document is published instead of when a student notices.
const MONTHS = /(?<![а-яё])(?:январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)[а-яё]*/iu;
// The longest semester has about twenty weeks; "27н." is a typo, not a week.
const LAST_WEEK = 24;
const message = {
weeks_unreadable: "Пометка недель не распознана: занятие показывается каждую неделю.",
weeks_out_of_range: "Номер недели больше, чем недель в семестре.",
weeks_like_date: "Пометка недель похожа на дату с опечаткой.",
dates_unread: "В ячейке есть даты, но ни одна не распознана: занятие показывается каждую неделю.",
date_weekday: "Дата приходится на другой день недели, чем строка таблицы.",
date_out_of_year: "Дата вне учебного года документа.",
weeks_partly: "Пометка недель прочитана не целиком: часть недель попала в название предмета.",
date_in_subject: "Дата в начале ячейки не распознана: занятие показывается каждую неделю.",
time_in_subject: "Время в начале ячейки не распознано: занятие стоит во время пары, а время попало в название.",
subject_missing: "Название предмета не выделено.",
time_invalid: "Время пары не распознано или выглядит неправдоподобно.",
group_empty: "В заголовке есть группа, но ни одного её занятия.",
};
/** Problems found in one parsed document: `{code, message, groups, day, start, raw, …}`. */
export function diagnose(schedule) {
const found = [];
const add = (code, lesson, extra = {}) =>
found.push({
code,
message: message[code],
...(lesson && {
groups: lesson.groups,
day: lesson.day,
start: lesson.start || null,
raw: lesson.raw,
}),
...extra,
});
const year = Number(schedule.academicYear) || null;
for (const lesson of schedule.lessons) {
const raw = lesson.raw || "";
const dated = Boolean(lesson.date) || lesson.dates?.length > 0;
if (lesson.condition && !dated) {
const ranges = lesson.weekRanges ?? parseWeekRanges(lesson.condition);
// "19,11, 03.12, 17.12": a date typed with a comma reads as weeks 19 and 11.
if (!/н/i.test(lesson.condition) && DATE_LIST.test(raw.slice(lesson.condition.length - 1)))
add("weeks_like_date", lesson, { condition: lesson.condition });
else if (!ranges) add("weeks_unreadable", lesson, { condition: lesson.condition });
else if (ranges.some(([a, b]) => Math.max(a, b ?? a) > LAST_WEEK))
add("weeks_out_of_range", lesson, { condition: lesson.condition });
DATE_LIST.lastIndex = 0;
}
if (!dated && !lesson.condition && (MONTHS.test(raw) || /\b\d{1,2}\.\d{2}\.\d{4}\b/.test(raw)))
add("dates_unread", lesson);
for (const date of lesson.date ? [lesson.date] : lesson.dates || []) {
if (weekday(date) !== lesson.day) add("date_weekday", lesson, { date });
if (year && (date < `${year}-08-01` || date > `${year + 1}-08-31`))
add("date_out_of_year", lesson, { date });
}
const subject = (lesson.subject || "").trim();
const lead = subject.match(/^(\d{1,2})([.:])(\d{2})(\.?)(?:\s*[-–]\s*\d{1,2}[.:]\d{2})?/);
if (/^[;,]?\s*\d{1,2}(?:\s*[-–,;]\s*\d{1,2})*\s*н/i.test(subject)) add("weeks_partly", lesson, { subject });
else if (lead) {
const [whole, a, sep, b, dot] = lead;
// "3.12" or "24.11." is a date, "9.00", "17.00" or "11:10-11:30" a time.
const date = sep === "." && whole === `${a}.${b}${dot}` && Number(b) >= 1 && Number(b) <= 12 && (dot || Number(a) < 7 || Number(a) > 23);
add(date ? "date_in_subject" : "time_in_subject", lesson, { subject });
} else if (!subject || /^[\d.,;:–-]/.test(subject) || (subject === raw.trim() && raw.length > 120))
add("subject_missing", lesson, { subject });
const start = lesson.start || "";
if (!/^\d{2}:\d{2}$/.test(start) || start < "07:00" || start > "21:00" || (lesson.end && lesson.end <= start))
add("time_invalid", lesson, { end: lesson.end || null });
}
for (const group of schedule.groups)
if (!schedule.lessons.some((l) => l.groups.includes(group))) add("group_empty", null, { groups: [group] });
return found;
}
const reports = new WeakMap();
/**
* Every catalog document's problems, newest index only: computed once per index build.
* Filters: `group` (as printed, "23-АРХ"), `doc` (catalog id) and `code`.
*/
export function catalogDiagnostics(idx, { group = "", doc = "", code = "" } = {}) {
if (!reports.has(idx))
reports.set(
idx,
idx.docs.map(({ id, file, schedule }) => ({
doc: { id, name: file.name, faculty: file.faculty || schedule.source.faculty || null, url: file.url || null },
problems: diagnose(schedule),
})),
);
const key = group.replace(/\s+/g, "").toLowerCase();
const items = reports
.get(idx)
.filter((r) => !doc || r.doc.id === doc)
.map((r) => ({
...r,
problems: r.problems.filter(
(p) => (!code || p.code === code) && (!key || p.groups?.some((g) => g.toLowerCase() === key)),
),
}))
.filter((r) => r.problems.length);
const counts = {};
for (const r of items) for (const p of r.problems) counts[p.code] = (counts[p.code] || 0) + 1;
return {
builtAt: idx.builtAt,
documents: idx.docs.length,
problems: items.reduce((n, r) => n + r.problems.length, 0),
counts,
failed: doc || group || code ? [] : idx.failed,
items,
};
}

View File

@@ -1,6 +1,7 @@
// University-wide directory: every catalog document parsed once and searched // University-wide directory: every catalog document parsed once and searched
// by teacher, room and date. Answers come from the Word files only, so every // by teacher, room and date. Answers come from the Word files only, so every
// response carries its coverage and the caller must present it as such. // response carries its coverage and the caller must present it as such.
import { catalogDiagnostics } from "./diagnostics.js";
import { getCatalog, getCalendar } from "./source.js"; import { getCatalog, getCalendar } from "./source.js";
import { scheduleFor } from "./schedules.js"; import { scheduleFor } from "./schedules.js";
import { import {
@@ -188,6 +189,8 @@ export const indexStatus = () =>
failed: index.failed.length, failed: index.failed.length,
builtAt: index.builtAt, builtAt: index.builtAt,
rebuilding: Boolean(building), rebuilding: Boolean(building),
// Cells that look misread, listed by /api/diagnostics.
problems: catalogDiagnostics(index).problems,
} }
: { documents: 0, rebuilding: Boolean(building) }; : { documents: 0, rebuilding: Boolean(building) };

View File

@@ -8,6 +8,7 @@ import { rateLimit, semaphore } from "./limits.js";
import { apiError, describe } from "./errors.js"; import { apiError, describe } from "./errors.js";
import { createHash } from "node:crypto"; import { createHash } from "node:crypto";
import { timetable } from "./timetable.js"; import { timetable } from "./timetable.js";
import { catalogDiagnostics } from "./diagnostics.js";
import { import {
getIndex, getIndex,
indexStatus, indexStatus,
@@ -45,8 +46,9 @@ app.use("/api", (_req, res, next) => {
// 2 — /api/timetable for the Android client; 3 — its range=semester; // 2 — /api/timetable for the Android client; 3 — its range=semester;
// 4 — compression, ETag revalidation, throttled refresh and import limits; // 4 — compression, ETag revalidation, throttled refresh and import limits;
// 5 — error codes (`code` beside `error`, see server/errors.js), timetable 304 before any work; // 5 — error codes (`code` beside `error`, see server/errors.js), timetable 304 before any work;
// 6 — the timetable carries the group's exams and credits from other catalog documents. // 6 — the timetable carries the group's exams and credits from other catalog documents;
const API_VERSION = 6; // 7 — /api/diagnostics, cells the parser could not read with confidence.
const API_VERSION = 7;
// Liveness plus what the server currently reads from the university, without network calls. // Liveness plus what the server currently reads from the university, without network calls.
app.get("/api/health", async (_req, res) => { app.get("/api/health", async (_req, res) => {
@@ -163,6 +165,16 @@ app.get("/api/exams", async (req, res, next) => {
next(e); next(e);
} }
}); });
// Cells of catalog documents that look misread: a new layout or a typo in Word, with the
// original text, so they can be checked against the document and the parser taught.
app.get("/api/diagnostics", async (req, res, next) => {
try {
const text = (name) => String(req.query[name] || "").slice(0, 60);
res.json(catalogDiagnostics(await getIndex(), { group: text("group"), doc: text("doc"), code: text("code") }));
} catch (e) {
next(e);
}
});
app.get("/api/catalog", async (req, res, next) => { app.get("/api/catalog", async (req, res, next) => {
try { try {
res.json(await getCatalog(req.query.refresh === "1")); res.json(await getCatalog(req.query.refresh === "1"));

View File

@@ -6,9 +6,9 @@ import { mkdtemp, readFile, writeFile, rm } from "node:fs/promises";
import { tmpdir } from "node:os"; import { tmpdir } from "node:os";
import { join } from "node:path"; import { join } from "node:path";
import { createHash } from "node:crypto"; import { createHash } from "node:crypto";
import { parseWeekRanges, parseTextDates, DATE_LIST } from "../shared/weeks.js"; import { parseWeekRanges, parseTextDates, DATE_LIST, weekday } from "../shared/weeks.js";
const run = promisify(execFile); const run = promisify(execFile);
export const PARSER_VERSION = 11; export const PARSER_VERSION = 12;
const days = [ const days = [
"понедельник", "понедельник",
"вторник", "вторник",
@@ -46,10 +46,15 @@ function timesIn(value) {
? { start: times[0], end: times.at(-1), original: value } ? { start: times[0], end: times.at(-1), original: value }
: null; : null;
} }
function conditionIn(value) { // One part of a week mark, "6-12" or "2,4", with its optional "н."; a mark is several parts
const m = value.match( // joined by ";" or "," ("1-4н.;6-12н.", "2-5 н., 10-17 н.", "1-9;15,16н.") ending in "н".
/^(?:(?:с|со)\s*)?\d{1,2}(?:\s*[-–,]\s*\d{1,2})*\s*(?:н(?:ед)?\.?)(?:\s*\.)?\s*/i, const WEEK_PART = String.raw`\d{1,2}(?:\s*[-–,]\s*\d{1,2})*(?:\s*н(?:ед)?\.?)?`;
const WEEK_MARK = new RegExp(
String.raw`^(?:(?:с|со)\s*)?${WEEK_PART}(?:\s*[;,]\s*${WEEK_PART})*(?<=н|нед|н\.|нед\.)(?:\s*\.)?\s*`,
"i",
); );
function conditionIn(value) {
const m = value.match(WEEK_MARK);
if (m) return m[0].trim(); if (m) return m[0].trim();
// Some university cells omit the week suffix (for example 1-8,10-17). // Some university cells omit the week suffix (for example 1-8,10-17).
const range = value.match( const range = value.match(
@@ -131,11 +136,7 @@ export function details(raw) {
} }
// Split only at an explicit new week condition. Keep unfamiliar wording intact. // Split only at an explicit new week condition. Keep unfamiliar wording intact.
function alternatives(raw) { function alternatives(raw) {
return raw return raw.split(new RegExp(String.raw`\n(?=${WEEK_MARK.source.slice(1)})`, "i")).filter(Boolean);
.split(
/\n(?=(?:(?:с|со)\s*)?\d{1,2}(?:\s*[-–,]\s*\d{1,2})*\s*н(?:ед)?\.?)/i,
)
.filter(Boolean);
} }
export function readDocx(buffer) { export function readDocx(buffer) {
let zip; let zip;
@@ -226,6 +227,43 @@ export function readDocx(buffer) {
* columns is "Д.н." (the weekday with its date), "Время" and "Дисциплина, преподаватель, * columns is "Д.н." (the weekday with its date), "Время" and "Дисциплина, преподаватель,
* аудитория", whose columns split in two where the subgroups have separate laboratory classes. * аудитория", whose columns split in two where the subgroups have separate laboratory classes.
*/ */
/**
* A date that opens a cell: "13.10 Химия", "3.12 Физика", "24.11. Графика", "12.09.26г. Алгебра",
* "09.09.Материалы". A one-digit day only below 7, so "9.10" stays ambiguous rather than a date.
*/
export function leadingDate(text, yearStart) {
const m = text.match(/^(\d{1,2})\.(\d{2})(?:\.(\d{4}|\d{2})(?!\d))?\.?(?:\s*г\.?)?(?=\s|[А-ЯЁа-яё])/u);
if (!m) return null;
const day = Number(m[1]), month = Number(m[2]);
if (day < 1 || day > 31 || month < 1 || month > 12 || (m[1].length === 1 && day >= 7)) return null;
const year = m[3] ? (m[3].length === 2 ? `20${m[3]}` : m[3]) : yearStart ? (month >= 8 ? Number(yearStart) : Number(yearStart) + 1) : null;
return {
text: m[0].trim(),
length: m[0].length,
date: year ? `${year}-${m[2]}-${m[1].padStart(2, "0")}` : null,
};
}
/**
* Times of their own that open a cell, for a curator's hour or a late pair: "16.50 Кураторский час",
* "9.00 Информационный час", "18.35. Налоговое право", "11:10-11:30 – информационный час",
* "17.00 и 18.35 Русский язык". With `loose`, also "20.10", which reads as a date as well.
*/
export function leadingTime(text, loose = false) {
const hm = (h, m) => `${h.padStart(2, "0")}:${m}`;
const range = text.match(/^([0-2]?\d)[.:]([0-5]\d)\s*[-–]\s*([0-2]?\d)[.:]([0-5]\d)(?=\s)/);
if (range && Number(range[1]) <= 23 && Number(range[3]) <= 23)
return { starts: [hm(range[1], range[2])], end: hm(range[3], range[4]), length: range[0].length };
const T = String.raw`[0-2]?\d[.:][0-5]\d`;
const list = text.match(new RegExp(String.raw`^${T}(?:\s*(?:и|\+|,)\s*${T})*\.?(?=\s|[А-ЯЁа-яё])`, "u"));
if (!list) return null;
const times = [...list[0].matchAll(/([0-2]?\d)([.:])([0-5]\d)/g)];
// One unmistakable time ("18.35+20.10") vouches for the others in the list.
const clear = ([, , sep, m]) => sep === ":" || Number(m) > 12 || m === "00";
if (!loose && !times.some(clear)) return null;
// Lessons run from 7 to 22: "3.12" next to a clear time is still not a time.
if (times.some((t) => Number(t[1]) > 23 || (!clear(t) && (Number(t[1]) < 7 || Number(t[1]) > 21)))) return null;
return { starts: times.map(([, h, , m]) => hm(h, m)), end: null, length: list[0].length };
}
function weekBlocks(rows) { function weekBlocks(rows) {
for (let i = 0; i < Math.min(rows.length, 4); i++) { for (let i = 0; i < Math.min(rows.length, 4); i++) {
const cells = rows[i]; const cells = rows[i];
@@ -411,43 +449,25 @@ export function parseDocx(buffer, source = {}) {
rows[i + 1]?.find((c) => c.col === cell.col)?.merge === "continue"; rows[i + 1]?.find((c) => c.col === cell.col)?.merge === "continue";
for (const alternative of alternatives(raw)) { for (const alternative of alternatives(raw)) {
// "Единый день информирования 10.09;15.10;19.11;17.12": the dates are not part of the subject. // "Единый день информирования 10.09;15.10;19.11;17.12": the dates are not part of the subject.
const data = details(alternative.replace(DATE_LIST, "").replace(/[ \t]{2,}/g, " ").trim()); const read = (text) => {
const data = details(text.replace(DATE_LIST, "").replace(/[ \t]{2,}/g, " ").trim());
if (credits && data.type === "Занятие") data.type = "Зачёт"; if (credits && data.type === "Занятие") data.type = "Зачёт";
const dateCandidate = alternative.match( return data;
/^(\d{2})[.](\d{2})(?:[.](\d{4}))?\s/, };
); let data = read(alternative);
const singleDate = // "20.10" is 20 October or the eighth pair at 20:10. A date on another weekday than
dateCandidate && // the row, or followed by a week mark, is the time.
Number(dateCandidate[1]) >= 1 && let lead = leadingTime(alternative) || leadingDate(alternative, yearStart);
Number(dateCandidate[1]) <= 31 && if (lead?.date) {
Number(dateCandidate[2]) >= 1 && const after = alternative.slice(lead.length).trim();
Number(dateCandidate[2]) <= 12 const time = leadingTime(alternative, true);
? dateCandidate if (time && (weekday(lead.date) !== day || WEEK_MARK.test(after))) lead = time;
: null;
const explicitTime = alternative.match(
/^([0-2]?\d)([.:])([0-5]\d)\s+/,
);
const ownTime =
explicitTime &&
Number(explicitTime[1]) <= 23 &&
(explicitTime[2] === ":" || Number(explicitTime[3]) > 12)
? `${explicitTime[1].padStart(2, "0")}:${explicitTime[3]}`
: null;
const oneDate =
singleDate && (singleDate[3] || academicYear)
? `${singleDate[3] || academicYear}-${singleDate[2]}-${singleDate[1]}`
: null;
if (singleDate) {
data.condition = singleDate[0].trim();
data.subject = details(
alternative.slice(singleDate[0].length),
).subject;
} }
if (ownTime) { const oneDate = lead?.date || null;
data.subject = details( if (lead) {
alternative.slice(explicitTime[0].length), // The rest of the cell is an ordinary entry: "17.00 1 нед. Математика (пр.) …".
).subject; data = read(alternative.slice(lead.length).replace(/^[\s–—:-]+/, ""));
data.condition = ""; if (oneDate) data.condition = lead.text;
} }
const subgroups = sessionColumns const subgroups = sessionColumns
? [] ? []
@@ -463,17 +483,18 @@ export function parseDocx(buffer, source = {}) {
group: r.group, group: r.group,
label: `Подгруппа ${cell.col - r.col + 1}`, label: `Подгруппа ${cell.col - r.col + 1}`,
})); }));
const id = createHash("sha256") // "17.00 и 18.35 Русский язык": one lesson at each time.
.update([source.name, i, cell.col, alternative].join("|")) for (const [n, start] of (lead?.starts || [null]).entries())
.digest("hex")
.slice(0, 16);
lessons.push({ lessons.push({
id, id: createHash("sha256")
.update([source.name, i, cell.col, alternative, n || ""].join("|"))
.digest("hex")
.slice(0, 16),
day, day,
date: date || oneDate, date: date || oneDate,
pair: pair || null, pair: pair || null,
...time, ...time,
...(ownTime ? { start: ownTime, end: null } : {}), ...(start && { start, end: lead.end }),
...data, ...data,
...overrides, ...overrides,
groups: targetGroups, groups: targetGroups,

View File

@@ -20,7 +20,7 @@ const MONTHS = [
const DAY_MS = 86400000; const DAY_MS = 86400000;
/** /**
* "6-13н", "1-4,6-11н.", "с 3н.", "со 2 нед.", "1-8,10-17" → [[6, 13]], [[1, 4], [6, 11]], [[3, null]]… * "6-13н", "1-4,6-11н.", "1-4н.;6-12н.", "с 3н.", "со 2 нед.", "1-8,10-17" → [[6, 13]], [[1, 4], [6, 11]], [[3, null]]…
* Returns null when the text is empty or not a pure week list. * Returns null when the text is empty or not a pure week list.
*/ */
export function parseWeekRanges(condition) { export function parseWeekRanges(condition) {
@@ -28,10 +28,12 @@ export function parseWeekRanges(condition) {
if (!text) return null; if (!text) return null;
const from = text.match(/^(?:с|со)\s*(\d{1,2})\s*(?:н(?:ед)?)?[.\s]*$/); const from = text.match(/^(?:с|со)\s*(\d{1,2})\s*(?:н(?:ед)?)?[.\s]*$/);
if (from) return [[Number(from[1]), null]]; if (from) return [[Number(from[1]), null]];
// "с 4-16н" reads as an ordinary range. // "с 4-16н" reads as an ordinary range; "1-4н.;6-12н." and "2-5 н., 10-17 н." as one list.
text = text text = text
.replace(/^(?:с|со)\s+/, "") .replace(/^(?:с|со)\s+/, "")
.replace(/\s*н(?:ед)?[.\s]*$/, "") .replace(/\s*н(?:ед)?[.\s]*$/, "")
.replace(/\s*н(?:ед)?\.?\s*(?=[;,])/g, "")
.replace(/\s*;\s*/g, ",")
.trim(); .trim();
if (!/^\d{1,2}(?:\s*[-–,]\s*\d{1,2})*$/.test(text)) return null; if (!/^\d{1,2}(?:\s*[-–,]\s*\d{1,2})*$/.test(text)) return null;
const ranges = []; const ranges = [];

84
test/diagnostics.test.js Normal file
View File

@@ -0,0 +1,84 @@
import { test } from "node:test";
import assert from "node:assert/strict";
import { diagnose, catalogDiagnostics } from "../server/diagnostics.js";
const lesson = (raw, fields = {}) => ({
day: 1,
start: "09:00",
end: "10:20",
subject: raw,
condition: "",
weekRanges: null,
dates: [],
date: null,
groups: ["25-АРХ"],
subgroups: [],
raw,
...fields,
});
const codes = (...lessons) =>
diagnose({ academicYear: "2026", groups: ["25-АРХ"], lessons }).map((p) => p.code);
test("Диагностика: обычные занятия без замечаний", () => {
assert.deepEqual(
codes(
lesson("Химия (л.) Иванов И.И. 101", { subject: "Химия" }),
lesson("1-8н. Физика", { subject: "Физика", condition: "1-8н.", weekRanges: [[1, 8]] }),
lesson("Единый день 07.09;14.09", { subject: "Единый день", dates: ["2026-09-07", "2026-09-14"] }),
),
[],
);
});
test("Диагностика: пометка недель прочитана не целиком", () => {
assert.deepEqual(
codes(lesson("1-4н.;6-12н. Политэкономия", { subject: "6-12н. Политэкономия", condition: "1-4н.", weekRanges: [[1, 4]] })),
["weeks_partly"],
);
});
test("Диагностика: дата и время в начале ячейки", () => {
assert.deepEqual(codes(lesson("24.11. Компьютерная графика")), ["date_in_subject"]);
assert.deepEqual(codes(lesson("3.12 Микроконтроллеры")), ["date_in_subject"]);
assert.deepEqual(codes(lesson("9.00 Информационный час")), ["time_in_subject"]);
assert.deepEqual(codes(lesson("11:10-11:30 – информационный час")), ["time_in_subject"]);
});
test("Диагностика: опечатка в дате, нечитаемые недели, даты не того дня", () => {
assert.deepEqual(
codes(lesson("19,11, 03.12, 17.12 Микроконтроллеры", { subject: "Микроконтроллеры", condition: "19,11,", weekRanges: null })),
["weeks_like_date"],
);
assert.deepEqual(
codes(lesson("2,6-12-16н Управление проектами", { subject: "Управление проектами", condition: "2,6-12-16н" })),
["weeks_unreadable"],
);
// 2026-10-13 is a Tuesday, the row is Monday's.
assert.deepEqual(codes(lesson("13.10 Информационный час", { subject: "Информационный час", date: "2026-10-13" })), [
"date_weekday",
]);
assert.deepEqual(codes(lesson("15 октября Экскурсия", { subject: "Экскурсия" })), ["dates_unread"]);
});
test("Диагностика каталога: фильтры по группе и коду", () => {
const doc = (id, groups, lessons) => ({
id,
file: { name: `${id}.docx`, faculty: "ИСФ" },
schedule: { academicYear: "2026", groups, lessons, source: {} },
});
const idx = {
builtAt: "2026-10-19T00:00:00Z",
failed: [],
docs: [
doc("a", ["25-АРХ"], [lesson("9.00 Информационный час")]),
doc("b", ["24-ДС"], [lesson("3.12 Химия", { groups: ["24-ДС"] })]),
doc("c", ["23-ИТ"], [lesson("Химия", { groups: ["23-ИТ"] })]),
],
};
const all = catalogDiagnostics(idx);
assert.equal(all.documents, 3);
assert.equal(all.problems, 2);
assert.deepEqual(all.counts, { time_in_subject: 1, date_in_subject: 1 });
assert.deepEqual(catalogDiagnostics(idx, { group: "24-дс" }).items.map((i) => i.doc.id), ["b"]);
assert.deepEqual(catalogDiagnostics(idx, { code: "time_in_subject" }).items.map((i) => i.doc.id), ["a"]);
});

View File

@@ -1,7 +1,8 @@
import test from "node:test"; import test from "node:test";
import assert from "node:assert/strict"; import assert from "node:assert/strict";
import { readFileSync } from "node:fs"; import { readFileSync } from "node:fs";
import { groupsIn, parseDocx, parseWord } from "../server/parser.js"; import { groupsIn, parseDocx, parseWord, details, leadingDate, leadingTime } from "../server/parser.js";
import { parseWeekRanges } from "../shared/weeks.js";
import { decodeListing, fileMetadata } from "../server/source.js"; import { decodeListing, fileMetadata } from "../server/source.js";
const fixture = (name) => const fixture = (name) =>
readFileSync(new URL(`./fixtures/${name}.docx`, import.meta.url)); readFileSync(new URL(`./fixtures/${name}.docx`, import.meta.url));
@@ -236,3 +237,39 @@ test("Расписание зачетов: дата перед днём неде
], ],
); );
}); });
test("Пометки недель из нескольких частей через «;» и «,»", () => {
for (const [cell, condition, ranges] of [
["1-4н.;6-12н. Современная политэкономия (п.з.)", "1-4н.;6-12н.", [[1, 4], [6, 12]]],
["1-4;10-14н. Материаловедение и технологии (л.)", "1-4;10-14н.", [[1, 4], [10, 14]]],
["2,4н.;10-16н. Охрана труда (л.з.)", "2,4н.;10-16н.", [[2, 2], [4, 4], [10, 16]]],
["2-5 н., 10-17 н. Конструкция автомобиля (л.)", "2-5 н., 10-17 н.", [[2, 5], [10, 17]]],
]) {
const d = details(cell);
assert.equal(d.condition, condition, cell);
assert.deepEqual(parseWeekRanges(d.condition), ranges, cell);
assert.ok(!/^\d/.test(d.subject), d.subject);
}
});
test("Дата и время в начале ячейки", () => {
assert.equal(leadingDate("3.12 Микроконтроллерные устройства", 2026).date, "2026-12-03");
assert.equal(leadingDate("24.11. Алгоритмы компьютерной графики", 2026).date, "2026-11-24");
assert.equal(leadingDate("09.09.Конструкционные материалы", 2026).date, "2026-09-09");
assert.equal(leadingDate("12.09.26г. Аналитическая геометрия", 2026).date, "2026-09-12");
assert.equal(leadingDate("14.02 Химия", 2026).date, "2027-02-14");
// Not dates: a time, an ambiguous one-digit day, a list handled by DATE_LIST.
assert.equal(leadingDate("9.00 Информационный час", 2026), null);
assert.equal(leadingDate("9.10 Химия", 2026), null);
assert.equal(leadingDate("03.12, 17.12 Химия", 2026), null);
assert.deepEqual(leadingTime("11:10-11:30 – информационный час"), { starts: ["11:10"], end: "11:30", length: 11 });
assert.deepEqual(leadingTime("9.00 Информационный час").starts, ["09:00"]);
assert.deepEqual(leadingTime("18.35. Налоговое право").starts, ["18:35"]);
assert.deepEqual(leadingTime("17.00 и 18.35 Русский язык").starts, ["17:00", "18:35"]);
assert.deepEqual(leadingTime("18.35+20.10 Новополоцк").starts, ["18:35", "20:10"]);
// "20.10" is also 20 October: only taken as a time when the caller says so.
assert.equal(leadingTime("20.10 Теория государственного управления"), null);
assert.deepEqual(leadingTime("20.10 Теория государственного управления", true).starts, ["20:10"]);
assert.equal(leadingTime("3.12 Микроконтроллерные устройства", true), null);
});

44
test/snapshot.test.js Normal file
View File

@@ -0,0 +1,44 @@
import { test } from "node:test";
import assert from "node:assert/strict";
import { readFileSync, readdirSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
import { parseDocx } from "../server/parser.js";
import { diagnose } from "../server/diagnostics.js";
import { snapshotOf, diffLines } from "../scripts/snapshot-lines.js";
// Every fixture parsed and compared line by line with test/snapshots/<name>.txt, together with
// the cells diagnostics flags. After an intended parser change: UPDATE_SNAPSHOTS=1 npm test,
// then read the diff of test/snapshots/ before committing it.
const fixtures = new URL("./fixtures/", import.meta.url);
const snapshots = new URL("./snapshots/", import.meta.url);
const update = process.env.UPDATE_SNAPSHOTS === "1";
// The bell schedule and the week table are calendar documents, not timetables.
const calendars = new Set(["bells.docx", "weeks.docx"]);
for (const file of readdirSync(fixtures).filter((f) => f.endsWith(".docx") && !calendars.has(f)).sort()) {
test(`снимок разбора: ${file}`, () => {
const meta = existsSync(new URL(`${file}.json`, fixtures))
? JSON.parse(readFileSync(new URL(`${file}.json`, fixtures), "utf8"))
: {};
const schedule = parseDocx(readFileSync(new URL(file, fixtures)), {
name: meta.name || file,
modified: meta.modified,
});
const lines = [
...snapshotOf(schedule),
...diagnose(schedule).map((p) => `! ${p.code} | ${(p.raw || p.groups?.join(",") || "").replace(/\s+/g, " ")}`),
];
const target = new URL(file.replace(/\.docx$/, ".txt"), snapshots);
if (update || !existsSync(target)) {
mkdirSync(snapshots, { recursive: true });
writeFileSync(target, lines.join("\n") + "\n");
return;
}
const saved = readFileSync(target, "utf8").trimEnd().split("\n");
const { removed, added } = diffLines(saved, lines);
assert.ok(
!removed.length && !added.length,
`Разбор ${file} изменился (UPDATE_SNAPSHOTS=1 npm test, если так и задумано):\n` +
[...removed.map((l) => ` − ${l}`), ...added.map((l) => ` + ${l}`)].join("\n"),
);
});
}

View File

@@ -0,0 +1,69 @@
# Осенний семестр · 23-ЛГ, 23-БА
вт 08:30–09:55 | нед. 6-14, нижняя строка | Моделирование и проектирование логистических систем | Лабораторная | 342 | Пальчевская Т.С. | 23-ЛГ,23-ЛГ/п2
вт 08:30–09:55 | нед. 7-15, верхняя строка | Моделирование и проектирование логистических систем | Лабораторная | 342 | Пальчевская Т.С. | 23-ЛГ,23-ЛГ/п1
вт 10:05–11:30 | нед. 1-13 | Моделирование и проектирование логистических систем | Практика | 121 | Пальчевская Т.С. | 23-ЛГ
вт 10:05–11:30 | нед. 14-16 | Управление запасами | Лекция | 121 | Малей Е.Б. | 23-ЛГ
вт 10:05–11:30 | нед. 16, нижняя строка | Принятие управленческих решений и экономическая безопасность | Лекция | 331 | Гайдова М.В. | 23-БА
вт 10:05–11:30 | нед. 4-14, нижняя строка | Бизнес-анализ | Практика | 331 | Костюченко Е.А. | 23-БА
вт 11:45–13:10 | нед. 1-6,8-16 | Распределительная логистика | Лекция | 121 | Дубко Н.А. | 23-ЛГ
вт 11:45–13:10 | нед. 2-15 | Бизнес-анализ | Практика | 331 | Костюченко Е.А. | 23-БА
вт 11:45–13:10 | нед. 7 | Распределительная логистика | Практика | 121 | Пальчевская Т.С. | 23-ЛГ
вт 13:40–15:05 | каждую неделю | Распределительная логистика | Практика | 121 | Пальчевская Т.С. | 23-ЛГ
вт 13:40–15:05 | нед. 1-3,6-10,12-17 | Управление проектами | Лекция | 331 | Емельянов А.А. | 23-БА
вт 15:20–16:45 | нед. 1-17 | Управление проектами | Практика | 331 | Паньков П.И. | 23-БА
вт 15:20–16:45 | нед. 6-14, нижняя строка | Управление запасами | Лабораторная | 342 | Пальчевская Т.С. | 23-ЛГ,23-ЛГ/п1
вт 15:20–16:45 | нед. 7-15, верхняя строка | Управление запасами | Лабораторная | 342 | Пальчевская Т.С. | 23-ЛГ,23-ЛГ/п2
вт 17:00–18:25 | нед. 13-17, верхняя строка | Управление проектами | Практика | 331 | Паньков П.И. | 23-БА
пн 10:05–11:30 | нед. 3-13 | Корпоративная социальная ответственность | Лекция | 121 | Скопьюк В.А. | 23-БА
пн 11:45–13:10 | каждую неделю | Моделирование и проектирование логистических систем | Лекция | 123 | Пальчевская Т.С. | 23-ЛГ
пн 11:45–13:10 | нед. 3 | Корпоративная социальная ответственность | Лекция | 121 | Скопьюк В.А. | 23-БА
пн 11:45–13:10 | нед. с 4 | Принятие управленческих решений и экономическая безопасность | Лекция | 121 | Гайдова М.В. | 23-БА
пн 13:40–15:05 | нед. 1,2 | Моделирование и проектирование логистических систем | Лекция | 123 | Пальчевская Т.С. | 23-ЛГ
пн 13:40–15:05 | нед. 3 | Корпоративная социальная ответственность | Практика | 121 | Селезнева А.А. | 23-БА
пн 13:40–15:05 | нед. 4-16 | Принятие управленческих решений и экономическая безопасность | Практика | 121 | Горбатенко А.А. | 23-БА
пн 13:40–15:05 | нед. с 3 | Финансовая логистика | Лекция | 123 | Веретенникова Е.С. | 23-ЛГ
пн 15:20–16:45 | нед. 3-13 | Корпоративная социальная ответственность | Практика | 121 | Селезнева А.А. | 23-БА
пн 15:20–16:45 | нед. с 3 | Финансовая логистика | Практика | 123 | Веретенникова Е.С. | 23-ЛГ
пн 16:50 | каждую неделю | Информационный (кураторский) час | Занятие | 129 | Костюченко Е.А. | 23-БА
пн 17:00–18:25 | нед. 10-16, нижняя строка | Финансовая логистика | Практика | 123 | Веретенникова Е.С. | 23-ЛГ
пн 17:00–18:25 | нед. 9-15, верхняя строка | Финансовая логистика | Лекция | 123 | Веретенникова Е.С. | 23-ЛГ
пт 08:30–09:55 | нед. 6-13 | Инновационный менеджмент | Практика | 333 | Селезнева А.А. | 23-БА
пт 08:30–09:55 | нед. 8,9 | Распределительная логистика | Лекция | 121 | Дубко Н.А. | 23-ЛГ
пт 10:05–11:30 | нед. 1-4,6-11 | PR-менеджмент | Лекция | 129 | Потросова Е.С. | 23-БА
пт 10:05–11:30 | нед. 12-15 | Инновационный менеджмент | Практика | 129 | Селезнева А.А. | 23-БА
пт 10:05–11:30 | нед. 16 | Бизнес-планирование | Практика | 129 | Камеко О.А. | 23-БА
пт 10:05–11:30 | нед. 2-15 | Управление персоналом в логистике | Лекция | 121 | Дубко Н.А. | 23-ЛГ
пт 11:45–13:10 | нед. 2-15 | Управление персоналом в логистике | Практика | 121 | Дубко Н.А. | 23-ЛГ
пт 11:45–13:10 | нед. 3,4,6-16 | Бизнес-анализ | Лекция | 326 | Войтенок Ж.Е. | 23-БА
пт 13:40–15:05 | нед. 2-6 | Логистика в электронной торговле | Лекция | 121 | Розина А.П. | 23-ЛГ
пт 13:40–15:05 | нед. 7-10 | Логистика в электронной торговле | Практика | 121 | Розина А.П. | 23-ЛГ
ср 08:30–09:55 | нед. 1-16 | Риск-менеджмент | Лекция | 129 | Измайлович С.В. | 23-БА
ср 10:05–11:30 | нед. 1-16 | Риск-менеджмент | Практика | 129 | Измайлович С.В. | 23-БА
ср 10:05–11:30 | нед. 1-16 | Управление запасами | Лекция | 123 | Малей Е.Б. | 23-ЛГ
ср 11:45–13:10 | каждую неделю, нижняя строка | Управление проектами | Лекция | 100 | Емельянов А.А. | 23-БА
ср 11:45–13:10 | нед. 5-17, верхняя строка | Инновационный менеджмент | Лекция | 271 | Горбатенко А.А. | 23-БА
ср 11:45–13:10 | нед. с 3 | Экспедирование грузов | Лекция | 123 | Мещерякова О.М. | 23-ЛГ
ср 13:40–15:05 | каждую неделю, нижняя строка | Логистика в электронной торговле | Лекция | 332 | Розина А.П. | 23-ЛГ
ср 13:40–15:05 | нед. с 3, верхняя строка | Логистика в электронной торговле | Практика | 332 | Розина А.П. | 23-ЛГ
ср 15:20–16:45 | нед. 7-11, верхняя строка | Логистика в электронной торговле | Лабораторная | 327 | Розина А.П. | 23-ЛГ,23-ЛГ/п1
ср 15:20–16:45 | нед. 8-12, нижняя строка | Логистика в электронной торговле | Лабораторная | 327 | Розина А.П. | 23-ЛГ,23-ЛГ/п2
чт 08:30–09:55 | нед. 2-11 | PR-менеджмент | Практика | 125 | Селезнева А.А. | 23-БА
чт 09:30 | каждую неделю | Информационный (кураторский) час | Занятие | 121 | Мещерякова О.М. | 23-ЛГ
чт 10:05–11:30 | каждую неделю | Управление запасами | Практика | 121 | Пальчевская Т.С. | 23-ЛГ
чт 10:05–11:30 | нед. 2, нижняя строка | Бизнес-планирование | Практика | 430 | Камеко О.А. | 23-БА
чт 10:05–11:30 | нед. 3,5, верхняя строка | Бизнес-планирование | Лекция | 430 | Лисиченок Е.П. | 23-БА
чт 10:05–11:30 | нед. 4-12, нижняя строка | Бизнес-анализ | Лекция | 430 | Войтенок Ж.Е. | 23-БА
чт 10:05–11:30 | нед. 7,9,11, верхняя строка | Бизнес-анализ | Лекция | 430 | Войтенок Ж.Е. | 23-БА
чт 11:45–13:10 | нед. 1-8,10-17 | Бизнес-планирование | Лекция | 430 | Лисиченок Е.П. | 23-БА
чт 11:45–13:10 | нед. 3-15 | Экспедирование грузов | Практика | 121 | Мещерякова О.М. | 23-ЛГ
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования: 10 сентября, 15 октября, 19 ноября, 17 декабря. | Занятие | | | 23-ЛГ,23-БА
чт 13:40–15:05 | нед. 1,3-17 | Бизнес-планирование | Практика | 430 | Камеко О.А. | 23-БА
чт 13:40–15:05 | нед. 3-15, верхняя строка | Таможенная логистика | Лекция | 121 | Мещерякова О.М. | 23-ЛГ
чт 13:40–15:05 | нед. 4-16, нижняя строка | Таможенная логистика | Практика | 121 | Мещерякова О.М. | 23-ЛГ
чт 15:20–16:45 | нед. 12-16, нижняя строка | Инновационный менеджмент | Лекция | 333 | Горбатенко А.А. | 23-БА
чт 15:20–16:45 | нед. 13-17, верхняя строка | Принятие управленческих решений и экономическая безопасность | Практика | 333 | Горбатенко А.А. | 23-БА
чт 15:20–16:45 | нед. 3,5, верхняя строка | Таможенная логистика | Лекция | 121 | Мещерякова О.М. | 23-ЛГ
чт 15:20–16:45 | нед. 4-16, нижняя строка | Таможенная логистика | Практика | 121 | Мещерякова О.М. | 23-ЛГ
чт 15:20–16:45 | нед. 7-13, верхняя строка | Экспедирование грузов | Лекция | 121 | Мещерякова О.М. | 23-ЛГ
чт 15:20–16:45 | нед. 9,11, верхняя строка | Инновационный менеджмент | Лекция | 333 | Горбатенко А.А. | 23-БА
! weeks_unreadable | 2,6-12-16н Управление проектами (л.) Емельянов А.А. ауд. 100

View File

@@ -0,0 +1,144 @@
# Осенний семестр · 24-ИТ-1, 24-ИТ-2
2026-09-03 15:20–16:45 | один раз, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п3
2026-09-03 15:20–16:45 | один раз, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п3
2026-09-07 08:30–09:55 | один раз, нижняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 213А | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п5
2026-09-07 08:30–09:55 | один раз, нижняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 213А | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п5
2026-09-07 15:20–16:45 | один раз, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п1
2026-09-07 15:20–16:45 | один раз, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п1
2026-09-21 15:20–16:45 | один раз, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п2
2026-09-21 15:20–16:45 | один раз, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п2
2026-10-01 15:20–16:45 | один раз, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п4
2026-10-01 15:20–16:45 | один раз, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п4
вт 08:30–09:55 | каждую неделю, нижняя строка | Базы данных | Лекция | 254В | Скуковская А.А. | 24-ИТ-1,24-ИТ-2
вт 08:30–09:55 | нед. 1, верхняя строка | Базы данных | Лекция | 254В | Скуковская А.А. | 24-ИТ-1,24-ИТ-2
вт 08:30–09:55 | нед. 3, верхняя строка | Веб-технологии | Лекция | 211А | Дьякова А.С. | 24-ИТ-1,24-ИТ-2
вт 10:05–11:30 | каждую неделю, верхняя строка | Веб-технологии | Лекция | 211А | Дьякова А.С. | 24-ИТ-1,24-ИТ-2
вт 10:05–11:30 | нед. 2, нижняя строка | Метрология, стандартизация и сертификация (в информационных технологиях | Лекция | 211А | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 10:05–11:30 | нед. 4, нижняя строка | Стандартизация программного обеспечения | Лекция | 211А | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 11:45–13:10 | каждую неделю, верхняя строка | Метрология, стандартизация и сертификация (в информационных технологиях | Лекция | 321Д | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 11:45–13:10 | каждую неделю, нижняя строка | Стандартизация программного обеспечения | Лекция | 321Д | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 13:40–15:05 | каждую неделю, верхняя строка | Метрология, стандартизация и сертификация (в информационных технологиях | Практика | 321Д | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 13:40–15:05 | каждую неделю, нижняя строка | Стандартизация программного обеспечения | Практика | 321Д | Михнович О.В. | 24-ИТ-1,24-ИТ-2
вт 15:20–16:45 | каждую неделю | Ф И З И Ч Е С К А Я К У Л Ь Т У Р А | Занятие | | | 24-ИТ-1,24-ИТ-2
пн 08:30–09:55 | каждую неделю, верхняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п3
пн 08:30–09:55 | каждую неделю, верхняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п3
пн 08:30–09:55 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 207Г | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п4
пн 08:30–09:55 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 207Г | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п4
пн 10:05–11:30 | каждую неделю | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п5
пн 10:05–11:30 | каждую неделю | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п5
пн 10:05–11:30 | каждую неделю, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 213А | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п3
пн 10:05–11:30 | каждую неделю, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 213А | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п3
пн 10:05–11:30 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 207Г | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п4
пн 10:05–11:30 | каждую неделю, нижняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 320Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п4
пн 10:05–11:30 | каждую неделю, нижняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 320Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п4
пн 11:45–13:10 | нед. 1-14 | Объектно-ориентированные технологии программирования и стандарты проектирования | Лекция | 220Д | Глухова Т.М. | 24-ИТ-1,24-ИТ-2
пн 11:45–13:10 | нед. 15-16 | Веб-технологии | Лекция | 220Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-2
пн 13:40–15:05 | каждую неделю | Разработка и анализ требований к программному обеспечению | Лекция | 220Д | Струк Т.М. | 24-ИТ-1,24-ИТ-2
пн 15:20–16:45 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 302Г | Аврусевич К.Д. | 24-ИТ-1,24-ИТ-1/п5
пн 15:20–16:45 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 302Г | Аврусевич К.Д. | 24-ИТ-2,24-ИТ-2/п5
пн 15:20–16:45 | каждую неделю, верхняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п2
пн 15:20–16:45 | каждую неделю, верхняя строка | Разработка и анализ требований к програм-мному обеспечению | Лабораторная | 218Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п2
пн 15:20–16:45 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п4
пн 15:20–16:45 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п4
пн 15:20–16:45 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п3
пн 15:20–16:45 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 217Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п3
пн 17:00–18:25 | нед. 2, нижняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п3
пн 17:00–18:25 | нед. 2, нижняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п3
пт 08:30–09:55 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-1,24-ИТ-1/п1
пт 08:30–09:55 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-2,24-ИТ-2/п1
пт 08:30–09:55 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | 303Г | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п3
пт 08:30–09:55 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | 303Г | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п3
пт 08:30–09:55 | нед. 1, верхняя строка | Математическое программирование | Лабораторная | 302Г | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п2
пт 08:30–09:55 | нед. 1, верхняя строка | Математическое программирование | Лабораторная | 302Г | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п2
пт 08:30–09:55 | нед. 2, нижняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 302Г | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п1
пт 08:30–09:55 | нед. 2, нижняя строка | Объектно-ориентированные технологии програм-мирования и стандарты проектирования | Лабораторная | 302Г | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п1
пт 08:30–09:55 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 302Г | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п2
пт 08:30–09:55 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 302Г | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п2
пт 10:05–11:30 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 302Г | Аврусевич К.Д. | 24-ИТ-1,24-ИТ-1/п2
пт 10:05–11:30 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 302Г | Аврусевич К.Д. | 24-ИТ-2,24-ИТ-2/п2
пт 10:05–11:30 | каждую неделю, верхняя строка | Математическое программирование | Лабораторная | 217Д | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п4
пт 10:05–11:30 | каждую неделю, верхняя строка | Математическое программирование | Лабораторная | 217Д | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п4
пт 10:05–11:30 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-1,24-ИТ-1/п1
пт 10:05–11:30 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-2,24-ИТ-2/п1
пт 10:05–11:30 | каждую неделю, нижняя строка | Веб-технологии | Лабораторная | 303Г | Аврусевич К.Д. | 24-ИТ-1,24-ИТ-1/п3
пт 10:05–11:30 | каждую неделю, нижняя строка | Веб-технологии | Лабораторная | 303Г | Аврусевич К.Д. | 24-ИТ-2,24-ИТ-2/п3
пт 10:05–11:30 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п1
пт 10:05–11:30 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п1
пт 10:05–11:30 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-1,24-ИТ-1/п2
пт 10:05–11:30 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 207Г | Скуковская А.А. | 24-ИТ-2,24-ИТ-2/п2
пт 10:05–11:30 | нед. 2, нижняя строка | Объектно-ориентированне технологии программи-рования и стандарты проектирования | Лабораторная | 217Д | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п4
пт 10:05–11:30 | нед. 2, нижняя строка | Объектно-ориентированне технологии программи-рования и стандарты проектирования | Лабораторная | 217Д | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п4
пт 10:05–11:30 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 217Д | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п5
пт 10:05–11:30 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 217Д | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п5
пт 11:45–13:10 | нед. 1-13 | Математическое программирование | Лекция | 321Д | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-2
пт 11:45–13:10 | нед. 14-15 | Базы данных | Лекция | 321Д | Скуковская А.А. | 24-ИТ-1,24-ИТ-2
пт 13:40–15:05 | каждую неделю | Системное программирование | Лекция | 254В | Скуковская А.А. | 24-ИТ-1,24-ИТ-2
пт 15:20–16:45 | каждую неделю | Системное программирование | Лекция | 254В | Скуковская А.А. | 24-ИТ-1,24-ИТ-2
сб 10:05–11:30 | нед. 1-13 | Основы информационной безопасности | Лекция | 321Д | Пастухов Ю.Ф. | 24-ИТ-1,24-ИТ-2
сб 11:45–13:10 | даты 2026-09-12,2026-09-26,2026-10-10,2026-10-24, нижняя строка | Основы информационной безопасности | Практика | 321Д | Пастухов Ю.Ф. | 24-ИТ-1
сб 11:45–13:10 | даты 2026-09-12,2026-09-26,2026-10-10,2026-10-24, нижняя строка | Основы информационной безопасности | Практика | 321Д | Пастухов Ю.Ф. | 24-ИТ-2
сб 11:45–13:10 | каждую неделю, верхняя строка | Основы информационной безопасности | Практика | 321Д | Пастухов Ю.Ф. | 24-ИТ-1
сб 11:45–13:10 | каждую неделю, верхняя строка | Основы информационной безопасности | Практика | 321Д | Пастухов Ю.Ф. | 24-ИТ-2
ср 10:05–11:30 | каждую неделю | со 2 по 14 нед. М о д у л ь « М а й н о р » | Занятие | | | 24-ИТ-1,24-ИТ-2
чт 08:30–09:55 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 311А | Скуковская А.А. | 24-ИТ-1,24-ИТ-1/п2
чт 08:30–09:55 | каждую неделю, нижняя строка | Системное программирование | Лабораторная | 311А | Скуковская А.А. | 24-ИТ-2,24-ИТ-2/п2
чт 10:05–11:30 | каждую неделю | Ф И З И Ч Е С К А Я К У Л Ь Т У Р А | Занятие | | | 24-ИТ-1,24-ИТ-2
чт 11:45–13:10 | каждую неделю, верхняя строка | Базы данных | Лабораторная | 218Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п2
чт 11:45–13:10 | каждую неделю, верхняя строка | Базы данных | Лабораторная | 218Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п2
чт 11:45–13:10 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 207Г | Аврусевич К.Д. | 24-ИТ-1,24-ИТ-1/п4
чт 11:45–13:10 | каждую неделю, верхняя строка | Веб-технологии | Лабораторная | 207Г | Аврусевич К.Д. | 24-ИТ-2,24-ИТ-2/п4
чт 11:45–13:10 | каждую неделю, верхняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п5
чт 11:45–13:10 | каждую неделю, верхняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п5
чт 11:45–13:10 | каждую неделю, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 217Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п1
чт 11:45–13:10 | каждую неделю, верхняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 217Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п1
чт 11:45–13:10 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п3
чт 11:45–13:10 | каждую неделю, верхняя строка | Системное программирование | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п3
чт 11:45–13:10 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 218Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п3
чт 11:45–13:10 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 218Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п3
чт 11:45–13:10 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п4
чт 11:45–13:10 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п4
чт 11:45–13:10 | каждую неделю, нижняя строка | Веб-технологии | Лабораторная | 207Г | Аврусевич К.Д. | 24-ИТ-1,24-ИТ-1/п1
чт 11:45–13:10 | каждую неделю, нижняя строка | Веб-технологии | Лабораторная | 207Г | Аврусевич К.Д. | 24-ИТ-2,24-ИТ-2/п1
чт 11:45–13:10 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п2
чт 11:45–13:10 | каждую неделю, нижняя строка | Математическое программирование | Лабораторная | | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п2
чт 11:45–13:10 | каждую неделю, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 217Д | Струк Т.М. | 24-ИТ-1,24-ИТ-1/п5
чт 11:45–13:10 | каждую неделю, нижняя строка | Разработка и анализ требований к программному обеспечению | Лабораторная | 217Д | Струк Т.М. | 24-ИТ-2,24-ИТ-2/п5
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования: 10 сентября, 15 октября, 19 ноября, 17 декабря | Занятие | | | 24-ИТ-1,24-ИТ-2
чт 13:40–15:05 | нед. 1, верхняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п3
чт 13:40–15:05 | нед. 1, верхняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п3
чт 13:40–15:05 | нед. 1, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п4
чт 13:40–15:05 | нед. 1, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п4
чт 13:40–15:05 | нед. 1, верхняя строка | Математическое программирование | Лабораторная | 207Г | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п5
чт 13:40–15:05 | нед. 1, верхняя строка | Математическое программирование | Лабораторная | 207Г | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п5
чт 13:40–15:05 | нед. 1, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п2
чт 13:40–15:05 | нед. 1, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п2
чт 13:40–15:05 | нед. 2, нижняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п1
чт 13:40–15:05 | нед. 2, нижняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п1
чт 13:40–15:05 | нед. 2, нижняя строка | Математическое программирование | Лабораторная | 219Д | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п4
чт 13:40–15:05 | нед. 2, нижняя строка | Математическое программирование | Лабораторная | 219Д | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п4
чт 13:40–15:05 | нед. 2, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п5
чт 13:40–15:05 | нед. 2, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п5
чт 13:40–15:05 | нед. 3, верхняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п2
чт 13:40–15:05 | нед. 3, верхняя строка | Базы данных | Лабораторная | 217Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п2
чт 13:40–15:05 | нед. 3, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п5
чт 13:40–15:05 | нед. 3, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п5
чт 13:40–15:05 | нед. 3, верхняя строка | Математическое программирование | Лабораторная | 207Г | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п3
чт 13:40–15:05 | нед. 3, верхняя строка | Математическое программирование | Лабораторная | 207Г | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п3
чт 13:40–15:05 | нед. 3, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п1
чт 13:40–15:05 | нед. 3, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п1
чт 13:40–15:05 | нед. 4, нижняя строка | Математическое программирование | Лабораторная | 217Д | Пастухов Д.Ф. | 24-ИТ-1,24-ИТ-1/п1
чт 13:40–15:05 | нед. 4, нижняя строка | Математическое программирование | Лабораторная | 217Д | Пастухов Д.Ф. | 24-ИТ-2,24-ИТ-2/п1
чт 13:40–15:05 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п4
чт 13:40–15:05 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п4
чт 15:20–16:45 | каждую неделю, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-1,24-ИТ-1/п5
чт 15:20–16:45 | каждую неделю, верхняя строка | Базы данных | Лабораторная | 219Д | Юрчишко Е.И. | 24-ИТ-2,24-ИТ-2/п5
чт 15:20–16:45 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 207Д | Дьякова А.С. | 24-ИТ-1,24-ИТ-1/п1
чт 15:20–16:45 | каждую неделю, нижняя строка | Базы данных | Лабораторная | 207Д | Дьякова А.С. | 24-ИТ-2,24-ИТ-2/п1
чт 15:20–16:45 | нед. 1, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п2
чт 15:20–16:45 | нед. 1, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п2
чт 15:20–16:45 | нед. 2, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п5
чт 15:20–16:45 | нед. 2, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п5
чт 15:20–16:45 | нед. 3, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п1
чт 15:20–16:45 | нед. 3, верхняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п1
чт 15:20–16:45 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-1,24-ИТ-1/п4
чт 15:20–16:45 | нед. 4, нижняя строка | Объектно- ориентированные технологии программи-рования и стандарты проектирования | Лабораторная | 311А | Гордевич Д.А. | 24-ИТ-2,24-ИТ-2/п4

11
test/snapshots/fit.txt Normal file
View File

@@ -0,0 +1,11 @@
# Установочная сессия · 26-ИТзс
2026-09-17 11:00–11:30 | один раз | Организационное собрание | Занятие | 220Д | Петрович О.Н. | 26-ИТзс
2026-09-17 11:45–13:10 | один раз | Основы информационных технологий и компьютерной графики | Лекция | 312А | Михнович О.В. | 26-ИТзс
2026-09-17 13:40–15:05 | один раз | Алгоритмы и структуры данных | Лекция | 211А | Струк Т.С. | 26-ИТзс
2026-09-18 08:30–09:55 | один раз | Линейная алгебра и аналитическая геометрия | Лекция | 200 (ДО) | Забелендик О.Н. | 26-ИТзс
2026-09-18 10:05–11:30 | один раз | Конструирование программного обеспечения | Лекция | 200 (ДО) | Струк Т.С. | 26-ИТзс
2026-09-18 11:45–13:10 | один раз | Белорусский язык | Практика | 200 (ДО) | Богорадова Т.Р. | 26-ИТзс
2026-09-18 13:40–15:05 | один раз | Основы алгоритмизации и программирования | Лекция | 200 (ДО) | Макарычева В.А. | 26-ИТзс
2026-09-18 15:20–16:45 | один раз | Иностранный язык | Практика | 200 (ДО) | Жизневская Л.В. | 26-ИТзс
2026-09-19 08:30–09:55 | один раз | Дискретная математика | Лекция | 211А | Забелендик О.Н. | 26-ИТзс
2026-09-19 10:05–11:30 | один раз | Математический анализ | Лекция | 211А | Забелендик О.Н. | 26-ИТзс

View File

@@ -0,0 +1,82 @@
# Осенний семестр · 24-КБ, 24-КФ
вт 08:30–09:55 | каждую неделю, верхняя строка | Электродинамика | Лекция | 220н | Вабищевич С.А. | 24-КФ
вт 08:30–09:55 | нед. 2-16, нижняя строка | Электродинамика | Практика | 220н | Вабищевич С.А. | 24-КФ
вт 10:05–11:30 | каждую неделю, верхняя строка | Методы оптимизации и исследования операций | Лабораторная | 333н | Скоромник О.В. | 24-КБ,24-КБ/п1
вт 10:05–11:30 | каждую неделю, верхняя строка | Надежность программного обеспечения | Лабораторная | 330 | Карабец Д.П. | 24-КБ,24-КБ/п2
вт 10:05–11:30 | каждую неделю, нижняя строка | Методы оптимизации и исследования операций | Лабораторная | 333н | Скоромник О.В. | 24-КБ,24-КБ/п2
вт 10:05–11:30 | каждую неделю, нижняя строка | Надежность программного обеспечения | Лабораторная | 330 | Карабец Д.П. | 24-КБ,24-КБ/п1
вт 10:05–11:30 | нед. 1-16 | Электродинамика | Практика | 220н | Вабищевич С.А. | 24-КФ
вт 11:45–13:10 | каждую неделю | Ф и з и ч е с к а я к у л ь т у р а | Занятие | | | 24-КБ,24-КФ
вт 13:40–15:05 | каждую неделю, верхняя строка | Методы численного анализа | Лекция | 418н | Сковородко М.А. | 24-КБ
вт 13:40–15:05 | каждую неделю, верхняя строка | Физика атома и введение в квантовую механику | Лекция | 220н | Окунев Д.О. | 24-КФ
вт 13:40–15:05 | каждую неделю, нижняя строка | Надежность программного обеспечения | Лабораторная | 330 | Карабец Д.П. | 24-КБ,24-КБ/п2
вт 13:40–15:05 | каждую неделю, нижняя строка | Объектно-ориентированное программирование | Лекция | 220н | Солдатенко П.Н. | 24-КФ
вт 15:20–16:45 | каждую неделю, верхняя строка | Методы оптимизации и исследования операций | Лабораторная | 333н | Скоромник О.В. | 24-КБ,24-КБ/п1
вт 15:20–16:45 | каждую неделю, верхняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п1
вт 15:20–16:45 | каждую неделю, нижняя строка | Методы оптимизации и исследования операций | Лабораторная | 333н | Скоромник О.В. | 24-КБ,24-КБ/п2
вт 15:20–16:45 | каждую неделю, нижняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п2
вт 15:20–16:45 | нед. 2-14, верхняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п2
вт 17:00–18:25 | нед. 1-13, верхняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п1
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный (для иностранных студентов) | Занятие | 412н | Козыренко А.Н. | 24-КБ
пн 10:05–11:30 | каждую неделю | Уравнения математической физики | Лекция | 336н | Козлов А.А. | 24-КБ
пн 11:45–13:10 | каждую неделю | Операционные системы | Лекция | 343 | Бураченок А.Л. | 24-КБ
пн 11:45–13:10 | каждую неделю | Электродинамика | Лекция | 402н | Вабищевич С.А. | 24-КФ
пн 13:40–15:05 | каждую неделю | Компьютерные сети | Лекция | 336н | Лукьянов А.О. | 24-КБ
пн 13:40–15:05 | каждую неделю | Основы математического моделирования | Лекция | 520н | Сковородко М.А. | 24-КФ
пн 15:20–16:45 | каждую неделю | Методы оптимизации и исследования операций | Лекция | 327н | Скоромник О.В. | 24-КБ
пн 15:20–16:45 | каждую неделю, верхняя строка | Основы радиоэлектроники | Лекция | 406н | Грозберг Ю.Г. | 24-КФ
пн 15:20–16:45 | каждую неделю, нижняя строка | Физика атома и введение в квантовую механику | Практика | 230н | Окунев Д.О. | 24-КФ
пн 17:00–18:25 | каждую неделю, верхняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование | Занятие | 215н | Жусель Д.В. | 24-КФ,24-КФ/п2
пн 17:00–18:25 | каждую неделю, верхняя строка | Надежность программного обеспечения | Лабораторная | 330 | Карабец Д.П. | 24-КБ,24-КБ/п1
пн 17:00–18:25 | каждую неделю, нижняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование Солдатенко | Занятие | 215н | | 24-КФ,24-КФ/п1
пн 17:00–18:25 | нед. 14,16, нижняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п2
пн 17:00–18:25 | нед. 15,17, верхняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п1
пт 08:30–09:55 | каждую неделю, верхняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование Солдатенко | Занятие | 215н | | 24-КФ,24-КФ/п1
пт 08:30–09:55 | каждую неделю, верхняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п2
пт 08:30–09:55 | каждую неделю, нижняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование | Занятие | 215н | Жусель Д.В. | 24-КФ,24-КФ/п2
пт 08:30–09:55 | каждую неделю, нижняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п1
пт 10:05–11:30 | каждую неделю, верхняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование Солдатенко | Занятие | 215н | | 24-КФ,24-КФ/п1
пт 10:05–11:30 | каждую неделю, верхняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п2
пт 10:05–11:30 | каждую неделю, нижняя строка | Лабораторный спецпрактикум: Объектно-ориентированное программирование | Занятие | 215н | Жусель Д.В. | 24-КФ,24-КФ/п2
пт 10:05–11:30 | каждую неделю, нижняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п1
пт 10:05–11:30 | нед. 1-13, верхняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п1
пт 10:05–11:30 | нед. 2-14, нижняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п2
пт 11:45–13:10 | каждую неделю | Надежность программного обеспечения | Лекция | 336н | Бураченок И.Б. | 24-КБ
пт 11:45–13:10 | каждую неделю | Физика атома и введение в квантовую механику | Лекция | 327н | Окунев Д.О. | 24-КФ
пт 13:40–15:05 | каждую неделю | Физика атома и введение в квантовую механику | Практика | 327н | Окунев Д.О. | 24-КФ
пт 13:40–15:05 | каждую неделю, верхняя строка | Защита от вредоносного программного обеспечения | Лабораторная | 330н | Сахаров Д.Н. | 24-КБ,24-КБ/п1
пт 13:40–15:05 | каждую неделю, нижняя строка | Защита от вредоносного программного обеспечения | Лабораторная | 330н | Сахаров Д.Н. | 24-КБ,24-КБ/п2
пт 13:40–15:05 | нед. 2-14, нижняя строка | Операционные системы | Лабораторная | 343 | Бураченок А.Л. | 24-КБ,24-КБ/п1
пт 13:40–15:05 | нед. 3,7-17, верхняя строка | Операционные системы | Лабораторная | 343 | Бураченок А.Л. | 24-КБ,24-КБ/п2
пт 15:20–16:45 | каждую неделю, верхняя строка | Защита от вредоносного программного обеспечения | Лабораторная | 330н | Сахаров Д.Н. | 24-КБ,24-КБ/п1
пт 15:20–16:45 | каждую неделю, нижняя строка | Защита от вредоносного программного обеспечения | Лабораторная | 330н | Сахаров Д.Н. | 24-КБ,24-КБ/п2
пт 15:20–16:45 | нед. 17, верхняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ
пт 15:20–16:45 | нед. 2-14, нижняя строка | Операционные системы | Лабораторная | 343 | Бураченок А.Л. | 24-КБ,24-КБ/п1
пт 15:20–16:45 | нед. 2-16, нижняя строка | Электродинамика | Практика | 230н | Вабищевич С.А. | 24-КФ
пт 15:20–16:45 | нед. 3,7-17, верхняя строка | Операционные системы | Лабораторная | 343 | Бураченок А.Л. | 24-КБ,24-КБ/п2
сб 08:30–09:55 | нед. 6-10 | Коррупция и ее общественная опасность | Лекция | 412н | Катушонок О.В. | 24-КБ,24-КФ
сб 10:05–11:30 | каждую неделю, верхняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п1
сб 10:05–11:30 | каждую неделю, нижняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п2
сб 11:45–13:10 | каждую неделю, верхняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п1
сб 11:45–13:10 | каждую неделю, нижняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п2
ср 10:05–11:30 | нед. 2-14 | Модуль «Майнор» | Занятие | | | 24-КБ,24-КФ
чт 08:30–09:55 | каждую неделю | Ф и з и ч е с к а я к у л ь т у р а 24-КФ: Русский язык как иностранный (для иностранных студентов) | Занятие | 537н | Кириллова В.С. | 24-КБ,24-КФ
чт 10:05–11:30 | каждую неделю, верхняя строка | Криптографические методы защиты информации | Лекция | 329н | Кухта С.В. | 24-КБ
чт 10:05–11:30 | каждую неделю, верхняя строка | Основы математического моделирования | Лабораторная | 215н | Сковородко М.А. | 24-КФ,24-КФ/п1
чт 10:05–11:30 | каждую неделю, верхняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п2
чт 10:05–11:30 | каждую неделю, нижняя строка | Криптографические методы защиты информации | Лекция | 321н | Кухта С.В. | 24-КБ
чт 10:05–11:30 | каждую неделю, нижняя строка | Основы математического моделирования | Лабораторная | 215н | Сковородко М.А. | 24-КФ,24-КФ/п2
чт 10:05–11:30 | каждую неделю, нижняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п1
чт 11:45–13:10 | каждую неделю, верхняя строка | Основы математического моделирования | Лабораторная | 215н | Сковородко М.А. | 24-КФ,24-КФ/п1
чт 11:45–13:10 | каждую неделю, верхняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п2
чт 11:45–13:10 | каждую неделю, нижняя строка | Основы математического моделирования | Лабораторная | 215н | Сковородко М.А. | 24-КФ,24-КФ/п2
чт 11:45–13:10 | нед. 1-16 | Защита от вредоносного программного обеспечения | Лекция | 423н | Кухта С.В. | 24-КБ
чт 11:45–13:10 | нед. 14,16, нижняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п1
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования: 10 сентября, 15 октября, 19 ноября, 17 декабря. | Занятие | | | 24-КБ,24-КФ
чт 13:40–15:05 | каждую неделю, верхняя строка | История и методология физики | Лекция | 220н | Окунев Д.О. | 24-КФ
чт 13:40–15:05 | каждую неделю, верхняя строка | Методы численного анализа | Лабораторная | 215н | Сковородко М.А. | 24-КБ,24-КБ/п2
чт 13:40–15:05 | каждую неделю, верхняя строка | Уравнения математической физики | Лабораторная | 336н | Козлов А.А. | 24-КБ,24-КБ/п1
чт 13:40–15:05 | каждую неделю, нижняя строка | История и методология физики | Практика | 220н | Окунев Д.О. | 24-КФ
чт 13:40–15:05 | каждую неделю, нижняя строка | Методы численного анализа | Лабораторная | 215н | Сковородко М.А. | 24-КБ,24-КБ/п1
чт 13:40–15:05 | каждую неделю, нижняя строка | Уравнения математической физики | Лабораторная | 336н | Козлов А.А. | 24-КБ,24-КБ/п2
чт 15:20–16:45 | каждую неделю | Объектно-ориентированное программирование | Лекция | 220н | Солдатенко П.Н. | 24-КФ

8
test/snapshots/fkne.txt Normal file
View File

@@ -0,0 +1,8 @@
# Установочная сессия · 26-ЭЭТзс
2026-09-17 11:00–11:40 | один раз | Организационное собрание | Занятие | 515н | Бословяк С.В. | 26-ЭЭТзс
2026-09-17 11:45–13:10 | один раз | Инженерная графика | Лекция | 518н | Малаховская В.В. | 26-ЭЭТзс
2026-09-17 13:40–15:05 | один раз | Химия | Лекция | 427н | Фонин М.Ф. | 26-ЭЭТзс
2026-09-17 15:20–16:45 | один раз | Иностранный язык (англ.) | Практика | 526н 325н 502н | Кузнечик Е.В. Струй О.М. Филимончик Н.А. | 26-ЭЭТзс
2026-09-18 15:20–16:45 | один раз | Математика | Лекция | 336н | Козлов А.А. | 26-ЭЭТзс
2026-09-18 17:00–18:25 | один раз | Конструкционные материалы | Лекция | 412н | Молодечкина Т.В. | 26-ЭЭТзс
2026-09-18 18:35–20:00 | один раз | Информатика | Лекция | 412н | Иванова К.И. | 26-ЭЭТзс

View File

@@ -0,0 +1,61 @@
# Осенний семестр · 25-РГФ-1, 25-РГФ-2
вт 08:30–09:55 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
вт 10:05–11:30 | нед. 2-14 | Философия | Практика | 206Г | Андрейчик Е.В. | 25-РГФ-1,25-РГФ-2
вт 11:45–13:10 | каждую неделю | Английский язык | Практика | 133Е | Лагун А.М. | 25-РГФ-2
вт 11:45–13:10 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Лекция | 305Г | Смулькевич А.А. | 25-РГФ-1
вт 13:40–15:05 | каждую неделю, верхняя строка | Основы перевода | Лекция | 203Г | Смулькевич А.А. | 25-РГФ-1
вт 13:40–15:05 | каждую неделю, верхняя строка | Основы перевода | Практика | 330Е | Семченок Л.И. | 25-РГФ-2
вт 13:40–15:05 | каждую неделю, нижняя строка | Политология | Лекция | 211А | Радюк А.Л. | 25-РГФ-1,25-РГФ-2
вт 15:20–16:45 | каждую неделю, нижняя строка | История языка | Лекция | 208А | Логвинова И.В. | 25-РГФ-2
вт 15:20–16:45 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (англ.) | Практика | 203Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
вт 15:20–16:45 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
вт 15:20–16:45 | нед. с 3, верхняя строка | Политология | Практика | 206Г | Радюк А.Л. | 25-РГФ-1,25-РГФ-2
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 305Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
пн 10:05–11:30 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
пн 10:05–11:30 | каждую неделю | Основы перевода | Практика | 331Е | Семченок Л.И. | 25-РГФ-2
пн 11:45–13:10 | каждую неделю | ФИЗИЧЕСКАЯ КУЛЬТУРА | Занятие | | | 25-РГФ-1,25-РГФ-2
пн 13:40–15:05 | каждую неделю | Практика устной и письменной речи (англ.) | Практика | 331Е | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
пн 13:40–15:05 | каждую неделю | Практическая фонетика (англ) | Практика | 319Д | Кунчевская А.В. | 25-РГФ-1,25-РГФ-1/п1
пн 13:40–15:05 | каждую неделю | Практическая фонетика (нем) | Практика | 330Е | Логвинова И.В. | 25-РГФ-2
пн 15:20–16:45 | каждую неделю | Английский язык | Практика | 248Ж | Лагун А.М. | 25-РГФ-2
пн 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
пт 08:30–09:55 | каждую неделю | Основы перевода | Практика | 208А | Семченок Л.И. | 25-РГФ-2
пт 08:30–09:55 | каждую неделю, верхняя строка | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
пт 08:30–09:55 | каждую неделю, нижняя строка | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1
пт 10:05–11:30 | каждую неделю | История зарубежной литературы Средних веков и Возрождения | Практика | 305Г | Лушневская Е.В. | 25-РГФ-1,25-РГФ-2
пт 11:45–13:10 | каждую неделю | Основы перевода | Практика | 203Г | Смулькевич А.А. | 25-РГФ-1
пт 11:45–13:10 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Лекция | 248Ж | Гордеенок Т.М. | 25-РГФ-2
пт 13:40–15:05 | каждую неделю | Практика устной и письменной речи (англ.) | Практика | 305Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
пт 13:40–15:05 | каждую неделю | Практическая грамматика (англ.) | Практика | 204Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
пт 13:40–15:05 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Практика | 248Ж | Гордеенок Т.М. | 25-РГФ-2
пт 15:20–16:45 | каждую неделю | Практика устной и письменной речи (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
пт 15:20–16:45 | каждую неделю | Практическая грамматика (англ.) | Практика | 305Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
пт 15:20–16:45 | каждую неделю | Практическая фонетика (англ) | Практика | 319Д | Кунчевская А.В. | 25-РГФ-1,25-РГФ-1/п2
сб 08:30–09:55 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (англ.) | Практика | 104Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
сб 08:30–09:55 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (англ.) | Практика | 206Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
сб 08:30–09:55 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (нем.) | Практика | 208А | Белоусова Э.А. | 25-РГФ-2
сб 10:05–11:30 | каждую неделю | Практика устной и письменной речи (англ.) | Практика | 206Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
сб 10:05–11:30 | каждую неделю, верхняя строка | Практика устной и письменной речи (англ.) | Практика | 104Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
сб 10:05–11:30 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (нем.) | Практика | 208А | Белоусова Э.А. | 25-РГФ-2
сб 11:45–13:10 | каждую неделю, верхняя строка | Коммуникативная грамматика | Практика | 208А | Белоусова Э.А. | 25-РГФ-2
ср 08:30–09:55 | нед. с 2 | Английский язык | Практика | 248Ж | Лагун А.М. | 25-РГФ-2
ср 10:05–11:30 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (англ.) | Практика | 304Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
ср 10:05–11:30 | каждую неделю, нижняя строка | Коммуникативная грамматика | Практика | 304Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
ср 10:05–11:30 | каждую неделю, нижняя строка | Коммуникативная грамматика | Практика | 308Г | Протас А.А. | 25-РГФ-1,25-РГФ-1/п2
ср 10:05–11:30 | нед. 2-15 | История языка | Практика | 248Ж | Логвинова И.В. | 25-РГФ-2
ср 11:45–13:10 | нед. с 2 | Русский язык как иностранный | Практика | | Немирская В.А. | 25-РГФ-1,25-РГФ-2
ср 13:40–15:05 | нед. 2-15 | История языка | Практика | 305Г | Ковшик О.С. | 25-РГФ-1
ср 15:20–16:45 | нед. 2-15 | Философия | Лекция | 211А | Борун Е.Н. | 25-РГФ-1,25-РГФ-2
чт 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
чт 08:30–09:55 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
чт 08:30–09:55 | каждую неделю, нижняя строка | Практика устной и письменной речи (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
чт 10:05–11:30 | каждую неделю, верхняя строка | История зарубежной литературы Средних веков и Возрождения | Лекция | 305Г | Лушневская Е.В. | 25-РГФ-1,25-РГФ-2
чт 10:05–11:30 | каждую неделю, нижняя строка | История языка | Лекция | 305Г | Третьяк З.И. | 25-РГФ-1
чт 10:05–11:30 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
чт 11:45–13:10 | каждую неделю | Английский язык | Практика | 248Ж | Лагун А.М. | 25-РГФ-2
чт 11:45–13:10 | каждую неделю | Основы перевода | Практика | 120Д | Смулькевич А.А. | 25-РГФ-1
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования: 10 сентября, 15 октября, 19 ноября, 17 декабря | Занятие | | | 25-РГФ-1,25-РГФ-2
чт 13:40–15:05 | каждую неделю | Практика устной и письменной речи (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
чт 13:40–15:05 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Практика | 319Д | Смулькевич А.А. | 25-РГФ-1
чт 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 208А | Найверт Ю.О. | 25-РГФ-1
чт 15:20–16:45 | каждую неделю | Практическая грамматика (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2

View File

@@ -0,0 +1,10 @@
# Зачёты · 26-АРХ
2026-10-27 17:00 | один раз | Введение в архитектурное проектирование | Консультация | 359 | Кузякова О.Д. | 26-АРХ
2026-10-31 08:30 | один раз | Введение в архитектурное проектирование | Зачёт | 359 | Кузякова О.Д. | 26-АРХ
2026-12-18 08:30 | один раз | Проектирование небольшого архитектурного сооружения | Консультация | 359 | Захаркина Г.И. | 26-АРХ
2026-12-18 15:20 | один раз | Рисунок | Консультация | 371 | Кузякова О.Д. | 26-АРХ
2026-12-19 11:45 | один раз | Архитектурная графика | Зачёт | 371 | Яцкевич Т.А. | 26-АРХ
2026-12-21 15:20 | один раз | Проектирование небольшого архитектурного сооружения | Зачёт | 356 | Захаркина Г.И. | 26-АРХ
2026-12-22 17:00 | один раз | Рисунок | Зачёт | 361 | Кузякова О.Д. | 26-АРХ,26-АРХ/п1
2026-12-22 17:00 | один раз | Рисунок | Зачёт | 370 | Пискун А.А. | 26-АРХ,26-АРХ/п2
2026-12-23 08:30 | один раз | Физическая культура (дополнительный вид обучения) | Зачёт | | | 26-АРХ

View File

@@ -0,0 +1,61 @@
# Осенний семестр · 26-ПГС-1, 26-ПГС-2
вт 10:05–11:30 | каждую неделю | Химия | Лекция | 100(с3нед.) | Емельянова В.А. | 26-ПГС-1,26-ПГС-2
вт 11:45–13:10 | каждую неделю | Физика | Лекция | 333н | Солдатенко П.Н. | 26-ПГС-1,26-ПГС-2
вт 13:40–15:05 | каждую неделю, верхняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-2,26-ПГС-2/п1
вт 13:40–15:05 | каждую неделю, верхняя строка | Физика | Практика | 337н | Солдатенко П.Н. | 26-ПГС-1
вт 13:40–15:05 | каждую неделю, нижняя строка | Информатика | Лекция | 362 | Василевский А.В. | 26-ПГС-1,26-ПГС-2
вт 15:20–16:45 | каждую неделю | Химия | Лабораторная | | Аврамёнок А.Н. | 26-ПГС-1,26-ПГС-1/п2
вт 15:20–16:45 | каждую неделю, верхняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-1,26-ПГС-1/п1
вт 15:20–16:45 | нед. 13-17 | Иванов В.П. ауд.403 | Занятие | 403 | Иванов В.П. | 26-ПГС-1,26-ПГС-1/п2
пн 10:05–11:30 | каждую неделю | История белорусской государственности | Лекция | 432 | Кордюкевич О.Г. | 26-ПГС-1,26-ПГС-2
пн 11:45–13:10 | каждую неделю, верхняя строка | История белорусской государственности | Практика | 425 | Кордюкевич О.Г. | 26-ПГС-1
пн 11:45–13:10 | каждую неделю, верхняя строка | Физика | Практика | 337н | Солдатенко П.Н. | 26-ПГС-2
пн 11:45–13:10 | каждую неделю, нижняя строка | Инженерная геодезия | Лабораторная | 325н | Шевелев И.П. | 26-ПГС-1,26-ПГС-1/п1
пн 11:45–13:10 | каждую неделю, нижняя строка | История белорусской государственности | Практика | 425 | Кордюкевич О.Г. | 26-ПГС-2
пн 11:45–13:10 | каждую неделю, нижняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-1,26-ПГС-1/п3
пн 13:40–15:05 | каждую неделю | Физическая культура | Занятие | | | 26-ПГС-1,26-ПГС-2
пн 15:20–16:45 | каждую неделю | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-2,26-ПГС-2/п2
пн 15:20–16:45 | каждую неделю | Химия | Лабораторная | | Аврамёнок А.Н. | 26-ПГС-1,26-ПГС-1/п1
пн 15:20–16:45 | каждую неделю, нижняя строка | Инженерная геодезия | Лабораторная | 325н | Шевелев И.П. | 26-ПГС-1,26-ПГС-1/п3
пн 15:20–16:45 | нед. 13-17 | Иванов В.П. ауд.403 | Занятие | 403 | Иванов В.П. | 26-ПГС-1,26-ПГС-1/п1
пт 10:05–11:30 | каждую неделю, верхняя строка | Иностранный язык | Практика | 541н | Каменная В.А. | 26-ПГС-1,26-ПГС-1/п1
пт 10:05–11:30 | каждую неделю, верхняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-1,26-ПГС-1/п2
пт 10:05–11:30 | каждую неделю, верхняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-2,26-ПГС-2/п1
пт 10:05–11:30 | каждую неделю, нижняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-1,26-ПГС-1/п1
пт 10:05–11:30 | каждую неделю, нижняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-2,26-ПГС-2/п2
пт 11:45–13:10 | каждую неделю | Информатика | Практика | 372 | Василевский А.В. | 26-ПГС-1
пт 11:45–13:10 | каждую неделю, верхняя строка | Инженерная геодезия | Лабораторная | 325н | Стегашева В.С. | 26-ПГС-2,26-ПГС-2/п2
пт 11:45–13:10 | каждую неделю, верхняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-2,26-ПГС-2/п1
пт 11:45–13:10 | каждую неделю, нижняя строка | Инженерная геодезия | Лабораторная | 325н | Стегашева В.С. | 26-ПГС-2,26-ПГС-2/п1
пт 11:45–13:10 | каждую неделю, нижняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-2,26-ПГС-2/п2
пт 13:40–15:05 | каждую неделю | Иностранный язык | Практика | 533н | Каменная В.А. | 26-ПГС-1,26-ПГС-1/п2
пт 13:40–15:05 | каждую неделю, верхняя строка | Информатика | Практика | 372 | Василевский А.В. | 26-ПГС-2
пт 13:40–15:05 | каждую неделю, верхняя строка | Механика жидкости и газа | Лабораторная | 104 | Бердашкевич В.В. | 26-ПГС-1,26-ПГС-1/п1
пт 13:40–15:05 | каждую неделю, нижняя строка | Начертательная геометрия, инженерная и машинная графика | Практика | 543н | Малаховская В.В. | 26-ПГС-2,26-ПГС-2/п1
пт 15:20–16:45 | каждую неделю, верхняя строка | Механика жидкости и газа | Лабораторная | 104 | Бердашкевич В.В. | 26-ПГС-2,26-ПГС-2/п1
пт 15:20–16:45 | каждую неделю, нижняя строка | Иностранный язык | Практика | 533н | Каменная В.А. | 26-ПГС-1,26-ПГС-1/п2
сб 08:30–09:55 | каждую неделю, верхняя строка | Информатика | Практика | 372 | Василевский А.В. | 26-ПГС-2
сб 08:30–09:55 | каждую неделю, верхняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-1,26-ПГС-1/п1
сб 08:30–09:55 | каждую неделю, нижняя строка | Математика | Практика | 329н | Посниченко Г.Н. | 26-ПГС-2
сб 08:30–09:55 | каждую неделю, нижняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-1,26-ПГС-1/п2
сб 10:05–11:30 | каждую неделю, верхняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-1,26-ПГС-1/п1
сб 10:05–11:30 | каждую неделю, нижняя строка | Математика | Практика | 329н | Посниченко Г.Н. | 26-ПГС-2
сб 10:05–11:30 | каждую неделю, нижняя строка | Физика | Лабораторная | 205н | Сивацкий Д.С. | 26-ПГС-1,26-ПГС-1/п2
ср 08:30–09:55 | каждую неделю | Физическая культура | Занятие | | | 26-ПГС-1,26-ПГС-2
ср 10:05–11:30 | каждую неделю | Начертательная геометрия, инженерная и машинная графика | Лекция | 537н | Малаховская В.В. | 26-ПГС-1,26-ПГС-2
ср 11:45–13:10 | каждую неделю | Математика | Лекция | 333н | Посниченко Г.Н. | 26-ПГС-1,26-ПГС-2
ср 13:40–15:05 | каждую неделю | Иностранный язык | Практика | 533н | Минчукова Е.М. | 26-ПГС-2,26-ПГС-2/п1
ср 13:40–15:05 | каждую неделю | Иностранный язык | Практика | 535н | Струй О.М. | 26-ПГС-2,26-ПГС-2/п2
ср 13:40–15:05 | каждую неделю | Математика | Практика | 333н | Посниченко Г.Н. | 26-ПГС-1
ср 15:20–16:45 | каждую неделю, нижняя строка | Иностранный язык | Практика | 533н | Минчукова Е.М. | 26-ПГС-2,26-ПГС-2/п1
ср 15:20–16:45 | каждую неделю, нижняя строка | Иностранный язык | Практика | 535н | Струй О.М. | 26-ПГС-2,26-ПГС-2/п2
чт 09:15 | каждую неделю | Информационный час | Занятие | 269 | | 26-ПГС-2
чт 09:15 | каждую неделю | Информационный час | Занятие | 366 | | 26-ПГС-1
чт 10:05–11:30 | каждую неделю | Иностранный язык | Практика | 533н | Каменная В.А. | 26-ПГС-1,26-ПГС-1/п1
чт 10:05–11:30 | каждую неделю | Химия | Лабораторная | 403 | Аврамёнок А.Н. | 26-ПГС-2,26-ПГС-2/п1
чт 10:05–11:30 | каждую неделю, верхняя строка | Механика жидкости и газа | Лабораторная | 104 | Бердашкевич В.В. | 26-ПГС-1,26-ПГС-1/п2
чт 10:05–11:30 | каждую неделю, нижняя строка | Механика жидкости и газа | Лабораторная | 104 | Бердашкевич В.В. | 26-ПГС-2,26-ПГС-2/п2
чт 11:45–13:10 | каждую неделю | Инженерная геодезия | Лекция | 321н | Шевелев И.П. | 26-ПГС-1,26-ПГС-2
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования | Занятие | | | 26-ПГС-1,26-ПГС-2
чт 13:40–15:05 | каждую неделю | Механика жидкости и газа | Лекция | 362 | Моняк Т.М. | 26-ПГС-1,26-ПГС-2
чт 15:20–16:45 | каждую неделю | Химия | Лабораторная | 403 | Аврамёнок А.Н. | 26-ПГС-2,26-ПГС-2/п2

View File

@@ -0,0 +1,59 @@
# Лабораторно-экзаменационная сессия · 23-ИТзс
2026-06-08 10:05–11:30 | один раз | Системный анализ и машинное моделирование | Установочная лекция | 205Г | Пастухов Д.Ф. | 23-ИТзс
2026-06-08 11:45–13:10 | один раз | Основы бизнеса и права в сфере инфокоммуникационных технологий | Лекция | 205Г | Воронько Э.Н. | 23-ИТзс
2026-06-08 13:40–15:05 | один раз | Основы бизнеса и права в сфере инфокоммуникационных технологий | Практика | 305Г | Воронько Э.Н. | 23-ИТзс
2026-06-08 17:00–18:25 | один раз | Основы бизнеса и права в сфере инфокоммуникационных технологий | Консультация | 305Г | Воронько Э.Н. | 23-ИТзс
2026-06-09 08:30–09:55 | один раз | Программирование мобильных систем | Лекция | 305Г | Лукьянов А.О. | 23-ИТзс
2026-06-09 10:05–11:30 | один раз | Базы данных | Лабораторная | 317Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п2
2026-06-09 10:05–11:30 | один раз | Программирование мобильных систем | Лабораторная | 219Д | Лукьянов А.О. | 23-ИТзс,23-ИТзс/п1
2026-06-09 13:40–15:05 | один раз | Базы данных | Лабораторная | 317Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п1
2026-06-09 13:40–15:05 | один раз | Программирование мобильных систем | Лабораторная | 219Д | Лукьянов А.О. | 23-ИТзс,23-ИТзс/п2
2026-06-10 08:30–09:55 | один раз | Базы данных | Лабораторная | 319Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п2
2026-06-10 08:30–09:55 | один раз | Программирование мобильных систем | Лабораторная | 317Д | Лукьянов А.О. | 23-ИТзс,23-ИТзс/п1
2026-06-10 11:45–13:10 | один раз | Базы данных | Лабораторная | 319Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п1
2026-06-10 11:45–13:10 | один раз | Программирование мобильных систем | Лабораторная | 317Д | Лукьянов А.О. | 23-ИТзс,23-ИТзс/п2
2026-06-10 15:20–16:45 | один раз | Программирование мобильных систем | Консультация | 317Д | Лукьянов А.О. | 23-ИТзс
2026-06-11 08:30–09:55 | один раз | Базы данных | Лабораторная | 319Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п2
2026-06-11 08:30–09:55 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Лабораторная | 317Д | Михнович О.В. | 23-ИТзс,23-ИТзс/п1
2026-06-11 11:45–13:10 | один раз | Базы данных | Лабораторная | 319Д | Скуковская А.А. | 23-ИТзс,23-ИТзс/п1
2026-06-11 11:45–13:10 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Лабораторная | 317Д | Михнович О.В. | 23-ИТзс,23-ИТзс/п2
2026-06-12 08:30 | один раз | Программирование мобильных систем | Экзамен | 219Д | Лукьянов А.О. | 23-ИТзс
2026-06-12 13:40–15:05 | один раз | Сетевые технологии и администрирование операционных систем | Установочная лекция | 219Д | Бровко Н.В. | 23-ИТзс
2026-06-13 08:30–09:55 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Лекция | 218Д | Конаплева Г.Ф. | 23-ИТзс
2026-06-13 10:05–11:30 | один раз | Методы и алгоритмы принятия | Лекция | 218Д | Конаплева Г.В. | 23-ИТзс
2026-06-13 11:45–13:10 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2026-06-15 08:30 | один раз | Основы бизнеса и права в сфере инфокоммуникационных технологий | Экзамен | 305Г | Воронько Э.Н. | 23-ИТзс
2026-06-15 13:40–15:05 | один раз | Алгоритмы компьютерной графики/Алгоритмы компьютерного зрения | Установочная лекция | 305Г | Адамовский Е.Р. | 23-ИТзс
2026-06-16 08:30–09:55 | один раз | Базы данных | Защита курсовой работы | 317Д | Скуковская А.А. | 23-ИТзс
2026-06-16 11:45–13:10 | один раз | Базы данных | Консультация | 317Д | Скуковская А.А. | 23-ИТзс
2026-06-16 13:40–15:05 | один раз | Распределенные вычисления | Лекция | 317Д | Сурто С.Г. | 23-ИТзс
2026-06-16 15:20–16:45 | один раз | Основы управления интеллектуальной собственностью | Установочная лекция | 317Д | Михнович О.В. | 23-ИТзс
2026-06-17 08:30–09:55 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Лабораторная | 303Г | Михнович О.В. | 23-ИТзс,23-ИТзс/п1
2026-06-17 08:30–09:55 | один раз | Современные платформы программирования | Лабораторная | 302Г | Макарычева В.А. | 23-ИТзс,23-ИТзс/п2
2026-06-17 11:45–13:10 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Лабораторная | 303Г | Михнович О.В. | 23-ИТзс,23-ИТзс/п2
2026-06-17 11:45–13:10 | один раз | Современные платформы программирования | Лабораторная | 302Г | Макарычева В.А. | 23-ИТзс,23-ИТзс/п1
2026-06-17 15:20–16:45 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Консультация | 219Д | Михнович О.В. | 23-ИТзс
2026-06-18 08:30 | один раз | Базы данных | Экзамен | 219Д | Скуковская А.А. | 23-ИТзс
2026-06-18 13:40–15:05 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2026-06-19 08:30 | один раз | Программное обеспечение встроенных систем/Проектирование информационных систем | Экзамен | 317Д | Михнович О.В. | 23-ИТзс
2026-06-19 13:40–15:05 | один раз | Управление инновационными проектами | Установочная лекция | 205Г | Дубко Н.А. | 23-ИТзс
2026-06-19 15:20–16:45 | один раз | Статистические методы анализа данных | Установочная лекция | 205Г | Пастухов Д.Ф. | 23-ИТзс
2026-06-20 08:30–09:55 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2026-06-20 11:45–13:10 | один раз | Методы и алгоритмы принятия | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2026-06-22 10:05–11:30 | один раз | Распределенные вычисления | Лабораторная | 303Г | Сурто С.Г. | 23-ИТзс,23-ИТзс/п1
2026-06-22 13:40–15:05 | один раз | Современные платформы программирования | Практика | 305Г | Макарычева В.А. | 23-ИТзс
2026-06-22 15:20–16:45 | один раз | Современные платформы программирования | Установочная лекция | 305Г | Макарычева В.А. | 23-ИТзс
2026-06-23 08:30–09:55 | один раз | Распределенные вычисления | Лабораторная | 207Г | Сурто С.Г. | 23-ИТзс,23-ИТзс/п2
2026-06-23 08:30–09:55 | один раз | Современные платформы программирования | Лабораторная | 303Г | Макарычева В.А. | 23-ИТзс,23-ИТзс/п1
2026-06-23 11:45–13:10 | один раз | Распределенные вычисления | Лабораторная | 207Г | Сурто С.Г. | 23-ИТзс,23-ИТзс/п1
2026-06-23 11:45–13:10 | один раз | Современные платформы программирования | Лабораторная | 303Г | Макарычева В.А. | 23-ИТзс,23-ИТзс/п2
2026-06-24 08:30–09:55 | один раз | Методы и алгоритмы принятия | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2026-06-24 08:30–09:55 | один раз | Распределенные вычисления | Лабораторная | 303Г | Сурто С.Г. | 23-ИТзс,23-ИТзс/п2
2026-06-24 13:40–15:05 | один раз | Современные платформы программирования | Зачёт | 217Д | Макарычева В.А. | 23-ИТзс
2026-06-25 11:45 | один раз | Распределенные вычисления | Зачёт | 217Д | Сурто С.Г. | 23-ИТзс
2026-06-25 15:20–16:45 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2026-06-26 08:30 | один раз | Тестирование программного обеспечения и веб-ориентированных приложений | Зачёт | 218Д | Конаплева Г.Ф. | 23-ИТзс
2026-06-26 11:45–13:10 | один раз | Методы и алгоритмы принятия | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2026-06-26 15:20–16:45 | один раз | Методы машинного обучения | Установочная лекция | 218Д | Конаплева Г.Ф. | 23-ИТзс
2026-06-27 08:30–09:55 | один раз | Методы и алгоритмы принятия | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2026-06-27 13:40 | один раз | Методы и алгоритмы принятия | Зачёт | 218Д | Конаплева Г.Ф. | 23-ИТзс

View File

@@ -0,0 +1,37 @@
# Лабораторно-экзаменационная сессия · 23-ИТзс
2024-01-08 11:45–13:10 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2024-01-08 13:40–15:05 | один раз | Основы информационных технологий и компьютерной графики | Лабораторная | 217Д | Михнович О.В. | 23-ИТзс,23-ИТзс/п2
2024-01-08 17:00–18:25 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2024-01-08 17:00–18:25 | один раз | Основы информационных технологий и компьютерной графики | Лабораторная | 217Д | Михнович О.В. | 23-ИТзс,23-ИТзс/п1
2024-01-08 18:35–20:00 | один раз | Основы программной инженерии | Лекция | 252В | Струк Т.С. | 23-ИТзс
2024-01-09 13:40–15:05 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2024-01-09 13:40–15:05 | один раз | Основы информационных технологий и компьютерной графики | Лабораторная | 217Д | Михнович О.В. | 23-ИТзс,23-ИТзс/п1
2024-01-10 08:30–09:55 | один раз | История белорусской государственности | Лекция | 220Д | Емельянчик О.А. | 23-ИТзс
2024-01-10 10:05–11:30 | один раз | Личностно-профессиональное развитие специалиста | Практика | 220Д | Брикса Ю.О. | 23-ИТзс
2024-01-10 11:45–13:10 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2024-01-11 10:05–11:30 | один раз | Личностно-профессиональное развитие специалиста | Зачёт | 204Г | Брикса Ю.О. | 23-ИТзс
2024-01-11 11:45–13:10 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п1
2024-01-12 10:05–11:30 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2024-01-12 15:20–16:45 | один раз | Белорусский язык (профессиональная лексика) | Практика | 305Г | Богорадова Т.Р. | 23-ИТзс
2024-01-13 08:30–09:55 | один раз | Линейная алгебра и аналитическая геометрия | Практика | 254В | Забелендик О.Н. | 23-ИТзс
2024-01-13 10:05–11:30 | один раз | Дискретная математика | Лекция | 254В | Забелендик О.Н. | 23-ИТзс
2024-01-13 11:45–13:10 | один раз | Дискретная математика | Практика | 254В | Забелендик О.Н. | 23-ИТзс
2024-01-13 13:40–15:05 | один раз | История белорусской государственности | Практика | 254В | Емельянчик О.А. | 23-ИТзс
2024-01-14 08:30–09:55 | один раз | Основы программной инженерии | Практика | 254В | Струк Т.С. | 23-ИТзс
2024-01-14 10:05–11:30 | один раз | Основы программной инженерии | Практика | 254В | Струк Т.С. | 23-ИТзс
2024-01-15 11:45–13:10 | один раз | История белорусской государственности | Экзамен | 307Г | Емельянчик О.А. | 23-ИТзс
2024-01-15 15:20–16:45 | один раз | Основы алгоритмизации и программирования | Лабораторная | 218Д | Конаплева Г.Ф. | 23-ИТзс,23-ИТзс/п2
2024-01-15 17:00–18:25 | один раз | Математический анализ | Установочная лекция | 220Д | Забелендик О.Н. | 23-ИТзс
2024-01-16 10:05–11:30 | один раз | Белорусский язык (профессиональная лексика) | Зачёт | 304Г | Богорадова Т.Р. | 23-ИТзс
2024-01-16 13:40–15:05 | один раз | Основы алгоритмизации и программирования | Защита курсовой работы | 254В | Чертков В.М. | 23-ИТзс
2024-01-17 10:05–11:30 | один раз | Основы информационных технологий и компьютерной графики | Зачёт | 217Д | Михнович О.В. | 23-ИТзс
2024-01-17 11:45–13:10 | один раз | Иностранный язык | Установочное занятие | 204Г | Жизневская Л.В. | 23-ИТзс
2024-01-17 13:40–15:05 | один раз | Культурология | Установочная лекция | 252В | Огородников А.А. | 23-ИТзс
2024-01-18 08:30–09:55 | один раз | Основы алгоритмизации и программирования | Экзамен | Медиа | Чертков В.М. | 23-ИТзс
2024-01-18 11:45–13:10 | один раз | Программирование на языках высокого уровня | Установочная лекция | Медиа | Чертков В.М. | 23-ИТзс
2024-01-18 13:40–15:05 | один раз | Физика | Установочная лекция | 254В | Окунев Д.О. | 23-ИТзс
2024-01-19 11:45–13:10 | один раз | Линейная алгебра и аналитическая геометрия | Экзамен | 305Г | Забелендик О.Н. | 23-ИТзс
2024-01-19 15:20–16:45 | один раз | Алгоритмы и структуры данных | Установочная лекция | 305Г | Виноградова А.Д. | 23-ИТзс
2024-01-20 08:30–09:55 | один раз | Основы программной инженерии | Экзамен | 305Г | Струк Т.С. | 23-ИТзс
2024-01-20 11:45–13:10 | один раз | Конструирование программного обеспечения | Установочная лекция | 305Г | Струк Т.С. | 23-ИТзс
2024-01-22 15:20–16:45 | один раз | Дискретная математика | Экзамен | 205Г | Забелендик О.Н. | 23-ИТзс

View File

@@ -63,6 +63,8 @@ test("Пометки недель: диапазоны, «с N», опечатк
[6, 11], [6, 11],
]); ]);
assert.deepEqual(parseWeekRanges("со 2 нед."), [[2, null]]); assert.deepEqual(parseWeekRanges("со 2 нед."), [[2, null]]);
assert.deepEqual(parseWeekRanges("1-4н.;6-12н."), [[1, 4], [6, 12]]);
assert.deepEqual(parseWeekRanges("1-6н , 13-18н"), [[1, 6], [13, 18]]);
assert.deepEqual(parseWeekRanges("с 4-16н"), [[4, 16]]); assert.deepEqual(parseWeekRanges("с 4-16н"), [[4, 16]]);
assert.deepEqual(parseWeekRanges("1-8,10-17"), [ assert.deepEqual(parseWeekRanges("1-8,10-17"), [
[1, 8], [1, 8],