La API de registro de Documentos TBAI genera facturas TicketBAI con los datos proporcionados como argumentos. A partir de estas facturas, completas o simplificadas (también tiquet) se podrán generar ficheros XML que serán firmados electrónicamente y enviados a la Administración tributaria correspondiente.

1 Método POST - Registro de facturas TicketBAI

Mediante una llamada POST a la API https://mydeister.com/service/rest/{database}/tbai/v1/api/register se pueden crear documentos TBAI a partir de un JSON de entrada, y generar ficheros XML firmados electrónicamente.

La firma será de tipo avanzado XADES y los registros se preservaran con marca de tiempo.

1.1 Parámetros

El argumento que recibe el método es una cadena de caracteres en formato JSON, que incluye los campos pertenecientes a:

  • Cabecera y datos de la factura: identificación de la factura (número, serie, fecha...), detalles y desglose.
  • Sujetos de la factura: información sobre emisor y destinatario.
  • Datos de las líneas: las líneas de cada factura se proporcionan como un conjunto, junto con los otros datos de la factura.

Los datos de la Huella TBAI y la firma electrónica se generan posteriormente, cuando creamos el mensaje XML firmado que se envía a la administración. Por lo tanto, no hay que introducirlos manualmente.

https://mydeister.com/service/rest/{database}/tbai/v1/api/register

Creación de una factura TBAI y el fichero XML firmado para el envío a la administración, y encadenamiento con la última factura enviada.

Parámetros:

  • json_data: cadena JSON

    Campos de la factura a crear, incluyendo sus líneas.

Resultado:

Si es correcto, se devolverán los siguientes valores:

  • value: string

    Mensaje con valor "OK".

  • id_tbai: string

    Identificador TBAI de la factura.

  • qr_str: string

    Cadena de caracteres con el que se construye el código QR de la factura.

  • firma: string

    Valor de la firma del mensaje XML que se genera a partir de los datos de la factura.

No obstante, si el resultado es incorrecto, la API devolverá el error sucedido en la ejecución.

1.2 Campos Factura

Campo Formato Obligatorio Descripción
emis_nif varchar(24) Emisor, Nif o Id Fiscal
emis_nombre varchar(60) Emisor, nombre o razón
emis_typ char(2) Emisor, tipo de ident fiscal 02=NIF 03=pasaporte
emis_pais char(2) Emisor, jurisdicion del id. fiscal
emis_zona char(6) Emisor, zona fiscal
dest_nif char(20) Destinatario, Nif o Id Fiscal
dest_nombre varchar(60) Destinatario, nombre o razón
dest_type char(2) Destinatario, tipo de ident fiscal
dest_pais char(2) Destinatario, jurisdicion del id. fiscal
dest_zona char(6) Destinatario, zona fiscal
dest_codpos varchar(20) Destinatario, Codigo postal
dest_direcc varchar(250) Destinatario, Direccion
dest_varios char(1) Varios destinatarios
dest_expter char(1) Expedida por tercero
nifrepresenta char(9) Nif presentador
niftitular char(9) Nif titular
empcode char(4) Empresa
agetrib char(2) Agencia tributaria
libro char(2) Libro Tiquet emitido FE= Emitidas FE= Recibidas
ejercicio integer Ejercicio YEAR(emision) en ventas
periodo char(2) Periodo MONTH(emisión) en ventas
seriefactura varchar(20) Serie
numfactura varchar(20) Número
fechafactura date Fecha
horafactura datetime (hour to second) Hora minuto segundo
simplificada char(1) Simplificada o completa
sustitutiva char(1) Sustitutiva de simplificada
rectificacion char(2) Rectificacion, Codigo R1 a R5
tiporectif char(1) S o I Sustitucion o diferencia
baserec decimal(12,2) Base de factura rectificada
cuotarec decimal(12,2) Cuota de factura rectificada
recarrec decimal(12,2) Recargo factura rectificada
serrec varchar(20) Serie de factura rectificada
docrec varchar(60) Numero de factura rectificada
fecrec date Fecha de factura rectificada
fecope date Fecha de la operación (sólo si diferente de la fecha de expedición)
descoperacion varchar(250) Descripción general operaciones
importetotal decimal(12,2) Importe total factura
retencion decimal(12,2) Retención soportada
basecoste decimal(12,2) Base imponible a coste
claveoperacion char(2) ClaveRegimenIvaOpTrascendencia 1
claveoperaciona1 char(2) ClaveRegimenIvaOpTrascendencia 2
claveoperaciona2 char(2) ClaveRegimenIvaOpTrascendencia 3
desglose char(1) Desglose F=Factura O=Operacion
taiter smallint TAI 0=No 1=Si 2=Canarias 3 ...
numseriedisp char(30) Identificador del dispositivo origen

1.3 Campos de Líneas

Campo Formato Obligatorio Descripción
line_type char(1) N=normal, R=retencion, E=Recargo equivalencia
line_nature char(1) Clasificacion B Bienes/S Servicios
line_nosujeta char(2) Operación no sujeta / no por OT / no por RL
line_exenta char(2) Causa exención null o E1 a E6
line_isp char(2) Es inversión de sujeto pasivo ISP (S1 No / S2 Si)
line_detalle varchar(250) Descripción detalle de la línea de factura
line_cantidad decimal(12,2) Cantidad línea de factura
line_uniprecio decimal(12,8) Importe unitario sin IVA de la línea
line_descuento decimal(12,2)n Importe euros descuento línea de factura
line_basimp decimal(14,2) Base fiscalmente imponible
line_basimp_noex decimal(14,2) Base fiscalmente imponible, no exenta
line_imp_porcen decimal(6,3) Porcentaje aplicable impuesto
line_imp_cuoded decimal(14,2) Cuota deducible impuesto
line_imp_cuonded decimal(14,2) Cuota no deducible impuesto
line_equi_porcen decimal(6,3) Porcentaje aplicable recargo de equivalencia
line_equi_cuoded decimal(14,2) Cuota deducible recargo de equivalencia
line_importe decimal(14,2) Importe neto con IVA de la línea de factura

2 Ejemplos

Example

Llamada a la API desde la línea de comandos de la terminal.

Copy
curl -u username:password -X POST  -H "Accept: */*" -L "https://www.mydeister.com/service/rest/junit_icon/tbai/v1/api/register" -F json_data='{
        "nifrepresenta"     : "B62928809",
        "niftitular"        : "B62928809",
        "empcode"           : "GUI",
        "agetrib"           : "03",
        "libro"             : "FE",
        "descoperacion"     : "Varios",
        "ejercicio"         : 2021,
        "periodo"           : "07",
        "emis_nif"          : "B62928809",
        "emis_nombre"       : "Triathlon [GUI] S.L.",
        "emis_type"         : "02",
        "emis_pais"         : "ES",
        "emis_zona"         : "ESGU",
        "dest_nif"          : "B03930393",
        "dest_nombre"       : "ALBIR SPORT",
        "dest_type"         : "02",
        "dest_pais"         : "ES",
        "dest_zona"         : "ESCO",
        "dest_codpos"       : "03581",
        "dest_direcc"       : "Avenida del Albir 34",
        "dest_varios"       : "N",
        "dest_expter"       : "N",
        "numfactura"        : "FVNGUI21-000002",
        "fechafactura"      :  "19-07-2021",
        "horafactura"       : "02:00:00",
        "sustitutiva"       : "N",
        "fecope"            : "19-07-2021",
        "importetotal"      : 1210,
        "claveoperacion"    : "01",
        "desglose"          : "O",
        "taiter"            : 1,
        "tipocomunicacion"  : "A0",
        "erp_estado"        : "P",
        "lines"             :   [{
            "line_type"         : "N",
            "line_nature"       : "B",
            "line_isp"          : 0,
            "line_detalle"      : "Varios",
            "line_cantidad"     : 1,
            "line_uniprecio"    : 1000,
            "line_descuento"    : 0,
            "line_basimp"       : 1000,
            "line_basimp_noex"  : 0,
            "line_imp_porcen"   : 21,
            "line_imp_cuoded"   : 210,
            "line_imp_cuonded"  : 0,
            "line_equi_porcen"  : 0,
            "line_equi_cuoded"  : 0,
            "line_importe"      : 1000
        },
    {
            "line_type"         : "N",
            "line_nature"       : "B",
            "line_isp"          : 0,
            "line_detalle"      : " ",
            "line_cantidad"     : 1,
            "line_uniprecio"    : 1000,
            "line_descuento"    : 0,
            "line_basimp"       : 1000,
            "line_basimp_noex"  : 0,
            "line_imp_porcen"   : 10,
            "line_imp_cuoded"   : 100,
            "line_imp_cuonded"  : 0,
            "line_equi_porcen"  : 0,
            "line_equi_cuoded"  : 0,
            "line_importe"      : 1000
        }]
    }'
Example

Llamada a la API en JavaScript.

Copy
var json_data = {
            "nifrepresenta"     : "B62928809",
            "niftitular"        : "B62928809",
            "empcode"           : "GUI",
            "agetrib"           : "03",
            "libro"             : "FE",
            "descoperacion"     : "Varios",
            "ejercicio"         : 2021,
            "periodo"           : "07",
            "emis_nif"          : "B62928809",
            "emis_nombre"       : "Triathlon [GUI] S.L.",
            "emis_type"         : "02",
            "emis_pais"         : "ES",
            "emis_zona"         : "ESGU",
            "dest_nif"          : "B03930393",
            "dest_nombre"       : "ALBIR SPORT",
            "dest_type"         : "02",
            "dest_pais"         : "ES",
            "dest_zona"         : "ESCO",
            "dest_codpos"       : "03581",
            "dest_direcc"       : "Avenida del Albir 34",
            "dest_varios"       : "N",
            "dest_expter"       : "N",
            "numfactura"        : "FVNGUI21-000002",
            "fechafactura"      :  "19-07-2021",
            "horafactura"       : "02:00:00",
            "sustitutiva"       : "N",
            "fecope"            : "19-07-2021",
            "importetotal"      : 1210,
            "claveoperacion"    : "01",
            "desglose"          : "O",
            "taiter"            : 1,
            "tipocomunicacion"  : "A0",
            "erp_estado"        : "P",
            "lines"             :   [{
                "line_type"         : "N",
                "line_nature"       : "B",
                "line_isp"          : 0,
                "line_detalle"      : "Varios",
                "line_cantidad"     : 1,
                "line_uniprecio"    : 1000,
                "line_descuento"    : 0,
                "line_basimp"       : 1000,
                "line_basimp_noex"  : 0,
                "line_imp_porcen"   : 21,
                "line_imp_cuoded"   : 210,
                "line_imp_cuonded"  : 0,
                "line_equi_porcen"  : 0,
                "line_equi_cuoded"  : 0,
                "line_importe"      : 1000
            },
            {
                "line_type"         : "N",
                "line_nature"       : "B",
                "line_isp"          : 0,
                "line_detalle"      : " ",
                "line_cantidad"     : 1,
                "line_uniprecio"    : 1000,
                "line_descuento"    : 0,
                "line_basimp"       : 1000,
                "line_basimp_noex"  : 0,
                "line_imp_porcen"   : 10,
                "line_imp_cuoded"   : 100,
                "line_imp_cuonded"  : 0,
                "line_equi_porcen"  : 0,
                "line_equi_cuoded"  : 0,
                "line_importe"      : 1000
            }]
        }'
                    
let str = JSON.stringify(json_data)

let url = 'tbai/v1/api/register';

let result = new Ax.net.HttpClient()
    .setBasicAuthorization('username','password')
    .post("https://mydeister.com/service/rest/junit_icon/" + url)
    .header("Content-Type", "application/json")
    .body(str)
    .ensureSuccess()
    .asJsonObject()
    .getBody()
    .toMap();

return result;