> ## Documentation Index
> Fetch the complete documentation index at: https://internal.softcrum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ADR-012 — DSL de segmentos v1 + evaluación incremental

> DSL declarativo en JSON, versionado, deliberadamente restringido para que la evaluación incremental por evento sea posible: condiciones tipadas sobre atributos de perfil y agregados de eventos con ventana.

Estado: Propuesto · Refs: D6, DEC-G5

> Traducción. Autoritativo: [`../../adr/adr-012-segment-dsl.md`](/adr/adr-012-segment-dsl).

## Decisión

DSL declarativo en JSON, versionado, deliberadamente restringido para que la evaluación incremental
por evento sea posible: condiciones sobre atributos tipados del perfil · agregados de eventos con
ventana (`count`, `sum(propiedad)`, `first_seen`, `last_seen` sobre un nombre de evento en los
últimos N días o todo el tiempo) · pertenencia a otros segmentos (acíclica) y a niveles · AND/OR/NOT.
Cubre RFM (recency = last\_seen, frequency = count, monetary = sum). Las plantillas RFM
preconstruidas llegan por taxonomía vertical.

La membresía se materializa en `core.segment_members` con historial `entered_at`/`exited_at`; los
diffs emiten `segment.entered|exited`. Los segmentos cuyas condiciones no se pueden evaluar
incrementalmente se marcan `nightly_only` al crearse — el constructor se lo dice al usuario. El
recálculo completo por tenant corre al tier de frescura de datos (nocturno por defecto) como red de
seguridad.

## Consecuencias

* Disparadores de segmento en tiempo real con cómputo acotado. − Techo de expresividad; extender el
  DSL es un cambio versionado explícito, nunca ad hoc.
