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)

Irreo 01-09-2022 10:14:56

Buenos días a todos,

Ando redactando la memoria para Gipuzkoa, y repasando en mi código el tema del encadenamiento, a la hora de redactar cómo funciona, me han entrado algunas dudas sobre si lo que tengo montado se puede considerar correcto.

En la documentación mencionan que en Gipuzkoa la comunicación debe ser "inmediata". Pero claro, no estoy seguro qué consideran ellos inmediato... :rolleyes:

El sistema que tengo montado (todavía en fase de pruebas) funciona así:

Infraestructura:
- Servidor con un API propio, que viene a ser un "proxy" entre las personas que crean las facturas, y Hacienda.
- Tiendas físicas con software Windows para venta y emisión de tickets.

Servidor:
- Se recibe un JSON con una factura.
- Se crea un registro en la BBDD con todos los datos.
- Se firma y se guarda todo.
- Si es nueva factura queda marcada como "pendiente de enviar", y si es una corregida se guarda como "a reenviar"

Cronjob que se está ejecutando constantemente en el servidor:
- Cada 10 segundos, y en orden de creación de factura, se lee una factura de la tabla anterior y se envía.
- Si es una factura sin intento de envío previo, obtengo el XML ya firmado que estaba guardado.
- Si es una factura a corregir, genero de nuevo el XML a partir de los datos de la factura, que no va firmado.

Con esto me aseguro de que el encadenamiento esté siempre bien. Es decir, aunque una factura sea rechazada, ya se considera como "factura anterior" para el encadenamiento.
Y al haber solo un hilo del sistema dedicado al envío de facturas, con los 10 segundos de margen se evitan situaciones donde dos envíos se pisan entre ellos, si el primero por ejemplo tarda varios segundos.

Otro de los motivos de tener esto así, es poder emitir el ticket con el QR incluso aunque todavía no hayamos comunicado con Hacienda.

Es decir:
- Un cliente compra un producto en la tienda.
- El software del ordenador envía los datos a nuestro API, y le entrega el QR y TBAI.
- La factura todavía no sabemos si tiene el XML incorrecto, si va a ser rechazada o aceptada, pero entiendo que me da igual.
- El cliente se va con su ticket.
- En los segundos siguientes a haberse guardado la factura, ya se va a enviar a Hacienda mediante el cronjob.

¿Mi preocupación?
Que por lo que sea, se generen muchas facturas en algún momento, y en lugar de tardar de 1 a 9 segundos en estar funcional el QR, tarde 50 segundos por ejemplo... o más.

¿Debe ser inmediato.... inmediato?

¿Sabéis algo de si el inspector que hace verificaciones presenciales crea una factura e intenta leer el QR en el mismísimo instante?

Gracias!
Saludos.

workTeam 01-09-2022 10:28:54

Buenas! Estoy haciendo pruebas de envío a Bizkaia y me devuelve un 408.
¿Alguien haciendo pruebas con la misma respuesta? ¿Sabéis si está caído?

Muchas gracias

espinete 01-09-2022 13:27:43

Hola de nuevo a todos/as...

Después de varios meses con la aplicación rulando para varios clientes, en entorno de pruebas y en producción, ha habido algunas incidencias y me gustaría saber cómo lo hacéis vosotros...

La primera duda es con la "anulación y reenvío" de facturas, que creo que no se puede o no se debe hacer. Algunos clientes "anulan" una factura (envían una "anulación") y luego intentan reenviar la misma factura de nuevo. ¿Eso se puede hacer? ¿No habría que generar una nueva factura en vez de enviar la misma?

VIMASAN 01-09-2022 15:40:36

Buenas tardes, gracias por tu rápida respuesta.

Me cuadran todos los casos, menos el de certificado de residencia, este caso es el tipo de identificación 05 y según las especificaciones no puede llevar ES. ¿También sería PT?



Gracias.

Sistel 01-09-2022 16:18:30

Cita:

Empezado por Irreo (Mensaje 548151)
Buenos días a todos,

Ando redactando la memoria para Gipuzkoa, y repasando en mi código el tema del encadenamiento, a la hora de redactar cómo funciona, me han entrado algunas dudas sobre si lo que tengo montado se puede considerar correcto.

En la documentación mencionan que en Gipuzkoa la comunicación debe ser "inmediata". Pero claro, no estoy seguro qué consideran ellos inmediato... :rolleyes:

El sistema que tengo montado (todavía en fase de pruebas) funciona así:

Infraestructura:
- Servidor con un API propio, que viene a ser un "proxy" entre las personas que crean las facturas, y Hacienda.
- Tiendas físicas con software Windows para venta y emisión de tickets.

Servidor:
- Se recibe un JSON con una factura.
- Se crea un registro en la BBDD con todos los datos.
- Se firma y se guarda todo.
- Si es nueva factura queda marcada como "pendiente de enviar", y si es una corregida se guarda como "a reenviar"

Cronjob que se está ejecutando constantemente en el servidor:
- Cada 10 segundos, y en orden de creación de factura, se lee una factura de la tabla anterior y se envía.
- Si es una factura sin intento de envío previo, obtengo el XML ya firmado que estaba guardado.
- Si es una factura a corregir, genero de nuevo el XML a partir de los datos de la factura, que no va firmado.

Con esto me aseguro de que el encadenamiento esté siempre bien. Es decir, aunque una factura sea rechazada, ya se considera como "factura anterior" para el encadenamiento.
Y al haber solo un hilo del sistema dedicado al envío de facturas, con los 10 segundos de margen se evitan situaciones donde dos envíos se pisan entre ellos, si el primero por ejemplo tarda varios segundos.

Otro de los motivos de tener esto así, es poder emitir el ticket con el QR incluso aunque todavía no hayamos comunicado con Hacienda.

Es decir:
- Un cliente compra un producto en la tienda.
- El software del ordenador envía los datos a nuestro API, y le entrega el QR y TBAI.
- La factura todavía no sabemos si tiene el XML incorrecto, si va a ser rechazada o aceptada, pero entiendo que me da igual.
- El cliente se va con su ticket.
- En los segundos siguientes a haberse guardado la factura, ya se va a enviar a Hacienda mediante el cronjob.

¿Mi preocupación?
Que por lo que sea, se generen muchas facturas en algún momento, y en lugar de tardar de 1 a 9 segundos en estar funcional el QR, tarde 50 segundos por ejemplo... o más.

¿Debe ser inmediato.... inmediato?

¿Sabéis algo de si el inspector que hace verificaciones presenciales crea una factura e intenta leer el QR en el mismísimo instante?

Gracias!
Saludos.

Hola,

Parece correcto.
Aunque tienes que tener en cuenta algunos matices:

- Cuando dices "Se recibe un JSON con una factura", no es del todo correcto.
Deberías decir "Se recibe un JSON con los datos para emitir la factura", ya que la factura no existe hasta que no se emite, que es en el momento que se crea y firma el XML.

Y, por supuesto, es totalmente correcto que, a partir del tener el XML firmado obtengas el código TBAI y el código QR y los imprimas en el documento de la factura (independientemente de que aún no se haya enviado a Hacienda)

El término "envío inmediato" no supone ir a la velocidad de la luz.
Al igual que tú, yo lanzo un cronjob (yo lo hago cada minuto). Y se encarga de enviar cada una de los XML firmados que aún no se han enviado.
Yo entiendo que 1 minuto es inmediato.

Respecto al tema de la Verificación Presencial, entiendo que si un inspector se persona en el domicilio desde el que se emiten las facturas, puede solicitar ver el resultado que muestra el botón de "Verificación Presencial" (o como se quiera llamar en la aplicación), pero no creo que un inspector pueda tocar nada y, menos aún, emitir una factura.
Entiendo que podría solicitar ver una factura y escanear, con su smartphone el código QR para comprobar el estado y datos en la web de Hacienda Foral.

Saludos

Sistel 01-09-2022 16:22:07

Cita:

Empezado por espinete (Mensaje 548158)
Hola de nuevo a todos/as...

Después de varios meses con la aplicación rulando para varios clientes, en entorno de pruebas y en producción, ha habido algunas incidencias y me gustaría saber cómo lo hacéis vosotros...

La primera duda es con la "anulación y reenvío" de facturas, que creo que no se puede o no se debe hacer. Algunos clientes "anulan" una factura (envían una "anulación") y luego intentan reenviar la misma factura de nuevo. ¿Eso se puede hacer? ¿No habría que generar una nueva factura en vez de enviar la misma?

Hola,

Efectivamente, tras anular una factura, se puede emitir otra, pero será una nueva y con un nuevo número de factura y nueva fecha-hora de emisión. Pero nunca se puede emitir la misma factura (que ha quedado anulada a efectos fiscales)

Saludos

Irreo 01-09-2022 16:43:31

Buenas Sistel,

Muchas gracias por la respuesta.

Vamos respondiendo:

Cita:

Empezado por Sistel (Mensaje 548161)
Deberías decir "Se recibe un JSON con los datos para emitir la factura", ya que la factura no existe hasta que no se emite, que es en el momento que se crea y firma el XML.

Entiendo lo que dices, pero en nuestro caso no es así :)

Tenemos por un lado un servidor con un SQLServer, y por otro lado un Access VBA en Windows que es el punto de venta de las tiendas físicas.

Para poder realizar cualquier venta hace falta conexión a Internet ya que todo el tema de stock, pedidos, etc. se visualizan en la tienda, pero se sincroniza con la central, donde está el servidor.

Hasta ahora sólo se generaban pedidos con sus líneas. Ahora, en el momento de realizar una venta, es el propio SQL Server el que obtiene el "próximo número de factura", y guarda una nueva factura con sus líneas en la base de datos central.

Después de esto, se envía a este API nuestro el JSON con todo. Ten en cuenta que tenemos dos CIF, y la intención es que toda la facturación esté centralizada (antes iba con tablas separadas), de forma que cada vez que se genera una nueva factura, con su numeración correspondiente, se envíe a nuestro API para obtener TBAI, QR....

Cita:

Empezado por Sistel (Mensaje 548161)
Respecto al tema de la Verificación Presencial, entiendo que si un inspector se persona en el domicilio desde el que se emiten las facturas, puede solicitar ver el resultado que muestra el botón de "Verificación Presencial" (o como se quiera llamar en la aplicación), pero no creo que un inspector pueda tocar nada y, menos aún, emitir una factura.
Entiendo que podría solicitar ver una factura y escanear, con su smartphone el código QR para comprobar el estado y datos en la web de Hacienda Foral.

Con esto tengo mis dudas. En la documentación se menciona:

Cita:

(...) el personal inspector podrá verificar el correcto funcionamiento del software de
facturación y podrá requerir la aportación de los ficheros TBAI generados tanto en el proceso de verificación
como aquellos que el contribuyente tiene la obligación de conservar, (...)

Con esto entiendo que pueden realizar algún tipo de prueba que genere ficheros TBAI.

De todas formas, sobre esto he preguntado hace un rato a Hacienda, porque tenemos varias tiendas físicas (sin oficina ni responsables), y no sé exactamente cómo puede ser una visita de un inspector... como si entra al Fnac y le pide a una de las cajeras ficheros TBAI...

De todas formas tiene pinta que será como dices, irán a la dirección que sea el domicilio fiscal. Y aquí de nuevo me quedo bloqueado, porque es una de las tiendas.. aunque creo que una de las jefas suele andar por allá, así que ya pensaremos algo :D

En cualquier caso, con lo que me respondan informo aquí, por si le sirve a alguien.

Cita:

Empezado por Sistel (Mensaje 548161)
El término "envío inmediato" no supone ir a la velocidad de la luz.
Al igual que tú, yo lanzo un cronjob (yo lo hago cada minuto). Y se encarga de enviar cada una de los XML firmados que aún no se han enviado.
Yo entiendo que 1 minuto es inmediato.

Con esto ya me quedo más tranquilo. Aunque sí que es cierto que en mi caso el cron no es solo para las facturas que se hayan quedado sin enviar, sino para todas las que se van generando. Según las recibe el API, la guarda en la tabla marcada como "PTE", y en el siguiente ciclo se intenta enviar cualquiera que esté PTE, una por una.

Saludos!

thinkows 06-09-2022 10:24:37

Certificados de firma de código
 
Buenos días, alguno de vosotros ha utilizado o utiliza Comodo Code Signing, para firmar los ejecutables i/o instaladores de una aplicación de escritorio Windows, para ticketbai ?

Tengo una cotización de LeaderSSL de certificado de organización a 196€ por tres años.

Que os parece, alguna alternativa ?

Gracias de antemano.

amontes 06-09-2022 17:03:12

Zuzendu Guipuzkoa
 
Hola a todos!

Estoy pegandome con el servicio Zuzendu tanto de modificación (modificar/Subsanar) como la baja de Zuzendu, y siempre me lo rechazan con el error "Fichero no cumple el esquema XSD. El elemento principal debe ser SubsanacionModificacionTicketBAI." y "Fichero no cumple el esquema XSD. El elemento principal debe ser AnulaTicketBai.", ¿alguien ha tenido este problema? He revisado el XML con el XSD y lo veo todo correcto...

Código:

<?xml version="1.0" encoding="UTF-8"?>
<T:AnulaTicketBai xmlns:T="urn:ticketbai:zuzendu-baja">
  <Cabecera>
    <IDVersion>1.2</IDVersion>
  </Cabecera>
  <IDFactura>
    <Emisor>
      <NIF>XXXXXXXXXX</NIF>
      <ApellidosNombreRazonSocial>XXXXXXXXXXXXXXXX</ApellidosNombreRazonSocial>
    </Emisor>
    <CabeceraFactura>
      <SerieFactura>V-FAC1</SerieFactura>
      <NumFactura>XXXXXX</NumFactura>
      <FechaExpedicionFactura>12/01/22</FechaExpedicionFactura>
    </CabeceraFactura>
  </IDFactura>
  <HuellaTBAI>
    <Software>
      <LicenciaTBAI>TBAIGIPRE00000000XXX</LicenciaTBAI>
      <EntidadDesarrolladora>
        <NIF>XXXXXXXXX</NIF>
      </EntidadDesarrolladora>
      <Nombre>XXXXXXXXX</Nombre>
      <Version>1.0</Version>
    </Software>
  </HuellaTBAI>
  <SignatureValueFirmaAnulacion>yWMDh71bZ+4ZU9XXXe28HqrJY9QEUB3qsVwJrmxXYQUeKFBAFygZrO0RnPc7WUvQxTXSUi1+n6BAXotZsXGf5rgHxIq84JK0tPgs</SignatureValueFirmaAnulacion>
</T:AnulaTicketBai>


Irreo 07-09-2022 08:21:23

@amontes:

T:AnulaTicketBai es el servicio de anulación.

Si miras el XML de ejemplo de Hacienda, el servicio Zuzendu para bajas es así:

T:SubsanacionAnulacionTicketBAI

A ver si con eso se te soluciona...

Por otro lado, la fecha en este formato creo que no es correcta: 12/01/22

Debería ser 12-01-2022.

Saludos.

Ramon88 09-09-2022 10:58:36

Termina de surgirme algo que la verdad no pensé...


Un cliente empezó en Julio, y ha intentado anular una factura que realizó en Febrero (Vamos, no esta subida y no hay datos de ella)
Que pongo en:


Código:

<CabeceraFactura>
  <SerieFactura>XXX</SerieFactura>
  <NumFactura>XXX</NumFactura>
  <FechaExpedicionFactura>XXX</FechaExpedicionFactura>
 </CabeceraFactura>


Alguna idea?

keys 09-09-2022 11:05:47

Cita:

Empezado por Ramon88 (Mensaje 548236)
Termina de surgirme algo que la verdad no pensé...


Un cliente empezó en Julio, y ha intentado anular una factura que realizó en Febrero (Vamos, no esta subida y no hay datos de ella)
Que pongo en:


Código:

<CabeceraFactura>
  <SerieFactura>XXX</SerieFactura>
  <NumFactura>XXX</NumFactura>
  <FechaExpedicionFactura>XXX</FechaExpedicionFactura>
 </CabeceraFactura>


Alguna idea?

Solo se pueden anular facturas que esten en el sistema.

