Reglas de inventario SIP↔AIP de Docuten eArchiving v1

Docuten eArchiving SIP↔AIP Inventory Rules v1

Metadato Valor
Versión / Version v1
Estado / Status Vigente desde la fase 06.4 para todo AIP nuevo
URI del perfil / Profile URI https://docs.docuten.com/earchiving/sip-aip-inventory-rules/v1
Dónde se cita / Where it is cited El eventDetail del evento PREMIS VALIDATION del paso 7 (forStepObject(sipId, 7, "inventory")) y el campo rulesUri del informe sip-aip-inventory de ingest_validation_reports (step_number = 7)
Implementación / Implementation SipAipInventoryRules (catálogo), SipAipInventory (comparador), InventoryResult (resultado e informe), en earchiving-ingest/.../ingest/inventory/
Decisiones / Decisions D-07, D-08, D-09a, D-12, D-17 (06.4-CONTEXT.md)
Fecha / Date 2026-10-28

1. Propósito / Purpose

Este documento define la lista blanca cerrada y versionada de reglas con las que el paso 7 de la ingesta compara el inventario del SIP recibido con el del AIP construido en el paso 6. Un peritaje que disponga del SIP, del AIP y de este documento puede reproducir la comparación y llegar al mismo resultado que cita el evento sellado. Es el documento que la URI de la tabla anterior identifica.

La URI es un identificador, no una URL que deba resolverse. No se dereferencia en tiempo de ingesta, sellado ni verificación.

This document defines the closed, versioned allow-list of rules that ingest step 7 uses to compare the inventory of the received SIP with the inventory of the AIP built by step 6. An expert witness holding the SIP, the AIP and this document can reproduce the comparison and reach the result cited by the sealed event. The URI is an identifier, not a URL to be dereferenced.


2. Alcance / Scope

Qué se compara. La comparación es bidireccional (D-07): se aplican las reglas al lado SIP para derivar el AIP esperado y se compara con el AIP real. Por cada objeto se compara:

Una discrepancia es un objeto que falta en el AIP, un objeto que sobra en el AIP, una huella distinta o una sección METS ausente o de más. Lo que ninguna regla explica es un bug de transformación del servicio: el paso 7 termina en FAILED con el código INVENTORY_DISCREPANCY (D-10).

Qué no se compara. Los bytes de los METS (METS.xml y representations/<r>/METS.xml): el paso 6 los reconstruye y sus bytes difieren siempre de los del SIP. De los METS solo se comparan sus secciones (INV-R09).

Compared: package-relative path, SHA-256 when the governing rule compares digests, and the METS sections present. Not compared: the METS bytes, which step 6 rebuilds.


3. Tabla de reglas / Rule table

<r> es el id de representación y <f> un nombre de fichero. Huella indica si la regla exige el mismo SHA-256 en origen y destino. Multiplicidad es el número de copias que la regla añade en el AIP por cada objeto de origen que gobierna.

