# 조직 업무 현황 조사 — CSV 파일 포맷 명세

> 이 문서는 `01-as-is-survey-for-leader.html`이 생성하는 CSV 파일의 포맷을 명세합니다.

---

## 1. 파일 기본 정보

| 항목 | 값 |
|------|-----|
| 파일 형식 | CSV (Comma-Separated Values) |
| 인코딩 | UTF-8 with BOM |
| BOM | `\uFEFF` (파일 첫 바이트에 포함) |
| 구분자 | 쉼표(`,`) |
| 줄바꿈 | `\n` (LF) |
| 헤더 | 1행 (컬럼명) |
| MIME 타입 | `text/csv;charset=utf-8` |

> **BOM(Byte Order Mark)이 포함되는 이유**: Excel에서 CSV를 열 때 BOM이 없으면 한글이 깨집니다. BOM을 포함하면 Excel이 자동으로 UTF-8로 인식합니다.

---

## 2. 파일명 규칙

```
업무현황_{소속그룹}_{소속파트}_{날짜}.csv
```

| 요소 | 설명 | 예시 |
|------|------|------|
| `업무현황` | 고정 접두어 | `업무현황` |
| `{소속그룹}` | 설문에서 선택한 그룹명 | `경영지원그룹` |
| `{소속파트}` | 입력한 파트명 (미입력 시 `전체`) | `경영혁신파트` 또는 `전체` |
| `{날짜}` | 제출 시점 날짜 (ISO 형식) | `2026-04-20` |

**파일명 예시:**
```
업무현황_경영지원그룹_경영혁신파트_2026-04-20.csv
업무현황_인사그룹_전체_2026-04-20.csv
```

---

## 3. 컬럼 정의

CSV는 총 **9개 컬럼**으로 구성됩니다.

| # | 컬럼명 | 데이터 유형 | 필수 | 설명 |
|---|--------|------------|------|------|
| 1 | 소속그룹 | 텍스트 | ✓ | 카드 선택에서 선택한 그룹명 |
| 2 | 소속파트 | 텍스트 | — | 텍스트 입력한 파트명. 미입력 시 `-` |
| 3 | 조직장 | 텍스트 | ✓ | 응답자(조직장) 성함 |
| 4 | 전체인원 | 정수 | ✓ | 해당 그룹/파트의 전체 인원수 |
| 5 | 업무명 | 텍스트 | ✓ | 주요 업무의 이름 |
| 6 | 업무설명 | 텍스트 | — | 업무에 대한 설명. 미입력 시 빈 값 |
| 7 | 관련조직 | 텍스트 | — | 해당 업무와 관련된 다른 파트/그룹. 미입력 시 빈 값 |
| 8 | 담당자수(명) | 정수 | ✓ | 해당 업무에 배정된 담당자 수 |
| 9 | 비율(%) | 숫자 | ✓ | 전체 대비 해당 업무의 비율 (정수 또는 소수) |

---

## 4. 행 구조

### 1행: 헤더

```csv
소속그룹,소속파트,조직장,전체인원,업무명,업무설명,관련조직,담당자수(명),비율(%)
```

### 2행 이후: 데이터

**업무 1건 = 1행**입니다. 한 응답자가 업무를 5개 입력했다면 5행이 생성됩니다.

컬럼 1~4(소속그룹, 소속파트, 조직장, 전체인원)는 **모든 행에서 동일한 값으로 반복**됩니다.

```csv
소속그룹,소속파트,조직장,전체인원,업무명,업무설명,관련조직,담당자수(명),비율(%)
경영지원그룹,경영혁신파트,홍길동,15,전략기획,중장기 전략 수립 및 실행 관리,전략기획그룹,3,20
경영지원그룹,경영혁신파트,홍길동,15,예산관리,연간 예산 편성 및 집행 관리,재경그룹,4,27
경영지원그룹,경영혁신파트,홍길동,15,성과관리,KPI 설정 및 성과 리뷰,,3,20
경영지원그룹,경영혁신파트,홍길동,15,조직문화,조직 활성화 프로그램 운영,,2,13
경영지원그룹,경영혁신파트,홍길동,15,대외협력,외부 기관 협력 및 MOU 관리,"재경그룹, DX추진그룹",3,20
```

