법인세-검토에이전트 · git:20261102.57dba3c · 2026-11-02 · sha256 69ec63e24102615f

법인세-검토에이전트 git:20261102.57dba3cA

Immutable. This exact content never changes and is served at /api/v1/blob/69ec63e24102615f.

---
name: 법인세-검토에이전트
description: 법인세 세무조정 분석적 검토(AR)를 한다. 신고 건 폴더(<회사>/<연도> 법인세)의 받은자료(위하고 · 더존 · 더존 ERP 분개장 · 재무제표 · 거래처원장 엑셀)와 전기 세무조정계산서 PDF 를 엔진이 읽어 AR 이슈 · 가이드 39줄 판정 · 서식 총괄표를 만들고, 이 스킬(AI)이 가이드 순서대로 1-(1) 회사 종류부터 2-(2) 당기 중소기업 여부까지 한 단계씩 판단해 결론을 넘긴 뒤, 이슈마다 조정 필요 여부 · 까닭 · 근거 조문(등급) · 회사 질문 메모와 공제 · 감면 제안(입법 취지에 맞는 전표)을 쓴다. 결과는 AR 보고서 MD(훑은 범위 · 전사 기준 · 재무제표 계정별 · 세액공제 세 묶음의 관련 · 추정 판단 · 추가 요청 · 가장 중요한 3가지)와 회계사 결론 칸이 있는 AR_이슈.xlsx 이고, 법인세 목업 모양 화면(HTML · Claude 아티팩트)은 원할 때만 만든다. 숫자는 엔진만 만들고 AI 글 속 금액은 명령이 검사한다. "법인세 AR", "세무조정 AR", "분석적 검토", "AR 이슈", "세무조정 포인트 뽑아줘", "세무조정 체크리스트", "이 분개장으로 법인세 검토해줘", "결산 전에 조정 항목 미리 봐줘", "AR 화면", "AR 메모"에 쓴다. 조정 금액은 엔진 조서 계산값이고 확정 · 공제 적용 결정은 회계사가 한다.
---

# 법인세 검토에이전트 (법인세 세무조정 AR)

이 스킬은 엔진이 낸 숫자로 판단 글만 쓰고, 결론은 회계사가 낸다. 엔진이 내지 않은 금액은 쓰지 않고, 회계사 결론 칸은 채우지 않는다.

모든 명령은 스킬 폴더에서 `python scripts/ar.py <명령> "<신고건>"` 이다. `<신고건>` 은 `<회사>/2025 법인세` 같은 폴더다. Windows · macOS 모두 `python`(3.10 이상).

## 준비

```bash
pip install openpyxl pyyaml pymupdf
```

Windows 콘솔(cp949)에서 이 스킬 명령 밖의 파이썬 조회 스크립트를 직접 돌리면 한글 출력에서 오류가 난다. `PYTHONIOENCODING=utf-8` 을 주거나 `python -X utf8` 로 돌린다. Git Bash 에서 쓰는 `/c/Users/...` 꼴 경로는 Windows 파이썬이 못 연다. 파이썬에 넘기는 경로는 `C:\Users\...` 꼴로 쓴다.

신고 건 폴더:

```
<회사>/2025 법인세/
  00 받은자료/           분개장 · 재무상태표 · 손익계산서 · 거래처원장 잔액 · 계정명세서 엑셀(이름은 자유, 엔진이 머리줄로 가린다)
  00 받은자료/전기/      전기 세무조정계산서 PDF (없으면 전기 단계는 「자료 없음」)
```

결과는 같은 폴더의 `_색인/`(JSON) 과 `1 AR/`(엑셀 · 화면)에 생긴다. 이 폴더 꼴은 academy-product `ctax` 와 같아서 이어서 조서 · 서식을 돌릴 수 있다.

## 1. 엔진

```bash
python scripts/ar.py engine "<신고건>"
```

받은자료 읽기(장부.json · 전표.csv, 재무제표 대사) → 전기 신고서 읽기(전기.json: 기업 구분 · 15호 · 50호(을) · 결손금 · 공제감면) → AR 규칙(AR.json: 이슈 · 가이드 39줄 · 서식 목록, `1 AR/AR_이슈.xlsx`) → 조서 계산(조정.json: 세무조정 금액 · 소득처분 · 각사업연도소득금액, `2 조서/조서.xlsx`).

