---
name: 부가세신고서검토
description: 직원이 작성한 부가가치세 신고서 초안을 장부에서 다시 만든 본지와 나란히 놓고 란별로 대조하고, 부속명세서 8종을 장부에서 만들어 본지와 0원으로 맞춘다. 검토항목 40개(rules/진단항목.csv)가 정본이다. 신고서 산식 검증 · 장부·신고서 정합성 · 부속명세 정합성 · 신고서 고유 항목 · 전기 대비 분석적 검토 · 원천자료·신고서 정합성 · 세액 정확성 7개 영역이고, 그중 18개는 스크립트가 자동으로 돌리고 나머지는 항목마다 적힌 검토 방법대로 회계사가 본다. 서명 전 크로스 체크용이다. "신고서 검토", "부가세 신고서 봐줘", "직원이 만든 신고서", "신고 전 점검", "부속명세서", "세금계산서합계표 안 맞아", "영세율 첨부서류", "수출실적명세서", "신고서 초안 검토", "서명 전에 확인"이 언급되면 트리거.
---

# 부가세 신고서·부속명세 검토

장부가 맞아도 신고서는 틀릴 수 있습니다. 란 배정과 서식은 장부 검토로 안 잡힙니다.

| 받는 것 | 내는 것 |
|---|---|
| 수정 후 매입매출장 | 검토 리포트 (검출 건 + 부속명세 대사 + 검토 범위) |
| 직원 작성 신고서 PDF | 본지 대사표 (내 본지 · 직원 · 란별 차이) |
| 전기 확정신고서 | 부속명세 8종 + 검증 시트 |
| `rules/` 네 파일 | 확인사항 |
| | 신고서 PDF · 부속명세 PDF |

결과는 회계사 검토 전 초안입니다. 판정과 서명은 회계사가 집니다.

## 빠른 시작

들어 있는 합성 자료로 한 번 돌려 봅니다. 스킬 폴더에서:

```bash
pip install -r requirements.txt
python scripts/return_review.py tests/fixtures/오류 out/오류
python scripts/make_return.py tests/fixtures/신고서작성 out/작성
```

첫 줄은 정지 8 · 확인 2 로 끝나야 합니다(B2 · B4 · C5 · C7 · C8 두 줄 · D5 · D6 정지, E1 · E3 확인). `tests/fixtures/정상` 으로 돌리면 검출 0건입니다. 둘째 줄은 `out/작성/신고서_2026-1기확정.pdf` 를 내고 「검증식 A1~A4 통과」를 찍습니다. 회사·거래처·금액은 전부 지어낸 값입니다. 테스트는 `python -m pytest tests`.

윈도우 콘솔에서는 `PYTHONIOENCODING=utf-8` 을 붙입니다. 파이썬 3.10 이상, 패키지는 openpyxl · PyMuPDF 입니다.

## 입력 폴더

`return_review.py <폴더>` 는 폴더 안의 엑셀·CSV 를 파일 이름으로 찾습니다. 이름이 아래로 시작하면 됩니다.

| 표 | 필수 | 열 |
|---|---|---|
| `매입매출장*` | 필수 | 더존 매입매출장 내보내기. `년도` `월` `일` `매입매출구분(1-매출/2-매입)` `과세유형` `불공제사유` `거래처명` `사업자(주민)등록번호` `공급가액` `부가세` `기본계정`. 수정 후 장부를 넣습니다 |
| `신고서*작성본*.pdf` | 둘 중 하나 | 직원이 더존에서 뽑은 신고서 PDF |
| `신고서_직원작성본*` | 둘 중 하나 | PDF 가 없을 때. `란` `명칭` `공급가액` `세액` |
| `vat_return_prior*` | 선택 | 전기 확정신고서. `란` `공급가액` `세액`. 없으면 E1 · E3 이 「미실행」으로 남습니다 |
| `tax_invoices*` | 선택 | 홈택스 세금계산서·계산서 목록. `작성일자` `매출매입구분`(매출·매입) `공급가액` `부가세`. 없으면 C7 이 확인으로 섭니다 |
| `export_declarations*` · `local_lc*` · `fx_receipts*` | 영세율이 있으면 | 시행령 제101조 서류를 만들 원천 표. 어느 과세유형이 어느 표를 보는지는 `rules/영세율_구분.csv` |