ID Origen en el SIP Destino en el AIP Huella Multiplicidad Transitoria
INV-R01 representations/<r>/data/** misma ruta sí 1 no
INV-R02 metadata/descriptive/<f> misma ruta sí 1 no
INV-R03 metadata/preservation/<f> (raíz) metadata/preservation/producer/<f> sí 1 no
INV-R04 metadata/other/<f> (raíz) metadata/other/producer/<f> sí 1 no
INV-R05 metadata/other/<f> (raíz) metadata/other/<f> (copia declarada por el dmdSec MDTYPE=OTHER) sí 1 (total 2 junto a INV-R04) sí
INV-R06 representations/<r>/metadata/{preservation,descriptive,technical,source,rights}/<f> misma ruta sí 1 no
INV-R07 — (sin origen en el SIP) METS.xml, representations/<r>/METS.xml, documentation/package-profile.xml y schemas/<f> del servicio no 1 no
INV-R08 schemas/<f> (los 4 XSD del estándar) — (no se propagan) no 0 no
INV-R09 secciones METS dmdSec, amdSec, fileSec, structMap secciones del AIP según §6, más las de servicio no 1 por token no

Notas por regla / Notes per rule.


4. Reglas de multiplicidad / Multiplicity rules

Multiplicities of the rules governing the same source add up: a root metadata/other/<f> yields 2 AIP copies (INV-R04 + INV-R05). Any object present more times than its rules allow is a discrepancy.


5. Regla transitoria INV-R05 / Transitional rule INV-R05

Por qué existe. El bucle descriptivo del paso 6 (D-24 de 05.1.1) declara el «other» de la raíz también como dmdSec MDTYPE=OTHER con href=metadata/descriptive/../other/<f>, y commons-ip2 materializa esa referencia como una segunda copia en metadata/other/<f> (DI-06.3-03). Es un comportamiento medido del servicio, no un error del productor, así que el inventario lo declara para no fallar todo AIP con «other».

Lo que NO hace. La regla declara la copia esperada; NO legitima el href con .. de esa referencia. La amenaza de esa referencia sigue enrutada a /gsd-secure-phase.

Condición de retirada. Cuando se corrija en origen el bucle descriptivo y desaparezca el href con .., la copia doble deja de existir y INV-R05 se retira. Retirarla es una versión nueva de este documento con URI nueva (§10); la v1 no se edita.

INV-R05 declares the measured second copy of a root other file caused by the descriptive loop; it does NOT legitimise the .. href. It is withdrawn in a new version once the loop is fixed at source.


6. Traducción de secciones METS de INV-R09 / METS section translation (INV-R09)

Las secciones se extraen como tokens del METS.xml raíz y de cada representations/<r>/METS.xml, en el SIP y en el AIP. Traducción medida (06.4-RESEARCH, «Secciones METS presentes»):

Sección (token) En el SIP En el AIP
dmdSec[MDTYPE=DC] 1 por fichero descriptivo 1 por fichero descriptivo (INV-R02)
dmdSec[MDTYPE=OTHER] 1 por metadata/other/<f> 2 por metadata/other/<f>: metadata/other/producer/<f> (INV-R04) y metadata/descriptive/../other/<f> (INV-R05)
amdSec/digiprovMD[MDTYPE=PREMIS] del productor 1 por metadata/preservation/<f> 1 por fichero, hacia metadata/preservation/producer/<f> (INV-R03)
amdSec/digiprovMD de servicio — digiprov-1 (premis.xml), digiprov-2 (origin-attestation.xml), digiprov-4 (aip-timestamp.tst) y, si el paso 5 declaró informe DSS, digiprov-3 (dss-validation-report.xml)
fileGrp[USE=Representations/<r>] 1 por representación 1 por representación
fileGrp[USE=Schemas] los 4 XSD del estándar (INV-R08) los schemas/<f> del servicio (INV-R07)
fileGrp[USE=Documentation] — (el paso 2 rechaza documentation/) documentation/package-profile.xml (INV-R07)
structMap[LABEL=CSIP], div de primer nivel Metadata, Metadata/Other, Schemas, Documentation, Representations/<r> según contenido los mismos, más los que añaden los añadidos de servicio

Secciones de servicio con mdRef todavía sin fichero. En el paso 7 el METS del AIP ya declara los digiprovMD de servicio, pero sus ficheros los añade el paso 10 (medido en 06.4-01, A3: el METS del paso 6 declara dss-validation-report.xml y el ZIP no lo contiene). Son secciones de servicio de esta regla: ni objeto que falta ni sección de más.

Precisiones de la tokenización (aprobadas en el checkpoint de 06.4-09).

Limitación conocida, aceptada. Un digiprovMD del productor cuyo ID tenga la forma digiprov-<n> se tokeniza como si fuera de servicio y produce un falso positivo que falla cerrado con INVENTORY_DISCREPANCY: el paso 7 termina en FAILED y no se emite sello alguno. Es un fallo seguro —nunca deja pasar una discrepancia real— y se acepta en la v1.

Precisions: service digiprovMD sections are tokenised by ID (digiprov-1..4), not by MDTYPE (digiprov-4 is MDTYPE=OTHER); the wrapping structMap div is not tokenised (step 6 changes its OBJID), only its children. Known, accepted limitation: a producer digiprovMD with an ID of the form digiprov-<n> yields a false positive that fails closed with INVENTORY_DISCREPANCY.


7. Lo que el paso 2 rechaza antes / What step 2 rejects first

El paso 2 rechaza con SIP_CONTENT_NOT_ARCHIVABLE (REJECTED, D-09a) el contenido que el servicio no archiva. Ese contenido nunca llega al inventario, y por eso no tiene regla:

  1. secciones raíz technical/source/rights con MDTYPE=OTHER y las raíz PREMIS:OBJECT/PREMIS:RIGHTS;
  2. metadata «other» de representación (representations/<r>/metadata/other/**);
  3. documentation/ de paquete y documentation/ de representación;
  4. schemas/ de representación;
  5. en schemas/ de la raíz, todo XSD que no sea uno de los 4 del estándar (por nombre y huella, INV-R08);
  6. rutas hostiles y metadata «other» por encima de los límites de tamaño (DI-06.3-04).

8. Relación con premis.xml / Relation to premis.xml

Los ficheros de metadata/preservation/producer/ y metadata/other/producer/ no se inventarían como objetos file de premis.xml (D-12). Ya tienen SHA-256 nativo en el METS y entran en el leaf set del sello #1 (06.3 D-04), y los cubre este inventario (INV-R03, INV-R04). premis.xml no cambia por este motivo. La regla vive en el inventario, no en el PREMIS.

Files under producer/ are not inventoried as PREMIS file objects; they carry native SHA-256 in the METS, are leaves of seal #1 and are covered by INV-R03/INV-R04. premis.xml is unchanged.


9. Partida del inventario / Inventory baseline

El inventario parte de lo declarado en el METS del SIP (D-17). Los ficheros del ZIP que el METS no declara no se inventarían: commons-ip2 los ignora y no llegan al AIP, así que contarlos daría un falso «bug nuestro». Vigilar ficheros no declarados del ZIP es una regla de seguridad del paso 2, fuera de esta versión.

The inventory starts from what the SIP METS declares. Undeclared ZIP entries are not inventoried; watching for them is a step-2 security rule outside this version.


10. Versionado / Versioning

In force since phase 06.4 for every new AIP: v1 is never edited; any change is v2 with a new URI.