Ciclo de vida de una certificación
Crear, iniciar y consultar una certificación hasta que termina.
Una certificación es asíncrona: usted la crea, la inicia y después consulta su avance hasta que
termina. El avance depende de los tiempos del SII y no es inmediato. Esta guía explica el
recorrido, qué significan Estado, Etapa y PasoEnSII, cada cuánto consultar y qué hacer
cuando la certificación termina o queda con error.
El recorrido
- Crear.
certificaciones_v1_crear(POST /v1/certificaciones/{rut}/crear) ocertificaciones_v2_crear(POST /v2/certificaciones/{rut}/crear). La v2 funciona como la v1, pero el certificado digital es opcional al crear y se puede cargar después concertificaciones_v2_actualizar. La certificación recién creada queda enEtapa=IngresoDatos(1), conEstado=EnProgreso(1). Si se creó con la v2 sin certificado digital,Estadoqueda enCreada(0). - Iniciar.
certificaciones_v1_iniciar(POST /v1/certificaciones/{rut}/iniciar) ocertificaciones_v2_iniciar(POST /v2/certificaciones/{rut}/iniciar). Se recomienda usar la misma versión con la que creó la certificación. Después de crear siempre va iniciar: mientras no lo llame, la certificación no avanza, aunqueEstadodigaEnProgreso. El cuerpo puede traer los productos, servicios y sets que falten. Sin al menos un producto y un servicio, la API rechaza el inicio conPRODUCTO_REQUERIDOoSERVICIO_REQUERIDO. En la v2, si falta el certificado digital, rechaza conCERTIFICADO_DIGITAL_REQUERIDO. - Consultar.
certificaciones_v1_consultar(GET /v1/certificaciones/{rut}/consultar), cada cierto tiempo, hasta que la certificación termine. La consulta es la misma para las dos versiones: no existe una consulta v2, así que una certificación creada con la v2 también se consulta con la v1.
curl -u '<usuario>:<apikey>' -H 'Accept: application/json' \
https://api.enrolamiento.cl/v1/certificaciones/11111111-1/consultarQué se puede repetir sin riesgo
certificaciones_v1_crearycertificaciones_v2_crearno son idempotentes. Si la respuesta no llega (un timeout, una conexión cortada), no repita la creación a ciegas. Consulte primero: un 404 decertificaciones_v1_consultar(«No existe una certificación…») significa que no se creó.certificaciones_v1_iniciarsí se puede repetir: si la certificación ya pasó por la carga de datos, respondetruesin hacer nada.- Para
certificaciones_v2_iniciarel contrato marca la idempotencia como desconocida: ante un error dudoso, consulte el estado antes de repetir.
La regla completa, código por código, está en Errores y reintentos.
Estado, Etapa y PasoEnSII
La respuesta de certificaciones_v1_consultar trae tres campos de avance, de lo más general a lo
más específico. Los valores son números. El nombre que aparece al lado de cada número es el que
usan los filtros de certificaciones_v1_buscar y las claves de certificaciones_v1_stats.
Estado
Dice si la certificación avanza, terminó o tiene un problema.
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | Creada | Creada, pero no comenzada aún. |
| 1 | EnProgreso | En progreso. |
| 2 | Completada | Finalizada. |
| 3 | Error | Con error |
Etapa
Dice en qué parte del recorrido está la certificación. Es el campo que dice qué hacer: Estado
puede seguir en EnProgreso mientras la certificación espera algo de usted (iniciar o declarar).
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | VerificacionSII | En verificación del SII. Usualmente el representante legal puede tener situaciones pendientes en el SII. |
| 1 | IngresoDatos | Ingreso de datos. |
| 2 | ConfiguracionSII | Proceso en el SII. |
| 3 | DeclaracionFinal | Declaración final. |
| 4 | Completada | Finalizada |
PasoEnSII
Dice en qué paso del proceso ante el SII está la certificación. Tiene sentido cuando Etapa es
ConfiguracionSII (2).
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | Ninguno | Aún no comienza el proceso. |
| 1 | Postulacion | Postulación. |
| 2 | Prueba | Set de prueba. |
| 3 | Simulacion | Set de simulación. |
| 4 | Intercambio | Set de intercambio. |
| 5 | MuestrasImpresas | Muestras impresas. |
Otros campos que ayudan a seguir el avance
FechaEstado: la fecha del estado actual.HorasEnEstado: las horas completas que la certificación lleva sin que cambie nada de lo que se ve en la respuesta. Sirve para detectar una certificación detenida. Un cambio dePasoEnSIIno siempre lo vuelve a cero.Comentario: el comentario del estado. CuandoEstadoesError, describe el error.ClasificacionErroryCodigoError: cuandoEstadoesError, quién tiene que resolverlo y con qué código (más abajo).Reinicios: cuántas veces se reinició la certificación a pedido de alguien, por la API o por el portal de administración.
Qué hacer en cada estado
| Situación | Qué hacer |
|---|---|
Etapa = IngresoDatos (1), con Estado en Creada (0) o EnProgreso (1) | Falta iniciar: llame a iniciar. La certificación no avanza sola, así que no tiene sentido consultarla mientras tanto. |
Etapa = ConfiguracionSII (2), con Estado = EnProgreso (1) | Consulte periódicamente, con el intervalo que se recomienda más abajo. |
Etapa = DeclaracionFinal (3) | Declare el cumplimiento con certificaciones_v1_declarar_cumplimiento (POST /v1/certificaciones/{rut}/declarar-cumplimiento) y siga consultando hasta que Estado sea Completada. |
Estado = Completada (2) | Terminal. La certificación terminó: deje de consultarla. |
Estado = Error (3) | Lea ClasificacionError, CodigoError y Comentario, y actúe según la sección siguiente. |
certificaciones_v1_declarar_cumplimiento solo corre en DeclaracionFinal: en otra etapa responde
ERROR_GENERAL. No es idempotente. Si falla con
ERROR_DECLARANDO_CUMPLIMENTO, la certificación queda marcada con ese error: consúltela y lea el
mensaje antes de repetir.
Una certificación con error
ClasificacionError dice quién puede resolver el error:
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | Ninguno | No se encuentra en error. |
| 1 | Sistema | Error del sistema. Este debe resolverse en enrolamiento. |
| 2 | Admin | El usuario de la plataforma de enrolamiento puede resolver el problema. |
| 3 | Cliente | El cliente debe resolver la situación. |
Qué hacer con un error lo decide usted, según esa clasificación. Si un error de Sistema no se
resuelve, escriba a soporte@enrolamiento.cl con el RUT de la empresa. Mientras espera, consulte con
el intervalo largo (10 minutos). Cuando la causa de un error
está resuelta, la certificación se retoma con reiniciar.
Reiniciar
certificaciones_v1_reiniciar (POST /v1/certificaciones/{rut}/reiniciar) reinicia la
certificación y elimina los datos generados para ella. En Etapa = DeclaracionFinal (3) no se
puede reiniciar: la API responde ERROR_GENERAL. El campo Paso del cuerpo dice qué se
reinicia:
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | Certificacion | Reiniciar la certificación para que comience desde el set de prueba nuevamente. |
| 1 | MuestrasImpresas | Rehacer solo las muestras impresas y enviarlas al SII. |
| 2 | VerificacionSII | Continuar la certificación que estaba en verificación SII. |
El caso típico de VerificacionSII (2): la certificación quedó en Etapa = VerificacionSII
porque el representante legal tenía situaciones pendientes en el SII. Una vez resueltas en el SII,
reinicie con Paso = 2 para continuar.
El cuerpo lleva también un Motivo y, de forma opcional, datos para actualizar (razón social,
giro, dirección, productos, servicios, sets).
curl -u '<usuario>:<apikey>' -X POST \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{"Paso": 2, "Motivo": "Situación del representante legal resuelta en el SII"}' \
https://api.enrolamiento.cl/v1/certificaciones/11111111-1/reiniciarcertificaciones_v1_reiniciar no es idempotente. Ante un error dudoso, no repita: consulte la
certificación y compare Reinicios con el valor que tenía antes. Si aumentó, el reinicio se aplicó.
Cada cuánto consultar
La API no fija un intervalo de consulta. Lo que sigue es una recomendación, no un límite de la API:
- Mientras la certificación esté en
ConfiguracionSII(2) conEstado=EnProgreso(1), consulte cada 60 segundos. - Si entre una consulta y la siguiente
PasoEnSIIno cambia, duplique el intervalo (60 s, 120 s, 240 s…) hasta un máximo de 10 minutos. - Cuando cambie
PasoEnSII,EtapaoEstado, vuelva a 60 segundos. - En
IngresoDatos(1) no consulte: llame ainiciar. EnDeclaracionFinal(3), declare el cumplimiento y siga con el intervalo largo. EnCompletada(2), deje de consultar. EnError(3), decida qué hacer; si espera una resolución, consulte cada 10 minutos.
El avance depende de los tiempos del SII: consultar más seguido no lo acelera, solo consume cupo. La API admite 120 requests por minuto y no está garantizado que ese cupo sea solo suyo (ver Rate limits). Si recibe un 409, espere al menos 60 segundos antes de volver a consultar.
import time
import requests
URL = "https://api.enrolamiento.cl/v1/certificaciones/11111111-1/consultar"
AUTH = ("<usuario>", "<apikey>")
MINIMO, MAXIMO = 60, 600 # segundos
# Antes de este bucle la certificación ya se creó y se inició.
intervalo, anterior = MINIMO, None
declarado = False # True después de llamar a declarar-cumplimiento
while True:
r = requests.get(URL, auth=AUTH, headers={"Accept": "application/json"})
if r.status_code == 409: # rate limit: esperar al menos 60 s
time.sleep(60)
continue
r.raise_for_status()
c = r.json()
if c["Estado"] == 2: # Completada: terminal
break
if c["Estado"] == 3: # Error: el bucle no lo resuelve; usted decide según
break # ClasificacionError (reiniciar, esperar a soporte...)
if c["Etapa"] == 1: # IngresoDatos: falta iniciar; consultar no la mueve
break
if c["Etapa"] == 3: # DeclaracionFinal
if not declarado:
break # Falta declarar: llame una sola vez a declarar-cumplimiento
# (no es idempotente), marque declarado = True y vuelva al bucle.
time.sleep(MAXIMO) # Ya declaró: espere con el intervalo largo.
continue
actual = (c["Estado"], c["Etapa"], c["PasoEnSII"])
intervalo = MINIMO if actual != anterior else min(intervalo * 2, MAXIMO)
anterior = actual
time.sleep(intervalo)Muchas certificaciones: buscar en vez de consultar una por una
Si sigue muchas certificaciones, consultar cada una por separado multiplica los requests. Con
certificaciones_v1_buscar (GET /v1/certificaciones/buscar/{pagina}/{cantidadPorPagina}) trae
varias en una sola llamada. La respuesta es un array de certificaciones, de la más reciente a la
más antigua, sin total.
curl -u '<usuario>:<apikey>' -H 'Accept: application/json' \
'https://api.enrolamiento.cl/v1/certificaciones/buscar/1/100?Fecha=20261001'Lo que conviene saber de los filtros:
- Van por query string y el nombre distingue mayúsculas:
estadose ignora,Estadono. Un valor vacío también se ignora. Fecha(aaaammdd-aaaammdd) trae las certificaciones con algún cambio de estado en el rango. Sin fecha de fin, el rango llega hasta ahora. El día final queda prácticamente afuera, porque el fin cuenta desde las 00:00 de ese día.RUTse compara tal cual, sin normalizar: va sin puntos, con guion y la K en mayúscula.FechayRUTse aplican antes de paginar.Estado,EstapayPasoEnSIIse aplican después de paginar, sobre la página ya cortada. Una página puede traer menos filas quecantidadPorPagina, o ninguna, aunque haya coincidencias en otras páginas.- El filtro de etapa se llama
Estapa, con esa ortografía.Etapase ignora sin aviso. - Los filtros de estado, etapa y paso aceptan el nombre o el número del valor, con las mayúsculas exactas. Un valor inválido produce un 500.
Para no perder filas, pida las páginas sin Estado, Estapa ni PasoEnSII y filtre de su lado.
La API no impone tope a cantidadPorPagina, pero se recomienda no pasar de 100. Empiece en pagina
1: una página menor que 1 produce un 500. Sin esos tres filtros, una página vacía o con menos filas
que cantidadPorPagina es la última. Para repetir la búsqueda sirve el mismo intervalo de la
sección anterior.
Al juntar las páginas, deduplique por RUT. La lista va de la más reciente a la más antigua: si
se crea una certificación mientras usted pagina, las filas se corren y una misma certificación
puede aparecer en dos páginas. Si una empresa puede tener más de una certificación, use RUT junto
con Fecha, que es la fecha de creación.