> ## Documentation Index
> Fetch the complete documentation index at: https://docs.emiti.fravelabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reencolar DE (manual)

> Reencola manualmente un DE en estado P o E a la cola SIFEN.

Reencola un Documento Electrónico que quedó colgado en estado `P` (pendiente) o `E` (enviado/sin respuesta) para que el worker lo reintente.

## Cuándo usarlo

* El DE quedó en estado `E` porque SIFEN respondió con un código no terminal (ej. `0100`) y el worker no lo resolvió automáticamente.
* El DE quedó en estado `P` y nunca llegó a procesarse (fallo transitorio en la cola de procesamiento interna).

Este endpoint opera sobre el **ID interno del DE** (UUID), no sobre el CDC. El CDC sí es requerido internamente — si el DE no tiene CDC asignado el endpoint responde `409 DE_CDC_FALTANTE`.

## Diferencia con `/reenviar`

| Endpoint                     | Estados válidos | Rate limit        | Identificador  |
| ---------------------------- | --------------- | ----------------- | -------------- |
| `POST /de/{cdc}/reenviar`    | `R`, `E`        | Sin límite        | CDC (44 chars) |
| `POST /de/{de_id}/reencolar` | `P`, `E`        | 1 cada 60s por DE | de\_id (UUID)  |

Usá `/reenviar` para DEs **rechazados** (`R`). Usá `/reencolar` para DEs **colgados** en `P` o `E` sin respuesta SIFEN.

## Rate limit

Máximo 1 reencolado por DE cada **60 segundos**. Si se intenta antes de que expire la ventana, el endpoint responde `429 DE_REENCOLADO_RATE_LIMIT` indicando los segundos restantes.

## Respuesta 202

```json theme={null}
{
  "ok": true,
  "de_id": "uuid-del-documento",
  "reencolado_at": "2026-07-03T10:30:00-04:00",
  "mensaje": "DE reencolado. El worker procesará en breve."
}
```

## Errores

| Status | Código                       | Causa                                                                   |
| ------ | ---------------------------- | ----------------------------------------------------------------------- |
| `404`  | `NOT_FOUND`                  | DE no existe o pertenece a otro tenant.                                 |
| `403`  | `FORBIDDEN`                  | Sin tenant\_id en el JWT (superadmin sin contexto de tenant).           |
| `409`  | `DE_TERMINAL_NO_REENCOLABLE` | El DE está en estado `A`, `R` o `C` (terminales).                       |
| `409`  | `DE_CDC_FALTANTE`            | El DE no tiene CDC asignado (estado degenerado).                        |
| `429`  | `DE_REENCOLADO_RATE_LIMIT`   | Reencolado hace menos de 60s. El mensaje indica los segundos restantes. |


## OpenAPI

````yaml POST /v1/de/{de_id}/reencolar
openapi: 3.1.0
info:
  title: eMiti API
  description: >-
    API de emisión de Documentos Tributarios Electrónicos (DTE) bajo SIFEN/DNIT
    Paraguay.
  version: 1.1.0
servers:
  - url: https://api.emiti.fravelabs.com
    description: Producción
  - url: https://api.qa.emiti.fravelabs.com
    description: QA
  - url: https://api.dev.emiti.fravelabs.com
    description: Desarrollo (Homologación SIFEN)
security:
  - ApiKeyAuth: []
paths:
  /v1/de/{de_id}/reencolar:
    post:
      summary: POST /v1/de/{de_id}/reencolar
      operationId: reencolar_factura_v1_de__de_id__reencolar_post
      parameters:
        - required: true
          schema:
            type: string
            title: De Id
          name: de_id
          in: path
      responses:
        '200':
          description: Successful Response
          content:
            application/json: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization

````