Skip to content

Aceptar Grecia en VIES y sacar al Reino Unido de la UE - #2059

Merged
NeoRazorX merged 1 commit into
NeoRazorX:masterfrom
daniel89fg:vies-grecia-reino-unido
Oct 28, 2026
Merged

NeoRazorX merged 1 commit into
NeoRazorX:masterfrom
daniel89fg:vies-grecia-reino-unido

Conversation

@daniel89fg

Copy link
Copy Markdown
Contributor

Descripción

Dos fallos con la lista de países de la UE:

  1. Grecia: VIES identifica Grecia con el prefijo EL, pero los checkVies() de cliente, proveedor, empresa, contacto y agente, y IntracomunitariaTrait, le pasan el código ISO del país, que es GR. Como GR no está en Vies::EU_COUNTRIES, un cliente griego daba siempre "país fuera de la UE" sin llegar a consultar VIES, y la factura no se marcaba como intracomunitaria. RemesasSEPA ya hace esta conversión a mano.
  2. Reino Unido: Paises::MIEMBROS_UE seguía incluyendo GB, que salió de la UE el 31/01/2020. En el core no cambia el resultado de setIntracomunitaria(), porque VIES ya rechazaba GB (solo cambia el aviso, que ahora es "fuera de la UE"). Sí afecta a los plugins que usan Paises::miembroUE(), como Modelo347.

Cambios realizados

  • Vies::vatPrefix() (y la constante VAT_PREFIXES): prefijo del NIF-IVA de un país a partir de su código ISO (GR → EL; el resto, igual). check() y fetch() lo aplican antes de validar y consultar, así que aceptan GR y EL.
  • Vies::normalize() quita tanto el código ISO como el prefijo del NIF-IVA: en Grecia, GR123456789 y EL123456789 quedan en 123456789.
  • Paises::MIEMBROS_UE sin GB (27 países).
  • Tests: testVatPrefix, testGreeceIsEu y casos nuevos de normalize en ViesTest, dos casos de integración con Grecia, y PaisesTest (27 miembros, sin GB, y todos con prefijo en VIES).

Cómo probar

  1. Con un cliente cuya dirección sea de Grecia y un NIF-IVA (EL…), $cliente->checkVies() consulta VIES. Antes devolvía false con el aviso "país fuera de la UE", sin llegar a consultar.
  2. Vies::normalize('GR123456789', 'GR') y Vies::normalize('EL123456789', 'GR') devuelven 123456789.
  3. Paises::miembroUEbyIso('GB') devuelve false.
  4. Tests: ViesTest y PaisesTest. La batería completa del core pasa en PHP 8.1–8.5 con MySQL y PostgreSQL.

… la UE

VIES identifica Grecia con el prefijo EL, pero los checkVies() del core
le pasan el código ISO del país (GR), así que un cliente griego daba
siempre "país fuera de la UE". Y Paises::MIEMBROS_UE seguía incluyendo
el Reino Unido (GB), que salió de la UE el 31/01/2020.

- Vies::vatPrefix(): prefijo del NIF-IVA de un país (GR → EL). check() y
  fetch() lo usan, así que aceptan GR y EL.
- Vies::normalize() quita tanto el código ISO como el prefijo del NIF-IVA
  (en Grecia, GR y EL).
- Paises::MIEMBROS_UE sin GB.
- Tests de vatPrefix(), normalize() y check() con GR, y PaisesTest.

@NeoRazorX NeoRazorX left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revisado: correcto. phpcs limpio y ViesTest, PaisesTest y los tests de modelo con VIES/intracomunitaria pasan en local (PHP 8.3 + MariaDB).

@NeoRazorX
NeoRazorX merged commit 7c7d71b into NeoRazorX:master Oct 28, 2026
23 checks passed
@daniel89fg
daniel89fg deleted the vies-grecia-reino-unido branch October 28, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants