VIES es la pasarela en vivo de la UE para validar el IVA; el campo de IVA nativo de PrestaShop se guarda, pero nunca se comprueba contra VIES. Las reglas de inversión del sujeto pasivo que aparecen a continuación reflejan el IVA de la UE tal como está en 2026, tu autoridad fiscal y tu asesor siguen siendo responsables de determinar si una venta concreta está exenta. Las rutas cubren PrestaShop 1.6, 1.7, 8 y 9.

Esta es la situación que espera un cliente B2B registrado a efectos de IVA en otro país de la UE cuando llega a tu tienda PrestaShop: introduce su número de IVA, el precio pasa a mostrarse neto y la factura que descarga indica "inversión del sujeto pasivo" en lugar de cobrarle un impuesto que después tendría que recuperar. Si lo haces bien, consigues una venta B2B transfronteriza sin fricción. Si lo haces mal, cobras IVA cuando no deberías, o eximes un número que resulta no ser válido, puedes perder al cliente o asumir tú la responsabilidad fiscal. Esta guía trata específicamente de automatizar la verificación: cómo PrestaShop comprueba un número de IVA contra el sistema VIES de la UE, dónde ocurre realmente esa comprobación en el código y cómo convertir un número válido en un pedido exento sin trabajo manual.

Esto es una parte de una configuración B2B más amplia. Decidir qué clientes ven precios netos, cómo cambia la visualización de impuestos y cómo validas a un solicitante profesional desde el principio son tareas independientes, cubiertas en los artículos relacionados enlazados a lo largo de esta guía. Aquí nos centramos en una sola cuestión: hacer que la exención de IVA se active automática y correctamente.

La regla que estás automatizando: inversión del sujeto pasivo intracomunitaria

La lógica fiscal es concreta y merece formularse con precisión, porque la automatización solo será tan fiable como las condiciones que comprueba. Cuando una empresa registrada a efectos de IVA vende bienes o servicios a otra empresa registrada a efectos de IVA en un Estado miembro de la UE diferente, el vendedor no cobra IVA. El comprador lo autorrepercute en su propia declaración, la "inversión del sujeto pasivo", y así evita tener que recuperar IVA extranjero. Para que la exención sea legítima, deben cumplirse todas estas condiciones:

  • Ambas partes son empresas registradas a efectos de IVA.
  • Están en Estados miembros de la UE diferentes (un vendedor alemán y un comprador B2B alemán siguen pagando IVA alemán).
  • El número de IVA del comprador es válido: confirmado contra VIES, no solo bien formateado.
  • La operación cruza realmente la frontera.

Si falta cualquiera de estas condiciones, se aplica el IVA normal. Precisamente por eso una comprobación de formato ("¿parece un número francés?") no basta por sí sola, y por eso la automatización tiene que comunicarse con VIES.

VIES: la única comprobación autorizada

VIES (VAT Information Exchange System) es el servicio oficial de la Comisión Europea para confirmar que un número de IVA existe y está activo. Le envías un código de país más un número; responde válido o no válido y, según el Estado miembro, devuelve el nombre y la dirección de la empresa registrada. No hay sustituto. Una expresión regular que confirma que el número tiene la longitud y el prefijo de país correctos no te dice nada sobre si el número está realmente registrado, que es lo único que importa para una exención que quizá tengas que defender en una inspección.

El problema práctico es la fiabilidad. VIES es una pasarela en tiempo real hacia bases de datos fiscales nacionales individuales, así que puede estar fuera de servicio por mantenimiento, algunos Estados miembros pueden quedar temporalmente desconectados y las respuestas pueden tardar. ¿Qué significa eso para tu proceso de compra? Tu automatización nunca debe permitir que un tiempo de espera de VIES bloquee una venta. El comportamiento correcto cuando VIES no está disponible es aceptar el pedido, cobrar el IVA con normalidad (la opción segura por defecto) y marcar el pedido para revisión manual o una nueva comprobación, no dejar al cliente esperando ante un validador que no termina. Una exención que puedes aplicar retroactivamente tras una nueva comprobación correcta es recuperable; un carrito abandonado no.

VIES expone un servicio web SOAP, que es el endpoint que cualquier módulo de validación de IVA para PrestaShop llama por debajo. Una llamada PHP básica tiene este aspecto. Útil para saber exactamente qué está haciendo un módulo en tu nombre y qué significa realmente un tiempo de espera:

