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)

tejano 12-05-2021 17:46:03

Calculo CRC8
 
Buenas tardes,
Perdonad por mi ignorancia, pero sabéis de algún ejecutable al que se le mande la cadena de caracteres y devuelva el CRC8?
Mi programa de gestión es bastante viejo y no puedo definir variables tipo byte por lo que tampoco puedo desarrollar el módulo para calcular el CRC8.


Gracias de antemano.
Saludos

Edgar7 12-05-2021 18:00:49

Cita:

Empezado por sline (Mensaje 540904)
Todo parece estar en orden, me devuelve: TBAI-B09203993-200421-aZqWxK/x6JS3U-042
¿entonces es cosa de batuz?

Hola Sline,

Os paso la función de PHP para calcular el CRC que uso yo a ver si te sirve, creo que funciona correctamente:

Código:

class CrcParams {
        public $Array;
        public $Init;
        public $XorOut;
}

class Crc8 {

        public function ComputeCrc($crcParams, $data) {
                $crc = $crcParams->Init;

                foreach ($data as $d) {
                        $crc = $crcParams->Array[ord($d) ^ $crc];
                }

                $crc = $crc ^ $crcParams->XorOut;

                $result = $crc & 0xFF;

                return str_pad($result, 3, "0", STR_PAD_LEFT);
        }
}

function calcular_crc($cadena) {               

        $CRC_8_ = new CrcParams();

        $CRC_8_->Init = 0x0;
        $CRC_8_->XorOut = 0x0;
        $CRC_8_->Array = array(0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, 0xE0, 0xE7, 0xEE,
              0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF,
              0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D,
              0x0A, 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, 0xF9, 0xFE, 0xF7, 0xF0, 0xE5,
              0xE2, 0xEB, 0xEC, 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F,
              0x28, 0x3D, 0x3A, 0x33, 0x34, 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, 0xAE,
              0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3, );

        $valor = new Crc8();

        $resultado = $valor->ComputeCrc($CRC_8_, str_split(utf8_encode($cadena)));

        return $resultado;
 }

Ya nos comentas

Un saludo

Neftali [Germán.Estévez] 12-05-2021 19:08:34

Cita:

Empezado por tejano (Mensaje 540907)
Perdonad por mi ignorancia, pero sabéis de algún ejecutable al que se le mande la cadena de caracteres y devuelva el CRC8?
Mi programa de gestión es bastante viejo y no puedo definir variables tipo byte por lo que tampoco puedo desarrollar el módulo para calcular el CRC8.


¿Te sirve una DLL? ¿O debe ser un ejecutable?

sline 12-05-2021 19:29:25

Hola Edgar7,

He probado con las dos formas y ambas me devuelven el mismo crc para la misma cadena, y claro, ambas siguen dando error en batuz.

¿Podéis probar a generar una url cuya parte de la firma tenga un + o /?

como "TBAI-79732487C-120521-ME4g0D7g+iyVk-"
el crc me sale 130 y el crc de la url 081

Gracias!


Cita:

Empezado por Edgar7 (Mensaje 540908)
Hola Sline,

Un saludo


tejano 13-05-2021 09:36:14

Buenos días Netfali, yo creo que sí me serviría una DLL.

Podrías enviármela o decirme dónde puedo conseguirla?

Gracias de nuevo.

Neftali [Germán.Estévez] 13-05-2021 13:51:48

1 Archivos Adjunto(s)
Cita:

Empezado por tejano (Mensaje 540918)
yo creo que sí me serviría una DLL.
Podrías enviármela o decirme dónde puedo conseguirla?

Conseguirla, no lo se, se puede hacer.
En delphi es bastante sencillo.

Te adjunto la DLL con 2 funciones (con parámetros diferentes, para que uses el que te vaya mejor):

Código Delphi [-]
// utilizando un string
function crc8S(const AText:string):byte;
// utilizando un Puntero (AnsiChar)
function crc8P(const AText:PAnsiString):byte;


Usa el código que pubicó [keys] en este mismo foro.

Para usarlo, por ejemplo desde Delphi, basta con algo así:

Código Delphi [-]
type
  TfunctionCRC8S = function(const AText:string): byte;
  TfunctionCRC8P = function(const AText:PAnsiChar): byte;

