---
name: 매입매출장검토
description: 직원이 작성해 놓은 매입매출장과 일반전표를 원천자료(주문·정산·세금계산서·카드·은행)와 대조해 검토 리포트와 더존 업로드용 수정분개를 만든다. 검토항목 32개(rules/진단항목.csv)가 정본이다. 결산 완결성 · 숫자 정합성 · 기간 귀속 · 분석적 검토 · 데이터 간 연결성 · 원천자료 정합성 · 세액·분류 정확성 7개 영역이고, 그중 10개는 스크립트가 자동으로 돌리고 나머지는 항목마다 적힌 검토 방법대로 회계사가 본다. 원건을 음수로 지우고 정건을 양수로 넣는 수정분개 2종과 근거표, 확인사항을 낸다. "매입매출장 검토", "분개장 검토", "장부 검토해줘", "직원이 만든 장부 봐줘", "전표 검토", "누락 없는지", "일반전표 잘못된 것", "수정분개 뽑아줘", "부가세 신고 전 장부 점검"이 언급되면 트리거.
---

# 매입매출장 검토

완성된 장부를 원천자료와 대조합니다. 분개를 만들지 않습니다.

결과는 회계사 검토 전 초안입니다. 판정과 수정분개 반영은 회계사가 확정합니다.

| 받는 것 | 내는 것 |
|---|---|
| 매입매출장 · 일반전표 | 검토 리포트 (검출 건 + 검토 범위) |
| 원천자료 (매출집계 · 정산 · 세금계산서 · 카드 · 현금영수증 · 은행) | 수정분개 2종 (더존 업로드 양식) |
| 마스터 (거래처 · 계정과목) · 전기 장부 | 수정분개 근거표 |
| `rules/` 다섯 파일 | 확인사항 |

## 빠른 시작

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

```bash
pip install -r requirements.txt
python tests/make_fixture.py out
python scripts/review.py out/오류판
python scripts/apply_fix.py out/오류판
python scripts/review.py out/오류판/수정후
```

첫 검토에서 정지 10건 · 확인 3건이 나오고, 수정분개를 반영한 뒤 다시 돌리면 정지 0건 · 확인 3건이 남습니다. 확인 3건은 증빙 수취와 마스터 등록이 필요한 것이라 수정분개로 닫히지 않습니다. `out/깨끗한판` 은 검출 0건입니다. 정지가 남아 있으면 `review.py` 의 종료 코드가 1 입니다. 테스트는 `python -m pytest tests`.

## 원칙

1. 숫자는 스크립트가 셉니다. 합계를 머리로 내면 다음 달에 다르게 냅니다.
2. 수정분개를 만들 뿐 원장에 적용하지 않습니다. 회계사가 보고 더존에 올립니다.
3. 못 정한 것은 확인사항으로 올립니다. 추측으로 0건을 만들지 않습니다.
4. 검토항목 밖의 검사를 만들지 않습니다. 필요하면 `rules/진단항목.csv`에 행을 먼저 추가합니다.

## 용어

| 용어 | 뜻 |
|---|---|
| 판정 정지 | 고치기 전에는 신고서 산출로 넘어가지 않는다. 회계사가 보기 전에는 안 넘어간다는 뜻이다 |
| 판정 확인 | 회계사 판단이 필요하다. 판단 결과를 `rules/`에 적어 다음 달과 다음 고객사에 승계한다 |
| 수행 자동 | `scripts/review.py`가 대조해 결과를 리포트에 낸다 |
| 수행 검토자 | 스크립트가 없다. 회계사가 「검토 방법」대로 자료를 열어 대조하고 결과를 확인사항에 한 줄로 적는다. 기록이 없으면 리포트에 「검토자 수행 필요」로 남는다 |
| 수행 자료 미확보 | 필요한 원천자료가 없어 지금은 못 한다 |

## 검토항목

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

### A. 결산 완결성

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| A1 | 미분류 가계정 | 가지급금·가수금 등 가계정 잔액이 0이거나 사유 목록이 있을 것 | 일반전표에서 가계정 잔액을 뽑아 0인지 본다. 남았으면 건별 사유 목록을 받는다. 과세매입이 남아 있으면 그만큼 공제가 빠진다 | 확인 | 검토자 |
| A2 | 정산 보류·유보금 | 플랫폼 정산 보류금이 미수금으로 계상돼 있을 것 | 정산내역의 보류금 합계와 외상매출금(미수금) 잔액을 대조한다 | 확인 | 검토자 |
| A3 | 반품충당 | 월말 미배송·반품 진행분이 반영돼 있을 것 | 월말 기준 미배송·반품 진행 주문 목록과 반품충당 잔액을 대조한다 | 확인 | 검토자 |
| A4 | 부가세 대체 | 부가세예수금·대급금을 미지급세금으로 대체한 분개가 있을 것 | 일반전표에서 대체 분개를 찾는다. 없으면 시산표와 신고서가 어긋난다 | 확인 | 검토자 |
| A5 | 증빙 누락 | 플랫폼 수수료 세금계산서를 월별로 전부 수취했을 것 | 정산내역의 월별 수수료와 세금계산서 수취목록을 플랫폼별·월별로 대조해 없는 달을 낸다 | 확인 | **자동** |
| A6 | 시산표 | 차변 합계 = 대변 합계 | 일반전표 차변 합계와 대변 합계를 비교한다 | 확인 | 검토자 |

### B. 숫자 정합성

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| B1 | 정산 대사 | 정산 회차별 (총 판매금액 − 차감 항목) = 은행 입금액. 0원 | 정산내역을 회차별로 풀어 은행 거래내역의 입금액과 대조한다. 차감 항목은 취소·반품, 수수료, 광고비 상계, 보류금이다 | 정지 | 검토자 |
| B2 | 잔액 대사 | 장부의 현금·예금 증감 = 은행 잔액 증감 | 일반전표의 현금·예금 계정 월별 증감과 은행 거래내역 잔액 증감을 대조한다 | 정지 | 검토자 |
| B3 | 매출 대사 | 배송완료 기준 주문 합계 = 장부 매출 합계 | 주문내역을 배송완료일 기준으로 월별·채널별 집계해 장부 매출과 대조한다. F1이 같은 대조를 자동으로 한다 | 정지 | 검토자 |
| B4 | 매출 이중계상 | 같은 거래가 은행 입금과 매출 세금계산서로 두 번 없을 것 | 세금계산서 매출(유형 11)과 은행 입금을 거래처·금액으로 맞춰 매출이 두 번 잡힌 건을 찾는다 | 정지 | 검토자 |
| B5 | 불공제 반영 | 불공제 판정 가맹점이 공제 매입으로 없을 것 | 불공제 가맹점 규칙표의 가맹점이 공제 과세유형(57·61)으로 있는지 찾는다 | 정지 | **자동** |
| B6 | 매입 이중계상 | 같은 매입이 세금계산서와 카드 양쪽에 없을 것. 카드대금 결제가 매입으로 없을 것 | 같은 사업자번호·금액이 유형 51과 57 양쪽에 있는지, 은행의 카드대금 출금이 매입으로 있는지 찾는다 | 정지 | **자동** |
| B7 | 총액·순액 판정 | 중개 채널의 판매대금이 매출에 없을 것 | 채널 매핑표에서 순액(중개) 채널의 판매대금이 매출 행에 있는지 찾는다. 총액·순액 자체는 계약서를 보고 매핑표에 적는 판단이다 | 정지 | **자동** |
| B8 | 차대 균형 | 전표 단위로 차변 합계 = 대변 합계 | 일반전표를 전표별로 묶어 차변합과 대변합을 비교한다 | 정지 | 검토자 |
| B10 | 면세 매입 분리 | 면세 계산서가 과세유형 51로 없을 것 | 세금계산서 수취목록에서 부가세 0원인 계산서가 장부에 유형 51로 있는지 찾는다 | 정지 | **자동** |

B9는 결번입니다.

### C. 기간 귀속(컷오프)

매출 기준일은 배송완료일입니다(부가가치세법 제15조 제1항 제1호, 재화가 인도되는 때). 주문일·결제일·정산일은 쓰지 않습니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| C1 | 공급시기 기준 | 매출이 배송완료일 기준으로 계상돼 있을 것 | 매출집계의 배송완료일이 과세기간 밖인 건이 장부에 있는지 채널별로 찾는다. 부가가치세법 제15조 제1항 제1호 | 정지 | **자동** |
| C2 | 기간 경계 거래 | 전기 마지막 주와 당기 첫 주 거래를 건수·금액으로 따로 볼 것 | 주문내역에서 두 주간을 배송완료일 기준으로 뽑아 건수와 금액을 따로 본다 | 확인 | 검토자 |
| C3 | 기준일 결측 | 배송완료일이 빈 건을 미분류로 목록화할 것 | 주문내역에서 배송완료일 공란 건을 뽑아 목록으로 본다. 0건이어야 통과가 아니다 | 확인 | 검토자 |
| C4 | 정산회차 분할 | 월을 걸친 정산 회차가 월별로 나뉘어 있을 것 | 정산 회차의 기간이 월을 걸치면 장부에 월별로 나뉘어 계상됐는지 본다 | 확인 | 검토자 |
| C5 | 입금 시차 | 월말 매출의 익월 입금을 차이가 아니라 시차로 분류할 것 | 월말 매출의 입금이 익월 은행 거래내역에 있는지 확인해 시차로 분류한다 | 확인 | 검토자 |

### D. 분석적 검토

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| D1 | 계정별 증감률 | 전기 대비 ±30퍼센트 초과 계정을 볼 것 | 전기 장부와 계정별 합계를 비교해 임계를 넘는 계정을 본다 | 확인 | 검토자 |
| D2 | 신규 거래처 | 전기에 없던 거래처를 목록화할 것 | 전기 장부에 없는 거래처를 낸다. 전기 장부에 사업자번호 열이 있으면 사업자번호로, 없으면 거래처명으로 맞춘다 | 확인 | **자동** |
| D3 | 단일 금액 이상치 | 계정별 상위 5건을 볼 것 | 계정별 금액 상위 5건을 뽑아 증빙을 본다 | 확인 | 검토자 |
| D4 | 전기와 다른 분류 | 같은 거래처·품목의 계정이 전기와 같을 것 | 전기 장부와 거래처·품목별 계정을 대조해 바뀐 건을 본다 | 확인 | 검토자 |

### E. 데이터 간 연결성

식별자는 규칙으로 완전히 통일할 수 없습니다. 접두어·하이픈·공백은 규칙으로 잡고, 남은 미매칭은 목록으로 내어 사람이 봅니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| E1 | 식별자 표기 통일 | 주문번호·사업자번호 표기를 통일한 뒤 대조할 것 | 접두어·하이픈·공백을 정리한 뒤 매칭 건수가 얼마나 늘었는지 본다. 규칙으로 다 못 잡으므로 남은 미매칭 목록은 사람이 본다 | 확인 | 검토자 |
| E2 | 허용 오차 | 원 단위 반올림 차이를 임계로 따로 셀 것 | 임계값 이내 차이를 따로 세어 실제 차이와 구분한다 | 확인 | 검토자 |
| E3 | 거래처 마스터 | 장부의 사업자번호가 거래처 마스터에 전부 있을 것 | 사업자번호 공란과 마스터 미등록 거래처를 낸다 | 정지(공란) · 확인(미등록) | **자동** |

### F. 원천자료 정합성

F1과 F2가 이 스킬의 중심입니다. 나머지는 장부 안에서 보이지만, 누락과 전표 종류 오분류는 원천자료를 옆에 놓아야 보입니다.

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| F1 | 원천자료 누락 | 원천자료 매출 집계 = 장부 매출 집계. 일자·채널·과세구분 | 매출집계와 장부 매출을 월별·채널·과세구분으로 대조하고 차이가 있으면 일자로 좁힌다 | 정지 | **자동** |
| F2 | 전표 종류 오분류 | 부가세 걸린 매입이 매입매출전표에 있을 것. 고정자산이 고정자산매입란으로 가는 계정에 있을 것 | 세금계산서 수취목록과 매입매출장을 일자·사업자번호·금액으로 대조해 일반전표로 간 건과 품명에 고정자산이 적혔는데 일반매입 계정인 건을 낸다 | 정지 | **자동** |

### H. 세액·분류 정확성

| # | 검토 항목 | 검토 내용 | 검토 방법 | 판정 | 수행 |
|---|---|---|---|---|---|
| H1 | 세액 정합 | 행별 부가세 = 공급가액 × 10퍼센트 (11·17·22·51·57·61). 영세 16 · 면세 13·18·23 · 계산서 53은 세액 0 | 매입매출장 행별로 부가세와 공급가액의 10퍼센트 차이를 계산해 임계를 넘는 행과 영세·면세에 세액이 붙은 행을 본다 | 정지 | 검토자 |
| H2 | 과세유형 정합 | 증빙 종류·전자여부·결제수단과 과세유형 코드가 맞을 것 | 행별 증빙 종류(전자세금계산서·카드·현금영수증)와 과세유형 코드를 대조한다 | 정지 | 검토자 |
| H3 | 증빙 간 중복 | 같은 사업자번호·금액이 세금계산서·카드·현금영수증 중 둘 이상에 없을 것 | 세 원천자료에서 같은 사업자번호·금액이 일자 ±3일 안에 둘 이상 있는지 찾는다 | 정지 | 검토자 |

H1은 임계 안 반올림 잔차를 통과시킵니다. 영세·면세에 세액이 붙은 행은 잔차가 아니라 분류 오류이고 정지입니다.

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

## 실행 순서

### 1. 폴더를 확인한다

장부 두 벌과 원천자료가 한 폴더에 있어야 합니다. 표 이름은 파일 이름입니다.

| 있어야 하는 것 | 없으면 |
|---|---|
| `매입매출장_*.xlsx` (또는 `매입매출전표_*.xlsx`) | 검토할 것이 없습니다. 멈춥니다 |
| `일반전표_*.xlsx` | F2가 세금계산서 누락은 잡지만 일반전표 원건을 못 찾아 되돌리는 분개를 못 만듭니다 |
| `매출집계_*` 또는 `orders` | F1과 C1을 못 봅니다. 매출집계가 없으면 orders 를 같은 모양으로 접어 씁니다 |
| `tax_invoices` | 매입 대사가 전부 안 됩니다 |
| `card_approvals` · `cash_receipts` | E3의 사업자번호 보정값을 못 찾습니다 |
| `bank_transactions` | B6의 카드대금 이중계상을 못 봅니다 |
| `platform_settlements` · `tenant_settlements` | A5를 못 보고, B7의 원천 판매대금·수수료가 0으로 찍힙니다 |
| `partners` | E3의 마스터 미등록을 못 봅니다 |
| `journal_prior` | D2를 못 봅니다 |

빠진 것이 있으면 어느 항목이 못 도는지 말하고 진행합니다. 멈추지 않습니다. 원천이 없어 못 돈 자동 항목은 리포트 「검토 범위」에 「미실행」으로 찍히고 통과로 세지 않습니다.

엑셀(.xlsx)이든 CSV(BOM UTF-8)든 받습니다. 첫 줄이 열 이름이어야 하고, 스크립트가 읽는 열은 아래입니다. 다른 열은 있어도 됩니다.