// VIES SOAP check – country code + number, returned valid/invalid (+name/address where the state shares it).
// Wrap in try/catch: a SoapFault here = VIES unreachable, NOT an invalid number.
try {
    $client = new SoapClient(
        'https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl',
        array('connection_timeout' => 10)   // never hang the checkout on a slow gateway
    );
    $res = $client->checkVat(array(
        'countryCode' => 'FR',              // ISO country code (use XI for Northern Ireland)
        'vatNumber'   => '12345678901',     // digits only, no country prefix
    ));
    // $res->valid === true|false; $res->name / $res->address where the member state returns them.
} catch (SoapFault $e) {
    // VIES down or timed out -> take the order WITH VAT, flag for manual re-check. Do not block.
}

Observa los dos modos de fallo distintos: $res->valid === false significa que VIES respondió y que el número no está registrado (rechaza la exención); un SoapFault significa que VIES no respondió en absoluto (cobra IVA, marca el pedido y vuelve a comprobarlo más tarde). Confundir ambos casos es el error clásico, una caída de un servicio público nunca debería parecer un cliente no válido.

Qué hace PrestaShop de forma nativa, y dónde se detiene

PrestaShop trae más de esto de serie de lo que muchos comerciantes creen, pero se queda corto en la automatización completa. Las piezas nativas:

  • Un campo de número de IVA en las direcciones. El campo vat_number vive en el objeto Address (guardado en la tabla ps_address; lo verás en el formulario de dirección durante el proceso de compra y al editar una dirección en Clientes → Direcciones). Si aparece o no se controla por país desde Internacional → Ubicaciones → Países → [país] → "¿Necesita un número de identificación fiscal?", y los campos de empresa/IVA se muestran al activar el modo B2B (abajo), no existe un interruptor global separado de "mostrar campo de IVA".
  • Un interruptor de "modo B2B". Parámetros de la tienda → Configuración de clientes → Activar modo B2B (el valor de configuración PS_B2B_ENABLE) expone los campos de empresa/IVA y datos de cliente orientados a B2B.
  • El impuesto procede de las reglas fiscales y las direcciones, no de una comprobación VIES. Esta es la limitación clave. PrestaShop cobra impuestos basándose en las reglas fiscales asociadas a los productos junto con la dirección del cliente (país/estado/zona), no en una comprobación VIES en vivo, ni en la pertenencia a un grupo. Un grupo de clientes controla el método de visualización de precios (precios con impuestos incluidos frente a precios sin impuestos) y los descuentos, pero no pone a cero de forma nativa el IVA cobrado. El campo nativo vat_number se guarda y se imprime en la factura, y el core puede aplicar una validación básica del campo, pero no debe tratarse como una validación autorizada del IVA: el core de PrestaShop no llama a VIES y no pone automáticamente el impuesto a cero porque se haya introducido un número.

En otras palabras, de serie puedes recopilar un número de IVA y puedes crear un grupo de clientes que muestre precios netos, pero no existe un "grupo exento de impuestos" nativo que elimine el IVA. Los grupos son útiles para la visualización neta/bruta y la visibilidad de precios; la exención real de IVA necesita una lógica correcta de reglas fiscales y dirección, o un módulo/gestor fiscal personalizado. El puente entre "este número es válido en VIES" y "por tanto este cliente está exento" es la parte que tienes que añadir. Cómo se crea un grupo de precios netos y cómo los precios cambian a netos para ese grupo pertenece a los artículos relacionados: consulta precios netos frente a precios brutos: cambio de visualización fiscal para la mecánica de visualización y grupos de clientes en PrestaShop para la configuración del grupo.

Dónde se activa realmente la exención en PrestaShop

Ajustes de administración del verificador de IVA de la UE con validación VIES y asignación a un grupo de clientes exento de impuestos
El verificador de IVA de la UE valida el número mediante VIES y asigna a los compradores B2B válidos a un grupo de clientes exento de impuestos.

Para automatizar esto de forma limpia, ayuda saber qué palanca mueve el impuesto. Hay dos vías claras, y se comportan de forma diferente:

