> For the complete documentation index, see [llms.txt](https://docs.hominy.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hominy.com.br/guia-do-produto/campos-dinamicos.md).

# Campos dinâmicos

Os **campos** definem quais dados cada card carrega. Eles são configurados por fase, sem código, e ficam armazenados de forma flexível — você adiciona um campo novo sem precisar mexer no banco.

## Como funcionam (modelo)

As **definições** dos campos ficam em `field_definitions` (uma por fluxo/fase). Os **valores** ficam num único JSONB na coluna `cards.field_values`, indexado pelo id da definição:

```json
{
  "field-uuid-1": "João Silva",
  "field-uuid-2": 15000.50,
  "field-uuid-3": ["opt1", "opt2"]
}
```

Esse modelo **JSONB** (e não EAV) torna a leitura de um card uma única linha, e o Hominy cria um índice GIN sobre `field_values` para buscas.

## Tipos de campo

O Hominy oferece um catálogo amplo de tipos (mais de 20), entre eles:

| Categoria     | Tipos                                                                                                                                                                                |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Texto**     | texto curto, texto longo, e-mail, telefone, URL                                                                                                                                      |
| **Número**    | número, moeda, percentual                                                                                                                                                            |
| **Data**      | data, data/hora                                                                                                                                                                      |
| **Escolha**   | seleção única, seleção múltipla, checkbox                                                                                                                                            |
| **Pessoas**   | atribuído, responsável                                                                                                                                                               |
| **Avançados** | **fórmula** (calcula a partir de outros campos), **conexão** (vincula a outro card), **database** (puxa um registro de uma base), **id automático** (sequência/identificador), anexo |

## Regras e validações

Cada campo pode ter:

* **Obrigatoriedade** — incluindo a exigência para **mover de fase**.
* **Visibilidade condicional** (`conditional_visibility`) — mostrar/esconder o campo conforme o valor de outro.
* **Validação por Regex** (`custom_validation_pattern`) — regra customizada de formato.
* **Permissão por campo** — papéis que podem **ver** (`view_roles`) e **editar** (`edit_roles`) aquele campo.

## Campos especiais

* **Fórmula** — calcula valores a partir de outros campos do card (ex.: `quantidade × preço`).
* **Conexão** — referencia um ou mais cards (pai/filho ou entre fluxos).
* **Database** — exibe um seletor de registros de uma [base de dados](/guia-do-produto/bases-de-dados.md); o card guarda `{ id, label }` do registro escolhido.
* **ID automático** — gera um identificador sequencial ou alfanumérico por card.

> Para adicionar um tipo de comportamento novo, use as **opções** (`options` JSONB) da definição do campo — nunca crie migrations para "tipos de campo".


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hominy.com.br/guia-do-produto/campos-dinamicos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
