t3-calcification

T3 — Calcification Engine

Categoría: SoA con escritura a SoR pequeño propio (rule stores de M1 y de I1) Estado: Propio sano (es el componente nuevo más diferencial de V3) Tamaño esperado: ~3-4k LOC


1. Responsabilidad

Convertir patrones de decisión recurrentes en reglas deterministas mediante observación + propuesta + gate humano + período shadow + promoción.

T3 es el corazón del valor a largo plazo de Intelia como producto IA-first. Sin T3, el sistema es un proxy LLM sobre Holded; con T3, el sistema se vuelve cada vez más eficiente y predecible con el uso.

2. NO es su responsabilidad

  • No decide automáticamente. Las reglas propuestas SIEMPRE pasan por gate humano (Intelia ops). No hay auto-promoción.
  • No invalida reglas viejas sin shadow. Cualquier cambio pasa por período de shadow primero.
  • No mezcla niveles. Las reglas semánticas viven en M1.RuleStore; las reglas de integración viven en I1.PlanStore. T3 propone a la capa correspondiente.
  • No calcifica sin reverse-sync vivo. Si T4 está caído, T3 pausa. La señal de "no editó" no es válida si no estás monitoreando.

3. El loop end-to-end

                  ┌────────────────────────────────────┐
                  │   T3 observa cada documento procesado  │
                  └────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Detector de evidencia                │
              │  - Plan ejecutado (executed_plan)     │
              │  - Confianza del Plan Generator       │
              │  - Aprobación del contable (signals): │
              │    · Dashboard: explicit approve      │
              │    · Holded: no edit en N días        │
              │    · Holded: comment positivo         │
              │  - Edición del contable (T4 signals)  │
              └──────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Agrupador por patrón                 │
              │  Clusters de evidencias por           │
              │  (intent_signature, erp_signature)    │
              └──────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Proposer                             │
              │  Cuando un cluster tiene N≥5 evidencias│
              │  positivas y 0 negativas, propone     │
              │  regla candidate                       │
              └──────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Gate humano (Intelia ops dashboard)  │
              │  - Revisión del patrón                │
              │  - Confirmación / rechazo / edición   │
              └──────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Shadow mode (14-30 días)             │
              │  Cada doc nuevo del patrón:           │
              │  - Agente genera plan                 │
              │  - Regla candidate genera plan        │
              │  - Comparator estructural             │
              │  - Si match en 95%+ → promote OK      │
              └──────────────────────────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │  Promoción al rule store correspondien│
              │  - Semántica → M1.RuleStore           │
              │  - Integración → I1.PlanStore          │
              └──────────────────────────────────────┘

4. Tipos de calcificación

T3 calcifica en dos niveles:

4.1 Calcificación semántica (M1)

(motor_input_signature) → StandaloneIntent

Cuando el LLM Account / CostCenter / Fiscal toma la misma decisión repetidamente para inputs similares, T3 propone una regla que sustituye la llamada al LLM.

Ejemplo:

"Para proveedor Glovo (NIF B12345678) + concepto que incluye comida, el LLM Account ha devuelto 62980000 las últimas 8 ejecuciones, todas aprobadas. → Propuesta de regla account_rule_R-2341."

Esta regla vive en M1. Su promoción NO afecta a I1 — el StandaloneIntent resultante sigue siendo input a I1.

4.2 Calcificación de integración (I1)

(intent_signature, erp_context_signature) → ExecutionPlan

Cuando el Plan Generator de I1 genera el mismo ExecutionPlan para inputs equivalentes, T3 propone una regla que sustituye la llamada al agente LLM.

Ejemplo:

"Para StandaloneIntent con vat_application_mechanism: REVERSE_CHARGE + holded_subdomain: tipo_pyme, el agente ha generado el mismo ExecutionPlan (sin readback intermedio) las últimas 12 ejecuciones, todas validadas por Final Validation. → Propuesta de regla i1_plan_rule_R-981."

Esta regla vive en I1. Aplica solo a Holded.

4.3 Frontera entre niveles

Una regla nunca cruza niveles. Si se descubre que una decisión "semántica" en realidad depende del estado del ERP, eso es señal de mezcla: la decisión debería estar en I1, no en M1. T3 rechaza propuestas que mezclen.

5. Sistema de evidencia

Tipos de evidencia (positiva)