MecanismoCómo se elimina el impuestoCuándo se aplicaCompromiso
Grupo de clientes con precios netosEl price_display_method del grupo controla solo la visualización con impuestos incluidos o sin impuestos, configúralo sin impuestos para que el cliente vea precios netos. El tipo impositivo real cobrado sigue viniendo de la regla fiscal de cada producto más las reglas de dirección (país/estado/zona), no del grupoEl cliente ve precios netos en toda la tienda en cuanto entra en el grupoLa visualización neta está ligada a la pertenencia al grupo, pero visualización no es exención: el grupo no pone a cero el IVA cobrado, así que el 0% legal aún tiene que venir de la lógica fiscal/de dirección
Exención fiscal a nivel de direcciónLa capa Tax / TaxManager resuelve el tipo según el país de la dirección de entrega y el grupo de reglas fiscales. PrestaShop nativo no trata automáticamente un número de IVA intracomunitario válido como disparador de inversión del sujeto pasivo; la lógica de un módulo/personalización tiene que validar el número de IVA y alterar el cálculo del impuesto o seleccionar una ruta de reglas fiscales adecuada que dé como resultado 0%Por pedido, según la dirección usada en el proceso de compraMás cerca de la regla legal real (lo que importa es la operación transfronteriza), pero necesita lógica personalizada para leer VIES y ajustar el impuesto del carrito

Por debajo, el impuesto se calcula mediante TaxManagerFactory / TaxCalculator de PrestaShop cuando se construye el total del carrito, leyendo el grupo de reglas fiscales de cada producto y la zona de la dirección del cliente. Una automatización puede (a) mover a un cliente verificado por VIES a un grupo de precios netos y aplicar una ruta fiscal 0% conforme para ese pedido, o (b) engancharse directamente a la resolución de impuestos del carrito/pedido. Lo esencial es no perder de vista que el grupo solo cambia la visualización neta/bruta, apoyarse en el propio motor de precios de PrestaShop para la visualización es robusto (sin cálculos fiscales duplicados, sin sorpresas al facturar, resistente a actualizaciones), pero el 0% legal de IVA aún debe aplicarse mediante lógica fiscal vinculada a la dirección de entrega/facturación, el país del vendedor, la validación del IVA y las reglas de la operación. Por tanto, el paso de verificación tiene que codificar "número VIES válido Y Estado miembro diferente" antes de promocionar al cliente para la visualización neta y activar la exención.

El flujo automatizado, de principio a fin

Un flujo de exención fiscal correctamente automatizado en PrestaShop se ve así:

  • Recoge el número pronto. Captura el número de IVA durante el registro, no escondido al final del proceso de compra, para que el cliente vea precios correctos (netos) desde la primera carga de página con sesión iniciada en lugar de una sorpresa fiscal que se revierte en el último paso.
  • Valida contra VIES en tiempo real. Al enviar el formulario, llama a VIES (código de país + número) y da al cliente una respuesta visual inmediata, una confirmación verde con el nombre de empresa devuelto, o un rechazo claro. Comprueba primero el formato para no gastar una llamada a VIES en una entrada obviamente mal formada, y después haz la llamada autorizada.
  • Comprueba la condición de país. Confirma que el país del cliente difiere del país de tu tienda. Un comprador B2B del mismo país está verificado pero no exento, un paso que una automatización ingenua se salta y un inspector no.
  • Promociona al cliente si la validación es correcta. Asigna el cliente verificado al grupo de precios netos para que el propio motor de precios de PrestaShop renderice precios netos, eso resuelve la visualización. Por separado, aplica el 0% de IVA mediante una lógica fiscal conforme vinculada a la dirección de entrega/facturación, el país del vendedor, la validación del IVA y las reglas de la operación, de modo que el pedido en sí lleve la exención y no solo muestre cifras netas.
  • Anota la factura. La factura generada debe mostrar la nota de inversión del sujeto pasivo (abajo), automáticamente, en el momento en que se exime el IVA.
  • Degrada con seguridad. Si VIES agota el tiempo de espera, no bloquees: acepta el pedido con IVA cobrado y márcalo para una nueva comprobación manual.

Verificar que un número es válido no es lo mismo que decidir que el solicitante es un cliente profesional real al que quieres conceder precios netos y cuentas de cliente, esa evaluación (pruebas de empresa, aprobación manual, control de fraude) es una tarea propia, cubierta en solicitudes de cuenta profesional: verificar clientes empresariales antes de dar acceso.

Requisitos de factura cuando aplicas la exención

Una factura exenta no es simplemente "la misma factura con 0 € de impuesto". Según la Directiva del IVA de la UE, debe incluir información específica, o la exención no queda correctamente documentada:

  • Tu propio número de IVA.
  • El número de IVA del cliente (el que has verificado).
  • Una nota explícita de inversión del sujeto pasivo, por ejemplo "Inversión del sujeto pasivo, IVA a declarar por el destinatario, artículo 196, Directiva 2006/112/CE del Consejo" (usa el equivalente en el idioma local cuando sea necesario).
  • El total indicado sin IVA.

