Skip to content

6. Diccionario de Datos (Payload JSON) ​

Este documento detalla exhaustivamente todos los campos admitidos por el motor de validación (Pydantic) dentro del JSON de Ingesta. Conocer las longitudes, los valores permitidos y las exigencias lógicas de estos elementos es vital para garantizar el 200 OK en la inyección de facturas hacia la AEAT y sortear los rechazos por 422 Unprocessable Entity.

Aclaración sobre Tipos de Datos: En aras de la consistencia aritmética y para impedir colisiones por punto flotante entre arquitecturas remotas, todos los valores (incluidos importes y porcentajes) deben inyectarse obligatoriamente encapsulados en cadenas de texto (string).


1. Bloque cabecera ​

Este objeto engloba todos los identificadores troncales, las lógicas de rectificación y los totales sumarizados del ticket o factura.

Campo JSONExigenciaDescripción y Valores Admitidos
emisorObligatorioNIF/CIF válido del emisor de la factura. Actúa como identificador clave en sistemas Multi-Tenant (RBAC) para cotejar permisos de inserción en el servidor.
numfacturaObligatorioEl número de factura emitido por el ERP. (Min. 1 caracter).
serieObligatorioLa serie de la factura. Su longitud no puede exceder los 20 caracteres. (Nota: Evite espacios).
fechaObligatorioFecha de expedición activa de la factura. Se propone el formato DD/MM/YYYY como el más seguro. La aplicación intentará descifrar otros formatos legibles, pero al estamparse en el XML hacia la AEAT, siempre se formateará como DD-MM-YYYY.
tipodocObligatorioTipo de documento facturado según esquema AEAT. Frecuentes: "01" (Factura oficial o F1) y "02" (Ticket/Factura Simplificada o F2).
descripcionoperacionOpcionalTexto narrativo del concepto global de la factura. Se recomienda evitar caracteres especiales o retornos de carro.
paisObligatorioCódigo ISO de dos letras. Típicamente "ES" (España).
nifOpcionalNIF / CIF de la contraparte comercial (Cliente/Receptor).
nombreOpcionalNombre, apellidos o Razón Social del receptor.

1.1. Banderas de Rectificación, Sustitución y Anulación ​

Estas banderas habilitan las obligaciones legales que varían el esquema hacia las vías de alteración tributaria.

Campo JSONExigenciaDescripción y Valores Admitidos
eliminacionOpcionalActúa como Baja. Valores: "S", "N" o vacío "". Si toma "S", el sistema enviará a la AEAT la matriz de anulación de la factura (omitiendo importes).
rectificativaOpcional / Def. "N"Indica si la inyección es una factura Rectificativa de anteriores. Valores aceptados por el validador: "S", "N".
tipofacturarectificativaCondicionalExigido solo si el anterior es "S". Acota si fue por "Errores fundados", etc. Patrones: "R1", "R2", "R3", "R4", "R5".
facturarectificadaCondicionalNúmero y Serie de la factura original que se desea reparar. (Obligatorio si rectificativa = "S").
fecharectificadaCondicionalFecha de expedición del documento original enmendado. Obligatorio si es rectificativa. Se propone el formato DD/MM/YYYY como el más seguro.
facturaf3Opcional / Def. ""Factura de Sustitución a un Ticket previo. Valores aceptados: "S", "N", "".
numseriesustituidaf3CondicionalObligatorio si facturaf3 = "S".
fechafactsustituidaf3CondicionalObligatorio si facturaf3 = "S". Se propone el formato DD/MM/YYYY como el más seguro.

1.2. Módulo Aritmético (Bases y Totales Generales) ​

Este bloque encapsula los importes. Las restricciones de redondeo (hacia arriba HALF_UP o el bancario par HALF_EVEN) se toleran en su nivel máximo de céntimos.

Campo JSONExigenciaDescripción y Valores Permitidos
baseObligatorioSuma total de TODAS las Bases Imponibles (Max 2 decimales, obligatoriamente separados por punto .).
totalivaObligatorioSuma total de TODAS las Cuotas de IVA devengadas en la factura. (Max 2 decimales, separados por punto .).
totalrecargoOpcionalSi existiera recargo de equivalencia. (Max 2 decimales, separados por punto .).

1.3 Módulo Aritmético (Totales Desglosados en Cabecera) ​

Son 4 Slots posibles que exponen una radiografía matemática sobre cuál fue la composición final de la factura. (Nota: Deben concordar milimétricamente con los sumatorios generales declarados en el punto anterior, y con los vectores declarados más adelante en la tabla Detalle).

(Deje vacíos "" o con valor "0.00" aquellos Slots que no aplique, por ejemplo: base2, iva2)

  • base1, base2, base3, base4 (String): Las Bases del bloque impositivo respectivo.
  • piva1, piva2, piva3, piva4 (String): Porcentaje del IVA. (Ej. "21.00" o "10.0" o "4.00").
  • iva1, iva2, iva3, iva4 (String): Cuota del IVA calculado para esa base y el susodicho porcentaje.
  • precargo1..4, recargo1..4 (String): Porcentaje y cuota del tributo de recargo de equivalencia respectivo en el Slot.

2. Bloque detalle ​

El bloque de Detalle funciona como una colección de vectores que desglosa las líneas y perfiles de base imponibles. Es cardinal en la validación algorítmica y su regla vital es incorruptible: Todos los parámetros dentro del detalle deben ser Array de exactamente 4 dimensiones (Listas de Strings), independientemente de que se encuentren vacíos.

Matriz (Array JSON)DimensionesEjemplo Legal de inyección (Pydantic valid)
baseList[str] tamaño 4["100.00", "", "", ""]
pivaList[str] tamaño 4["21.00", "", "", ""]
ivaList[str] tamaño 4["21.00", "", "", ""]
precargoList[str] tamaño 4["", "", "", ""] ó ["5.20", "1.40", "", ""]
recargoList[str] tamaño 4["", "", "", ""]

Excepción Algorítmica: En el supuesto de que envíe una Baja explícita (bloque Cabecera eliminacion = "S"), el Middleware sortea las validaciones estrictas y acepta importes y listas a cero, ya que el único propósito de esa petición será tumbar el histórico del documento sin declarar finanzas a los servidores de Hacienda.