# @horizon-apps/domain-schema-core

Utilitários centrais para esquemas de domínio da Plataforma Horizon - Geradores de schema, enriquecedores de dados, conversores e especificações.

## 📦 Instalação

```bash
npm install @horizon-apps/domain-schema-core
# ou
pnpm add @horizon-apps/domain-schema-core
```

## 🚀 Módulos e Exemplos

### 🎨 Enriquecedor de Dados
Transforma dados brutos em objetos enriquecidos para UI com formatação e localização.

```typescript
import { domainDataDisplayEnricher, formatters } from '@horizon-apps/domain-schema-core'

// Enriquecer dados com metadata
const enriched = domainDataDisplayEnricher({
  data: { valor_venda: 850000, dormitorios: 3, ativo: true },
  metadata: [
    { key: 'valor_venda', format: 'currency', unit: 'BRL' },
    { key: 'dormitorios', format: 'count' },
    { key: 'ativo', type: 'Boolean' }
  ]
})
// enriched.valor_venda.valueLabel = "R$ 850.000,00"
// enriched.ativo.valueLabel = "Sim"

// Formatadores individuais
formatters.currency(850000, 'BRL') // "R$ 850.000,00"
```

### 🔍 Filtros de Dados
Filtra campos por categoria ou chaves específicas (remove valores nulos/vazios).

```typescript
import { getFieldsByCategory, getFieldsByKeys } from '@horizon-apps/domain-schema-core'

const fields = [
  { key: 'valor_venda', value: 850000, category: 'pricing' },
  { key: 'area_total', value: 120, category: 'dimensions' },
  { key: 'descricao', value: null, category: 'info' }
]

// Filtrar por categoria
const pricing = getFieldsByCategory(fields, 'pricing')
// [{ key: 'valor_venda', value: 850000, category: 'pricing' }]

// Filtrar por chaves (remove valores nulos)
const selected = getFieldsByKeys(fields, ['valor_venda', 'descricao'])
// [{ key: 'valor_venda', value: 850000, category: 'pricing' }]
// 'descricao' foi filtrado por ter value: null
```

### 🔄 Transformadores de Dados
Transforma estruturas (arrays para campos booleanos individuais, ordenação multi-campo).

```typescript
import { expandArrayFieldToBoolean, sortFields } from '@horizon-apps/domain-schema-core'

// Expandir array para campos booleanos
const amenities = ['Piscina', 'Academia', 'Portaria 24h']
const booleanFields = expandArrayFieldToBoolean(amenities)
// [
//   { key: 'Piscina', value: true, type: 'Boolean', label: 'Piscina' },
//   { key: 'Academia', value: true, type: 'Boolean', label: 'Academia' },
//   { key: 'Portaria 24h', value: true, type: 'Boolean', label: 'Portaria 24h' }
// ]

// Ordenar por múltiplos campos
const properties = [
  { name: "Casa A", price: 300000, area: 120 },
  { name: "Casa B", price: 250000, area: 100 },
  { name: "Casa A", price: 280000, area: 110 }
]
const sorted = sortFields(properties, ["name:asc", "price:desc"])
// Resultado: Casa A (300k), Casa A (280k), Casa B (250k)
```

### ⚡ Gerador Zod
Converte schemas Horizon para validação Zod.

```typescript
import { JsonToZodGenerator } from '@horizon-apps/domain-schema-core'

const fields = [
  { key: 'nome', type: 'String', validation: { required: true, maxLength: 100 } },
  { key: 'preco', type: 'Number', validation: { min: 0 } }
]

const zodCode = JsonToZodGenerator.generate(fields, {
  schemaName: 'Property'
})
// Gera código Zod: z.object({ nome: z.string().max(100), preco: z.number().min(0).optional() })
```

## 🔧 Desenvolvimento

```bash
# Instalar dependências
pnpm install

# Build
pnpm build

# Executar testes
pnpm test

# Verificação de tipos
pnpm typecheck

# Modo watch
pnpm dev
```

## 📄 Licença

MIT

---

*Parte do ecossistema da Plataforma Horizon*