En PrestaShop, la factura la genera el objeto OrderInvoice y se renderiza mediante la clase HTMLTemplateInvoice; la forma más limpia de añadir una línea condicional de inversión del sujeto pasivo es mediante la plantilla de factura / un hook, en lugar de editar PDFs a mano después. La anotación manual en decenas de pedidos es precisamente donde se cuelan los errores de cumplimiento.

Casos límite que rompen una automatización ingenua

Ventas dentro del mismo país. Un número de IVA válido de un cliente de tu propio país sigue siendo una venta nacional, cobra el IVA normal. La inversión del sujeto pasivo es estrictamente intracomunitaria transfronteriza. Cualquier automatización que exima solo por "número válido" se equivoca aquí.

Irlanda del Norte (números XI). Tras el Brexit, Irlanda del Norte permanece dentro del sistema de IVA de la UE para bienes y usa números de IVA con prefijo XI, que VIES valida. El resto de Gran Bretaña (GB) es un tercer país y queda completamente fuera de este mecanismo. Tu validación debe tratar XI como dentro del ámbito y GB como fuera.

Nuevos Estados miembros y cambios de formato. Cuando un país entra en la UE, tu validación debe reconocer su formato de IVA. Apóyate en VIES como fuente de verdad en lugar de una tabla de expresiones regulares codificada a mano que acabarás olvidando actualizar.

Fraude de identidad. Un defraudador decidido introduce un número de IVA real perteneciente a otra empresa para evitar el IVA. VIES dice "válido", pero el nombre y la dirección que devuelve no coincidirán con el pedido. Cuando VIES devuelva los datos de la empresa registrada, compáralos con la empresa y la dirección del pedido antes de eximir. Una discrepancia es una señal para revisión, no una exención automática.

Declaración recapitulativa de operaciones intracomunitarias. Las ventas con inversión del sujeto pasivo deben declararse a tu autoridad fiscal en una declaración recapitulativa de operaciones intracomunitarias (normalmente trimestral). Eso implica hacer seguimiento de qué pedidos fueron exentos y a quién, una razón para conservar la decisión de exención como datos estructurados del pedido, no como una nota de texto libre.

Conservación de registros: demuestra que lo comprobaste

La exención solo se puede defender si puedes demostrar que verificaste el número en el momento de la venta. Para cada pedido exento, guarda: el número de IVA, la marca temporal de validación, la respuesta VIES sin procesar (válido/no válido más cualquier nombre/dirección devuelto) y el pedido al que pertenece. Los requisitos de conservación varían según el Estado miembro, suelen ser varios años, a menudo hasta diez, así que comprueba tu norma local y conserva el registro durante ese tiempo. Si una automatización exime el impuesto pero no registra nada, has automatizado tu camino hacia un problema en una inspección.

Preguntas frecuentes

¿PrestaShop valida de serie los números de IVA contra VIES?

No. El core guarda el vat_number en la dirección y puede aplicar comprobaciones ligeras de formato, pero nunca llama a VIES ni pone el IVA a cero porque se haya introducido un número. Ese puente, validación VIES en vivo más la exención que desencadena, es la brecha que un módulo como Automatic EU VAT Checker existe para cerrar. Sin él, un número introducido es solo texto impreso en la factura.

VIES estaba caído cuando mi cliente finalizó la compra, ¿qué debería ocurrir?

El pedido debería completarse con IVA cobrado, marcado para una nueva comprobación manual, nunca bloqueado. Una caída de VIES (un SoapFault en el código anterior) es un fallo del lado de la administración, no un cliente no válido, así que tratarlo como "rechazado" te hace perder una venta legítima. Cuando VIES vuelva, vuelves a validar y, si el número es correcto, aplicas la exención retroactivamente. La regla práctica: una exención recuperable siempre es mejor que un carrito abandonado.

Un cliente de mi propio país introdujo un número de IVA válido, ¿lo eximo?

No. La inversión del sujeto pasivo es estrictamente intracomunitaria transfronteriza. Una empresa alemana que compra a una tienda alemana paga el IVA alemán completo incluso con un número perfectamente válido. Cualquier automatización que exime solo por "válido" se equivoca aquí. La comprobación de diferencia de país es una segunda condición obligatoria, y es la que se saltan las configuraciones ingenuas.