| 표 | 읽는 열 |
|---|---|
| 매입매출장 | 더존 매입매출전표 업로드 양식 18열. 년도 · 월 · 일 · 매입매출구분(1-매출/2-매입) · 과세유형 · 신용카드사명 · 거래처명 · 사업자(주민)등록번호 · 공급가액 · 부가세 · 품명 · 전자세금(1.전자) · 기본계정 · 상대계정 등 |
| 일반전표 | 월 · 일 · 구분 · 계정과목코드 · 계정과목명 · 거래처 · 적요 · 차변 · 대변 |
| 매출집계 | 배송완료일 · 채널 · 과세구분(TAXABLE 등) · 취소여부(정상/취소) · 주문월 · 판매금액 |
| orders | 채널 · 주문일 · 배송완료일 · 판매금액 · 과세구분 · 취소여부 |
| tax_invoices | 작성일자 · 매출매입구분(매출/매입) · 사업자번호 · 상호 · 품목 · 공급가액 · 부가세 · 전자여부 |
| card_approvals | 승인일 · 가맹점명 · 사업자번호 · 승인금액 |
| cash_receipts | 거래일 · 사업자번호 · 상호 · 공급가액 · 부가세 |
| bank_transactions | 거래일자 · 적요 · 출금액 |
| platform_settlements | 정산일 · 플랫폼 · 판매수수료. 사업자번호 열이 있으면 그것으로, 없으면 partners 상호로 사업자번호를 찾아 세금계산서와 맞춥니다 |
| tenant_settlements | 판매일 · 판매대금 · 판매수수료_당사수익 |
| partners | 사업자번호 · 상호 |
| journal_prior | 거래처(또는 거래처명). 사업자번호 열이 있으면 그것으로 맞춥니다 |

채널 코드(D2C · PLTF · STORE · TENANT)와 과세구분 값은 합성 예시의 것입니다. 실제 고객사 값에 맞춰 `채널_매핑.csv` 를 고칩니다.

### 2. 규칙 파일을 확인한다

`rules/` 다섯 파일입니다. 전부 CSV라 엑셀에서 고칩니다. 고객사가 바뀌면 이 파일만 새로 씁니다.

들어 있는 `채널_매핑.csv` · `불공제_가맹점.csv` · `고정자산_계정.csv` 는 합성 예시입니다. 가맹점명 `○○백화점` · `○○주유소` 같은 이름은 예시용이라 실제 장부와 하나도 맞지 않습니다. 자기 고객사의 장부 거래처명 · 가맹점명 · 계정코드로 갈아 씁니다. 규칙이 장부와 하나도 안 맞으면 B5 · B7은 통과가 아니라 「미실행(규칙 미매칭)」으로 찍힙니다.

| 파일 | 무엇 | 누가 고치나 |
|---|---|---|
| `진단항목.csv` | 검토항목 32개의 번호 · 영역 · 검토 내용 · 검토 방법 · 판정 · 수행 | 검토 책임자 |
| `채널_매핑.csv` | 장부 거래처명이 어느 채널이고 총액인지 순액인지 | 회계사 |
| `불공제_가맹점.csv` | 불공제 가맹점과 사유 · 근거 조문 · 대체계정 | 회계사 |
| `고정자산_계정.csv` | 고정자산매입란으로 가야 하는 계정코드와 계정을 고를 품명 키워드 | 회계사 |
| `임계값.csv` | 일자별 허용오차 · 증감률 · 이상치 건수 · 세액 정합 임계 | 검토 책임자 |

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

```
python scripts/review.py <장부폴더>
```

E3 → F1 → C1 → B7 → B5 → B6 → F2 → B10 → A5 → D2 순서입니다. 연결성(E)과 누락(F)을 먼저 걷어내야 실제 차이가 표기 오류에 묻히지 않습니다.

### 4. 리포트를 읽는다

검출 건마다 다섯이 붙습니다.

```
[F2] 세금계산서를 받은 매입이 매입매출전표에 없다
  대상  : 마바운송 1건 1,000,000원
  기대  : 매입매출전표 51(면세 계산서는 53). 매입처별 세금계산서합계표에 올라간다
  실제  : 일반전표로 들어가 세금계산서 수취분 매입세액과 합계표에서 빠졌다
  볼 곳 : tax_invoices 와 매입매출장을 일자·사업자번호·금액으로 대사
  근거  : 진단항목 F2
```

「근거」는 이 스킬의 진단항목 번호나 법령 조문입니다. 「볼 곳」이 없으면 실패입니다. 차이 목록만 길게 나오면 회계사가 원천자료를 처음부터 뒤집니다.

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