과세유형은 더존 번호를 씁니다. 매출 11 과세 · 12 영세율 세금계산서 · 13 면세 계산서 · 14 건별 · 16 수출 · 17 카드과세 · 18 카드면세 · 22 현금영수증과세 · 23 현금영수증면세, 매입 51 과세 · 53 면세 · 54 불공제 · 57 카드과세 · 61 현금영수증과세입니다. 불공제사유 1~8 은 별지 제22호서식의 사유 ①~⑧ 순서로 읽습니다.

## 쓰는 곳이 둘

| 쓰는 곳 | 검토 대상 | 누가 |
|---|---|---|
| 자기 검증 | 내가 뽑은 신고서와 부속명세 | 만든 사람이 바로 |
| 크로스 체크 | 직원이 작성한 신고서 | 회계사가 서명 전에 |

크로스 체크는 직원이 만든 신고서와 같은 데이터로 내가 다시 만든 신고서를 나란히 놓고 차이를 냅니다. 개업 회계사가 직원이 더존에서 뽑아 온 신고서를 어디까지 믿고 서명할 것인가의 문제입니다.

## 원칙

1. 장부 검토가 먼저입니다. [매입매출장검토](../매입매출장검토/SKILL.md)의 정지가 0건이 된 뒤에 옵니다. 장부가 틀린 채로 신고서를 보면 원인을 되짚게 됩니다.
2. 신고서를 고치지 않습니다. 신고하지 않습니다. 홈택스 화면을 자동으로 조작하지 않습니다.
3. 부속명세는 장부를 거래처별로 집계해 만듭니다. 집계이지 새 판단이 아닙니다.
4. 검토항목 밖의 검사를 만들지 않습니다. 필요하면 `rules/진단항목.csv`에 행을 먼저 추가합니다.

## 용어

| 용어 | 뜻 |
|---|---|
| 본지 | 부가가치세 신고서 본체(별지 제21호서식). 부속명세와 구분해 부른다 |
| 판정 정지 | 고치기 전에는 신고하지 않는다 |
| 판정 확인 | 회계사 판단이 필요하다 |
| 수행 자동 | `scripts/return_review.py`가 대조해 결과를 리포트에 낸다 |
| 수행 검토자 | 스크립트가 없다. 회계사가 「검토 방법」대로 본지와 원천자료를 열어 대조하고 결과를 확인사항에 한 줄로 적는다. 기록이 없으면 리포트에 「검토자 수행 필요」로 남는다 |
| 수행 자료 미확보 | 필요한 원천자료가 없어 지금은 못 한다 |

## 검토항목

정본은 `rules/진단항목.csv`입니다. 40개, 7개 영역. 자동 18 · 검토자 20 · 자료 미확보 2. 아래는 그 사본입니다.

### A. 신고서 산식 검증

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| A1 | (16) 매입세액 합계 | (16) = (10) − (11) + (12) + (13) + (14) + (15). 0원 | 본지 란 값을 산식대로 다시 계산해 비교한다 | 정지 | **자동** |
| A2 | (18) 차감계 | (18) = (16) − (17). 0원 | 같음 | 정지 | **자동** |
| A3 | 납부(환급)세액 | ㉰ = ㉮ − ㉯. 매출세액에 (8) 대손가감 포함. 0원 | 같음 | 정지 | **자동** |
| A4 | (30) 차감납부세액 | (30) = ㉰ − 경감·공제 − 예정고지 + ㉹ 가산세. 0원 | 같음 | 정지 | **자동** |

여기서 걸리면 산출 코드가 잘못된 것입니다. 정지로 세우고, 그 회차 산출물은 쓰지 않습니다.

