Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

ermendalenda 26-07-2022 08:50:45

Cita:

Empezado por edari (Mensaje 547576)
Detallo todas las líneas

Perfecto gracias

Noe277 27-07-2022 16:22:30

Facturas Recapitulativas
 
Cita:

Empezado por keys (Mensaje 547575)
Hola. No se que estás poniendo en en la memoria sobre las facturas de albaranes. A ellos sólo les interesan las facturas, no como llegues a ellas. Simplemente no lo pongas.

¿Facturas Recapitulativas? Son las que agrupan albaranes pero en Tbai no es necesario hacer referencia al albaran solo detallar las lineas.

JoseLeeTo 01-08-2022 10:22:32

Datos de Facturas Rectificativas
 
Buenos días;

En la parte de la factura rectificativa, existe un nodo "BaseRectificada" y "CuotaRectificada", por ejemplo:

-<ImporteRectificacionSustitutiva>
<BaseRectificada>24.04</BaseRectificada>
<CuotaRectificada>5.05</CuotaRectificada>
</ImporteRectificacionSustitutiva>


Quiero entender que la Base Rectificada es la Base NO Exenta de la factura inicial, la que se está rectificando... ¿Pero la Cuota Rectificada, se refiere al IVA de la factura sustituida, o a la cuota de IRPF de la misma?

Muchas gracias por vuestra ayuda.
Saludos

Neftali [Germán.Estévez] 01-08-2022 11:40:49

2 Archivos Adjunto(s)
Hay cambios en el esquema de TicketBAI (campos no obligatorios), que llegan desde Guipuzcoa.
Por ahora, no es obligatorio cambiar nada.
A día de hoy sólo en pruebas, en breve dicen que los subirán a producción.

¿Habrán hablado con Álava y Viscaya?

Actualizo el mensaje 1 y el FTP.

ermendalenda 01-08-2022 13:51:20

Cita:

Empezado por JoseLeeTo (Mensaje 547701)
Buenos días;

En la parte de la factura rectificativa, existe un nodo "BaseRectificada" y "CuotaRectificada", por ejemplo:

-<ImporteRectificacionSustitutiva>
<BaseRectificada>24.04</BaseRectificada>
<CuotaRectificada>5.05</CuotaRectificada>
</ImporteRectificacionSustitutiva>


Quiero entender que la Base Rectificada es la Base NO Exenta de la factura inicial, la que se está rectificando... ¿Pero la Cuota Rectificada, se refiere al IVA de la factura sustituida, o a la cuota de IRPF de la misma?

Muchas gracias por vuestra ayuda.
Saludos


Base de la rectificada y la suma de las cuotas de los impuestos de la rectificada con los recargos de equivalencia aplicados.
de IRPF no hay ninguna referencia en los esquemas.

JoseLeeTo 02-08-2022 08:41:00

Cita:

Empezado por ermendalenda (Mensaje 547712)
Base de la rectificada y la suma de las cuotas de los impuestos de la rectificada con los recargos de equivalencia aplicados.
de IRPF no hay ninguna referencia en los esquemas.

Muchas gracias!
Saludos

edejuan 04-08-2022 10:12:40

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547705)
Hay cambios en el esquema de TicketBAI (campos no obligatorios), que llegan desde Guipuzcoa.
Por ahora, no es obligatorio cambiar nada.
A día de hoy sólo en pruebas, en breve dicen que los subirán a producción.

¿Habrán hablado con Álava y Viscaya?

Actualizo el mensaje 1 y el FTP.


Me acaba de llegar un mensaje desde Alava, con un nuevo esquema, que permite más decimales en algunos campos, tiene algún pais más, y un par de tipos de Iva nuevos.
No cambia la versión ni es obligatorio, a no ser que haga falta alguno de esos 'añadidos'.



------------------------------------------


Buenas,

Les mandamos este correo para informar que tenemos disponible una versión mejorada del esquema XSD de alta de TicketBAI en el ENTORNO DE PRUEBAS y PRODUCCION

El esquema mejorado contiene los siguientes cambios:
  • Ampliación de los decimales de los campos de las líneas. Aquellos que facturen usando más de dos decimales podrán usar el nuevo esquema y enviar la información con la precisión necesaria. Pasan a tener 8 decimales los campos: Cantidad, Descuento e ImporteTotal de las líneas
<complexTypename="IDDetalleFacturaType">
<sequence>
<elementname="DescripcionDetalle"type="T:TextMax250Type"/>
<elementname="Cantidad"type="T:ImporteSgn12.8Type"/>
<elementname="ImporteUnitario"type="T:ImporteSgn12.8Type"/>
<elementname="Descuento"type="T:ImporteSgn12.8Type"minOccurs="0"/>
<elementname="ImporteTotal"type="T:ImporteSgn12.8Type"/>
</sequence>
</complexType>

· Nuevas claves de régimen de IVA 17 y 19. Para aquellos que necesiten facturar en los regímenes previstos en el Capítulo XI del Título IX (OSS e IOSS) o en el Régimen Especial de Agricultura, Ganadería y Pesca (REAGYP) ya están disponibles estas dos claves en el esquema mejorado.

<simpleTypename="IdOperacionesTrascendenciaTributariaType">
<restrictionbase="string">

<enumerationvalue="17">
<annotation>
<documentation>IX. tituluko XI. kapituluan aurreikusitako araubideren bati atxikitako eragiketa (OSS eta IOSS) - Operación acogida a alguno de los regímenes previstos en el Capítulo XI del Título IX (OSS e IOSS)</documentation>
</annotation>
</enumeration>
<enumerationvalue="19">
<annotation>
<documentation>Nekazaritza, abeltzaintza eta arrantzaren araubide berezian dauden jardueren eragiketak (NAAAB) - Operaciones de actividades incluidas en el Régimen Especial de Agricultura, Ganadería y Pesca (REAGYP)</documentation>
</annotation>
</enumeration>

</restriction>
</simpleType>


· Nuevas entradas en el listado de países. Se han añadido los siguientes países en el contenido CountryType2
· AX ISLAS ALAND
· BL SAN BARTOLOMÉ
· EH SAHARA OCCIDENTAL
· GF GUAYANA FRANCESA
· GP GUADALUPE
· MF SAN MARTÍN (FRANCIA)
· MQ MARTINICA
· RE REUNIÓN
· SJ SVALBARD Y JAN MAYEN




<enumerationvalue="AX"/>
<enumerationvalue="BL"/>
<enumerationvalue="EH"/>
<enumerationvalue="GF"/>
<enumerationvalue="GP"/>
<enumerationvalue="MF"/>
<enumerationvalue="MQ"/>
<enumerationvalue="RE"/>
<enumerationvalue="SJ"/>


Nota Importante: Este nuevo esquema de alta de ficheros TicketBAI mantiene la numeración de versión interna como 1.2. Es decir, no afecta a los que no necesiten de las mejoras incluidas en el mismo.
Si no necesita hacer uso de alguna de las mejoras incluidas en el esquema mejorado no es necesario que haga ningún cambio en su sistema.
Un saludo,

Neftali [Germán.Estévez] 04-08-2022 10:38:56

Cita:

Empezado por edejuan (Mensaje 547751)
Me acaba de llegar un mensaje desde Alava, con un nuevo esquema, que permite más decimales en algunos campos, tiene algún pais más, y un par de tipos de Iva nuevos.
No cambia la versión ni es obligatorio, a no ser que haga falta alguno de esos 'añadidos'.

Parece que son los mismo que hace unos días enviaron desde Guipuzcoa.
Queda Vizcaya. A ver si se han puesto de acuerdo los 3...

JoseLeeTo 04-08-2022 11:17:31

Descuento en Factura
 
Buenos días;

Estoy teniendo problemas a la hora de expresar un descuento en una factura.

Imaginemos que la factura tiene 2 lineas, con su IVA:

Honorarios 60
Cantidad 2
IVA (%) 21%
Total Honorarios 60

Honorarios 50
Cantidad 1
IVA (%) 21%
Total Honorarios 50


Necesito hacer un descuento del 30% del total de los honorarios (170).

Desde Guipuzcoa me indican que "para hacer un descuento en una factura, hay que incluir una línea más de facturación, teniendo en cuenta que dicho descuento lleva IVA incluído".
En mi caso, el descuento solo es sobre el total de los honorarios, y una vez aplicado dicho descuento, ya se calcula el IVA del resultante.

Desconozco si deberían de ir los honorarios en negativo, o si entonces no se utiliza el nodo "Descuento" para nada, o por qué no se puede hacer un descuento por cada línea.

¿Podríais ayudarme con un ejemplo, cómo quedaría dicha línea de descuento que habría que incluir, y que la factura quede correctamente formada?

Muchas gracias de antemano

Un saludo

JoseLeeTo 04-08-2022 13:04:02

Cita:

Empezado por JoseLeeTo (Mensaje 547754)
Buenos días;

Estoy teniendo problemas a la hora de expresar un descuento en una factura.

Imaginemos que la factura tiene 2 lineas, con su IVA:

Honorarios 60
Cantidad 2
IVA (%) 21%
Total Honorarios 60

Honorarios 50
Cantidad 1
IVA (%) 21%
Total Honorarios 50


Necesito hacer un descuento del 30% del total de los honorarios (170).

