Формат хранения данных по сотруднику
gsbelarus opened this issue · comments
Andrej Kirejeŭ commented
- Справочник начислений/удержаний/льгот/справочных параметров хранится на сервере в папке
payslip.<id_customer>
в файлеaccdedref.json
. Так как структура начислений/удержаний на предприятии может меняться, то этот файл формируется каждый раз, когда выгружаются данные из сторонней системы. Структура файла и пример данных:
{
[id: string]: {
name: LName;
parentId?: string;
type: 'ACCRUAL' | 'DEDUCTION' | 'REFERENCE' | 'EXEMPTION';
}
}
// пример данных
{
'ruid_from_gedemin': {
name: {
ru: {
name: 'Повременно (${days} дн, ${hours} ч)'
},
by: {
name: 'Пачасова (${days} дз, ${hours} г)'
},
type: 'ACCRUAL'
}
}
- Некоторые начисления/удержания подразумевают передачу дополнительных параметров. Например, в примере выше, передаются часы и дни. Их можно использовать для формирования строки в расчетный листок, используя в названии параметры. Как реализовать на js описано тут.
- По одному сотруднику все данные хранятся в файлах с разбивкой по годам. Имя файла:
payslip.<id_customer>.<id_employee>.<YYYY>.json
. - Все файлы сотрудников одного предприятия за год хранятся в одном подкаталоге с именем
YYYY
внутри каталогаpayslip.<id_customer>
. - Каждое начисление/удержание/справочная информация имеет символьный уникальный код. Информация о начислении/удержании берется из отдельного файла-справочника, см. п. 1.
- Начисление/удержание/справочная информация могут иметь дополнительные параметры, которые передаются ввиде объекта.
- Строковое представление, которое человек видит в расчетном листке формируется на основании шаблона, дополнительных параметров и выбранной локализации. Например, если название повременного начисления задано шаблоном
'Повременно (${days} дн, ${hours} ч)'
, то информация о начислении за январь 2020 года будет представлена как:
{
typeId: "ид типа, как задано в справочнике типов",
dateBegin: "01.01.2020",
dateEnd: "31.01.2020",
s: 366.16,
data: {
hours: 135,
days: 17
}
}
- Если у пользователя выбран в настройках язык интерфейса русский, то на основе вышеуказанной информации будет сформирована в расчетном листке строка:
Повременно (17 дн, 135 ч) 366.16
- Если у пользователя выбран в настройках язык интерфейса белорусский, то на основе вышеуказанной информации будет сформирована в расчетном листке строка:
Пачасова (17 дз, 135 г) 366.16
- Каждое начисление/удержание/справка относится или к заданному периоду, или на конкретную дату (но не одновременно и на то, и на то).
- Гранулярность задания периода/даты по умолчанию принимается в один день. Пока мы не поддерживаем другие значения. Период включает все время от начала первой указанной даты, до окончания второй указанной даты. Например, если задан период от 1-го до 31-го января 2020 года, и используется гранулярность в один день, то в него попадут все даты, удовлетворяющие условию
d >= new Date(2020, 01, 01) && d <new Date(2020, 02, 01)
.
Структура файла
{
version: "1.0";
employeeId: string;
year: number;
data: {
type: string;
dateBegin?: Date;
dateEnd?: Date;
date?: Date;
granularity?: 'DAY';
s: number;
data?: any;
}[]
}