Neftali [Germán.Estévez] 09-09-2022 11:06:41

Cita:

Empezado por Ramon88 (Mensaje 548236)
Termina de surgirme algo que la verdad no pensé...

Un cliente empezó en Julio, y ha intentado anular una factura que realizó en Febrero (Vamos, no esta subida y no hay datos de ella)
Que pongo en:


Código:

<CabeceraFactura>
  <SerieFactura>XXX</SerieFactura>
  <NumFactura>XXX</NumFactura>
  <FechaExpedicionFactura>XXX</FechaExpedicionFactura>
 </CabeceraFactura>

Alguna idea?

Para las facturas que no están en TickeBAI no debes enviar nada. No están en el sistema y por tanto no hay que hacer referencia a ellas para nada.
Digamos que tu sistema sólo debe entrar en el circuito de TicketBAI, para aquellas facturas posteriores a la fecha de alta de tu cliente en TBAI.

Ramon88 09-09-2022 11:54:02

Perfecto! gracias!!!!

Irreo 13-09-2022 08:32:14

Buenas,

Continuando a lo de la verificación presencial del otro día, desde Hacienda me han respondido esto:

Cita:

Buenos días,

El software debe guardar los ficheros TBAI originales enviados a Hacienda, por lo que si un inspector solicita ver dichas facturas, debéis poder facilitarle dichas facturas (ya sea con una utilidad del software o mostrando directamente la carpeta o BBDD donde se guardan los ficheros).

Además, se le debe facilitar la comprobación tanto del funcionamiento del software como del código.
Nuestro software es un API que va a estar en un servidor... ¿ahora resulta que le tengo que enseñar los ficheros PHP?

De todas formas, en las múltiples consultas que he enviado a Hacienda, a veces recibo respuestas muy escuetas, poco agradables, o bien copy-paste de documentos que ya he leído... y otras veces explicaciones más elaboradas y con un tono más amable. Es bastante frustrante. Son varias las veces que he tenido que responder otra vez porque no me han aclarado nada.

¿Alguien sabe algo sobre esto del código fuente?

De todo lo que he ido leyendo desde meses atrás, tengo el recuerdo que esto es para software de escritorio, ¿puede ser?

Al final, nosotros por un lado tenemos la programación en Visual Basic de la aplicación local, y luego el API en sí, que es el software que vamos a registrar.

Gracias!

keys 13-09-2022 08:37:46

Cita:

Empezado por Irreo (Mensaje 548254)
Buenas,

Continuando a lo de la verificación presencial del otro día, desde Hacienda me han respondido esto:



Nuestro software es un API que va a estar en un servidor... ¿ahora resulta que le tengo que enseñar los ficheros PHP?

De todas formas, en las múltiples consultas que he enviado a Hacienda, a veces recibo respuestas muy escuetas, poco agradables, o bien copy-paste de documentos que ya he leído... y otras veces explicaciones más elaboradas y con un tono más amable. Es bastante frustrante. Son varias las veces que he tenido que responder otra vez porque no me han aclarado nada.

¿Alguien sabe algo sobre esto del código fuente?

De todo lo que he ido leyendo desde meses atrás, tengo el recuerdo que esto es para software de escritorio, ¿puede ser?

Al final, nosotros por un lado tenemos la programación en Visual Basic de la aplicación local, y luego el API en sí, que es el software que vamos a registrar.

Gracias!

Me imagino que lo del código fuente es para casos extremos. No creo que te venga un inspector de hacienda y te diga que le enseñes el código :cool:. Lo que si hay que proporcionar un mecanismo para que pueda consultar los xml y la aplicación es responsable de almacenarlos.

Lo del software de escritorio es que los ejecutables tienes que estar firmados.

Un Saludo.

Sistel 13-09-2022 09:09:23

Hola Irreo,

Hacienda te dice:
Cita:

...Además, se le debe facilitar la comprobación tanto del funcionamiento del software como del código...
No dice que debas enseñarle el código (que por otro lado al inspector le sonaría a esquema de una central de fusión nuclear) sino "el funcionamiento ... del código"

Si se le hace, en vivo y en directo, una alta de factura, una anulación o una verificación presencial, ya aplaudirá con las orejas.

