시스템 설명

Dalpamon이 만든 것 · 로직과 처리 흐름
개인경비 정산 자동화 · 성화 × Dalpamon

영수증을 정확히 읽고, 회사 규칙대로 자동으로 판단합니다

핵심 설계는 하나입니다 — 읽기(AI)판단(규칙)을 분리했습니다. 아래는 시스템이 영수증 한 장을 어떻게 처리하는지, 모든 로직 게이트를 그림으로 풀어 설명합니다.

목차 전체 흐름핵심 원칙개선 전후 입력 처리1단계 · 추출2단계 · 규칙엔진 로직 게이트학습검토 판정 엑셀 출력신뢰성 · 보안
01 · Overview

전체 흐름 — 영수증 한 장이 거치는 길

입력
사진·PDF·카드내역
전처리
고해상도·대비 보정
① 추출
글자만 정확히 읽기
② 규칙엔진
계정·한도 판단
검토
불확실 항목만 확인
엑셀
개인경비 + AP
02 · Principle

핵심 원칙 — 읽기와 판단의 분리

기존 도구는 AI 한 번에 "글자 읽기 + 계정 분류"를 동시에 시켰습니다. 두 일이 섞이면 오류도 섞입니다. 그래서 두 단계로 나눴습니다.

① 읽기 · AI가 담당

  • 영수증에 적힌 사실만 정확히 추출
  • 날짜 · 상호 · 금액 · 시각 · 품목
  • 불확실하면 신뢰도를 낮게 표시
  • 회계 규칙은 판단하지 않음

② 판단 · 규칙엔진이 담당

  • 성화 회계 규칙을 코드로 구현
  • 계정과목 · 한도 · 적요 자동 결정
  • 같은 영수증은 항상 같은 결과
  • 애매한 건만 AI 보조 + 사람 검토
이 분리 덕분에 결과가 예측 가능하고, 규칙이 바뀌면 그 부분만 고치면 됩니다. AI가 규칙을 "기억하길" 바랄 필요가 없습니다.
03 · Before / After

무엇이 달라졌나

기존 방식

  • 이미지를 1,280px·고압축으로 줄여 글씨가 뭉개짐
  • OCR + 분류를 한 번에 → 오류가 누적
  • 이미지만 지원 (PDF·카드내역 불가)
  • 응답 형식이 깨지면 그 영수증 통째로 실패
  • 고친 내용이 저장되지 않아 매달 반복

개선 후

  • 원본 해상도 유지 + 대비·기울기 보정
  • 읽기 → 규칙 판단 2단계 분리
  • 이미지 · PDF · 법인카드 .xls 지원
  • 정해진 형식(tool)으로 받아 파싱 실패 차단
  • 수정한 가맹점 계정을 학습해 다음 달 자동 적용
04 · Intake

입력 처리 — 세 가지 원천

영수증 사진

전처리 후 AI 비전으로 읽기. 한 장에 여러 영수증이면 각각 분리.

PDF 전자영수증

PDF 안의 텍스트를 직접 추출 → 사진보다 정확.

법인카드 .xls

헤더(일자·가맹점·금액)를 자동 인식해 행을 그대로 읽음. AI 호출 없이 처리.

05 · Stage 1 · Extract

1단계 · 추출 — 글자만 정확히

기존 전처리

긴 변 1,280px · JPEG 품질 0.4까지 압축
→ 감열지 작은 글씨가 뭉개짐

개선 전처리

원본 해상도 유지 · 흑백 + 명암 정규화 + 선명화
→ 흐린 영수증도 또렷하게

추출 단계가 뽑아내는 값 (각 값마다 신뢰도 0~1):

날짜 · 시각

결제 일자와 시각 (식대 판단의 기준)

상호 · 금액

가맹점명 + 부가세 포함 최종 결제금액

성격 힌트

식당/카페/택시/통신 등 거친 분류

신뢰도

낮으면 "검토 필요"로 표시

06 · Stage 2 · Rules

2단계 · 규칙엔진 — 계정 분류 지도

추출된 "성격 힌트"가 어떤 계정으로 연결되는지의 전체 지도입니다. 일부는 추가 게이트(시간·한도)를 거칩니다.

식당 · 편의점 · 배달앱 식대 규칙 적용복리후생비(직원식대)
회식 다수 인원 저녁복리후생비(회식대) · 한도 없음
카페 시간대 게이트직원식대(점심) 또는 음료대
통신사 대상·한도 게이트통신비(직원 통신비지원)
택시 · 카카오T 목적지·시간 게이트여비교통비 (외근/야근/해외출장)
버스 · 지하철 · KTX여비교통비(외근교통비)
주차 / 통행료 / 주유 / 대리차량유지비 (각 항목)
도서 구입복리후생비(자기개발비)
쇼핑몰 · 쿠팡 상품(샘플)견본비(샘플구입비)
택배 / 퀵서비스운반비 (택배·화물 / 퀵)
외부 거래처 + 인명 명시 최우선 규칙접대비(기타)
후기 · 별점 화면 결제정보 없음정산 제외
그 외 / 모름AI 보조 분류 → 검토
07 · Logic Gates

