ZATCA 第二阶段(集成阶段)在 2023 年 1 月对首批纳税人替代了第一阶段(生成阶段)。三年、二十四批之后,沙特境内每一家增值税登记企业都在范围之内。如果你以沙特里亚尔开票,那就是在通过 Fatoora 开票。
规则到底要求什么
- 标准税务发票(B2B)必须实时清算 —— 提交给 ZATCA、校验、加盖 UUID,然后才能发给买家。
- 简化税务发票(B2C)走申报模型 —— 先带 TLV 编码 QR 码开出,在 24 小时内向 ZATCA 申报。
- 每张发票都必须包含一条与上一张发票链接的链式加密哈希,并使用 Fatoora 颁发的 CSID(密码戳标识)做数字签名。
- XML 必须符合 UBL 2.1,并带上第二阶段实施规范定义的 ZATCA 专属扩展。
ZATCA 的 TLV QR 码
第一阶段的 QR 在第二阶段保留,变成一段 TLV(Tag-Length-Value)的 base64 字符串。五个必填标签:卖家名称、增值税号、ISO 8601 时间戳、含税总额、税额。第二阶段又加了三个 —— XML 哈希、数字签名、公钥。ZATCA 的移动 App 会校验这些字段,任何编码错误都会让 QR 在买家端验证失败 —— 哪怕发票已经清算成功。
最常见的运营坑
- 时间漂移。与 ZATCA 参考时钟相差超过 30 秒的发票时间戳会被拒。请用 NTP,不要用你笔记本的时钟。
- 哈希链断裂。如果你开了一张发票却忘了带上一张的哈希,链就断了,整台设备必须重新做 onboarding 并换一个新的 CSID。
- 混合税率。同一张发票里 15% 的货物和零税率出口必须按税率分别给出 <cac:TaxSubtotal>;合并成单一 subtotal 是被拒前三的原因之一。
Invocie 的 MENAStrategy 把这些都实现了 —— UUID 生成、链式哈希、TLV QR、带 ZATCA 扩展的 UBL 2.1 —— 你只管开票,不必再去解析实施规范。