Phase 6 · 회계 Document AI 실무

영수증 사진을 던지면 장부와 짝을 맞춘다, OCR + AI 증빙 처리기

회계사무소의 골칫거리 중 하나인 구겨진 종이 영수증 뭉치와 스캔된 세금계산서 PDF.
이러한 비정형 이미지에서 OCR로 글씨를 뽑아내고, LLM(AI)에게 의미를 부여하게 한 뒤, 기존 회계 장부(Excel/DB)와 금액/날짜를 대조하여 자동으로 짝을 맞추는(매칭) 파이프라인을 구축합니다.

예상 학습 시간 : 420분
난이도 : ★★★★★
사전 단계 : Excel 업무 자동화 심화 (Step 39)
다음 단계 : 41단계 - 이상/부정거래 자동 탐지 (예정)
01

왜 OCR과 AI의 결합이 필수적인가?

엑셀 파일은 컬럼이 나뉘어 있지만 영수증이나 세금계산서 이미지는 한낱 픽셀(점)들의 집합일 뿐입니다. 파이썬이 이 이미지를 다루려면 이미지 ➡️ 글자(OCR) ➡️ 의미 파악(AI) ➡️ 데이터베이스(DB)의 과정을 거쳐야만 비로소 '계산 가능한 숫자'가 됩니다.

[영수증.jpg] ──(OCR)──> "ABC상사\n35,000\n식대" ──(AI)──> { "supplier": "ABC상사", "amount": 35000 } │ (Python 검증) ↓ 장부 데이터 검색 및 매칭
02

EasyOCR로 이미지에서 글자 뽑아내기

파이썬에서 손쉽게 딥러닝 기반 OCR을 돌릴 수 있는 EasyOCR을 사용해 봅니다.

🐍 python
import easyocr

reader = easyocr.Reader(["ko", "en"])
result = reader.readtext("receipt.jpg")

texts = []
for item in result:
    box, text, confidence = item
    texts.append(text)
    if confidence < 0.6:
        print(f"[주의] 인식률이 낮습니다: {text}")

full_text = "\n".join(texts)

💡 신뢰도(Confidence): 기계가 글씨를 읽었지만 얼마나 확신하는지에 대한 수치입니다. 이 값이 낮으면 자동 승인 로직에서 무조건 튕겨내어 회계사 육안 검토(Human Review) 대기열로 보내야 합니다.

03

AI에게 구조화(JSON Extraction) 명령하기

OCR은 그저 "ABC마트 35,000" 이라는 단순 텍스트 덩어리를 뱉습니다. 이것이 '공급가액'인지 '합계금액'인지는 AI에게 맥락을 파악하게 하여 반드시 JSON 포맷으로 뽑아냅니다.

# AI 프롬프트 예시
prompt = f"""
다음 영수증 OCR 결과를 분석하여 지정된 JSON 양식으로 출력하라.
OCR 결과: {full_text}

형식:
{{
  "document_type": "영수증/세금계산서/카드전표 중 택1",
  "supplier": "거래처명",
  "transaction_date": "YYYY-MM-DD",
  "supply_amount": 숫자,
  "vat": 숫자,
  "total_amount": 숫자
}}
"""
04

가장 중요한 원칙: 계산과 검증은 파이썬의 몫

AI가 완벽한 포맷의 JSON을 주었다 하더라도 그 안의 "계산"이 맞다고 맹신해선 절대 안 됩니다.

공급가액 검증 로직 필수 적용

AI가 가끔 부가세 산식을 틀리게 뱉거나(환각), OCR 오탈자 때문에 "total_amount": 120,000 인데 "supply_amount": 100,000, "vat": 10,000이라고 반환할 수 있습니다.
무조건 파이썬에서 if data["supply_amount"] + data["vat"] != data["total_amount"]: 로직을 거쳐 필터링해야 대형 회계 사고를 막습니다.

05

장부 데이터와 증빙 매칭 알고리즘

AI가 완벽히 추출/검증한 영수증 데이터(35,000원, ABC마트)가 실제로 기존 엑셀 장부(또는 DB)에 입력된 지출 내역과 존재하는지 짝을 맞춰보는 과정입니다.

# DB DataFrame(df)에서 완전 일치(Exact Match) 찾기
matched = df[
    (df["customer"] == data["supplier"]) &
    (df["transaction_date"] == data["transaction_date"]) &
    (df["amount"] == data["total_amount"])
]

💡 실무 팁 (Fuzzy Matching): 현실에서는 "ABC 마트""ABC마트"처럼 띄어쓰기가 다르거나, 영수증 날짜와 카드 승인일자가 하루 이틀 차이 나는 경우가 허다합니다. 이럴 땐 텍스트 공백을 지우거나, abs(df["date"] - target_date) <= timedelta(days=3) 같은 오차 허용 규칙(Rule)을 도입하여 매칭 점수를 부여해야 자동화율이 올라갑니다.

06

비정형 문서 처리 파이프라인 아키텍처

500장의 증빙 사진을 던졌을 때의 시스템 흐름도입니다.

업로드 (500건) │ ▼ OCR (글자 인식) ────> [신뢰도 60% 미만] ─────┐ │ │ [신뢰도 통과] │ ▼ │ AI 문서 자동 분류 (세금계산서/영수증) │ │ │ AI JSON 항목 추출 │ │ │ Python 계산 검증 (오차발생) ──────────────┐ │ │ │ │ 장부 DB 대조 (오차허용범위 내 매칭) │ │ │ │ │ [매칭 성공 438건] [매칭 실패 52건/오류 10건] ▼ ▼ [자동 승인] [Human-in-the-loop 검토 대기열]
07

Human-in-the-loop (사람의 개입)

AI 회계 시스템은 모든 것을 100% 자동화하려는 욕심을 버려야 합니다. 위 파이프라인에서 탈락한(매칭 실패, 계산 불일치, 텍스트 흐림 등) 예외 건들은 UI 대시보드의 '검토 필요' 리스트로 띄워 회계사가 눈으로 확인하고 승인/반려 버튼을 누르게 설계해야 비로소 상용화 가능한 신뢰성 있는 SaaS 플랫폼이 됩니다.

08

41단계 예고: 파이썬을 활용한 회계 부정(이상)거래 탐지

이제 종이 영수증까지 디지털 DB로 빨아들이는 완벽한 데이터 파이프라인이 갖춰졌습니다!

다음 41단계부터는 단순 업무 자동화를 넘어, "평소 10만 원이던 식대 계정이 갑자기 5,000만 원으로 튀는 현상"이나 "주말 심야에 특정 유흥업소에서 집중적으로 긁히는 법인카드 패턴" 등을 통계 기반 머신러닝과 룰(Rule) 기반 알고리즘으로 잡아내는 고도의 '회계 이상거래 및 부정 탐지 시스템'으로 진입합니다.

Step 39 : 엑셀 업무 자동화 심화 Phase 7 공사중