### B. 장부·신고서 정합성

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| B1 | 란 배정 | 과세유형별 합계 = 본지 란별 합계. 원건·취소·재발행은 상계하지 않고 그대로 더한다 | 장부를 과세유형별로 합계 내어 본지 란별 금액과 대조한다 | 확인 | 검토자 |
| B2 | 과세표준 대사 | 장부 매출 합계 = (1)(3)(6)·면세수입금액 | 내 본지와 직원 작성본을 (1)(3)(6)·면세 란별로 대조한다 | 정지 | **자동** |
| B3 | 매출세액 | 255 부가세예수금 발생액 = 매출세액 | 일반전표 255 계정 발생액과 본지 매출세액을 비교한다 | 정지 | 검토자 |
| B4 | 매입세액 | 장부 매입 합계 = (10)(12)(15)(17). 불공제 54는 (10)에 든 채로 (17)에서 한 번 뺀다 | 내 본지와 직원 작성본을 매입 란별로 대조한다. 안 맞으면 원천자료가 빠진 것이라 장부 검토로 되짚는다 | 정지 | **자동** |
| B5 | 불공제 반영 | 불공제 판정 건이 (17)에 빠짐없이 있을 것 | 불공제 판정 건 목록과 (17)·22호 명세를 대조한다 | 확인 | 검토자 |
| B6 | 공급시기 경계 | 과세표준 매출의 배송완료일이 전부 과세기간 안일 것 | 과세표준에 든 매출의 배송완료일을 본다. 장부 C1이 먼저 본다 | 정지 | 검토자 |
| B7 | 할인 유형별 처리 | 에누리·자기적립은 빼고, 보전받는 쿠폰은 더하고, 보전 없는 포인트는 시가 | 할인 유형별 집계를 판단 기준표(매출)와 대조한다 | 확인 | 검토자 |
| B8 | 무상 제공 | 끼운 사은품은 과세하지 않고, 따로 발송한 판촉물은 시가로 과세 | 사은품·판촉물 출고 목록을 판단 기준표(매출)와 대조한다 | 확인 | 검토자 |
| B9 | 과세·면세·영세 구분 | 면세는 면세수입금액에만, 영세율은 (5)(6)에만 있을 것 | 장부 과세유형 13·18·23과 16의 합계가 각 란에만 들어갔는지 본다 | 정지 | 검토자 |
| B10 | 면세 매입 분리 | 부가세 0원 매입이 (10)(12)에 없고 계산서합계표에 있을 것 | 유형 53 합계가 (10)(12)에 섞였는지, 계산서합계표와 같은지 본다. 장부 B10이 먼저 본다 | 정지 | 검토자 |

### C. 부속명세 정합성

공급가액과 세액이 전부 0원 차이여야 합니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| C1 | 38호 매출처별 세금계산서합계표 | 합계 = (1) + (5). 영세율 세금계산서(과세유형 12) 포함 | 장부를 거래처별로 집계해 서식을 만들고 본지 란과 공급가액·세액을 대조한다 | 정지 | **자동** |
| C2 | 39호 매입처별 세금계산서합계표 | 합계 = (10) + (12). 불공제 세금계산서(54) 포함 | 같음 | 정지 | **자동** |
| C3 | 16호 신용카드매출전표등 수령명세서 | 합계 = (15) 중 카드분 | 같음 | 정지 | **자동** |
| C4 | 23호 신용카드매출전표등 발행금액집계표 | 합계 = (3) 공급대가 + 카드·현금영수증 면세 매출(과세유형 18·23). 계산서 면세 매출(13)은 넣지 않는다 | 같음 | 정지 | **자동** |
| C5 | 22호 공제받지 못할 매입세액 명세서 | 사유별 합계 = (17). 사유 코드 공란 0 | 같음. 과세유형 54 행의 불공제사유가 비었거나 1~8 밖이면 정지 | 정지 | **자동** |
| C6 | 27호 건물등 감가상각자산 취득명세서 | 합계 = (12) | 같음 | 정지 | **자동** |
| C7 | 소득 29호 매입처별 계산서합계표 | 원천자료 면세 매입 합계와 같을 것. 본지 밖. 법인세법 제121조 제5항 · 소득세법 제163조 제5항 | 세금계산서 수취목록의 부가세 0원 합계와 대조한다. 수취목록이 없으면 확인으로 세운다 | 정지 · 원천 없으면 확인 | **자동** |
| C8 | 영세율 첨부서류 | (5)(6)이 있으면 영세율 매출명세서와 시행령 제101조 서류가 둘 다 있을 것 | 영세율 매출명세서를 장부에서 만들고, 제101조 서류(수출실적명세서 등)는 원천자료 유무를 확인한다 | 정지 | **자동** |

#### C8은 서식이 둘입니다