var
  str, fName:String;
  b:byte;
  h:cardinal;
  fs:TfunctionCRC8S;
  fp:TfunctionCRC8P;
begin

  // Nombre
  fName := ExtractFilePath(Application.ExeName) + 'crc8.dll';
  // comprobamos si existe, si no existe ya no continuamos
  if not FileExists(fName) then
    raise Exception.Create('No se encuentra la DLL  en: ' + sLineBreak + fName);
  // Cargar la DLL
  h := LoadLibrary(PChar(fName));
  if (h < 32) then
    raise Exception.Create('No se ha podido cargar la DLL');

  // buscar los métodos dentro de la DLL
  fs := GetProcAddress(h, 'crc8S');
  fp := GetProcAddress(h, 'crc8P');
  // Los ha encontrado
  if Assigned(fs) and Assigned(fp) then begin

    WriteLn('Escribir cadena de entrada o vacío para salir: ');
    ReadLn(Str);
    while (Str <> string.empty) do begin

      // Probarlo con parámetro string
      b := fs(Str);
      WriteLn('Cadena de entrada: ' + str);
      writeLn('Salida (string): ' + string.Format('%.3d',[b]));
      writeLn('-------------------------------');

      // Parámetro AnsiChar
      b := fp(PAnsiChar(Str));
      WriteLn('Cadena de entrada: ' + str);
      writeLn('Salida (PAnsiChar): ' + string.Format('%.3d',[b]));
      writeLn('-------------------------------');
      writeln(' ');

      // vuelta a empezar...
      WriteLn('Escribir cadena de entrada o vacío para salir: ');
      readLn(Str);
    end;
  end;
end.


Te adjunto el proyecto de test de la DDL (incluye el compilado para que puedas usarla directamente).
Así puedes ver cómo son las llamadas.

El funcionamiento sería este; Lo he probado con las siguientes cadena que han ido saliendo en el foro:

NOTA: Si probáis las URL's anteriores, coged el link no el texto en pantalla porque vBulletin lo corta.

Y para comprobar, tal y como han dicho, la web que mejor funciona es esta:
https://toolslick.com/programming/ha...crc-calculator



Neftali [Germán.Estévez] 13-05-2021 14:16:01

Me acabo de dar cuenta que en el ejemplo, la carga de la DLL la he hecho de forma dinámica.
Es la costumbre...
Será más corto y sencillo (luego lo pongo) si la linkas estáticamente, la defines como externa y de esa forma la puedes usar directamente (sin necesidad de cargar la DLL y buscar las funciones...).

tejano 13-05-2021 15:04:18

Muchas gracias Neftali ����

Neftali [Germán.Estévez] 13-05-2021 15:25:26

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540921)
Será más corto y sencillo (luego lo pongo) si la linkas estáticamente, la defines como externa y de esa forma la puedes usar directamente (sin necesidad de cargar la DLL y buscar las funciones...).


Con una aplicación de consola como esta funciona perfectamente.


Código Delphi [-]
program testDLL;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  ShareMem,
  System.SysUtils;

// Definición
function crc8S(const AText:string):byte; stdcall; external 'crc8.dll' name 'crc8S';

var
  b:byte;
  str:String;
begin
  WriteLn('Escribir cadena de entrada o vacío para salir: ');
  ReadLn(Str);
  b := crc8S(Str);
  WriteLn('Cadena de entrada: ' + str);
  writeLn('Salida (string): ' + string.Format('%.3d',[b]));
end.

rci 13-05-2021 18:34:21

Hola, gracias por las respuestas bilbur y Neftali


Pues sí que va a ser eso de los acentos... al leer vuestras respuestas he revisado la factura que me daba ese error y he visto que en la dirección del cliente había un acento "ú".
He hecho otra factura exactamente igual pero poniendo la letra sin acento y ya no ha dado el error de la firma.


Lo que no acabo de ver es como solucionarlo porque ya estoy haciendo todo lo que proponéis (creo).
1. Al crear el fichero TicketBAI y guardarlo en disco lo hago en UTF8:


Código:

    var encoding = System.Text.Encoding.UTF8;
    FileMgr.Save(Path.Combine(filePath, fileName), xmltbai, encoding, false);

2. Al leer el fichero xml de disco para firmarlo le indico que es UTF8, después de firmar al salvar el xml firmado a disco también:


Código:

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Encoding = new UTF8Encoding();
    using (var writer = XmlWriter.Create(fileName, settings))
    {
          this.Document.Save(writer);
      }

3. Al leer el fichero xml firmado de disco para enviarlo también le indico UTF8:




Código:

    using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8))
    {
          string content = sr.ReadToEnd();
          return content;
    }

4. Finalmente para enviar también indico UTF8



Código:

  var encoding = Encoding.UTF8;
    byte[] contentBytes = encoding.GetBytes(content);

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.AllowAutoRedirect = true;
    httpWebRequest.ClientCertificates.Add(certificate);
    httpWebRequest.Method = "POST";
    httpWebRequest.ContentType = "application/xml";
    httpWebRequest.ContentLength = contentBytes.Length;

    var postStream = httpWebRequest.GetRequestStream();
    postStream.Write(contentBytes, 0, contentBytes.Length);
    postStream.Flush();
    postStream.Close();

De todas formas si hay un acento en el XML antes de firmar, da el error de verificación de la firma.

He enviado correos con los dos ficheros y la dos respuestas al correo de consultas técnicas de Gipuzkoa pero... deben estar colapsados porque hace mucho que no me contestan, creo que llevan más de 2 semanas de retraso en las respuestas T_T


También he escrito a Araba preguntando por su entorno de pruebas y me han dicho que lo están desarrollando y que tiene previsto que para septiembre estará operativo :'(


Bueno voy a seguir investigando.


Ya sé que el foro es de Delphi y mi código es c# .net pero bueno, si alguien me puede dar otro consejo lo agradeceré.


Muchas gracias!







Cita:

Empezado por bilbur (Mensaje 540895)
En las direcciones que no puedes escribir es posible que tengas acentos en "Política de firma..", en direcciones URI
Elimina los acentos en el xml previo a la firma y también en el firmador que utilices

Espero que sea eso


Neftali [Germán.Estévez] 14-05-2021 12:49:39

Cita:

Empezado por rci (Mensaje 540927)
Lo que no acabo de ver es como solucionarlo porque ya estoy haciendo todo lo que proponéis (creo).
1. Al crear el fichero TicketBAI y guardarlo en disco lo hago en UTF8


Revisa cada uno de los pasos con el contenido hexadecimal del fichero o del stream (revisando el character con acento). Desde la generación del XML hasta el envío, a ver si en algún momento encuentras que la codificación de ese character cambia.

Si el envío lo estás haciendo con UTF8, revisa que la firma (el componente o lo que usas) no la esté haciendo como ANSI internamente, eso expñlicaría que lo que has firmado no "cuadra" con lo que estás enviando.

rci 14-05-2021 16:44:33

contentType para envio httpWebRequest c#
 
Buenas tardes y muchas gracias a todos por la ayuda.


Me han contestado de la agencia foral de Gipuzkoa y me han confirmado que el fichero firmado es correcto (se lo envié adjunto) y que es distinto de lo que recibieron ellos (me lo han enviado). La diferencia está en las letras con acentos. Por lo tanto el problema está en el envío.

Para solucionarlo he modificado la sentencia del content type, antes solo tenía el valor "application/xml" y para que funcione correctamente debo indicar que es utf8 también:

Código:

  ...
 
  httpWebRequest.ContentType = "application/xml; charset=utf-8";

  ...

Muchas gracias, buen fin de semana.




Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540936)
Revisa cada uno de los pasos con el contenido hexadecimal del fichero o del stream (revisando el character con acento). Desde la generación del XML hasta el envío, a ver si en algún momento encuentras que la codificación de ese character cambia.

Si el envío lo estás haciendo con UTF8, revisa que la firma (el componente o lo que usas) no la esté haciendo como ANSI internamente, eso expñlicaría que lo que has firmado no "cuadra" con lo que estás enviando.


bilbur 14-05-2021 21:11:22

Envios a BATUZ
 
Batuz ha activado la versión 2 de alta emitidas 240
Nueva versión de xmlns es V1_0_2

Código:

$xml  = "<?xml version='1.0' encoding='UTF-8'?>";
    $xml .= "<lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion
    xmlns:lrpjfecsgap='https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd'>";
    $xml .= "<Cabecera>

La versión V1_0_1 da error

Un saludo

joselugrk 16-05-2021 18:54:34

CRC8 Error Servidor Batuz
 
Cita:

Empezado por sline (Mensaje 540910)
Hola Edgar7,

He probado con las dos formas y ambas me devuelven el mismo crc para la misma cadena, y claro, ambas siguen dando error en batuz.

¿Podéis probar a generar una url cuya parte de la firma tenga un + o /?

como "TBAI-79732487C-120521-ME4g0D7g+iyVk-"
el crc me sale 130 y el crc de la url 081

Gracias!

Hola,

A mi me está pasando algo parecido pero no con todas las URLs, solo con algunas. Al probarla en Batuz me da el error "Los datos de la URL son incorrectos (ERR_QR_002)".

Pongo la URL
.../QRTBAI/?id=TBAI-30556773P-140521-oH/I9+EyTWWQ7-062&s=VT1&nf=1657&i=78.00&cr=196

Lo he probado en estos dos validadores y me coincide con lo que me devuelve mi rutina. No me deja poner urls el foro
...sunshine2k.de/coding/javascript/crc/crc_js.html ' Me devuelve un valor en Hexadecimal
...rapidtables.com/convert/number/hex-to-decimal.html ' Lo convierto a Decimal

¿Qué puede pasar?

Casimiro Noteví 16-05-2021 19:24:09

Cita:

Empezado por joselugrk (Mensaje 540950)
No me deja poner urls el foro

Es un control anti-spam, en cuanto lleves varios mensajes (10) se deshabilitará.
De momento puedes poner las url "recortándola", por ejemplo: ttp://losquesea.com (he quitado la 'h' inicial)

sline 17-05-2021 11:05:28

Hola joselugrk



A mi me pasa con todas las url que contienen el caracter + pero con el error "Los datos de la URL son incorrectos (ERR_QR_003)"




Cita:

Empezado por joselugrk (Mensaje 540950)
Hola,

A mi me está pasando algo parecido pero no con todas las URLs, solo con algunas. Al probarla en Batuz me da el error "Los datos de la URL son incorrectos (ERR_QR_002)".

Pongo la URL
.../QRTBAI/?id=TBAI-30556773P-140521-oH/I9+EyTWWQ7-062&s=VT1&nf=1657&i=78.00&cr=196

Lo he probado en estos dos validadores y me coincide con lo que me devuelve mi rutina. No me deja poner urls el foro
...sunshine2k.de/coding/javascript/crc/crc_js.html ' Me devuelve un valor en Hexadecimal
...rapidtables.com/convert/number/hex-to-decimal.html ' Lo convierto a Decimal

¿Qué puede pasar?


idaril 17-05-2021 11:15:58

Encadenado de facturas
 
Buenos días, primer mensaje en el foro!
Todavía estoy en fase de análisis y tengo demasiada información en la cabeza (he intentado leerme todo el hilo pero puede que se me haya pasado...).
¿Podría alguien confirmarme si el encadenamiento de facturas es de todas las facturas en general o por serie? Nosotros trabajamos en entorno restaurante y es muy común que los restaurantes tengan varias series definidas (por ejemplo pedidos en sala, para llevar, delivery, ...) y no me queda claro si cuando dice serie + número factura anterior es porque deben encadenarse todas las series juntas o va por serie (el software está certificado para Portugal y Francia y en ambos casos el encadenamiento es siempre dentro de la misma serie, nunca se mezclan facturas de diferente serie).
Muchisimas gracias!

Neftali [Germán.Estévez] 17-05-2021 11:36:39

Cita:

Empezado por idaril (Mensaje 540955)
Buenos días, primer mensaje en el foro!
Todavía estoy en fase de análisis y tengo demasiada información en la cabeza (he intentado leerme todo el hilo pero puede que se me haya pasado...).


Bienvenido a este foro.
Yo me lo volvería a leer... ;););)



Cita:

Empezado por idaril (Mensaje 540955)
¿Podría alguien confirmarme si el encadenamiento de facturas es de todas las facturas en general o por serie? Nosotros trabajamos en entorno restaurante y es muy común que los restaurantes tengan varias series definidas (por ejemplo pedidos en sala, para llevar, delivery, ...) y no me queda claro si cuando dice serie + número factura anterior es porque deben encadenarse todas las series juntas o va por serie (el software está certificado para Portugal y Francia y en ambos casos el encadenamiento es siempre dentro de la misma serie, nunca se mezclan facturas de diferente serie).


