> 인사책 MCP 문서 — 결재. 서버 주소 https://insacheck.com/api/mcp. 전체판 https://insacheck.com/docs/mcp.md · 색인 https://insacheck.com/docs/mcp/llms.txt

# 결재 (approval)

결재 올리기 · 내 결재함 · 결재선 · 승인과 반려.

## 할 수 있는 일

- 도구 9개 · 흐름 30개 (AI 로 끝까지 18개 · 화면 안내 12개)
- APR-01 어제 퇴근 기록을 고쳐 달라고 결재를 올려요.
- APR-02 경비를 쓴 내역으로 결재를 올려요.
- APR-03 올린 결재가 지금 누구 차례인지 자세히 봐요.
- APR-05 참조인을 넣어서 결재를 올려요.
- APR-06 내일 연차 결재를 올려요.
- APR-07 출장 결재를 올려요.
- APR-08 외근 결재를 올려요.
- APR-09 인감 사용 결재를 올려요.
- APR-10 오늘 연장근무 결재를 올려요.
- APR-11 전자결재 문서를 올려요.
- APR-12 내가 결재할 차례인 것을 봐요.
- APR-14 내가 올린 결재가 어떻게 됐는지 봐요.
- APR-15 부서장 본인 휴가의 결재선을 확인해요.
- APR-19 결재를 올리면 누가 결재하는지 미리 봐요.
- APR-22 올린 결재를 거둬요.
- APR-23 결재권자를 더하거나 빼요.
- APR-26 반려된 결재를 고쳐서 다시 올려요.
- APR-29 회사의 결재선 목록을 봐요.

## 도구

조회는 `run_read`, 쓰기는 `run_write` 에 도구 이름(`tool`)과 값(`args`)을 넣어 불러요. 「이름 그대로」인 기본 도구는 바로 불러요. 등급은 0 바로 조회 · 1 바로 하고 5분 안에 되돌리기 · 2 미리보기 → 확정 · 3 앱 승인이에요.

| 이름 | 조회/쓰기 | 등급 | 필요 역할 | 범위 | 설명 | 부르는 길 |
|---|---|---|---|---|---|---|
| `approval_preview` | 조회 | 0 바로 조회 | employee (직원) | view | 결재를 올리기 전에 누가 결재하는지, 누가 참조로 들어가는지 보여줍니다. "누가 결재하게 돼?", "휴가 올리면 누구한테 가?" 같은 질문에 사용. | run_read |
| `approval_request` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 휴가·출장·인감·연장근무·근태 정정·외근·전자결재·경비 결재를 올립니다. 결재권자가 여러 명이면 되묻고(서버가 고르지 않아요), 올리기 전에 "결재: 누구 · 참조: 누구"를 보여줍니다. 먼저 approval_preview 로 확인하세요. | 이름 그대로 |
| `approval_resubmit` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 반려된 내 결재를 고쳐서 다시 올립니다. 이전 결재선과 참조를 그대로 가져오고, 고칠 칸만 적으면 돼요. "반려된 거 고쳐서 다시 올려" 같은 명령에 사용. | run_write |
| `approval_list` | 조회 | 0 바로 조회 | employee (직원) | view | 결재 목록. box=inbox 는 내가 결재할 차례인 것, box=mine 은 내가 올린 결재의 진행 상황(결재선 포함). 기본 10개, 더 있으면 next_cursor. | 이름 그대로 |
| `approval_get` | 조회 | 0 바로 조회 | employee (직원) | view | 결재 한 건의 내용·결재선·참조인·첨부 이름·댓글. 올린 사람·결재자·참조인만 볼 수 있어요. id·type 은 approval_list 가 준 값. | run_read |
| `approval_cancel` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | mine | 내가 올린 결재를 회수합니다(아직 결재 전인 건). 승인된 휴가는 결재권자가 없을 때만 바로 취소돼요. 실행 전에 확인을 받고, 되돌리기는 없어요. | run_write |
| `query_my_approval_inbox` | 조회 | 0 바로 조회 | employee (직원) | view | 내가 결재할 모든 대기 항목을 한 번에 조회합니다 (휴가+경비+출장+인감+연장근무+제증명+경조금+입사신청 통합 + 결재선에서 내 차례인 다단계 결재 건). "내가 결재할 거 뭐 있어?", "결재함 보여줘", "처리할 거 있어?" 같은 질문에 사용. 일반 직원도 결재선에 지정된 본인 차례 건은 조회됩니다. | run_read |
| `set_approval_line` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | admin | 결재권자 명부(종류별 추가 결재자)를 바꿉니다. "휴가 결재자에 김민준 추가해줘", "근태 정정 결재권자에서 박지훈 빼줘" 같은 명령에 사용. 웹 「결재 규칙」 화면의 추가 결재자와 같은 명단이고, 부서장은 자동 포함이라 더하거나 뺄 수 없어요. 이미 와 있는 결재는 옮기지 않고 앞으로 올라올 결재의 후보에만 걸려요. 결재 권한이 바뀌는 일이라 인사책 앱에서 사람이 승인해야 반영됩니다. 인사 권한 필요. | run_write |
| `query_approval_lines` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 설정된 결재선 목록을 조회합니다. "결재선 어떻게 돼있어?", "경비 결재 순서 보여줘" 같은 질문에 사용. 부서장 이상. | run_read |

