## Nueva factura TicketBAI / Verifactu

`POST`  https://{entorno}.ticketbaiws.eus/tbai/

Este método permite enviar una factura a la hacienda correspondiente y devolverá la huella, la imagen código QR en base64 y la URL de verificación de la factura que contiene el QR. El entorno de test hace los envíos al entorno de pruebas de la hacienda correspondiente. Funciona con las tres haciendas vascas y con la Agencia Tributaria AEAT (Verifactu)

**Subsanación de facturas:**  Para subsanar o modificar facturas notificadas con avisos o errores, se debe realizar un nuevo envío (con los datos corregidos) activando el parámetro **ZUZENDU o SUBSANAR a true** .
**(*) La serie, el número y el importe total de la factura no pueden ser modificados, deben ser los mismos que contenía la factura original. (en Bizkaia, para las facturas rechazadas por Batuz, la corrección se envía por el subcapítulo 1.2 del LROE y conserva la huella y el QR de la factura original; para cambiar una factura ya aceptada, emite una rectificativa)**

### Parámetros

- `fecha` (string, obligatorio): Fecha de emisión de la factura en formato dd/mm/yyyy. Ejemplo: `13/11/2021`
- `hora` (string, obligatorio): Hora de emisión de la factura en formato HH:MM:SS. Ejemplo: `12:14:00`
- `fecha_operacion` (string, opcional): Fecha de la operación en formato dd/mm/yyyy. Ejemplo: `12/11/2021`
- `nif` (string, obligatorio): NIF del cliente al que se le emite la factura. Ejemplo: `B01000012`
- `tipo_documento` (string, opcional): Tipo de documento identificativo para clientes extranjeros. Por defecto 02 para intracomunitarias ó 06 para el resto.
  Posibles valores:
  **02**  => NIF-IVA
  **03**  => Pasaporte
  **04**  => Documento oficial de identificación expedido por el país o territorio de residencia,
  **05**  => Certificado de residencia
  **06**  => Otro documento probatorio. Ejemplo: `02`
- `simplificada` (boolean, obligatorio): Es factura simplificada. Si se define como simplificada, los datos del cliente no se requerirán. Ejemplo: `true`
- `pais_cliente` (string, opcional): Código 2 letras del país del cliente si el NIF del cliente es extranjero (formato ISO-3166 Alpha-2 code) Ejemplo: `ES`
- `nombre` (string, obligatorio): Nombre social del cliente al que se le emite la factura. Ejemplo: `Empresa de ejemplo S.L.`
- `direccion` (string, obligatorio *): Dirección de facturación del cliente al que se le emite la factura
  (*) Solo obligatorio en Álava y Gipuzkoa. Ejemplo: `Calle de ejemplo 123`
- `cp` (string, obligatorio *): Código postal del cliente al que se le emite la factura
  (*) Solo obligatorio en Álava y Gipuzkoa. Ejemplo: `01013`
- `serie` (string, obligatorio): Serie de la factura. Ejemplo: `A`
- `numero` (string, obligatorio): Número de factura. Ejemplo: `2021000123`
- `rectificativa` (boolean, obligatorio): Es factura rectificativa. Ejemplo: `false`
- `clave_rectificativa` (string, opcional): Clave de la factura rectificativa (R1, R2, R3, R4, R5). Si no se define se cogerá la R1 ó la R5 si es simplificada. Ejemplo: `R1`
- `tipo_rectificativa` (string, opcional): Tipo de factura rectificativa: (S)ustitutiva (I) por diferencias. Si no se define se interpretará como**I (por diferencias).** Se ha habilitado el valor "SN" para rectificativas por sustitución sin informar el bloque ImporteRectificacionSustitutiva. Ejemplo: `I`
- `rectificadas` (object array, obligatorio si rectificativa)
  - `serie` (string, obligatorio): Serie de la factura que se está rectificando. Ejemplo: `A`
  - `numero` (string, obligatorio): Número de factura que se está rectificando. Ejemplo: `2021000100`
  - `fecha` (string, obligatorio): Fecha de la factura que se está rectificando en formato dd/mm/yyyy. Ejemplo: `13/11/2021`
  - `base` (float, opcional): Base de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS. Ejemplo: `100.00`
  - `cuota` (float, opcional): Cuota de IVA de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS. Ejemplo: `21.00`
  - `recargo` (float, opcional): Recargo de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS. Ejemplo: `5.20`
- `tipo_operacion` (string, opcional): El tipo de operación: servicios o bienes. En caso de no definirlo, se considerará la operación como servicios. Ejemplo: `servicios`
- `intracomunitaria` (boolean, opcional): Es factura intracomunitaria. Ejemplo: `false`
- `exportacion` (boolean, opcional): Es factura de exportación a fuera de la comunidad. Ejemplo: `false`
- `retencion` (float, obligatorio): Importe de retención aplicado. Ejemplo: `0.00`
- `lineas` (object array. MÁX 1000 líneas, obligatorio *): (*) Verifactu y Bizkaia no requiere el detalle de cada línea de la factura, pero sí
  las bases imponibles globales
  - `descripcion` (string, Descripción de la línea de la factura (opcional)) Ejemplo: `Producto normal`
  - `cantidad` (float, obligatorio): Número de unidades de la línea. Ejemplo: `1`
  - `importe_unitario` (float, obligatorio): Importe SIN IVA de la línea. Ejemplo: `100.00`
  - `tipo_iva` (float, obligatorio): Porcentaje de IVA aplicado para la línea. Ejemplo: `21.00`
  - `tipo_req` (float, obligatorio): Porcentaje de recargo de equivalencia aplicado a la línea. Ejemplo: `0.00`
  - `descuento` (float, opcional): Porcentaje de descuento aplicado para la línea. Ejemplo: `10.00`
  - `regimen_general` (boolean, opcional): Indica que el concepto va en régimen general cuando el resto de la factura va en régimen simplificado o de recargo de equivalencia. Sólo se tendrá en cuenta si el flag de modo_recargo_equivalencia ó modo_regimen_simplificado está a true. Ejemplo: `true`
  - `epigrafe` (integer, opcional únicamente para personas físicas en Bizkaia (LROE 140)): Indica que el concepto va en un epígrafe específico diferente al epígrafe general definido en la ficha de empresa o diferente del definido en la factura. Ejemplo: `197210`
- `total_factura` (float, obligatorio): Importe total de la factura. Ejemplo: `132.00`
- `zuzendu` (boolean, opcional): Modificación o reenvío de una factura que ha dado error previamente. En Bizkaia se aplica a facturas rechazadas por Batuz: se envía por el subcapítulo 1.2 del LROE y conserva la huella y el QR originales. Para cambiar una factura ya aceptada, emite una rectificativa. Ejemplo: `false`

### Otros parámetros opcionales

- `regimen_iva` (integer, opcional): Clave de régimen especial de IVA. Ejemplo: `17`
- `causa_exencion` (string, opcional): Código de causa de exención de IVA. Si no se define, la aplicación determinará la más indicada
  Opciones:
  **E1** : Operaciones interiores (Artículo 20 de la ley de IVA)
  **E2** : Exportaciones de bienes (Artículo 21 de la ley de IVA)
  **E3** : Exportaciones (Buques, pesca...) (Artículo 22 de la ley de IVA)
  **E4** : Zonas francas, depósitos francos y regímenes aduaneros (Artículo 23 y 24 de la ley de IVA)
  **E5** : Operationes intracomunitarias (Artículo 25 de la ley de IVA)
  **E6** : Exenta por otra causa
  **RL:**  No sujeta por reglas de localización
  **OT:**  Otras causas de no-sujeción (Artículo 7 de la ley de IVA)
  **IE:**  No sujeto por reglas de localización pero repercute impuesto extranjero, IPSI/IGIC o IVA
  **VT:**  No sujeto, ventas realizadas por cuenta de terceros (importe no computable a efectos de IVA ni de IRPF)
  **(*) Causas de exención no disponibles para Verifactu**. Ejemplo: `E6`
- `inversion_sujeto_pasivo` (boolean, opcional): Factura con inversión de sujeto pasivo. Ejemplo: `false`
- `emitida_terceros` (string, opcional): Factura emitida por terceros o por destinatario. Valores posibles: **N** (no), **T** (tercero), **D** (destinatario) Ejemplo: `N`
- `modo_recargo_equivalencia` (boolean, opcional): Operación en régimen de recargo de equivalencia. Ejemplo: `false`
- `modo_regimen_simplificado` (boolean, opcional): Operación en régimen simplificado. Ejemplo: `false`
- `epigrafe` (string, opcional): Epígrafe para la factura. Si no se informa, se enviará el epígrafe especificado en la ficha de la empresa. Este parámetro sólo es válido para personas físicas que tengan que enviar ticketbai a Bizkaia Batuz y trabajen en más de un epígrafe. Ejemplo: `165960`

**POST** `https://{entorno}.ticketbaiws.eus/tbai/`

```bash
$ curl --request POST \
     --url https://api-test.ticketbaiws.eus/tbai/ \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --header 'Token: xxx' \
     --header 'Nif: 00000014Z'
	 --data '
{
    "fecha": "13\/11\/2021",
    "hora": "12:14:00",
	"fecha_operacion": "12\/11\/2021",
    "pais_cliente": "ES",
	"nif": "B00000011",
    "nombre": "Empresa de ejemplo S.L.",
    "direccion": "Calle Falsa 123",
    "cp": "28080",
    "serie": "A",
    "numero": "2021000123",
    "simplificada": false,
    "rectificativa": false,
    "clave_rectificativa": "R1",
    "tipo_rectificativa": "I",
    "rectificadas" : [
        {
            "serie": "A"
            "numero": "20210000075",
            "fecha": "10\/11\/2021"
        }
    ],
    "tipo_operacion": "servicios",
    "intracomunitaria": false,
	"exportacion": false,
    "retencion": 0,
    "lineas": [
        {
            "descripcion": "Producto normal",
            "cantidad": 1,
            "importe_unitario": 100.00,
            "tipo_iva": 21.00,
            "tipo_req": 0
        },
        {
            "descripcion": "Producto alimentario",
            "cantidad": 1,
            "importe_unitario": 10,
            "tipo_iva": 10.00,
            "tipo_req": 0
        }
    ],
    "total_factura": 132.00,
	"zuzendu" : false
}'
```

Response for Ticketbai:

```json
HTTP/1.1 200 OK
{
	"result": "OK",
	"return": {
		"huella_tbai" : "TBAI-B01000012-131121-zG3wtCW3WlOSN-108",
		"qr" : "iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAIAAABEtEjdAAAABmJ...",
		"url" : "https://batuz.eus/QRTBAI/?id=TBAI-..."
	},
	"msg": null
}
```

Response for Verifactu:

```json
HTTP/1.1 200 OK
{
	"result": "OK",
	"return": {
		"huella" : "8FA696A615A750A9EC04A273013F05EB1B092076FFD9A66EF6",
		"qr" : "iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAIAAABEtEjdAAAABmJ...",
		"url" : "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?..."
	},
	"msg": null
}
```

Fuente: https://ticketbaiws.eus/es/ticketbai-post/
