确认理赔单证真的是那份单证
目标
用规则表检查各索赔类型的必备材料,用魔数判定文件格式,用内容哈希找出被重新使用的材料,并检查文件名中的个人信息、提交期限和孤立文件,最后输出各笔索赔的补充要求清单。
为什么重要
材料是赔付判断的依据,但这个文件是否真的是那份材料,文件名并不会告诉你。扫描仪生成的图片被加上了 pdf 扩展名,同一张收据只改了名字就用在了两笔索赔中。 在受理时点做自动检查很便宜,而到赔付之后才发现,代价非常高。所需要的只是一张规则表、文件开头的几个字节,以及哈希。 这个收件箱中的文件混有 NUL 字节。使用 grep 的话,要么什么也找不到,要么只返回说这是二进制文件。请用 od 查看,或者在 Python 中按字节读取。
步骤
- 把材料脚本保存为 /root/docs/gen_docs.py 并运行,生成 /root/docs/claims.db 和 /root/docs/inbox 文件。
- 把规则表与受理记录对照,将缺失的材料写入 /root/docs/missing.txt 文件。
- 用 /root/docs/sniff.py 判定格式,把整个收件箱的判定表输出到 /root/docs/filetypes.tsv 文件。
- 用内容哈希把被重新使用的材料归为一组,写入 /root/docs/reuse.txt 文件。
- 统计文件名中携带的个人信息,写入 /root/docs/namescan.txt 文件。
- 从事故日期计算提交期限,写入 /root/docs/overdue.txt 文件。
- 对记录与实物做双向比对,写入 /root/docs/orphans.txt 文件。
- 把各笔索赔的补充要求清单输出到 /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查看。 - 常见错误:用扩展名判定格式,把期限的起算日定为受理日期,只从一个方向比对记录与实物,在报告中原样转录个人信息的值。
创建索赔表和收件箱
把材料脚本保存为 /root/docs/gen_docs.py 并运行,创建 /root/docs/claims.db 和 /root/docs/inbox 文件。
先创建 /root/docs,然后在其中用 python3 运行。表有 claim、doc_rule、submission 三张,收件箱中会生成 189 个文件。不要修改生成的文件。
运行各类型必备材料的检查清单
把规则表与受理记录对照,在 /root/docs/missing.txt 中写入 incomplete_claims、missing_docs、missing_inj、missing_ill、missing_med。
doc_rule 保存了每种索赔类型所需的材料种类。对每笔索赔,从这个集合中减去 submission 里已有的种类,剩下的就是缺失的。各类型的数量,是把有缺失材料的索赔按类型拆分后统计出的值。
不看扩展名,用开头的字节区分格式
创建 /root/docs/sniff.py 文件,并把整个收件箱的判定表输出到 /root/docs/filetypes.tsv 文件。
PDF 以 %PDF- 开头,PNG 以十进制 137 80 78 71 13 10 26 10 开头,JPEG 以 FF D8 FF 开头,ZIP 以 PK 03 04 开头。都不符合的是 unknown。文件一定要按字节方式打开。表中的文件名、扩展名、判定三栏用制表符分隔。
找出同一份材料被再次使用的地方
用内容哈希把相同的文件归为一组,在 /root/docs/reuse.txt 中写入 reused_groups、reused_files、affected_claims。
文件名可以随意更改,所以用 sha256 来分组。只统计有两个以上文件的组。涉及的索赔数,是通过 submission 的 filename 回溯,统计不同的 claim_id 得到的值。
统计文件名中携带的个人信息
在 /root/docs/namescan.txt 中写入 name_in_filename、rrn_in_filename、flagged_files。
无论内容遮得多好,文件名都会原样留在清单界面、备份索引和错误日志中。包含 2 到 4 个韩文字符的视为姓名,形如六位数字、连字符、七位数字的视为编号。flagged_files 是命中二者之一的文件数。
从事故日期起计算期限
在 /root/docs/overdue.txt 中写入 late_docs、late_claims、overdue_missing。
起算日是事故日期,而不是受理日期。统计自事故日期起超过 30 天才提交的材料,再统计至少有一份这类材料的索赔。overdue_missing 是既有缺失材料、期限又在 2026-09-17 之前已经过去的索赔数。
对记录与实物做双向比对
在 /root/docs/orphans.txt 中写入 orphan_files、missing_files、claims_with_missing_file。
只存在于收件箱中的文件,与只存在于记录中的文件,是不同的事故。前者是留下了不知属于谁的个人信息,后者是赔付依据空缺。请从两个方向分别求两个集合的差集。
输出各笔索赔的补充要求清单
在 /root/docs/followup.json 中放入每笔索赔的 missing、no_file、reused、type_mismatch,并在 /root/docs/docs_report.md 中写一份分为五节的报告。
把四种原因在每笔索赔内分开书写。没有任何原因的索赔不放入清单。文件列表要排序后放入。报告的五个小节标题均为韩文,依次意为“已确认的内容”“缺失的材料”“格式与重复使用”“文件名中的个人信息”“建议”。报告中不要转录个人信息的值。