# Inmutabilidad **Versión:** 1.0 **Estado:** Definición --- ## Principio ``` ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Los datos de entrada y salida nunca se modifican. │ │ La trazabilidad siempre es posible. │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Componentes Inmutables | Componente | Mutabilidad | Eliminación | |------------|-------------|-------------| | Secretaría (Clara/Margaret) | **Inmutable** | Prohibida | | Contable (Feldman) | **Inmutable** | Prohibida | --- ## Componentes Editables | Componente | Mutabilidad | Eliminación | |------------|-------------|-------------| | Producción (Alfred/Jared) | Editable | Permitida | | Administración (Mason) | Editable | Siempre (tras consolidar) | --- ## Cadena de Hashes ### Encadenamiento ``` Bloque 1 Bloque 2 Bloque 3 ┌────────────┐ ┌────────────┐ ┌────────────┐ │h_bloque: A │──────►│hash_prev: A│──────►│hash_prev: B│ │content: X │ │h_bloque: B │ │h_bloque: C │ │ │ │content: Y │ │content: Z │ └────────────┘ └────────────┘ └────────────┘ ``` ### Verificación ```python def verificar_cadena_completa(): bloques = obtener_todos_bloques_ordenados() for i, bloque in enumerate(bloques): # Verificar hash de contenido if not verificar_integridad(bloque): return False, f"Integridad fallida en bloque {i}" # Verificar encadenamiento if i > 0: if bloque.hash_previo != bloques[i-1].h_bloque: return False, f"Encadenamiento roto en bloque {i}" return True, "Cadena válida" ``` --- ## Reglas de Validación | Regla | Nombre | Descripción | |-------|--------|-------------| | M-001 | Hash único | h_bloque no existe previamente | | M-002 | Encadenamiento | hash_previo apunta a bloque existente | | M-003 | Integridad | hash_contenido = SHA-256(contenido) | --- ## Trazabilidad Cualquier registro en Feldman puede rastrearse hasta Secretaría: ``` Bloque (Feldman) │ └── h_entrada ──► Contenedor (Secretaría) │ ├── timestamp ├── origen ├── usuario └── archivos_hashes ──► R2 ``` --- ## Auditoría Sentinel verifica periódicamente: | Modo | Frecuencia | Verificación | |------|------------|--------------| | LIGHT | 5 min | Últimos bloques | | DEEP | 1 hora | Cadena completa | --- ## Blockchain Ready La estructura de bloques encadenados está preparada para: - Publicación en blockchain (Polygon) - Merkle tree para verificación - Smart contracts para sellado **Estado:** Preparado pero no implementado.