ZATCA電子インボイスQR(サウジFATOORA)
サウジアラビアのZATCA(ザカート・税金・税関庁)は、王国で発行されるすべての税務インボイスにQRを義務付けています。フェーズ1はシンプルなTLV、フェーズ2はFATOORAプラットフォームとの統合による暗号化シールを追加します。非準拠のインボイスは購入者の会計ソフトウェアで拒否され、VATの還付も無効になります。
正規仕様:ZATCA E-Invoicing Resolution & Implementing Regulations, 2026年まで有効。
フェーズ1(生成): 2021年12月4日から施行。VAT登録済みの全事業者はQR付きのデジタルインボイスを発行しなければなりません。
フェーズ2(統合): 2023年1月1日から企業規模に応じた段階的展開。標準インボイスにデジタル署名+ZATCAクリアランス、簡易インボイスにリアルタイム報告を追加します。
フェーズ1(生成): 2021年12月4日から施行。VAT登録済みの全事業者はQR付きのデジタルインボイスを発行しなければなりません。
フェーズ2(統合): 2023年1月1日から企業規模に応じた段階的展開。標準インボイスにデジタル署名+ZATCAクリアランス、簡易インボイスにリアルタイム報告を追加します。
概要
QRはBase64文字列をエンコードします。Base64をデコードすると、固定順序で5つの必須フィールドを持つバイナリTLVシーケンスが得られます。
| タグ | フィールド | 型 | 備考 |
|---|---|---|---|
01 | 売主名 | UTF-8文字列 | 売主の商号。アラビア語とラテン文字の両方が受け入れられます。 |
02 | VAT登録番号 | 15桁 | サウジ法人は3で始まります。形式:3XXXXXXXXXXXXX3。 |
03 | インボイスタイムスタンプ | ISO 8601 | 例:2026-04-18T10:30:00Z。タイムゾーンを含める必要があります。 |
04 | インボイス合計(VAT込み) | 小数文字列 | 例:115.00。通貨は暗黙的にSARです。 |
05 | VAT額 | 小数文字列 | 例:15.00。現在の標準税率15%。 |
06 | インボイスハッシュ(フェーズ2) | Base64 SHA-256 | 正規インボイスXMLのSHA-256。 |
07 | デジタル署名(フェーズ2) | Base64 | 売主のCSID証明書を使用したインボイスハッシュへのECDSA。 |
08 | 公開鍵(フェーズ2) | Base64 X.509 | 売主のECDSA公開鍵(CSIDより)。 |
09 | ZATCAスタンプ(フェーズ2) | Base64 | ZATCAの副署名。ZATCAクリアランス後のみ存在します。 |
各TLVレコードは1タグバイト + 1長さバイト + <長さ>バイトの値です。シーケンス全体がBase64エンコードされてQRペイロードになります。
フェーズ1(簡易)とフェーズ2(統合)の比較
| 側面 | フェーズ1 | フェーズ2 |
|---|---|---|
| QRコンテンツ | タグ01–05のみ | タグ01–05に加え06、07、08、任意で09 |
| ZATCA統合 | なし, オフライン | 簡易インボイス用リアルタイムAPI、標準インボイス用クリアランスフロー |
| 必要な証明書 | 不要 | 必要, ZATCAが発行するCSID(暗号スタンプ識別子) |
| 施行日 | 2021-12-04(全事業者) | 2023-01-01(収益に応じた段階的展開) |
| インボイス範囲 | B2C(簡易)+ B2B(標準) | B2C簡易:リアルタイム報告。B2B標準:発行前にクリアランス(事前検証)。 |
正規テストベクター
TLVの例(Base64エンコード前):
01 0A "Acme Saudi" 02 0F "300000000000003" 03 14 "2026-04-18T10:30:00Z" 04 06 "115.00" 05 05 "15.00"Base64エンコード後:
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| ケース | 入力 | Base64プレフィックス |
|---|---|---|
| フェーズ1、最小限の簡易 | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| アラビア語の売主名 | seller=شركة أكمي | 売主名はBase64の前にTLV内でUTF-8エンコードされます。 |
| フェーズ2標準インボイス | 上記すべてに加え hash=<SHA-256 Base64> | はるかに長いBase64。デコーダーは05以降の追加タグを許容する必要があります。 |
よくある落とし穴
- VAT番号の長さ。 ZATCA VAT番号はちょうど15桁で、
3で始まり3で終わります。それ以外はインボイス受付側で検証に失敗します。 - タイムゾーンのないタイムスタンプ。 仕様では明示的なゾーン(
Zまたは+03:00)を伴うISO 8601が必要です。ナイーブなローカルタイムスタンプは拒否されます。 - エンコーディングの順序。 TLVフィールドはタグ番号順(01、02、03、04、05、…)に表示する必要があります。順序を変えるとQRのデコード自体は成功しますが、一部のバリデーターが非正規としてフラグを立てます。
- 小数のフォーマット。 インボイス合計とVAT額はドット小数点(
115.00)を使用し、コンマ小数点(115,00)は不可です。また桁区切り記号も使用しません。 - 通貨は暗黙的にSAR。 外貨建てのインボイスも、QRフィールドについてはSARに換算されます。基になるXMLに元の通貨が記載されていても、QRには含まれません。
- フェーズ2クリアランスの失敗。 ZATCAのクリアランスAPIに送信した標準インボイスが拒否される場合があります(不正なCSID、不正なXML、税額計算の誤り)。クリアランスが完了するまでインボイスは法的に無効です。指数バックオフ付きのリトライループを維持し、クリアランスが成功するまでインボイスを発行しないでください。
- CSID証明書のローテーション。 フェーズ2のCSIDは失効します(通常1年)。e-invoicingスタックに更新チェックを組み込まないと、突然インボイスを発行できなくなります。
スキャナーの互換性
| リーダー | サポート | 備考 |
|---|---|---|
| ZATCA FATOORAアプリ | ネイティブ | 公式省庁アプリ。ZATCA PKIに対してフェーズ2の署名を検証します。 |
| サウジ向け会計ソフト(SAP B1、Oracle、Microsoft Dynamics) | ネイティブ(2023年以降) | ローカライズされたサウジ向けビルドはAPパイプラインにZATCAパーサーを持ちます。 |
| iOSカメラ | 生のBase64 | 税務インボイスとして認識されません。ユーザーはFATOORAアプリを開く必要があります。 |
| Androidカメラ / Google Lens | 生のBase64 | 同様, ネイティブ解析なし。 |
| サードパーティ監査ツール(PwC、KPMG、Deloitteサウジユニット) | ネイティブ | 監査テクノロジースイートがフェーズ2の署名を解析・検証します。 |
関連情報
- /zatca-saudi-einvoice-qr-code/, ジェネレーター。
- /standards/, 規格インデックスに戻る。
- ZATCA開発者ポータル, 公式リソースとFATOORAサンドボックス。