- 끝 코드 2 면 받은자료가 없거나 읽지 못한 것이다. 출력 메시지대로 파일을 넣거나 이름을 고친다.
- 조서 세율 · 한도는 사업연도 개시일로 고른다. 2025 이하는 `engine/ctax/wp/rates_2025.yaml`, 2026 개시는 `rates_2026.yaml`(법인세율 10 · 20 · 22 · 25%)이고 2026 판으로 확인하지 못한 항목은 2025 값에 등급 ☆ 로 쓴다(조서 「기준 2026」 시트). 표가 없는 해(2027 이후)는 「<연도> 사업연도 세율 표가 없습니다」 를 내고 끝 코드 2 로 멈춘다. 이때는 조서를 만들지 말고 사용자에게 그대로 알린다.
- 「대사」 가 실패로 나오면 분개장과 재무제표가 안 맞는 것이다. 판단으로 넘어가기 전에 사용자에게 알린다.
- 전기.json `problems` 에 줄이 있으면 엔진이 PDF 일부를 못 읽은 것이다. 해당 쪽을 직접 열어 단계 판단에 반영한다.

## 2. 1-(1) ~ 2-(2) 한 단계씩

`references/sequence.md` 를 읽는다. 단계마다:

```bash
python scripts/ar.py step next "<신고건>"        # 할 단계, 가이드 원문, 엔진 사실, 앞 단계 결론
# _색인/AR_단계/<ID>.json 을 쓴다
python scripts/ar.py step done "<신고건>" <ID>   # 검사 통과 → 다음 단계
```

순서는 P1 → P2 → P3 → P4 → F1 → F2. F2 가 끝나면 기업 구분 전제(중소기업 여부 · 소기업 여부, `carry.sets`)가 조서 노란 칸으로 넘어가고 조서를 다시 계산한다(회계사가 엑셀에서 고친 칸은 두고 알린다). 전기 PDF 서식은 쪽 글을 뽑으면 칸이 깨져 읽기 어려울 때가 많다. 그때는 `python scripts/ar.py page "<신고건>" <쪽>` 으로 그 쪽을 그림으로 떠서 본다. 엔진에 없는 숫자(여러 전표의 합계, 엔진이 못 읽은 전기 PDF 값)는 `ar.py sum` · `ar.py pdf` 로 먼저 적고 쓴다(`references/sequence.md`). 앞 단계 결론을 전제로 쓰되 그 단계의 자료(전기 PDF 쪽, `_색인/전표.csv`)는 직접 연다. F1 에서는 **엔진이 못 본 계정**을 찾는다(비용으로 처리한 자산, 이름과 실질이 다른 거래). 중소기업 요건은 `references/sme.md`, 공제 · 감면 예측은 `references/credits.md`.

## 3. 이슈 메모

`references/memo.md` 를 읽고 AR.json 이슈 전부에 메모를 쓴다(판단 · 위험도 · 받은 앞 단계 항목 · 까닭 · 근거 조문 · 질문). 회계사가 답을 골라 결론이 나는 판단 필요 이슈에는 질문지(`choices`)를 붙인다. F1 AI 추가 이슈의 근거 조문 · 질문지 · 세액 영향은 같은 메모 파일의 `added` 줄로 단다.

```bash
python scripts/ar.py memo "<신고건>" <메모.json>
```

근거 조문은 그 사업연도 종료일 기준 원문을 korean-law MCP(`get_law_text`, `effective_date`)로 열어 등급을 단다. 세법 MCP 가 있으면 한 번 더 본다. 둘 다 안 되면 ☆ 로 적는다.

답이 조서 금액을 가르는 질문(특수관계인 여부, 소득처분, 업무용승용차 대상, 전표 부인 여부)에는 보기마다 `sets`(바꿀 조서 노란 칸)를 붙인다. 칸 목록은 `python scripts/ar.py inputs "<신고건>" [--paper id] [--grep 글]`, 꼴은 `references/memo.md` 「답을 조서 칸에 잇기」.

## 4. 공제 · 감면 제안

`references/credits.md` 대로 제도의 입법 취지에 맞는 거래를 전표에서 찾아 줄 번호와 금액으로 내놓는다. 제안할 것이 없어도 빈 목록으로 넣는다.

```bash
python scripts/ar.py credits "<신고건>" <제안.json>
```

## 5. 마무리

```bash
python scripts/ar.py finish "<신고건>"
python scripts/ar.py finish "<신고건>" --alias "(주)스타일"   # 실제 회사 이름 대신 쓸 이름(한 번 주면 남는다)
```