Tipo Cómo se captura Peso
EXPLICIT_APPROVAL Contable aprueba en dashboard Intelia 1.0
HOLDED_INACTION Documento auto-contabilizado, contable no editó en 14 días 0.7
HOLDED_POSITIVE_COMMENT Contable comentó "OK" / "👍" / similar (LLM-extracted) 0.5
REVALIDATION_PASS T4 detecta que tras edición, contable volvió al criterio Intelia 1.2 (peso alto: el contable se autocorrigió)

Tipos de evidencia (negativa)

Tipo Peso negativo
HUMAN_EDITED_PLAN_IN_DASHBOARD Contable cambió el plan antes de aprobar
HOLDED_EDITED_BY_HUMAN T4 detecta cambio post-ejecución
HOLDED_NEGATIVE_COMMENT Comment del contable indica desacuerdo (LLM-extracted)
FINAL_VALIDATION_FAILED Plan ejecutado pero readback no coincide con declarado

Acumulación

T3 mantiene un score por (rule_signature, evidence_window):

score = Σ(evidencia_positiva * peso) - Σ(evidencia_negativa * peso)

Cuando score >= 5 con cero evidencia negativa → propuesta a Intelia ops. Cuando score <= -2 → invalidar regla existente.

Ventana temporal: últimas 60 evidencias o 90 días, lo que llegue antes.

6. Bootstrap cruzado

Es la diferenciación competitiva del producto. Lo explico en flow:

  1. Cliente nuevo onboardea. Sector hosteleria, tamaño mediano.
  2. T3 consulta su bootstrap_index: ¿hay clientes existentes con sector + tamaño similar?
  3. Si sí, T3 selecciona top 3 clientes "modelo" del mismo arquetipo (criterios: tiempo de uso, calidad de feedback, baja correction_rate).
  4. T3 clona las reglas calcificadas de los modelos al cliente nuevo, marcadas como bootstrap_origin: {client_id, sector, archetype}.
  5. Las reglas bootstrapped tienen confidence: 0.7 (vs 0.95 de las nativas).
  6. Sistema arranca: los primeros documentos del cliente nuevo matchean reglas bootstrapped → caen en BAJA confianza → dashboard Intelia para revisión humana del cliente.
  7. Si el contable nuevo aprueba sin tocar → la regla bootstrapped sube su confianza para ESTE cliente, hacia 0.95.
  8. Si el contable rechaza / edita → la regla bootstrapped se marca como no apta para este cliente. Cae confianza, eventualmente se inactiva.

Resultado: cliente N+1 onboardea con criterio "razonable de partida" en vez de cero. Coste LLM en mes 0 es bajo, no alto.

Por archetype, no por cliente individual

Calcificar de cliente X a cliente Y directamente es muy específico. Mejor: T3 mantiene archetypes (cluster de clientes similares definido por features del CompiledGuide + sector + tamaño). Las reglas se almacenan en el archetype, no en el cliente. Bootstrap cruzado = "este cliente nuevo entra al archetype hosteleria-mediano-iva-general → recibe sus reglas".

7. Shadow mode

Cuando una regla propuesta pasa el gate humano (Intelia ops aprueba), entra en shadow mode antes de promoverse:

  • Cada documento que matchee la regla candidate se procesa por ambos paths:
    1. Agente LLM genera plan (path actual).
    2. Regla candidate genera plan (sombra).
  • Un comparator estructural compara ambos planes (no diff textual; comparación por shape declarativo del ExecutionPlan).
  • Si match en ≥95% en N=15 ejecuciones consecutivas → promote. Regla pasa a active.
  • Si match en <95% → la regla candidate vuelve al gate humano con el delta del comparator.

Coste del shadow: doble llamada LLM en N=15 docs. Aceptable comparado con el ahorro futuro.

8. Invalidación de reglas

Trigger Acción
T4: GUIDE_VERSION_CHANGED Reglas con dependent_guide_versions afectadas pasan a re-shadow (no se inactivan inmediatamente; se vuelven a validar contra el agente con guía nueva)
T4: CRITERION_CHANGED desde contable Reglas que se han usado para ese cliente pasan a dashboard review — Intelia ops decide si invalidar
Edición del contable repetida (>3 veces en 30 días) Regla pasa a inactive automáticamente. Notificación a Intelia ops
Manual invalidation desde dashboard ops Inmediata. Audit obligatorio

Las reglas inactivas NO se borran. Quedan con status: inactive para auditoría y posible reactivación.

9. Riesgos arquitectónicos y mitigaciones