도구마다 따로 읽는 문서: [approval_preview](https://insacheck.com/docs/mcp/tools/approval_preview.md) · [approval_request](https://insacheck.com/docs/mcp/tools/approval_request.md) · [approval_resubmit](https://insacheck.com/docs/mcp/tools/approval_resubmit.md) · [approval_list](https://insacheck.com/docs/mcp/tools/approval_list.md) · [approval_get](https://insacheck.com/docs/mcp/tools/approval_get.md) · [approval_cancel](https://insacheck.com/docs/mcp/tools/approval_cancel.md) · [query_my_approval_inbox](https://insacheck.com/docs/mcp/tools/query_my_approval_inbox.md) · [set_approval_line](https://insacheck.com/docs/mcp/tools/set_approval_line.md) · [query_approval_lines](https://insacheck.com/docs/mcp/tools/query_approval_lines.md)

## 말 → 호출 순서 (흐름)

### APR-01 어제 퇴근 기록을 고쳐 달라고 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「어제 퇴근 못 찍었어 정정 올려 줘」 「퇴근 시각 18:30 으로 고쳐 줘」 「출퇴근 기록 정정 신청해요」 「어제 출근 기록 바로잡아 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"attendance_fix"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「어느 날 기록을 몇 시로 고칠까요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"attendance_fix","day":"2026-10-20","checkout_time":"18:30","reason":"퇴근 기록을 깜빡했어요"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/attendance-correction-submit-core.ts:attendanceCorrectionSubmitCore · 웹 API POST /api/workers/me/attendance-corrections {day, checkin_time, checkout_time, reason}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"attendance_fix","day":"2026-10-20","checkout_time":"18:30","reason":"퇴근 기록을 깜빡했어요","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/attendance-correction-submit-core.ts:attendanceCorrectionSubmitCore · 웹 API POST /api/workers/me/attendance-corrections {day, checkin_time, checkout_time, reason}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 날짜는 어제부터 30일 안이어야 해요. / 고칠 출근 또는 퇴근 시각을 물어요. / 사유가 없으면 한 줄로 물어요.
- 끝: 근태 정정 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 근태 정정 신청 (/worker/attendance-correction)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 30일이 지난 기록은 올리지 않아요.

### APR-02 경비를 쓴 내역으로 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「경비 5만원 올려 줘」 「어제 점심 회식비 결재 올려줘요」 「경비 청구 부탁해」 「택시비 결재 올려 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"expense"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「경비 종류와 금액을 알려 주세요.」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"expense","category_id":3,"amount":50000,"expense_date":"2026-10-20","description":"영업부 회식비","payment_method":"card_corp"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/expense-submit-core.ts:expenseSubmitCore · 웹 API POST /api/worker/expense {category_id, amount, expense_date, description, payment_method}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"expense","category_id":3,"amount":50000,"expense_date":"2026-10-20","description":"영업부 회식비","payment_method":"card_corp","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/expense-submit-core.ts:expenseSubmitCore · 웹 API POST /api/worker/expense {category_id, amount, expense_date, description, payment_method}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 경비 종류 번호가 없으면 먼저 물어요. / 사용일은 1년 전부터 오늘까지예요. / 영수증 사진은 화면에서 붙여요.
- 끝: 경비 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 경비 청구 (/worker/expense)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 영수증 파일은 이 흐름으로 붙이지 않아요.

### APR-03 올린 결재가 지금 누구 차례인지 자세히 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「연차 신청했는데 결재함에 안 보여요」 「3번 건 자세히 알려줘」 「지금 누구 차례야?」 「내 결재 어디까지 갔어」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"mine"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/lib/worker-my-requests-reader.ts:readWorkerMyRequests · 웹 API GET /api/worker/my-requests
     다음으로 넘길 값: 결재 번호 · 결재 종류
  (값이 없으면 먼저 물어요: 「어느 결재를 자세히 볼까요?」)
  2. tools/call {"name":"run_read","arguments":{"tool":"approval_get","args":{"id":101,"type":"leave"}}}
     넘겨받는 값: 1.items.0.id → id · 1.items.0.type → type
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalGet · 함수 src/lib/request-overview.ts:loadRequestOverview
     다음으로 넘길 값: 진행 상태 · 지금 결재자 · 참조인 · 댓글
```

- 필요한 값 · 되묻기: 번호를 모르면 먼저 목록에서 골라요. / 올린 사람과 결재자와 참조인만 볼 수 있어요.
- 끝: 결재선과 지금 차례와 댓글을 보여 줘요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 하면 안 되는 것: 볼 수 없는 결재는 있는지도 말하지 않아요.

### APR-04 휴가 취소 결재를 처리해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「휴가 취소 결재 대기 건을 수락하고 싶어요」 「취소 결재는 누가 어디서 처리해요」 「내가 올린 휴가 취소 결재는 누가 수락해?」 「관리 탭에서 취소 결재 수락하려면요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 본인이 올린 취소 결재는 본인이 수락할 수 없어요.
- 끝: 취소 결재를 처리하는 화면으로 안내해요.
- 화면: 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 하면 안 되는 것: AI 로 취소 결재를 수락하지 않아요.

### APR-05 참조인을 넣어서 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「박가상 참조로 넣어서 올려 줘」 「김가상 결재자로 하고 이가상은 참조로 해줘」 「참조에 팀장님 넣고 올려요」 「결재는 박 부장님으로 올려 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"trip"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"trip","trip_type":"client_visit","destination":"수원","purpose":"고객사 방문","start_date":"2026-10-23","end_date":"2026-10-23","approver_name":"김가상","cc":["이가상"]}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/business-trip {trip_type, destination, purpose, start_date, end_date}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구로 할까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"trip","trip_type":"client_visit","destination":"수원","purpose":"고객사 방문","start_date":"2026-10-23","end_date":"2026-10-23","approver_name":"김가상","cc":["이가상"],"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/business-trip {trip_type, destination, purpose, start_date, end_date}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 참조인은 이름이나 번호로 최대 20명까지 넣어요. / 같은 회사 재직자만 참조로 넣을 수 있어요. / 회사 필수 참조인은 알아서 들어가요.
- 끝: 고른 결재자와 참조인으로 결재가 올라가요.
- 화면: 내 업무 → 결재·신청 → 전자결재 (/worker/approvals)
- 하면 안 되는 것: 범위 밖 사람이 하나라도 있으면 통째로 올리지 않아요. / 휴가는 지정한 결재자를 무시해요.

### APR-06 내일 연차 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「내일 연차 올려 줘」 「내일 하루 휴가 결재 올려줘요」 「연차 신청 부탁해」 「내일 쉴게요 휴가 올려 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"leave"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-routing.ts:resolveApprovalRoute
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「며칠에 쉬실 건가요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"leave","start_date":"2026-10-22","end_date":"2026-10-22","leave_type":"annual","reason":"개인 사정"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/routes/mcp-leave-request.ts:createMcpLeaveRequest · 웹 API POST /api/leave/requests {start_date, end_date, leave_type, reason}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"leave","start_date":"2026-10-22","end_date":"2026-10-22","leave_type":"annual","reason":"개인 사정","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/routes/mcp-leave-request.ts:createMcpLeaveRequest · 웹 API POST /api/leave/requests {start_date, end_date, leave_type, reason}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 날짜 말이 없으면 먼저 물어요. / 휴가 종류 말이 없으면 연차로 해요. / 결재자는 회사 결재선이 정해서 고르지 않아요.
- 끝: 휴가 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 내 업무 → 휴가 → + 버튼 (/worker/leave)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 남의 휴가를 대신 올리지 않아요.

### APR-07 출장 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「다음 주 부산 출장 올려 줘」 「출장 신청 결재 부탁해요」 「고객사 방문 출장 올려줘」 「내일 당일 출장 신청할게」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"trip"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「어디로 며칠에 가시나요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"trip","trip_type":"domestic_overnight","destination":"부산","purpose":"고객사 미팅","start_date":"2026-10-26","end_date":"2026-10-27"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/business-trip {trip_type, destination, purpose, start_date, end_date}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"trip","trip_type":"domestic_overnight","destination":"부산","purpose":"고객사 미팅","start_date":"2026-10-26","end_date":"2026-10-27","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/business-trip {trip_type, destination, purpose, start_date, end_date}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 출장 종류와 목적지와 목적을 물어요. / 고른 결재자가 회사 기본 결재선과 다르면 올릴 수 없어요.
- 끝: 출장 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 출장·외근 (/worker/business-trip)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 고른 결재선이 다르면 앱에서 올리라고 알려요.

### APR-08 외근 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「금요일 외근 올려 줘」 「내일 고객사 외근 신청해요」 「외근 결재 부탁해」 「오늘 외근 나가요 신청해 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"remote"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「어느 날 어디로 나가시나요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"remote","start_date":"2026-10-23","end_date":"2026-10-23","reason":"고객사 방문","location":"판교 고객사"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/remote-work-submit-core.ts:remoteWorkSubmitCore · 웹 API POST /api/worker/remote-work {start_date, end_date, reason, location}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"remote","start_date":"2026-10-23","end_date":"2026-10-23","reason":"고객사 방문","location":"판교 고객사","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/remote-work-submit-core.ts:remoteWorkSubmitCore · 웹 API POST /api/worker/remote-work {start_date, end_date, reason, location}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 재택·혼합 근무는 이 흐름으로 올리지 않아요. / 날짜와 사유와 장소를 물어요.
- 끝: 외근 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 외근 (/worker/remote)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 재택 근무는 받지 않아요.

### APR-09 인감 사용 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「법인 도장 쓸게요 결재 올려 줘」 「인감 사용 신청해 줘」 「계약서에 법인인감 찍어야 해요」 「개인 도장 날인 결재 부탁해」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"seal"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「어떤 도장을 어느 문서에 쓰시나요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"seal","seal_type":"corporate","document_name":"용역 계약서","purpose":"계약 체결"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/seal/requests
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"seal","seal_type":"corporate","document_name":"용역 계약서","purpose":"계약 체결","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/seal/requests
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 도장 종류와 문서 이름과 목적을 물어요. / 회사가 인감 기능을 끈 경우는 올릴 수 없어요.
- 끝: 인감 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 인감 사용 신청 (/worker/seal)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 고른 결재선이 다르면 앱에서 올리라고 알려요.

### APR-10 오늘 연장근무 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「오늘 2시간 연장 올려 줘」 「야근 신청해요」 「내일 18시부터 21시까지 연장근무 부탁해」 「연장근무 결재 올려줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"overtime"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「몇 시부터 몇 시까지 하시나요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"overtime","request_date":"2026-10-21","start_time":"18:00","end_time":"20:00","reason":"마감 업무"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/overtime {request_date, start_time, end_time, reason}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"overtime","request_date":"2026-10-21","start_time":"18:00","end_time":"20:00","reason":"마감 업무","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 웹 API POST /api/worker/overtime {request_date, start_time, end_time, reason}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 시작·종료 시각과 사유를 물어요. / 날짜 말이 없으면 오늘이에요.
- 끝: 연장근무 결재가 올라가고 결재 번호를 알려 줘요.
- 화면: 주말·연장 근무 (/worker/overtime)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 고른 결재선이 다르면 앱에서 올리라고 알려요.

### APR-11 전자결재 문서를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「품의서 올려 줘」 「전자결재 문서 올릴게요」 「비품 구매 요청 결재 부탁해」 「결재 문서 하나 올려줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"eapproval"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
  (값이 없으면 먼저 물어요: 「어느 양식으로 어떤 제목을 올릴까요?」)
  2-미리보기. tools/call {"name":"approval_request","arguments":{"type":"eapproval","form_id":2,"title":"비품 구매 요청","data_json":"{\"품목\":\"모니터 2대\"}"}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/eapproval-submit-core.ts:eapprovalSubmitCore · 웹 API POST /api/workers/me/approval-requests {form_id, title, data_json}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「결재자가 여럿이에요. 누구에게 올릴까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"approval_request","arguments":{"type":"eapproval","form_id":2,"title":"비품 구매 요청","data_json":"{\"품목\":\"모니터 2대\"}","confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_request · 함수 src/lib/eapproval-submit-core.ts:eapprovalSubmitCore · 웹 API POST /api/workers/me/approval-requests {form_id, title, data_json}
     다음으로 넘길 값: 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 양식 번호와 제목을 물어요. / 양식 번호는 전자결재 화면에서 볼 수 있어요. / PDF 파일은 화면에서 붙여요.
- 끝: 전자결재 문서가 올라가고 결재 번호를 알려 줘요.
- 화면: 내 업무 → 결재·신청 → 전자결재 (/worker/approvals)
- 하면 안 되는 것: 확인 없이 결재를 올리지 않아요. / 결재자를 서버나 AI 가 마음대로 고르지 않아요. / 파일 첨부는 이 흐름으로 하지 않아요.

### APR-12 내가 결재할 차례인 것을 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「결재할 거 있어?」 「결재함 보여줘」 「내 차례인 결재 알려 줘요」 「처리할 결재 뭐 있어」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"inbox"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/routes/mcp-tools/approval-read.ts:readApprovalInboxItems · 웹 API GET /api/worker/my-approvals
     다음으로 넘길 값: 결재 번호 · 결재 종류 · 올린 사람
```

- 필요한 값 · 되묻기: 결재선에 이름이 오른 사람만 목록이 있어요. / 더 있으면 이어서 볼 수 있어요.
- 끝: 내 차례인 결재 목록을 보여 줘요.
- 화면: 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 하면 안 되는 것: 여기서 승인이나 반려를 하지 않아요.

### APR-13 참조로 걸린 결재 알림이 안 와요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「결재 참조인인데 알림이 안 울려요」 「참고인 알림 설정 방법 알려 줘」 「결재 올라와도 알림이 안 와요」 「참조 알림 켜는 법이요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 알림을 꺼 두면 참조여도 알림이 안 와요.
- 끝: 알림 설정 화면으로 안내해요.
- 화면: 오른쪽 위 톱니바퀴 → 알림 설정 (/worker/notif-settings)
- 하면 안 되는 것: 알림이 안 오는 까닭을 단정하지 않아요.

### APR-14 내가 올린 결재가 어떻게 됐는지 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「내가 올린 거 어떻게 됐어?」 「올린 결재 진행 상황 알려줘」 「내 결재 현황 보여줘요」 「신청한 거 승인됐나요」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"mine"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/lib/worker-my-requests-reader.ts:readWorkerMyRequests · 웹 API GET /api/worker/my-requests
     다음으로 넘길 값: 결재 번호 · 결재 종류 · 진행 상태 · 결재선
```

- 필요한 값 · 되묻기: 기본 10개씩 보여 주고 더 있으면 이어서 봐요. / 결재 번호와 종류는 다음 줄에서 써요.
- 끝: 내가 올린 결재와 진행 상태를 보여 줘요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 하면 안 되는 것: 다른 사람이 올린 결재는 이 흐름으로 보지 않아요.

### APR-15 부서장 본인 휴가의 결재선을 확인해요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「부서장 휴가 올리면 결재선 오류가 나요」 「내 휴가는 누가 결재해?」 「결재선을 확인할 수 없다고 나와요」 「부서장인데 휴가 결재자가 없대요」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"leave"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-routing.ts:resolveApprovalRoute
     다음으로 넘길 값: 결재선 · 결재자 없음 여부
```

- 필요한 값 · 되묻기: 결재자가 없다고 나오면 관리자에게 지정을 부탁해요. / 결재선 설정은 화면에서만 바꿔요.
- 끝: 지금 잡히는 휴가 결재선이나 결재자 없음을 보여 줘요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: AI 가 결재선을 마음대로 바꾸지 않아요. / 원인을 단정하지 않고 결과만 알려요.

### APR-16 올라온 결재를 반려해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「이 휴가 반려할래요」 「결재 반려하려면 어떻게 해요」 「반려 사유 적어서 돌려보내 줘」 「팀원 신청 반려해 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 반려할 때는 사유를 적어야 해요.
- 끝: 결재함 화면으로 안내해요.
- 화면: 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 하면 안 되는 것: AI 로 반려하지 않아요. / 반려 사유를 대신 지어내지 않아요.

### APR-17 회사만의 결재 양식을 만들어요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「결재 양식 만들고 싶어요」 「비품 구매 요청서 양식 만들어 줘」 「우리 회사 전용 결재 양식 가능해요?」 「결재 양식 영역 바꿔 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 양식 이름과 업무 영역과 칸을 화면에서 정해요.
- 끝: 결재 양식 화면으로 안내해요.
- 화면: 결재 양식 만들러 가기 (/admin/enterprise/approval-forms)
- 하면 안 되는 것: AI 로 양식을 만들지 않아요.

### APR-18 근태 정정을 누가 승인할지 정해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「출퇴근 기록 고쳐 달라는 건 누가 승인해요」 「근태 정정 결재자 바꿔 줘」 「근무기록 결재권자 정하고 싶어요」 「정정 요청 승인자 설정할게요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 바꾸면 다음 신청부터 적용돼요.
- 끝: 결재 규칙 화면으로 안내해요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 근무기록 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: AI 로 정정 결재자를 바꾸지 않아요.

### APR-19 결재를 올리면 누가 결재하는지 미리 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「휴가 올리면 누구한테 가?」 「누가 결재하게 돼?」 「경비 결재는 누가 승인해요」 「출장 올리기 전에 결재선 보여줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「어떤 결재를 올리실 건가요?」)
  1. tools/call {"name":"run_read","arguments":{"tool":"approval_preview","args":{"type":"expense"}}}
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_preview · 함수 src/lib/approval-line-picker.ts:resolveApprovalLineCandidatePage · 웹 API GET /api/workers/me/approval-requests/approvers
     다음으로 넘길 값: 결재자 후보 · 참조인
```

- 필요한 값 · 되묻기: 결재 종류를 물어요. / 후보가 여럿이면 올릴 때 한 명을 골라요. / 회사 필수 참조인도 같이 보여 줘요.
- 끝: 누가 결재하고 누가 참조로 들어가는지 보여 줘요.
- 화면: 내 업무 → 결재·신청 → 전자결재 (/worker/approvals)
- 하면 안 되는 것: 미리 보기만 하고 결재를 올리지 않아요.

### APR-20 올라온 결재를 승인해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「이 결재 승인해 줘」 「결재함에서 승인하고 싶어요」 「휴가 승인 처리해 줘」 「팀원이 올린 거 승인할게」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"inbox"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/routes/mcp-tools/approval-read.ts:readApprovalInboxItems · 웹 API GET /api/worker/my-approvals
     다음으로 넘길 값: 결재 번호 · 결재 종류
```

- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 내 차례인 건만 목록으로 알려 줘요.
- 끝: 결재함 화면으로 안내해요.
- 화면: 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 하면 안 되는 것: AI 로 승인하지 않아요. / 승인 단추를 대신 누르지 않아요.

### APR-21 휴가를 누가 승인할지 회사 규칙을 바꿔요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「휴가 결재는 누가 승인해요」 「휴가 결재선을 상위 부서장까지 바꿔 줘」 「휴가 승인 규칙 바꾸고 싶어요」 「휴가 결재선 설정 어디예요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 바꾸면 다음 신청부터 적용돼요.
- 끝: 결재 규칙 화면으로 안내해요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 휴가 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: AI 로 결재 규칙을 바꾸지 않아요.

### APR-22 올린 결재를 거둬요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「방금 올린 휴가 취소해 줘」 「경비 신청 거둬 줘」 「올린 결재 회수해요」 「연장근무 신청 취소할게」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"mine"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/lib/worker-my-requests-reader.ts:readWorkerMyRequests · 웹 API GET /api/worker/my-requests
     다음으로 넘길 값: 결재 번호 · 결재 종류
  (값이 없으면 먼저 물어요: 「어느 결재를 거둘까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"approval_cancel","args":{"id":101,"type":"leave"}}}
     넘겨받는 값: 1.items.0.id → id · 1.items.0.type → type
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalCancel · 함수 src/lib/leave-cancel-service.ts:executeLeaveSelfCancel · 웹 API PATCH /api/leave/requests/:id/cancel
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"approval_cancel","args":{"id":101,"type":"leave"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.items.0.id → id · 1.items.0.type → type · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalCancel · 함수 src/lib/leave-cancel-service.ts:executeLeaveSelfCancel · 웹 API PATCH /api/leave/requests/:id/cancel
     다음으로 넘길 값: 회수 결과
```

- 필요한 값 · 되묻기: 휴가·연장근무·경비·전자결재만 AI 로 거둘 수 있어요. / 이미 결재가 끝난 건은 거둘 수 없어요. / 거둔 뒤에는 되돌릴 수 없다고 먼저 알려요.
- 끝: 올린 결재를 거두고 결과를 알려 줘요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 하면 안 되는 것: 확인 없이 거두지 않아요. / 남이 올린 결재는 거두지 않아요.

### APR-23 결재권자를 더하거나 빼요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「휴가 결재자에 김가상 추가해 줘」 「근태 정정 결재권자에서 박가상 빼줘」 「전자결재 결재자에 이가상 넣어 줘요」 「결재권자 명단 바꿔 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「누구를 어느 결재에 더할까요?」)
  1. tools/call {"name":"run_write","arguments":{"tool":"set_approval_line","args":{"action":"add","item_type":"leave","worker":"김가상"}}}
     서버: 몸통 src/routes/mcp-tools/approval-roster-tool.ts:set_approval_line · 함수 src/lib/approval-authority-write.ts:addApprovalAuthority · 웹 API POST /api/admin/enterprise/approval-authorities
     다음으로 넘길 값: 바뀐 명단
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구로 할까요?」 → 고른 id 로 같은 줄을 다시 · 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 더할지 뺄지와 결재 종류와 사람 이름을 물어요. / 앱에서 사람이 승인해야 바뀌어요. / 부서장은 자동이라 더하거나 뺄 수 없어요.
- 끝: 앞으로 올라올 결재의 후보 명단이 바뀌어요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: 앱 승인 없이 명단을 바꾸지 않아요. / 이미 올라온 결재의 결재자는 옮기지 않아요.

### APR-24 파일을 붙여서 결재를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「PDF 붙여서 결재 올려 줘」 「서류 첨부해서 품의서 올릴게요」 「결재에 파일 첨부하고 싶어요」 「계약서 파일 같이 올려 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 파일은 화면의 「PDF 선택」으로 붙여요.
- 끝: 결재 문서를 올리는 화면으로 안내해요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → + 버튼 (/worker/approvals)
- 하면 안 되는 것: 대화창으로 파일을 올리지 않아요.

### APR-25 경비 금액이 크면 결재자를 더 두어요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「큰 경비는 더 많은 사람이 승인하게 해 줘」 「금액별 결재선 만들고 싶어요」 「경비 금액대 결재자 설정해요」 「금액별 결재 켜는 법 알려 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 저장한 뒤 「이 설정 사용하기」까지 눌러요.
- 끝: 금액별 결재선 화면으로 안내해요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 경비 금액별 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: AI 로 금액별 결재선을 바꾸지 않아요.

### APR-26 반려된 결재를 고쳐서 다시 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「반려된 휴가 날짜만 바꿔서 다시 올려 줘」 「반려된 거 고쳐서 다시 올려요」 「출장 신청 다시 올려줘」 「연장근무 시간 고쳐서 재신청해」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"approval_list","arguments":{"box":"mine"}}
     서버: 몸통 src/routes/mcp-tools/approval-read.ts:approvalList · 함수 src/lib/worker-my-requests-reader.ts:readWorkerMyRequests · 웹 API GET /api/worker/my-requests
     다음으로 넘길 값: 반려된 결재 번호 · 결재 종류
  (값이 없으면 먼저 물어요: 「어느 반려 결재를 고칠까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"approval_resubmit","args":{"from_id":101,"type":"leave","start_date":"2026-10-23","end_date":"2026-10-23"}}}
     넘겨받는 값: 1.items.1.id → from_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_resubmit · 함수 src/routes/mcp-leave-request.ts:createMcpLeaveRequest · 웹 API POST /api/leave/requests {start_date, end_date, leave_type, reason}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"approval_resubmit","args":{"from_id":101,"type":"leave","start_date":"2026-10-23","end_date":"2026-10-23"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.items.1.id → from_id · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/approval-request.ts:approval_resubmit · 함수 src/routes/mcp-leave-request.ts:createMcpLeaveRequest · 웹 API POST /api/leave/requests {start_date, end_date, leave_type, reason}
     다음으로 넘길 값: 새 결재 번호 · 결재자 · 참조인
```

- 필요한 값 · 되묻기: 휴가·출장·인감·연장근무만 AI 로 다시 올려요. / 고칠 칸만 말하면 나머지는 옛 신청에서 가져와요. / 이전 결재자가 없으면 다시 골라요.
- 끝: 고친 내용으로 새 결재가 올라가요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 하면 안 되는 것: 반려되지 않은 결재는 다시 올리지 않아요. / 남의 반려 건은 다시 올리지 않아요.

### APR-27 출장·외근·인감·근태 정정 결재를 거둬요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「출장 신청 취소해 줘」 「올린 외근 거둘래요」 「인감 신청 회수하고 싶어요」 「근태 정정 신청 취소해요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 결재 대기일 때만 거둘 수 있어요.
- 끝: 내가 올린 결재를 거두는 화면으로 안내해요.
- 화면: 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 하면 안 되는 것: AI 로 거두지 않아요. / 결재가 끝난 건은 거둘 수 없다고 알려요.

### APR-28 모든 결재를 보는 필수 참고인을 정해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「모든 결재에 참조로 들어가는 사람 정하고 싶어요」 「필수 참고인 추가해 줘」 「필수 참조인 빼 주세요」 「결재 참고인을 회사 전체로 지정해요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 바꾸면 다음 신청부터 적용돼요.
- 끝: 결재 규칙 화면으로 안내해요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: AI 로 필수 참고인을 바꾸지 않아요.

### APR-29 회사의 결재선 목록을 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「결재선 어떻게 돼 있어?」 「경비 결재 순서 보여줘」 「결재선 목록 알려 줘요」 「휴가 결재는 누구 거쳐?」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_approval_lines","args":{"limit":10}}}
     서버: 몸통 src/routes/mcp-tools/approvals.ts:query_approval_lines · 웹 API GET /api/admin/enterprise/approval-lines
     다음으로 넘길 값: 결재선 이름 · 결재 순서
```

- 필요한 값 · 되묻기: 부서장은 자기 부서 결재선만 봐요. / 더 있으면 이어서 봐요.
- 끝: 설정된 결재선과 순서를 보여 줘요.
- 화면: 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 (/admin/enterprise/approval-rules)
- 하면 안 되는 것: 여기서 결재선을 바꾸지 않아요.

### APR-30 반려된 외근·근태 정정·경비·전자결재를 다시 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「반려된 외근 고쳐서 다시 올려 줘」 「반려된 경비 금액 고쳐서 재신청해요」 「반려된 품의서 다시 올릴래요」 「반려된 근태 정정 다시 올려줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 화면에서 새 신청서로 다시 올려요.
- 끝: 새로 올리는 화면으로 안내해요.
- 화면: 내 업무 → 결재·신청 → 전자결재 (/worker/approvals)
- 하면 안 되는 것: AI 로 다시 올리지 않아요.

### 이 영역 도구가 나오는 다른 흐름

- ATT-04 잘못 찍힌 출퇴근 시각을 고쳐 달라고 올려요. → https://insacheck.com/docs/mcp/attendance.md
- ATT-13 올린 출퇴근 정정이 어디까지 갔는지 봐요. → https://insacheck.com/docs/mcp/attendance.md
- ATT-14 올린 출퇴근 정정을 거둬요. → https://insacheck.com/docs/mcp/attendance.md
- LV-03 결재함에 휴가 신청이 안 보여요. → https://insacheck.com/docs/mcp/leave.md
- LV-05 연차를 하루나 여러 날 신청해요. → https://insacheck.com/docs/mcp/leave.md
- LV-09 내 휴가를 누가 결재하는지 먼저 봐요. → https://insacheck.com/docs/mcp/leave.md
- LV-11 반차(오전·오후)를 신청해요. → https://insacheck.com/docs/mcp/leave.md
- LV-13 휴가를 결재하는 사람을 더하거나 빼요. → https://insacheck.com/docs/mcp/leave.md
- LV-21 병가나 경조 같은 다른 종류 휴가를 올려요. → https://insacheck.com/docs/mcp/leave.md
- LV-24 반려된 휴가를 고쳐서 다시 올려요. → https://insacheck.com/docs/mcp/leave.md
- SET-19 결재하는 사람 묶음을 봐요. → https://insacheck.com/docs/mcp/company.md
- SET-20 결재하는 사람을 넣거나 빼요. → https://insacheck.com/docs/mcp/company.md
- 그 밖의 흐름은 영역별 문서에 있어요: https://insacheck.com/docs/mcp.md

## 안 되는 것 · 대안

아직 AI 로 안 되는 일이에요. 대신 화면에서 해요.

- 휴가 취소 결재를 처리해요. → 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 참조로 걸린 결재 알림이 안 와요. → 오른쪽 위 톱니바퀴 → 알림 설정 (/worker/notif-settings)
- 올라온 결재를 반려해요. → 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 회사만의 결재 양식을 만들어요. → 결재 양식 만들러 가기 (/admin/enterprise/approval-forms)
- 근태 정정을 누가 승인할지 정해요. → 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 근무기록 (/admin/enterprise/approval-rules)
- 올라온 결재를 승인해요. → 화면 맨 아래 결재/요청 → 결재요청 내역 → 결재함 (/worker/requests)
- 휴가를 누가 승인할지 회사 규칙을 바꿔요. → 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 휴가 (/admin/enterprise/approval-rules)
- 파일을 붙여서 결재를 올려요. → 내 업무 → 결재·신청 → 전자결재 → + 버튼 (/worker/approvals)
- 경비 금액이 크면 결재자를 더 두어요. → 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 → 경비 금액별 (/admin/enterprise/approval-rules)
- 출장·외근·인감·근태 정정 결재를 거둬요. → 내 업무 → 결재·신청 → 전자결재 → 내가 작성한 문서 (/worker/approvals)
- 모든 결재를 보는 필수 참고인을 정해요. → 설정 → 사람·권한 → 휴가/근무/경비/전자 결재권자 수정 (/admin/enterprise/approval-rules)
- 반려된 외근·근태 정정·경비·전자결재를 다시 올려요. → 내 업무 → 결재·신청 → 전자결재 (/worker/approvals)
