관세 정산서류, 이제 자동으로 정리한다
귀찮음의 시작
1688에서 물건을 들여오면 관세사무소에서 메일이 온다.
“정산내역 송부드립니다.”
PDF 첨부파일.
열어보면 관세, 부가세, 통관수수료가 적혀있다.
이걸 원가계산서에 옮겨 적어야 한다.
한 건이면 괜찮다.
근데 주문이 쌓이면?
이메일 열고, PDF 다운받고, 숫자 찾고, 엑셀 열고, 입력하고.
이게 쌓이면 진짜 귀찮다.
자동화하면 되잖아
Claude Code에게 물었다.
“관세사무소 이메일에서 PDF 자동으로 받아서 파싱할 수 있어?”
“응 만들어봐.”
30분 뒤.
./run.sh
터미널에 결과가 쏟아진다.
📧 발견된 이메일: 6건
📨 [대교관세사무소] 520404033870 정산내역
✅ 다운로드: 정산서류.pdf
📄 처리 중: 정산서류.pdf
B/L: 520404033870
관세+부가세: 2,110원
통관수수료: 12,000원
된다.
어떻게 만들었나
1. Gmail에서 PDF 다운로드
Gmail API로 특정 발신자의 이메일을 검색한다.
query = 'from:dk2@dkcus.com subject:정산내역 has:attachment'
대교관세사무소에서 온 메일 중 첨부파일이 있는 것만.
PDF 파일을 inbox/ 폴더에 저장.
이미 처리한 건 건너뛴다.
2. PDF 파싱
pdfplumber로 PDF를 열어서 텍스트를 추출한다.
정규식으로 필요한 숫자를 찾는다.
# B/L 번호
bl_match = re.search(r'B/Ls*(?:번호|No)s*[:s]*(d{12})', text)
# 통관수수료
fee_match = re.search(r'통관s*수수료s*([0-9,]+)', text)
# 관세+부가세 (납부금액)
payment_match = re.search(r'납기내s*d+s+([0-9,]+)', text)
관세사무소마다 PDF 양식이 다를 수 있다.
우리 관세사 양식에 맞춰서 패턴을 조정했다.
3. 한 줄 실행
./run.sh # 다운로드 + 파싱
./run.sh fetch # 다운로드만
./run.sh parse # 파싱만
./run.sh test PDF # 테스트
끝.
결과물
6건의 정산서류가 자동으로 정리됐다.
| B/L 번호 | 관세+부가세 | 통관수수료 | 품명 |
|---|---|---|---|
| 520404033870 | 2,110원 | 12,000원 | 매트 |
| 520404033310 | 14,690원 | 12,000원 | 기타 |
| 520404033553 | 3,150원 | 12,000원 | 모자 |
| 591451025623 | 10,650원 | 12,000원 | 가방 |
| 591451023140 | 3,910원 | 12,000원 | 플라스틱 |
| 591451021751 | 19,910원 | 12,000원 | 의류 |
이제 이메일 확인 안 해도 된다.
터미널에서 한 줄이면 끝.
배운 것
귀찮음은 자동화의 신호다.
매번 반복하는 작업이 있다면,
그건 자동화할 수 있다는 뜻이다.
Claude Code와 대화하면서 만들었다.
코드를 한 줄씩 설명하지 않아도 된다.
“이거 해줘”하면 만들어준다.
막히면 같이 디버깅한다.
PDF 양식이 이상해서 숫자가 안 잡혔는데,
raw text 출력해서 패턴 찾고 수정했다.
혼자 코딩하는 것보다 빠르다.
다음 단계
- 원가계산서 자동 업데이트
- 넥스트배송 카톡 알림도 파싱
- 크론잡으로 매일 자동 실행
1인 사업자의 무기는 자동화다.
반복 작업을 없애면 시간이 생긴다.
그 시간에 더 중요한 일을 할 수 있다.
작은 자동화가 쌓이면 큰 차이가 된다.
— Bloom late, but stronger. —