Riesgo Mitigación
Calcificación de errores sistemáticos del agente Gate humano obligatorio + shadow mode evita auto-promoción
Sesgo del contable (aprueba sin verificar) inflan evidencia positiva Peso de EXPLICIT_APPROVAL no es 1.0 sino que se ajusta por correction_rate_historico del contable. Contables que aprueban mucho y editan poco bajan peso
Reglas demasiado específicas (cubren 1 doc) intent_signature con bucket explícito de magnitudes (amount, dates). Si signature cubre solo 1 doc, no se propone regla
Reglas demasiado amplias (cubren 50% de docs) Métricas obligatorias: coverage_per_rule. Si una regla cubre >40% → alarma + revisión humana de signature
Bootstrap cruzado introduce sesgo masivo Reglas bootstrapped tienen mínimo de N=10 docs evaluados por dashboard antes de auto-aprobar
Loop de feedback se atasca (contable no revisa nada, T4 silencio) Si en 30 días no hay evidencia para un patrón, regla candidate se archiva — no se promueve por silencio

10. Lo que puede salir mal

Patología 1: T3 paraliza la calcificación con miedo. Si las políticas de evidencia son muy estrictas (N=20 + cero negativa + shadow de 30 días), las reglas nunca se promueven. Cliente N+1 mes 12 sigue llamando al agente al 80%. Coste LLM constante. Vigilancia: tracking de proposals_promoted_per_month. Si <5/mes a los 6 meses, relajar políticas.

Patología 2: T3 sesga hacia los clientes "modelo" del bootstrap. Los archetype se construyen con datos de los primeros clientes. Si esos primeros clientes son sesgo (early adopters tech, urbanos), el bootstrap para futuros clientes "rurales" sale mal. Vigilancia: tracking de bootstrap_success_rate por cliente. Si <60% en mes 1, revisar la definición de archetype.

Patología 3: dashboard de Intelia ops para revisar propuestas se vuelve cuello de botella. Si T3 propone 10 reglas/día y Intelia ops solo revisa 1/día, las propuestas se acumulan. Calcificación se ralentiza. Mitigación: auto-aprobación condicional para propuestas de alta confianza (N>10, score>15, cero negativas, cliente con baja correction_rate). Auto-aprobadas con audit posterior, no gate síncrono.

Patología 4: reglas calcificadas se desactualizan silenciosamente cuando cambia la fiscalidad. Cambio de tipo de IVA en España (e.g. del 21% al 22%) y las reglas calcificadas con tax_keys viejos siguen activas. Mitigación: T3 cruzado con calendario fiscal. Cambios fiscales conocidos disparan re-shadow masivo del subset afectado. Pero el detector es manual hasta que se automatice.

11. Open questions

  1. ¿Calcificación a nivel team o a nivel tax_entity? Multi-tax-entity per team: ¿reglas por tax_entity (más específicas) o por team (más bootstrap)?

  2. Schema del intent_signature y del erp_context_signature. Es lo más sensible del sistema. Mal diseñado → reglas falsas. Bien diseñado → 80% hit rate.

  3. ¿Shadow mode pasa por todos los docs o por sampling? Si pasa todos, coste alto. Si por sampling, evidencia más lenta.

  4. Comparator estructural del shadow: nivel de tolerancia.

    • ¿Match exacto del ExecutionPlan? Demasiado estricto.
    • ¿Match funcional (mismo PlanState declarado, distinto orden de ops)? Mejor pero más complejo.
  5. ¿Cómo se interpretan los comentarios del contable en Holded? LLM con prompt corto + structured output (positive | negative | neutral | criterion_change). Pero los comentarios son ambiguos en lenguaje natural.

  6. Persistence de evidencia. ¿Tabla de evidencia crece para siempre? Política de retention. Propuesta: rotación trimestral, archivo Cold Storage.

  7. Política de auto-invalidación. Si T4 declara EDITED_BY_HUMAN, ¿desconfianzar la regla afectada para SOLO ese cliente o para el archetype entero? Default: solo cliente. Pero si la edición se repite en N clientes del mismo archetype, escalar.

12. Métricas operacionales

Métrica Target
t3_rules_proposed_per_month_per_archetype 5-20. Si 0, sistema atascado. Si >50, signature demasiado fina
t3_proposal_to_promotion_rate 60-80%. Si bajo, signature falla
t3_shadow_pass_rate >90%. Si menor, propuestas con bugs
t3_invalidation_rate_per_month <10% del rule store. Si alto, reglas malas
t3_bootstrap_acceptance_rate >70% de reglas bootstrapped sobreviven primer mes
t3_intelia_ops_review_latency <48h. Si mayor, cuello de botella

Próximos docs