로직 게이트 — 핵심 판단 흐름

아래 점선은 "아니오 → 다음 판단"으로 내려가는 흐름입니다. 각 박스는 하나의 판단(게이트)이고, 초록 칩은 그때의 결정입니다.

식대 시간대 (점심/저녁 결정)

게이트 1결제 시각 12:00 ~ 13:30?
예 → 점심식대 조기공지 불필요
게이트 2결제 시각 18:00 이후?
예 → 저녁식대 조기공지 불필요
게이트 3그 외 시간대?
예 → 점심식대 · 조기공지 필요
기본값시각 불명 / 인식 불가
점심식대 · 조기공지 필요 (사용자 확인)

식대 금액 한도

게이트 1회식 성격인가?
예 → 전액 정산 (한도 없음)
게이트 2여러 명 식사 (인원 파악)?
예 → 인원수 × 10,000원 명단은 비고
기본1인 식사
10,000원 한도 초과 시 원금액을 비고에 기재

통신비

게이트 1통신비 지원 대상자인가?
아니오 → 접수 불가 (제외)
게이트 2관리자 직급인가?
예 → 한도 80,000원
기본일반 직원
한도 60,000원 초과분은 비고

택시 · 카카오T

게이트 1목적지가 공항인가?
예 → 여비교통비(해외출장여비)
게이트 2결제 시각 22:00 이후?
예 → 여비교통비(야근교통비)
기본낮 시간 외근
여비교통비(외근교통비)
최우선 규칙: 적요에 "외부 거래처명 + 인명"이 함께 있으면 식대보다 우선해 접대비(기타)로 분류합니다. 결제정보 없는 후기·별점 화면은 정산에서 제외합니다.
08 · Learning

학습 — 한 번 고치면 기억합니다

사용자가 계정 수정표에서 직접 변경
가맹점 → 계정 기억매핑 저장
다음 달 자동 적용같은 가맹점 자동 분류
한 번 고친 가맹점은 다음 달부터 같은 계정으로 자동 분류됩니다 — 가맹점명 기준으로 매칭합니다(상호가 다르게 인식되면 매칭되지 않을 수 있습니다). 학습 대상은 가맹점 → 계정 매핑뿐이며, 금액·한도는 매번 규칙엔진이 다시 계산합니다. 수정 이력은 서버에 저장되어 재배포 후에도 유지됩니다. (현재 파일 기반, 추후 DB로 확장)
09 · Review

검토 필요 판정 — 무엇이 노란 줄을 만드나

아래 중 하나라도 해당하면 "검토 필요"로 표시해 사람이 마지막으로 확인하게 합니다.

인식 신뢰도 낮음

이미지가 흐려 금액 등 신뢰도 0.7 미만

시간 불명 식대

점심/저녁 단정 불가 → 조기공지 필요

카페 계정 선택

직원식대/음료대 확인 권장

규칙 외 / AI 보조

규칙으로 확정 못해 AI가 보조 분류한 건

10 · Output

엑셀 출력 — 기존 양식 그대로

회사 원본 템플릿을 읽어 데이터 칸만 채웁니다. 셀 위치는 기존 도구와 동일합니다.

개인경비 양식 (.xlsx) — 8행부터

ABCDEFG
의미NO날짜계정코드계정명칭적요금액비고
예시105.03811100복리후생비(직원식대)점심식대9,000

F30 합계 수식 = SUM(F8:F29) 자동 유지 · 한 번에 최대 22건

AP 업로드 양식 (.xls) — 4행부터

ABCFGHIJL
의미계정코드부서코드0000KRW1금액0사번날짜+적요
예시811100283000000KRW19,0000SH25050105.03 점심식대
11 · Reliability & Security

신뢰성 · 보안 · 데이터 흐름

자동 재시도

일시 오류·과부하 시 2→5→10초 간격으로 재시도

형식 보장

정해진 스키마(tool)로만 응답받아 파싱 실패 차단

키 보호

API 키는 서버 환경변수에만. 브라우저·코드에 노출 없음

브라우저
영수증 업로드
서버
전처리·규칙·엑셀 생성
AI (추출만)
글자 읽기 응답
결과
표 + 엑셀
보안 권고: 기존 패키지에 API 키가 평문으로 포함되어 있었습니다. 해당 키는 폐기·재발급하시길 권장드립니다. 신규 시스템은 키를 서버에만 보관합니다.