---

## 5. 데이터 값 상세

### 5-1. 소속그룹 (컬럼 1)

설문 Step 01에서 카드로 선택한 값. 아래 목록 중 하나:

```
경영지원그룹, 인사그룹, 재경그룹, 전략기획그룹,
IT인프라그룹, DX추진그룹, 품질관리그룹, 생산기술그룹
```

> 이 목록은 HTML 파일의 `const GROUPS=[...]` 배열에서 관리됩니다. 설문마다 다를 수 있습니다.

### 5-2. 소속파트 (컬럼 2)

- 응답자가 입력한 파트명 (자유 텍스트)
- **미입력 시**: `-` (하이픈)으로 표시
- 파트 없이 그룹 직속인 경우를 위해 선택 항목으로 처리

### 5-3. 조직장 (컬럼 3)

- 응답자 본인의 성함 (자유 텍스트)
- 필수 입력 항목

### 5-4. 전체인원 (컬럼 4)

- 해당 그룹 또는 파트의 전체 인원수
- 양의 정수 (1 이상)
- 모든 행에서 동일 값 반복

### 5-5. 업무명 (컬럼 5)

- 주요 업무의 이름 (자유 텍스트)
- 필수 입력 — 업무명이 비어있으면 해당 행은 CSV에 포함되지 않음

### 5-6. 업무설명 (컬럼 6)

- 업무에 대한 상세 설명 (자유 텍스트, 여러 줄 가능)
- 선택 입력 — 미입력 시 빈 값 (`,,`)
- 줄바꿈이 포함될 수 있으며, 이 경우 큰따옴표로 감싸짐

### 5-7. 관련조직 (컬럼 7)

- 해당 업무와 협업하는 다른 파트나 그룹 (자유 텍스트)
- 선택 입력 — 미입력 시 빈 값
- 여러 조직을 쉼표로 나열할 수 있음 (예: `재경그룹, DX추진그룹`)
- 쉼표 포함 시 자동으로 큰따옴표로 감싸짐

### 5-8. 담당자수(명) (컬럼 8)

- 해당 업무에 배정된 인원수
- 0 이상의 정수
- 필수 입력 — 비어있으면 해당 행은 CSV에 포함되지 않음

### 5-9. 비율(%) (컬럼 9)

- 전체 업무 대비 해당 업무의 비율
- 0 이상의 숫자 (정수 또는 소수)
- 필수 입력 — 비어있으면 해당 행은 CSV에 포함되지 않음
- 전체 업무의 비율 합이 100%가 되는 것이 권장되나, 강제하지 않음

---

## 6. CSV 포함 조건

업무 행이 CSV에 포함되려면 아래 **3개 필드가 모두 입력**되어야 합니다:

| 필드 | 조건 |
|------|------|
| 업무명 | 공백 제거 후 1자 이상 |
| 담당자수 | 값이 존재 (0 포함) |
| 비율 | 값이 존재 (0 포함) |

업무설명, 관련조직은 비어있어도 행은 포함됩니다.

---

## 7. 이스케이프 규칙

CSV 값에 특수문자가 포함된 경우 자동으로 처리됩니다:

| 상황 | 처리 |
|------|------|
| 값에 쉼표(`,`) 포함 | 전체를 큰따옴표로 감쌈: `"재경그룹, DX추진그룹"` |
| 값에 큰따옴표(`"`) 포함 | 큰따옴표를 이중화: `"그는 ""최고""라고 말했다"` |
| 값에 줄바꿈(`\n`) 포함 | 전체를 큰따옴표로 감쌈 |
| 위 해당 없음 | 그대로 출력 (따옴표 없이) |

