namespace Tnsu.ApprovalRoute.Application.Reports;
///
/// Отчёт по вакансиям за период — ровно то, что ложится на лист «Список вакансий
/// (все)» в xlsx: интервал плюс вакансии, разбитые по объектам/проектам.
///
public sealed record VacancyReport(DateOnly From, DateOnly To, IReadOnlyList Groups);
///
/// Объект/проект и его вакансии. Имя группы становится строкой-разделителем на
/// листе (как «КЭС КУРЧАТОВ» в образце отчёта); пустое имя — вакансии, у которых
/// объект в заявке не указан, они идут первым блоком без разделителя.
///
public sealed record VacancyReportGroup(string Name, IReadOnlyList Rows);
///
/// Одна вакансия — строка листа. Колонки A/B (нумерация), G (в работе), J (срок
/// отработки) и итоги здесь не хранятся: их считает сам xlsx формулами, чтобы
/// цифры пересчитывались, если строку в файле поправят руками.
///
public sealed record VacancyReportRow(
// C — «Вакансия»: должность из заявки на подбор.
string Position,
// D — «Подразделение» ответственного за подачу заявки.
string? Department,
// E — «Кол-во вакансий».
int VacanciesCount,
// F — «количество закрытых вакансий»: сколько заявок на приём завели по этой заявке на подбор.
int ClosedCount,
// H — «Дата подачи заявки».
DateOnly? SubmitDate,
// I — «Дата закрытия вакансии»: дата решения по последнему шагу исполнения.
DateOnly? ClosingDate,
// K — «Дата выхода»: самая поздняя дата приёма среди принятых по этой вакансии.
DateOnly? StartDate,
// L — «Инициатор заявки».
string? Initiator,
// M — «Вместо сотрудника Ф.И.О.».
string? ReplacedEmployee,
// O — «Закрыта вакансия»: да / нет / частично.
string ClosedFlag,
// P — «Рекрутер»: исполнитель фазы исполнения заявки на подбор.
string? Recruiter);
/// Значения колонки O. «Пауза» из образца отчёта не выводится — такого статуса в заявке нет.
public static class VacancyClosedFlags
{
public const string Yes = "да";
public const string No = "нет";
public const string Partial = "частично";
}