import { Aside } from "@astrojs/starlight/components";

## Forma de pago (`payment`)

```json
{
  "condition": "credit",
  "dueDate": "15-03-2026",
  "methods": [{ "type": "check_transfer", "amount": 2360.0 }]
}
```

| Campo       | Nota                                                                                                                                           |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `condition` | Obligatorio. `cash` (1), `credit` (2) o `free` (3).                                                                                            |
| `dueDate`   | `dd-MM-aaaa`. Obligatorio solo si `condition` es `credit`.                                                                                     |
| `methods[]` | Hasta 7 formas de pago, cada una `{ type, amount }`, ambos obligatorios, con `amount` mayor que 0. Los tipos 34 y 43 no llevan formas de pago. |

Valores de `methods[].type`, con su código DGII:

| Valor            | Código |
| ---------------- | ------ |
| `cash`           | 1      |
| `check_transfer` | 2      |
| `card`           | 3      |
| `credit`         | 4      |
| `voucher`        | 5      |
| `swap`           | 6      |
| `credit_note`    | 7      |
| `other`          | 8      |

Todos los campos que aceptan un valor con nombre (`condition`,
`methods[].type`, y los que verás más abajo) también aceptan el código
numérico de la DGII en su lugar. `"credit"` y `2` son equivalentes.

## Líneas (`lines[]`)

Hasta 1000 líneas por comprobante. NovaFE asigna el número de línea
(`<NoLinea>`) en el orden en que las mandas, así que no lo incluyas tú.

```json
{
  "name": "Servicio de consultoría",
  "kind": "service",
  "quantity": 1,
  "unitOfMeasure": "43",
  "unitPrice": 2000.0,
  "itbisRate": 1
}
```

| Campo                                                             | Nota                                                                                         |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `name`                                                            | Obligatorio, hasta 80 caracteres.                                                            |
| `kind`                                                            | Obligatorio. `good` (1) o `service` (2).                                                     |
| `quantity`                                                        | Obligatorio, mayor que 0.                                                                    |
| `unitPrice`                                                       | Obligatorio, mayor o igual a 0, hasta 4 decimales.                                           |
| `itbisRate`                                                       | Obligatorio. `1` (18 %), `2` (16 %), `3` (0 %, gravado) o `4` (exento).                      |
| `unitOfMeasure`                                                   | Código de la Tabla IV de la DGII, del 1 al 62 ([ver la tabla](/emision/tablas-de-codigos/)). |
| `description`                                                     | Opcional.                                                                                    |
| `discount` / `surcharge`                                          | Opcionales. Monto final de la línea, no porcentaje.                                          |
| `priceIncludesTax`                                                | Opcional. Sobrescribe, para esta línea, el `pricesIncludeTax` de la cabecera.                |
| `codes[]`                                                         | Opcional. Códigos propios del ítem, `{ type, value }`.                                       |
| `declaredAmount`                                                  | Opcional. El monto de línea que ya calculaste tú, para el mismo chequeo de tolerancia que    |
| `declaredTotals` (ver [Principios](/emision/crear-comprobante/)). |

## Retención por línea

Solo aplica en los tipos que la exigen (obligatoria en 41, y en 47 solo
para ISR; el resto de los tipos no la admiten en absoluto).

```json
{ "agent": "withholding", "itbisWithheld": 180.0, "isrWithheld": 0 }
```

`agent` es `withholding` (1, retención) o `perception` (2, percepción). Los
montos (`itbisWithheld`, `isrWithheld`) los calculas tú: NovaFE no deriva
retenciones automáticamente.

## Impuestos adicionales por línea (ISC y otros)

Solo en los tipos 31, 32, 33, 34, 44 y 45. Cada entrada de
`additionalTaxes[]` usa un código de la Tabla I de la DGII (001 a 039):

```json
{ "code": "006", "iscEspecifico": 45.0 }
```

| Campo           | Nota                                                                    |
| --------------- | ----------------------------------------------------------------------- |
| `code`          | Código de la Tabla I ([ver la tabla](/emision/tablas-de-codigos/)).     |
| `rate`          | La tasa que la Tabla I fija para ese código. Cualquier otra se rechaza. |
| `iscEspecifico` | ISC específico (alcoholes, cigarrillos). Ver nota abajo.                |
| `iscAdvalorem`  | ISC ad valorem.                                                         |
| `otros`         | Cualquier otro impuesto adicional.                                      |

Cada entrada necesita al menos uno de los tres montos: un impuesto sin monto
se rechaza.

<Aside type="caution" title="iscEspecifico no es un impuesto aparte, sube el ITBIS de la línea">
  A diferencia de `iscAdvalorem` y `otros`, que se suman por encima del
  total, `iscEspecifico` (el ISC de alcoholes y cigarrillos, códigos 006 a
  018 y 019 a 022 de la Tabla I) **integra la base del ITBIS**: aumenta
  `<TotalITBIS>` de la línea, no `<MontoGravado>`, y se totaliza aparte en
  `<MontoImpuestoAdicional>` del comprobante. Todos estos montos los
  calculas tú: NovaFE todavía no deriva el ISC específico a partir de los
  grados de alcohol u otros datos de referencia de la línea.
</Aside>

## Moneda extranjera y datos de referencia por línea

Dos bloques opcionales, de uso poco frecuente, que pasan tal cual al XML:

- `foreignCurrency`: `{ unitPrice, discount, surcharge, lineAmount }` en la
  divisa original de la línea, si facturas en moneda extranjera (ver
  [Ajustes, referencia y moneda](/emision/ajustes-referencia-moneda/) para
  el bloque de moneda a nivel de todo el comprobante).
- `details`: datos de referencia del ítem (cantidad y unidad de referencia; si
  mandas `referenceQuantity` necesitas también `referenceUnit`; las unidades
  salen de la [Tabla IV](/emision/tablas-de-codigos/),
  grados de alcohol, fechas de fabricación y vencimiento) y, solo en los
  tipos 32, 33, 34 y 46, el bloque `mining` para productos mineros.