Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Envío de registros y sus respuestas (https://www.clubdelphi.com/foros/forumdisplay.php?f=66)
-   -   generacion del verifactur y validarlo (https://www.clubdelphi.com/foros/showthread.php?t=97366)

victor03 26-03-2025 13:40:54

generacion del verifactur y validarlo
 
Hola, lo primero de todo: perdón si este tema ya se ha tratado en el foro o si no estoy usando correctamente el foro.

Estoy intentando trabajar con VERI*FACTU y tengo un par de dudas:

¿Existe algún ejemplo completo de la estructura XML que debe tener el envío?
He visto que debe enviarse un archivo .xml, pero la mayoría de "ejemplos" que encuentro son de gente diciendo que no les funciona. ¿Hay algún ejemplo oficial o funcional que pueda usar como referencia para asegurarme de que la estructura es correcta?

¿Cómo se valida un envío VERI*FACTU?
Por lo que he leído en el foro, ya hay disponible una zona de pruebas, pero parece que hace falta un certificado digital para identificarse, entre otros requisitos.
¿Me podéis decir qué necesito para validar un envío y si hay algún ejemplo del proceso?

Trabajo con Delphi 2005, que sé que ya tiene sus años, y no estoy seguro de si con esta versión voy a poder realizar el envío correctamente al sistema de la AEAT, lo comento por si alguien ha podido probar con esta versión y me puede dar algún consejo.

chenech 26-03-2025 14:59:32

Yo uso C++ Builder pero para el caso es lo mismo, tengo también una versión muy antigua, anterior a Delphi 5, imagínate :-) lo que hago es generar el XML a pelo en un string, lo guardo en disco y luego lo envío con una llamada a system del curl.
Te adjunto varios XML, de una factura ordinaria, simplificada y rectificativa, así como del comando curl.
Hay mas variaciones, distintos tipos de IVA/IGIC, exentas, rectificativa de una simplificada, envíos masivos, etc. Pero jugando con estos ejemplos los puedes ir viendo, de todas formas, en esta web hay infinidad de ejemplos.
Un saludo.
Factura ordinaria:
Código:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<Cabecera>
<ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<NombreRazon>XXXXXXX</NombreRazon>
<NIF>XXXXXXX</NIF>
</ObligadoEmision>
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<Incidencia>N</Incidencia>
</RemisionVoluntaria>
</Cabecera>
<RegistroFactura>
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<IDVersion>1.0</IDVersion>
<IDFactura>
<IDEmisorFactura>XXXXXXX</IDEmisorFactura>
<NumSerieFactura>A00000045</NumSerieFactura>
<FechaExpedicionFactura>28-10-2024</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>INFOCERDA SL</NombreRazonEmisor>
<Subsanacion>N</Subsanacion>
<RechazoPrevio>N</RechazoPrevio>
<TipoFactura>F1</TipoFactura>
<DescripcionOperacion>VENTA DE MERCADERIAS</DescripcionOperacion>
<FacturaSimplificadaArt7273>N</FacturaSimplificadaArt7273>
<FacturaSinIdentifDestinatarioArt61d>N</FacturaSinIdentifDestinatarioArt61d>
<Macrodato>N</Macrodato>
<Destinatarios>
<IDDestinatario>
<NombreRazon>XXXXXXXXXXXXXXXXXX</NombreRazon>
<NIF>XXXXXXXX</NIF>
</IDDestinatario>
</Destinatarios>
<Cupon>N</Cupon>
<Desglose>
<DetalleDesglose>
<Impuesto>01</Impuesto>
<ClaveRegimen>01</ClaveRegimen>
<CalificacionOperacion>S1</CalificacionOperacion>
<TipoImpositivo>21.00</TipoImpositivo>
<BaseImponibleOimporteNoSujeto>8.26</BaseImponibleOimporteNoSujeto>
<CuotaRepercutida>1.74</CuotaRepercutida>
</DetalleDesglose>
</Desglose>
<CuotaTotal>1.74</CuotaTotal>
<ImporteTotal>10.00</ImporteTotal>
<Encadenamiento>
<RegistroAnterior>
<IDEmisorFactura>XXXXXXXX</IDEmisorFactura>
<NumSerieFactura>B00000028</NumSerieFactura>
<FechaExpedicionFactura>28-10-2024</FechaExpedicionFactura>
<Huella>CBC7B59D1EA619EA5C1E16AA69243AF4402FC2ECE6E8A7208D7DEFDB76C5878B</Huella>
</RegistroAnterior>
</Encadenamiento>
<SistemaInformatico>
<NombreRazon>Infocerda SL</NombreRazon>
<NIF>B04430534</NIF>
<NombreSistemaInformatico>TPVComercio</NombreSistemaInformatico>
<IdSistemaInformatico>01</IdSistemaInformatico>
<Version>3.18</Version>
<NumeroInstalacion>B04430534-011</NumeroInstalacion>
<TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
<TipoUsoPosibleMultiOT>S</TipoUsoPosibleMultiOT>
<IndicadorMultiplesOT>N</IndicadorMultiplesOT>
</SistemaInformatico>
<FechaHoraHusoGenRegistro>2024-10-28T20:46:14+01:00</FechaHoraHusoGenRegistro>
<TipoHuella>01</TipoHuella>
<Huella>86D7BC03C87C951B926E0C9914EA970F2DC0449DE03EDFD11531FFDF84EE9347</Huella>
</RegistroAlta>
</RegistroFactura>
</RegFactuSistemaFacturacion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Factura simplificada:
Código:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<Cabecera>
<ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<NombreRazon>xxxxxxxx</NombreRazon>
<NIF>xxxxxxxxx</NIF>
</ObligadoEmision>
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<Incidencia>N</Incidencia>
</RemisionVoluntaria>
</Cabecera>
<RegistroFactura>
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<IDVersion>1.0</IDVersion>
<IDFactura>
<IDEmisorFactura>xxxxxxxx</IDEmisorFactura>
<NumSerieFactura>B00000028</NumSerieFactura>
<FechaExpedicionFactura>28-10-2024</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>xxxxxxx</NombreRazonEmisor>
<Subsanacion>N</Subsanacion>
<RechazoPrevio>N</RechazoPrevio>
<TipoFactura>F2</TipoFactura>
<DescripcionOperacion>VENTA DE MERCADERIAS</DescripcionOperacion>
<FacturaSimplificadaArt7273>N</FacturaSimplificadaArt7273>
<FacturaSinIdentifDestinatarioArt61d>N</FacturaSinIdentifDestinatarioArt61d>
<Macrodato>N</Macrodato>
<Cupon>N</Cupon>
<Desglose>
<DetalleDesglose>
<Impuesto>01</Impuesto>
<ClaveRegimen>01</ClaveRegimen>
<CalificacionOperacion>S1</CalificacionOperacion>
<TipoImpositivo>21.00</TipoImpositivo>
<BaseImponibleOimporteNoSujeto>8.26</BaseImponibleOimporteNoSujeto>
<CuotaRepercutida>1.74</CuotaRepercutida>
</DetalleDesglose>
</Desglose>
<CuotaTotal>1.74</CuotaTotal>
<ImporteTotal>10.00</ImporteTotal>
<Encadenamiento>
<RegistroAnterior>
<IDEmisorFactura>xxxxxxx</IDEmisorFactura>
<NumSerieFactura>B00000027</NumSerieFactura>
<FechaExpedicionFactura>28-10-2024</FechaExpedicionFactura>
<Huella>EC962FAE28B4D8473909CE7FADC04C487FD57B678EDE0CCBD0D320C5A97A55B7</Huella>
</RegistroAnterior>
</Encadenamiento>
<SistemaInformatico>
<NombreRazon>Infocerda SL</NombreRazon>
<NIF>B04430534</NIF>
<NombreSistemaInformatico>TPVComercio</NombreSistemaInformatico>
<IdSistemaInformatico>01</IdSistemaInformatico>
<Version>3.18</Version>
<NumeroInstalacion>B04430534-011</NumeroInstalacion>
<TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
<TipoUsoPosibleMultiOT>S</TipoUsoPosibleMultiOT>
<IndicadorMultiplesOT>N</IndicadorMultiplesOT>
</SistemaInformatico>
<FechaHoraHusoGenRegistro>2024-10-28T18:56:13+01:00</FechaHoraHusoGenRegistro>
<TipoHuella>01</TipoHuella>
<Huella>CBC7B59D1EA619EA5C1E16AA69243AF4402FC2ECE6E8A7208D7DEFDB76C5878B</Huella>
</RegistroAlta>
</RegistroFactura>
</RegFactuSistemaFacturacion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Factura rectificativa:
Código:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<Cabecera>
<ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<NombreRazon>EMPRESA</NombreRazon>
<NIF>XXXXXXXXX</NIF>
</ObligadoEmision>
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<Incidencia>N</Incidencia>
</RemisionVoluntaria>
</Cabecera>
<RegistroFactura>
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<IDVersion>1.0</IDVersion>
<IDFactura>
<IDEmisorFactura>XXXXXXXXX</IDEmisorFactura>
<NumSerieFactura>2-1520</NumSerieFactura>
<FechaExpedicionFactura>17-05-2024</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>EMPRESA</NombreRazonEmisor>
<TipoFactura>R4</TipoFactura>
<TipoRectificativa>I</TipoRectificativa>
<FacturasRectificadas>
<IDFacturaRectificada>
<IDEmisorFactura>XXXXXXXXX</IDEmisorFactura>
<NumSerieFactura>4-182</NumSerieFactura>
<FechaExpedicionFactura>10-05-2024</FechaExpedicionFactura>
</IDFacturaRectificada>
</FacturasRectificadas>
<DescripcionOperacion>Prueba</DescripcionOperacion>
<Destinatarios>
<IDDestinatario>
<NombreRazon>EMPRESA SOFTWARE</NombreRazon>
<NIF>XXXXXXXX</NIF>
</IDDestinatario>
</Destinatarios>
<Desglose>
<DetalleDesglose>
<Impuesto>03</Impuesto>
<ClaveRegimen>01</ClaveRegimen>
<CalificacionOperacion>S1</CalificacionOperacion>
<TipoImpositivo>7</TipoImpositivo>
<BaseImponibleOimporteNoSujeto>-100</BaseImponibleOimporteNoSujeto>
<CuotaRepercutida>-7</CuotaRepercutida>
</DetalleDesglose>
</Desglose>
<CuotaTotal>-7</CuotaTotal>
<ImporteTotal>-107</ImporteTotal>
<Encadenamiento>
<RegistroAnterior>
<IDEmisorFactura>XXXXXXXX</IDEmisorFactura>
<NumSerieFactura>2-1520</NumSerieFactura>
<FechaExpedicionFactura>17-05-2024</FechaExpedicionFactura>
<Huella>00BA687E2E0056A3F931B830F2C8776D6BDBBF905A494D9B0EE87F61A9A1A420</Huella>
</RegistroAnterior>
</Encadenamiento>
<SistemaInformatico>
<NombreRazon>DESARROLLADOR</NombreRazon>
<NIF>XXXXXXXX</NIF>
<NombreSistemaInformatico>HFocused.es</NombreSistemaInformatico>
<IdSistemaInformatico>01</IdSistemaInformatico>
<Version>0.1.2</Version>
<NumeroInstalacion>12</NumeroInstalacion>
<TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
<TipoUsoPosibleMultiOT>N</TipoUsoPosibleMultiOT>
<IndicadorMultiplesOT>N</IndicadorMultiplesOT>
</SistemaInformatico>
<FechaHoraHusoGenRegistro>2024-10-30T17:48:40Z</FechaHoraHusoGenRegistro>
<TipoHuella>01</TipoHuella>
<Huella>EDDA0CEA231B287982B059ACE4BC2C7C5B0BDD1C09F7DF8D2D9F4924253392E0</Huella>
</RegistroAlta>
</RegistroFactura>
</RegFactuSistemaFacturacion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Comando curl:
Código:

curl.exe --connect-timeout 30 -m 30 -k -L -d "@d:\tmp\E1-2-1621.xml" -o d:\tmp\E1-2-1621R.xml --cert-type P12 --cert d:\tmp\Certificado.pfx:passcert https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP

newtron 26-03-2025 17:35:59

El compañero seccion_31 ha hecho un espléndido ejemplo de envío/recepción a Verifactu:


https://terawiki.clubdelphi.com/Otro...go-proyectos_/


Funciona en Delphi 7 por lo que no deberías de tener problemas para que te funcione en Delphi 2005.


Saludos.

victor03 27-03-2025 09:41:54

Muchas gracias a los dos sobre el tema de la estructura he encontrado este documento sede.agenciatributaria.gob.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Veri-Factu_Descripcion_SWeb.pdf algunos campos me coinciden otros no tanto, ¿es aquí donde has sacado la estructura o de otro documento?

unos campos que me parecen raro como se llaman son:
->FacturaSimplificadaArt7273
->FacturaSinIdentifDestinatarioArt61d

supongo que tendrán alguna razón

newtron 27-03-2025 09:48:19

Aquí tienes el enlace donde está la documentación técnica de Verifactu. Échale un vistazo porque tienes bastante que estudiar.


Saludos.

victor03 31-03-2025 12:23:43

Una pregunta que a lo mejor es un poco tonta estaba con la huella del sha256 y me he fijado que en el campo 'numSerieFactura' lo separas así: 'Nºserie-Nºfactura' pero en el ejemplo de la documentación pone: NumSerieFactura=12345678/G3,

mi pregunta que debo de usar como separador: ¿'-' o '/'?

gcqZW 31-03-2025 12:31:10

Puedes poner el que quieras, como si no quieres poner ninguno.

chenech 31-03-2025 12:31:12

Pues lo que quieras, incluso no usar separador, por ejemplo 0100001 para la serie 1 y 0200001 para la serie 2, pero siempre usar el mismo formato.

victor03 10-04-2025 11:54:54

me ha entrado una duda con el encadenamiento, yo estaba usando la misma serie para mis pruebas y todo parecía funcionar, el problema es cuando he cambiado de serie, yo como lo tengo montado el encadenamiento separo las series en los encadenamientos tal que así:

1/25->1/26->1/27...

2/10->2/11...

si intento juntar las series 1/25->2/10 (orden de generación de factura) me da error 'El cálculo de la huella suministrada es incorrecta. Datos de entrada cálculo huella:..'

así que entiendo que la opción correcta es la primera.

pero cuando creo una serie nueva sin estrenar 3/1 me obliga a poner que no es primer resgitro por que si no me da este error: 'No debe informarse como primer registro, existen facturas emitidas con el obligado emisión y el sistema informático actual.' en resumen que tendría que poner
<PrimerRegistro>
N
</PrimerRegistro> ¿pero que debo poner en registro anterior para que no me salte ?

newtron 10-04-2025 12:18:29

Cita:

Empezado por victor03 (Mensaje 563680)
me ha entrado una duda con el encadenamiento, yo estaba usando la misma serie para mis pruebas y todo parecía funcionar, el problema es cuando he cambiado de serie, yo como lo tengo montado el encadenamiento separo las series en los encadenamientos tal que así:

1/25->1/26->1/27...

2/10->2/11...

si intento juntar las series 1/25->2/10 (orden de generación de factura) me da error 'El cálculo de la huella suministrada es incorrecta. Datos de entrada cálculo huella:..'

así que entiendo que la opción correcta es la primera.

pero cuando creo una serie nueva sin estrenar 3/1 me obliga a poner que no es primer resgitro por que si no me da este error: 'No debe informarse como primer registro, existen facturas emitidas con el obligado emisión y el sistema informático actual.' en resumen que tendría que poner
<PrimerRegistro>
N
</PrimerRegistro> ¿pero que debo poner en registro anterior para que no me salte ?


Creo que es un error de planteamiento. El encadenamiento no debe de ir por serie sino por SIF, es decir, todas las facturas que se emitan desde un mismo sistema informático, ya sea monopuesto, red, con distintas series, etc. debe de ir encadenado de forma conjunta.

victor03 10-04-2025 12:18:30

Cita:

Empezado por victor03 (Mensaje 563680)
me ha entrado una duda con el encadenamiento, yo estaba usando la misma serie para mis pruebas y todo parecía funcionar, el problema es cuando he cambiado de serie, yo como lo tengo montado el encadenamiento separo las series en los encadenamientos tal que así:

1/25->1/26->1/27...

2/10->2/11...

si intento juntar las series 1/25->2/10 (orden de generación de factura) me da error 'El cálculo de la huella suministrada es incorrecta. Datos de entrada cálculo huella:..'

así que entiendo que la opción correcta es la primera.

pero cuando creo una serie nueva sin estrenar 3/1 me obliga a poner que no es primer resgitro por que si no me da este error: 'No debe informarse como primer registro, existen facturas emitidas con el obligado emisión y el sistema informático actual.' en resumen que tendría que poner
<PrimerRegistro>
N
</PrimerRegistro> ¿pero que debo poner en registro anterior para que no me salte ?

Fallo mio, el has se estaba calculando con la serie equivocada 😰

entonces el orden de encadenamiento debe de ser por emisión de factura entiendo

1/25->2/10->2/11->1/56

Jarogo08 10-04-2025 12:31:27

Cita:

Empezado por victor03 (Mensaje 563685)
Fallo mio, el has se estaba calculando con la serie equivocada 😰

entonces el orden de encadenamiento debe de ser por emisión de factura entiendo

1/25->2/10->2/11->1/26


Correcto, el encandenamiento es con el último registro creado, sea de la misma serie o de otra


Saludos


La franja horaria es GMT +2. Ahora son las 22:05:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi