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

Estos tres bloques son passthrough: NovaFE no los calcula ni los valida
contra ningún total, solo los traslada al XML tal como los mandas. Úsalos
solo si tu operación los necesita; la mayoría de los comprobantes no los
llevan.

## Embarque (`shipping`)

No aplica a los tipos 41, 43 y 47.

| Campo                                                    | Nota                  |
| -------------------------------------------------------- | --------------------- |
| `shipmentDate`, `shipmentNumber`, `referenceNumber`      | Datos del envío.      |
| `containerNumber`                                        | Número de contenedor. |
| `grossWeight` / `netWeight` (con su unidad)              | Peso bruto y neto.    |
| `packageCount` (con su unidad), `volume` (con su unidad) | Bultos y volumen.     |

### Datos de exportación (`shipping.export`)

Solo para el tipo 46 (Exportaciones): puertos de carga y descarga,
condición de entrega, régimen aduanero, y los montos FOB, seguro, flete,
otros cargos y el CIF resultante.

## Transporte (`transport`)

No aplica a los tipos 41 y 43. En el tipo 47 solo se admite
`destinationCountry`; el resto de los campos son para los demás tipos que sí
admiten transporte.

| Campo                                                       | Nota                                           |
| ----------------------------------------------------------- | ---------------------------------------------- |
| `via`                                                       | `1` (terrestre), `2` (marítimo) o `3` (aéreo). |
| `driver`, `vehicleId`, `plate`, `route`, `zone`             | Datos del transporte terrestre propio.         |
| `carrierRnc`, `carrierName`, `voyageNumber`                 | Si el transporte lo hace un tercero.           |
| `originCountry`, `destinationCountry`, `destinationAddress` | Origen y destino.                              |
| `transportDocument`, `deliveryNote`                         | Referencias documentales.                      |

<Aside type="note" title="El tipo 46 es el que más usa este bloque">
  El tipo 46 (Exportaciones) es el único que normalmente combina `via`, país de
  origen y destino, y los datos del transportista, junto con el bloque
  `shipping.export` de arriba.
</Aside>

## Subtotales y paginación (`subtotals[]`, `pagination[]`)

Para comprobantes largos, la representación impresa se divide en páginas o
en subtotales por sección. Estos dos arreglos son la forma de indicarle a
NovaFE cómo repartir las líneas: cada entrada trae, además del rango de
líneas que cubre, el mismo tipo de desglose de montos por tasa que ves en
la respuesta del comprobante, pero calculado solo para ese subtotal o esa
página. Ningún total del comprobante depende de esto: es información para
la representación impresa, no para el cálculo fiscal.

### Qué exige cada página de `pagination[]`

Aunque ningún total depende de la paginación, la DGII compara cada página con
el comprobante y la rechaza si está incompleta. Por eso NovaFE valida antes de
emitir:

- Hay al menos 2 páginas, o ninguna.
- `number` es consecutivo desde 1, y `lineFrom` no es mayor que `lineTo`.
- Cada página trae `amount` y los subtotales de cada bucket que tiene el
  comprobante (`montoGravadoTotal`, el bucket de su tasa, `totalItbis`, el ITBIS
  de esa tasa, o `montoExento`), todos mayores que cero.

Si las cifras no cuadran con las líneas que la página cubre, la DGII acepta el
comprobante de forma condicional. [Validar sin emitir](/emision/validar-sin-emitir/)
te lo avisa antes (`PageBucketMismatch`, `PageAmountMismatch`,
`PageSumMismatch`). Lo mismo pasa con `subtotals[]`: la numeración (`number`)
debe ser consecutiva, y la suma de `lines` no puede superar las líneas del
comprobante.