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

# 급여·비용 (pay)

급여 명세서 · 급여 계산 · 경비 · 법인카드 · 4대보험 · 업무 구매(화환·명함).

## 할 수 있는 일

- 도구 37개 · 흐름 27개 (AI 로 끝까지 22개 · 화면 안내 5개)
- PAY-01 영수증을 보고 경비를 올려요.
- PAY-02 야근 시작 시각과 저녁 휴게를 바꿔요.
- PAY-03 법인카드 사용 내역을 봐요.
- PAY-04 내 급여명세서를 봐요.
- PAY-05 급여 정책이 누구에게 걸렸는지 봐요.
- PAY-06 새 급여 정책을 만들어 직원 여럿에게 붙여요.
- PAY-08 내 경비가 어디까지 처리됐는지 봐요.
- PAY-09 회사 법인카드 목록을 봐요.
- PAY-10 법인카드로 쓴 돈을 기록해요.
- PAY-11 회사 연장·야간 수당 총액을 봐요.
- PAY-14 부서에 급여 정책을 새로 붙여요.
- PAY-15 이번 달 급여명세서 현황을 봐요.
- PAY-16 한 직원의 월급을 미리 계산해 봐요.
- PAY-17 급여대장을 파일로 받아요.
- PAY-18 임금대장을 뽑아요.
- PAY-19 회사 인건비 합계를 봐요.
- PAY-20 급여 정책을 누가 바꿨는지 봐요.
- PAY-21 근무 규칙과 안 맞는 급여 정책을 찾아요.
- PAY-22 급여 정책의 값을 다음 달부터 바꿔요.
- PAY-23 이번 달 경비 합계를 항목별로 봐요.
- PAY-24 기간 안에 올라온 경비 총액을 봐요.
- PAY-25 4대보험 가입 현황을 봐요.

## 도구

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

| 이름 | 조회/쓰기 | 등급 | 필요 역할 | 범위 | 설명 | 부르는 길 |
|---|---|---|---|---|---|---|
| `query_my_payslip` | 조회 | 0 바로 조회 | employee (직원) | view | 본인의 급여명세서를 조회합니다. "이번달 내 급여 명세서", "5월 월급 얼마야?" 같은 질문에 사용. | run_read |
| `payslip_my` | 조회 | 0 바로 조회 | employee (직원) | view | 내 급여명세서를 보여 줍니다(확정된 것만 · 내 것만). "이번 달 월급 얼마야?", "9월 급여명세서" 같은 말에 사용. pay_period 는 YYYY-MM 이고, 가장 최근 확정 명세서는 latest 로 불러요. 급여 기능이 개발 중일 때는 응답에 안내 문구가 함께 와요. | run_read |
| `query_payslips` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 회사 급여명세서 목록을 조회합니다. "5월 급여명세서 현황", "확정 안된 명세서?" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `query_company_payroll_total` | 조회 | 0 바로 조회 | owner (대표) | view | 회사 전체 인건비(급여) 총합을 조회합니다. "이번달 인건비 총합?", "5월 급여 총액" 같은 질문에 사용. 대표관리자 전용. | run_read |
| `export_payroll_csv` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 급여명세서 데이터를 CSV로 내보냅니다. "이번달 급여 다운로드", "급여대장 엑셀" 같은 명령에 사용. 인사 권한 필요. | run_read |
| `estimate_pay` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 직원의 월 급여를 출퇴근 기록 기반으로 자동 추정합니다 — 기본급 + 연장/야간/휴일 가산수당(근기법 제56조) + 휴게 자동공제(제54조) + 4대보험 공제. "이주영 이번달 급여 얼마야?", "박철수 5월 야근수당 계산" 같은 질문에 사용. 읽기 전용(저장 안 함). 인사 권한 필요. | run_read |
| `generate_wage_ledger` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 임금대장(근기법 제48조 법정서식)을 생성합니다 — 직원별 기본급·수당·공제·실수령. "지난달 임금대장", "2026-05 임금대장 뽑아줘" 같은 명령에 사용. 인사 권한 필요. | run_read |
| `generate_payslip` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 직원 급여명세서를 자동 계산해 생성/갱신합니다(상태 draft). "이주영 5월 급여명세 만들어" 같은 명령에 사용. 확정/지급된 명세는 보호됩니다. 인사 권한 필요. | run_write |
| `finalize_payslip` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 그 달 급여를 전원 확정합니다(새 급여 원장 · 웹 급여 화면의 확정과 같음). 계산이 끝나고 급여 결재가 승인된 달만 됩니다. 확정 전에 인사책 앱으로 확인 카드(대상 인원·이름·지급/공제/실수령 합계)가 가고 사람이 승인해야 실행돼요. "5월 급여 확정" 같은 명령에 사용. 직원 한 명만 확정하는 길은 없어요. 급여 운영·급여 민감정보 권한 필요. | run_write |
| `bulk_generate_payslips` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 전 직원 월 급여명세서를 일괄 자동 생성합니다(draft). "이번달 급여명세 전부 만들어", "5월 급여 일괄 계산" 같은 명령에 사용. 확정/지급된 건 건너뜀. 인사 권한 필요. | run_write |
| `wreath_order` | 쓰기 | 3 앱 승인 | owner (대표) | money | 근조화환을 주문합니다. "OO장례식장으로 근조화환 보내 줘", "4단 화환 주문해" 같은 말에 사용. product_code 는 WREATH_3=근조화환 3단 100,000원 · WREATH_4=근조화환 4단 130,000원 · WREATH_BASKET=근조바구니 70,000원. 받는 곳은 장례식장 이름(venue)+주소(address) 또는 부고장 링크(obituary_url) 중 하나가 꼭 있어야 해요. 리본 보내는 이·문구·연락처가 비면 회사 기본값으로 채워 미리 보여 줘요. 돈이 걸린 일이라 인사책 앱에서 대표가 [승인]을 눌러야 주문이 접수돼요 — 승인 뒤 같은 인자로 다시 부르면 주문이 접수되고 결제 화면 주소가 와요. 접수만으로 돈이 나가지 않고, 결제는 대표가 인사책 결제 화면에서 직접 해요. 빈소 사진 첨부·축하화환은 인사책 화면에서 해요. 대표 전용. | run_write |
| `business_card_order` | 쓰기 | 3 앱 승인 | owner (대표) | money | 직원 명함을 주문합니다. "김민수 명함 2통 주문해 줘", "영업팀 명함 만들어 줘" 같은 말에 사용. employee_ids 는 query_employees 로 찾은 직원 id(1~30명) · quantity 는 한 사람당 100매 묶음 수(1~10) · paper 는 standard=일반형 100매 9,900원 · premium=고급형 100매 22,000원 · luxury=프리미엄형 100매 30,000원. 디자인(template)은 회사 기본 명함이 있으면 그것을 쓰고, 없으면 꼭 골라야 해요(h-*=가로 · v-*=세로). 명함 글자는 직원 정보(이름·직책·부서·전화·이메일)로 채워요. 돈이 걸린 일이라 인사책 앱에서 대표가 [승인]을 눌러야 주문이 접수돼요 — 승인 뒤 같은 인자로 다시 부르면 주문이 접수되고 결제 화면 주소가 와요. 결제는 대표가 결제 화면에서 직접 해요. 맞춤 디자인 제작은 인사책 화면에서 해요. 대표 전용. | run_write |
| `shop_products` | 조회 | 0 바로 조회 | owner (대표) | view | 업무 구매에서 GPT 로 주문할 수 있는 상품과 값을 봅니다. "화환 얼마야", "명함 값 알려 줘" 같은 말에 사용. 값은 인사책 서버 가격표 그대로(부가세 포함)예요. 시험 결제 단계면 그 사실도 같이 알려 줘요. 대표 전용. | run_read |
| `shop_order_status` | 조회 | 0 바로 조회 | owner (대표) | view | 업무 구매 주문의 결제 · 진행 상태를 봅니다. "화환 주문 어떻게 됐어", "명함 결제했나" 같은 말에 사용. order_id 를 주면 그 주문 하나, 비우면 최근 10건. 결제 대기 주문은 결제 화면 주소가 같이 와요. 대표 전용. | run_read |
| `shop_order_cancel` | 쓰기 | 2 미리보기 → 확정 | owner (대표) | admin | 아직 결제하지 않은(결제 대기) 업무 구매 주문을 거둡니다. "방금 화환 주문 취소해 줘" 같은 말에 사용. 실행 전에 확인을 받고, 되돌리기는 없어요(다시 주문하면 돼요). 이미 결제한 주문은 shop_order_refund 로 해요. 대표 전용. | run_write |
| `shop_order_refund` | 쓰기 | 3 앱 승인 | owner (대표) | money | 결제한 업무 구매 주문을 전액 취소(환불)합니다. "화환 결제 취소하고 환불해 줘" 같은 말에 사용. 인사책 화면의 [결제 취소]와 같은 규칙이라 제작 · 배송이 시작된 주문 · 맞춤 디자인 · 등록된 도메인 · 시안을 보낸 홈페이지는 취소되지 않아요(고객센터 안내). 돈이 걸린 일이라 인사책 앱에서 대표가 [승인]을 눌러야 해요 — 승인 뒤 같은 인자로 다시 부르면 취소돼요. 대표 전용. | run_write |
| `update_wage_policy` | 쓰기 | 3 앱 승인 | owner (대표) | money | 임금(수당 가산율)·야근 정책을 수정합니다. "연장근로 1.5배, 야간 0.5 가산", "휴일근로 2배로", "야근 시작 시각 19시로", "외근은 승인된 것만 야근 합산" 같은 명령에. 가산율은 한국 노동법 최저 미만이면 거부되고, 변경은 임금감사로그에 5년 보존 기록됩니다. 회사 설정 권한이 있는 사람(대표·회사 관리자·임시 관리자)만. | run_write |
| `query_wage_policy_groups` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 급여 정책 사다리를 봅니다(직원 한 명의 월급·시급 금액은 MCP 로 못 정해요 — 웹 톱니 ⚙ → 설정 → 급여 → 직원별 급여). 어느 급여 형태·사업장·부서·직원이 어떤 가산 배율 정책을 받는지(배정)와 정책 목록(판마다 시작일). "시급 직원은 연장 몇 배야?", "교대 정책 누가 받아?", "급여 설정 가능해?", "직원 월급 정해줘" 같은 말에 사용. 보기만 해요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_read |
| `query_wage_policy_history` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 급여 정책 배정의 변경 기록을 봅니다 — 언제 누가 어느 단에 어떤 정책을 배정했고, 바로 앞 정책은 무엇이었는지(전/후). "급여 정책 누가 바꿨어?" 같은 말에 사용. 보기만 해요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_read |
| `query_payroll_people_alignment` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 직원 한 줄씩 근무 규칙 · 급여 정책 · 급여 형태와 「안 맞음」을 봅니다. 안 맞음 = 근무는 교대인데 급여 정책은 회사 공통 · 시급인데 포괄임금. "교대인데 연장 정책 안 맞는 사람 있어?" 같은 말에 사용. 고치려면 assign_person_policies. 보기만 해요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_read |
| `create_wage_policy_group` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 급여 형태(시급·일급·월급·연봉)·사업장·부서·직원 한 곳에 급여 가산 정책을 배정합니다. 새 정책 값(name 과 배율 등)을 주거나, 있는 정책을 policy_key 로 배정해요(둘을 섞지 않아요). "시급 직원은 연장 2배로", "교대팀 정책 만들어 줘" 같은 말에 사용. scope_ref 는 급여 형태면 hourly\|daily\|monthly\|annual, 그 밖은 사업장·부서·소속 번호. 법정 하한 미만 배율은 거절해요. 회사 공통 한 벌은 update_wage_policy 로 바꿔요. 바꾸면 해당 직원 급여 계산 방식이 달라지므로 인사책 앱에서 승인해야 반영돼요 — 승인 전에는 아무것도 바뀌지 않고, 승인 뒤 같은 인자로 다시 부르면 한 번 실행돼요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_write |
| `new_wage_policy_version` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 있는 급여 정책에 새 판을 그 날부터 씁니다 — 그 정책을 받는 사람 전부가 그 날부터 새 값, 그 전 달은 옛 판 그대로예요. 바꿀 칸만 넘기면 나머지는 지금 판 값 그대로예요. "교대 정책 연장 배율 2.5로 12월부터" 같은 말에 사용. policy_key 는 query_wage_policy_groups 에서 봐요. 법정 하한 미만 배율은 거절해요. 급여 계산 방식이 바뀌므로 인사책 앱에서 승인해야 반영돼요 — 승인 전에는 아무것도 바뀌지 않고, 승인 뒤 같은 인자로 다시 부르면 한 번 실행돼요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_write |
| `close_wage_policy_assignment` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 급여 정책 배정 한 줄을 그 날부터 닫습니다 — 그 날부터는 더 넓은 단(없으면 회사 공통)의 정책을 받아요. "부서 배정 풀어 줘" 같은 말에 사용. assignment_id 는 query_wage_policy_groups 에서 봐요. 급여 계산 방식이 바뀌므로 인사책 앱에서 승인해야 반영돼요 — 승인 전에는 아무것도 바뀌지 않고, 승인 뒤 같은 인자로 다시 부르면 한 번 실행돼요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_write |
| `assign_person_policies` | 쓰기 | 3 앱 승인 | hr_manager (관리자 이상) | money | 직원 여럿에게 있는 급여 정책을 한 번에 배정합니다(전부 되거나 전부 안 돼요). "교대인데 안 맞는 직원들에게 교대 정책 배정해 줘" 같은 말에 사용. affiliation_ids 는 query_payroll_people_alignment 의 affiliation_id, policy_key 는 query_wage_policy_groups 에서 봐요. 대상 직원 이름을 전부 승인 카드에 적어 인사책 앱에서 승인해야 반영돼요 — 승인 전에는 아무것도 바뀌지 않고, 승인 뒤 같은 인자로 다시 부르면 한 번 실행돼요. 근무 규칙 함께 배정은 웹 화면에서 해요. 급여 권한(급여 운영 + 급여 민감정보) 필요. | run_write |
| `create_expense_claim` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 이전 호환용 경비 청구 도구입니다. 새 제출은 결재 스냅샷을 안전하게 만드는 submit_expense 도구를 사용하세요. | run_write |
| `query_my_expense_claims` | 조회 | 0 바로 조회 | employee (직원) | view | 본인 경비 청구 목록. "내 경비 정산 어떻게 됐어?", "이번달 경비 신청" 같은 질문에 사용. | run_read |
| `submit_expense` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 경비(지출결의)를 제출합니다. 사용자가 영수증 사진을 보여주면 사진에서 금액·날짜·사용처·품목을 직접 읽어 items 배열로 정리해 이 도구로 제출하세요 (영수증 여러 장이면 items 여러 개). 이미지는 저장되지 않고 텍스트만 기록됩니다. "이 영수증 경비 처리해줘", "어제 회식비 8만원 올려줘" 같은 명령에 사용. | run_write |
| `query_my_expenses` | 조회 | 0 바로 조회 | employee (직원) | view | 내가 제출한 경비(지출결의) 내역과 승인 상태를 조회합니다. "내 경비 처리됐어?", "이번달 경비 얼마 올렸지?" 같은 질문에 사용. | run_read |
| `query_expense_summary` | 조회 | 0 바로 조회 | owner (대표) | view | 경비 청구 요약을 조회합니다. 월별 / 카테고리별. "이번달 경비 합계", "광고비 얼마 썼지?" 같은 질문에 사용하세요. | run_read |
| `query_company_expense_total` | 조회 | 0 바로 조회 | owner (대표) | view | 회사 전체 경비 청구 총액 (기간/상태별). "이번달 경비 얼마 청구됐어?", "이번주 결재된 경비" 같은 질문에 사용하세요. 대표관리자 전용. | run_read |
| `query_corporate_cards` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 법인 카드 목록. "법인카드 뭐 있어?" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `register_corporate_card` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 법인 카드를 등록합니다. "신한카드 끝자리 5678 영업팀카드 등록" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `log_card_usage` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 법인카드 사용내역을 기록합니다. "법인카드 2번 스타벅스 12000원", "어제 거래처 점심 5만원 카드" 같은 명령에 사용. 누적 사용액이 자동 합산됩니다. | run_write |
| `query_card_usages` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 법인카드 사용내역 조회 (카드 지정 또는 최근). "법인카드 2번 사용내역", "이번달 법인카드 지출" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `record_insurance_event` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 4대보험 취득/상실/변경 신고를 기록합니다. "이주영 입사 4대보험 취득", "박철수 퇴사 자격상실 신고" 같은 명령에 사용. 일용직 반복 입퇴사·산재 가입 추적. 인사 권한 필요. | run_write |
| `query_insurance_events` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 4대보험 신고 이력 조회. "이번달 자격취득 신고 누구?", "이주영 4대보험 이력" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `query_insurance_status` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 전 직원 4대보험 가입 현황(국민연금/건강/고용/산재). "4대보험 미가입자 있어?", "보험 가입 현황" 같은 질문에 사용. 인사 권한 필요. | run_read |

