Skip to content

ADR-046: La reserva vence sola y el índice de clasificados se adopta mediante un acto

Estado: Aceptado Fecha: 2026-10-22 Autores: Giampiero (mantenedor principal); lote D, bloque D-2 y excepción del índice (D-4 §4.2) Relacionados: ADR-039 (tope de 15 años y cita normativa), ADR-038 (ficha provisional), ADR-035 (entidad suspendida), ADR-010 (auditoría inmutable)


Contexto

La reserva de un documento (Ley 1712 de 2014, art. 19) es temporal: su vigencia y el tope de 15 años desde la generación los fija el art. 22 de la Ley 1712 de 2014 con el Decreto 103 de 2015 art. 29 (hoy DUR 1081 de 2015); el vencimiento NO es del art. 19. El sistema guardaba el plazo pero nadie lo ejecutaba: un radicado reservado seguía así para siempre salvo que alguien lo desclasificara. El índice público de clasificados tampoco decía quién lo adoptó, ni la excepción en que se funda cada reserva (total o parcial), ni el idioma y soporte del original.

Decisión

  1. Vencimiento automático como una pasada más del barrido de document-service (vencer_reservas_una_vez, advisory lock 0x52534556; RESERVA_VENCIMIENTO_ENABLED, RESERVA_VENCIMIENTO_LOTE). reserva_vence_at(registered, clasificado, plazo) (migración tenant 053, IMMUTABLE) = el menor entre clasificado + plazo y generación + 15 años; sobre un 31 de enero, +1 mes es el 28 de febrero. Solo nivel 2: el nivel 3 (secreto) no vence por tiempo.
  2. Una transacción por radicado: el UPDATE repite la condición de vencimiento (FOR UPDATE SKIP LOCKED en un CTE) y escribe dos asientos (document.reserva_vencida y document.radicado_reclassified, actor None, canal system) y el evento del outbox con origen='vencimiento_plazo' y dedup_key por radicado y fecha. El barrido recorre entidades activas y suspendidas: el plazo legal corre aunque la entidad esté suspendida.
  3. GET /reports/reservas-por-vencer (PERM_RECLASIFICAR; 30/60/90 días; clearance en el WHERE; X-Total-Count con la misma condición) para reclasificar antes si aplica el art. 18.
  4. Idioma y medio de conservación: columnas idioma (ISO 639, 2-3 letras) y medio_conservacion (electronico|fisico|hibrido). La ventanilla y el correo los fijan en el servidor (es, electronico); el cliente no los dicta ahí. PATCH /documents/{id}/conservacion (PERM_RADI crud 3) los corrige con motivo ≥10 y asiento antes/después.
  5. Acto de adopción (transparencia_adopcion, append-only por trigger): la resolución que adopta el índice (número, fecha, firmante, cargo, url_publicacion http/https). La corrección es una fila nueva que reemplaza a la vigente; nunca un UPDATE. GET|POST /reports/transparencia/adopciones (POST USUA_PERM_ADMIN crud 3) y el público GET /public/{tenant}/transparencia/adopciones (tenant inexistente = [], nunca 404: no confirma qué entidades existen). No se sirve registrado_por.
  6. Excepción total/parcial (migración 055): radicados.clasificacion_excepcion (total|parcial) obligatoria al clasificar con causal real (por_clasificar queda exenta); entra por POST /documents, reclasificar, solicitud de desclasificación, borradores heredados, importación y exportación; sale por /internal/documentos/clasificados. El índice de archive agrupa también por excepción; sin dato es por_determinar, nunca un total inventado.
  7. Índice público: columnas Excepción, Idioma y Soporte, y el bloque "Adoptado mediante Resolución N.º ... del ..., firmada por ... (cargo)" o, honestamente, "La entidad no ha registrado el acto de adopción".

Alternativas descartadas

  • Desclasificar lazy al leer: dejaría el dato y los derivados (índice, búsqueda) desactualizados hasta que alguien lo lea.
  • Que el cliente envíe idioma y soporte en la ventanilla: es un canal sin autenticar; el servidor sabe de qué canal llegó.

Residuos declarados

  • Citas contrastadas por la auditoría del lote D: el vencimiento es Ley 1712 art. 22 + Decreto 103/2015 art. 29; la adopción del índice y de los demás instrumentos es Decreto 103/2015 art. 36 (Registro de Activos de Información, Índice de Información Clasificada y Reservada, Esquema de Publicación y Programa de Gestión Documental; no «arts. 38-41»); el rango de levantamiento del índice público sigue la Res. MinTIC 1519/2020, Anexo 2, num. 7.1.
  • El plazo se mide en meses calendario; un cambio de la norma es una migración de la función.

Consecuencias

  • Ninguna reserva sobrevive a su plazo sin acto humano que la renueve (reclasificando); el vencimiento deja la misma huella que una reclasificación.
  • Los INSERT de pruebas con causal real deben incluir clasificacion_excepcion (CHECK radicados_excepcion_obligatoria).