데이터 흐름/02 — 07
여섯 단계: 올린다 → 나눈다 → 쪼개 저장 → 읽는다 → 검산한다 → 쌓는다
올린다
- 고객이 사이트에서 PDF를 끌어다 놓는다. 여러 건이 한 덩어리로 와도 된다(샘플: 4건 20쪽, 8건 37쪽).
- 받자마자 원본을 서류 창고에 그대로 보관하고 장부에 "누가 언제 무슨 파일(쪽수, 해시)"을 적는다. 이후 어떤 처리가 실패해도 원본은 남는다.
나눈다 (페이지 분류)
- 페이지마다 종류를 판정한다: 커머셜 인보이스 / 인보이스 상세 / 패킹리스트 / 패킹리스트 상세 / 모름.
- 판정 근거는 페이지 위쪽 큰 제목("COMMERCIAL INVOICE", "COMMERCIAL INVOICE DETAILS", "PACKING LIST", "PACKING LIST DETAILS").
- 큰 제목 "COMMERCIAL INVOICE"(상세 아님)가 나오면 새 건 시작. 다음 인보이스 직전까지가 한 건.
- 샘플에서 확인한 것: 한 건 = 인보이스 1장 + 인보이스 상세 1장(길면 더) + 패킹리스트 1장 + 패킹리스트 상세 1~3장. 건마다 장수가 다르다.
- 검사: 건마다 4종이 다 있는지 센다. 빠지면 그 건을 "사람 확인"으로 보낸다.
쪼개 저장 (건별 PDF)
- 한 건의 쪽들을 새 PDF 하나로 묶어 저장한다. 원본 쪽은 손대지 않는다(이미지 그대로 복사).
- 임시 파일명 규칙 미확정:
KPF_20260828014_BACO_#1.pdf 고객사_인보이스번호_수입자약칭_#손글씨건번호 KPF_읽기실패_케이피에프서류-4건_p06-10.pdf 인보이스 번호를 못 읽었을 때: 원본이름 + 쪽 범위
- 폴더:
고객사/올린날짜/. 장부에 "이 건은 원본 어느 파일의 몇 쪽~몇 쪽"을 남긴다. - 파일명에 필요한 인보이스 번호·수입자·손글씨 건번호는 이 단계에서 인보이스 1장만 먼저 읽어 얻는다(④의 본격 읽기와 별도).
읽는다 (OCR + 칸 뽑기)
- 샘플 PDF는 전부 글자층이 없는 팩스 스캔이다. 그래도 규칙은 유지한다: 글자층이 있으면 그대로 읽고, 없을 때만 OCR.
- 읽기 방식: AI 비전 모델에 페이지 그림과 JSON 스키마를 주고 칸을 뽑는다. 칸마다 신뢰도를 같이 받는다.
- 인보이스 상세는 P/O 묶음 단위로 읽는다. 묶음 하나 = P/O 번호 + 재질 규격 줄 + 품목 줄 + 그 묶음의 SUB TOTAL.
한 쪽에 묶음이 여러 개 있을 수 있고, 규격 줄은 묶음마다 다르다(그래서 규격은 품목 단위 값이다).
- 단가 기준은 표에서 읽는다. 오른쪽 위
UNIT PRICE PER 1,000 PCS또는PER 1 PCS. 통화(USD/JPY)도 함께. - 패킹리스트 상세에서 파렛트 줄(부품번호, 수량, N.WGT, G.WGT, LOT, HEAT)과 G.TOTAL(파렛트 수, keg 수, 무게).
부품별 소계는 서류에 없다 — 파렛트 줄을 부품별로 합해서 만든다.
- 인보이스 1장에서 인보이스 번호·날짜, 수출자, 수입자(APPLICANT 또는 BILL TO), 조건, P/O 번호,
손글씨(#건번호, 약칭, 포장수). 손글씨는 그 부분만 확대한 그림을 한 장 더 붙여 읽는다.
- 부품번호(PART NO) 칸이 통째로 빈 서류가 있다. 그때는 SIZE 로 인보이스와 패킹리스트를 맞춘다.
검산한다
| 검산 | 무엇을 잡나 |
|---|---|
| 수량 × 단가(÷ 표에 적힌 PER n) = 금액 | 자릿수·소수점 오독, 단가 기준 착각 |
| 품목 금액 합 = 소계 (P/O 묶음마다), 소계 합 + 운임 = 총계 | 줄 누락(소계 밑 묶음이 통째로 빠짐) |
| 인보이스 수량 = 패킹리스트 수량 (부품별, 부품번호가 없으면 사이즈별) | 두 서류 불일치, 세트 경계 오류 |
| 순중량 합 = 패킹 총계 · 파렛트 keg 합 = keg 총계 | 무게·포장수 오독, 줄 누락 |
| 손글씨 포장수 = 패킹 총계 keg 수 | 손글씨 오독 |
| 손글씨 건번호 = 쪼갠 순서 | 손글씨 7을 1로 읽는 오독 |
| 규격이 규격→HS 대응표에 있나 | 규격 오독, 새 규격(HS를 사람이 채워야 함) |
| 단가 기준이 PER 1,000 인가 · 통화가 USD 인가 | 서류마다 다른 기준(그대로 두고 사람에게 알린다) |
| 예상 건 수 = 쪼갠 건 수 · 건마다 서류 4종이 다 있나 | 쪼개기 실패 |
- 전부 통과한 칸은 자동 확정. 하나라도 걸리거나 신뢰도가 낮은 칸은 "사람 확인" 화면으로: 원본 그림의 그 부분을 확대해 옆에 보여주고 값을 고친다.
- 금액·수량처럼 틀리면 비싼 칸은 자동 확정 기준을 높게(0.95 이상), 비고성 칸은 낮게.
쌓는다 (엑셀 시트 추가)
- 고객사 엑셀 파일은 1개. 올릴 때마다 시트 한 장이 추가된다. 시트 서식은 "쿠시 업로드" 견본 그대로(열 17개).
- 시트 이름 임시 규칙:
YYYYMMDD_#건번호_인보이스번호미확정. - 동시에 두 건이 오면 줄 세워서 한 번에 하나만 쓴다(전용 writer). 쓰기 전 이전 버전을 보관한다.
- 고객은 같은 페이지에서 엑셀을 내려받는다. 사람 확인이 남은 건은 시트가 아직 안 붙고 "확인 대기"로 보인다.