| 서식 | 근거 | 무엇 |
|---|---|---|
| 영세율 매출명세서 (별지 제29호서식) | 시행령 제91조 제2항 제12호 · 시행규칙 제62조 제10항 | 근거 조문별 금액. 합계 = (5)+(6). 장부에서 만든다 |
| 시행령 제101조 서류 | 시행령 제101조 제1항·제2항 | 유형별. 직수출은 수출실적명세서(별지 제40호서식). 받아 와야 한다 |

`rules/영세율_구분.csv`가 과세유형을 제101조 표에 연결합니다. 직수출은 제1호(수출실적명세서, 소포우편은 소포수령증), 내국신용장·구매확인서는 제3호, 용역의 국외공급은 제8호(외화입금증명서)입니다.

수출실적명세서는 수출신고번호·선적일자·외화금액·환율이 필요해 장부에서 못 만듭니다. 정지로 세우고 무엇을 받아야 하는지 적습니다. 안 내면 그 부분은 확정신고로 보지 않아(시행령 제91조 제3항 제1호. 예정신고는 시행령 제90조 제8항) 영세율과세표준을 신고하지 않은 것이 되고, 과소신고가산세에 그 영세율과세표준의 0.5퍼센트가 더해집니다(국세기본법 제47조의3 제2항 제2호). 리포트는 이 0.5퍼센트만 계산해 보여 줍니다.

#### 자주 갈리는 셋

1. 22호가 비어 있는 것이 맞을 수 있습니다. 세금계산서를 받아 (10)(12)에 넣었다가 (17)에서 빼는 건만 적습니다. 카드로 결제한 불공제는 (15)에 안 넣는 것으로 끝나 (17)로 올라가지 않습니다.
2. 면세 매입은 39호가 아니라 계산서합계표로 갑니다. 본지 매입란에도 안 올라갑니다.
3. 거래처별로 나눠 반올림하면 총액과 1원이 어긋납니다. 잔차를 가장 큰 거래처에 붙입니다.

### D. 신고서 고유 항목

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| D1 | 증빙 우선순위 | 세금계산서 발행 건이 (3)과 23호에 없을 것 | 세금계산서 발행 건을 사업자번호·금액으로 (3)과 23호에서 찾는다. 38호와 23호 양쪽 등재도 같이 본다 | 확인 | 검토자 |
| D2 | 중복 계상 | 같은 거래가 세금계산서와 카드로 두 번 없을 것. 매출·매입 양쪽 | 세금계산서와 카드 자료를 사업자번호·금액으로 맞춰 양쪽에 있는 건을 찾는다 | 정지 | 검토자 |
| D3 | 예정 대 확정 | 예정분 + 확정분 = 과세기간 전체 합계 | 예정신고서와 확정신고서 합계를 과세기간 전체 장부 합계와 비교한다 | 정지 | 검토자 |
| D4 | 확정신고 전용 란 | 예정신고서에 (19) 전자신고공제·(8) 대손·(24) 예정고지가 없을 것 | 예정신고서의 세 란에 금액이 있는지 본다 | 정지 | 검토자 |
| D5 | 발행공제 자격 | 법인이면 (20) = 0. 부가가치세법 제46조 제1항 제1호 가목 | 직원 작성본 (20)란을 본다 | 정지 | **자동** |
| D6 | 전자신고세액공제 금액 | (19) 전자신고분 5천원. 확정신고에만. 세무대리인이 신고하면 0 | 직원 작성본 (19)란 금액을 파라미터와 비교한다. 산식 검증(A4)만으로는 1만원이 들어가도 통과한다. 조세특례제한법 제104조의8 제2항·제3항 · 시행령 제104조의5 제3항·제4항 | 정지 | **자동** |

### E. 전기 대비 분석적 검토

과세기간 길이가 다르면 환산해서 봅니다. `rules/신고_파라미터.csv`의 「전기 과세기간 개월수」로 맞춥니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| E1 | 매출 증감률 | 월 평균 기준 전기 대비 ±30퍼센트 | 전기 신고서 (1)(3)(10)을 개월수로 환산해 비교한다 | 확인 | **자동** |
| E2 | 매입 증감률 | 같음 | 전기 신고서 (10)(15)를 개월수로 환산해 비교한다 | 확인 | 검토자 |
| E3 | 부담률 | 납부세액 ÷ 과세표준. 전기 대비 ±5퍼센트포인트 | 전기와 당기 부담률을 계산해 비교한다 | 확인 | **자동** |
| E4 | 불공제 비율 | 전기 대비 급변 시 표시 | (17) ÷ (10)을 전기와 비교한다 | 확인 | 검토자 |

### G. 원천자료·신고서 정합성

C 영역은 장부에서 만들어 본지와 맞춥니다. 장부와 신고서가 같이 빠뜨린 거래는 C가 0원으로 통과합니다. G 영역은 원천자료에서 만들어 본지에 맞춥니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| G1 | 홈택스 세금계산서 발급목록 | 발급목록 합계 = (1) | 홈택스 발급목록(tax_invoices 표의 매출분)을 합계 내어 (1)과 대조한다 | 정지 | 검토자 |
| G2 | 홈택스 세금계산서 수취목록 | 수취목록 합계 = (10) + (12) | 수취목록 합계를 (10)+(12)와 대조한다 | 정지 | 검토자 |
| G3 | 여신금융협회 카드매출 · 현금영수증 발행 | 카드매출·현금영수증 발행 합계 = (3) | 카드사 매출자료와 현금영수증 발행내역 합계를 (3)과 대조한다. 원천자료는 승인일, 장부는 공급시기라 분기 합계로 먼저 맞추고 안 맞는 달만 좁힌다 | 정지 | 자료 미확보 |
| G4 | 여신금융협회 사업용카드 · 현금영수증 수취 | 사업용카드·현금영수증 수취 합계 − 불공제분 = (15) | 카드 승인내역과 현금영수증 수취내역 합계에서 불공제분을 빼 (15)와 대조한다. 개인카드 결제분은 원천자료에 없다 | 정지 | 검토자 |
| G5 | 홈택스 계산서 수취목록 | 계산서 수취 합계 = 계산서합계표 | 수취목록의 부가세 0원 합계를 계산서합계표와 대조한다 | 정지 | 검토자 |
| G6 | 수출신고필증 · 외화입금증명 | 수출·외화입금 합계 = (6) | 수출신고필증과 외화입금증명서 합계를 (6)과 대조한다 | 정지 | 자료 미확보 |

### H. 세액 정확성

H1~H3은 매입매출장검토에 있습니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| H4 | 매출세액 대 과세표준 | ((1)+(3)+(4)) × 10퍼센트 = ㉮ 매출세액. (5)(6)은 세액 0 | 본지 란 값으로 계산해 비교한다. 과세표준에 영세·면세가 섞인 것과 세액을 손으로 넣은 것을 잡는다 | 정지 | 검토자 |
| H5 | 매입세액 대 매입 공급가액 | ((10)+(12)+(15)) × 10퍼센트 = (16) + (17) 환산치 | 본지 란 값으로 계산해 비교한다. 불공제를 (10)에서 빼 두 번 줄인 것을 잡는다 | 정지 | 검토자 |

리포트 끝 「검토 범위」에 40개가 전부 찍힙니다. 자동 항목은 검출 건수나 통과, 검토자 항목은 「검토자 수행 필요」, 자료 미확보 항목은 「자료 확보 후」입니다. **검토자 수행 필요는 통과가 아닙니다.**

## 실행 순서

### 1. 장부를 먼저 닫는다

[매입매출장검토](../매입매출장검토/SKILL.md)로 장부를 검토하고 수정분개를 반영해 수정 후 장부를 만듭니다. 실행 방법은 그 스킬 문서에 있습니다. 두 스킬은 서로 불러 쓰지 않아 하나만 설치해도 돕니다.

### 2. 직원 작성본을 읽는다

직원이 더존에서 뽑아 넘기는 것이 PDF입니다. 폴더에서 `신고서*작성본*.pdf`를 찾아 글자 좌표로 읽습니다. ① 신고내용 표 머리글의 「금액」과 「세액」이 가로로 어디 있는지 잡고, 숫자가 어느 쪽에 가까운지로 열을 정합니다. 줄 안의 숫자를 순서대로 집으면 빈 란(㉰ · (19) · (30))에서 어긋납니다.

