Resumen
Los sistemas que no envían los registros a la AEAT (modalidad NO VERI*FACTU) deben anotar eventos: arranque y parada en esa modalidad, detección de anomalías, restauraciones, exportaciones y un resumen periódico. Cada evento lleva su propia huella SHA-256, encadenada con la del evento anterior, y va firmado.
Tipos de evento (TipoEvento)
| Código | Evento |
|---|---|
01 | Inicio del funcionamiento del sistema informático como «NO VERI*FACTU». |
02 | Fin del funcionamiento del sistema informático como «NO VERI*FACTU». |
03 | Lanzamiento del proceso de detección de anomalías en los registros de facturación. |
04 | Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de facturación. |
05 | Lanzamiento del proceso de detección de anomalías en los registros de evento. |
06 | Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de evento. |
07 | Restauración de copia de seguridad, cuando ésta se gestione desde el propio sistema informático de facturación. |
08 | Exportación de registros de facturación generados en un periodo. |
09 | Exportación de registros de evento generados en un periodo. |
10 | Registro resumen de eventos. |
90 | Otros tipos de eventos a registrar voluntariamente por la persona o entidad productora del sistema informático. |
Catálogo de anomalías (TipoAnomalia)
Cuando el sistema detecta una anomalía (eventos 04 y 06), la clasifica con uno de estos códigos. El catálogo es también una buena lista de comprobación de lo que tu sistema debe vigilar:
| Código | Anomalía |
|---|---|
01 | Integridad-huella |
02 | Integridad-firma |
03 | Integridad - Otros |
04 | Trazabilidad-cadena-registro - Reg. no primero pero con reg. anterior no anotado o inexistente |
05 | Trazabilidad-cadena-registro - Reg. no último pero con reg. posterior no anotado o inexistente |
06 | Trazabilidad-cadena-registro - Otros |
07 | Trazabilidad-cadena-huella - Huella del reg. no se corresponde con la 'huella del reg. anterior' almacenada en el registro posterior |
08 | Trazabilidad-cadena-huella - Campo 'huella del reg. anterior' no se corresponde con la huella del reg. anterior |
09 | Trazabilidad-cadena-huella - Otros |
10 | Trazabilidad-cadena - Otros |
11 | Trazabilidad-fechas - Fecha-hora anterior a la fecha del reg. anterior |
12 | Trazabilidad-fechas - Fecha-hora posterior a la fecha del reg. posterior |
13 | Trazabilidad-fechas - Reg. con fecha-hora de generación posterior a la fecha-hora actual del sistema |
14 | Trazabilidad-fechas - Otros |
15 | Trazabilidad - Otros |
90 | Otros |
El comprobador de huellas etiqueta cada fallo con su código de anomalía equivalente: huella que no corresponde a los datos (01), huella anterior que no coincide (08), registro anterior que no identifica la factura previa (04) y fecha-hora anterior a la del registro previo (11).
La huella de un evento
Se calcula igual que la de los registros de facturación (SHA-256 sobre campo=valor&… en UTF-8, hexadecimal en mayúsculas), con estos nueve campos en este orden:
| # | Campo en la cadena | Ruta en el XML |
|---|---|---|
| 1 | NIF | RegistroEvento/Evento/SistemaInformatico/NIF |
| 2 | ID | RegistroEvento/Evento/SistemaInformatico/IDOtro/ID |
| 3 | IdSistemaInformatico | …/SistemaInformatico/IdSistemaInformatico |
| 4 | Version | …/SistemaInformatico/Version |
| 5 | NumeroInstalacion | …/SistemaInformatico/NumeroInstalacion |
| 6 | NIF | RegistroEvento/Evento/ObligadoEmision/NIF |
| 7 | TipoEvento | RegistroEvento/Evento/TipoEvento |
| 8 | HuellaEvento | …/Encadenamiento/EventoAnterior/HuellaEvento |
| 9 | FechaHoraHusoGenEvento | RegistroEvento/Evento/FechaHoraHusoGenEvento |
Dos detalles propios de los eventos:
- El nombre
NIFaparece dos veces: el del productor del sistema (1) y el del obligado a expedir facturas (6). - NIF e ID son excluyentes: el productor se identifica con uno u otro. El que no se usa va vacío, como en el ejemplo de la especificación:
NIF=89890001K&ID=&IdSistemaInformatico=….
Discrepancia de orden entre el PDF y el XSD
La especificación de la huella indica que el orden de los campos coincide con el del diseño de registro. Sin embargo, en EventosSIF.xsd el elemento FechaHoraHusoGenEvento aparece antes que TipoEvento, mientras que la cadena de la huella los pone al revés (7: TipoEvento, 9: FechaHoraHusoGenEvento). No es un error que te afecte si sigues cada documento para lo suyo:
- para escribir el XML, el orden del XSD (si no, la validación falla con «This element is not expected»);
- para calcular la huella, el orden de la especificación de la huella.
Como la especificación no incluye ejemplos de huella de evento, no hay un vector oficial con el que contrastar la implementación. Nuestro comprobador lo indica al verificar eventos.