ADR-050: Subserie con productoras propias, renovación perpetua por expediente y cuadro de clasificación público¶
Estado: Aceptado Fecha: 2026-10-22 Autores: Giampiero (mantenedor principal); lote D, bloque D-4 Relacionados: ADR-040 (cuadro derivado; enmendado: subseries y publicidad del CCD salen de «Fuera de alcance»), ADR-043 (valoración de la TVD y selección; enmendado: renovación de lo conservado y reactivación), ADR-025 (instrumento convalidado inmutable), ADR-035 (lectura pública de una entidad suspendida), Ley 594/2000 arts. 24-26, Ley 1712/2014 arts. 9 y 13, Ac. AGN 004/2019 (compilado por 001/2024)
Contexto¶
C-4 y C-5 dejaron cinco huecos, verificados en el código:
- La productora de una subserie estaba prohibida (la «heredaba» entera): el cuadro repetía la subserie bajo oficinas que no la producen.
- La fase de renovación rodante filtra por la serie (
s.disposition = ANY(CT)), no por el expediente. Una TVDS(oM) cuyo expediente se seleccionó para conservar recibía retención COMPLIANCE al aplicarse la valoración y nadie la renovaba: el candado vencía sobre un expediente de conservación permanente. agotadaenexpediente_valoracion_holdera terminal; el asiento de la caída iba fuera de la transacción y era best-effort.- El cuadro de clasificación (
GET /trd/cuadro) no teníarequire_permission, y no existía una publicación del instrumento convalidado. - La TRD corriente con disposición
S/Mno tenía acto de selección por expediente: un expediente que el Comité decidiera conservar no tenía marca y su retención vencía igual.
Decisión¶
1. Subserie con productoras propias: subconjunto, retención única¶
La subserie puede llevar productoras propias, que deben ser un subconjunto de las de la serie (la fila-versión a la que apunta su parent_id); sin filas hereda todas (semántica declarada). La retención sigue siendo una, la de la subserie: cuando dos oficinas conservan la «misma» subserie con plazos distintos, la TRD las registra como filas distintas (códigos distintos), no como una retención por oficina. Una retención por (subserie, oficina) reintroduciría un dato con dos fuentes (lo que ADR-040 eliminó) y no es computable sobre un expediente, que no conoce su oficina productora. Si el auditor archivístico concluye que la norma exige plazos por oficina dentro de un mismo código, el remedio es un código de SERIE por oficina (cada oficina con su propia serie y su plazo), no esta variante.
Reglas: la subserie con propias cuelga de la versión vigente de su serie (409 subserie_cuelga_de_version_anterior, con parent_vigente_id); productora_fuera_de_la_serie; convalidar una versión de serie que quite una productora citada por una subserie vigente se rechaza (409 serie_productora_citada_por_subserie; el remedio es versionar antes la subserie). El motor (migración 077) repite las reglas en el trigger de la 070. set_productoras pasa a ser diferencial: reenviar la misma lista no toca filas.
2. Predicado de conservación perpetua, único y por expediente¶
app.core.disposition.predicado_perpetuo(alias, param) es el único fragmento SQL que decide qué entra a la renovación rodante (índice, AIP, acta y firmas personales; diez consultas). Incluye tres hechos, todos actos registrados: la serie es CT; la valoración de la TVD decidió conservar (expediente_valoracion_hold.resultado = 'retencion_ct': CT, M y S-conservar); o el Comité seleccionó el expediente en la TRD corriente (expediente_seleccion_trd.accion = 'conservar'). No se cambia trd_series.disposition del expediente (reescribiría el instrumento convalidado) ni se crea una vista (copiaría los códigos CT). El guardián test_renovacion_predicado_unico.py impide volver a filtrar por la disposición a secas.
3. Selección por expediente en la TRD corriente (decisión del orquestador)¶
El acto de la TVD (conservar / descartar) se extiende a las series S y M de la TRD corriente, con la tabla expediente_seleccion_trd (migración 078, fill-once): POST /trd/disposicion/{id}/seleccion y la cola seleccion-pendiente (USUA_PERM_TRD ≥ 3, clearance en el WHERE, 404 neutro). conservar = conservación permanente (la renovación lo cubre; nunca entra a un lote); descartar = elegible al lote. La admisión de lotes rechaza un S de la TRD corriente sin el acto (seleccion_pendiente). Corrección de la auditoría del lote D: M (reproducir y eliminar solo el original) solo admite conservar —la reproducción electrónica nunca se purga (Ley 594/2000 art. 19; Ac. AGN 004/2019 art. 4)—: lo exigen el servicio (422 medio_tecnico_solo_conservar), el WHERE del INSERT y un CHECK (archive 079), y M sale de _DISPOSICIONES_QUE_DESTRUYEN, así que un expediente M jamás entra a un lote. El acta de eliminación cita la selección descartar de cada expediente (Ac. 004/2019 art. 22, parágrafo).
4. Reactivar lo agotado¶
GET /tvd/{id}/valoracion/agotadas y POST …/expedientes/{id}/reactivar (motivo ≥ 10): acto humano por expediente, un solo UPDATE … WHERE agotada AND aplicada_at IS NULL con asiento en la misma transacción; last_error se conserva. Alternativas descartadas: reactivar por versión (uno para N, riesgo de bucle contra una causa dura como trd_sin_retencion) y reinicio por tiempo. Además, el paso a agotada y su asiento pasan a ser un acto atómico.
5. Cuadro público desde las instantáneas convalidadas¶
GET /api/v1/public/archive/cuadro-clasificacion/{tenant} (+ .csv) publica solo la versión convalidada vigente, ubicada por ruta_convalidada: lo que el Consejo aprobó, no el organigrama vivo (que puede haberse reorganizado y es dato interno). Lista blanca de campos: sin avisos, estado, acta del Comité, autores ni códigos de dependencia; el número RUSD no se publica (deuda: el sistema guarda rusd_radicado y fecha_publicacion, que no son el número del certificado ni su fecha de inscripción; publicarlos como tales sería inexacto). Fundamento de la publicación: Ac. AGN 004/2019 art. 18, DUR 1081/2015 art. 2.1.1.2.1.4 y Res. MinTIC 1519/2020, Anexo 2, num. 7 y 7.1. Entidad inexistente ≡ sin versiones convalidadas (respuesta vacía idéntica); suspendida se sirve (ADR-035); no cuelga de public_interop_enabled (obligación legal). GET /trd/cuadro pasa a exigir USUA_PERM_TRD (es el árbol vivo del circuito) y la excepción del guardián test_toda_ruta_lleva_gate y de admin-gate-contrato.test.js se retira.
Consecuencias¶
- La retención de un expediente
S/Mconservado deja de vencer en silencio; el cuadro público cumple la publicidad del instrumento sin exponer el organigrama. - Declarado: la herramienta MCP
cuadro_clasificacionpasa a responder 403 a quien no tengaUSUA_PERM_TRD(insumo para la épica MCP:cuadro_clasificacion_publico,listar_valoraciones_agotadas,reactivar_valoracion_agotada, selección en la TRD corriente). El numeral de la Res. MinTIC 1519/2020 quedó confirmado (Anexo 2, num. 7/7.1); la publicidad del certificado RUSD sigue como deuda. - La excepción total/parcial del índice de clasificados se resuelve en el bloque «documento» (no en este ADR).