---

## 8. 여러 응답자 CSV 병합

이 설문은 **응답자(조직장) 1명당 CSV 1개**가 생성됩니다. 여러 응답자의 CSV를 하나로 합칠 때는 다음과 같이 처리합니다:

### 병합 방법

1. 첫 번째 파일을 그대로 사용 (헤더 포함)
2. 두 번째 파일부터는 **1행(헤더)을 제외**하고 데이터 행만 아래에 추가
3. 모든 파일의 컬럼 구조가 동일하므로 단순 행 추가로 충분

### 병합 후 예시

```csv
소속그룹,소속파트,조직장,전체인원,업무명,업무설명,관련조직,담당자수(명),비율(%)
경영지원그룹,경영혁신파트,홍길동,15,전략기획,중장기 전략 수립,,3,20
경영지원그룹,경영혁신파트,홍길동,15,예산관리,예산 편성 및 집행,재경그룹,4,27
인사그룹,채용파트,김영희,8,신규채용,공개/수시 채용 운영,,5,62
인사그룹,채용파트,김영희,8,채용브랜딩,채용 홍보 및 브랜딩,DX추진그룹,3,38
재경그룹,-,박철수,12,회계결산,월/분기/연 결산,,4,33
재경그룹,-,박철수,12,세무신고,법인세/부가세 신고,,3,25
재경그룹,-,박철수,12,자금관리,일일 자금 현황 관리,,5,42
```

### Excel에서 병합하기

1. 첫 번째 CSV를 Excel에서 엽니다
2. 두 번째 CSV를 별도로 열고, 헤더 행을 제외한 데이터만 복사합니다
3. 첫 번째 파일의 마지막 행 아래에 붙여넣기 합니다
4. 반복합니다

### 명령줄에서 병합하기 (Windows)

```cmd
copy /b file1.csv + file2_no_header.csv + file3_no_header.csv merged.csv
```

### Python으로 병합하기

```python
import glob, csv

files = sorted(glob.glob("업무현황_*.csv"))
with open("병합_업무현황.csv", "w", encoding="utf-8-sig", newline="") as out:
    writer = csv.writer(out)
    for i, f in enumerate(files):
        with open(f, encoding="utf-8-sig") as inp:
            reader = csv.reader(inp)
            for j, row in enumerate(reader):
                if i > 0 and j == 0:  # 두 번째 파일부터 헤더 스킵
                    continue
                writer.writerow(row)
```

---

## 9. Excel에서 열기

### 직접 더블클릭

BOM이 포함되어 있으므로 대부분의 환경에서 더블클릭만으로 한글이 정상 표시됩니다.

### 한글이 깨지는 경우 (구버전 Excel)

1. Excel을 먼저 실행합니다
2. `데이터` → `텍스트/CSV에서` 또는 `외부 데이터 가져오기`
3. 파일 선택 후 인코딩을 **UTF-8**로 지정
4. 구분 기호를 **쉼표**로 선택
5. `로드` 클릭

---

## 10. 데이터 검증 포인트

CSV를 받은 후 아래 항목을 확인하면 데이터 품질을 보장할 수 있습니다:

| 검증 항목 | 확인 방법 |
|-----------|-----------|
| 비율 합 = 100% | 같은 조직장의 비율(%) 컬럼 합산 |
| 담당자 합 = 전체인원 | 같은 조직장의 담당자수 합산 vs 전체인원 컬럼 |
| 업무명 중복 없음 | 같은 조직장 내 업무명 고유 여부 |
| 소속그룹 유효값 | 사전 정의된 그룹 목록에 포함 여부 |
| 빈 필수 필드 없음 | 소속그룹, 조직장, 전체인원, 업무명, 담당자수, 비율 — 모두 값 존재 |

> 비율 합과 담당자 합은 설문 제출 시 경고를 표시하지만 강제하지 않으므로, 수집 후 별도 검증이 필요할 수 있습니다.
