# Docs Staff List

> Объединяет разнородные .xls/.xlsx со списками сотрудников, штатными расстановками и кадровыми выгрузками в один проверенный сводный .xlsx. Автоматически определяет формат каждого файла, очищает ФИО и формирует колонки Сотрудник, Дата рождения, Должность, Подразделение и Филиал. Использовать по запросам: список сотрудников, штатные сотрудники, штатная расстановка, кадровая выгрузка, сводный список, объединить таблицы сотрудников, консолидация по филиалам, привести списки к одному виду, очистить ФИО.

- Skill: `obviousbread/docs-staff-list` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add obviousbread/docs-staff-list`
- Raw SKILL.md: https://api.skillmd.com/api/skills/obviousbread/docs-staff-list/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: obviousbread (https://skillmd.com/u/obviousbread)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/obviousbread/docs-staff-list

---


# docs-staff-list — сводный список сотрудников

Создавать один `.xlsx` с колонками:

| № | Сотрудник | Дата рождения | Должность | Подразделение | Филиал |
|---|---|---|---|---|---|

Использовать `scripts/normalize.py`. Не классифицировать форматы вручную до запуска `--probe`.

## 1. Определить вход

Собрать переданные `.xls`/`.xlsx`. Если для одного филиала есть основной, внешний и объединённый варианты, выбрать один файл с нужным охватом — обычно объединённый. Не включать готовый общий сводный вместе с филиальными файлами.

При новой или непонятной структуре прочитать `references/formats.md`.

## 2. Выполнить probe

```bash
python3 scripts/normalize.py --probe --input-dir "/path/to/input"
```

Для выбранных файлов:

```bash
python3 scripts/normalize.py --probe \
  --input-dir "/path/to/input" \
  --files "branch-a.xlsx" "branch-b.xls"
```

Проверить для каждого файла формат, число строк и источник филиала. Если филиал угадан из имени, задать человекочитаемое значение через `--branch-map`.

## 3. Выбрать выход

Прочитать `~/.docs-plugin/org_details.md`, если он существует.

- Если `staff_file` указывает на каталог, создать в нём датированную подпапку и сводный файл: `<staff_file>/<ДД.ММ.ГГГГ>/Сводный список сотрудников <ДД.ММ.ГГГГ>.xlsx`.
- Если `staff_file` указывает на конкретный файл или не задан, выбрать явный путь в папке текущей задачи.
- Всегда передавать итоговый путь через `--output`. Не перезаписывать существующий файл без явной просьбы.

## 4. Создать сводный

```bash
python3 scripts/normalize.py \
  --input-dir "/path/to/input" \
  --files "branch-a.xlsx" "branch-b.xls" \
  --branch-map "branch-a.xlsx:Филиал А;branch-b.xls:Филиал Б" \
  --title "Сводный список сотрудников 10.08.2026" \
  --output "/path/to/output/Сводный список сотрудников 10.08.2026.xlsx"
```

Переопределения использовать только после ошибочного probe:

- `--format-map "file.xls:shtatnaya"` — задать формат;
- `--year-only "file.xlsx"` — сохранить только год рождения;
- `--date-col "file.xls:4"` — задать индекс колонки даты;
- `--dedup` — удалить повторы по ФИО и дате рождения, только после осмысленной проверки дублей.

По умолчанию дубли сохранять: один человек может занимать несколько должностей.

## 5. Проверить результат

- Сверить итоговое число строк и разбивку по филиалам с probe.
- Добиться `Верификация: OK` либо разобрать каждую проблему.
- Просмотреть все изменённые ФИО и исключить ложные срезы.
- Проверить группы дублей.
- Открыть итоговый `.xlsx`: заголовки находятся в строке 3, фильтр включён, закрепление — `A4`.

Исходники не перемещать и не удалять без явной просьбы.

## Зависимости

Python 3.8+, `pandas`, `openpyxl`; для чтения `.xls` также нужен `xlrd`.