¿Qué ocurre con los números de IVA del Reino Unido e Irlanda del Norte?

Irlanda del Norte (números con prefijo XI) permanece dentro del sistema de IVA de la UE para bienes y se valida mediante VIES, trata XI como dentro del ámbito. El resto de Gran Bretaña (números GB) es un tercer país y queda fuera por completo del mecanismo de inversión del sujeto pasivo; VIES no validará un número GB para este fin. Tu validación tiene que distinguir ambos casos, algo que una tabla de expresiones regulares codificada a mano suele acabar haciendo mal con el tiempo.

¿Puedo simplemente poner a los clientes exentos de IVA en un grupo de precios netos y darlo por hecho?

Eso resuelve la visualización, el cliente ve precios netos, pero un grupo no pone a cero el IVA realmente cobrado. PrestaShop calcula el impuesto a partir de la regla fiscal del producto más la dirección de entrega, no de la pertenencia a un grupo. Por tanto necesitas ambas cosas: el grupo para la visualización neta y una ruta fiscal 0% conforme, vinculada a la dirección y al número verificado, para la exención legal. Confundir "muestra neto" con "está exento" es el error de configuración más común en todo este tema.

Cómo encaja mypresta.rocks

La brecha que deja PrestaShop, un campo de IVA guardado que nadie comprueba contra VIES, es exactamente el tipo de problema que un módulo enfocado puede cerrar sin bifurcar tu motor fiscal ni tu tema. Automatic EU VAT Checker valida durante el registro y el proceso de compra, codifica la condición transfronteriza (para que nunca exima a un comprador del mismo país), degrada con seguridad cuando VIES está caído y conserva el registro de validación que pide una inspección. El beneficio que compras es doble: el cliente siente una confirmación verde instantánea cuando su número es correcto y precios netos que aparecen de inmediato en lugar de revertirse en el último paso; tú tienes exenciones que se activan automáticamente contra el registro VIES en vivo, una línea de inversión del sujeto pasivo que llega a la factura sin edición manual y un registro de validación guardado por si tu autoridad fiscal lo solicita. Como la implementación correcta promociona a los clientes verificados a un grupo dedicado B2B/verificado por IVA para la visualización neta y el acceso, y añade lógica de módulo para la exención legal, en lugar de reescribir los cálculos fiscales, se apoya en el motor de precios de la plataforma para la visualización y resiste las actualizaciones. Si estás montando B2B desde cero, empieza por la visión general de vender B2B en PrestaShop, después conecta precios netos, asignación de grupos y, si ofreces cuentas, condiciones de pago aplazado sobre la base de cliente verificado que te da esta automatización.

El principio que hay detrás de todo esto: un número de IVA no es una casilla de verificación, es una afirmación sobre la que decides actuar legalmente. Automatizar la exención merece la pena precisamente porque la versión manual, revisar números a ojo, editar facturas a mano, recordar la regla del mismo país a las 6 de la tarde de un viernes, es donde viven los errores caros. Deja que VIES sea la autoridad, deja que el motor de grupos de PrestaShop gestione los precios y conserva el registro que demuestra que lo hiciste bien.

David Miller

David Miller

Fundador, mypresta.rocks
Sobre el autor

David Miller es un especialista en PrestaShop con más de una década de experiencia práctica y fundador de mypresta.rocks, un estudio de desarrollo con sede en Tychy, Polonia. Crea y mantiene un catálogo de 159 módulos PrestaShop, incluidas 21 suites «Revolution» que abarcan SEO, checkout, seguridad, rendimiento, marketing, búsqueda, soporte y gestión de almacén, que mejoran tiendas reales cada día, probados en PrestaShop 1.7.8, 8.x y 9.x. También se encarga del mantenimiento de tiendas en producción, por lo que su trabajo se mide por ventas reales, no por demos. Su experiencia abarca todo el comercio electrónico, rendimiento, seguridad, SEO y marketing, y va más allá de PrestaShop, hasta WooCommerce, Shopify y sistemas a medida. En el blog escribe sobre la parte técnica de PrestaShop: qué hace realmente la plataforma, qué se rompe en producción y qué soluciones aguantan.

Compartir esta publicación:

Comentarios

Aún no hay comentarios. ¡Sé el primero!

¿Le gustó este artículo?

Reciba nuestros últimos consejos, guías y actualizaciones de módulos en su bandeja de entrada.

Puedes darte de baja en cualquier momento. Encontrarás nuestros datos de contacto en el aviso legal.

Cargando...
Volver arriba