Traducción. Autoritativo: ../../adr/adr-012-segment-dsl.md.
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.