Pular para o conteúdo principal

Referência do modelo de dados

A tela de modelo de dados, onde tipos de entidade e seus atributos são definidos.

Configurações de atributo

Todos os campos que uma definição de atributo aceita. Alterável responde à pergunta mais cara de errar — se você ainda pode mudar isto depois que já existem registros.

CampoAceitaPadrãoAlterávelO que faz
entityTypeIdO identificador do tipo de entidadeNãoO tipo ao qual este atributo pertence. Mover um atributo entre tipos não é uma edição; é um atributo novo.
name1–100 caracteres: letras, dígitos e sublinhado; deve começar por letraNãoO identificador usado por regras de correspondência, regras de validação e pela API. Imutável porque toda regra que o nomeia quebraria silenciosamente.
slug1–100 caracteres: minúsculas, dígitos e hífenDerivado do nomeNãoIdentificador seguro para URLs.
displayName1–255 caracteresSimO rótulo legível exibido no console. Pode mudar a qualquer momento.
descriptionAté 2.000 caracteresSimOrientação para quem for preencher o campo.
dataTypeUm dos 12 tipos abaixoSimO formato do valor. Veja a nota sobre promoção adiante.
subFieldsDe 1 a 40 sub-camposNãoAs partes nomeadas de um composto. Obrigatório quando o tipo é composto, e fixo depois de criado.
rdmLookupTypeIdUm tipo de lookupSimRestringe os valores aos códigos daquela lista. Obrigatório quando o tipo é lookup.
rdmHierarchyIdUma hierarquiaSimVincula os valores a um nível de uma hierarquia nivelada. Anda junto com o nível abaixo.
rdmHierarchyLevelOrderInteiro, 1 ou maiorSimEm qual nível daquela hierarquia o valor se situa.
valueTypeLookupIdUm tipo de lookupSimFornece os tipos de uso por valor (residencial, comercial, celular). Diferente de rdmLookupTypeId: aquele restringe o valor, este restringe o tipo de uso associado a cada valor.
isRequiredverdadeiro ou falsofalseSimUm atributo obrigatório bloqueia a criação do registro quando ausente.
isUniqueverdadeiro ou falsofalseSimDois registros do mesmo tipo não podem compartilhar um valor.
isSearchableverdadeiro ou falsotrueSimApenas intenção registrada — veja a nota adiante.
isPiiverdadeiro ou falsofalseSimApenas intenção registrada — veja a nota adiante.
defaultValueQualquer valor do tipo declaradoSimAplicado quando um registro chega sem valor.
displayOrderInteiro, 0 ou maior0SimOrdenação dentro do seu grupo em telas e formulários de entidade.
attributeGroup1–100 caracteres, texto livreSimA seção nomeada em que o atributo aparece. Texto livre em vez de lista fixa, para que os grupos surjam conforme cada tenant.
maxCardinalityInteiro, 0 ou maior1SimQuantos valores um registro pode guardar. Veja o aviso adiante.
metadataObjeto arbitrário{}SimSuas próprias anotações. A plataforma armazena e devolve sem interpretar.

Tipos de dado

string · number · integer · decimal · boolean · date · datetime · email · phone · json · lookup · composite

Um tipo pode ser promovido no lugar

dataType é editável, o que não é o que a maioria dos sistemas de esquema permite. O uso pretendido é a promoção: um atributo que começou como string de texto livre pode virar um lookup vinculado a uma lista controlada assim que você tiver os dados de referência — um código de diagnóstico saindo de texto digitado para uma terminologia clínica vinculada, por exemplo.

As regras de vínculo são reavaliadas contra o estado resultante, então uma promoção que deixaria o atributo inconsistente é recusada naquele momento.

Reduzir maxCardinality não remove valores existentes

O limite é aplicado quando um valor é gravado, não retroativamente. Reduza de 3 para 1 e os registros que já guardam três valores mantêm os três; apenas as gravações seguintes são rejeitadas.

Ou seja, reduzir não é uma limpeza. Se você precisa que os valores extras desapareçam, remova-os deliberadamente — caso contrário o modelo afirma ser de valor único enquanto os dados não são.

isSearchable e isPii ainda não mudam comportamento

Os dois sinalizadores são armazenados na definição e devolvidos pela API, e nenhum dos dois é levado em conta.

  • Desligar isSearchable não remove o atributo da busca por atributo. A busca resolve atributos pelo nome; ela nunca consulta esse sinalizador.
  • Marcar isPii não mascara, oculta nem restringe nada. O mascaramento é regido inteiramente por regras de mascaramento, configuradas à parte, que não leem esse sinalizador.

Use-os para registrar intenção e trate-os como documentação para sua própria equipe. Não dependa de nenhum dos dois como controle. Se precisa ocultar um atributo, escreva uma regra de mascaramento; se precisa tirá-lo da busca, hoje não é possível excluí-lo.

Atributos compostos

Um composto guarda sub-campos nomeados em vez de um escalar. A comparação pode mirar um sub-campo com notação pontuada.

Cada sub-campo aceita:

CampoAceitaPadrãoO que faz
name1–100 caracteres, camelCase, começando por letraO identificador usado em caminhos pontuados, como address.postalCode.
displayName1–255 caracteresO rótulo exibido para esta parte.
dataTypeUm dos dez tipos escalaresO formato da parte.
isRequiredverdadeiro ou falsofalseSe esta parte precisa estar presente.
maxLength1 a 10.000Limite de comprimento para partes textuais.
formatAté 100 caracteresUma dica de formato para esta parte.
rdmLookupTypeIdUm tipo de lookupRestringe esta parte a uma lista controlada — uma parte de país vinculada à ISO 3166, por exemplo.

Um composto pode ter de 1 a 40 sub-campos.

Compostos não se aninham

O tipo de um sub-campo vem apenas dos dez tipos escalares — json e composite ficam de fora. Um endereço pode conter um CEP, mas não pode conter outro composto. Um único nível, deliberadamente: compostos aninhados não têm caminho pontuado sensato nem comparador que consiga pontuá-los.

RegraComportamento
Um sub-campo que não existeRejeitado ao salvar o perfil
Um comparador escalar num composto inteiroRejeitado — dois compostos diferentes se comparariam como iguais
Um comparador ciente de composto num composto inteiroPermitido
Um valor não estruturado gravado num atributo compostoRejeitado, tanto na API quanto no banco de dados

A rejeição de comparadores escalares em compostos inteiros não é uma verificação de conveniência. Sem ela, dois endereços completamente sem relação se comparam como iguais e o tipo de entidade consolida de forma catastrófica.

Atributos multivalorados

ComportamentoDetalhe
ArmazenamentoVários valores por atributo, cada um opcionalmente com um tipo de uso
PreferencialNo máximo um valor preferencial por tipo de uso no registro dourado
ComparaçãoValores são enumerados; o melhor pareamento é assumido
BlocagemCada valor emite sua própria chave
SobrevivênciaAgrupada por tipo de uso; cada um resolve independentemente

Tipos de relacionamento

ConfiguraçãoFinalidade
Tipos de entidade de origem e destinoO que o relacionamento liga
CardinalidadeQuantos vínculos são permitidos por ponta
Nome de exibição e nome inversoPara que o vínculo se leia corretamente de qualquer ponta
SimétricoSe a direção é significativa
AcíclicoSe ciclos são rejeitados

Acíclico importa para hierarquias: sem isso, uma cadeia de propriedade pode fechar num laço que nenhuma agregação resolve.

Validação do modelo

Configuração referenciada precisa existir e estar ativa ao salvar. Um perfil que nomeia um atributo inexistente, ou uma regra que nomeia um tipo de lookup aposentado, é rejeitado naquele momento em vez de falhar silenciosamente depois.

Este é o contrato geral: configuração que não poderia funcionar é recusada enquanto você ainda está olhando para ela.

A seguir


Última verificação no commit d3c2586b (2026-08-03)