资讯详情

AI 识别票据之后:金额、币种和原文证据要分开校验

📅 2026/10/25 20:35:07 | 华诺云谱 👁 阅读
AI 识别票据之后:金额、币种和原文证据要分开校验
票据图片变成JSON只完成录入的一部分。界面显示total为1200时用户还需要知道它是哪一种币种模型有没有把“1.200,00”按另一种格式解释。比“全自动记账”更值得做好的是让人快速发现不该自动入账的字段。2026年10月19日Cloudflare发布Clairic提取模型预览介绍从非结构化输入中提取数值的能力。发布说明 本文没有调用该模型也不复现厂商准确率。即使换成专门模型字段进入财务系统之前的应用校验仍然存在。保存值也保存出处我会把字段拆为原文、规范值、币种、页码和复核状态。原文“1.200,00 €”可规范为“1200.00”但转换规则必须来自明确地区或人工选择不能简单删除全部逗号。金额关系也需要语义。税额可能已经包含在单价里折扣、运费可能单列。没有文档含义拿两个字段相加也可能是在验证错误公式。用户点击金额应该回到原文区域并看到币种及转换方式。置信度可以帮助排序不能代替原文缺少出处时直接显示“缺证据”。拒绝猜测地区下面只支持事先指定的两种格式拒绝不符合分组约定的输入不处理货币符号也不自动猜测地区。from decimal import Decimal import re def amount(raw, style): patterns { en: r(?:\d|\d{1,3}(?:,\d{3}))\.\d{2}, de: r(?:\d|\d{1,3}(?:\.\d{3})),\d{2} } if style not in patterns or not isinstance(raw, str): raise ValueError(unsupported format) if not re.fullmatch(patterns[style], raw): raise ValueError(needs human review) value raw.replace(,, ) if style en else raw.replace(., ).replace(,, .) return Decimal(value) assert amount(1,200.00, en) Decimal(1200.00) assert amount(1.200,00, de) Decimal(1200.00) try: amount(12,34.56, en) raise AssertionError(invalid grouping accepted) except ValueError: pass print(amount: 3 cases passed)保存为amount.py运行python3 amount.py。从字符串构造Decimal可以避免先经过二进制浮点数再带入误差。Python文档解释了其十进制计算和舍入机制。负数、零位小数币种、贷项通知和舍入政策仍须另行设计。结构正确也可能认错数字Structured Outputs文档区分JSON模式与受Schema约束的输出。票据上的“8”被认成“3”仍可能满足数字字段。UI不能把结构校验的绿勾解释成财务正确。更稳妥的路径是先检查结构再检查格式与字段关系需要复核的内容进入人工队列。只有确认后的结果才能导出修改保留前后值与原因。本地例子只验证金额解析规则没有测试OCR、模型、真实票据集合、财务软件集成或地区税务适用性。让每项检查的范围可见才能知道这段代码适合放在系统的哪一层。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