도구마다 따로 읽는 문서: [query_my_payslip](https://insacheck.com/docs/mcp/tools/query_my_payslip.md) · [payslip_my](https://insacheck.com/docs/mcp/tools/payslip_my.md) · [query_payslips](https://insacheck.com/docs/mcp/tools/query_payslips.md) · [query_company_payroll_total](https://insacheck.com/docs/mcp/tools/query_company_payroll_total.md) · [export_payroll_csv](https://insacheck.com/docs/mcp/tools/export_payroll_csv.md) · [estimate_pay](https://insacheck.com/docs/mcp/tools/estimate_pay.md) · [generate_wage_ledger](https://insacheck.com/docs/mcp/tools/generate_wage_ledger.md) · [generate_payslip](https://insacheck.com/docs/mcp/tools/generate_payslip.md) · [finalize_payslip](https://insacheck.com/docs/mcp/tools/finalize_payslip.md) · [bulk_generate_payslips](https://insacheck.com/docs/mcp/tools/bulk_generate_payslips.md) · [wreath_order](https://insacheck.com/docs/mcp/tools/wreath_order.md) · [business_card_order](https://insacheck.com/docs/mcp/tools/business_card_order.md) · [shop_products](https://insacheck.com/docs/mcp/tools/shop_products.md) · [shop_order_status](https://insacheck.com/docs/mcp/tools/shop_order_status.md) · [shop_order_cancel](https://insacheck.com/docs/mcp/tools/shop_order_cancel.md) · [shop_order_refund](https://insacheck.com/docs/mcp/tools/shop_order_refund.md) · [update_wage_policy](https://insacheck.com/docs/mcp/tools/update_wage_policy.md) · [query_wage_policy_groups](https://insacheck.com/docs/mcp/tools/query_wage_policy_groups.md) · [query_wage_policy_history](https://insacheck.com/docs/mcp/tools/query_wage_policy_history.md) · [query_payroll_people_alignment](https://insacheck.com/docs/mcp/tools/query_payroll_people_alignment.md) · [create_wage_policy_group](https://insacheck.com/docs/mcp/tools/create_wage_policy_group.md) · [new_wage_policy_version](https://insacheck.com/docs/mcp/tools/new_wage_policy_version.md) · [close_wage_policy_assignment](https://insacheck.com/docs/mcp/tools/close_wage_policy_assignment.md) · [assign_person_policies](https://insacheck.com/docs/mcp/tools/assign_person_policies.md) · [create_expense_claim](https://insacheck.com/docs/mcp/tools/create_expense_claim.md) · [query_my_expense_claims](https://insacheck.com/docs/mcp/tools/query_my_expense_claims.md) · [submit_expense](https://insacheck.com/docs/mcp/tools/submit_expense.md) · [query_my_expenses](https://insacheck.com/docs/mcp/tools/query_my_expenses.md) · [query_expense_summary](https://insacheck.com/docs/mcp/tools/query_expense_summary.md) · [query_company_expense_total](https://insacheck.com/docs/mcp/tools/query_company_expense_total.md) · [query_corporate_cards](https://insacheck.com/docs/mcp/tools/query_corporate_cards.md) · [register_corporate_card](https://insacheck.com/docs/mcp/tools/register_corporate_card.md) · [log_card_usage](https://insacheck.com/docs/mcp/tools/log_card_usage.md) · [query_card_usages](https://insacheck.com/docs/mcp/tools/query_card_usages.md) · [record_insurance_event](https://insacheck.com/docs/mcp/tools/record_insurance_event.md) · [query_insurance_events](https://insacheck.com/docs/mcp/tools/query_insurance_events.md) · [query_insurance_status](https://insacheck.com/docs/mcp/tools/query_insurance_status.md)

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

### PAY-01 영수증을 보고 경비를 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「어제 회식비 8만원 경비로 올려줘」 「이 영수증 경비 처리해 줘」 「택시비 1만2천원 경비 청구할게요」 「경비 신청해 줘」

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

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"submit_expense","args":{"title":"10월 영업 경비","items":[{"amount":80000,"date":"2026-10-20","vendor":"한가상식당","description":"팀 회식","category":"식대","payment_method":"card_personal"}]}}}
     서버: 몸통 src/routes/mcp-tools/expense.ts:submitMcpExpense · 함수 src/lib/approval-expense-route.ts:createExpenseClaimWithAtomicApproval · 웹 API POST /api/worker/expense {amount, expense_date, description, payment_method, vendor}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"submit_expense","args":{"title":"10월 영업 경비","items":[{"amount":80000,"date":"2026-10-20","vendor":"한가상식당","description":"팀 회식","category":"식대","payment_method":"card_personal"}]},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/expense.ts:submitMcpExpense · 함수 src/lib/approval-expense-route.ts:createExpenseClaimWithAtomicApproval · 웹 API POST /api/worker/expense {amount, expense_date, description, payment_method, vendor}
     다음으로 넘길 값: 경비 번호 · 결재 상태
