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

Antes de llegar a la forma de pago o a las líneas, todo comprobante lleva
una cabecera con datos generales y, casi siempre, un comprador.

## Cabecera

| Campo                              | Tipo                      | Corresponde a              | Nota                                                                                                                                                                |
| ---------------------------------- | ------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`                             | entero, obligatorio       | `<TipoeCF>`                | 31, 32, 33, 34, 41, 43, 44, 45, 46 o 47.                                                                                                                            |
| `issueDate`                        | `dd-MM-aaaa`, opcional    | `<FechaEmision>`           | Por defecto, hoy. No puede ser futura ni anterior al 15-10-2018, la fecha más antigua que acepta la DGII.                                                           |
| `incomeType`                       | `"01"` a `"06"`, opcional | `<TipoIngresos>`           | Los tipos 31, 32, 44 y 45 lo exigen y 41, 43 y 47 no lo admiten. En las notas (33 y 34) depende del comprobante que modifican, ver abajo.                           |
| `pricesIncludeTax`                 | booleano, opcional        | `<IndicadorMontoGravado>`  | `true` si el precio de tus líneas ya incluye el ITBIS. Se puede sobrescribir por línea.                                                                             |
| `deferredDelivery`                 | booleano, opcional        | `<IndicadorEnvioDiferido>` | Solo si tu tenant está autorizado para envío diferido.                                                                                                              |
| `nonInvoiceableAmount`             | decimal, opcional         | `<MontoNoFacturable>`      | Reembolsos o propina voluntaria. Puede ser negativo.                                                                                                                |
| `internalNumber`                   | texto, opcional           | `<NumeroFacturaInterna>`   | Tu propio número de factura. Además de guardarse, es la clave con la que NovaFE detecta un reintento: ver [Endpoints y semántica](/emision/endpoints-y-semantica/). |
| `sellerCode`                       | texto, opcional           | `<CodigoVendedor>`         |                                                                                                                                                                     |
| `additionalInfo.issuer` / `.buyer` | texto, opcional           | `<InformacionAdicional*>`  | Texto libre que aparece en la representación impresa.                                                                                                               |

`incomeType` es un buen ejemplo de por qué la obligatoriedad depende del
tipo de comprobante: en 41, 43 y 47 la DGII directamente no admite ese
campo en el XSD, así que mandarlo ahí es un error, no un dato opcional de
más.

En las **notas de débito y de crédito** (33 y 34) el campo es opcional en el
XSD, pero la DGII lo trata según el comprobante que la nota modifica:

| La nota modifica un | `incomeType`                                                            |
| ------------------- | ----------------------------------------------------------------------- |
| 31, 32, 45 o 46     | Obligatorio. Sin él, la DGII rechaza el comprobante y consume el e-NCF. |
| 41 (compras)        | No lo mandes. Con él, la DGII lo acepta de forma condicional.           |
| NCF de papel        | No se exige.                                                            |

Si mandas `incomeType` en una nota sobre un 41, [Validar sin emitir](/emision/validar-sin-emitir/)
te avisa con `IncomeTypeOnPurchaseReference`. La DGII no lo observa cuando la
nota trae `internalNumber`. El detalle completo, tipo por tipo, está en la
[matriz de obligatoriedad](/emision/tipos-soportados/).

## Comprador (`buyer`)

```json
{
  "name": "Mi Cliente SRL",
  "rnc": "131880681",
  "email": "pagos@micliente.do"
}
```

| Campo            | Nota                                                             |
| ---------------- | ---------------------------------------------------------------- |
| `name`           | Razón social o nombre del comprador.                             |
| `rnc`            | RNC o cédula del comprador. Excluyente con `foreignId`.          |
| `foreignId`      | Identificación de un comprador extranjero. Excluyente con `rnc`. |
| `email`          | Para el envío de la representación impresa, cuando aplique.      |
| `contact`        | Persona de contacto.                                             |
| `address`        | Dirección del comprador.                                         |
| `municipality`   | Código de municipio (Tabla III).                                 |
| `province`       | Código de provincia (Tabla III).                                 |
| `additionalInfo` | Texto libre.                                                     |

<Aside type="tip" title='Si no hay comprador, es "Consumidor Final"'>
  El bloque `buyer` completo es opcional en el tipo 43 (Gastos Menores). Si lo
  omites donde el tipo lo permite, NovaFE arma el comprobante como "Consumidor
  Final". En el resto de los tipos, si el comprador es obligatorio, según lo que
  exija el tipo, un `buyer` ausente es un error.
</Aside>

## De dónde sale el bloque `<Emisor>`

Tu RNC, razón social y nombre comercial salen de tu tenant. El resto del
bloque `<Emisor>` (dirección, municipio, provincia, teléfonos, correo y
actividad económica) no viaja en este payload: sale de tu **perfil fiscal**
(`EmitterProfile`), que un `admin_tenant` configura una sola vez de forma
self-service. Sin ese perfil configurado, `POST /ecf` responde `400`.