Skip to content

Validacións

O SDK aplica localmente todas as validacións listadas en Validaciones y errores del servicio v1.2.2. Isto permíteche cazar rexistros mal formados antes de gastar unha chamada SOAP — a AEAT devolvería o mesmo diagnóstico, pero en microsegundos.

Chamar ao validador

ts
import {
  validateInvoiceForRegister,
  validateInvoiceForCancel,
} from 'verifactu-sdk/validators';

const issues = validateInvoiceForRegister(invoice);
if (issues.some((i) => i.severity === 'rejection')) {
  throw new BusinessValidationError('Factura rexeitada', { code: issues[0]!.code });
}

Cada ValidationResult devolto leva:

  • code — o código de erro da AEAT máis próximo do catálogo.
  • field — ruta con puntos do campo en conflito (p. ex. breakdown.0.taxRate).
  • severity'rejection' rexeita o rexistro, 'admissible' acéptao con advertencia.
  • message — descrición curta en inglés da incidencia.

VerifactuClient.registerInvoice executa o validador automaticamente e lanza BusinessValidationError en caso de rexeitamento; só chamas ao validador directamente cando queres inspeccionar todas as incidencias á vez.

As 23 regras

O validador implementa unha ou máis comprobacións por regra da AEAT. A correspondencia é:

RegraGrupo de camposQue comprobaSeveridade
1IDFacturaFormato do NIF, caracteres permitidos en NumSerieFactura, FechaExpedicion ≥ 28-10-2024 e ±20 anos respecto a hoxe.Rexeitamento
2RechazoPrevio + SubsanacionSó combinacións coherentes (N, S, X).Rexeitamento
3TipoRectificativaObrigatoria só se TipoFactura empeza por R.Rexeitamento
4FacturasRectificadasSó permitida en facturas tipo R.Rexeitamento
5FacturasSustituidasSó permitida en facturas F3.Rexeitamento
6ImporteRectificacionObrigatorio cando TipoRectificativa = S.Rexeitamento
7FechaOperacion±20 anos respecto á data de expedición, regras especiais para ClaveRegimen 14/15.Rexeitamento
8FacturaSimplificadaArt7273Só en F1/F3/R1/R2/R3/R4.Rexeitamento
9FacturaSinIdentifDestinatarioArt61dSó en F2/R5.Rexeitamento
10MacrodatoObrigatorio se ImporteTotal ≥ 100 000 000 €.Rexeitamento
11EmitidaPorTerceroODestinatarioCoherencia con Tercero / Destinatarios.Rexeitamento
12TerceroFormato NIF, distinto do emisor, estrutura NIF-IVA por país.Rexeitamento
13DestinatariosObrigatorios para F1/F3/R1/R2/R3/R4; prohibidos para F2/R5; formato NIF; estrutura NIF-IVA.Rexeitamento
14CuponSó permitido cando TipoFactura é R1 ou R5.Rexeitamento
15.1Desglose.TipoImpositivoTipo permitido por data (segundo táboa histórica da AEAT).Rexeitamento
15.2BaseImponibleACosteSó cando ClaveRegimen = 06 ou Impuesto en 02/05.Rexeitamento
15.3TipoRecargoEquivalenciaParella válida con TipoImpositivo (21/5.2, 10/1.4, …).Rexeitamento
15.4CalificacionOperacionS1/S2/N1/N2; mutuamente excluínte con OperacionExenta.Rexeitamento
15.5OperacionExentaE1-E6 (IVA); E7/E8 só para IGIC; coherencia con TipoFactura.Rexeitamento
15.6ClaveRegimen01-21 con sub-regras para 02/03/04/06/07/08/10/11/14/20/21.Rexeitamento
15.7CuotaRepercutidabase × tipo con tolerancia ±10 € (≤ 3 000 € para simplificadas).Rexeitamento
16CuotaTotalSuma de cotas repercutidas con tolerancia ±10 €.Rexeitamento
17ImporteTotalSuma de bases + imposto + recarga con tolerancia ±10 €.Rexeitamento
18Huella anterior64 caracteres hex en maiúsculas cando está presente.Admisible (2003)
19SistemaInformaticoSystemId 2 caracteres [A-Z0-9] excluíndo Ñ; coherencia TipoUsoPosibleSoloVerifactu / MultiOT.Rexeitamento
20FechaHoraHusoGenRegistroISO 8601 válido con offset; non en futuro afastado.Rexeitamento / Admisible
21NumRegistroAcuerdoFacturacion≤ 15 caracteres, conxunto de caracteres permitido.Rexeitamento
22IdAcuerdoSistemaInformatico≤ 16 caracteres, conxunto de caracteres permitido.Rexeitamento
23Huella64 caracteres hex en maiúsculas.Admisible (1292)

NIF, NIE, CIF

O validador local cobre as tres formas de identificador español e o díxito de control:

  • DNI: 8 díxitos + letra de control calculada pola táboa mod-23.
  • NIE: prefixo X|Y|Z + 7 díxitos + letra de control, mesma táboa.
  • CIF: letra + 7 díxitos + díxito/letra de control (algoritmo mixto mod-10 / mod-11 segundo a spec AEAT).

NIF-IVA (UE)

O validador cobre os 28 estados membros históricos da UE máis Irlanda do Norte (GB/XI) con xestión Brexit consciente de datas. As estruturas e as regras por país cárganse de validators/nifIva.ts. Exemplos:

PaísCódigoEstrutura
AlemañaDE9 díxitos
FranciaFR11 caracteres (2 alfanuméricos + 9 díxitos)
ItaliaIT11 díxitos
PortugalPT9 díxitos
Países BaixosNL12 caracteres
Reino UnidoGB9 / 12 díxitos; válido só ≤ 31-12-2020 (post-Brexit, usar XI)
Irlanda do NorteXI9 / 12 díxitos; válido só ≥ 01-01-2021

O validador acepta country=ES por completude, pero os NIFs españois pasan pola ruta local de NIF/CIF.

Severidade

A AEAT distingue tres severidades:

  • envelope — rexéitase o envío completo (códigos 4xxx, ponos o servizo tras parsear o sobre SOAP).
  • record — só se rexeita o rexistro afectado (códigos 1xxx e 3xxx).
  • admissible — o rexistro acéptase pero márcase para subsanación (códigos 2xxx).

O validador local devolve os dous primeiros como severity: 'rejection' e o terceiro como severity: 'admissible'. Os erros de envelope veñen do nivel de cable e nunca aparecen no resultado local.

Seguinte

Released under the MIT license.