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
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.
┌────────────────────────────────────┐
│ 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 │
└──────────────────────────────────────┘
T3 calcifica en dos niveles:
(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 incluyecomida, el LLM Account ha devuelto62980000las últimas 8 ejecuciones, todas aprobadas. → Propuesta de reglaaccount_rule_R-2341."
Esta regla vive en M1. Su promoción NO afecta a I1 — el StandaloneIntent resultante sigue siendo input a 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
StandaloneIntentconvat_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 reglai1_plan_rule_R-981."
Esta regla vive en I1. Aplica solo a Holded.
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.
| 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ó) |
| 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 |
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.
Es la diferenciación competitiva del producto. Lo explico en flow:
hosteleria, tamaño mediano.bootstrap_index: ¿hay clientes existentes con sector + tamaño similar?bootstrap_origin: {client_id, sector, archetype}.confidence: 0.7 (vs 0.95 de las nativas).Resultado: cliente N+1 onboardea con criterio "razonable de partida" en vez de cero. Coste LLM en mes 0 es bajo, no alto.
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".
Cuando una regla propuesta pasa el gate humano (Intelia ops aprueba), entra en shadow mode antes de promoverse:
active.Coste del shadow: doble llamada LLM en N=15 docs. Aceptable comparado con el ahorro futuro.
| 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.
| 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 |
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.
¿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)?
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.
¿Shadow mode pasa por todos los docs o por sampling? Si pasa todos, coste alto. Si por sampling, evidencia más lenta.
Comparator estructural del shadow: nivel de tolerancia.
¿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.
Persistence de evidencia. ¿Tabla de evidencia crece para siempre? Política de retention. Propuesta: rotación trimestral, archivo Cold Storage.
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.
| 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 |
t4-reverse-sync.md — el detector de evidencia más rico de T3s1-ux-hybrid.md — dónde el contable da evidencia explícita