더존 출력물은 2023. 3. 20. 개정 서식이라 (10-1)·(20-1)이 있고 그 뒤 번호가 하나씩 밀립니다. 개정 연도를 읽어 2026 서식 번호로 옮깁니다. 읽은 란 수를 화면에 찍습니다. 25란이 나와야 다 읽은 것입니다. 못 읽은 란은 0으로 채우지 않고 빼고 돌려줍니다. 서식이 다른 PDF면 알리고 멈춥니다. 엑셀이나 CSV는 PDF가 없을 때만 봅니다.

### 3. 자동 항목을 돌린다

```
python scripts/return_review.py <폴더>/수정후
```

A → B → C → D → E 순서입니다. 장부는 상계 없이 합계로 봅니다. 원건·취소·재발행이 세 행으로 있어도 그대로 더합니다. 불공제 세금계산서(54)는 (10)에 들어간 채로 (17)에서 한 번 뺍니다.

### 4. 검토자 항목을 본다

정지 판정 검토자 항목 열셋(B3 · B6 · B9 · B10 · D2 · D3 · D4 · G1 · G2 · G4 · G5 · H4 · H5)은 표의 「검토 방법」대로 회계사가 본지와 원천자료를 열어 대조합니다. 본 결과를 확인사항 표에 한 줄로 적습니다. 안 봤으면 「검토자 수행 필요」로 둡니다.

### 5. 판정한다

| 판정 | 다음 |
|---|---|
| 정지가 하나라도 | 신고하지 않습니다. 원인을 고치고 다시 돌립니다 |
| 확인만 남음 | 회계사가 읽고 판정합니다 |
| 전부 통과 | 회계사 서명 후 신고합니다 |

### 6. 직원 작성본이 없으면 `make_return.py`

내가 장부에서 신고서를 뽑는 경우입니다. 대조할 것이 없으니 본지를 그려 PDF로 내는 것까지만 합니다. 별지 제21호서식 원본 PDF(`assets/`)에 값만 얹습니다.

```
python scripts/make_return.py <폴더> [산출폴더]
```

`매입매출장_*.xlsx` 파일 하나를 신고 단위 하나로 봅니다. 파일 이름의 꼬리표(`2026-1기예정` · `2026-1기확정`)로 신고기간과 예정·확정을 정합니다. 집계와 본지 계산식은 `return_review.py`의 함수를 그대로 부릅니다. 전자신고세액공제는 납세자가 직접 전자신고하는 확정신고에만 들어갑니다(조세특례제한법 제104조의8 제2항 · 시행령 제104조의5 제3항). `신고_파라미터.csv` 의 세무대리인 신고가 「예」면 0입니다.

같은 꼬리표의 `일반전표_*.xlsx`가 있으면 확인 시트에 일반전표에만 남은 비용(접대비 · 차량유지비 · 여비교통비)을 세웁니다. 매출 총액 대사는 하지 않습니다. 매출은 전부 매입매출전표로 가고 일반전표에 수익 계정이 없는 것이 정상입니다.

## 산출물

엑셀은 작업용, PDF는 서명·보관본입니다. 제출은 홈택스 전자신고나 더존 전송이고 여기 PDF는 검토·보관본입니다.

| 파일 | 무엇 |
|---|---|
| `신고서_<기간>.pdf` | 1쪽은 별지 제21호서식 그대로 · 2쪽은 직원 대비 란별 차이와 검토 결과 · 서명란 |
| `부속명세_<기간>.pdf` | 1쪽 본지 대사 · 2쪽부터 서식 8종 그대로 (한 서식에 한 쪽) |
| `본지_대사_<기간>.xlsx` · `부속명세_<기간>.xlsx` | 작업용 |

서식은 `scripts/form21.py`와 `scripts/attach_forms.py`가 그립니다. 본지는 별지 제21호서식(2026. 3. 20. 개정)입니다. 서식이 개정되면 이 두 파일만 고칩니다. HTML로 그린 뒤 Edge나 Chrome(리눅스는 chromium 도)으로 인쇄합니다. 둘 다 없으면 HTML만 남기고 알립니다. 그 HTML 을 브라우저로 열어 인쇄하면 같습니다.