El encadenamiento en principio NO VA POR SERIE.
Es decir, debes encadenar con la última factura, sea de la serie que sea.




Si buscas el documento de "Preguntas y respuestas" que hay en el hilo, (al principio estará el link), esta en concreto es la 93. Revísala con detalle que es más extensa.

idaril 17-05-2021 12:50:55

Si ya digo yo que tengo demasiada información en la cabeza! Supongo que me ofusqué al tener tan claro que en Portugal y Francia iba por serie...

Muchísimas gracias :-)

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540957)
Bienvenido a este foro.
Yo me lo volvería a leer... ;););)


El encadenamiento en principio NO VA POR SERIE.
Es decir, debes encadenar con la última factura, sea de la serie que sea.


Si buscas el documento de "Preguntas y respuestas" que hay en el hilo, (al principio estará el link), esta en concreto es la 93. Revísala con detalle que es más extensa.


tejano 17-05-2021 14:54:43

A mi me respondieron esto de Batuz, dónde indica que si existen diferentes centros de facturación y cada uno tiene su serie, el encadenamiento si podría ir por serie.

Kaixo,

El sistema TicketBAI implica que cada factura debe identificar la factura anterior (serie, número, fecha y 100 primeros caracteres de la firma). Aunque en el esquema del fichero TicketBAI estos campos no son obligatorios, esta circunstancia se debe a que existen varias situaciones en los que este requisito no es exigible (p. ej. la primera factura, o en caso de rotura del dispositivo).

El cumplimiento del requisito de encadenamiento depende de la forma de funcionamiento del sistema de facturación:
- Si un mismo dispositivo emite facturas de diferentes series, el requisito de encadenamiento debe identificar la factura anterior expedida, con independencia de la serie (por ejemplo, a una factura de una serie ordinaria le puede preceder una factura rectificativa de otra serie).
- Igualmente, si el sistema de facturación es un sistema centralizado que genera las series y los números de facturación, con independencia del dispositivo que se esté utilizando, el encadenamiento se refiere a la última factura expedida por el sistema.
En concreto, “Haz tu factura” funcionaría como un sistema de facturación “centralizado”, por lo que encadena las facturas independientemente de la serie.
- No obstante, si existen diferentes dispositivos o centros de facturación, los cuales sólo expiden facturas dentro de una serie específica para cada dispositivo o centro, el encadenamiento se produce dentro de cada serie.
Este último parece ser el caso al que se refiere la pregunta planteada.

Neftali [Germán.Estévez] 17-05-2021 17:21:20

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540957)
Si buscas el documento de "Preguntas y respuestas" que hay en el hilo, (al principio estará el link), esta en concreto es la 93. Revísala con detalle que es más extensa.

Cita:

Empezado por tejano (Mensaje 540961)
A mi me respondieron esto de Batuz, dónde indica que si existen diferentes centros de facturación y cada uno tiene su serie, el encadenamiento si podría ir por serie.


Justo por eso le he indicado que leyera la pregunta 93, porque n realidad como he dicho es más extensa.
Y en la segunda parte hacve referencia a lo que tú comentas.


joselugrk 17-05-2021 18:10:13

Cita:

Empezado por sline (Mensaje 540954)
Hola joselugrk



A mi me pasa con todas las url que contienen el caracter + pero con el error "Los datos de la URL son incorrectos (ERR_QR_003)"

Correcto, me confundí y puse ERR_QR_002. Ayer les envíe un correo a los de Batuz a ver que me responden.

joselugrk 17-05-2021 18:18:36

Nombre Fichero XML
 
Hola,

¿Qué nombre se debe poner a los ficheros XML de Alta y de Anulación? ¿El identificativo TBAI?

Yo cuando creo los ficheros XML les pongo el IdTBAI. ¿Es correcto?

Saludos,
Joselu

joselugrk 17-05-2021 20:22:46

Error / y + en QR URL
 
Cita:

Empezado por joselugrk (Mensaje 540963)
Correcto, me confundí y puse ERR_QR_002. Ayer les envíe un correo a los de Batuz a ver que me responden.

Hola, me acaban de contestar desde Batuz.
-------------------------------------------------------------------------------------------------
Kaixo,
El código QR debe contener una URL válida para acceder a la aplicación web de comprobación de facturas o justificantes expedidos con software garante con los datos de la factura o justificante incluidos como parámetros. Si la URL o sus parámetros contienen caracteres no válidos, deberán ser codificados (URL encoding) de forma correcta siguiendo los usos normales de las arquitecturas web, como por ejemplo reemplazar el símbolo “+ ” por “%2B” o el símbolo “/” por “%2F”.
Siguiendo uno de sus ejemplos, se debería calcular el CRC de la URL sobre la URL final teniendo en cuenta ese cambio de ‘/’ por ‘%2F’ y ‘+’ por ‘%2B’, en cambio, no se debe recalcular el CRC del identificativo TBAI, es decir, ese se seguiría calculando con los símbolos ‘/’ y ‘+’.
En la factura, fuera del QR, donde está impreso el identificativo TBAI para que el destinatario de la factura pueda leerlo, tiene que seguir apareciendo con los símbolos ‘/’ y ‘+’sin hacer el encoding.
Le ponemos como quedaría su URL con estos cambios
Original:
https://batuz.eus/QRTBAI/?id=TBAI-30...i=78.00&cr=196
Modificado:
https://batuz.eus/QRTBAI/?id=TBAI-30...i=78.00&cr=074

Agur bat.

-------------------------------------------------------------------------------------------------
Lo probaré,
Saludos

sline 18-05-2021 08:13:48

Hola joselugrk,

He realizado a lo que comentan y el resultado de la url por fin me sale correcta:
https_//batuz.eus/QRTBAI/?id=TBAI-79732487C-120521-ME4g0D7g%2BiyVk-130&s=VT1&nf=1657&i=78.00&cr=108

He probado 2 formas y ambas funcionan.
1.- reemplazando los caracteres '+' por '%2B' y '/' por '%2F'
Código PHP:

$tbaicode 'TBAI-79732487C-120521-ME4g0D7g+iyVk-130';
$tbaicode str_replace(['+','/'],['%2B''%2F'],$tbaicode); 

2.- codificar el código tbai entero
Código PHP:

$tbaicode 'TBAI-79732487C-120521-ME4g0D7g+iyVk-130';
$tbaicode rawurlencode($tbaicode); 

Saludos.

Cita:

Empezado por joselugrk (Mensaje 540965)
Hola, me acaban de contestar desde Batuz.
-------------------------------------------------------------------------------------------------
Kaixo,
El código QR debe contener una URL válida para acceder a la aplicación web de comprobación de facturas o justificantes expedidos con software garante con los datos de la factura o justificante incluidos como parámetros. Si la URL o sus parámetros contienen caracteres no válidos, deberán ser codificados (URL encoding) de forma correcta siguiendo los usos normales de las arquitecturas web, como por ejemplo reemplazar el símbolo “+ ” por “%2B” o el símbolo “/” por “%2F”.
Siguiendo uno de sus ejemplos, se debería calcular el CRC de la URL sobre la URL final teniendo en cuenta ese cambio de ‘/’ por ‘%2F’ y ‘+’ por ‘%2B’, en cambio, no se debe recalcular el CRC del identificativo TBAI, es decir, ese se seguiría calculando con los símbolos ‘/’ y ‘+’.
En la factura, fuera del QR, donde está impreso el identificativo TBAI para que el destinatario de la factura pueda leerlo, tiene que seguir apareciendo con los símbolos ‘/’ y ‘+’sin hacer el encoding.
Le ponemos como quedaría su URL con estos cambios
Original:
https_//batuz.eus/QRTBAI/?id=TBAI-30556773P-140521-oH/I9+EyTWWQ7-062&s=VT1&nf=1657&i=78.00&cr=196
Modificado:
https_//batuz.eus/QRTBAI/?id=TBAI-30556773P-140521-oH%2FI9%2BEyTWWQ7-062&s=VT1&nf=1657&i=78.00&cr=074

Agur bat.

-------------------------------------------------------------------------------------------------
Lo probaré,
Saludos


keys 18-05-2021 14:53:38

Hola a todos he hecho una pregunta a Gipuzkoa sobre una factura erronea y me han contestado esto.

Cita:

