CSV

Навигатор по разделу:

1. Общие сведения

CSV-коннектор позволяет использовать в качестве источника данных файлы, столбцы в которых разделены символом-разделителем. Данные файлы могут быть подготовлены вручную, например, в Microsoft Excel или автоматически выгружены из кадровых систем, поддерживающих экспорт в CSV.

1.1. Требования к файлам

Для корректной работы коннектора необходимо подготовить три CSV-файла, содержащих информацию о структуре подразделений, сотрудниках и должностях организации:

  • Position.csv — информация о должностях;
  • Division.csv — информация о подразделениях;

  • Person.csv — информация о сотрудниках.

1.2. Основные правила

  • Все файлы должны быть подготовлены в соответствии с форматом, описанным ниже;
  • В качестве разделителя столбцов используется символ ";";
  • Первая строка файла служит заголовком и может быть проигнорирована при импорте, если в настройках коннектора параметр HasHeader установлен в значение true. Рекомендуется оставить эту строку для упрощения понимания содержимого столбцов. Если HasHeader=false, первая строка будет обработана как данные.

  • Файлы должны содержать нормализованные данные;
  • Должны быть соблюдены зависимости между файлами, описанные ниже.

2. Структура файлов и зависимости

Файлы связаны между собой и содержат нормализованные данные. Зависимости между файлами представлены в таблице ниже:

Таблица — Зависимости файлов

ФайлЗависимости

Position.csv

Не содержит зависимостей
Division.csv
  • Требуется наличие идентификатора Id в файле Division.csv, соответствующего значению идентификатора ParentId. Поле ParentId используется для создания иерархической структуры подразделений. Каждое подразделение может иметь родителя (указанного через ParentId). Если подразделение является корневым (не имеет родителя), то поле ParentId должно содержать значение 0. Это создает кольцевую зависимость между дочерними и родительскими подразделениями;
Филиал АО Концерн (Id = 77796514)
├── Дирекция (Id = 77796515, ParentId = 77796514)
│   └── Отдел кадров (Id = 77796517, ParentId = 77796515)
└── Управление закупок (Id = 77796516, ParentId = 77796514)
  • Требуется наличие идентификатора Id в файле Person.csv, соответствующего значению идентификатора ManagerId 
Person.csv
  • Требуется наличие идентификатора Id в файле Position.csv, соответствующего значению идентификатора PositionId;
  • Требуется наличие идентификатора Id в файле Division.csv, соответствующего значению идентификатора DivisionId


В файлах не должно быть ссылок на несуществующие идентификаторы. Например, если в Person.csv указан PositionId, то он должен существовать в Position.csv

3. Подготовка файла Position.csv

Файл Position.csv содержит информацию о должностях. Структура файла:

Таблица — Структура файла Position.csv

ПолеОписание
Id

Идентификатор должности 

Пример значения: 1081

Name

Наименование должности

Пример значения: Дежурный поста наблюдения

Пример файла Position.csv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Id;Name
1081;Дежурный поста наблюдения
1249;Машинист крана
1349;Оператор по обработке перевозочных документов
7239;Мастер погрузо-разгрузочных работ
7309;Начальник депо
11001;Аппаратчик обжига
11002;Аппаратчик абсорбции
11003;Аппаратчик смешивания
11004;Аппаратчик дозирования
11005;Оператор дистанционного пульта управления в химическом производстве
11006;Аппаратчик сушки
11017;Аппаратчик фильтрации
11019;Аппаратчик гашения извести
11020;Машинист перегружателей
11021;Аппаратчик выпаривания
11022;Аппаратчик синтеза

4. Подготовка файла Division.csv

Файл Division.csv содержит информацию о структуре подразделений. Структура файла:

Таблица — Структура файла Division.csv

ПолеОписание
Id

Идентификатор подразделения 

Пример значения: 77796515

Name

Наименование подразделения

Пример значения: Дирекция

ManageId

Идентификатор руководителя, существующий в атрибуте Id файла Person.csv Если подразделение не имеет руководителя, используется значение 0

Пример значения: 580035930

ParentId

Идентификатор родительского подразделения, существующий в атрибуте Id файла Division.csv. Этот атрибут создает иерархическую структуру подразделений. Если подразделение является корневым (не имеет родителя), то полеParentId содержит значение0. Если подразделение является дочерним, то полеParentId должно содержать Id родительского подразделения из файлаDivision.csv

Пример значения: 77796514

Пример файла Division.csv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Id;Name;ManageId;ParentId
77796514;Филиал АО Концерн;0;0
77796515;Дирекция;580035930;0
77796516;Дирекция по финансовым операциям;0;0
77796517;Управление закупки работ и услуг;0;77796514
77796518;Отдел закупки работ и услуг;580088581;77796516
77796519;Отдел закупки;580071198;77796514
77796520;Дирекция по информационной политике;0;0
77796521;Управление по информационной политике;0;77796514
77796522;Отдел по информационной политике;0;77796520
77796523;Дирекция по персоналу и социальной политике;0;0
77796524;Отдел найма и развития персонала;0;77796514
77796525;Отдел организации труда и заработной платы;0;77796514
77796526;Отдел социального развития;0;77796514
77796527;Отдел по работе с персоналом ООО Ромашка;0;77796514
77796528;Музейно-выставочный комплекс;0;77796514
77796529;Дирекция по экономическим вопросам;0;0
77796530;Управление по экономике производства;0;77796514
77796531;Отдел первичной отчетности и анализа;0;77796529
77796532;Управление проектного планирования;0;77796514

5. Подготовка файла Person.csv

Файл Person.csv содержит информацию о сотрудниках. Структура файла:

Таблица — Структура файла Person.csv

ПолеОписание
Id

Идентификатор сотрудника

Пример значения: 580061214

BirthDate

Дата рождения сотрудника в формате:YYYY-MM-DD HH:MM:SS.SSS

Пример значения:

1978-09-25 00:00:00.000

DivisionId

Идентификатор подразделения, в котором работает сотрудник. Значение должно точно соответствовать полю Id из файла Division.csv, чтобы установить связь между сотрудником и подразделением

Пример значения: 77796515

EmailAddress

Адрес электронной почты сотрудника

Пример значения:

1978-09-25 00:00:00.000

FirstName

Имя сотрудника

Пример значения: Иван

LastName

Фамилия сотрудника

Пример значения: Алексеев

Patronymic

Отчество сотрудника

Пример значения: Александрович

PersonId

Идентификатор физического лица. Может быть общим для всех должностей одного человека. Если значение отсутствует, используется 0

Пример значения: А47617

PersonnelNumber

Табельный номер сотрудника, если есть

Пример значения: А47617

PositionId

Указывает на должность сотрудника. Значение должно точно соответствовать полю Id из файла Position.csv.
Если в файле Person.csv для сотрудника не указан PositionId, коннектор будет использовать значение из параметра DefaultPosition (если параметр IgnoreEmptyPosition = false). Если IgnoreEmptyPosition true, то должность останется пустой

Пример значения: 13791

Status

Статус сотрудника. Возможны следующие значения:

  • Work — сотрудник работает;
  • Dismissed — сотрудник уволен;
  • Vacation – сотрудник в длительном отпуске

Пример значения: Work

Пример файла Person.csv:

1
2
3
4
5
6
7
8

Id;BirthDate;DivisionId;EmailAddress;LastName;FirstName;Patronymic;PersonId;PersonnelNumber;PositionId;Status
580061214;1978-09-25 00:00:00.000;77796515;Katerkin@avanpost.ru;Катеркин;Сергей;Иванович;А47617;А47617;13791;Work
580065890;1971-06-16 00:00:00.000;77796526;Rochicheva@avanpost.ru;Рочичева;Ольга;Евгеньевна;А79007;А79007;15277;Dismissed
580065892;1969-03-19 00:00:00.000;77796526;Teykyn@avanpost.ru;Тейкун;Ольга;Павловна;А79021;А79021;38450;Work
580090275;1989-09-18 00:00:00.000;77796561;Maslova@avanpost.ru;Маслова;Василиса;Валерьевна;А79047;А79047;0;Work
580103126;1973-02-15 00:00:00.000;77797460;Trubetskoy@avanpost.ru;Трубецкой;Иван;Васильевич;41535;41535;4503753;Work
580109027;1969-03-15 00:00:00.000;77797325;Subbotina@avanpost.ru;Субботина;Ирина;Викторовна;МХ003580;МХ003580;15144;Vacation
580109210;1967-04-28 00:00:00.000;77797352;NUll;Особливец;Елена;Николаевна;МХ007367;МХ007367;0;Work

6. Параметры конфигурации

Коннектор поддерживает настройку через файл конфигурации Config.json. Файл позволяет задать параметры для работы с CSV-файлами, содержащими информацию о подразделениях, сотрудниках и должностях.

6.1. Расположение файла конфигурации

Расположение указывается в строке подключения коннектора. Пример строки подключения:

C:\work\csvConnector\Config.json

6.2. Структура файла конфигурации

Структура файла включает следующие основные параметры:

Таблица — Параметры конфигурационного файла:



Delimiter

Разделитель, используемый в CSV-файле

Пример значения: ;

PathToDivisions

Путь к файлу CSV, содержащему информацию о подразделениях

