Componente que utiliza el Sistema de Intercambio de Información sobre el IVA (VIES) de la Comisión Europea (CE) para verificar y validar los números de registro de IVA en la UE, utilizando PHP y Composer.
La clase Vies
proporciona funcionalidad para realizar una llamada SOAP a VIES y devuelve un objeto CheckVatResponse
que contiene la siguiente información:
Código de país (cadena): una notación de 2 caracteres del código de país
Número de registro de IVA (cadena): contiene el número de registro completo sin el código de país
Fecha de solicitud (DateTime): la fecha en que se realizó la solicitud
Válido (booleano): indicador que indica que el número de registro era válido (VERDADERO) o no (FALSO)
Nombre (cadena): nombre de la empresa registrada (si lo proporciona el estado miembro de la CE)
Dirección (cadena): dirección registrada de la empresa (si la proporciona el estado miembro de la CE)
Declarado en el sitio web de la Comisión Europea:
Para realizar una entrega intracomunitaria sin cobrar el IVA, debe asegurarse de que la persona a la que se entrega el bien sea un sujeto pasivo en otro Estado miembro y que el bien en cuestión haya salido o salga de su Estado miembro hacia otro EM. El número de IVA también debe figurar en la factura.
Más información en http://ec.europa.eu/taxation_customs/vies/faqvies.do#item16
El 25 de mayo de 2018, el Reglamento General de Protección de Datos o GDPR se convierte en ley en los 28 Estados miembros europeos. ¿Este paquete de servicios VIES cumplirá con el RGPD?
En resumen: sí.
La respuesta más larga es que este paquete VIES solo interactúa con el servicio de verificación de identificación de IVA proporcionado por la Comisión Europea. La validación del IVA es obligatoria en los países europeos y por lo tanto se permite este servicio como licitud y base legal. Lea más sobre esto en el DPO-3816.1 europeo. Este servicio no almacena ningún dato por sí mismo ni recopila más información de la estrictamente requerida por la ley y proporcionada por el servicio EC VIES.
Cuando haya implementado este paquete de servicios en su propio proyecto, asegúrese de almacenar solo el ID de IVA, la marca de tiempo de la validación, el resultado de la validación y, opcionalmente, el ID de validación proporcionado por el servicio EC VIES. .
Versión mínima de PHP: 7.3
Versión de PHP recomendada: 7.4
Extensión: jabón
Extensión: pcntl
Extensión: tipoc
Lea las notas de la versión para obtener más detalles.
¡Este proyecto está en Packagist!
Para instalar la última versión estable, utilice composer require dragonbe/vies
.
Para instalar específicamente una versión (por ejemplo, 2.2.0), simplemente agréguela al comando anterior, por ejemplo, composer require dragonbe/vies:2.2.0
Aquí hay un ejemplo de uso que puede ejecutar inmediatamente en la línea de comando (o en cron, trabajador o lo que sea), ya que este será probablemente su caso de uso más común.
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) . '/vendor/autoload.php';$vies = new Vies();
if (false === $vies->getHeartBeat()->isAlive()) {echo 'El servicio no está disponible en este momento, inténtalo de nuevo más tarde.' . PHP_EOL;salir(1); }
$vies = new Vies();$opciones = ['proxy_host' => '127.0.0.1','proxy_port' => '8888', ];$vies->setOptions($opciones);$heartBeat = new DragonBeViesHeartBeat('tcp://' . $opciones['proxy_host'], $opciones['proxy_port']);$vies->setHeartBeat($heartBeat );$isAlive = $vies->getHeartBeat()->isAlive();
Ahora que sabemos que el servicio está activo, podemos comenzar a validar los ID de IVA.
$vatResult = $vies->validateVat('BE', // Código de país del comerciante '0203430576', // ID de IVA del comerciante'BE', // Código de país del solicitante '0811231190' // ID de IVA del solicitante);
$vatResult = $vies->validateVat('BE', // Código de país del comerciante '0203430576', // ID de IVA del comerciante'BE', // Código de país del solicitante '0811231190' // ID de IVA del solicitante'B-Rail', // Nombre del comerciante'NV', // Tipo de empresa del comerciante'Frankrijkstraat 65', // Dirección del comerciante'1060', // Comerciante código postal'Sint-Gillis' // Ciudad comerciante );
La funcionalidad más importante es ver si el ID de IVA es válido.
echo ($vatResult->isValid() ? 'Válido' : 'No válido') . PHP_EOL;// Resultado: Válido
echo 'Identificador: ' . $ivatResult->getIdentifier() . PHP_EOL;// Resultado: Identificador: WAPIAAAAWaXGj4Ra
Nota: El servicio VIES devuelve la fecha y la zona horaria, pero no la hora.
echo 'Fecha y hora:' . $ivatResult->getRequestDate()->format('r') . PHP_EOL;// Resultado: Fecha y hora: Sábado, 31 de agosto de 2019 00:00:00 +0200
echo 'Nombre de la empresa: ' . $ivatResult->getName() . PHP_EOL;// Resultado: Nombre de la empresa: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
echo 'Dirección de la empresa:' . $ivatResult->getAddress() . PHP_EOL;// Resultado: Dirección de la empresa: FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL)
echo 'Coincidencia de nombre de comerciante: ' . $ivatResult->getNameMatch() . PHP_EOL;// Resultado: Coincidencia de nombre de comerciante:
echo 'Coincidencia de tipo de empresa comercial: ' . $ivatResult->getCompanyTypeMatch() . PHP_EOL;// Resultado: Coincidencia del tipo de empresa comerciante:
echo 'Partida callejera del comerciante:' . $ivatResult->getStreetMatch() . PHP_EOL;// Resultado: Coincidencia callejera del comerciante:
echo 'Coincidencia del código postal del comerciante: ' . $ivatResult->getPostcodeMatch() . PHP_EOL;// Resultado: Coincidencia del código postal del comerciante:
echo 'Partido de ciudad comerciante:' . $ivatResult->getCityMatch() . PHP_EOL;// Resultado: Coincidencia de ciudad comerciante:
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) . '/vendor/autoload.php';$vies = new Vies();$company = [ 'country_code' => 'BE', 'vat_id' => '0203430576', 'trader_name' => 'B-Rail', 'trader_company_type' => 'NV', 'trader_street' => 'Frankrijkstraat 65', 'trader_postcode' => '1060', 'trader_city' => 'Sint-Gillis', ];try {$vatResult = $vies->validateVat($company['country_code'], // Código de país del comerciante$company['vat_id'], // ID de IVA del comerciante'BE', // Código de país del solicitante (su código de país)'0811231190', // ID de IVA del solicitante (su ID de IVA)$empresa['nombre_comerciante'], // Comerciante nombre$company['trader_company_type'], // Tipo de empresa comerciante$company['trader_street'], // Dirección del comerciante$company['trader_postcode'], // Código postal del comerciante$company['trader_city'] // Ciudad del comerciante ); } catch (ViesException $viesException) {echo 'No se puede procesar la validación del IVA:' . $viesException->getMessage();salir (2); } catch (ViesServiceException $viesServiceException) {echo 'No se puede procesar la validación del IVA:' . $viesServiceException->getMessage();salir (2); }echo ($vatResult->isValid() ? 'Válido' : 'No válido') . PHP_EOL;echo 'Identificador: ' . $ivatResult->getIdentifier() . PHP_EOL;echo 'Fecha y hora:' . $ivatResult->getRequestDate()->format('d/m/Y H:i') . PHP_EOL;echo 'Nombre de la empresa:' . $ivatResult->getName() . PHP_EOL;echo 'Dirección de la empresa: ' . $ivatResult->getAddress() . PHP_EOL;echo 'Coincidencia de nombre de operador: ' . $ivatResult->getNameMatch() . PHP_EOL;echo 'Coincidencia de tipo de empresa comercial: ' . $ivatResult->getCompanyTypeMatch() . PHP_EOL;echo 'Coincidencia callejera del comerciante: ' . $ivatResult->getStreetMatch() . PHP_EOL;echo 'Coincidencia del código postal del comerciante: ' . $ivatResult->getPostcodeMatch() . PHP_EOL;echo 'Coincidencia de ciudad comerciante: ' . $ivatResult->getCityMatch() . PHP_EOL; eco PHP_EOL;
Cuando ejecute esto, obtendrá el siguiente resultado:
Valid Identifier: WAPIAAAAWaYR0O8D Date and time: 21/10/2018 02:00 Company name: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN Company address: FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUSSEL) Trader name match: Trader company type match: Trader street match: Trader postcode match: Trader city match:
Aquí tienes una lista de productos o proyectos que han incluido este paquete VIES
Paquete Symfony de MyOnlineStore
paquete sándwich/vies
Si tiene un producto o proyecto que utiliza este paquete y desea alguna atribución por su trabajo, envíeme un correo electrónico o envíeme un mensaje en Twitter o Facebook.
Si te gusta tener contenedores Docker, ahora puedes hacer uso de un contenedor diseñado para ese fin.
ejecución de la ventana acoplable --rm -d -p 8000:18080 dragonbe/vies-web
Dirija su navegador a localhost:8000 para utilizar la interfaz web para validar el IVA.
Microsoft Dynamics GP: validación del número de registro fiscal de la UE en tiempo real de Dynamics GP mediante VIES
Proyectos populares de la ley RIA en la UE
Ejemplos de código PHP - HotExamples.com
Para Grecia, el código ISO internacional del país es GR , pero para los IDN de IVA utilizan el prefijo EL . Gracias a Johan Wilfer por informar esto.
Desde el 1 de enero de 2021, el Reino Unido ya no es miembro de la Unión Europea y, como resultado, el servicio VIES proporcionado por la Comisión Europea ya no valida los números de identificación fiscal del Reino Unido. Sin embargo, hay una excepción y es para Irlanda del Norte (XI), cuyo número de identificación fiscal se puede validar utilizando esta biblioteca y el servicio EC VIES.
DragonBeVies se lanza bajo la licencia MIT. Consulte el archivo de LICENCIA incluido para obtener más detalles.