```

- 필요한 값 · 되묻기: 금액은 꼭 필요해요. / 날짜가 없으면 오늘로 올려요. / 영수증이 여러 장이면 항목을 나눠 올려요.
- 끝: 경비 결의가 올라가고 결재가 시작돼요.
- 화면: 요청 → 신규 신청 → 경비처리 (/worker/expense)
- 하면 안 되는 것: 확인 없이 제출하지 않아요. / 영수증 사진은 서버에 저장하지 않아요.

### PAY-02 야근 시작 시각과 저녁 휴게를 바꿔요.
- 누가: 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「야근은 17시 40분부터 잡아줘」 「저녁 휴게시간을 30분으로 바꿔줘」 「연장근로 시작 시각 정리해 줘」 「휴게 차감 분을 줄여 주세요」

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

```text
  (값이 없으면 먼저 물어요: 「연장 시작 시각이나 휴게 분을 알려 주세요.」)
  1. tools/call {"name":"run_write","arguments":{"tool":"update_wage_policy","args":{"overtime_start_clock":"17:40","dinner_break_minutes":30,"reason":"소정근로 시각에 맞춰 정리"}}}
     서버: 몸통 src/routes/mcp-tools/enterprise-settings.ts:update_wage_policy · 함수 src/lib/audit.ts:logWageAudit · 웹 API PATCH /api/leave/policies/:eid {overtime_start_clock, dinner_break_minutes}
     다음으로 넘길 값: 바뀐 칸
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 바꿀 값을 하나 이상 알려 줘야 해요. / 법정 최저 가산율보다 낮으면 거절돼요. / 앱에서 대표가 승인해야 바뀌어요.
- 끝: 회사 공통 야근 기준이 바뀌고 변경 기록이 남아요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 승인 전에는 아무것도 바꾸지 않아요. / 이미 확정한 달 명세서는 건드리지 않아요.