정지 판정 검토자 항목 여덟(B1 · B2 · B3 · B4 · B8 · H1 · H2 · H3)은 표의 「검토 방법」대로 회계사가 자료를 열어 대조합니다. 본 결과를 확인사항 표에 한 줄로 적습니다. 안 봤으면 「검토자 수행 필요」로 둡니다. 확인 판정 검토자 항목은 신고 전에 한 번 보고 같은 방식으로 적습니다.

### 6. 수정분개를 반영하고 다시 돌린다

```
python scripts/apply_fix.py <장부폴더>
python scripts/review.py <장부폴더>/수정후
```

정지 0건이면 닫힌 것입니다. 검출 목록이 길게 나오는 것이 완료가 아닙니다.

확인 판정은 남습니다. 증빙을 받아 오거나 마스터에 등록해야 하는 것이라 수정분개로 안 닫힙니다.

## 수정분개 규칙

원건을 지우지 않습니다. 음수 행으로 지우고 양수 행으로 다시 넣습니다. 무엇을 왜 고쳤는지 장부에 남습니다.

| | 단위 | 왜 |
|---|---|---|
| 매출 | 월별 1줄 | 이미 일자별 집계라 월별 조정이면 서식이 맞습니다 |
| 매입 | 건별 | 매입처별 세금계산서합계표가 거래처별로 나갑니다 |

금액이 없는 보정(사업자번호 같은 것)은 덧붙이지 않고 원건의 그 칸을 고칩니다. 행을 하나 더 만들면 합계가 틀립니다.

산출은 더존 업로드 양식 그대로입니다. 수식을 넣지 않습니다.

## 하면 안 되는 것

- 원천자료를 안 읽고 장부 안에서만 검토하기. 누락은 그렇게 안 잡힙니다
- 차이 목록만 내고 「볼 곳」을 빼기
- 총액·순액 판단을 대사 차이로 처리하기. 계약서를 봐야 하는 판단입니다
- 불공제 사유를 한 문구로 뭉개기. 사유마다 근거 조문이 다릅니다
- 수정분개를 원장에 자동으로 적용하기
- 「검토자 수행 필요」를 통과로 읽기
- 확인 판정이 남았는데 완료라고 하기

## 경계

판정과 서명은 회계사가 합니다. 이 스킬은 볼 것을 모아 주고 고칠 것을 만들어 놓는 데까지입니다. 스킬이 통과시킨 것도 표본으로 봅니다.

다음은 [부가세신고서검토](../부가세신고서검토/SKILL.md)입니다. 장부가 맞아도 신고서는 틀릴 수 있습니다. 신고서 초안과 장부의 란별 대조는 그 스킬이 합니다.

## 자동 항목이 못 보는 것

- 매출 대사(F1 · C1)는 채널 단위로 합칩니다. 같은 채널 안에서 누락과 과다계상이 함께 있으면 서로 상쇄돼 덜 잡힙니다.
- C1은 원천에서 「주문월은 이번 기, 배송완료일은 다음 기」인 과세 매출을 찾고, 그 채널의 장부 매출이 원천보다 많을 때만 냅니다. 과세기간 첫머리(전기 주문 · 당기 배송)의 누락은 F1이 봅니다.
- F2의 고정자산 판정은 품명에 「고정자산」이 적힌 매입만 봅니다. 품명만 보고 자산인지 알 수 없는 매입은 D3(상위 건)에서 회계사가 봅니다.
- B6의 카드대금 판정은 은행 적요에 「카드」와 「대금 · 정산 · 결제」가 함께 있는 출금을 씁니다. 은행마다 적요가 다르니 처음 쓰는 은행이면 결과를 한 번 봅니다.
- 수정분개의 계정은 원건 · 규칙 파일에서 가져옵니다. 일반전표 원건을 못 찾은 F2 건은 계정을 비우고 확인사항에 「잠정」으로 올립니다. 더존에 올리기 전에 채웁니다.
