Holograma de Verifactu para software a medida: libro de registros de facturación encadenados con sellos ámbar
Software / APIs

Verifactu y Software a Medida para Empresas de Madrid

Codezone
Codezone Empresa de Desarrollo Web y Software a Medida

Verifactu es el nombre del reglamento aprobado por el Real Decreto 1007/2023, que obliga a cualquier programa de facturación, también al software a medida de muchas empresas de Madrid, a encadenar sus registros con una huella SHA-256 e imprimir un QR en cada factura. Las sociedades deben cumplir antes del 1 de enero de 2027 (Real Decreto-ley 15/2025). Adaptarlo es un proyecto de desarrollo de software a medida en Madrid.

El artículo 201 bis de la Ley 58/2003, General Tributaria, sanciona con 50.000 euros por ejercicio la tenencia de un sistema que no cumpla y con 150.000 euros por ejercicio y tipo de programa a quien lo produce. En un desarrollo propio, el productor es tu proveedor o tu empresa si el código lo escribe tu equipo.

Al terminar sabrás qué modalidad te conviene y qué pedirle a quien mantiene tu sistema, empezando por una auditoría técnica del código de facturación.

Qué es Verifactu y a qué software a medida afecta

Verifactu es el reglamento de requisitos de los sistemas informáticos de facturación aprobado por el Real Decreto 1007/2023 y desarrollado por la Orden HAC/1177/2024. Exige que todo software que emita facturas encadene cada registro con el anterior para que cualquier alteración deje un rastro verificable ante la AEAT.

Según el artículo 3 del Real Decreto 1007/2023 consolidado en el BOE, afecta a sociedades, autónomos, no residentes con establecimiento permanente y entidades en atribución de rentas que facturen con un programa. Quedan fuera quienes llevan los libros registro por el Suministro Inmediato de Información (SII).

Cadena holográfica de bloques ámbar unidos por haces de luz dorada sobre un suelo oscuro y reflectante
Cada registro de facturación arrastra la huella del anterior.

Qué exige Verifactu técnicamente a tu código

Verifactu exige a tu código cinco piezas técnicas, que concreta la Orden HAC/1177/2024 de especificaciones técnicas:

  • Registro de alta y de anulación: cada factura genera un registro inalterable. Corregir exige un registro nuevo.
  • Huella encadenada: cada registro incluye la huella del anterior, calculada con SHA-256 (artículo 13 y anexo de la orden).
  • Código QR: entre 30x30 y 40x40 milímetros, norma ISO/IEC 18004 (artículo 21). En factura electrónica basta con su URL como campo independiente.
  • Registro de eventos: anota por sí solo sucesos como la detección de anomalías (artículo 9 de la orden).
  • Declaración responsable: el productor certifica que el sistema cumple, visible en cada versión (artículo 13 del reglamento).

VERI*FACTU o no verifactu: qué modalidad elegir

La modalidad VERI*FACTU remite cada registro a la AEAT en el momento y queda exenta de firmarlo (artículo 16 del Real Decreto 1007/2023). La elección dura, como mínimo, hasta el final del año natural del primer envío.

  • Elige VERI*FACTU si: facturas siempre con conexión. Tu integración respeta el control de flujo de la AEAT, con una espera inicial de 60 segundos entre envíos (artículo 16 de la orden).
  • Elige no verifactu si: necesitas emitir sin conexión, por ejemplo en una feria. Asumes firma XAdES de cada registro y copias de seguridad de los registros de facturación que garanticen su conservación.
Dos rutas de luz cian y ámbar que salen de un núcleo holográfico, una hacia una torre lejana y otra hacia un sello
La modalidad decide si tu sistema firma o envía.

Verifactu regula cómo registras lo que facturas. La factura electrónica B2B obligatoria regula cómo se la entregas a otra empresa y la conciliación bancaria automática por API cierra el cobro.

Plazos vigentes de Verifactu para empresas de Madrid