`make_return.py` 의 신고서 PDF 는 다르게 만듭니다. 국가법령정보센터에서 받은 별지 제21호서식 원본(`assets/별지21호_일반과세자_부가가치세신고서.pdf`, 문서 속성만 지움)을 깔고 숫자만 칸에 얹습니다. 서식이 개정되면 `python assets/_받기.py` 로 새 판을 받고 테스트를 다시 돌립니다. 한글 글꼴은 맑은 고딕 · Apple SD Gothic Neo · 나눔고딕 · Noto Sans CJK 순서로 찾고, 없으면 PyMuPDF 에 든 CJK 글꼴을 씁니다. `VAT_FONT` 에 글꼴 파일 경로를 주면 그것을 먼저 씁니다.

| 부속 서식 | 개정 |
|---|---|
| 별지 제38호서식(1) 매출처별 세금계산서합계표(갑) | 2024. 3. 22. |
| 별지 제39호서식(1) 매입처별 세금계산서합계표(갑) | 2024. 3. 22. |
| 별지 제16호서식(1) 신용카드매출전표등 수령명세서(갑) | 2019. 3. 20. |
| 별지 제23호서식 신용카드매출전표등 발행금액 집계표 | 2019. 3. 20. |
| 별지 제22호서식 공제받지 못할 매입세액 명세서 | 2026. 3. 20. |
| 별지 제27호서식 건물 등 감가상각자산 취득명세서 | 2025. 7. 4. |
| 별지 제29호서식 영세율 매출명세서 | 2023. 3. 20. |
| 소득세법 시행규칙 별지 제29호서식(1) 매입처별 계산서합계표 | 2023. 3. 20. |

서식 3번 「전자세금계산서 외 발급분 명세」는 전자분만 있으면 원래 비웁니다. 검토에는 거래처별 명세가 있어야 해서 그 칸에 적고 아래에 왜 적었는지 한 줄 붙입니다.

## 규칙 파일

`rules/` 네 파일입니다. 엑셀에서 고칩니다. 법이 바뀌면 `신고_파라미터.csv`를 고칩니다. 스크립트를 고치지 않습니다.

| 파일 | 무엇 |
|---|---|
| `진단항목.csv` | 검토항목 40개의 번호 · 영역 · 검토 내용 · 검토 방법 · 판정 · 수행 |
| `고정자산_계정.csv` | (12)란과 27호로 가야 하는 계정코드 |
| `신고_파라미터.csv` | 회사명 · 사업자등록번호 · 대표자 · 주소 · 전자신고세액공제 금액 · 세무대리인 신고 여부(예면 (19)는 0) · 법인 여부 · 전기 개월수 · 임계값 · 업태·종목. 공개판은 회사명만 `(주)예시상사` 로 두고 식별 칸은 비워 두었습니다. 고객사마다 채웁니다 |
| `영세율_구분.csv` | 과세유형 → 근거 조문 · 제101조 첨부서류 · 그 서류를 만들 원천자료 표 |

## 하면 안 되는 것

- 장부 검토를 건너뛰고 신고서부터 보기
- 부속명세 합계가 안 맞는데 본지 숫자를 손으로 맞추기
- 카드 불공제를 22호에 적기
- 면세 매입을 39호에 넣기
- 영세율 매출명세서만 내고 수출실적명세서를 빠뜨리기
- 과세기간 길이가 다른 전기와 그냥 비교하기
- 「검토자 수행 필요」를 통과로 읽기
- 확인 판정을 안 읽고 넘어가기

## 한계

- 직원 작성본 PDF 읽기는 더존 출력물(2023. 3. 20. 개정 서식 포함)에 맞춰져 있습니다. 다른 프로그램의 PDF 는 읽은 란 수를 꼭 확인합니다. 25란이 안 나오면 CSV 로 옮겨 넣습니다.
- `return_review.py` 는 확정신고로 보고 전자신고세액공제를 넣습니다. 예정신고를 검토할 때는 D4 를 회계사가 봅니다.
- 본지 가산세 (29)는 0 으로 둡니다. C8 의 0.5퍼센트는 리포트에 참고로만 적습니다.
- 23호 집계표는 신용카드와 현금영수증을 나누지 않고 ⑥ 칸에 합쳐 적습니다. 합계는 맞지만 칸별 금액은 회계사가 나눕니다.

## 경계

리뷰는 반드시 전문가가 합니다. 스킬은 볼 것을 모아 줄 뿐이고 판정과 서명은 회계사가 집니다. 스킬이 통과시킨 것도 표본으로 봅니다. 감사 조서와 같은 구조입니다. 절차는 표준화하고 판단은 서명자가 집니다.
