보험 도메인 심화 · 서류가 진짜 그 서류인가 · 실습
청구 증빙이 진짜 그 서류인지 확인하기
목표
청구 유형별 필수 서류를 규칙표로 점검하고, 파일 형식을 매직 바이트로 판정하고, 내용 해시로 다시 쓰인 서류를 찾아내고, 파일 이름의 개인정보와 제출 기한과 고아 파일까지 훑어 청구별 보완 요청 목록을 냅니다.
왜 중요한가
서류는 지급 판단의 근거인데, 그 파일이 정말 그 서류인지는 파일 이름이 말해 주지 않습니다. 스캐너가 만든 이미지에 pdf 확장자가 붙고, 같은 영수증이 이름만 바뀌어 두 청구에 쓰입니다.
접수 시점의 자동 점검은 값싸고, 지급 뒤에 발견하는 것은 아주 비쌉니다. 필요한 것은 규칙표 하나와 파일의 앞 몇 바이트, 그리고 해시뿐입니다.
이 접수함의 파일에는 NUL 바이트가 섞여 있습니다. grep 을 물리면 아무것도 못 찾거나 이진 파일이라는 말만 돌아옵니다. od 로 보거나 파이썬에서 바이트로 읽으세요.
단계
1. 재료 스크립트를 /root/docs/gen_docs.py 로 저장해 실행하고 /root/docs/claims.db 와 /root/docs/inbox 를 만듭니다.
2. 규칙표와 접수 기록을 맞대 빠진 서류를 /root/docs/missing.txt 에 적습니다.
3. /root/docs/sniff.py 로 형식을 판정하고 접수함 전체의 판정표를 /root/docs/filetypes.tsv 에 냅니다.
4. 내용 해시로 다시 쓰인 서류를 묶어 /root/docs/reuse.txt 에 적습니다.
5. 파일 이름에 실려 온 개인정보를 세어 /root/docs/namescan.txt 에 적습니다.
6. 제출 기한을 사고일에서 계산해 /root/docs/overdue.txt 에 적습니다.
7. 기록과 실물을 양방향으로 맞대 /root/docs/orphans.txt 에 적습니다.
8. 청구별 보완 요청 목록을 /root/docs/followup.json 에, 보고서를 /root/docs/docs_report.md 에 냅니다.
참고
- 형식 이름은 pdf, png, jpg, zip, unknown 다섯 가지만 씁니다. sniff.py 는 파일 경로 하나를 인자로 받아 형식 이름 한 줄을 냅니다.
- filetypes.tsv 는 한 파일에 한 줄이고, 탭으로 나뉜 세 칸입니다: 파일이름, 확장자(이름에서 뽑은 소문자), 판정한 형식.
- 제출 기한은 사고일부터 30일입니다. 이것은 이 실습의 가정이며 법정 기한이 아닙니다. 기한이 지났는지는 2026-09-17 을 오늘로 두고 셉니다.
- 파일 이름의 개인정보 판정 규칙: 한글 2자에서 4자가 들어 있으면 이름, 여섯 자리에 붙임표에 일곱 자리 숫자 모양이면 번호로 봅니다.
- sqlite3 는
sqlite3 -readonly /root/docs/claims.db "SELECT ..."로 붙습니다. 접수함은od -c /root/docs/inbox/K0001_claim_form.pdf | head -2로 들여다봅니다. - 흔한 실수: 확장자로 형식을 판정하기, 기한의 기산일을 접수일로 잡기, 기록과 실물을 한 방향으로만 맞대기, 보고서에 개인정보 값을 그대로 옮기기.
단계 8개
- 청구 표와 접수함 만들기
- 유형별 필수 서류 체크리스트 돌리기
- 확장자 말고 앞부분 바이트로 형식 가르기
- 같은 서류가 다시 쓰인 자리 찾기
- 파일 이름에 실려 온 개인정보 세기
- 기한을 사고일에서 세기
- 기록과 실물을 양방향으로 맞대기
- 청구별 보완 요청 목록 내기