Componente que utiliza o Sistema de Intercâmbio de Informações sobre IVA (VIES) da Comissão Europeia (CE) para verificar e validar números de registo de IVA na UE, utilizando PHP e Composer.
A classe Vies
fornece funcionalidade para fazer uma chamada SOAP para VIES e retorna um objeto CheckVatResponse
contendo as seguintes informações:
Código do país (string): uma notação de 2 caracteres do código do país
Número de registro de IVA (string): contém o número de registro completo sem o código do país
Data da solicitação (DateTime): a data em que a solicitação foi feita
Válido (booleano): flag indicando que o número de registro era válido (TRUE) ou não (FALSE)
Nome (string): nome registrado da empresa (se fornecido pelo estado membro da CE)
Endereço (string): endereço registrado da empresa (se fornecido pelo estado membro da CE)
Declarado no site da Comissão Europeia:
Para efectuar uma entrega intracomunitária sem cobrança de IVA, deverá garantir que a pessoa a quem entrega os bens é um sujeito passivo noutro Estado-Membro e que os bens em questão partiram ou sairão do seu Estado-Membro para outro EM. O número de IVA também deverá constar na fatura.
Mais informações em http://ec.europa.eu/taxation_customs/vies/faqvies.do#item16
Em 25 de maio de 2018, o Regulamento Geral de Proteção de Dados ou GDPR torna-se lei em todos os 28 Estados-Membros europeus. Este pacote de serviços VIES será compatível com o GDPR?
Resumindo: sim.
A resposta mais longa é que este pacote VIES interage apenas com o serviço de verificação de identificação de IVA fornecido pela Comissão Europeia. A validação do IVA é obrigatória nos países europeus e por isso este serviço é permitido como legalidade e base legal. Leia mais sobre isso no DPO-3816.1 europeu. Este serviço não armazena quaisquer dados nem recolhe mais informação do que a estritamente exigida por lei e fornecida pelo serviço EC VIES.
Quando você implementar este pacote de serviços em seu próprio projeto, certifique-se de armazenar apenas o ID do IVA, o carimbo de data e hora da validação, o resultado da validação e, opcionalmente, o ID de validação fornecido pelo serviço EC VIES .
Versão mínima do PHP: 7.3
Versão recomendada do PHP: 7.4
Extensão: sabonete
Extensão: pcntl
Extensão: ctype
Por favor, leia as notas de lançamento para obter detalhes.
Este projeto está no Packagist!
Para instalar a versão estável mais recente, use composer require dragonbe/vies
.
Para instalar especificamente uma versão (por exemplo, 2.2.0), basta adicioná-la ao comando acima, por exemplo, composer require dragonbe/vies:2.2.0
Aqui está um exemplo de uso que você pode executar imediatamente na linha de comando (ou no cron, trabalhador ou qualquer outro), pois este provavelmente será o seu caso de uso mais comum.
<?phpuse DragonBeViesVies;use DragonBeViesViesException;use DragonBeViesViesServiceException;require_once dirname(__DIR__) . '/vendor/autoload.php';$vies = new Vies();
if (false === $vies->getHeartBeat()->isAlive()) {echo 'O serviço não está disponível no momento, tente novamente mais tarde.' . PHP_EOL;exit(1); }
$vies = new Vies();$options = ['proxy_host' => '127.0.0.1','proxy_port' => '8888', ];$vies->setOptions($options);$heartBeat = new DragonBeViesHeartBeat('tcp://' . $options['proxy_host'], $options['proxy_port']);$vies->setHeartBeat($heartBeat );$isAlive = $vies->getHeartBeat()->isAlive();
Agora que sabemos que o serviço está ativo, podemos começar a validar os IDs de IVA
$vatResult = $vies->validateVat('BE', // Código do país do comerciante '0203430576', // ID do IVA do comerciante'BE', // Código do país do solicitante '0811231190' // ID do IVA do solicitante);
$vatResult = $vies->validateVat('BE', // Código do país do comerciante '0203430576', // ID do IVA do comerciante'BE', // Código do país do solicitante '0811231190' // ID do IVA do solicitante'B-Rail', // Nome do comerciante'NV', // Tipo de empresa do comerciante'Frankrijkstraat 65', // Endereço do comerciante'1060', // Comerciante código postal'Sint-Gillis' // Cidade comerciante );
A funcionalidade mais importante é verificar se o ID do IVA é válido
echo ($vatResult->isValid() ? 'Válido' : 'Não válido') . PHP_EOL;// Resultado: Válido
echo 'Identificador: ' . $vatResult->getIdentifier() . PHP_EOL;// Resultado: Identificador: WAPIAAAAWaXGj4Ra
Nota: o serviço VIES retorna data e fuso horário, mas não hora
echo 'Data e hora: '. $vatResult->getRequestDate()->format('r') . PHP_EOL;// Resultado: Data e hora: Sábado, 31 de agosto de 2019 00:00:00 +0200
echo 'Nome da empresa: '. $vatResult->getNome() . PHP_EOL;// Resultado: Nome da empresa: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
echo 'Endereço da empresa:' . $vatResult->getAddress() . PHP_EOL;// Resultado: Endereço da empresa: FRANKRIJKSTRAAT 56 1060 SINT-GILLIS (BIJ-BRUXSEL)
echo 'Correspondência do nome do comerciante: ' . $vatResult->getNameMatch() . PHP_EOL;// Resultado: Correspondência do nome do trader:
echo 'Correspondência do tipo de empresa do comerciante:' . $vatResult->getCompanyTypeMatch() . PHP_EOL;// Resultado: correspondência do tipo de empresa comerciante:
echo 'Correspondência de rua do comerciante:' . $vatResult->getStreetMatch() . PHP_EOL;// Resultado: Correspondência de rua do trader:
echo 'Correspondência do código postal do comerciante:' . $vatResult->getPostcodeMatch() . PHP_EOL;// Resultado: correspondência do código postal do trader:
echo 'Correspondência da cidade do comerciante:' . $vatResult->getCityMatch() . PHP_EOL;// Resultado: Correspondência da cidade do trader:
<?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 do país do comerciante$company['vat_id'], // ID de IVA do comerciante'BE', // Código do país do solicitante (seu código do país)'0811231190', // ID de IVA do solicitante (seu ID de IVA)$company['trader_name'], // Comerciante nome$company['trader_company_type'], // Tipo de empresa do comerciante$company['trader_street'], // Endereço do comerciante$company['trader_postcode'], // Código postal do comerciante$company['trader_city'] // Cidade do comerciante ); } catch (ViesException $viesException) {echo 'Não é possível processar validação de IVA: ' . $viesException->getMessage();exit (2); } catch (ViesServiceException $viesServiceException) {echo 'Não é possível processar validação de IVA: ' . $viesServiceException->getMessage();exit (2); }echo ($vatResult->isValid() ? 'Válido' : 'Não válido') . PHP_EOL;echo 'Identificador: ' . $vatResult->getIdentifier() . PHP_EOL;echo 'Data e hora: ' . $vatResult->getRequestDate()->format('d/m/Y H:i') . PHP_EOL;echo 'Nome da empresa: ' . $vatResult->getNome() . PHP_EOL;echo 'Endereço da empresa: ' . $vatResult->getAddress() . PHP_EOL;echo 'Correspondência do nome do trader: ' . $vatResult->getNameMatch() . PHP_EOL;echo 'Correspondência do tipo de empresa do trader: ' . $vatResult->getCompanyTypeMatch() . PHP_EOL;echo 'Correspondência de rua do trader: ' . $vatResult->getStreetMatch() . PHP_EOL;echo 'Correspondência do código postal do trader: ' . $vatResult->getPostcodeMatch() . PHP_EOL;echo 'Correspondência da cidade do trader: ' . $vatResult->getCityMatch() . PHP_EOL;echo PHP_EOL;
Ao executar isso, você obterá o seguinte 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:
Aqui está uma lista de produtos ou projetos que incluíram este pacote VIES
Pacote Symfony da MyOnlineStore
pacote sanduíche/vies
Se você tem um produto ou projeto que usa este pacote e deseja alguma atribuição pelo seu trabalho, envie-me um e-mail ou envie-me um ping no Twitter ou Facebook.
Se você gosta de contêineres Docker, agora você pode usar um contêiner projetado para essa finalidade.
docker run --rm -d -p 8000:18080 dragonbe/vies-web
Aponte seu navegador para localhost:8000 para usar a interface da web para validar o IVA.
Microsoft Dynamics GP - Validação do número de registro fiscal da UE em tempo real do Dynamics GP usando VIES
Projetos populares de lei RIA da UE
Exemplos de código PHP - HotExamples.com
Para a Grécia, o código ISO internacional do país é GR , mas para IDNs de IVA eles usam o prefixo EL . Obrigado a Johan Wilfer por relatar isso.
Desde 1 de janeiro de 2021, o Reino Unido já não é membro da União Europeia e, como resultado, o serviço VIES fornecido pela Comissão Europeia já não valida IDs de IVA para o Reino Unido. Porém, há uma exceção: a Irlanda do Norte (XI), para a qual os IDs de IVA podem ser validados usando esta biblioteca e o serviço EC VIES.
DragonBeVies é lançado sob a licença do MIT. Consulte o arquivo LICENSE incluído para obter detalhes.