Saludos

Sistel 13-09-2022 09:18:37

Hola Irreo,

Cita:

De todas formas, en las múltiples consultas que he enviado a Hacienda, a veces recibo respuestas muy escuetas, poco agradables, o bien copy-paste de documentos que ya he leído... y otras veces explicaciones más elaboradas y con un tono más amable. Es bastante frustrante. Son varias las veces que he tenido que responder otra vez porque no me han aclarado nada.
Efectivamente, hay veces que te responden con explicaciones satisfactorias que demuestran que, al otro lado, tienes a un experto en el tema.
Pero otras veces la consulta le cae a un pardillo que echa balones fuera de la forma más burda posible, contestando con cosas sin relación con la consulta.
Es triste, pero es así.

Y lo que es una lástima es que no haya un servicio telefónico (atendido por personal técnico) que permita consultas-respuestas rápidas.
Ayer, sin ir más lejos, se estaban bloqueando los envíos que hace mi aplicación al entorno de pruebas de Gipuzkoa, con mensajes simples del servidor.
Tuve que hacerles una consulta por email para que al cabo de un tiempo me contestaran que sí, que no se habían dado cuenta de que el servicio del entorno de pruebas se les había caído.

Saludos

Irreo 13-09-2022 09:28:58

Gracias a todos por las respuestas.

Cita:

Empezado por keys (Mensaje 548256)
Me imagino que lo del código fuente es para casos extremos. No creo que te venga un inspector de hacienda y te diga que le enseñes el código :cool:. Lo que si hay que proporcionar un mecanismo para que pueda consultar los xml y la aplicación es responsable de almacenarlos.

Lo del software de escritorio es que los ejecutables tienes que estar firmados.

Un Saludo.

Tienes razón, seguramente lo que me sonaba de software de escritorio era lo de la firma, que en nuestro caso no aplica.

Cita:

Empezado por Sistel (Mensaje 548258)
Hola Irreo,

Hacienda te dice:

No dice que debas enseñarle el código (que por otro lado al inspector le sonaría a esquema de una central de fusión nuclear) sino "el funcionamiento ... del código"

Si se le hace, en vivo y en directo, una alta de factura, una anulación o una verificación presencial, ya aplaudirá con las orejas.

Saludos

Pues espero que tengas razón :D


En un email me comentaron que la pantalla de "verificación" bastaba con que simplemente sea una especie "Acerca de.." con la info del software, número de serie etc...

Pero como para las pruebas ya tengo desarrollada una pantalla un poco más avanzada, además de eso, les voy a poner un listado de facturas y que en cada una puedan ver el registro de comunicación con hacienda, respuestas HTTP, acceso al XML firmado, etc...

En mi caso tengo la preocupación de que al ser un software para uso propio, van a andar con lupa, y se me haya pasado por alto alguna cosa importante... Es decir, no es lo mismo que un API desarrollada por una empresa de software, que es usada por decenas, o quizás cientos de comercios.

En fin, que me queda un mes para dejar esto funcionando, y ya me están viniendo los sudores :|

Irreo 13-09-2022 09:33:16

Cita:

Empezado por Sistel (Mensaje 548259)
Hola Irreo,
Ayer, sin ir más lejos, se estaban bloqueando los envíos que hace mi aplicación al entorno de pruebas de Gipuzkoa, con mensajes simples del servidor.
Tuve que hacerles una consulta por email para que al cabo de un tiempo me contestaran que sí, que no se habían dado cuenta de que el servicio del entorno de pruebas se les había caído.

Saludos

Sí, justo ayer sobre las 8 y pico empecé a hacer pruebas de facturas, y me llegaba un 503.

Me vino bien para simular caídas en real, estuve haciendo varias facturas, alguna rectificativa... y sobre las 10 y pico se restableció y se enviaron todas bien, con el encadenamiento correcto.

Aunque eso sí, a las 9 y pico tuve que parar el cron que procesa la cola, porque me estaba llegando un email cada 10 segundos de "servicio no disponible" :rolleyes:


La franja horaria es GMT +2. Ahora son las 04:26:16.

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