gsbelarus / gdmn-bot

Чат-бот "Моя Зарплата" для мессенджеров Viber и Telegram.

Home Page:http://gsbelarus.com/pw/front-page/solutions/android/chat-bot-moia-zarplata/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Формат хранения данных по сотруднику

gsbelarus opened this issue · comments

  1. Справочник начислений/удержаний/льгот/справочных параметров хранится на сервере в папке 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'
   }
}
  1. Некоторые начисления/удержания подразумевают передачу дополнительных параметров. Например, в примере выше, передаются часы и дни. Их можно использовать для формирования строки в расчетный листок, используя в названии параметры. Как реализовать на js описано тут.
  2. По одному сотруднику все данные хранятся в файлах с разбивкой по годам. Имя файла: payslip.<id_customer>.<id_employee>.<YYYY>.json.
  3. Все файлы сотрудников одного предприятия за год хранятся в одном подкаталоге с именем YYYY внутри каталога payslip.<id_customer>.
  4. Каждое начисление/удержание/справочная информация имеет символьный уникальный код. Информация о начислении/удержании берется из отдельного файла-справочника, см. п. 1.
  5. Начисление/удержание/справочная информация могут иметь дополнительные параметры, которые передаются ввиде объекта.
  6. Строковое представление, которое человек видит в расчетном листке формируется на основании шаблона, дополнительных параметров и выбранной локализации. Например, если название повременного начисления задано шаблоном 'Повременно (${days} дн, ${hours} ч)', то информация о начислении за январь 2020 года будет представлена как:
{
  typeId: "ид типа, как задано в справочнике типов",
  dateBegin: "01.01.2020",
  dateEnd: "31.01.2020",
  s: 366.16, 
  data: {
    hours: 135,
    days: 17
  }
}  
  1. Если у пользователя выбран в настройках язык интерфейса русский, то на основе вышеуказанной информации будет сформирована в расчетном листке строка:
Повременно (17 дн, 135 ч)       366.16
  1. Если у пользователя выбран в настройках язык интерфейса белорусский, то на основе вышеуказанной информации будет сформирована в расчетном листке строка:
Пачасова (17 дз, 135 г)       366.16
  1. Каждое начисление/удержание/справка относится или к заданному периоду, или на конкретную дату (но не одновременно и на то, и на то).
  2. Гранулярность задания периода/даты по умолчанию принимается в один день. Пока мы не поддерживаем другие значения. Период включает все время от начала первой указанной даты, до окончания второй указанной даты. Например, если задан период от 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;
  }[]
}