Para la resolución de los errores detectados en facturas recibidas se debe actuar según el tipo de error. Cuando el error está relacionado con el contenido del XML nos podemos encontrar con dos casuísticas:
• El dato a cambiar suponer la emisión de una factura rectificativa (consulte la normativa de facturación para ver cuáles son los campos que obligan a rectificativa). En este caso habrá de emitir una nueva factura rectificando la inicial y enviarla al servicio de ALTA de TicketBAI
• El dato a subsanar no implica factura rectificativa. En este caso deberá recurrir al servicio Rest de MODIFICAR. Este servicio aún no está en marcha, en breve se publicara la normativa que lo regula.
Por lo que confirman que como dijo algún compañero antes que va a haber un servicio para modificar facturas ya enviadas.

rci 18-05-2021 15:55:11

Hola, cuando dicen "facturas recibidas" supongo que se refieren a factruas de venta, que han recibido ellos, no?

Lo digo porque en SII las "facturas recibidas" son facturas de compra però en TicketBAI solo se envian las factruas de venta.

Es así o me estoy liando? :(


A ver cuando publican el nuevo servicio SUBSANAR



Gracias, Saludos!



Cita:

Empezado por keys (Mensaje 540978)
Hola a todos he hecho una pregunta a Gipuzkoa sobre una factura erronea y me han contestado esto.



Por lo que confirman que como dijo algún compañero antes que va a haber un servicio para modificar facturas ya enviadas.


skymota 18-05-2021 18:13:56

Cita:

Empezado por aar1 (Mensaje 540601)
Buenos días.

Estoy utilizando ChilKat para firmar el XML del TicketBai y como certificado digital uno de los certificados de PRODUCCIÓN de IZENPE. Al enviar el fichero XML al entorno de pruebas de Gipuzkoa el fichero es aceptado pero me devuelve el código 008 El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- SignedInfo failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)

No sé si a alguno de vosotros os ha pasado lo mismo y si esto se debe al certificado digital que estoy utilizando.

Un saludo.

Buenas! una vez firmado el fichero, para obtener el SignatureValue para el encadenamiento has utilizado algún metodo de las ChilKat? o directamente cargando el fichero con un xml con algo tipo getAttribute?
Gracias!

keys 19-05-2021 07:53:31

Cita:

Empezado por rci (Mensaje 540981)
Hola, cuando dicen "facturas recibidas" supongo que se refieren a factruas de venta, que han recibido ellos, no?

Lo digo porque en SII las "facturas recibidas" son facturas de compra però en TicketBAI solo se envian las factruas de venta.