Los plazos vigentes los fija el Real Decreto-ley 15/2025, que modificó la disposición final cuarta del Real Decreto 1007/2023 y que el Congreso convalidó en diciembre de 2025:

  • Contribuyentes del Impuesto sobre Sociedades: sistemas adaptados antes del 1 de enero de 2027.
  • Resto de obligados del artículo 3.1: sistemas operativos antes del 1 de julio de 2027.

El 5 de octubre de 2026 el Ministerio de Hacienda publicó una nota informativa que prevé aplazar hasta octubre de 2028 las obligaciones pendientes, para alinearlas con la factura electrónica de las empresas de hasta 8 millones de euros. A 9 de octubre de 2026 el BOE no recoge ninguna norma que lo haga efectivo, así que planifica con las fechas vigentes.

Qué hacer si tu facturación es a medida

Adaptar un software de facturación propio empieza por localizar cada punto que emite facturas:

Prisma holográfico que transforma un flujo de partículas doradas en un único haz verde de verificación
La huella se recalcula para demostrar que nada ha cambiado.
CodeZone Pro Tip: calcula la huella encadenada de cada registro de alta y verifica la cadena completa para localizar al instante un registro alterado o borrado.
import hashlib

# Campos del registro de alta en el orden del artículo 13.1.a) de la Orden HAC/1177/2024,
# con los nombres XML que fija el documento técnico de la AEAT sobre la huella
CAMPOS_ALTA = ("IDEmisorFactura", "NumSerieFactura", "FechaExpedicionFactura", "TipoFactura",
               "CuotaTotal", "ImporteTotal", "Huella", "FechaHoraHusoGenRegistro")

def serializar(registro: dict) -> str:
    # La AEAT quita espacios al inicio y al final; un campo vacío queda como "Huella="
    return "&".join(f"{c}={str(registro.get(c, '')).strip()}" for c in CAMPOS_ALTA)

def calcular_huella(registro: dict) -> str:
    # SHA-256 (valor 01 de la lista L12 del anexo), entrada UTF-8, salida hexadecimal en mayúsculas
    return hashlib.sha256(serializar(registro).encode("utf-8")).hexdigest().upper()

def verificar_cadena(registros: list[dict]) -> list[int]:
    """Devuelve las posiciones donde la cadena se rompe."""
    rotos, anterior = [], ""  # el primer registro no tiene huella previa
    for i, reg in enumerate(registros):
        # "Huella" es la del registro anterior; "HuellaPropia", la calculada para este registro
        if reg.get("Huella", "") != anterior or reg.get("HuellaPropia") != calcular_huella(reg):
            rotos.append(i)
        anterior = reg.get("HuellaPropia", "")
    return rotos

if __name__ == "__main__":
    # Ejemplo del documento técnico de la AEAT: la huella esperada empieza por 3C464DAF
    r1 = {"IDEmisorFactura": "89890001K", "NumSerieFactura": "12345678/G33",
          "FechaExpedicionFactura": "01-01-2024", "TipoFactura": "F1", "CuotaTotal": "12.35",
          "ImporteTotal": "123.45", "Huella": "", "FechaHoraHusoGenRegistro": "2024-01-01T19:20:30+01:00"}
    r1["HuellaPropia"] = calcular_huella(r1)
    print(r1["HuellaPropia"], verificar_cadena([r1]))  # lista vacía si la cadena está íntegra

Este control convierte la obligación legal en una alarma operativa: si alguien modifica un importe en la base de datos, la verificación nocturna devuelve la posición del registro roto antes de que lo detecte la AEAT.

Lo Que Arriesgas Si Tu Facturación a Medida Llega Tarde

Un sistema no adaptado sigue emitiendo facturas y acumula sanción por cada ejercicio en que lo uses. Adaptar con margen te permite probar en el portal de pruebas externas de la AEAT y cerrar por contrato quién firma como productor.

Reloj holográfico de anillos dorados que se cierran sobre un escudo ámbar con destellos rojos de alerta
Cada ejercicio sin adaptar suma una sanción nueva.

En Codezone adaptamos sistemas de facturación a medida y dejamos documentada la declaración responsable. Cuéntanos cómo factura hoy tu empresa y te decimos qué hay que tocar.