- 메모가 빠진 이슈, 제안 파일 없음, 2-(1) 에서 훑지 않은 엔진 규칙에 안 걸린 계정, 앞 단계가 넘겼는데 받은 곳이 없는 항목(f* · c* · a*)이 있으면 목록을 내고 멈춘다. 고쳐서 다시 돌린다. 지금 것으로 먼저 보려면 `--draft`.
- 엔진을 다시 돌려 회계사가 엑셀에 적은 결론을 이어받고, AR 보고서 `1 AR/AR_보고서.md` 와 세 묶음 요약(`_색인/AR_요약.json`)을 만들고, `1 AR/AR_이슈.xlsx` 에 시트 일곱(「요약」 「AR 한 장」 「계정 전수」 「AI 추가 이슈」 「공제 제안」 「합계 · PDF 값」 「순서와 전제」)을 더한다.

세 묶음 순위: 점수(위험도 상 2 · 중 1 · 하 0 + 판단 조정 필요 2 · 판단 필요 1 + 과세표준 · 세액을 바꾸는 이슈 2) 높은 순, 같으면 조정 필요가 먼저, 그다음 크기(당기 금액) · 가이드 순서. 메모에 `same_as` 로 묶은 같은 사안과, 기업 구분 · 소기업 여부 · 중소기업 특별세액감면처럼 명령이 묶는 사안은 「가장 중요한 3가지」에 한 번만 나온다. 전기 결손금 이력 이슈는 당기 소득이 있으면 위험도 상으로 본다. 법인세등 손금불산입 · 원천납부세액명세서 · 지출증명서류 합계표 · 원가명세서는 상시 항목이라 「가장 중요한 3가지」에 넣지 않는다. 기업 구분은 독립성만 미확인이면 확인사항이다.

## 6. 화면 (선택)

보고서는 MD 다. 화면은 사용자가 원할 때만 만든다.

```bash
python scripts/ar.py view "<신고건>"                         # 1 AR/AR_화면.html (읽기 전용)
python scripts/ar.py view "<신고건>" --artifact <파일.html>   # Claude 아티팩트로 올릴 꼴
```

- 아티팩트로 올려 달라고 하면 `--artifact` 로 만든 파일을 Artifact 도구로 올린다. **실제 회사 자료가 든 화면은 고객 자료라 사용자가 요청할 때만 올리고, 비공개(기본)로 두고 공유는 사용자가 정한다고 알린다.** 시연 · 공유용은 가상 회사 표본(`tools/sample_review.py`)으로 만든다.
- 회사 이름 대신 별칭을 쓰라는 규칙이 있으면 `finish --alias` 로 보고서 · 화면 · 엑셀 머리 이름을 바꾸고, 메모 · 단계 글에도 실제 이름을 쓰지 않는다.

## 7. 화면에서 판단하기

```bash
python scripts/ar.py serve "<신고건>"          # http://localhost:8852/ 를 브라우저로 연다
```

화면은 법인세 목업 「3. 분석적 검토」(디자인 캔버스 「법인세 자동 신고」) 모양이다. 왼쪽에 진행 단계(분석적 검토 아래 전사 기준 · 재무제표 계정별 · 세액공제 세 묶음과 남은 판단 · 요청 수) · 「확인할 것」 질문지 · 기업 구분 · 「세무조정 N건은 근거가 분명해요」, 오른쪽에 근거 · 세무조정 내역 · 한 장 요약 탭. 처음 열면 한 장 요약이 보이고, 세 묶음마다 항목 · 관련(장부 · 전기) · 추정 판단 · 추가 요청 표가 있다. 회계사가 고른 답과 「반영」 은 `_색인/AR_단계/판단.json` 에 남고, `finish` 를 다시 돌리면 보고서와 엑셀 「화면 판단」 시트에도 나온다. 고른 보기에 `sets` 가 있으면 조서 노란 칸을 바꾸고 조서를 다시 계산해 세무조정 내역 · 한 장 요약이 바로 바뀐다(조서가 큰 회사는 몇 초 걸린다). 넣은 칸은 `_색인/AR_단계/조서잇기.json` 에 남고, 답을 지우면 넣기 전 값으로 돌아간다. 조서 엑셀이 열려 있어 못 넣었으면 엑셀을 닫고 `ar.py apply "<신고건>"`(미리 보려면 `--dry`). 화면 없이 대화로 받은 답은 `ar.py answer`. 읽기 전용 화면은 `ar.py view`.

## 8. 최종 신고서와 대조 (신고가 끝난 뒤)

```bash
python scripts/ar.py compare "<신고건>" "<최종 세무조정계산서.pdf>"   # 경로를 빼면 <신고건>/최종 신고본/*.pdf
```

AR 은 볼 곳을 짚는 단계라 신고서 항목마다 AR 이 짚었는지를 본다(금액 일치는 3의 참고). 결과는 `1 AR/AR_대조.md` · `_색인/AR_대조.json`.

