# Contable **Nombre:** Feldman **Estado:** Implementado --- ## Descripción Registro final definitivo e inmutable. Representa el estado válido y oficial de cada operación. Aplica principios contables de inmutabilidad. --- ## Características | Característica | Valor | |----------------|-------| | Mutabilidad | **Inmutable** | | Persistencia | Permanente | | Eliminación | Prohibida bajo ningún concepto | --- ## Estructura Interna Feldman es una **unidad conceptual** que contiene dos tablas: ``` ┌─────────────────────────────────────────────────────────────────┐ │ FELDMAN │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ Cola de Validación │ → │ Registro Final │ │ │ │ (espera bloques) │ │ (inmutable) │ │ │ └─────────────────────┘ └─────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` **Aclaración:** La división es **técnica** (tiempo entre validaciones), no conceptual. --- ## Validación por Bloques | Aspecto | Valor | |---------|-------| | Frecuencia | Periódica | | Tipo | Por bloques, no transacción a transacción | | Reglas | M-001, M-002, M-003 | ### Reglas de Validación | Regla | Nombre | Descripción | |-------|--------|-------------| | M-001 | Hash único | h_bloque/h_milestone no existe previamente | | M-002 | Encadenamiento | hash_previo apunta a bloque existente | | M-003 | Integridad | hash_contenido = SHA-256(contenido) | --- ## Encadenamiento ``` Bloque N-1 Bloque N ┌──────────────────┐ ┌──────────────────┐ │ h_bloque: abc123 │ ──────► │ hash_previo: │ │ hash_contenido: │ │ abc123 │ │ def456 │ │ h_bloque: ghi789 │ │ secuencia: 1 │ │ secuencia: 2 │ └──────────────────┘ └──────────────────┘ ``` --- ## Schema Cola ```sql CREATE TABLE feldman_cola ( id BIGSERIAL PRIMARY KEY, tipo VARCHAR(50) NOT NULL, h_entrada VARCHAR(64) NOT NULL, contenido JSONB NOT NULL, prioridad INTEGER DEFAULT 0, estado VARCHAR(20) DEFAULT 'pendiente', created_at TIMESTAMPTZ DEFAULT NOW(), processed_at TIMESTAMPTZ ); ``` --- ## Schema Registro Final ```sql CREATE TABLE bloques ( id BIGSERIAL PRIMARY KEY, h_bloque VARCHAR(64) UNIQUE NOT NULL, h_instancia VARCHAR(64) NOT NULL, secuencia BIGINT NOT NULL, hash_previo VARCHAR(64), hash_contenido VARCHAR(64) NOT NULL, tipo_bloque VARCHAR(50) NOT NULL, contenido JSONB NOT NULL, metadata JSONB, estado VARCHAR(20) DEFAULT 'consolidado', created_at TIMESTAMPTZ DEFAULT NOW(), validated_at TIMESTAMPTZ, UNIQUE (h_instancia, secuencia) ); ``` --- ## Trazabilidad Cualquier registro en Feldman puede rastrearse hasta Secretaría: ``` Bloque (Feldman) → h_entrada → Secretaría (Clara/Margaret) ```