Es así o me estoy liando? :(


A ver cuando publican el nuevo servicio SUBSANAR



Gracias, Saludos!

Logicamente son facturas emitidas. Se refieren a facturas recibidas por ellos en el sistema. TicketBAi son sólo para facturas emitidas.

Un Saludo.

Galaxian 19-05-2021 09:24:47

Buenos días,

Estoy imprimiendo el código QR mediante los comandos ESC/POS GS ( k , pero no consigo centrarlo.

¿Alguna idea?

keys 19-05-2021 13:50:36

Hola a todos.

Alava empieza a moverse . https://web.araba.eus/es/hacienda/ticketbai

Neftali [Germán.Estévez] 19-05-2021 14:01:32

Cita:

Empezado por keys (Mensaje 540991)

A mi hace un par de semanas cuando vi esta web, vía email, me contestaron esto:

Durante 2021 está previsto tener a disposición de los usuarios y empresas de software un entorno de pruebas que, de momento se encuentra en fase de desarrollo.
Esperamos tenerlo operativo a partir de septiembre.

keys 19-05-2021 14:03:00

Pues si, nos van a dejar tiempo :D

rci 19-05-2021 15:19:10

yo lo veo igual
 
Hola Keys, qué movimiento ves?

He entrado en la web está igual no?:p


Gracias.

Saludos



Cita:

Empezado por keys (Mensaje 540991)
Hola a todos.

Alava empieza a moverse . https://web.araba.eus/es/hacienda/ticketbai


tejano 19-05-2021 17:02:18

Hash firma
 
Buenas tardes sabéis decirme que Hash hay que poner en la firma del XML?
Yo creía que era "6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=", pero acabo de ver en la documentación este otro "Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es=".

Cual estáis poniendo vosotros?

Gracias

tejano 19-05-2021 17:19:05

Hoy estoy preguntón ��, alguien se ha dado de alta como software garante.

Tenéis o podéis facilitar como debería ser la memoria a presentar para darse de alta como software garante, llevo mas de 25 años de programador y nunca me han solicitado nada parecido a lo que estamos haciendo hasta el momento.

Gracias de antemano

sline 19-05-2021 17:20:49

Para BIZ el digest es "Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es="
Para GIP el digest es "6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0="



Cita:

Empezado por tejano (Mensaje 540995)
Buenas tardes sabéis decirme que Hash hay que poner en la firma del XML?
Yo creía que era "6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=", pero acabo de ver en la documentación este otro "Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es=".

Cual estáis poniendo vosotros?

Gracias


tejano 19-05-2021 17:48:39

Gracias, tienes razón. Había hecho alguna prueba con Gipuzkoa y me he liado.
Graciassssss!!!!!

joselugrk 19-05-2021 18:29:33

Software Garante
 
Cita:

Empezado por tejano (Mensaje 540996)
Hoy estoy preguntón ��, alguien se ha dado de alta como software garante.

Tenéis o podéis facilitar como debería ser la memoria a presentar para darse de alta como software garante, llevo mas de 25 años de programador y nunca me han solicitado nada parecido a lo que estamos haciendo hasta el momento.

Gracias de antemano

Hola, no sé si te servirá pero en la pregunta 163 te indica que debes indicar.
-------------------------------------------------------------------------------------------
163.- ¿Qué contenidos se tienen que especificar en la memoria que se debe adjuntar junto
con la solicitud de alta en el Registro de Software Garante TicketBAI de la Diputación Foral de Bizkaia?

La memoria debe contener las especificaciones y estructura señaladas en el apartado 5
del artículo 11 de la Orden Foral 1482/2020, por la que se regulan las especificaciones
normativas y técnicas del software garante y la declaración de alta en el registro de
software garante.
En concreto, los extremos que se deben describir en la memoria son los siguientes:
1) Tipo de software: aplicación de escritorio y/o aplicación con arquitectura
distribuida.

2) Proceso de encadenamiento de los ficheros de alta de operación con
software garante.
El sistema TicketBAI implica que cada factura debe identificar la factura anterior.
El cumplimiento del requisito de encadenamiento depende de la forma de
funcionamiento del sistema de facturación, que es lo que hay que indicar en
este punto de la memoria descriptiva. Tiene más información sobre el
encadenamiento en la pregunta frecuente 93.

3) Proceso de firma de los ficheros de alta y de anulación de operación con
software garante, indicando en particular, los tipos de certificados electrónicos
que pueden ser utilizados por el software garante para el proceso de firma.
Además de los certificados se debe indicar el proceso de firma, describiendo su
flujo/arquitectura (cliente, servidor) y los algoritmos, librerías criptográficas o
servicios externos utilizados.

4) Tipos de facturas o justificantes que genera el software garante, indicando,
en particular, si el software genera:
Facturas simplificadas y/o completas.
Facturas en soporte papel y/o electrónicas.

5) Ubicación del código identificativo y del código QR de acuerdo con lo
dispuesto en el artículo 6 de la Orden Foral 1482/2020.

6) Identificación de la opción del software que permita la verificación
presencial en una única pantalla de la información a que se refiere el artículo 9
de la Orden Foral 1482/2020 (funcionalidad de verificación presencial de los
softwares garantes).

7) Sistema de almacenamiento de los ficheros de alta y de anulación de
operación con software garante.
En este apartado se requiere describir dónde se almacenan los ficheros
TicketBAI generados por la aplicación, ya que el contribuyente usuario del
software debe conservarlos durante el plazo indicado (en general el plazo de
prescripción y o caducidad).
La finalidad de solicitar esta información es poder identificar el espacio en el
cual, según la instalación de la aplicación, se almacenan estos ficheros.
-------------------------------------------------------------------------------------------

keys 19-05-2021 18:31:26

Cita:

Empezado por rci (Mensaje 540994)
Hola Keys, qué movimiento ves?

He entrado en la web está igual no?:p


Gracias.

Saludos

La novedad es que hasta ahora alava no se había pronunciado. No había ninguna información, o por lo menos yo no la había visto en los últimos días. Por cierto parece que van a seguir el camino de Gipuzkoa.


La franja horaria es GMT +2. Ahora son las 14:22:26.

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