법인세-통합고용 · diff
git:20261019.b4e6045 to git:20261020.3d819c1
4 added, 1 removed. Audit A to A.
---
name: 법인세-통합고용
description: 월별 급여대장과 사원명부로 통합고용세액공제(조세특례제한법 제29조의8)의 상시근로자 수를 사람별 · 달별로 세고, 단계별 검증 시트와 법정 서식(조특 별지 제10호의9서식 공제세액계산서 · 제10호의10서식 상시근로자 명세서)을 엑셀 수식으로 채운 워크북을 만든다. 엔진이 같은 값을 따로 계산해 수식 값과 대조한다. "통합고용세액공제", "통합고용", "상시근로자 수", "청년등 상시근로자", "고용 세액공제 계산", "조특 10호의9", "10호의10", "상시근로자 명세서", "급여대장으로 고용 공제", "고용 증가 인원", "청년 간주"가 나오거나 급여대장과 사원명부로 고용 공제를 계산해야 할 때 쓴다. 2025 과세연도까지 계산하고, 2026 과세연도의 기존공제 · 신규공제도 계산하고 서식(2)와 종전 서식(1)을 채운다.
---
# 법인세-통합고용
계산은 엔진과 엑셀 수식이 한다. AI 가 하는 일은 받은 급여 자료를 입력 양식으로 옮기는 것과, 엔진이 낸 확인 줄을 회계사에게 전하는 것이다. 인원 · 금액을 손으로 만들지 않는다. 결과는 검토용이고 신고 전 최종 판단은 세무 전문가가 한다.
- 기준과 조문: `scripts/ctax/employ/rules.yaml`(실행은 같은 내용의 `rules.json` 을 읽는다), 1인당 공제금액은 `scripts/ctax/wp/rates_2025/credits.yaml` 의 `employment_integrated`
- 판단 · 예외: 아래 「판단이 들어간 곳」 · 「예외 기록」. 사용자용 설명은 [README.md](README.md)
- 다루는 범위: 2025년 12월 31일이 속하는 과세연도까지(서식(1)). 2026 과세연도부터는 서식(2)와 새 산식이고 공제가 기존공제와 신규공제 둘로 나뉜다(아래 「2026 과세연도부터」). 엔진은 두 공제를 모두 계산하고, 서식 시트는 2026 과세연도에 별지 제10호의9서식(2)(신규공제 · 추가공제)로, 기존공제 2 · 3차 연도는 종전 서식(1)(6-1 시트)로 그린다. 2023 과세연도(통합고용세액공제가 생긴 해)부터 2027 과세연도까지 계산한다. 2022 과세연도 이전은 고용증대 · 사회보험료 세액공제라 계산하지 않고 알린다. 2028 과세연도부터는 신규공제 C(전전전 대비)에 2025 과세연도 인원이 필요한데 워크북이 직전전까지만 세어 멈춘다.
## 돌리는 법
이 스킬 폴더의 `scripts/` 에서 `PYTHONUTF8=1 python -m ctax employ "<회사>/<연도> 법인세" [옵션]` 을 돌린다. 사용자는 파이썬을 치지 않고 파일을 주고 말로 시킨다.
| 사용자 | Claude |
|---|---|
| 「샘플로 통합고용세액공제 돌려 줘」 | 작업 폴더에 `샘플회사/2025 법인세` 를 잡고 `--sample` 로 입력을 만든 뒤 옵션 없이 한 번 더 돌린다. 결과 워크북을 파일로 준다 |
| 「2026 과세연도 샘플로 돌려 줘」 | 작업 폴더에 `샘플회사/2026 법인세` 를 잡고 `--sample --sample-year 2026` 으로 입력을 만든 뒤 옵션 없이 한 번 더 돌린다. 기대값은 세액공제액 78,180,000원(2차 37,500,000 · 3차 14,500,000 · 신규 13,180,000 · 추가 13,000,000), 해당 13.31명(청년등 8.73), 직전 11.32명(청년등 6.99) |
| 입력 엑셀(`통합고용_입력.xlsx` 꼴: 시트 회사 · 사원명부 · 급여대장)을 붙이고 「계산해 줘」 | 작업 폴더에 `<회사>/<연도> 법인세` 를 잡고 `--input "<붙인 파일>"` 로 돌린다 |
| 급여대장 · 인사 자료 원본만 붙임 | `--template` 으로 빈 양식을 만들고 아래 「순서」 2번대로 옮긴 뒤 돌린다. 빠진 필수 열은 한 번에 묻는다 |
| 「빈 양식 줘」 | `--template` 으로 만든 `통합고용_입력.xlsx` 를 파일로 준다 |
엑셀이 없는 환경(맥, 리눅스, Claude 앱 실행 환경)에서는 엔진이 「엑셀 재계산을 하지 않았습니다」 를 낸다. 정상이다. 이때는 화면의 세액공제액 · 인원(엔진 값)과 확인 줄을 전하고, 결과 워크북을 엑셀로 열면 수식이 계산되어 「목록」 시트에 검산 11개와 엔진 대조가 나온다고 알려 준다. 결과 파일은 `<신고 건 폴더>/2 조서/통합고용_검증.xlsx` 이고 반드시 사용자에게 파일로 준다.
## 원천 데이터 정의
입력은 `<회사>/<연도> 법인세/00 받은자료/급여/통합고용_입력.xlsx` 한 파일, 시트 셋이다. 빈 양식은 `--template` 이 만들고 「정의」 시트에 열 설명이 있다.
| 시트 | 줄 | 필수 열 | 선택 열 |
|---|---|---|---|
| 사원명부 | 한 사람 한 줄(재입사는 따로) | 사번 · 성명 · 생년월일 · 입사일 · 고용형태(정규직 · 기간제 · 단시간 · 파견) | 퇴사일, 내국인, 계약 1년 미만, 월 소정근로시간, 0.75 요건, 임원, 최대주주·친족, 기타 제외, 입대일, 전역일, 장애인 등, 경력단절, 북한이탈주민, 수도권 근무지, 정규직 전환자, 육아휴직 복귀자, 비고 |
| 급여대장 | 한 사람 한 달 한 줄 | 귀속연월 · 사번 · 지급액 | 성명, 소득세, 국민연금, 건강보험 |
| 회사 | 항목 · 값 | 기업 구분, 증가 지역 수도권 | 과세연도, 소비성서비스업, 창업, 청년 간주 적용, 전기 1차년도 공제액(직전 · 직전전), 전기 신고 인원, 육아휴직 복귀자 수 |
1. **급여대장 해당 과세연도와 직전 과세연도 열두 달씩.** 직전전 과세연도 증가분의 3차 연도 공제가 남아 있으면 직전전도 받는다. 직전 급여대장이 없으면 전기 신고서의 인원을 회사 시트에 넣는다.
2. **입사일 · 퇴사일 · 생년월일이 있는 사원명부.** 퇴사자를 포함해야 한다. 급여대장에 입사일이 찍혀 있어도 생년월일은 대개 없다.
3. **급여대장에 없는 것**: 고용형태와 계약기간(근로계약서), 임원(등기부), 최대주주와 친족(주주명부 · 가족관계), 단시간근로자 소정근로시간, 병역 기간(병적증명서), 장애 · 경력단절. 빠진 열은 회사에 한 번에 묻는다.
4. **전기 신고서 조특 10호의9**: 1차년도 세액공제액(청년등 · 청년등 외)과 그해 인원. 당기의 2 · 3차 연도 공제와 전기 인원 대사에 쓴다.
Y · N 열을 비우면 N 이다(내국인만 Y). 주민등록번호는 넣지 않는다.
## 순서
1. **양식 만들기**: `--template`. 이미 있으면 그대로 둔다. 설치를 확인하거나 사용법을 보일 때는 `--sample` 로 합성 회사 스무 명 입력을 만들어 돌린다. 기대값은 세액공제액 92,355,000원(1차 27,355,000 · 2차 37,500,000 · 3차 14,500,000 · 추가 13,000,000), 해당 13.31명(청년등 8.73), 직전 11.32명(청년등 6.99)이다.
2. **자료 옮기기**: 받은 급여대장 · 인사 자료를 세 시트로 옮긴다. 값은 원본에서 그대로 옮기고 지어내지 않는다. 모르는 칸은 비우고 회사에 물을 목록에 적는다.
- 더존 급여대장 PDF(머리글 네 줄 · 사람마다 세 줄 양식)는 `python -m ctax.employ.douzone_pdf "<PDF 폴더>" "<입력 파일>"` 로 급여대장 시트에 붙인다. PDF 는 kordoc(`npx -y kordoc@^4`, Node.js 18 이상)으로 표를 읽는다. 첫 실행 때 npm 에서 받으니 인터넷이 필요하다. PDF 를 PyMuPDF · pdfplumber 로 따로 읽지 않는다. kordoc 을 못 돌리는 환경(Node 없음 · npm 차단)이면 kordoc 스킬로 PDF 를 표로 읽고 엑셀 급여대장처럼 옮긴다. 달마다 「읽은 사람 수 = 합계(N명)」 을 찍고, 다르면 그 달은 넣지 않는다. 사원명부에 없던 사람은 사번 · 성명 · 입사일만 든 줄로 더해지니 나머지를 채운다.
- 엑셀 급여대장은 열 이름이 회사마다 달라 직접 옮긴다. 옮긴 뒤 달마다 줄 수와 지급액 합계를 원본 합계 줄과 맞춘다.
+ - **계산 전에 되묻는다(건너뛰지 않는다).** 받은 인사 자료에 임원 · 최대주주·친족 · 계약 1년 미만(기간제 · 파견) · 0.75 요건(단시간 60시간 이상) 열이 없으면, 엔진을 돌리기 전에 그 열 이름과 영향받는 사람 이름을 묶어 회사에 한 번에 묻는다. 예: 「임원 · 최대주주·친족이 있습니까? 기간제 백승현 · 신가영의 계약기간은 1년 미만입니까?」. 급여대장으로는 알 수 없고, 사원명부의 빈칸은 엔진이 「아니오」 로 읽어 인원과 공제액이 부풀 수 있다. 답을 사원명부에 적고 회사 시트 「사원명부 범위 확인」 을 Y 로 한다. 답을 못 받으면 Y 로 두지 않고 돌려 **잠정치** 로만 전한다.
3. **엔진 실행**: `PYTHONUTF8=1 python -m ctax employ "<회사>/2025 법인세"`.
- 첫 줄: 세액공제액과 1차 · 2차 · 3차 · 추가 금액. 둘째 줄: 해당 · 직전 인원, 증가, 계산 방식.
- `엔진 대조 N개 중 N개 일치 · 검산 11개 중 K개 통과`. 엑셀이 없으면 재계산을 건너뛰었다고 출력한다.
- `확인 검산:` 줄은 아래 「검산 읽는 법」 대로 고칠 곳을 가린다. `확인:` 줄은 회계사에게 그대로 전한다.
- - 종료 코드: 0 모두 통과, 1 확인할 검산이 있음(워크북은 만들어짐), 2 입력 없음 · 읽지 못함(메시지에 시트 · 행 · 열).
+ - 「사원명부 범위 확인」 이 Y 가 아니면 첫 줄에 【잠정치】 가 찍히고 `확인:` 맨 앞에 영향받는 사람이 나온다. 법정서식 PDF 의 쪽마다 「잠정」 이 찍힌다. 이 금액을 확정으로 말하지 않는다. 사용자에게는 무엇을 확인해야 하는지 먼저 전한다.
+ - 종료 코드: 0 모두 통과, 1 확인할 검산이 있음 또는 잠정치(워크북은 만들어짐), 2 입력 없음 · 읽지 못함(메시지에 시트 · 행 · 열).
4. **워크북 확인**: `2 조서/통합고용_검증.xlsx`. 「목록」 시트의 결과 · 검산 · 확인할 것을 먼저 본다. 고칠 수 있는 칸은 노란 칸이다. 사원명부 · 급여대장을 고쳤으면 입력 파일을 고치고 다시 돌린다(워크북의 노란 칸만 고치면 수식은 다시 계산되지만 엔진 대조와 명세서 줄 구성은 옛 값이다).
5. **보고**: 세액공제액과 차수별 금액, 해당 · 직전 인원과 증가, 엔진 대조 · 검산 결과, 확인 줄(특히 청년 간주로 넣은 사람, 뺀 사람과 사유, 급여와 재직이 어긋난 사람), 회사에 물을 빈 열, 이 검증이 보지 않는 것.
## 워크북 시트
| 시트 | 볼 것 |
|---|---|
| 목록 | 결과, 검산 11개(통과 · 확인), 확인할 것 |
| 0기준 | 기업 구분 · 수도권 · 청년 간주 · 간주 연수 · 1인당 금액 · 전기 신고서 값 |
| 1사원명부 | 사람별 제외 사유, 단시간 유형, 청년 제외시점(현재 연령 · 간주 포함), 고령자 |
| 2급여대장 | 옮긴 급여 줄 |
| 3판정_해당 · 직전 · 직전전 | 사람마다 달마다 지급액 · 월말 재직 · 청년등. 근무개월수와 계산한 수, 급여와 어긋난 달 수 |
| 4인원 | 근로자별 방식과 월말 합 방식 인원, 서식에 쓰는 인원과 출처, 전기 신고 인원 대사 |
| 5공제액 | ⑪ ~ ㊱ 과 세액공제액 |
| 6서식10의9 | 공제세액계산서. 사업자등록번호 · 대표자 · 주소만 사람이 적는다 |
| 7서식10의10 | 상시근로자 명세서(해당 · 직전) |
**신고에 내는 서식은 `2 조서/통합고용_법정서식.pdf` 다.** 법제처 별지 서식 PDF 원본(`scripts/ctax/employ/forms/*.pdf`) 쪽을 그대로 두고 칸 좌표(`coords.json`)에 엔진 값만 얹는다. 서식 글 · 칸 · 쪽은 바꾸지 않는다. 작성방법만 있는 쪽은 넣지 않고, 사업자등록번호 · 대표자 · 생년월일 · 주소 · 날짜 · 서명은 사람이 적는다. 워크북의 6 · 7 시트는 같은 값을 수식으로 보이는 검증용이고, 인쇄하면 법정 용지와 쪽(서식(1) · (2) A4 세로 3쪽, 명세서 A3 가로 2쪽)에 맞는다. 사용자가 서식을 달라고 하면 이 PDF 를 준다. 서식을 새로 그리거나 엑셀 시트를 PDF 로 바꿔 내지 않는다.
| 8엔진대조 | 엔진 값과 수식 값. 「불일치」 가 있으면 입력이나 수식이 바뀐 것이다 |
## 검산 읽는 법
| 검산 | 어긋나면 볼 곳 |
|---|---|
| 서식 ⑥ 세액공제액 = 5공제액 합계, 서식 ⑪ · ⑭ = 명세서 ② · ⑨ | 수식을 건드린 것이다. 다시 돌린다 |
| 월말 재직인데 급여가 없는 달 수 = 0 | 3판정 U 열. 그 달은 근무개월에서 빠졌다. 무급휴직이면 회사 시트 「급여 없는 달 포함」 Y, 급여대장 누락 · 사번 불일치면 급여대장을 고친다 |
| 재직 기간이 아닌데 급여가 있는 달 수 = 0 | 3판정 V 열. 입사일 · 퇴사일 오류, 퇴직 뒤 정산 지급 |
| 급여대장 사번이 모두 사원명부에 있음 | 사원명부에서 빠진 사람. 그 사람은 인원에 들지 않았다 |
| 전기 신고 인원 = 다시 센 인원 | 전기와 제외 사유 · 청년 구분이 다르다. 전기 명세서와 맞춰 본다 |
| 엔진 대조 불일치 0건 | 8엔진대조에서 어느 줄인지 본다 |
## 판단이 들어간 곳 (회계사에게 알릴 것)
- **급여가 없는 달**: 급여대장이 있는 과세연도는 월말 재직이고 그 달 급여가 있어야 근무개월로 센다. 시행령 제23조 제10항 제6호가 원천징수 사실도, 국민연금 · 건강보험료 납부 사실도 확인되지 않는 사람을 상시근로자에서 빼기 때문이고, 상시근로자 수 · 근무개월에서 제외함이 타당하다는 회계사 확인을 받았다(2026-10-12). 법령 글은 「매월 말 현재 근무」 라서 무급휴직처럼 근로관계가 이어진 달은 회사 시트 「급여 없는 달 포함」 을 Y 로 둔다.
- **인원 계산 방식**: 2025년 1월 1일 이후 개시 과세연도는 근로자별 방식(사람마다 근무개월 수 ÷ 개월 수, 100분의 1 미만 버림)이고, 2024 과세연도까지의 증가분에 대한 2 · 3차 연도 판정은 월말 합 방식이다. 두 값이 4인원에 함께 있다. 25년 12월에 공제 방식이 개정됐으나 부칙(법률 제21223호 제34조, 대통령령 제35999호 제2조)이 2024 · 2025 과세연도 증가분의 공제를 종전 규정으로 두어 이 2 · 3차 판정은 종전 방식이다(회계사 확인, 2026-10-12).
- **청년 간주**: 2025년 1월 1일 이후 체결한 계약만 대상이다(부칙 <대통령령 제36127호> 제11조, 회계사 확인 2026-10-12). 계약 체결일에 34세 이하였던 정규직을 2025년 계약은 3년(일반기업 2년), 2026년 이후 계약은 4년(3년) 동안 청년등으로 센다. 2024년 이전에 계약한 사람은 간주가 없어 현재 연령만 본다. 적용이 기본값이고 쓰지 않으려면 회사 시트 「청년 간주 적용」 을 N 으로 둔다. 확인 줄에 간주로 들어간 사람 이름이 나온다.
+ - **사원명부 범위**: 임원 · 최대주주·친족 · 계약 1년 미만 · 0.75 요건은 급여대장에 없다. 회사에 묻고 적은 뒤 회사 시트 「사원명부 범위 확인」 을 Y 로 한다. 비우면 엔진이 잠정치로 알리고 끝 코드 1 이다(2026-10-20, 실습에서 이 열 없이 돌린 값이 정답보다 4,250,000원 크게 나온 사례).
- **납부 확인**: 급여대장의 소득세 · 국민연금 · 건강보험 공제액이 모두 0 인 사람을 뺐다. 납부 내역 대신 급여대장 공제액으로 판정한 것이다.
- **계산하지 않는 것**: 인원이 줄었을 때의 추가 납부세액, 정규직 전환 추가공제, 합병 · 분할 · 승계 인원, 출산전후휴가 대체 인력, 최저한세 · 이월 · 농어촌특별세.
### 2026 과세연도부터
2025년 12월 개정(법률 제21223호)으로 2026년 12월 31일이 속하는 과세연도부터 공제가 기존공제와 신규공제로 나뉜다. 엔진은 둘 다 계산한다. 과세연도 개시일이 2026-01-01 이후이면 새 규정으로 본다.
- **기존공제**: 2024 · 2025 과세연도에 상시근로자가 늘어 받은 공제의 2 · 3차 연도. 종전 규정이다(2026 과세연도에는 2024 증가분의 3차 연도(중소 · 중견)와 2025 증가분의 2차 연도). 전기 신고서의 1차년도 공제액을 회사 시트에 넣는다.
- **신규공제**: 2026 과세연도 이후 증가분. 직전 3개 과세연도(2024년 12월 31일 이전에 개시한 과세연도는 비교에서 뺀다) 대비 A + B + C 를 청년등 · 청년등 외로 나눠 더한다(법 제29조의8 제1항). 2026 과세연도는 직전 대비 A 만 나오고 B 는 2027, C 는 2028 과세연도부터다. 1인당 금액은 `credits.yaml` 의 `employment_integrated_new`(중소기업 청년등 700만원 · 청년등 외 400만원, 수도권 밖 1,000만원 · 700만원 등). 중소기업이 아니면 청년등 외 증가 인원이 최소고용증가인원수(중견 5명, 그 밖 10명, 시행령 제26조의8 제3항)를 넘어야 하고 그 금액을 뺀다.
- **육아휴직 복귀 추가공제**: 복직 기한이 2026년 12월 31일이라 2026 과세연도에도 나온다.
정한 것(2026-10-15 회계사 확인으로 ★★★): 기존공제는 종전 규정이라 서식(1)(2026. 3. 20. 개정판) 제2쪽의 「나. 2차년도 세제지원 요건」 · 「다. 3차년도 세제지원 요건」 에 적고(시행규칙 부칙 제23호 제6조, 서식(2)에는 이 부분이 없다), 2025 증가분의 2차 연도 인원은 근로자별 · 2024 증가분의 3차 연도는 월말 합(시행령 부칙 제36127호 제11조 제1항, 최초 공제연도 기준), 기존공제와 신규공제는 함께 적용한다(둘을 배제하는 규정이 없다). 확정하지 못한 것: 최소고용증가인원수 차감을 전전 대비까지 확장하는 일(2026 과세연도는 해당 없음). 근거는 괄호 안의 부칙 조문이다.
근거 조문과 등급은 `scripts/ctax/employ/rules.yaml` 에 있다. 등급은 ★★★ 조문 · 서식 글 그대로, ★★☆ 조문과 서식 작성방법을 맞춰 읽은 것(회계사 확인), ☆ 확인하지 못한 것이다.
## 예외 기록
- **신고 프로그램이 급여가 처음 나간 달부터 근무개월을 센 사례(실제 신고서 1건)**. 입사한 달에 급여가 없던 세 사람은 신고 명세의 근무개월수가 한 달 적었다. 엔진도 급여가 있는 달만 센다.
- **같은 신고서는 청년 간주를 쓰지 않았다.** 2025년 계약자가 있으면 엔진 기본값과 청년등 인원이 다르게 나온다. 전기 신고서를 재현할 때는 「청년 간주 적용」 N.
- **신고 명세에 내국인 N 인데 상시근로자 Y 인 줄**이 있었다. 내국인은 거주자(국적 무관)다. 외국 국적 직원은 거주자 여부를 확인해 내국인 열을 채운다.
- **더존 급여대장은 달에 따라 성명 표기가 다르다**(괄호 붙임 등). 성명으로 사번을 이으면 끊기는 줄이 생겨 그 사람의 근무개월이 줄어든다. 급여대장의 사번을 그대로 쓰고 「급여대장 사번이 모두 사원명부에 있음」 검산을 본다.
- **직전 과세연도 급여대장이 없으면** 사원명부로 직전 인원을 세지 않는다(퇴사자가 빠진 명부면 공제가 커진다). 전기 신고 인원을 넣는다.
- 워크북이 엑셀에 열려 있으면 쓰지 못한다. 닫고 다시 돌린다.
## 지킬 것
- 인원 · 금액을 손으로 고치지 않는다. 틀리면 입력 파일(사원명부 · 급여대장 · 회사)을 고치고 다시 돌린다.
- 1인당 금액 · 간주 연수 같은 법령 값을 바꾸려면 `rules.yaml` 과 `rules.json` 에 조문 · 판 · 등급을 함께 적는다(법령 원문과 부칙의 적용례까지).
- 서식은 해마다 바뀐다. 돌리기 전에 법제처 서식(별지 제10호의9 · 제10호의10)의 개정일이 `rules.yaml` 머리말의 판(별지 제10호의9서식(1) 2026. 3. 20., 제10호의10서식 2026. 5. 22.)과 다르면 서식 글과 작성방법을 다시 읽는다. 서식이 바뀌면 `forms/` 의 PDF 와 칸 좌표(`coords.json`)도 새 판으로 바꿔야 한다(만드는 도구는 개발 저장소에 있다). 옛 판 PDF 에 값을 얹어 내지 않는다.
- 고객 자료(급여대장 · 사원명부 · 회사명 · 금액)를 저장소 파일 · 시험 · 이 문서에 쓰지 않는다. 시험은 합성 회사로만 쓴다.
- PASS 를 말할 때 그 검증이 보지 않는 것을 함께 적는다(사원명부에 적힌 제외 사유 · 청년 구분의 옳고 그름은 엔진이 보지 않는다).