# La ventana de 8 días (/docs/recepcion/ventana-8-dias)

> **Trampa — 8 días corridos. El silencio acepta. No se puede deshacer.**
>
> La ley chilena le da al receptor **8 días corridos** para rechazar una factura recibida (tipos 33, 34
> y 43). Si no haces nada, al día 8 el documento queda **irrevocablemente aceptado** y se vuelve
> libremente transferible — tu proveedor puede cederlo a un factoring y tú ya no tienes cómo objetarlo.
>
> No hacer nada no es «pendiente». Es aceptar.

## Qué significa en la práctica [#qué-significa-en-la-práctica]

Un documento recibido llega con esto:

```json
"commercial_response": {
  "state": "pending",
  "state_reason": null,
  "deadline_at": "2026-08-20T23:59:59-04:00",
  "days_remaining": 6,
  "available_actions": ["accept", "reject_content", "reject_partial", "reject_total", "acknowledge_receipt"],
  "default_if_silent": "accepted",
  "history": []
}
```

`default_if_silent` está en cada objeto por una razón: es la respuesta a «¿y si no hago nada?», y es
la pregunta que un integrador tiene que responderse antes de escribir la primera línea.

`deadline_at` viene con offset de Chile (`-04:00` o `-03:00` según el horario de verano) porque el
plazo es de calendario chileno, no un intervalo de 192 horas desde un instante UTC.

## Dónde parte el reloj [#dónde-parte-el-reloj]

Un plazo vale lo que vale su punto cero, así que acá va exacto:

|                  |                                                                                                 |
| ---------------- | ----------------------------------------------------------------------------------------------- |
| **Ancla**        | La marca de recepción **del SII** para ese documento, publicada como `reception.sii_receipt_at` |
| **Conteo**       | Días **corridos**. Fines de semana y feriados cuentan                                           |
| **Granularidad** | Días completos en el calendario civil de America/Santiago                                       |
| **Vencimiento**  | El fin del octavo día posterior a la fecha chilena del ancla                                    |

No es la `issue_date` del emisor, que la elige el emisor. No es el momento en que el correo llegó a
tu casilla de recepción, que depende de la cola de correo de quien lo mandó. Y no es nuestro
`received_at`, porque entonces una caída nuestra te acortaría un plazo legal.

Que la granularidad sea el día tiene una consecuencia práctica: un documento recibido a las 23:50 no
pierde un día por culpa del reloj, y un cambio de horario de verano no corre el vencimiento una hora.

> **Sin ancla no hay plazo — y lo decimos, no lo inventamos**
>
> Mientras no se conozca la marca de recepción del SII, `deadline_at` y `days_remaining` vienen en
> `null` y las acciones de escritura responden `422 commercial_response_anchor_pending`.
>
> Adivinar una fecha legal es peor que negarse a nombrar una. La base de datos lo refuerza: un plazo
> guardado sin su ancla se rechaza a nivel de esquema.
>
> Pero `pending` tampoco es para siempre: si el ancla no llega en dos semanas dejamos de preguntar y el
> documento queda en `state: "expired_accepted"` con
> `state_reason: "anchor_never_registered"`. El plazo se acabó igual — el silencio acepta el día 8 sin
> consultarnos —, solo que nunca supimos en qué fecha exacta. El `state_reason` está para que
> distingas ese caso de uno donde sí vimos vencer un plazo.

## Las tres reglas duras [#las-tres-reglas-duras]

Las aplicamos nosotros antes de que te las aplique el SII:

**Solo tipos 33, 34 y 43.** Cualquier otro devuelve `422 commercial_response_not_applicable`. Una
boleta o una guía de despacho no llevan respuesta comercial.

**8 días, con el servidor de por medio.** Pasado el plazo recibes
`422 commercial_response_window_closed`, con el `deadline_at` dentro del error para que puedas
mostrarlo.

**Un solo tiro.** Una segunda acción sobre el mismo documento devuelve
`409 commercial_response_already_registered`. Y los reclamos son irreversibles: no existe
des-reclamar.

## Qué hacer con esto en tu integración [#qué-hacer-con-esto-en-tu-integración]

### Lo mínimo defendible [#lo-mínimo-defendible]

Escucha `received_document.created` y ponlo delante de una persona. Es la opción por defecto y es la
que la ley asume.

### El recordatorio [#el-recordatorio]

`received_document.deadline_approaching` se dispara a **T−2 días** mientras el estado sigue en
`pending`. Enganchado a un correo o a una notificación interna, es la diferencia entre una decisión y
un accidente.

```js
// En tu handler de webhooks
if (evento.type === 'received_document.deadline_approaching') {
  const doc = evento.data.object;
  await avisar({
    para: 'cuentas-por-pagar@miempresa.cl',
    asunto: `Quedan ${doc.commercial_response.days_remaining} días para objetar ${doc.emisor.legal_name} folio ${doc.folio}`,
    cuerpo: `Total ${doc.totals.total}. Vence ${doc.commercial_response.deadline_at}.`,
  });
}
```

### Barrer lo que sigue pendiente [#barrer-lo-que-sigue-pendiente]

```bash
curl -G https://api.facturia.cl/v1/received_documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -d commercial_response_state=pending -d tipo_dte=33
```

Una tarea diaria que consulta esto y compara `days_remaining` contra tu propio umbral es la forma más
simple de no depender de que alguien lea un correo.

### La aceptación explícita automática [#la-aceptación-explícita-automática]

`auto_accept_received` publica una aceptación ACD después de N días. Viene **apagada**, porque el
silencio legal ya acepta al día 8: la automatización solo importa si quieres un registro explícito.

```bash
curl -X PATCH https://api.facturia.cl/v1/empresas/emp_01K2R6.../automation_settings \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Content-Type: application/json" \
  -d '{"auto_accept_received": true, "auto_accept_received_after_days": 5}'
```

> **Automatizar la aceptación no te da más tiempo**
>
> `auto_accept_received` acelera la aceptación; no extiende el plazo para reclamar. Si lo pones en 5
> días, pierdes tres días de ventana a cambio de un registro explícito. Ponlo alto o no lo pongas.

## Cómo probarlo sin esperar una semana [#cómo-probarlo-sin-esperar-una-semana]

El sandbox tiene un reloj que puedes adelantar por empresa.

```bash
# 1. Inyecta un documento recibido
curl -sS https://api.facturia.cl/v1/test_helpers/received_documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 33,
    "folio": 8812,
    "emisor": { "rut": "96790240-3", "legal_name": "Proveedor Austral SpA" },
    "issue_date": "2026-08-12",
    "totals": { "net": 450000, "iva": 85500, "total": 535500 }
  }'

# 2. Adelanta nueve días
curl -sS https://api.facturia.cl/v1/test_helpers/clock \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"advance_days":9}'

# 3. Intenta reclamar: 422 commercial_response_window_closed
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/reject \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"reason":"content","note":"Fuera de plazo"}'
```

Esa prueba pertenece a tu suite. Es el único plazo de esta API que puede costarte plata por no hacer
nada.

## El detalle jurídico, en corto [#el-detalle-jurídico-en-corto]

La aceptación tácita convierte la factura en un título ejecutable y cedible. Por eso el plazo importa
más que un flujo de aprobación interno: pasado el día 8, la discusión ya no es con tu proveedor sino
con quien haya comprado esa factura.

Las cinco acciones que puedes tomar dentro del plazo están en
[Respuesta comercial](/docs/recepcion/respuesta-comercial).