Пример значения: TestData\\Division.csv

PathToEmployees

Путь к файлу CSV, содержащему информацию о сотрудниках

Пример значения: TestData\Person.csv

PathToPositions

Путь к файлу CSV, содержащему информацию о должностях

Пример значения: TestData\Position.csv

HasHeader

Наличие заголовочной строки в CSV-файлах

Пример значения:true(первая строка будет проигнорирована и использована как заголовок), false(первая строка будет обработана как данные)
IgnoreEmptyPosition

Должность по умолчанию для сотрудников, у которых не указана должность

Пример значения: true(должность сотрудника останется пустой, если о ней нет информации), false (будет использовано значение из параметра DefaultPosition)
DefaultPosition

Значение должности, которое присваивается сотрудникам, если информация о должности отсутствует. Используется только при IgnoreEmptyPosition=false

Пример значения: Position not specified
Division

Определяет порядок следования атрибутов подразделений в файле Division.csv. Содержит два блока:

  • Attributes — основные атрибуты, которые будут обрабатываться коннектором;

  • AdditionalProperties — дополнительные атрибуты, если необходимы

Пример значения: 

"Division": {
  "Attributes": [
    { "Field": "Id", "Index": 0 },
    { "Field": "Name", "Index": 1 },
    { "Field": "ManagerId", "Index": 2 },
    { "Field": "ParentId", "Index": 3 }
  ],
  "AdditionalProperties": []
}


Employee

Определяет порядок следования атрибутов подразделений в файле Person.csv. Содержит два блока:

  • Attributes — основные атрибуты, которые будут обрабатываться коннектором;

  • AdditionalProperties — дополнительные атрибуты, если необходимы

Пример значения: 

"Employee": {
  "Attributes": [
    { "Field": "Id", "Index": 0 },
    { "Field": "BirthDate", "Index": 1 },
    { "Field": "DivisionId", "Index": 2 },
    { "Field": "FirstName", "Index": 4 },
    { "Field": "LastName", "Index": 5 },
    { "Field": "Patronymic", "Index": 6 },
    { "Field": "PersonId", "Index": 7 },
    { "Field": "PersonnelNumber", "Index": 8 },
    { "Field": "PositionId", "Index": 9 },
    { "Field": "Status", "Index": 10 }
  ],
  "AdditionalProperties": [
    { "Field": "EmailAddress", "Index": 3 }
  ]
}
Position

Определяет порядок следования атрибутов должностей в файле Position.csv. Содержит два блока:


  • Attributes — основные атрибуты, которые будут обрабатываться коннектором;

  • AdditionalProperties — дополнительные атрибуты, если необходимы


Пример значения: 

"Position": {
  "Attributes": [
    { "Field": "Id", "Index": 0 },
    { "Field": "Name", "Index": 1 }
  ],
  "AdditionalProperties": []
}


6.3. Пример конфигурационного файла (Config.json)

{
  "Id": "#1",
  "Delimiter": ";",
  "PathToDivisions": "TestData\\Division.csv",
  "PathToEmployees": "TestData\\Person.csv",
  "PathToPositions": "TestData\\Position.csv",
  "HasHeader": "True",
  "IgnoreEmptyPosition": "False",
  "DefaultPosition": "Position not specified",

  "Division": {
    "Attributes": [
      {
        "Field": "Id",
        "Index": 0
      },
      {
        "Field": "Name",
        "Index": 1
      },
      {
        "Field": "ManagerId",
        "Index": 2
      },
      {
        "Field": "ParentId",
        "Index": 3
      }
    ],
    "AdditionalProperties": [
    ]
  },

  "Employee": {
    "Attributes": [
      {
        "Field": "Id",
        "Index": 0
      },
      {
        "Field": "BirthDate",
        "Index": 1
      },
      {
        "Field": "DivisionId",
        "Index": 2
      },
      {
        "Field": "FirstName",
        "Index": 4
      },
      {
        "Field": "LastName",
        "Index": 5
      },
      {
        "Field": "Patronymic",
        "Index": 6
      },
      {
        "Field": "PersonId",
        "Index": 7
      },
      {
        "Field": "PersonnelNumber",
        "Index": 8
      },
      {
        "Field": "PositionId",
        "Index": 9
      },
      {
        "Field": "Status",
        "Index": 10
      }
    ],
    "AdditionalProperties": [
      {
        "Field": "EmailAddress",
        "Index": 3
      }
    ]
  },

  "Position": {
    "Attributes": [
      {
        "Field": "Id",
        "Index": 0
      },
      {
        "Field": "Name",
        "Index": 1
      }
    ],
    "AdditionalProperties": [
    ]
  }
}



Обсуждение