Desde Guipuzcoa me indican que "para hacer un descuento en una factura, hay que incluir una línea más de facturación, teniendo en cuenta que dicho descuento lleva IVA incluído".
En mi caso, el descuento solo es sobre el total de los honorarios, y una vez aplicado dicho descuento, ya se calcula el IVA del resultante.

Desconozco si deberían de ir los honorarios en negativo, o si entonces no se utiliza el nodo "Descuento" para nada, o por qué no se puede hacer un descuento por cada línea.

¿Podríais ayudarme con un ejemplo, cómo quedaría dicha línea de descuento que habría que incluir, y que la factura quede correctamente formada?

Muchas gracias de antemano

Un saludo

Perdón, donde pone Total Honorarios 60 debería poner Total Honorarios 120 (60 x 2)

ermendalenda 04-08-2022 13:21:19

Cita:

Empezado por JoseLeeTo (Mensaje 547754)
Buenos días;

Estoy teniendo problemas a la hora de expresar un descuento en una factura.

Imaginemos que la factura tiene 2 lineas, con su IVA:

Honorarios 60
Cantidad 2
IVA (%) 21%
Total Honorarios 60

Honorarios 50
Cantidad 1
IVA (%) 21%
Total Honorarios 50


Necesito hacer un descuento del 30% del total de los honorarios (170).

Desde Guipuzcoa me indican que "para hacer un descuento en una factura, hay que incluir una línea más de facturación, teniendo en cuenta que dicho descuento lleva IVA incluído".
En mi caso, el descuento solo es sobre el total de los honorarios, y una vez aplicado dicho descuento, ya se calcula el IVA del resultante.

Desconozco si deberían de ir los honorarios en negativo, o si entonces no se utiliza el nodo "Descuento" para nada, o por qué no se puede hacer un descuento por cada línea.

¿Podríais ayudarme con un ejemplo, cómo quedaría dicha línea de descuento que habría que incluir, y que la factura quede correctamente formada?

Muchas gracias de antemano

Un saludo

Buenas Tardes, espero que te sirva, aunque te lo he puesto con tipo impositivo al 10% al 21% cambian las bases pero el resto igual es igual.:
Código:

DetallesFactura>
  - <IDDetalleFactura>
    <DescripcionDetalle>COMISION 60</DescripcionDetalle>

    <Cantidad>2.00</Cantidad>

    <ImporteUnitario>54.54545454</ImporteUnitario>

    <ImporteTotal>120.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>Dto: COMISION 60</DescripcionDetalle>

    <Cantidad>-1.00</Cantidad>

    <ImporteUnitario>32.72727273</ImporteUnitario>

    <ImporteTotal>-36.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>COMISION 50</DescripcionDetalle>

    <Cantidad>1.00</Cantidad>

    <ImporteUnitario>45.45454545</ImporteUnitario>

    <ImporteTotal>50.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>Dto: COMISION 50</DescripcionDetalle>

    <Cantidad>-1.00</Cantidad>

    <ImporteUnitario>13.63636364</ImporteUnitario>

    <ImporteTotal>-15.00</ImporteTotal>

  </IDDetalleFactura>


  </DetallesFactura>


    <ImporteTotalFactura>119.00</ImporteTotalFactura>

En lass lineas de descuento no hay que indicar porcentajes solo importes

JoseLeeTo 04-08-2022 13:49:21

Cita:

Empezado por ermendalenda (Mensaje 547773)
Buenas Tardes, espero que te sirva, aunque te lo he puesto con tipo impositivo al 10% al 21% cambian las bases pero el resto igual es igual.:
Código:

DetallesFactura>
  - <IDDetalleFactura>
    <DescripcionDetalle>COMISION 60</DescripcionDetalle>

    <Cantidad>2.00</Cantidad>

    <ImporteUnitario>54.54545454</ImporteUnitario>

    <ImporteTotal>120.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>Dto: COMISION 60</DescripcionDetalle>

    <Cantidad>-1.00</Cantidad>

    <ImporteUnitario>32.72727273</ImporteUnitario>

    <ImporteTotal>-36.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>COMISION 50</DescripcionDetalle>

    <Cantidad>1.00</Cantidad>

    <ImporteUnitario>45.45454545</ImporteUnitario>

    <ImporteTotal>50.00</ImporteTotal>

  </IDDetalleFactura>


  - <IDDetalleFactura>
    <DescripcionDetalle>Dto: COMISION 50</DescripcionDetalle>

    <Cantidad>-1.00</Cantidad>

    <ImporteUnitario>13.63636364</ImporteUnitario>

    <ImporteTotal>-15.00</ImporteTotal>

  </IDDetalleFactura>


  </DetallesFactura>


    <ImporteTotalFactura>119.00</ImporteTotalFactura>

En lass lineas de descuento no hay que indicar porcentajes solo importes

Muchísimas gracias. Me ha sido muy útil.
Un saludo

Sistel 06-08-2022 10:20:58

Rechazo de alta de facturas de Gipuzkoa en entorno de pruebas
 
Hola,

Llevamos un tiempo utilizando el servicio de pruebas https://tbai-prep.egoitza.gipuzkoa.e...nFacturas/alta para el envío de facturas de Gipuzkoa.
Normalmente, las facturas son aceptadas y obtenemos el código 00 de envío recibido correctamente.

Sin embargo, ayer (05-08-2022) y hoy (06-08-2022) estamos recibiendo el código 01 (Rechazado - ALTA PREP) con código de retorno de envío 007 (Certificado remitente no válido para emisor factura.)
El certificado que utilizamos para el envío es el mismo de siempre, expedido por FNMT, que sigue en vigor.

¿A alguien más le está ocurriendo?

Saludos

edari 08-08-2022 10:25:38

Cita:

Empezado por Sistel (Mensaje 547843)
Hola,

Llevamos un tiempo utilizando el servicio de pruebas https://tbai-prep.egoitza.gipuzkoa.e...nFacturas/alta para el envío de facturas de Gipuzkoa.
Normalmente, las facturas son aceptadas y obtenemos el código 00 de envío recibido correctamente.

Sin embargo, ayer (05-08-2022) y hoy (06-08-2022) estamos recibiendo el código 01 (Rechazado - ALTA PREP) con código de retorno de envío 007 (Certificado remitente no válido para emisor factura.)
El certificado que utilizamos para el envío es el mismo de siempre, expedido por FNMT, que sigue en vigor.

¿A alguien más le está ocurriendo?

Saludos


Yo acabo de probar y me suben perfectamente

Neftali [Germán.Estévez] 08-08-2022 10:52:25

Cita:

Empezado por Sistel (Mensaje 547843)
Sin embargo, ayer (05-08-2022) y hoy (06-08-2022) estamos recibiendo el código 01 (Rechazado - ALTA PREP) con código de retorno de envío 007 (Certificado remitente no válido para emisor factura.)
El certificado que utilizamos para el envío es el mismo de siempre, expedido por FNMT, que sigue en vigor.

¿A alguien más le está ocurriendo?

Cita:

Empezado por edari (Mensaje 547850)
Yo acabo de probar y me suben perfectamente

Yo también acabo de probar a subir una ahora mismo y todo correcto (Guipuzcoa / Preproduccion).

Sistel 08-08-2022 11:29:09

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547852)
Yo también acabo de probar a subir una ahora mismo y todo correcto (Guipuzcoa / Preproduccion).

Hola,

Gracias edari y Neftali.

Era un problema de que el certificado de envío y el certificado de firma eran diferentes.
Y, en el entorno de pruebas, no estaba dado de alta, como colaborador social, el certificado del enviante.
Ya está solucionado.

Muchas gracias, de nuevo.

Saludos

duilioisola 08-08-2022 16:04:33

Problemas de envio mediante CURL
 
Estoy tratando de enviar mediante CURL un registro.

En la apliación hago y firmo el TicketBAI y luego hago el xml de la presentación.
Código:

<?xml version="1.0"?>
<lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion xmlns:lrpjfecsgap="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd">
  <Cabecera>
    <Modelo>240</Modelo>
    <Capitulo>1</Capitulo>
    <Subcapitulo>1.1</Subcapitulo>
    <Operacion>A00</Operacion>
    <Version>1.0</Version>
    <Ejercicio>2022</Ejercicio>
    <ObligadoTributario>
      <NIF>B95642500</NIF>
      <ApellidosNombreRazonSocial>ECOTHERM ENERGY SL</ApellidosNombreRazonSocial>
    </ObligadoTributario>
  </Cabecera>
  <FacturasEmitidas>
    <FacturaEmitida>
      <TicketBai>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48VDpUaWNrZXRC
[...]
PjwvZHM6T2JqZWN0PjwvZHM6U2lnbmF0dXJlPjwvVDpUaWNrZXRCYWk+
</TicketBai>
    </FacturaEmitida>
  </FacturasEmitidas>
</lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion>

Este fichero lo comprimo con 7zip en formato gz.
Código:

7z.exe a Presentacion_1.gz Presentacion_1.xml
Luego creo un fichero BAT para ejecutar el envío:
Código:

set CAB1=-H "Accept-Encoding: gzip"
set CAB2=-H "Content-Encoding: gzip"
set CAB3=-H "Content-Type: application/octet-stream"
set CAB4=-H "eus-bizkaia-n3-version: 1.0"
set CAB5=-H "eus-bizkaia-n3-content-type: application/xml"
set CAB6=-H "eus-bizkaia-n3-data: { \"con\":\"LROE\", \"apa\":\"1.1\", \"inte\":{ \"nif\":\"B95642500\", \"nrs\":\"ECOTHERM ENERGY SL\", \"ap1\":\"\", \"ap2\":\"\" }, \"drs\":{ \"mode\":\"240\", \"ejer\":\"2022\" } } "
set FICHERO=--data-binary "@Presentacion_1.xml"
set CERT=--cert Certificado_crt.pem
set CERT_KEY=--key Certificado_key.pem
set URL=-v https://tbai-z.prep.gipuzkoa.eus/sarrerak/alta
set REPUESTA=--output Respuesta_1.gz
set CABECERA=-D Respuesta_1.txt
cls
.\curl.exe -v --insecure %CAB1% %CAB2% %CAB3% %CAB4% %CAB5% %CAB6% %FICHERO% %CERT_TYPE% %CERT% %CERT_KEY% %URL% %RESPUESTA% %CABECERA%

El problema es que me está devolviendo el mensaje 415 Unsupported Media Type
Código:

HTTP/1.1 415 Unsupported Media Type
Date: Mon, 08 Aug 2022 13:14:34 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips
X-Powered-By: Servlet/3.0
$WSEP:
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US

He seguido este hilo y he visto y comparado las difrentes formas de enviar por CURL que hay en el mensaje que resume este tema.
He visto que hay algunos de ustedes que han enviado con éxito utilizando CURL estos registros.

¿Véis alguna cosa rara en cómo lo estoy haciendo yo?

Lo único que me resulta raro en la respuesta es
Content-Type: text/html;charset=ISO-8859-1
Pero yo genero en UTF8 y en la cabecera se menciona tipo gzip.


Por si sirve de algo, os dejo la captura completa de lo que devuelve CURL.

Código:

