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

# Schemas de Validação

> Estrutura e validação dos dados para Orders e Products

## Orders Schema

O schema de Orders utiliza validação **strict**.

```typescript theme={null}
{
  order_id: string;                    // Obrigatório
  order_date: string;                  // Obrigatório (ISO 8601)
  delivery_date: string;               // Obrigatório (ISO 8601)
  request_review_at?: string;          // Opcional (ISO 8601)
  products: Array<{                    // Obrigatório (mínimo 1)
    product_id: string;                // Obrigatório
    sku: string;                       // Obrigatório
    name: string;                      // Obrigatório
    price: number;                     // Obrigatório (0-9999999999)
    url: string;                       // Obrigatório
    pictures?: string[];               // Opcional
    gtin?: string;                     // Opcional
    mpn?: string;                      // Opcional
  }>;
  customers: Array<{                   // Obrigatório (mínimo 1)
    name: string;                      // Obrigatório
    email: string;                      // Obrigatório
    phone: string;                      // Obrigatório
    origin?: string;                    // Opcional
  }>;
}
```

### Características do Schema de Orders

* **Schema strict**: não permite campos adicionais
* **Validação mínima**: produtos e clientes devem ter pelo menos 1 item
* **Datas em ISO 8601**: formato `YYYY-MM-DDTHH:mm:ss.sssZ`

### Validações de Orders

| Campo                   | Tipo   | Obrigatório | Validação        |
| ----------------------- | ------ | ----------- | ---------------- |
| `order_id`              | string | Sim         | -                |
| `order_date`            | string | Sim         | Formato ISO 8601 |
| `delivery_date`         | string | Sim         | Formato ISO 8601 |
| `request_review_at`     | string | Não         | Formato ISO 8601 |
| `products`              | array  | Sim         | Mínimo 1 item    |
| `products[].product_id` | string | Sim         | -                |
| `products[].sku`        | string | Sim         | -                |
| `products[].name`       | string | Sim         | -                |
| `products[].price`      | number | Sim         | 0 a 9999999999   |
| `products[].url`        | string | Sim         | -                |
| `products[].pictures`   | array  | Não         | Array de strings |
| `products[].gtin`       | string | Não         | -                |
| `products[].mpn`        | string | Não         | -                |
| `customers`             | array  | Sim         | Mínimo 1 item    |
| `customers[].name`      | string | Sim         | -                |
| `customers[].email`     | string | Sim         | -                |
| `customers[].phone`     | string | Sim         | -                |
| `customers[].origin`    | string | Não         | -                |

## Products Schema

O schema de Products utiliza validação **strict**, não permitindo campos adicionais.

```typescript theme={null}
{
  product_id: string;                  // Obrigatório
  name: string;                        // Obrigatório
  price: number;                        // Obrigatório (0-9999999999, padrão: 0)
  sku: string;                         // Obrigatório
  gtin: string;                        // Obrigatório
  mpn: string;                         // Obrigatório
  url: string;                         // Obrigatório
  pictures?: string[];                 // Opcional
}
```

### Características do Schema de Products

* **Schema strict**: não permite campos adicionais
* **Preço tem valor padrão**: se não fornecido, será 0
* **Todos os campos (exceto `pictures`) são obrigatórios**

### Validações de Products

| Campo        | Tipo   | Obrigatório | Validação                  |
| ------------ | ------ | ----------- | -------------------------- |
| `product_id` | string | Sim         | -                          |
| `name`       | string | Sim         | -                          |
| `price`      | number | Sim         | 0 a 9999999999 (padrão: 0) |
| `sku`        | string | Sim         | -                          |
| `gtin`       | string | Sim         | -                          |
| `mpn`        | string | Sim         | -                          |
| `url`        | string | Sim         | -                          |
| `pictures`   | array  | Não         | Array de strings           |

## Exemplos de Validação

### Orders - Exemplo Válido

```json theme={null}
{
  "order_id": "ORD-12345",
  "order_date": "2024-01-01T00:00:00.000Z",
  "delivery_date": "2024-01-05T00:00:00.000Z",
  "products": [
    {
      "product_id": "PROD-001",
      "sku": "SKU-001",
      "name": "Produto Exemplo",
      "price": 99.90,
      "url": "https://example.com/produto",
      "pictures": ["https://example.com/img1.jpg"],
      "gtin": "1234567890123",
      "mpn": "MPN-001"
    }
  ],
  "customers": [
    {
      "name": "João Silva",
      "email": "joao@example.com",
      "phone": "+5511999999999",
      "origin": "website"
    }
  ]
}
```

### Orders - Exemplo Inválido

```json theme={null}
{
  "order_id": "ORD-12345",
  "order_date": "2024-01-01T00:00:00.000Z",
  "delivery_date": "2024-01-05T00:00:00.000Z",
  "products": [],
  "customers": [],
  "invalid_field": "valor"  // ❌ Não permitido (schema strict)
}
```

**Erro retornado:**

* `products: Array must contain at least 1 element(s)`
* `customers: Array must contain at least 1 element(s)`
* `invalid_field: Unrecognized key(s) in object`

### Products - Exemplo Válido

```json theme={null}
{
  "product_id": "PROD-001",
  "name": "Produto Exemplo",
  "price": 99.90,
  "sku": "SKU-001",
  "gtin": "1234567890123",
  "mpn": "MPN-001",
  "url": "https://example.com/produto",
  "pictures": [
    "https://example.com/img1.jpg",
    "https://example.com/img2.jpg"
  ]
}
```

### Products - Exemplo Inválido

```json theme={null}
{
  "product_id": "PROD-001",
  "name": "Produto Exemplo",
  "price": 99.90,
  "sku": "SKU-001",
  "invalid_field": "valor"  // ❌ Não permitido (schema strict)
}
```

**Erro retornado:**

* `gtin: Required`
* `mpn: Required`
* `url: Required`
* `invalid_field: Unrecognized key(s) in object`

## Formato de Datas

Todas as datas devem estar no formato **ISO 8601**:

```
YYYY-MM-DDTHH:mm:ss.sssZ
```

**Exemplos:**

* `2024-01-01T00:00:00.000Z`
* `2024-01-15T10:30:00.000Z`
* `2024-12-31T23:59:59.999Z`

## Validação de Preços

Os preços devem estar no intervalo:

* **Mínimo**: 0
* **Máximo**: 9.999.999.999

<Warning>
  Valores negativos ou acima do máximo resultarão em erro de validação.
</Warning>
