## 역할
전체 애플리케이션의 데이터 구조를 정의하는 중앙 타입 시스템. 레거시 Java 백엔드(PersonBean, MenuItem 등)의 인터페이스를 TypeScript로 매핑한다.

## 주요 파일
- **index.ts** — 모든 타입 정의 집중

## 핵심 타입
- **User** — PersonBean 대응. sabun, userId, userName, deptCode, isAdmin 등 17개 필드. 다중언어(userName/userNameEng/userNameCn). 필드명은 camelCase.
- **MenuItem** — 메뉴 트리 노드. `level`이 문자열 타입, `parentObjId`로 부모 참조, `children?` 선택 배열.
- **GridResponse\<T\>** — 그리드 표준 응답. `RESULTLIST: T[]`, `TOTAL_CNT: number` (대문자 키).
- **FileInfo** — 첨부파일 메타데이터. objid, targetObjId, realFileName, savedFileName, filePath.
- **ApprovalInfo** — 결재 흐름. ApprovalTarget 배열(승인자별 status, comment).
- **CodeItem** — 공통코드 항목. CODE_ID, CODE_NAME.
- **PaginationInfo** — 페이징 정보. pageStart, pageEnd, currentPage.

## 연결 고리
- `User` → auth-store.ts, session.ts, 모든 API 라우트
- `MenuItem` → menu-store.ts, Header, Sidebar
- `GridResponse<T>` → 모든 리스트/테이블 조회 API 및 DataGrid
- `CodeItem` → CodeSelect 컴포넌트

## 숨겨진 스펙
- `MenuItem.level`은 문자열 — menu-store에서 `Number(level)` 변환 필수
- `GridResponse` 필드명은 대문자: `RESULTLIST`, `TOTAL_CNT`, `PAGE_HTML`
- `User` 필드명은 camelCase — 백엔드 SQL에서 alias를 camelCase로 반환해야 일치
- `CodeItem.sortOrder`는 문자열 — 정렬 시 Number() 변환 필요

@MISTAKES.md
