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

Si dejaste de usar parte de un rango de e-NCF que la DGII te autorizó (por
ejemplo, migraste de sistema o un rango quedó reservado y nunca se emitió),
tienes que anularlo formalmente para que no quede pendiente de reporte. Eso
es un ANECF.

<Aside type="caution" title="No es para corregir un comprobante ya enviado">
  Si un e-CF ya se envió a la DGII o a tu comprador, la corrección es una Nota
  de Crédito (tipo 34), nunca un ANECF. La anulación solo existe para e-NCF que
  **nunca se usaron**.
</Aside>

## Qué se puede anular

Solo la **cola sin usar** de un rango: desde cualquier punto en adelante
hasta el final del rango autorizado. No se pueden anular huecos sueltos en
medio de un rango ya en uso.

## Endpoint

```
POST /api/v1/sequences/annulments
```

```json
{
  "environment": "Test",
  "reason": "Migración de sistema de facturación",
  "lines": [
    {
      "type": 31,
      "series": "E",
      "rangeFrom": "E310000000501",
      "rangeTo": "E310000000999"
    }
  ]
}
```

Hasta 10 líneas (combinaciones de tipo/serie) por solicitud. La respuesta
llega en el mismo request, sin `TrackId` ni polling:

```json
{
  "id": "018f...",
  "status": "voided",
  "dgiiCode": "1",
  "dgiiMessages": []
}
```

Si la DGII no responde, la solicitud queda en `failed` y se reintenta con
`POST /api/v1/sequences/annulments/{id}/retry`.

<Aside type="note" title="No disponible en CerteCF">
  Este endpoint de la DGII solo existe en TesteCF y en Producción (eCF), no en
  CerteCF.
</Aside>

## Consultar solicitudes

```
GET /api/v1/sequences/annulments        listado del tenant
GET /api/v1/sequences/annulments/{id}   una solicitud puntual
```