### PAY-03 법인카드 사용 내역을 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 법인카드 쓴 내역 보여줘」 「법인카드 2번 사용내역 알려줘」 「카드로 얼마 썼는지 확인해 줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_card_usages","args":{"limit":20}}}
     서버: 몸통 src/routes/mcp-tools/assets.ts:query_card_usages
     다음으로 넘길 값: 사용 건수 · 합계
```

- 필요한 값 · 되묻기: 카드를 말하지 않으면 최근 내역을 보여요. / 반려된 건은 목록에 보이고 합계에는 빠져요.
- 끝: 카드별 사용 내역과 합계를 보여 줘요.
- 화면: 경비·자산 → 법인카드 사용내역 (/admin/enterprise/cards/usages)
- 하면 안 되는 것: 카드 번호 전체를 묻거나 말하지 않아요.

### PAY-04 내 급여명세서를 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 월급 얼마야?」 「급여명세서 보여 줘」 「9월 명세서 확인할게요」 「실수령 얼마예요?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"payslip_my","args":{"pay_period":"latest"}}}
     서버: 몸통 src/routes/mcp-tools/m4-certs.ts:payslipMy · 함수 src/lib/payslip-worker-visibility.ts:isWorkerVisiblePayslipStatus · 웹 API GET /api/workers/me/payslips
     다음으로 넘길 값: 급여월 · 실수령액
```

- 필요한 값 · 되묻기: 월 말이 없으면 가장 최근 확정본을 봐요. / 확정된 명세서만 보여요.
- 끝: 확정된 급여명세서의 금액과 항목을 보여 줘요.
- 화면: 내 업무 → 내 정보 → 급여명세서 (/worker/payslips)
- 하면 안 되는 것: 다른 사람 명세서는 이 흐름으로 보지 않아요. / 작성 중인 명세서는 보여 주지 않아요.

### PAY-05 급여 정책이 누구에게 걸렸는지 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「시급 직원은 연장 몇 배야?」 「교대 정책은 누가 받아?」 「직원마다 급여 정책이 다른지 보여줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_wage_policy_groups","args":{}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:queryGroups · 함수 src/lib/wage-policy-write.ts:wagePolicyRowsPage · 웹 API GET /api/admin/payroll/wage-policy-groups
     다음으로 넘길 값: 정책 이름 · 정책 키 · 배정 번호
```

- 필요한 값 · 되묻기: 급여 운영과 급여 정보 권한이 모두 있어야 해요. / 배정이 없으면 모두 회사 공통 정책을 받아요.
- 끝: 급여 정책 배정과 정책 목록을 보여 줘요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 이 흐름으로 정책을 바꾸지 않아요.

### PAY-06 새 급여 정책을 만들어 직원 여럿에게 붙여요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「교대 직원들에게 연장 2배 정책 붙여줘」 「직원마다 다른 급여 정책을 정해 줘」 「정책 하나 만들어서 세 명에게 배정해 줘」

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

```text
  1. tools/call {"name":"run_write","arguments":{"tool":"create_wage_policy_group","args":{"scope_type":"affiliation","scope_ref":"9714","name":"교대 근무 정책","overtime_rate":2}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:createGroup · 함수 src/lib/wage-policy-write.ts:writeWagePolicyGroup · 웹 API POST /api/admin/payroll/wage-policy-groups {scope_type, scope_ref, name, overtime_rate}
     다음으로 넘길 값: 정책 키
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
  (값이 없으면 먼저 물어요: 「나머지 직원은 누구예요?」)
  2. tools/call {"name":"run_write","arguments":{"tool":"assign_person_policies","args":{"affiliation_ids":[9715,9716]}}}
     넘겨받는 값: 1.policy_key → policy_key
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:assignPeople · 함수 src/lib/wage-policy-write.ts:wagePolicyGroupStatements · 웹 API POST /api/admin/payroll/settings/people/:affiliationId/assign {policy_key, effective_from}
     다음으로 넘길 값: 배정 인원
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 정책 이름과 배율을 알려 줘야 해요. / 적용일이 없으면 다음 달 1일부터예요. / 두 번 다 앱에서 승인해야 해요.
- 끝: 새 정책이 만들어지고 고른 직원들에게 붙어요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 법정 최저 배율보다 낮은 값은 받지 않아요. / 이번 달 급여는 바꾸지 않아요.

### PAY-07 급여명세서를 만들고 확정해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「이번 달 급여명세서 만들어 줘」 「9월 명세서 확정해 줘」 「급여 일괄 계산해 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 명세서 만들기와 확정은 연결에서 막아 뒀어요.
- 끝: 급여 화면에서 계산하고 확정하는 길을 안내해요.
- 화면: 운영 → 급여 명세서 (/admin/enterprise/payroll)
- 하면 안 되는 것: AI 로 명세서를 만들거나 확정하지 않아요. / 급여 지급 처리는 하지 않아요.

### PAY-08 내 경비가 어디까지 처리됐는지 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「내 경비 처리됐어?」 「이번 달 경비 얼마 올렸지?」 「경비 승인 상태 알려줘」 「올린 경비 결과 확인할게요」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_my_expenses","args":{"status":"all","month":"2026-10"}}}
     서버: 몸통 src/routes/mcp-tools/expense.ts:query_my_expenses · 웹 API GET /api/worker/expense
     다음으로 넘길 값: 상태 · 합계
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 모두 보여요. / 상태를 말하면 그 상태만 골라요.
- 끝: 내가 올린 경비와 승인 상태를 보여 줘요.
- 화면: 요청 → 신규 신청 → 경비처리 (/worker/expense)
- 하면 안 되는 것: 다른 사람 경비는 이 흐름으로 보지 않아요.

### PAY-09 회사 법인카드 목록을 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「법인카드 뭐 있어?」 「등록된 카드 목록 보여줘」 「카드별 누적 사용액 알려줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_corporate_cards","args":{}}}
     서버: 몸통 src/routes/mcp-tools/assets.ts:query_corporate_cards · 웹 API GET /api/worker/corporate-cards
     다음으로 넘길 값: 카드 번호 · 카드 별칭
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요. / 카드 번호는 뒷자리만 보여요.
- 끝: 법인카드 목록과 카드별 누적 사용액을 보여 줘요.
- 화면: 통장·카드 → 법인카드 (/admin/enterprise/cards)
- 하면 안 되는 것: 카드를 새로 등록하지 않아요.

### PAY-10 법인카드로 쓴 돈을 기록해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「법인카드 2번으로 스타벅스 12000원 썼어」 「어제 거래처 점심 5만원 카드로 기록해줘」 「카드 사용한 거 남겨 줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_corporate_cards","args":{}}}
     서버: 몸통 src/routes/mcp-tools/assets.ts:query_corporate_cards · 웹 API GET /api/worker/corporate-cards
     다음으로 넘길 값: 카드 번호
  (값이 없으면 먼저 물어요: 「어느 카드로 쓰셨어요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"log_card_usage","args":{"amount":12000,"merchant_name":"한가상커피","used_at":"2026-10-20","category":"식대"}}}
     넘겨받는 값: 1.cards.0.card_id → card_id
     서버: 몸통 src/routes/mcp-tools/assets.ts:log_card_usage · 웹 API POST /api/worker/card-usage {card_id, amount, merchant_name, used_at, category, description}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"log_card_usage","args":{"amount":12000,"merchant_name":"한가상커피","used_at":"2026-10-20","category":"식대"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.cards.0.card_id → card_id · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/assets.ts:log_card_usage · 웹 API POST /api/worker/card-usage {card_id, amount, merchant_name, used_at, category, description}
     다음으로 넘길 값: 사용 기록 번호
```

- 필요한 값 · 되묻기: 카드가 여럿이면 어느 카드인지 물어요. / 금액과 가게 이름은 꼭 필요해요.
- 끝: 법인카드 사용 내역이 한 줄 생겨요.
- 화면: 통장·카드 → 법인카드 (/admin/enterprise/cards)
- 하면 안 되는 것: 확인 없이 기록하지 않아요. / 카드 번호 전체를 받지 않아요.

### PAY-11 회사 연장·야간 수당 총액을 봐요.
- 누가: 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 주 야근수당 얼마야?」 「이번 달 야간근로 수당 알려줘」 「연장근로 시간이랑 수당 합계 보여줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_company_overtime_cost","args":{"start_date":"2026-10-01","end_date":"2026-10-21","hourly_rate":12000}}}
     서버: 몸통 src/routes/mcp-tool-handlers.ts:query_company_overtime_cost
     다음으로 넘길 값: 연장 시간 · 추정 수당
```

- 필요한 값 · 되묻기: 기간이 없으면 시작일과 끝일을 물어요. / 시간당 임금을 말하지 않으면 기본값으로 계산해요.
- 끝: 기간 안의 연장·야간 시간과 추정 수당을 보여 줘요.
- 화면: 급여 → 수당·근태 확정 (/admin/enterprise/payroll-overtime)
- 하면 안 되는 것: 추정 수당을 확정 급여로 말하지 않아요.

### PAY-12 올라온 경비를 승인해요.
- 누가: 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「이 경비 승인해 줘」 「올라온 경비 결재해 줘」 「경비 승인 처리 부탁해」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 승인과 반려는 연결에서 막아 뒀어요.
- 끝: 결재함에서 경비 건을 처리하는 길을 안내해요.
- 화면: 결재함 (/admin/enterprise/approval-inbox)
- 하면 안 되는 것: AI 로 경비를 승인하거나 반려하지 않아요.

### PAY-13 법인카드를 새로 등록해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「법인카드 하나 등록해 줘」 「새 카드 추가하고 싶어」 「회사 카드 등록할게요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 카드 정보는 AI 에게 보내지 않아요.
- 끝: 법인카드 화면에서 등록하는 길을 안내해요.
- 화면: 통장·카드 → 법인카드 (/admin/enterprise/cards)
- 하면 안 되는 것: 카드 번호를 AI 에게 알려 주지 않아요.

### PAY-14 부서에 급여 정책을 새로 붙여요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업1팀은 연장 2배로 해줘」 「교대팀 정책 만들어 줘」 「영업부에만 야근 배율을 높여 주세요」

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

```text
  (값이 없으면 먼저 물어요: 「어느 부서에 붙일까요?」)
  1. tools/call {"name":"run_write","arguments":{"tool":"create_wage_policy_group","args":{"scope_type":"department","scope_ref":"9613","name":"영업1팀 정책","overtime_rate":2}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:createGroup · 함수 src/lib/wage-policy-write.ts:writeWagePolicyGroup · 웹 API POST /api/admin/payroll/wage-policy-groups {scope_type, scope_ref, name, overtime_rate}
     다음으로 넘길 값: 정책 키
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 부서나 사업장 번호는 정책 보기에서 찾아요. / 적용일이 없으면 다음 달 1일부터예요. / 앱에서 승인해야 바뀌어요.
- 끝: 새 정책이 만들어지고 그 부서에 붙어요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 법정 최저 배율보다 낮은 값은 받지 않아요. / 이번 달 급여는 바꾸지 않아요.

### PAY-15 이번 달 급여명세서 현황을 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「9월 급여명세서 현황 알려줘」 「확정 안 된 명세서 있어?」 「명세서 몇 명 나왔어요?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_payslips","args":{"pay_period":"2026-09","status":"all"}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:query_payslips · 웹 API GET /api/admin/payslips
     다음으로 넘길 값: 명세서 건수 · 상태
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 이번 달을 봐요. / 상태를 말하면 그 상태만 골라요.
- 끝: 직원별 명세서 상태 목록을 보여 줘요.
- 화면: 운영 → 급여 명세서 (/admin/enterprise/payroll)
- 하면 안 되는 것: 명세서를 새로 만들지 않아요.

### PAY-16 한 직원의 월급을 미리 계산해 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「김가상 이번 달 급여 얼마야?」 「이가상 9월 야근수당 계산해 줘」 「박가상 월급 미리 보여줘」

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

```text
  (값이 없으면 먼저 물어요: 「누구 급여를 볼까요?」)
  1. tools/call {"name":"run_read","arguments":{"tool":"estimate_pay","args":{"worker":"김가상","month":"2026-09"}}}
     서버: 몸통 src/routes/mcp-tools/payroll-calc.ts:estimate_pay · 함수 src/lib/payroll-estimate-canonical.ts:estimateWorkerPayFromLedger
     다음으로 넘길 값: 추정 실수령액 · 확인할 점
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구예요?」 → 고른 id 로 같은 줄을 다시
```

- 필요한 값 · 되묻기: 직원 이름이 꼭 필요해요. / 급여 설정이 비어 있으면 계산 전에 확인할 점을 알려 줘요.
- 끝: 그 달 추정 급여와 항목을 보여 줘요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 미리 계산한 값을 저장하지 않아요. / 추정액을 확정 급여로 말하지 않아요.

### PAY-17 급여대장을 파일로 받아요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 급여 다운로드해 줘」 「급여대장 엑셀로 줘」 「9월 급여 파일 받을래요」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"export_payroll_csv","args":{"pay_period":"2026-09"}}}
     서버: 몸통 src/routes/mcp-tools/export.ts:export_payroll_csv · 웹 API GET /api/admin/payroll-export/:token
     다음으로 넘길 값: 내려받기 주소 · 만료 시각
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 이번 달이에요. / 받기 주소는 5분 안에 한 번만 써요.
- 끝: 5분 동안 한 번 쓰는 내려받기 주소를 줘요.
- 화면: 운영 → 급여 명세서 (/admin/enterprise/payroll)
- 하면 안 되는 것: 파일 내용을 대화에 그대로 붙이지 않아요.

### PAY-18 임금대장을 뽑아요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「지난달 임금대장 뽑아줘」 「2026-09 임금대장 보여 줘」 「법정 임금대장 만들어 주세요」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"generate_wage_ledger","args":{"month":"2026-09"}}}
     서버: 몸통 src/routes/mcp-tools/insurance.ts:generate_wage_ledger
     다음으로 넘길 값: 직원별 실수령액
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 지난달이에요.
- 끝: 직원별 기본급, 수당, 공제, 실수령을 보여 줘요.
- 화면: 급여 → 4대보험 (/admin/enterprise/insurance)
- 하면 안 되는 것: 임금대장을 저장하거나 보내지 않아요.

### PAY-19 회사 인건비 합계를 봐요.
- 누가: 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 인건비 총합 얼마야?」 「9월 급여 총액 알려줘」 「인건비 얼마 나가?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_company_payroll_total","args":{"pay_period":"2026-09"}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:query_company_payroll_total
     다음으로 넘길 값: 세전 총액 · 실지급 총액
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 이번 달이에요.
- 끝: 그 달 세전 총액과 실지급 총액을 보여 줘요.
- 화면: 운영 → 급여 명세서 (/admin/enterprise/payroll)
- 하면 안 되는 것: 직원 한 사람의 금액을 이 흐름으로 말하지 않아요.

### PAY-20 급여 정책을 누가 바꿨는지 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「급여 정책 누가 바꿨어?」 「정책 변경 기록 보여줘」 「배정이 언제 바뀌었는지 알려 주세요」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_wage_policy_history","args":{"limit":50}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:queryHistory · 함수 src/lib/wage-policy-write.ts:wagePolicyRowsPage · 웹 API GET /api/admin/payroll/wage-policy-groups/history
     다음으로 넘길 값: 바꾼 사람 · 바뀐 시각
```

- 필요한 값 · 되묻기: 정책을 말하면 그 정책 기록만 봐요. / 급여 운영과 급여 정보 권한이 모두 있어야 해요.
- 끝: 정책 배정이 바뀐 기록을 앞뒤 정책과 함께 보여 줘요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 기록을 고치거나 지우지 않아요.

### PAY-21 근무 규칙과 안 맞는 급여 정책을 찾아요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「교대인데 연장 정책 안 맞는 사람 있어?」 「급여 정책이 안 맞는 직원 찾아줘」 「근무 규칙이랑 급여가 다른 사람 보여줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_payroll_people_alignment","args":{"only_mismatch":true,"limit":50}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:queryAlignment · 함수 src/lib/payroll-person-settings.ts:loadPayrollPersonSettings · 웹 API GET /api/admin/payroll/settings/people
     다음으로 넘길 값: 안 맞는 직원 · 소속 번호
```

- 필요한 값 · 되묻기: 기준일이 없으면 오늘이에요. / 고치려면 정책 배정 흐름을 이어서 해요.
- 끝: 안 맞는 직원 명단과 이유를 보여 줘요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 이 흐름으로 정책을 바꾸지 않아요.

### PAY-22 급여 정책의 값을 다음 달부터 바꿔요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「교대 정책 연장 배율 2.5로 12월부터 바꿔줘」 「정책 값을 새로 올려 줘」 「급여 정책 새 판을 만들어 줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_wage_policy_groups","args":{}}}
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:queryGroups · 함수 src/lib/wage-policy-write.ts:wagePolicyRowsPage · 웹 API GET /api/admin/payroll/wage-policy-groups
     다음으로 넘길 값: 정책 키
  (값이 없으면 먼저 물어요: 「어느 정책을 바꿀까요?」)
  2. tools/call {"name":"run_write","arguments":{"tool":"new_wage_policy_version","args":{"overtime_rate":2.5,"effective_from":"2026-12-01"}}}
     넘겨받는 값: 1.policies.0.policy_key → policy_key
     서버: 몸통 src/routes/mcp-tools/m5b-wage-policy.ts:newVersion · 함수 src/lib/wage-policy-write.ts:writeWagePolicyVersion · 웹 API POST /api/admin/payroll/wage-policy-groups/policies/:policyKey/versions {overtime_rate, effective_from}
     다음으로 넘길 값: 적용일 · 영향 인원
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 바꿀 칸만 알려 주면 나머지는 그대로예요. / 적용일이 없으면 다음 달 1일부터예요. / 앱에서 승인해야 바뀌어요.
- 끝: 정책 새 판이 정한 날부터 쓰여요.
- 화면: 급여 기준 → 직원별 급여 (/admin/enterprise/payroll-terms)
- 하면 안 되는 것: 법정 최저 배율보다 낮은 값은 받지 않아요. / 지난 달 급여는 바꾸지 않아요.

### PAY-23 이번 달 경비 합계를 항목별로 봐요.
- 누가: 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 경비 합계 알려줘」 「광고비 얼마 썼지?」 「경비 항목별로 보여 줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_expense_summary","args":{"month":"2026-10"}}}
     서버: 몸통 src/routes/mcp-tool-handlers.ts:query_expense_summary
     다음으로 넘길 값: 월 합계 · 항목별 합계
```

- 필요한 값 · 되묻기: 달을 말하지 않으면 이번 달이에요.
- 끝: 그 달 경비 합계와 항목별 금액을 보여 줘요.
- 화면: 운영 → 경비 마감 (/admin/enterprise/expense/confirm)
- 하면 안 되는 것: 경비를 승인하거나 반려하지 않아요.

### PAY-24 기간 안에 올라온 경비 총액을 봐요.
- 누가: 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 달 경비 얼마 청구됐어?」 「이번 주 결재된 경비 알려줘」 「10월 경비 총액 보여줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_company_expense_total","args":{"start_date":"2026-10-01","end_date":"2026-10-21"}}}
     서버: 몸통 src/routes/mcp-tool-handlers.ts:query_company_expense_total
     다음으로 넘길 값: 청구 건수 · 총액
```

- 필요한 값 · 되묻기: 시작일과 끝일이 필요해요. / 기간이 없으면 이번 달로 물어요.
- 끝: 기간 안의 경비 청구 총액을 보여 줘요.
- 화면: 운영 → 경비 마감 (/admin/enterprise/expense/confirm)
- 하면 안 되는 것: 직원 한 사람의 경비를 이 흐름으로 보지 않아요.

### PAY-25 4대보험 가입 현황을 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「4대보험 미가입자 있어?」 「보험 가입 현황 보여줘」 「국민연금 가입 안 된 사람 알려줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_insurance_status","args":{}}}
     서버: 몸통 src/routes/mcp-tools/insurance.ts:query_insurance_status
     다음으로 넘길 값: 미가입 직원
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요.
- 끝: 직원별 4대보험 가입 현황을 보여 줘요.
- 화면: 급여 → 4대보험 (/admin/enterprise/insurance)
- 하면 안 되는 것: 가입이나 상실 신고를 대신 하지 않아요.

### PAY-26 빈소나 예식장에 회사 화환을 보내요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「거래처 빈소에 근조화환 보내 줘」 「김가상 결혼식에 축하화환 보내 줘」 「근조바구니 하나 주문해 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 대부분 회사는 화면에서 해요. / 시범 회사 대표는 AI 로도 화환을 주문해요 · 앱 승인 뒤. / 업무 지원을 쓰는 회사에서만 보여요. / 대표와 전체 관리자만 주문해요.
- 끝: 화환 주문 화면으로 가는 길을 알려 줘요.
- 화면: 톱니바퀴 → 업무 지원 → 화환 보내기 (/admin/enterprise/shop/new/wreath)
- 하면 안 되는 것: AI 가 대신 결제하지 않아요. / 경조금 신청과 같은 일이 아니에요.

### PAY-27 직원 명함을 주문해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「정신입 명함 100장 주문해 줘」 「새로 온 직원 명함 만들어 줘」 「명함 다시 찍어 줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 대부분 회사는 화면에서 해요. / 시범 회사 대표는 AI 로도 명함을 주문해요 · 앱 승인 뒤. / 업무 지원을 쓰는 회사에서만 보여요. / 대표와 전체 관리자만 주문해요.
- 끝: 명함 주문 화면으로 가는 길을 알려 줘요.
- 화면: 톱니바퀴 → 업무 지원 → 명함 제작 (/admin/enterprise/shop/new/business-card)
- 하면 안 되는 것: AI 가 대신 결제하지 않아요.

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

- SET-18 연장근무 시작 시각과 저녁 휴게를 정해요. → https://insacheck.com/docs/mcp/company.md
- MULTI-21 경비를 올리고 처리 상태를 바로 봐요. → https://insacheck.com/docs/mcp/multi.md

## 안 되는 것 · 대안

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

- 급여명세서를 만들고 확정해요. → 운영 → 급여 명세서 (/admin/enterprise/payroll)
- 올라온 경비를 승인해요. → 결재함 (/admin/enterprise/approval-inbox)
- 법인카드를 새로 등록해요. → 통장·카드 → 법인카드 (/admin/enterprise/cards)
- 빈소나 예식장에 회사 화환을 보내요. → 톱니바퀴 → 업무 지원 → 화환 보내기 (/admin/enterprise/shop/new/wreath)
- 직원 명함을 주문해요. → 톱니바퀴 → 업무 지원 → 명함 제작 (/admin/enterprise/shop/new/business-card)
