返回结果
# ใบกำกับภาษี / TAX INVOICE
**ผู้ขาย** บริษัท ศตวรรษการค้า จำกัด (สำนักงานใหญ่)
เลขประจำตัวผู้เสียภาษีอากร 0 1055 64078 12 7
| รายการ | จำนวน | หน่วยละ | จำนวนเงิน |
| --- | ---: | ---: | ---: |
| กระดาษถ่ายเอกสาร A4 80 แกรม | ๒๐ | 105.00 | 2,100.00 |
| หมึกพิมพ์ดำ | ๔ | 890.00 | 3,560.00 |
รวมเป็นเงิน 5,660.00
ภาษีมูลค่าเพิ่ม 7% 396.20
**จำนวนเงินรวมทั้งสิ้น 6,056.20**第 86/4 条要求的八项内容按阅读顺序排列,增值税一行与合计金额分开。
heading ร้านกาแฟบ้านสวน
paragraph เลขประจำตัวผู้เสียภาษี 0 9955 12034 55 5
table 3 rows x 3 columns
paragraph รวม 245.00 บาท
paragraph เงินสด 300.00 ทอน 55.00这张收据输出为类型化块。记账规则可以直接读取其中的表格,无需解析周围的文字。
## หน้า 1
ใบแจ้งยอดประจำเดือน มิถุนายน ๒๕๖๙
## หน้า 2
| วันที่ | เลขที่เอกสาร | จำนวนเงิน |
| --- | --- | ---: |
| ๐๓/๐๖/๖๙ | INV-24418 | 12,400.00 |
| ๑๗/๐๖/๖๙ | INV-24506 | 8,150.00 |一次请求最多可包含 50 页,响应按页逐一返回。
上方的读取结果用于说明响应格式,并非从模型实际采集。OCR 页面提供模型对真实样本的实录读取结果,并注明采集日期。
如何接入您的流程
泰国税务发票的格式由法律规定。《税收法典》第 86/4 条列出了完整税务发票必须载明的事项:“税务发票”字样,卖方的名称、地址和纳税人识别号,买方的名称和地址,以及编号。其后还有所供货物或服务的说明、单独列明的增值税额和开具日期。法律还要求发票使用泰语,以泰铢计价,用泰文数字或阿拉伯数字书写。这对阅读者是好消息,对正则表达式却是坏消息。同样八项事实,在每家供应商的模板上位置各不相同,所用的文字在词与词之间也不留空格。
按收到时的样子发送文档
把 PDF 或照片转成 base64 后提交。格式由字节内容识别。扫描件、手机照片和供应商的 PDF 都走同一个调用,上限为 50 页、10 MB。
选择账簿需要的输出形式
Markdown 让人工审核时文档依然易读。结构化输出返回类型化块,记账规则因此可以直接读取明细表,无需解析周围的文字。
字段入账,原件留存
把返回的文字与原始文件放在一起保存。读取按页计费,修改映射后重新读取,费用与第一次相同。
法律规定了什么,又没有规定什么
1 醒目标明 ใบกำกับภาษี 字样
2 卖方名称、地址、纳税人识别号
3 买方名称和地址
4 编号(如有册号,一并载明)
5 品名、种类、数量、价值
6 增值税额,单独列明
7 开具日期
8 主管部门规定的其他事项
未规定: 版式、在页面上的顺序、模板、
标签措辞、各字段所用的数字体系法律规定了完整税务发票必须载明哪些事实,设计则交给卖方。因此,字段提取是一个阅读问题,而且这种阅读必须适用于所有模板。第 86/6 条另行规定了零售业使用的简易税务发票。
一个月应付账款的费用
| 工作量 | 页数 | 费用 |
|---|---|---|
| 一张发票 | 1 | $0.0065 |
| 一次请求,达到 50 页上限 | 50 | $0.33 |
| 每月 2,000 张发票 | 约 $13 | |
按页计费,每页 6.5 积分,每次请求最低只按一页计。一页的收据,费用恰好就是一页。
返回什么,哪些仍由您掌握
读取结果
页面上每一行清晰可辨的文字,按文档原有顺序排列。
输出形式
Markdown 适合人工审核,类型化块适合需要单独取出表格的记账规则。
字段映射
哪个块是供应商、哪个块是合计金额,由您的代码决定,因为答案就在您的会计科目表里。
读取止于您的账簿开始之处,因此这里不预设任何一方的字段名映射。
面向开发者
每份文档一次请求,默认输出 Markdown。结构化版本以类型化块返回同样的读取结果。
完整 API 参考# Encode without line wrapping: wrapped base64 breaks the JSON string. DOC=$(base64 < invoice.pdf | tr -d '\n') # --max-time covers a multi-page document; curl defaults to no limit. curl -X POST https://api.paxalabs.com/v1/ocr \ --max-time 300 \ -H "Authorization: Bearer $PAXA_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"document\": \"$DOC\", \"model\": \"paxa-ocr-lite-v1\"}"
DOC=$(base64 < invoice.pdf | tr -d '\n') curl -X POST https://api.paxalabs.com/v1/ocr \ --max-time 300 \ -H "Authorization: Bearer $PAXA_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"document\": \"$DOC\", \"model\": \"paxa-ocr-lite-v1\", \"output\": \"structured\"}"
import base64 import os import requests with open("invoice.pdf", "rb") as file: document = base64.b64encode(file.read()).decode() response = requests.post( "https://api.paxalabs.com/v1/ocr", headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"}, json={"document": document, "model": "paxa-ocr-lite-v1"}, # A multi-page document can run for minutes; give it room. timeout=300, ) response.raise_for_status() body = response.json() print(body["pages"][0]["markdown"], body["usage"]["credits"], "credits")
泰文数字与不留空格,难在同一处
一张税务发票可能在同一行里用泰文数字写数量,用阿拉伯数字写金额,因为法律两者都允许。泰文书写时词与词之间也没有空格。供应商名称、地址和商品描述会连成一串字符送来,只有懂泰语的阅读者才能正确断开。这两点对泰国读者都再平常不过,也正是基于模板匹配的提取方法开始失灵的地方。
常见问题
返回的是字段,还是文字?
是文字,形式由您选择。Markdown 保留文档结构。结构化输出返回类型化块,包括标题、段落、列表、表格和图片,内容放在类型化字段中。把块映射到账簿字段名的工作留在您的代码里,那里才有您的会计科目表。
读取泰国税务发票的准确率如何?
我们不公布准确率数据,在实验室发布评测之前也不会公布。请用控制台或免费积分处理您自己的文档,再对照您实际收到的票据判断读取结果。
用手机拍的照片怎么办?
直接发送。PNG、JPEG 和 WebP 每张按一页读取。格式由字节内容识别,无需声明任何字段。照片和扫描件走同一个调用。
能读取简易税务发票吗?
可以。第 86/6 条规定了零售业使用的简易税务发票,载明的事项少于完整税务发票。读取仍是同一个调用,区别只在于这八项中有几项出现在页面上。
读取失败要付费吗?
不收费。页数在扣费之前读取,扣费之后如果处理失败,费用会自动退还。完全无法读取的文档在扣费前就会被拒绝,并返回固定的错误码。
从免费积分开始
使用 Google、GitHub 或 Hugging Face 登录,即可用 100 一次性免费积分处理您自己的文本。