Ir al contenido
Log in

ZATCA

La Resolución de facturación electrónica de ZATCA (Autoridad de Zakat, Impuestos y Aduanas) exige que las empresas que operan en Arabia Saudí generen y envíen facturas electrónicas en formato UBL XML. La API REST de B2Brouter permite que tu empresa cumpla totalmente con ZATCA, gestionando por ti la generación XML, el encadenamiento de hashes y el proceso de clearance.

¿Qué es la facturación electrónica ZATCA?

Sección titulada «¿Qué es la facturación electrónica ZATCA?»

La facturación electrónica ZATCA (Fatoorah) requiere:

  • Generar facturas en formato UBL 2.1 XML, con extensiones específicas de Arabia Saudí.
  • Calcular una cadena hash SHA-256 que vincule cada factura con la anterior.
  • Enviar cada factura a la API de Clearance de ZATCA para su validación y firma digital.
  • Incrustar el código QR devuelto por ZATCA en la factura emitida.

Con B2Brouter puedes delegar todo esto. Emites facturas o creas informes fiscales mediante llamadas REST, y B2Brouter se encarga del encadenamiento, el clearance y la generación del código QR.

Las facturas ZATCA son emitidas por empresas saudíes. La cuenta debe tener country: "sa". Los siguientes campos son obligatorios para cuentas SA:

Parámetro APIDescripciónNotas
nameNombre legal de la empresaObligatorio
countryDebe ser "sa"Obligatorio
addressNombre de la calleObligatorio
address2Número del edificioObligatorio — entero de 4 dígitos
cityCiudadObligatorio
postalcodeCódigo postalObligatorio
provinceDistritoObligatorio
tin_valueNúmero de registro VAT (15 dígitos)Obligatorio
tin_schemeDebe ser 9760 (IVA saudí)Obligatorio

Nota: Los campos address2 y province corresponden a los conceptos saudíes de número de edificio y distrito respectivamente. Usa address2 y province como nombres de parámetros API — la API devolverá errores haciendo referencia a estos nombres.

Los contactos (compradores) de facturas ZATCA también deben tener datos de dirección correctos. Los siguientes campos aplican cuando country es "sa":

Parámetro APIDescripciónNotas
nameNombre legal del compradorObligatorio
countryCódigo de país ISO-2Obligatorio
addressNombre de la calleObligatorio para contactos SA con ZATCA habilitado
address2Número del edificioObligatorio para contactos SA con ZATCA habilitado
cityCiudadObligatorio para contactos SA con ZATCA habilitado
postalcodeCódigo postalObligatorio para contactos SA con ZATCA habilitado
provinceDistritoObligatorio para contactos SA con ZATCA habilitado
tin_valueNúmero de registro VATObligatorio para facturas B2B
tin_scheme9760 para IVA saudí; consulta Tipos de ID del comprador para compradores extranjerosObligatorio

Las facturas ZATCA utilizan SAR (Riyal saudí) como moneda. Los impuestos deben usar name: "VAT" y category: "S" para el tipo estándar del 15%.

Ejemplo mínimo de factura:

Ventana de terminal
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"send_after_import": true,
"invoice": {
"date": "2025-01-15",
"number": "INV-001",
"currency": "SAR",
"payment_method": 1,
"contact": {
"name": "Buyer Company Ltd",
"address": "King Fahd Road",
"address2": "1234",
"city": "Riyadh",
"postalcode": "12345",
"province": "Riyadh",
"country": "sa",
"tin_value": "310175397400003",
"tin_scheme": 9760,
"language": "en",
"currency": "SAR"
},
"invoice_lines_attributes": [
{
"quantity": 1.0,
"description": "Professional services",
"price": 100.0,
"taxes_attributes": [
{
"name": "VAT",
"percent": 15.0,
"category": "S"
}
]
}
]
}
}'

Categorías fiscales y códigos de exención

Sección titulada «Categorías fiscales y códigos de exención»

ZATCA define cuatro categorías de IVA. Para las categorías E (Exento) y Z (Tipo cero), es obligatorio un código válido de motivo de exención (comment en la línea de impuesto); la factura será rechazada sin él.

CategoríaDescripciónTipo¿Código de exención obligatorio?
STipo estándar15%No
EExento de IVA0% — VATEX-SA-29, VATEX-SA-29-7 o VATEX-SA-30
ZTipo cero0% — consulta la tabla inferior
OFuera de alcance0%No

El código de exención se define en el campo comment de la línea de impuesto:

{
"name": "VAT",
"percent": 0.0,
"category": "Z",
"comment": "VATEX-SA-32"
}
CódigoDescripción
VATEX-SA-29Servicios financieros mencionados en el artículo 29 del reglamento del IVA
VATEX-SA-29-7Servicios de seguros de vida mencionados en el artículo 29 del reglamento del IVA
VATEX-SA-30Transacciones inmobiliarias mencionadas en el artículo 30 del reglamento del IVA
CódigoDescripción
VATEX-SA-32Exportación de bienes
VATEX-SA-33Exportación de servicios
VATEX-SA-34-1Transporte internacional de bienes
VATEX-SA-34-2Transporte internacional de pasajeros
VATEX-SA-34-3Servicios directamente relacionados e incidentales al transporte internacional de pasajeros
VATEX-SA-34-4Suministro de un medio de transporte cualificado
VATEX-SA-34-5Cualquier servicio relacionado con el transporte de bienes o pasajeros (artículo 25 del reglamento del IVA)
VATEX-SA-35Medicamentos y equipamiento médico
VATEX-SA-36Metales cualificados
VATEX-SA-EDUEducación privada para ciudadanos
VATEX-SA-HEASanidad privada para ciudadanos
VATEX-SA-MLTRYSuministro de bienes militares cualificados
VATEX-SA-DIPLOMATSuministros cualificados para misiones diplomáticas
VATEX-SA-DUTYFREESuministro cualificado de bienes en zona Duty Free
VATEX-SA-32(bis)Suministro bajo acuerdo de suspensión aduanera
VATEX-SA-ROYALDECREESuministro en el que el gobierno asume el IVA
CódigoDescripción
VATEX-SA-OOSServicios fuera del ámbito fiscal / No sujetos a IVA (texto libre según el caso)

Para compradores extranjeros (no SA), utiliza tin_scheme para especificar el tipo de identificador:

tin_schemeDescripción
9760Número de registro IVA saudí
0002Número IVA europeo
0003Número de pasaporte
0004Documento oficial de identidad (país de residencia)
0005Certificado de residencia
0006Otro documento
0007No registrado

Después de crear o enviar una factura, el proceso de clearance ZATCA es asíncrono. El tax_report estará inicialmente en estado processing.

Supervisa el progreso mediante:

Campo API InvoiceElemento XML ZATCA
numbercbc:ID
datecbc:IssueDate
company.tin_valueSupplier cbc:CompanyID
company.address2Supplier cbc:BuildingNumber
company.provinceSupplier cbc:District
contact.tin_valueCustomer cbc:CompanyID
contact.address2Customer cbc:BuildingNumber
contact.provinceCustomer cbc:District
tax.percentcbc:Percent
tax.categorycbc:ID en cac:TaxCategory
tax.commentcbc:TaxExemptionReasonCode
invoice.totalcbc:TaxInclusiveAmount
invoice.subtotalcbc:TaxExclusiveAmount