C:\Users\Usuario\AppData\Local\Temp>.\curl.exe -v --insecure -H "Accept-Encoding: gzip"  -H "Content-Encoding: gzip"  -H "Content-Type: application/octet-stream"  -H "eus-bizkaia-n3-version: 1.0"  -H "eus-bizkaia-n3-content-type: application/xml"  -H "eus-bizkaia-n3-data: { \"con\":\"LROE\", \"apa\":\"1.1\", \"inte\":{ \"nif\":\"B95642500\", \"nrs\":\"ECOTHERM ENERGY SL\", \"ap1\":\"\", \"ap2\":\"\" }, \"drs\":{ \"mode\":\"240\", \"ejer\":\"2022\" } } "  --data-binary "@Presentacion_1.xml"  --cert Certificado_crt.pem  --key Certificado_key.pem  -v https://tbai-z.prep.gipuzkoa.eus/sarrerak/alta  -D Respuesta_1.txt
*  Trying 82.116.160.130:443...
* Connected to tbai-z.prep.gipuzkoa.eus (82.116.160.130) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=ES; ST=GIPUZKOA; L=DONOSTIA / SAN SEBASTIAN; O=INFORMATIKA ZERBITZUEN FORU ELKARTEA - SOCIEDAD FORAL DE SERVICI; CN=*.prep.gipuzkoa.eus
*  start date: Nov 15 15:59:03 2021 GMT
*  expire date: Dec 15 15:59:03 2022 GMT
*  issuer: C=ES; O=IZENPE S.A.; OU=AZZ Ziurtagiri publikoa - Certificado publico SCA; CN=EAEko Herri Administrazioen CA - CA AAPP Vascas (2)
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
> POST /sarrerak/alta HTTP/1.1
> Host: tbai-z.prep.gipuzkoa.eus
> User-Agent: curl/7.81.0
> Accept: */*
> Accept-Encoding: gzip
> Content-Encoding: gzip
> Content-Type: application/octet-stream
> eus-bizkaia-n3-version: 1.0
> eus-bizkaia-n3-content-type: application/xml
> eus-bizkaia-n3-data: { "con":"LROE", "apa":"1.1", "inte":{ "nif":"B95642500", "nrs":"ECOTHERM ENERGY SL", "ap1":"", "ap2":"" }, "drs":{ "mode":"240", "ejer":"2022" } }
> Content-Length: 19906
>
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Hello request (0):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, CERT verify (15):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 415 Unsupported Media Type
< Date: Mon, 08 Aug 2022 14:02:00 GMT
< Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips
< X-Powered-By: Servlet/3.0
< $WSEP:
< Transfer-Encoding: chunked
< Content-Type: text/html;charset=ISO-8859-1
< Content-Language: en-US
<
* TLSv1.2 (IN), TLS header, Supplemental data (23):
Error 415: SRVE0295E: Error reported: 415
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Connection #0 to host tbai-z.prep.gipuzkoa.eus left intact


Neftali [Germán.Estévez] 09-08-2022 08:16:15

¿Has probado con este ContentType? (tercer parametro)
Cita:

set CAB3=-H "Content-Type: application/xml;charset=UTF-8"

duilioisola 09-08-2022 10:07:27

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547857)
¿Has probado con este ContentType? (tercer parametro)
set CAB3=-H "Content-Type: application/xml;charset=UTF-8"

Parece que funcionó!!! MUCHAS GRACIAS!!!
La respuesta es:
Código:

HTTP/1.1 200 OK
Date: Tue, 09 Aug 2022 06:45:24 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips
X-Powered-By: Servlet/3.0
Content-Length: 861
Content-Type: application/xml;charset=utf-8
Content-Language: en-US

Ahora seguiré mirando cómo sigue el intercambio, pues el mensaje de respuesta me dice que el tamaño no es válido.
No se si se refiere a:
  • todo el mensaje
  • La parte JSON de la cabecera.
  • al campo <TicketBAI> que contiene el Ticket BAI comprimido y convertido a Base64
  • algún campo dentro del Ticket BAI (aunque esto sí lo acepta)

Código:

Fichero RESPUESTA_1.GZ
(que contiene texto XML ya que el Content-Type de la respuesta es application/xml;charset=utf-8)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:TicketBaiResponse xmlns:ns2="urn:ticketbai:emision">
    <Salida>
        <FechaRecepcion>09-08-2022 09:04:18</FechaRecepcion>
        <Estado>01</Estado>
        <Descripcion>Rechazado - ALTA PREP</Descripcion>
        <Azalpena>Baztertua - ALTA PREP</Azalpena>
        <ResultadosValidacion>
            <Codigo>017</Codigo>
            <Descripcion>El tamaño del mensaje no es válido: ha superado el tamaño permitido. Le recomendamos que eliminen espacios, tabulaciones u otro tipo de caracteres innecesarios.</Descripcion>
            <Azalpena>Mezuaren tamaina ez da zuzena: baimendutako tamaina gainditu du. Espazioak, tabulazioak edo beharrezkoak ez diren bestelako karaktereak ezabatzea gomendatzen dizugu.</Azalpena>
        </ResultadosValidacion>
    </Salida>
</ns2:TicketBaiResponse>

Si alguien me puede enviar un fichero de presentación de un ticket BAI os lo agradecería, para poder comparar formato, tamaño, codificacion, etc.

Os dejo el BAT con el que estoy trabajando hasta ahora.
Código:

@echo off
cd C:\Users\Usuario\AppData\Local\Temp\

rem HEADER del mensaje que enviamos.
set CAB1=-H "Accept-Encoding: gzip"
set CAB2=-H "Content-Encoding: gzip"
set CAB3=-H "Content-Type: application/xml;charset=UTF-8"
set CAB4=-H "eus-bizkaia-n3-version: 1.0"
set CAB5=-H "eus-bizkaia-n3-content-type: application/xml"

rem JSON de la cabecera con datos de la presentacion
set CAB6=-H "eus-bizkaia-n3-data: { \"con\":\"LROE\", \"apa\":\"1.1\", \"inte\":{ \"nif\":\"B95642500\", \"nrs\":\"ECOTHERM ENERGY SL\", \"ap1\":\"\", \"ap2\":\"\" }, \"drs\":{ \"mode\":\"240\", \"ejer\":\"2022\" } } "

rem Fichero que contiene el XML de presentacion comprimido en formato GZ.
set FICHERO=--data-binary "@Presentacion_1.gz"

rem Certificado
rem set CERT_TYPE=--cert-type PEM
set CERT=--cert Certificado_crt.pem
set CERT_KEY=--key Certificado_key.pem

rem URL a donde enviamos el mensaje. (Alta y Baja en produccion o en pruebas)
set URL=-v https://tbai-z.prep.gipuzkoa.eus/sarrerak/alta

rem Fichero con el mensaje de respuesta. Puede ser un mensaje de error en formato XML (<ns2:TicketBaiResponse xmlns:ns2="urn:ticketbai:emision">).
set FICHERORESPUESTA=--output Respuesta_1.gz

rem La primera linea sera el codigo de error. Por ejemplo "HTTP/1.1 200 OK".
rem Tambien devolvera el yipo de contenido de la respuesta. Por ejemplo "Content-Type: application/xml;charset=utf-8".

set HEADERRESPUESTA=-D Respuesta_1.txt

cls
.\curl.exe -v --insecure %CAB1% %CAB2% %CAB3% %CAB4% %CAB5% %CAB6% %FICHERO% %CERT_TYPE% %CERT% %CERT_KEY% %URL% %FICHERORESPUESTA% %HEADERRESPUESTA%

pause


Neftali [Germán.Estévez] 09-08-2022 10:22:09

1 Archivos Adjunto(s)
Cita:

Empezado por duilioisola (Mensaje 547858)
Si alguien me puede enviar un fichero de presentación de un ticket BAI os lo agradecería, para poder comparar formato, tamaño, codificacion, etc.


Código PHP:

<?xml version="1.0" encoding="utf-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
    <Cabecera>
        <IDVersionTBAI>1.2</IDVersionTBAI>
    </Cabecera>
    <Sujetos>
        <Emisor>
            <NIF>B11111111</NIF>
            <ApellidosNombreRazonSocial>NOMBRE EMPRESA</ApellidosNombreRazonSocial>
        </Emisor>
        <Destinatarios>
            <IDDestinatario>
                <NIF>B22222222</NIF>
                <ApellidosNombreRazonSocial>AÑAR LORAZAINTZA SL</ApellidosNombreRazonSocial>
                <CodigoPostal>08009</CodigoPostal>
                <Direccion>Muntaner, 12</Direccion>
            </IDDestinatario>
        </Destinatarios>
        <VariosDestinatarios>N</VariosDestinatarios>
        <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
    </Sujetos>
    <Factura>
        <CabeceraFactura>
            <SerieFactura>SA</SerieFactura>
            <NumFactura>44</NumFactura>
            <FechaExpedicionFactura>25-07-2022</FechaExpedicionFactura>
            <HoraExpedicionFactura>09:44:20</HoraExpedicionFactura>
            <FacturaSimplificada>N</FacturaSimplificada>
            <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
        </CabeceraFactura>
        <DatosFactura>
            <DescripcionFactura>Bicicleta carrera</DescripcionFactura>
            <DetallesFactura>
                <IDDetalleFactura>
                    <DescripcionDetalle>Bicicleta carrera</DescripcionDetalle>
                    <Cantidad>1.00</Cantidad>
                    <ImporteUnitario>11.00000000</ImporteUnitario>
                    <Descuento>1.98</Descuento>
                    <ImporteTotal>10.91</ImporteTotal>
                </IDDetalleFactura>
            </DetallesFactura>
            <ImporteTotalFactura>10.91</ImporteTotalFactura>
            <Claves>
                <IDClave>
                    <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                </IDClave>
            </Claves>
        </DatosFactura>
        <TipoDesglose>
            <DesgloseFactura>
                <Sujeta>
                    <NoExenta>
                        <DetalleNoExenta>
                            <TipoNoExenta>S1</TipoNoExenta>
                            <DesgloseIVA>
                                <DetalleIVA>
                                    <BaseImponible>9.02</BaseImponible>
                                    <TipoImpositivo>21.00</TipoImpositivo>
                                    <CuotaImpuesto>1.89</CuotaImpuesto>
                                    <TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                    <CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                    <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                </DetalleIVA>
                            </DesgloseIVA>
                        </DetalleNoExenta>
                    </NoExenta>
                </Sujeta>
            </DesgloseFactura>
        </TipoDesglose>
    </Factura>
    <HuellaTBAI>
        <EncadenamientoFacturaAnterior>
            <SerieFacturaAnterior>SA</SerieFacturaAnterior>
            <NumFacturaAnterior>43</NumFacturaAnterior>
            <FechaExpedicionFacturaAnterior>12-07-2022</FechaExpedicionFacturaAnterior>
            <SignatureValueFirmaFacturaAnterior>2XzEhji0af0hHWP8p0FpBBxhQrvJjSF4qRP5VfozLC5CQ4+NoFDUfcIrNj6jn1pfmuaOOPcxNi10QWyRaDJLi5b0bWSC/q+0DHl8</SignatureValueFirmaFacturaAnterior>
        </EncadenamientoFacturaAnterior>
        <Software>
            <LicenciaTBAI>TBAIXXXXXXXXXXXXXX</LicenciaTBAI>
            <EntidadDesarrolladora>
                <NIF>B11111111</NIF>
            </EntidadDesarrolladora>
            <Nombre>NOMBRE_ERP</Nombre>
            <Version>14.05.00.0</Version>
        </Software>
    </HuellaTBAI>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-229139166">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <ds:Reference Id="Reference-ID-906576092" URI="">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <ds:DigestValue>IpXdMRzbXG2FGTwys8NPhjMCwra+gM+28Z31JcSGXHI=</ds:DigestValue>
            </ds:Reference>
            <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-777055075">
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <ds:DigestValue>uZ8i3Bac2BsLavzCN5AvwRnfeO3U5vqOlPDG1oxqQmI=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>xqXvvxMp7xoJRhXRZ9TnvEzWJGGhUCRzwO/M6ZO06N4bgJvTvaX+lv1uLKNOC1uDhBnRmqtYViSV/bBzxt6WnZVx4uX3MT1zc3yJ+zNdTxe0WSOls0FtSHsu/Tv9AIB7xC9JMIAD7h5AYuX7ja1LfrnVgW+TBIVJIl2xuWcV1WNd088vaKJU5VG6TCEjPF63ldRvwvtnjslfSnlNPSMmdYoml8KbdTYHdYhDGav3wgrqciWpO1Bv0txO8svB5/u1wqiQvLm/lpNVi1hDdu1pP02nXAseSRdBmEwgiwffTDU+LSPAfLEqxF82jb6G0oHKgR53RnaYjSB8/ygiWzGBWIgCYb9ZQr9SZFuNqRdhLACGtIGqoKb3XbbbIJrXNbGWx2xbAdbxsNJjXqyTMz2M3m79unqY36L2yQ7Iiv2gv/5iDU4nbNeNs6CrVK3xKqlzR5obiG3Epx2IKoe/abOrzbiG7VirC3rojekfeLH0acgYlfrJ7zRvyKugyRxqrf39q42yUbHoWazMcAf2KIn42V1D7fcrtoOEue2fXW8zlH3Awph+Ge8r79bHhmIvvQToeu8cR5C5wQFZOlHOLXp20u/8TiTlELJ1/O/Fl2sBGjgG8hCB6stmj3KM3xYG5HfrWMmIp0I84Dya0qrwFPhLsCDVquuN0JGPVLMYquKcXAg=</ds:SignatureValue>
        <ds:KeyInfo>
            <ds:KeyValue>
                <ds:RSAKeyValue>
                    <ds:Modulus>3+RvefNVHNcvHSzFmjXNMRdZXKctuVAY6hOy2nc486H4opgE8H5/2orrIF9wfJW6Hb5xAhc6DNhlfXoTq6a5OSAKPDyn7az8uYzuOR+HIFn8Ow8y4/An+kHCyTqN2avksmQDrc2cfxzdUYu6GVIazmfU2iFiwXCrG+lJDEeLoh+8VD6YCnFDSuCyZVUcTaPVg/ymjtVcXJoLe8qiXjha63Yf+EKt9Sz9xgRZVGA68eixJWXwU/D0UYC/miw6JWro4whWO8o5vDrSdLvpmpojXRRCZcDktFKwsIbJW9u7bFxNv5LPzVgM14mBzpUfJ2/JuQbB79Gq6l6NPtN53qlHPgA3jTJTOX0vHqkCEU1VTVN8UqHmNQxbXt6gbRERaQRt/h0lE4yW+GYI7AQLoDlpwFRXRt5bL8NcCWQtH7HkUyNbN3EQFj48sOn5sVKzOfkbWPPC5BgSoziXlPpsTYZMlP2uLv3vD1iY0XHau/C821FJVZ0r/oqE37rukHk8gyCP6Yc1xON05d2rrs+rwTqgwxnSWx4SogyGyzdovS0LUT/zfM+fLJeILC5941X5iMSvvrHrGN829f+J+/uo5dez5X4eyyzqXrc/FwbgT02Y+kni2c1Wb+T5XmnVTpiwarI38W6zru+XTEPKirhJnEGIy1tT85JGoBlzWXSnY794XDs=</ds:Modulus>
                    <ds:Exponent>AQAB</ds:Exponent>
                </ds:RSAKeyValue>
            </ds:KeyValue>
            <ds:X509Data>
                <ds:X509IssuerSerial>
                    <ds:X509IssuerName>CN=EAEko Herri Administrazioen CA - CA AAPP Vascas (2), OU=AZZ Ziurtagiri publikoa - Certificado publico SCA, O=IZENPE S.A., C=ES</ds:X509IssuerName>
                    <ds:X509SerialNumber>40680020218691596437659190274445776782</ds:X509SerialNumber>
                </ds:X509IssuerSerial>
                <ds:X509SubjectName>CN=L1NRCV01D748027, OU=PC, OU=ZEPHYRUS M GU502GU_GU502GU, OU=Gailu ziurtagiria - Certificado de dispositivo, O=ASUS, C=ES</ds:X509SubjectName>
                <ds:X509Certificate>MIIJDDCCBvSgAwIBAgIQHpqv2S+e3ZZgk/gLEO+XjjANBgkqhkiG9w0BAQsFADCBnTELMAkGA1UEBhMCRVMxFDASBgNVBAoMC0laRU5QRSBTLkEuMTowOAYDVQQLDDFBWlogWml1cnRhZ2lyaSBwdWJsaWtvYSAtIENlcnRpZmljYWRvIHB1YmxpY28gU0NBMTwwOgYDVQQDDDNFQUVrbyBIZXJyaSBBZG1pbmlzdHJhemlvZW4gQ0EgLSBDQSBBQVBQIFZhc2NhcyAoMikwHhcNMjEwNTA2MTQwNzA3WhcNMzEwNTA2MTQwNzA3WjCBoTELMAkGA1UEBhMCRVMxDTALBgNVBAoMBEFTVVMxNzA1BgNVBAsMLkdhaWx1IHppdXJ0YWdpcmlhIC0gQ2VydGlmaWNhZG8gZGUgZGlzcG9zaXRpdm8xIzAhBgNVBAsMGlpFUEhZUlVTIE0gR1U1MDJHVV9HVTUwMkdVMQswCQYDVQQLDAJQQzEYMBYGA1UEAwwPTDFOUkNWMDFENzQ4MDI3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3+RvefNVHNcvHSzFmjXNMRdZXKctuVAY6hOy2nc486H4opgE8H5/2orrIF9wfJW6Hb5xAhc6DNhlfXoTq6a5OSAKPDyn7az8uYzuOR+HIFn8Ow8y4/An+kHCyTqN2avksmQDrc2cfxzdUYu6GVIazmfU2iFiwXCrG+lJDEeLoh+8VD6YCnFDSuCyZVUcTaPVg/ymjtVcXJoLe8qiXjha63Yf+EKt9Sz9xgRZVGA68eixJWXwU/D0UYC/miw6JWro4whWO8o5vDrSdLvpmpojXRRCZcDktFKwsIbJW9u7bFxNv5LPzVgM14mBzpUfJ2/JuQbB79Gq6l6NPtN53qlHPgA3jTJTOX0vHqkCEU1VTVN8UqHmNQxbXt6gbRERaQRt/h0lE4yW+GYI7AQLoDlpwFRXRt5bL8NcCWQtH7HkUyNbN3EQFj48sOn5sVKzOfkbWPPC5BgSoziXlPpsTYZMlP2uLv3vD1iY0XHau/C821FJVZ0r/oqE37rukHk8gyCP6Yc1xON05d2rrs+rwTqgwxnSWx4SogyGyzdovS0LUT/zfM+fLJeILC5941X5iMSvvrHrGN829f+J+/uo5dez5X4eyyzqXrc/FwbgT02Y+kni2c1Wb+T5XmnVTpiwarI38W6zru+XTEPKirhJnEGIy1tT85JGoBlzWXSnY794XDsCAwEAAaOCA0AwggM8MIHHBgNVHRIEgb8wgbyGFWh0dHA6Ly93d3cuaXplbnBlLmNvbYEPaW5mb0BpemVucGUuY29tpIGRMIGOMUcwRQYDVQQKDD5JWkVOUEUgUy5BLiAtIENJRiBBMDEzMzcyNjAtUk1lcmMuVml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFDMEEGA1UECQw6QXZkYSBkZWwgTWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAxNCAtIDAxMDEwIFZpdG9yaWEtR2FzdGVpejAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFP7l1cwcXOUTcx9428TFx7oWETeTMB8GA1UdIwQYMBaAFMCpSvdHJYf/vLWmic6C0kaoieujMIIBHgYDVR0gBIIBFTCCAREwggENBgorBgEEAfM5AQMCMIH+MCUGCCsGAQUFBwIBFhlodHRwOi8vd3d3Lml6ZW5wZS5jb20vY3BzMIHUBggrBgEFBQcCAjCBxwyBxEJlcm1lZW4gbXVnYWsgZXphZ3V0emVrbyB3d3cuaXplbnBlLmNvbSBaaXVydGFnaXJpYW4ga29uZmlhbnR6YSBpemFuIGF1cnJldGlrIGtvbnRyYXR1YSBpcmFrdXJyaS5MaW1pdGFjaW9uZXMgZGUgZ2FyYW50aWFzIGVuIHd3dy5pemVucGUuY29tIENvbnN1bHRlIGVsIGNvbnRyYXRvIGFudGVzIGRlIGNvbmZpYXIgZW4gZWwgY2VydGlmaWNhZG8wHwYDVR0lBBgwFgYIKwYBBQUHAwIGCisGAQQBgjcKAwwwgaAGCCsGAQUFBwEBBIGTMIGQMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5pemVucGUuY29tMGoGCCsGAQUFBzAChl5odHRwOi8vd3d3Lml6ZW5wZS5jb20vY29udGVuaWRvcy9pbmZvcm1hY2lvbi9jYXNfaXplbnBlL2VzX2Nhcy9hZGp1bnRvcy9BQVBQTlJfY2VydF9zaGEyNTYuY3J0MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuaXplbnBlLmNvbS9jZ2ktYmluL2NybGludGVybmEyMA0GCSqGSIb3DQEBCwUAA4ICAQCSM24d7ToO2NXrsNp4U8PcgmT3qVTbGgtfZix8774SzElCaKBYZvEDqsJpTdlpzDmUXbCtAJsFGeCj/vz3P4Ot1DUYiej7TttsSsTLZUHrxI8mn++R9vlXLOsioRxf4XORdyvinRgUHv3SJ6Xk6Yc67QRKjJsOQhjTuZ0fyzNsyCwvEJ2W8B1UhAuUF0rGzmez6brwfJnWtZMMCRtPsvaHvG2CK91koqkuoYdheoKFC3Ud5TMP1djc5p5KXzFzTNgHIX1Wl6L8go+Pco24V67hG7n58daRI0RVG7guuYMbxk1r76/58QnIYVD0n44QT0b27Ki0flG6rFLfNRZpiNUMAPTtDAAH3aJ41XoNwkfOyxZrt9BUUdg5wCJI+1TYsClXkUj395w3DSZ8BY55QNOyrf5XQjDmtuk/jqTzjlheAL94NIAs5Pa+vG8b8aOuNG6MKZXNF1hKPx7bZ4cxkWnLJX8wA0Ohw8I8TqWDc44ZAwXvxAjwTM7WrXtMixeCIapJjQwR9TJvtf+I1FvnLsPUVlnAuqkjs6K4Wzd3CmekqNLXGX/1jfi0avmkVAHbFGFnmwoKyW7zP7MVMELSAF9O9szOdIDS8L1IckohxvZr8P+IkYRbJPhy0HFFJrqevnwAqI4wYL5fFlj3CJGDhwwgTYdx/79ph9fp3sXUIAhO7Q==</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
        <ds:Object>
            <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature-229139166">
                <xades:SignedProperties Id="SignedProperties-777055075">
                    <xades:SignedSignatureProperties>
                        <xades:SigningTime>2022-07-25T07:44:20.340Z</xades:SigningTime>
                        <xades:SigningCertificate>
                            <xades:Cert>
                                <xades:CertDigest>
                                    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                    <ds:DigestValue>7RfvGuxIRTKz5Thh0ysc2xcu7vcSE7XLJmVIgr2d41k=</ds:DigestValue>
                                </xades:CertDigest>
                                <xades:IssuerSerial>
                                    <ds:X509IssuerName>CN=EAEko Herri Administrazioen CA - CA AAPP Vascas (2), OU=AZZ Ziurtagiri publikoa - Certificado publico SCA, O=IZENPE S.A., C=ES</ds:X509IssuerName>
                                    <ds:X509SerialNumber>40680020218691596437659190274445776782</ds:X509SerialNumber>
                                </xades:IssuerSerial>
                            </xades:Cert>
                        </xades:SigningCertificate>
                        <xades:SignaturePolicyIdentifier>
                            <xades:SignaturePolicyId>
                                <xades:SigPolicyId>
                                    <xades:Identifier>https://ticketbai.araba.eus/tbai/sinadura/</xades:Identifier>
                                </xades:SigPolicyId>
                                <xades:SigPolicyHash>
                                    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                    <ds:DigestValue>4Vk3uExj7tGn9DyUCPDsV9HRmK6KZfYdRiW3StOjcQA=</ds:DigestValue>
                                </xades:SigPolicyHash>
                                <xades:SigPolicyQualifiers>
                                    <xades:SigPolicyQualifier>
                                        <xades:SPURI>https://ticketbai.araba.eus/tbai/sinadura/</xades:SPURI>
                                    </xades:SigPolicyQualifier>
                                </xades:SigPolicyQualifiers>
                            </xades:SignaturePolicyId>
                        </xades:SignaturePolicyIdentifier>
                    </xades:SignedSignatureProperties>
                </xades:SignedProperties>
            </xades:QualifyingProperties>
        </ds:Object>
    </ds:Signature>
</T:TicketBai>

Te lo adjunto al mensaje

duilioisola 09-08-2022 11:02:38

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547859)
Código PHP:

<?xml version="1.0" encoding="utf-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
    <Cabecera>
        <IDVersionTBAI>1.2</IDVersionTBAI>
    </Cabecera>
...
</T:TicketBai>

Te lo adjunto al mensaje

Gracias Germán,

Lo he comparado con lo que genero yo y son iguales, excepto la parte de la firma, donde la estructura es un poco diferente.
Como parece que lo aceptan, no voy a mirar eso mucho más.

De todos modos, me refería al envío del Libro de Registro.
Esto lo formo con una parte JSON en la cabecera
Código:

{
  "con":"LROE",
  "apa":"1.1",
  "inte":{
    "nif":"B95642500",
    "nrs":"ECOTHERM ENERGY SL",
    "ap1":"",
    "ap2":""
  },
  "drs":{
    "mode":"240",
    "ejer":"2022"
  }
}

y luego un XML que contiene el TicketBAI comprimido y convertido a Base64 dentro del tag <FacturasEmitidas><FacturaEmitida><TicketBai>:

Código:

<?xml version="1.0"?>
<lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion xmlns:lrpjfecsgap="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd">
  <Cabecera>
    <Modelo>240</Modelo>
    <Capitulo>1</Capitulo>
    <Subcapitulo>1.1</Subcapitulo>
    <Operacion>A00</Operacion>
    <Version>1.0</Version>
    <Ejercicio>2022</Ejercicio>
    <ObligadoTributario>
      <NIF>B95642500</NIF>
      <ApellidosNombreRazonSocial>ECOTHERM ENERGY SL</ApellidosNombreRazonSocial>
    </ObligadoTributario>
  </Cabecera>
  <FacturasEmitidas>
    <FacturaEmitida>
      <TicketBai>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48VDpUaWNrZXRC
YWkgeG1sbnM6VD0idXJuOnRpY2tldGJhaTplbWlzaW9uIj4KCTxDYWJlY2VyYT4K
...
PjwvZHM6T2JqZWN0PjwvZHM6U2lnbmF0dXJlPjwvVDpUaWNrZXRCYWk+
</TicketBai>
    </FacturaEmitida>
  </FacturasEmitidas>
</lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion>


Ja Mon 09-08-2022 12:31:23

Duda sobre encadenamiento
 
Saludos a todos y gracias por vuestra ayuda.


La duda que no me ha quedado clara leyendo los post es si, tras enviar el fichero firmado, nos devuelve un mensaje de error.
1. Si el error es de datos, creo que el fichero se acepta y queda registrado. (¿y que hay que hacer en este caso?)

2. Si el error es por otra causa y es rechazado (error en el formato o la firma por ejemplo) ¿queda registrado y su signaturevalue es válida para la siguiente factura? Supongo que no, pero no me ha quedado claro que ocurre en este caso.


El proceso que voy a seguir para realizar los envios es este, por si a alguien le sirve de ayuda y por si veis que hay algo que corregir:
Primero creo el fichero XML desde la factura sin los datos de encadenamiento y luego los recupero con otro programa que hace lo siguiente:

1. Lee el fichero XML
2. Busca la ultima factura procesada
3. Guarda los datos de encadenamiento
4. Firma el fichero

5. Envía el fichero
6. Si el resultado es correcto
a. Actualiza la ultima factura

b. Imprimo o envío la factura
c. Muevo el fichero xml a otro directorio

Si el resultado es incorrecto
a. Borro el fichero XML
b. Notifico el error
7. Inicio el proceso con el siguiente fichero


Gestionar el encadenamiento desde la misma aplicación de facturación, en entornos con múltiples terminales era una pesadilla, por eso la idea de crear una cola y gestionarla con otra aplicación. No se si ya existe algo así


Muchas gracias a todos.

Neftali [Germán.Estévez] 11-08-2022 09:51:27

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547705)
Hay cambios en el esquema de TicketBAI (campos no obligatorios), que llegan desde Guipuzcoa.
Por ahora, no es obligatorio cambiar nada.

¿Habrán hablado con Álava y Viscaya?

A esta pregunta (que les he realizado) me han contestado lo siguiente:

"Los cambios están consensuados entre las tres provincias. Sin embargo, de momento solo se han implementado en Gipuzkoa."

Osea, que podemos ir implementándolo para las 3 administraciones.

trumbolt 11-08-2022 11:51:22

Cita:

Empezado por Ja Mon (Mensaje 547861)
Saludos a todos y gracias por vuestra ayuda.


La duda que no me ha quedado clara leyendo los post es si, tras enviar el fichero firmado, nos devuelve un mensaje de error.
1. Si el error es de datos, creo que el fichero se acepta y queda registrado. (¿y que hay que hacer en este caso?)

2. Si el error es por otra causa y es rechazado (error en el formato o la firma por ejemplo) ¿queda registrado y su signaturevalue es válida para la siguiente factura? Supongo que no, pero no me ha quedado claro que ocurre en este caso.


El proceso que voy a seguir para realizar los envios es este, por si a alguien le sirve de ayuda y por si veis que hay algo que corregir:
Primero creo el fichero XML desde la factura sin los datos de encadenamiento y luego los recupero con otro programa que hace lo siguiente:

1. Lee el fichero XML
2. Busca la ultima factura procesada
3. Guarda los datos de encadenamiento
4. Firma el fichero

5. Envía el fichero
6. Si el resultado es correcto
a. Actualiza la ultima factura

b. Imprimo o envío la factura
c. Muevo el fichero xml a otro directorio

Si el resultado es incorrecto
a. Borro el fichero XML
b. Notifico el error
7. Inicio el proceso con el siguiente fichero


Gestionar el encadenamiento desde la misma aplicación de facturación, en entornos con múltiples terminales era una pesadilla, por eso la idea de crear una cola y gestionarla con otra aplicación. No se si ya existe algo así


Muchas gracias a todos.

El problema que veo es que si tienes un error en el envío, borras el xml y estás "sacando" esa factura digamos del correcto encadenamiento. Si la borras, ¿cómo gestionas luego eso?. Aparte que si tienes que imprimir la factura (y necesitas el QR) cómo lo haces cpon esa factira cuyo envio ha fallado? Lo digo porque necesitas la firma para eso.

Teóricamente según TBAI, el software garante tiene que ser capaz de emitir una factura (firmarla e imprimir su QR) sin necesidad de conectarse con ellos (que era el principal problema que había al principio).

En mi caso, hemos desligado la generación, firmado e impresión de la factura del envío que va por un servicio de cola que únicamente se encarga de enviar las facturas que va generando el software y notifica posibles errores para luego poder solventarlos de manera manual, que es la única manera que hemos encontrado ya que automatizar algo es prácticamente imposible ...

Ja Mon 11-08-2022 14:58:12

Cita:

Empezado por trumbolt (Mensaje 547899)
El problema que veo es que si tienes un error en el envío, borras el xml y estás "sacando" esa factura digamos del correcto encadenamiento. Si la borras, ¿cómo gestionas luego eso?. Aparte que si tienes que imprimir la factura (y necesitas el QR) cómo lo haces cpon esa factira cuyo envio ha fallado? Lo digo porque necesitas la firma para eso.

Teóricamente según TBAI, el software garante tiene que ser capaz de emitir una factura (firmarla e imprimir su QR) sin necesidad de conectarse con ellos (que era el principal problema que había al principio).

En mi caso, hemos desligado la generación, firmado e impresión de la factura del envío que va por un servicio de cola que únicamente se encarga de enviar las facturas que va generando el software y notifica posibles errores para luego poder solventarlos de manera manual, que es la única manera que hemos encontrado ya que automatizar algo es prácticamente imposible ...


Yo hago algo parecido: un programa crea el xml en una carpeta compartida en la red y luego otro programa gestiona la cola firmando, enviando el fichero y luego comunicando al programa de facturación el resultado.
La idea de borrar el xml es para eliminarlo de la lista de ficheros pendientes de firmar y enviar. Tras hacerlo, notifico a la factura que ha habido un error y que hay que volver a generar el fichero y, por tanto, no puede imprimirse. Después de borrar el fichero, el programa continúa con la cola. Esto te permite seguir trabajando y te asegura que el QR impreso siempre es correcto. Lo peor que puede pasar es que los servidores TBai no funcionen y los clientes se tengan que ir sin el tiquet o esperarse un rato.

La diferencia que veo con tu método es que se corre el riesgo de que el el fichero sea rechazado y no ingrese en su sistema. Estarías imprimiendo un QR que apunta a una URL inexistente y se estaría rompiendo el encadenamiento real.

Sistel 11-08-2022 16:24:56

Cita:

Empezado por Ja Mon (Mensaje 547902)
Yo hago algo parecido: un programa crea el xml en una carpeta compartida en la red y luego otro programa gestiona la cola firmando, enviando el fichero y luego comunicando al programa de facturación el resultado.
La idea de borrar el xml es para eliminarlo de la lista de ficheros pendientes de firmar y enviar. Tras hacerlo, notifico a la factura que ha habido un error y que hay que volver a generar el fichero y, por tanto, no puede imprimirse. Después de borrar el fichero, el programa continúa con la cola. Esto te permite seguir trabajando y te asegura que el QR impreso siempre es correcto. Lo peor que puede pasar es que los servidores TBai no funcionen y los clientes se tengan que ir sin el tiquet o esperarse un rato.

La diferencia que veo con tu método es que se corre el riesgo de que el el fichero sea rechazado y no ingrese en su sistema. Estarías imprimiendo un QR que apunta a una URL inexistente y se estaría rompiendo el encadenamiento real.

Hola,

Creo que el procedimiento, como ya han indicado más de una vez los de TicketBAI, no es esperar a conseguir que el sistema informático de Hacienda Foral dé el visto bueno al XML firmado y enviado.
Se trata de:
- Recopilar los datos para emitir la factura (la factura no está emitida, realmente, hasta que no se ha obtenido el XML firmado)
- Crear el XML
- Firmarlo (ahora es cuando la factura está realmente emitida)
- Recopilar los datos de códigos TBAI y QR a partir de los datos del XML firmado
- Imprimir o enviar la factura al destinatario con los códigos TBAI y QR.
- Y, a continuación, enviar el XML firmado a Hacienda.

Que Hacienda dé por bueno o no el XML es independiente: la factura ya está emitida.
Si Hacienda da por bueno el XML recibido, genial.
Si Hacienda no lo da por bueno, dependiendo del tipo de código que retorne, habrá que hacer una u otra cosa. Pero la factura ya está emitida y va a misa.

Saludos

Ja Mon 11-08-2022 17:16:40

Cita:

Empezado por Sistel (Mensaje 547906)
Hola,

Creo que el procedimiento, como ya han indicado más de una vez los de TicketBAI, no es esperar a conseguir que el sistema informático de Hacienda Foral dé el visto bueno al XML firmado y enviado.
Se trata de:
- Recopilar los datos para emitir la factura (la factura no está emitida, realmente, hasta que no se ha obtenido el XML firmado)
- Crear el XML
- Firmarlo (ahora es cuando la factura está realmente emitida)
- Recopilar los datos de códigos TBAI y QR a partir de los datos del XML firmado
- Imprimir o enviar la factura al destinatario con los códigos TBAI y QR.
- Y, a continuación, enviar el XML firmado a Hacienda.

Que Hacienda dé por bueno o no el XML es independiente: la factura ya está emitida.
Si Hacienda da por bueno el XML recibido, genial.
Si Hacienda no lo da por bueno, dependiendo del tipo de código que retorne, habrá que hacer una u otra cosa. Pero la factura ya está emitida y va a misa.

Saludos


Ok. Pero la duda que tengo es para este caso:

Tenemos 3 facturas A,B,C.
Se genera el xml de A, obtenemos el qr y el signature value para introducirlo en B e imprimimos

Se genera el xml de B, obtenemos el qr y el signature value para introducirlo en C e imprimimos

Se genera el xml de C, obtenemos el qr y el signature value para introducirlo en ... e imprimimos


El proceso de validación en TBai nos rechaza el fichero de B y no se registra en TBai (no porque no le gusten los datos si no porque hay un error en la estructura, por ejemplo) cuando ya hemos impreso C y encadenado con signature value de B.
En este caso C estaría encadenando con un fichero que nunca se ha registrado en TBai y el impreso de B tendría un qr que no apuntaría a una url válida.

No se si esto es correcto así y hay una forma de corregirlo posteriormente pero pienso que habría que evitarlo, también para evitar posibles explotaciones maliciosas de este error.

Sistel 11-08-2022 17:37:01

Cita:

Empezado por Ja Mon (Mensaje 547907)
Ok. Pero la duda que tengo es para este caso:
...
En este caso C estaría encadenando con un fichero que nunca se ha registrado en TBai y el impreso de B tendría un qr que no apuntaría a una url válida.
...

Hola Ja Mon,

El encadenamiento de los XML de facturas es algo que tienes que hacer tú a medida que las vas emitiendo.
Es independiente de que Hacienda después, cuando se las envíes, considere que alguna de ellas no está correcta.
Tú las tienes encadenadas y eso es lo importante.

Puede ser que se te caiga la conexión a Internet, que los servicios de Hacienda Foral no funcionen o que la emisión sea en Bizkaia (normativa Batuz que puede admitir que las facturas se envíen varios meses después de su emisión).
Da igual: tú las tienes numeradas consecutivamente, firmadas y encadenadas.
Si después, cuando consigas enviarlas a Hacienda, te dice que alguna (o todas) tienen errores tienes diversas vías para corregir esos errores sin necesidad de volver a enviar.
(Por ejemplo, en Bizkaia, en el capítulo 1.2 del LROE. O en Gipuzkoa o Alava mediante el servicio Zuzendu).

Pero, en cualquier caso, la emisión de la factura (y su encadenamiento) y la obtención de los códigos TBAI y QR son temas de tu aplicación de facturación e independientes del posterior envío y aceptación (o no) por parte de Hacienda.

Para corregir los errores, después, ya hay otras vías, pero la factura emitida firmada y encadenada es cosa tuya y no se debe poder borrar ni alterar en ningún caso (Nueva Ley General Tributaria Antifraude)

Saludos

trumbolt 12-08-2022 13:53:05

Cita:

Empezado por Ja Mon (Mensaje 547902)
Yo hago algo parecido: un programa crea el xml en una carpeta compartida en la red y luego otro programa gestiona la cola firmando, enviando el fichero y luego comunicando al programa de facturación el resultado.
La idea de borrar el xml es para eliminarlo de la lista de ficheros pendientes de firmar y enviar. Tras hacerlo, notifico a la factura que ha habido un error y que hay que volver a generar el fichero y, por tanto, no puede imprimirse. Después de borrar el fichero, el programa continúa con la cola. Esto te permite seguir trabajando y te asegura que el QR impreso siempre es correcto. Lo peor que puede pasar es que los servidores TBai no funcionen y los clientes se tengan que ir sin el tiquet o esperarse un rato.

La diferencia que veo con tu método es que se corre el riesgo de que el el fichero sea rechazado y no ingrese en su sistema. Estarías imprimiendo un QR que apunta a una URL inexistente y se estaría rompiendo el encadenamiento real.

Aunque no ingrese en su sistema (caso de que el xml sea rechazado como indicas) ese XML se corresponde con una factura perfectamente válida ya emitida por el software y como dice @sistel, eso va a misa. Para solventar el problema luego se tendría que realizar un Zuzendu de subsanación en el caso de Guipuzcua y Alava con lo que el QR de esa factura ya emitida y que tendría en poder el cliente, empezaría a funcionar correctamente porque la factura ya estaría "dada de alta" por asi decirlo, en su sistema.

Deberías de diseñar el sistema para que fuese autónomo de manera que si hubiese un problema de conexión (los servidores de IZEMPE se caen o están "en mantenimiento", o la conexión a inet se va por avería), el software pueda seguir emitiendo facturas con encadenamiento, QR e identificador tbai. Eso fue una de las cosas que más me costó entender en un principio ...

Ja Mon 12-08-2022 18:00:29

Cita:

Empezado por trumbolt (Mensaje 547924)
Aunque no ingrese en su sistema (caso de que el xml sea rechazado como indicas) ese XML se corresponde con una factura perfectamente válida ya emitida por el software y como dice @sistel, eso va a misa. Para solventar el problema luego se tendría que realizar un Zuzendu de subsanación en el caso de Guipuzcua y Alava con lo que el QR de esa factura ya emitida y que tendría en poder el cliente, empezaría a funcionar correctamente porque la factura ya estaría "dada de alta" por asi decirlo, en su sistema.

Deberías de diseñar el sistema para que fuese autónomo de manera que si hubiese un problema de conexión (los servidores de IZEMPE se caen o están "en mantenimiento", o la conexión a inet se va por avería), el software pueda seguir emitiendo facturas con encadenamiento, QR e identificador tbai. Eso fue una de las cosas que más me costó entender en un principio ...


Intuitivamente, me cuesta aceptar entregarle al cliente información potencialmente erronea que pueda suponer un conflicto para el vendedor pero si hacienda no le va a "buscar las cosquillas" pues lo haré así.
Muchas gracias, sistel y trumbold, por la ayuda.

xamminf 12-08-2022 19:02:19

Hola a todos,

No sé si esto ha sido respondido, pero pregunto

Cuando generamos el .xml, hay alguna forma de saber si es valido o no antes de mandarlo, a nivel de sintaxis y a nivel de informacion.
Si fuera erroneo intentaría rehacerlo y no generar la cadena de .xml erroneo + envio + error en pantalla + llamada del usuario + .xml de anulacion
Lo digo porque sobre todo al principio puedo generar algunos .xml erroneos y claro eso conllevara problemas y quizas anulaciones


Gracias de antemano

Sistel 12-08-2022 22:30:56

Cita:

Empezado por xamminf (Mensaje 547929)
...
Cuando generamos el .xml, hay alguna forma de saber si es valido o no antes de mandarlo, a nivel de sintaxis y a nivel de informacion.
Si fuera erroneo intentaría rehacerlo y no generar la cadena de .xml erroneo + envio + error en pantalla + llamada del usuario + .xml de anulacion
...

Hola xamminf,

Sí. Puedes usar un verificador para comprobar que el XML cumple el esquema XSD de TicketBAI.
Yo programo en PHP y para verificar los XML creados utilizo la función DOMDocument::schemaValidate (https://www.php.net/manual/es/domdoc...schemavalidate)
Supongo que todos los lenguajes tendrán alguna función similar.

Pero ojo, la verificación deberías hacerla no sólo antes de enviar el XML a Hacienda, sino antes de emitir realmente la factura.
Los pasos que yo hago son:
- Recabar y comprobar todos los datos que compondrán la factura.
- Recabar los datos necesarios de la factura anterior para el encadenamiento.
- Creación del XML
- Firma del XML
- Verificación del XML frente al esquema XSD de TicketBAI

Si pasa la verificación, obtengo los códigos TBAI y QR y doy por emitida la factura.

Si no pasa la verificación, no puedo emitir esa factura (ni me molesto, en ese caso, en obtener los códigos TBAI yQR).

Hasta que no pasa la verificación no doy como utilizado el número de factura que le había asignado provisionalmente: la factura no está aún emitida.

El tema del envío a Hacienda es algo posterior (y sólo una vez emitida la factura)

Saludos

xamminf 13-08-2022 01:37:36

Cita:

Empezado por Sistel (Mensaje 547930)
Hola xamminf,

Sí. Puedes usar un verificador para comprobar que el XML cumple el esquema XSD de TicketBAI.
Yo programo en PHP y para verificar los XML creados utilizo la función DOMDocument::schemaValidate (https://www.php.net/manual/es/domdoc...schemavalidate)
Supongo que todos los lenguajes tendrán alguna función similar.

Pero ojo, la verificación deberías hacerla no sólo antes de enviar el XML a Hacienda, sino antes de emitir realmente la factura.
Los pasos que yo hago son:
- Recabar y comprobar todos los datos que compondrán la factura.
- Recabar los datos necesarios de la factura anterior para el encadenamiento.
- Creación del XML
- Firma del XML
- Verificación del XML frente al esquema XSD de TicketBAI

Si pasa la verificación, obtengo los códigos TBAI y QR y doy por emitida la factura.

Si no pasa la verificación, no puedo emitir esa factura (ni me molesto, en ese caso, en obtener los códigos TBAI yQR).

Hasta que no pasa la verificación no doy como utilizado el número de factura que le había asignado provisionalmente: la factura no está aún emitida.

El tema del envío a Hacienda es algo posterior (y sólo una vez emitida la factura)

Saludos



Sistel muchas gracias por tu detallada informacion

Ja Mon 17-08-2022 08:57:43

Hola, de nuevo.

Expongo la problemática y una solución, a ver si estoy en lo correcto y si alguien más se ha encontrado con esto y le sirve de ayuda.



En entornos multipuesto, varios usuarios var a querer obtener la última factura emitida al mismo tiempo:

a.Ultima factura firmada es 1
b.Equipo PC1 crea factura 2 y su xml, busca ultima factura (1) y firma
c.Mientras tiene lugar el proceso b. los equipos PC2, PC3, PC4 crean sus facturas (3,4,5) y sus xml y buscan la ultima factura.
d.Si b. no ha acabado (por el motivo que sea) todos encontrarán que la ultima factura sigue siendo 1 y todos querran incluirla en el encadenamiento.


Si se pudiesen firmar los xml en el servidor, no sería problema: se crea un cola y ya se procesará allí. Pero en las faq (8.10) indica que es el equipo emisor de la factura el que tiene que realizar la firma.

Para solucionarlo estoy creando este flujo de trabajo, a ver que os parece.


a.Equipo PC1 crea XML en una carpeta del servidor
b.El servidor busca la última factura firmada.
c.El servidor agrega el encadenamiento al fichero XML
d.El servidor comunica a Equipo PC1 que ya puede firmar
e.Equipo PC1 firma y lo comunica al servidor

f.El servidor envia el fichero y continua con el siguiente XML de su lista.
g.Equipo PC1 ya puede imprimir, exportar o enviar por correo electrónico.



Creo que también podría "obligar" al usuario a tener una serie en cada equipo (faq 14.1) pero los clientes, habitualmente, quieren poder imprimir facturas correlativas desde cualquier puesto de trabajo.

Ja Mon 17-08-2022 09:10:18

Otra duda sobre algo que, supongo, estará permitido. He enviado la consulta a hacienda pero la respuesta me ha dejado dudas.



En multipuesto y con una misma serie el fichero xml, su firma y envio de la factura 1000 puede ser posterior al envio de la factura 1001 debido a que la 1000 es una factura que está siendo revisada, o se ha dejado a medias en el almuerzo o la comida, etc. y la 1001 es una operación rápida de un cliente que está en el mostrador.


¿Supone algún problema?
Gracias.

Sistel 17-08-2022 09:10:35

Cita:

Empezado por Ja Mon (Mensaje 547957)
Hola, de nuevo.

Expongo la problemática y una solución, a ver si estoy en lo correcto y si alguien más se ha encontrado con esto y le sirve de ayuda.



En entornos multipuesto, varios usuarios var a querer obtener la última factura emitida al mismo tiempo:

a.Ultima factura firmada es 1
b.Equipo PC1 crea factura 2 y su xml, busca ultima factura (1) y firma
c.Mientras tiene lugar el proceso b. los equipos PC2, PC3, PC4 crean sus facturas (3,4,5) y sus xml y buscan la ultima factura.
d.Si b. no ha acabado (por el motivo que sea) todos encontrarán que la ultima factura sigue siendo 1 y todos querran incluirla en el encadenamiento.


Si se pudiesen firmar los xml en el servidor, no sería problema: se crea un cola y ya se procesará allí. Pero en las faq (8.10) indica que es el equipo emisor de la factura el que tiene que realizar la firma.

Para solucionarlo estoy creando este flujo de trabajo, a ver que os parece.


a.Equipo PC1 crea XML en una carpeta del servidor
b.El servidor busca la última factura firmada.
c.El servidor agrega el encadenamiento al fichero XML
d.El servidor comunica a Equipo PC1 que ya puede firmar
e.Equipo PC1 firma y lo comunica al servidor

f.El servidor envia el fichero y continua con el siguiente XML de su lista.
g.Equipo PC1 ya puede imprimir, exportar o enviar por correo electrónico.



Creo que también podría "obligar" al usuario a tener una serie en cada equipo (faq 14.1) pero los clientes, habitualmente, quieren poder imprimir facturas correlativas desde cualquier puesto de trabajo.

Hola Ja Mon,

El procedimiento que propones puede crear un cuello de botella si el PC tarda mucho en firmar.

Y sí que está admitida la firma en servidor.
Lee las especificaciones de firma de TicketBAI. Hay tres modalidades admitidas:
- Arquitecturas con firma en cliente
- Arquitecturas con firma en servidor
- Arquitecturas con posibilidad de firma en cliente y en servidor

Firmar en servidor te permite tener un único certificado digital y aislar el tema de la firma de los problemas que pueda tener un PC.

Saludos

Sistel 17-08-2022 09:15:02

Cita:

Empezado por Ja Mon (Mensaje 547958)
Otra duda sobre algo que, supongo, estará permitido. He enviado la consulta a hacienda pero la respuesta me ha dejado dudas.



En multipuesto y con una misma serie el fichero xml, su firma y envio de la factura 1000 puede ser posterior al envio de la factura 1001 debido a que la 1000 es una factura que está siendo revisada, o se ha dejado a medias en el almuerzo o la comida, etc. y la 1001 es una operación rápida de un cliente que está en el mostrador.


¿Supone algún problema?
Gracias.

Hola Ja Mon,

No debe retrasarse la firma y envío en ningún caso.
(El envío sólo podría retrasarse en Bizkaia que se envía mediante LROE)

Yo considero que la emisión de la factura tiene lugar en el momento que se firma crea y firma el XML y debe llevar esa fecha y hora.
No se puede crear un XML y firmar más adelante.
Se trata de que todas las facturas sean consecutivas, con fecha y hora de la emisión y con envío inmediato.

Saludos

Ja Mon 17-08-2022 09:48:27

Cita:

Empezado por Sistel (Mensaje 547959)
Hola Ja Mon,

El procedimiento que propones puede crear un cuello de botella si el PC tarda mucho en firmar.

Y sí que está admitida la firma en servidor.
Lee las especificaciones de firma de TicketBAI. Hay tres modalidades admitidas:
- Arquitecturas con firma en cliente
- Arquitecturas con firma en servidor
- Arquitecturas con posibilidad de firma en cliente y en servidor

Firmar en servidor te permite tener un único certificado digital y aislar el tema de la firma de los problemas que pueda tener un PC.

Saludos

Ok. Creo que es una confusión con los términos. En 8.10 dice


Sí, si bien la firma del fichero XML TicketBAI se deberá realizar en el dispositivo en elque se genere la factura, el envío a la Administración podrá hacerlo tanto el propio
dispositivo de facturación como otro dispositivo diferente,por ejemplo, un servidor
centralqueenvíe losficheros devariosdispositivos defacturación



¿debo entender que el dispositivo en elque se genere la factura es el equipo donde se genera el xml, no el equipo donde está abierta la factura e inicia todo el proceso?

Ja Mon 17-08-2022 09:57:59

Cita:

Empezado por Sistel (Mensaje 547960)
Hola Ja Mon,

No debe retrasarse la firma y envío en ningún caso.
(El envío sólo podría retrasarse en Bizkaia que se envía mediante LROE)

Yo considero que la emisión de la factura tiene lugar en el momento que se firma crea y firma el XML y debe llevar esa fecha y hora.
No se puede crear un XML y firmar más adelante.
Se trata de que todas las facturas sean consecutivas, con fecha y hora de la emisión y con envío inmediato.

Saludos

La duda que tengo no es el momento de firma y envio, sino si, al haber varios usuarios creando facturas simultaneamente, se pueden firmar y enviar por orden de solicitud o tiene que ser por orden de numeración. Es decir, un usuario acaba la factura 100, crea el xml y lo quiere firmar y enviar; pero hay otro usuario que está revisando la factura 99 antes de firmarla y otro la 98 que ha salido a almorzar, por ejemplo, y no lo las firmarán hasta pasado un tiempo. ¿Supone un problema enviar antes la 100 que la 99 y 98? Es que esto ocurre muy a menudo

Sistel 17-08-2022 10:21:11

Cita:

Empezado por Ja Mon (Mensaje 547961)
...
¿debo entender que el dispositivo en elque se genere la factura es el equipo donde se genera el xml, no el equipo donde está abierta la factura e inicia todo el proceso?

Hola Ja Mon,

Yo así lo entiendo.
Para mí la emisión de la factura es el momento en que creo el XML y lo firmo (en el mismo equipo) con la fecha y hora de ese momento.
Después ya extraigo el código TBAI y código QR para meterlos en el documento-factura y envío a Hacienda Foral.

Saludos


La franja horaria es GMT +2. Ahora son las 23:47:29.

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