1. **신고서 항목을 AR 이 잡았는지**: 15호 줄, 3호 기부금 한도초과 · 이월결손금, 공제감면 적용 · 이월마다 잡음 · 조정 없음으로 봄 · 못 잡음, 잡은 이슈와 AR 판단, 가장 중요한 3가지에 들었는지, 조서 계산이 낸 방향 · 금액 · 처분과 신고서와의 차이(같음 · 금액 다름 · 처분 다름 · 방향 반대 · 조서 금액 없음). 못 잡은 것과 조정 없음으로 본 것은 엔진 규칙이나 이 스킬 절차를 고칠 단서다.
2. **AR 만 짚은 것**: 신고서에는 조정이 없는데 AR 이 조정 필요 · 판단 필요로 본 항목. AR 이 과했을 수도 신고본이 놓쳤을 수도 있어 오답으로 세지 않고 회계사 판단 목록으로 낸다.
3. **조서 금액(참고)**: 조서 계산과 신고서 15호 · 3호 · 50호(을) 숫자 비교. 조서를 고칠 단서다.

사용자에게는 1의 잡은 수 · 못 잡은 항목, 2 가운데 조정 필요로 본 것, 3의 큰 차이를 짧게 알린다. 최종 신고서는 고객 자료라 이 저장소에 넣지 않는다. 신고서를 읽는 엔진이 같아서 전기 신고서 읽기가 놓치는 칸은 여기서도 놓친다(보고서 끝 「신고서를 읽다 걸린 곳」).

## 회계사가 할 일

- `1 AR/AR_이슈.xlsx` 「이슈 목록」 의 결론 칸(노란 칸)과 「AI 추가 이슈」 의 회계사 결론 칸에 적고 저장한 뒤 `finish` 를 다시 돌리면 화면에 나온다.
- 보고서는 `1 AR/AR_보고서.md`. 화면이 필요하면 `ar.py serve` 로 열어 질문에 답하고 세무조정을 반영한다.
- 조서 금액을 바꾸려면 `2 조서/조서.xlsx` 노란 칸을 고치고 `finish` 를 다시 돌린다. 화면 답이 넣은 칸을 엑셀에서 고치면 엑셀 값이 남는다(그 뒤에 화면에서 다시 고르면 화면 답이 들어간다).

## 사용자에게 알릴 것

AR 은 세 묶음(전사 기준 · 재무제표 계정별 · 세액공제)으로 항목마다 관련 · 추정 판단 · 추가 요청을 확인하는 단계다. 그 순서로 짧게 말한다. 화면 자료의 `ar_sheet` 와 엑셀 「AR 한 장」 시트가 같은 내용이다.

0. **훑은 범위**: AR 가이드 39줄, 시산표 계정 전수(엔진 · AI 가 다룬 것과 2-(1) 에서 훑은 엔진 규칙에 안 걸린 계정), 신고 서식 총괄(낼지 확인할 서식).
1. **전사 기준**: 기업 구분 전제, 주식 변동, 전기 조정 예측 결과를 한 줄씩.
2. **재무제표 계정별**: 조정 예상 계정(금액 · 소득처분)과 판단 필요 계정, AI 추가 이슈 건수.
3. **세액공제**: 전기 공제 이어짐, 적용 가능 제안과 회계사가 정할 점.
4. **가장 중요한 3가지**와 먼저 받을 자료.

그다음 보고서(`1 AR/AR_보고서.md`) · 엑셀 위치, 화면이 필요한지(원하면 `ar.py view`, 아티팩트), 대사 실패나 전기 신고서를 못 읽은 곳, 그리고 초안이며 조정 금액은 확정이 아니고 공제 · 감면 적용은 회계사 판단이라는 점.

## 하지 말 것

- 엔진 결과에 없는 금액을 글에 쓰지 않는다(명령이 거절한다). 한도 · 세액 · 조정 금액을 글로 계산하지 않는다(조서 계산은 엔진이 한다).
- 회사 폴더 `_색인` 의 엔진 JSON(장부 · 전기 · AR)을 손으로 고치지 않는다. 받은자료를 고치고 `engine` 을 다시 돌린다.
- 거래처 이름만으로 특수관계를 단정하지 않는다.
- 고객 자료와 결과를 이 저장소에 올리지 않는다.

## 엔진 갱신

`engine/ctax/` 는 academy-product `법인세/ctax` 에서 옮긴 것이다(원본 커밋 `engine/VENDORED.json`). 직접 고치지 않고 원본을 고친 뒤 `python tools/sync_engine.py <academy-product 의 법인세 폴더>` 로 다시 옮긴다.