QR-код э-счёта ZATCA (саудовская FATOORA)
ZATCA (Управление по закяту, налогам и таможне) Саудовской Аравии обязывает размещать QR на каждом налоговом счёте, выставленном в Королевстве. Фаза 1, упрощённый TLV; Фаза 2 добавляет криптографическую печать через интеграцию с платформой FATOORA. Несоответствующие счета отклоняются бухгалтерским ПО покупателя и не принимаются для возврата НДС.
Каноническая спецификация:ZATCA E-Invoicing Resolution & Implementing Regulations, актуальна до 2026.
Фаза 1 (генерация): действует с 4 декабря 2021 года. Все предприятия, зарегистрированные по НДС, обязаны выставлять цифровые счета с QR.
Фаза 2 (интеграция): внедряется волнами по размеру бизнеса с 1 января 2023 года. Добавляет цифровую подпись + клиринг ZATCA для стандартных счетов и отчётность в реальном времени для упрощённых счетов.
Фаза 1 (генерация): действует с 4 декабря 2021 года. Все предприятия, зарегистрированные по НДС, обязаны выставлять цифровые счета с QR.
Фаза 2 (интеграция): внедряется волнами по размеру бизнеса с 1 января 2023 года. Добавляет цифровую подпись + клиринг ZATCA для стандартных счетов и отчётность в реальном времени для упрощённых счетов.
Что это такое
QR кодирует строку Base64. Декодируйте Base64, чтобы получить двоичную последовательность TLV с 5 обязательными полями в фиксированном порядке:
| Тег | Поле | Тип | Примечания |
|---|---|---|---|
01 | Название продавца | Строка UTF-8 | Коммерческое название продавца. Принимаются как арабские, так и латинские символы. |
02 | Номер регистрации НДС | 15 цифр | Начинается с 3 для саудовских компаний. Формат: 3XXXXXXXXXXXXX3. |
03 | Временная метка счёта | ISO 8601 | Например, 2026-04-18T10:30:00Z. Должна включать часовой пояс. |
04 | Итого по счёту (с НДС) | Десятичная строка | Например, 115.00. Валюта неявно SAR. |
05 | Сумма НДС | Десятичная строка | Например, 15.00. Стандартная ставка на данный момент 15%. |
06 | Хэш счёта (Фаза 2) | Base64 SHA-256 | SHA-256 канонического XML счёта. |
07 | Цифровая подпись (Фаза 2) | Base64 | ECDSA по хэшу счёта с использованием сертификата CSID продавца. |
08 | Открытый ключ (Фаза 2) | Base64 X.509 | Открытый ключ ECDSA продавца (из CSID). |
09 | Штамп ZATCA (Фаза 2) | Base64 | Контрподпись ZATCA. Присутствует только после клиринга ZATCA. |
Каждая запись TLV, это 1 байт тега + 1 байт длины + <длина> байт значения. Вся последовательность затем кодируется в Base64 как полезная нагрузка QR.
Фаза 1 (упрощённая) vs Фаза 2 (интеграция)
| Аспект | Фаза 1 | Фаза 2 |
|---|---|---|
| Содержимое QR | Только теги 01–05 | Теги 01–05 плюс 06, 07, 08, опционально 09 |
| Интеграция ZATCA | Нет, офлайн | API реального времени для упрощённых счетов, поток клиринга для стандартных |
| Требуемые сертификаты | Нет | Да, CSID (Cryptographic Stamp Identifier), выданный ZATCA |
| Дата вступления в силу | 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=شركة أكمي | Название продавца кодируется UTF-8 внутри TLV перед Base64. |
| Стандартный счёт Фазы 2 | Всё вышеперечисленное плюс hash=<SHA-256 Base64> | Значительно более длинный Base64. Декодеры должны допускать дополнительные теги после 05. |
Типичные ошибки
- Длина номера НДС. Номера НДС ZATCA, ровно 15 цифр, начинаются и заканчиваются на
3. Всё остальное не проходит проверку на стороне приёма счёта. - Временная метка без часового пояса. Спецификация требует ISO 8601 с явным поясом (
Zили+03:00). Наивные локальные метки времени отклоняются. - Порядок кодирования. Поля TLV должны следовать в порядке номеров тегов (01, 02, 03, 04, 05, …). Изменение порядка не ломает декодирование QR, но некоторые валидаторы помечают его как неканоническое.
- Форматирование десятичных чисел. Итого по счёту и сумма НДС используют точку в качестве десятичного разделителя (
115.00), не запятую (115,00). Разделители тысяч также не используются. - Валюта неявно SAR. Счета в иностранной валюте всё равно конвертируются в SAR для поля QR. Базовый XML может содержать исходную валюту; QR, нет.
- Сбои клиринга Фазы 2. Стандартный счёт, отправленный в API клиринга ZATCA, может быть отклонён (плохой CSID, некорректный XML, ошибка в расчёте налогов). Счёт юридически недействителен до прохождения клиринга. Используйте цикл повторных попыток с экспоненциальной задержкой; не выставляйте счёт до успешного клиринга.
- Ротация сертификата CSID. Сертификаты CSID Фазы 2 истекают (как правило, через 1 год). Встройте проверку обновления в свою систему электронного выставления счетов, иначе вы внезапно перестанете иметь возможность выставлять счета.
Совместимость со сканерами
| Читатель | Поддержка | Примечания |
|---|---|---|
| Приложение ZATCA FATOORA | Нативная | Официальное приложение министерства; проверяет подписи Фазы 2 по ZATCA PKI. |
| Саудовское бухгалтерское ПО (SAP B1, Oracle, Microsoft Dynamics) | Нативная (после 2023) | Локализованные саудовские сборки имеют парсер ZATCA в конвейере AP. |
| Камера iOS | Сырой Base64 | Не распознаётся как налоговый счёт. Пользователь должен открыть приложение FATOORA. |
| Камера Android / Google Lens | Сырой Base64 | То же самое, нет нативного парсинга. |
| Сторонние инструменты аудита (PwC, KPMG, саудовские подразделения Deloitte) | Нативная | Аудиторские технологические пакеты парсят и проверяют подписи Фазы 2. |
Смотрите также
- /zatca-saudi-einvoice-qr-code/, генератор.
- /standards/, назад к индексу стандартов.
- Портал для разработчиков ZATCA, официальные ресурсы и песочница FATOORA.