# Operadores e Helpers de Json Logic

Estado canonico atual:

- Json Logic e o unico contrato ativo de regras condicionais em `@praxisui/table`.
- O editor de regras da tabela gera e valida AST Json Logic.
- O runtime da tabela avalia condicoes pelo `PraxisJsonLogicService` compartilhado em `@praxisui/core`.

## Operadores executaveis

Operadores nativos aceitos pelo runtime:

- dados e fluxo: `var`, `if`
- comparacao: `==`, `===`, `!=`, `!==`, `>`, `>=`, `<`, `<=`
- logica: `!`, `!!`, `and`, `or`
- colecoes/texto nativos: `in`, `cat`, `substr`, `merge`
- colecoes funcionais: `map`, `filter`, `reduce`, `all`, `some`, `none`
- aritmetica: `+`, `-`, `*`, `/`, `%`, `min`, `max`

Operadores Praxis registrados por padrao:

- texto/valor: `contains`, `startsWith`, `endsWith`, `matches`, `isBlank`, `coalesce`, `stringify`
- tamanho e numeros: `len`, `round`, `ceil`, `floor`, `abs`, `toNumber`
- JSON/objeto: `jsonGet`, `hasKey`
- tempo: `now`, `date`, `yearsSince`, `monthsSince`, `daysSince`, `isToday`, `inLast`, `weekdayIn`

## Conveniencias do editor

Algumas opcoes visuais do editor nao sao operadores runtime. Elas devem compilar para AST Json Logic canonica:

- `between` -> `and` com `>=` e `<=`
- `date between` -> `and` com limites de data
- `contains any` -> `or` com `contains`/`in`
- `contains all` -> `and` com `contains`/`in`
- `jsonEq` -> `===` combinado com `jsonGet`
- `jsonIn` -> `in` combinado com `jsonGet`
- `hasJsonKey` -> `hasKey`
- `not matches` -> `!` sobre `matches`

Esses nomes podem aparecer como labels, previews ou migracao de editor, mas nao devem ser persistidos como operador canonico se nao existirem no registry runtime.

## Exemplos canonicos

```json
{ "===": [{ "jsonGet": [{ "var": "payload" }, "$.user.name"] }, "Alice"] }
{ "in": [{ "jsonGet": [{ "var": "customer" }, "$.id"] }, [10, 20]] }
{ "contains": [{ "var": "tags" }, "vip"] }
{ "and": [{ ">=": [{ "var": "amount" }, 10] }, { "<=": [{ "var": "amount" }, 20] }] }
{ "weekdayIn": [{ "var": "createdAt" }, [1, 5]] }
```

## Diretriz de uso

- Use Json Logic para visibilidade, styling, renderizacao condicional e comportamento declarativo.
- Mantenha a condicao como AST serializavel e validavel.
- Nao use strings DSL como `"status == 'Ativo'"` em regras novas.
- Nao espalhe logica condicional em componentes host quando ela pertence ao contrato metadata-driven da tabela.
