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

## Ajustes globales (`globalAdjustments[]`)

Descuentos y recargos que afectan al comprobante completo (la Sección D del
formato de la DGII), no a una línea puntual. Hasta 20 por comprobante.

```json
{ "line": 1, "kind": "discount", "affectsItbisRate": 1, "amount": 100.0 }
```

| Campo              | Nota                                                         |
| ------------------ | ------------------------------------------------------------ |
| `line`             | Número de línea del ajuste dentro de la Sección D.           |
| `kind`             | `discount` (D) o `surcharge` (R).                            |
| `affectsItbisRate` | `1` a `4`: a qué grupo de tasa afecta el ajuste (ver abajo). |
| `amount`           | Monto del ajuste.                                            |
| `norm1007`         | Ver la nota de la Norma 10-07 más abajo.                     |
| `description`      | Opcional.                                                    |
| `percentage`       | Opcional, informativo.                                       |

<Aside type="note" title="El motor reconcilia el ajuste, tú no tienes que cuadrar nada">
  Cada ajuste se aplica al grupo de tasa que indica `affectsItbisRate` (1,
  2 y 3 son los grupos gravados; 4 es el exento), y si ese grupo paga
  ITBIS, NovaFE recalcula el impuesto de ese grupo sobre la base ya
  ajustada. `<Totales>` cuadra por construcción: no hace falta que vengas
  tú mismo con los montos ya reconciliados. Si un descuento deja un grupo
  en negativo, NovaFE lo rechaza en vez de aceptar un total inconsistente.
</Aside>

**Norma 10-07** (`norm1007: true`) es un caso aparte: solo existe para
descuentos a la tasa 1 (18 %), solo en los tipos 31, 32, 33, 34 y 45 (no
existe en 43 ni 47), y a diferencia de un descuento normal **no** baja la
base gravada ni el ITBIS. Solo reduce el `<ValorPagar>` final. La
distribución de un ajuste global a nivel de línea individual todavía no
existe: el ajuste se reconcilia contra los totales agregados del
comprobante, no línea por línea.

## Referencia a otro comprobante (`reference`)

Obligatoria en los tipos 33 (Nota de Débito) y 34 (Nota de Crédito): son el
mecanismo para corregir o anular un comprobante ya emitido.

```json
{
  "modifiedNcf": "E310000000010",
  "modifiedNcfDate": "10-01-2026",
  "modificationCode": "corrects_amounts"
}
```

| Campo              | Nota                                                                                                                       |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `modifiedNcf`      | El e-NCF del comprobante que estás corrigiendo o anulando: 13 caracteres, o un NCF de papel (una letra y 10 o 18 dígitos). |
| `modifiedNcfDate`  | Su fecha de emisión, `dd-MM-aaaa`.                                                                                         |
| `modificationCode` | Obligatorio. Qué tipo de corrección es (ver tabla).                                                                        |
| `otherIssuerRnc`   | Solo si el comprobante original lo emitió otro contribuyente.                                                              |

Valores de `modificationCode`:

| Valor                     | Código | Significa                                                              |
| ------------------------- | ------ | ---------------------------------------------------------------------- |
| `voids`                   | 1      | Anula el comprobante original. Solo Nota de Crédito (34).              |
| `corrects_text`           | 2      | Corrige un dato textual. Solo Nota de Crédito (34), con total en cero. |
| `corrects_amounts`        | 3      | Corrige montos. Notas de Crédito (34) y de Débito (33).                |
| `contingency_replacement` | 4      | Reemplaza un comprobante emitido en contingencia.                      |
| `rfce_reference`          | 5      | Solo para el tipo 31, referencia a un RFCE.                            |

<Aside type="caution" title="Una Nota de Crédito no puede superar el original">
  Si el comprobante que referencias lo emitiste tú mismo con NovaFE, una Nota de
  Crédito no puede superar su `MontoTotal`: NovaFE la rechaza con
  `Ecf.CreditNoteExceedsOriginal` si lo intentas. Esta validación no corre si el
  original es un NCF en papel o de otro sistema, porque ahí NovaFE no tiene
  contra qué comparar.
</Aside>

## Moneda extranjera (`foreignCurrency`)

Si facturas en una moneda distinta al peso dominicano, NovaFE **no
convierte nada por ti**: le mandas los montos ya convertidos y solo hace un
chequeo de consistencia contra el tipo de cambio.

```json
{
  "currency": "USD",
  "exchangeRate": 58.5,
  "totals": {
    "montoGravadoTotal": 100.0,
    "totalItbis": 18.0,
    "montoTotal": 118.0
  }
}
```

| Campo          | Nota                                                                    |
| -------------- | ----------------------------------------------------------------------- |
| `currency`     | Código de moneda de la Tabla II (ver lista abajo).                      |
| `exchangeRate` | Al menos 0.0001: se emite con 4 decimales, y uno menor llegaría como 0. |
| `totals`       | Los mismos totales del comprobante, pero en la divisa original.         |

NovaFE guarda y calcula todo en pesos dominicanos: el bloque
`foreignCurrency` es un cross-check de que `montoTotal` (en pesos) dividido
entre `exchangeRate` da aproximadamente el `montoTotal` que declaraste en
divisa. Esa comparación es una tolerancia, igual que `declaredTotals`: no
rechaza el comprobante, pero [Validar sin emitir](/emision/validar-sin-emitir/)
te avisa si la conversión queda lejos (`ForeignCurrencyConversionMismatch`).

Lo que sí se exige es que `totals` traiga cada monto que corresponde a tus
líneas, porque la DGII los pide y rechaza el comprobante sin ellos:

- `montoTotal`, siempre.
- Si hay líneas gravadas: `montoGravadoTotal`, y el bucket de cada tasa que uses
  (`montoGravadoI1` para el 18 %, `montoGravadoI2` para el 16 % o
  `montoGravadoI3` para el 0 %).
- Si hay ITBIS: `totalItbis`, y `totalItbis1` o `totalItbis2` según la tasa.
- Si hay líneas exentas: `montoExento`.

Monedas admitidas:

| Código | Moneda | Código | Moneda |
| ------ | ------ | ------ | ------ |
| 1      | BRL    | 10     | NOK    |
| 2      | CAD    | 11     | SCP    |
| 3      | CHF    | 12     | SEK    |
| 4      | CHY    | 13     | USD    |
| 5      | XDR    | 14     | VEF    |
| 6      | DKK    | 15     | HTG    |
| 7      | EUR    | 16     | MXN    |
| 8      | GBP    | 17     | COP    |
| 9      | JPY    |        |        |