Os campos personalizados não são apenas um recurso: como avaliar a flexibilidade do modelo de dados em uma aplicação empresarial auto-hospedada
Os campos personalizados podem fazer uma aplicação empresarial se adaptar ao seu processo ou criar dados inconsistentes, inacessíveis e difíceis de migrar. Use este framework baseado em evidências para testar o modelo de dados subjacente antes de confiar registros operacionais ao sistema.

Campos personalizados são uma decisão de governança de dados, não uma caixa de seleção
Uma página de produto que diz “campos personalizados compatíveis” responde muito pouco. Um campo pode ser uma caixa de texto sem restrições, uma lista controlada de valores permitidos, um vínculo para outro registro ou uma tabela repetível de registros relacionados. Essas escolhas determinam se as pessoas conseguem inserir dados consistentes, se a aplicação consegue impor regras de negócio e se a informação continua útil em relatórios, exportações e integrações.
Trate a avaliação como uma questão de adequação do modelo de dados: a aplicação consegue representar as entidades, os relacionamentos e as regras que sua operação realmente utiliza? Uma demonstração rápida de configuração não é evidência suficiente. Você precisa verificar como a mesma informação personalizada se comporta quando registros são criados, editados, finalizados, pesquisados, exportados, importados e acessados por usuários com diferentes permissões.
Isso é especialmente importante em uma aplicação auto-hospedada. A hospedagem dá a você controle sobre onde a carga de trabalho é executada, mas não decide quais campos devem existir, quem pode acessá-los, como um valor descontinuado é interpretado ou se uma integração depende da definição de um campo. Essas são decisões de governança que sua organização precisa tomar.
- Não avalie “campos personalizados: sim/não”. Avalie o ciclo de vida completo de um campo representativo.
- Separe a conveniência da interface do usuário das regras de dados aplicadas e do controle de acesso.
- Peça evidências em um ambiente de teste com seus próprios registros realistas, e não apenas exemplos do fornecedor.

Comece com um modelo de registro pequeno e real
Antes de abrir uma instância de avaliação, registre um fluxo de trabalho pequeno, porém relevante. Um registro de prestação de serviço, conta de cliente, solicitação de compra ou solicitação de alteração de projeto costuma ser um ponto de partida melhor do que uma lista abstrata de campos desejados. Inclua informações compartilhadas em todo o registro, informações que pertencem a outra entidade e informações que se repetem.
Para cada item, decida o que ele significa estruturalmente. Uma observação em texto livre é apropriada quando se espera variação e não é necessário um agrupamento confiável. Um valor controlado é mais adequado para um status, categoria ou motivo de negócio que precisa ser filtrado e relatado de modo consistente. Um relacionamento é adequado quando o valor é, na verdade, outra entidade mantida, como um cliente, fornecedor ou responsável. Itens relacionados que se repetem devem ser modelados como linhas repetidas quando a aplicação oferece suporte a esse padrão, em vez de serem inseridos em um campo de texto separado por vírgulas.
A documentação do Frappe ilustra essas distinções: Data é texto genérico; Select usa valores especificados em suas opções; Link conecta a outro registro mestre; e Table representa um relacionamento de tabela filha. A documentação de Child DocType também descreve registros filhos como anexados a um registro pai, mantendo informações do pai e da sequência da linha. Os nomes precisos variam entre produtos, mas a pergunta de avaliação é universal: a estrutura disponível corresponde ao significado de suas informações? Consulte a documentação de Field Types do Frappe (https://docs.frappe.io/framework/user/en/basics/doctypes/fieldtypes) e a documentação de Child / Table DocType (https://docs.frappe.io/framework/user/en/basics/doctypes/child-doctype).
- Liste as entidades principais: por exemplo, cliente, projeto, solicitação e pessoa.
- Identifique relacionamentos um para um, um para muitos e muitos para um.
- Marque todos os valores que precisam ser controlados, em vez de digitados livremente.
- Identifique dados repetitivos, como vários contatos, marcos, itens ou aprovações.
- Escreva as regras de negócio que tornam um registro completo ou válido.

Verifique tipos de campo e regras na documentação oficial
Leia a documentação oficial da aplicação sobre tipos de campo e configuração de regras; em seguida, verifique esses recursos na versão que você pretende usar. Vá além de saber se um campo pode ser adicionado. Determine se ele pode ser obrigatório, receber um valor padrão, ser validado, limitado a valores controlados e se tornar condicionalmente obrigatório ou somente leitura.
Por exemplo, o Frappe documenta configurações independentes para valores padrão, mandatory_depends_on e read_only_depends_on. Isso permite, em princípio, testar regras como exigir um motivo quando um registro atinge determinado estado ou impedir outras edições quando uma condição é atendida. Não deduza que outra aplicação tem comportamento idêntico apenas porque ambas oferecem campos personalizados. Consulte a documentação de DocField do Frappe: https://docs.frappe.io/framework/user/en/basics/doctypes/docfield.
Teste deliberadamente entradas inválidas. Um usuário pode deixar um valor obrigatório em branco? Pode escolher uma categoria inválida? O valor padrão está visível e é compreensível? A aplicação aplica a regra no momento de salvar, importar e usar a API, quando essas rotas forem relevantes? Uma regra que funciona apenas em um formulário ainda pode deixar registros inconsistentes em outros lugares.
- Crie um campo obrigatório e tente salvar sem preenchê-lo.
- Adicione um valor padrão e verifique quando ele é aplicado.
- Use um campo de valor controlado para uma categoria de relatório; tente inserir um valor não aprovado.
- Teste uma condição que torne um campo obrigatório ou somente leitura.
- Registre se cada regra é aplicada na interface, nas importações e nas APIs compatíveis.
Teste a consistência entre registros, equipes e fluxos de trabalho
Uma configuração utilizável deve ser aplicada de maneira consistente na escala da sua operação. Crie diversos registros por meio do fluxo de trabalho normal, usando diferentes usuários ou funções, se possível. Confirme que cada equipe vê as mesmas definições de campo pretendidas, os mesmos valores padrão e os mesmos valores controlados quando a política exigir consistência.
Preste atenção especial aos limites do fluxo de trabalho. Um campo que pode ser editado depois que um documento é finalizado pode alterar seu significado, status, valor ou efeitos posteriores. A orientação Allow on Submit do Frappe alerta explicitamente que campos editáveis após o envio devem ser seguros para alteração e destaca dependências em relatórios, fluxos de trabalho, integrações, permissões e lógica do lado do servidor. Use esse princípio mesmo se estiver avaliando outra plataforma. Consulte a documentação Allow on Submit do Frappe: https://docs.frappe.io/framework/doctypes/allow-on-submit.
Quando um processo exige fidelidade histórica, decida quais valores devem permanecer fixos após a aprovação ou finalização e quais são operacionalmente seguros para alterar. Registre o resultado como uma regra, e não como uma expectativa informal.
- Crie registros equivalentes em mais de um contexto de equipe.
- Compare a disponibilidade dos campos, os valores e os padrões.
- Mova um registro por seus estágios relevantes de status ou aprovação.
- Tente edições permitidas e proibidas após a finalização.
- Identifique relatórios, integrações e permissões afetados por cada campo editável.
Avalie permissões separadamente para registros, campos, relatórios, exportações e importações
O teste de permissões não deve terminar em “este usuário consegue abrir o registro?”. Determine quem pode visualizar, criar, editar e excluir registros; quem pode ver ou editar campos confidenciais; e quem pode alterar a própria definição do campo. Teste também relatórios, exportações e importações de forma independente. Uma pessoa que não pode alterar um registro ainda pode conseguir exportar informações se essa capacidade for concedida separadamente.
O Frappe documenta permissões distintas para leitura, gravação, criação, exclusão, visualização de relatórios, exportação em CSV/Excel e uso de sua Data Import Tool. Também documenta níveis de permissão que podem agrupar campos e aplicar diferentes funções a cada nível. Esses exemplos mostram por que uma única verificação ampla de permissões é inadequada. Consulte a documentação Users and Permissions do Frappe: https://docs.frappe.io/framework/user/en/basics/users-and-permissions.
Não trate campos ocultos como seguros por padrão. Determine, por meio da documentação oficial do produto e de um teste com conta restrita, se os campos confidenciais são omitidos de formulários, relatórios, exportações e métodos compatíveis de acesso remoto — e se tentativas diretas de lê-los ou gravá-los são negadas. Teste o comportamento do produto e da versão específicos que você está considerando, em vez de presumir que uma configuração de visibilidade é um controle de acesso.
- Teste um usuário padrão, um gerente, um usuário de relatórios e um administrador.
- Tente visualizar, editar e criar valores de campos confidenciais com cada função.
- Teste o acesso a relatórios e a exportação de dados como ações separadas.
- Teste se um usuário de importação consegue preencher campos restritos.
- Use uma conta restrita para tentar leituras e gravações de dados confidenciais por APIs compatíveis.
- Documente quem pode alterar definições de campo e listas de valores controlados.
Verifique se os dados personalizados funcionam onde as decisões são tomadas
Um campo personalizado só tem valor operacional se as pessoas puderem utilizá-lo além do formulário de registro. Teste-o em visualizações de lista, filtros, ordenação, visualizações salvas, painéis, relatórios e exportações. Verifique se os resultados são compreensíveis quando um campo está vazio, quando os valores mudam ao longo do tempo e quando um registro possui várias linhas filhas.
O Frappe documenta recursos de lista que incluem filtros, ordenação e paginação, além de Query Reports com colunas e filtros configuráveis associados a um DocType de referência para controle de acesso. Esses são recursos úteis a procurar, e não uma suposição de que todas as aplicações expõem campos personalizados das mesmas maneiras. Consulte a documentação List do Frappe: https://docs.frappe.io/framework/user/en/api/list.
Use uma pergunta do seu ritmo operacional semanal. Por exemplo: “Quais solicitações ativas têm um motivo de alto risco e nenhum responsável atribuído?”. Se você não consegue respondê-la de modo confiável sem abrir registros manualmente ou exportar e corrigir uma planilha, o projeto de campo proposto ainda não comprovou seu valor.
- Filtre registros por cada campo personalizado importante.
- Ordene por um campo de data, numérico ou de valor controlado, quando relevante.
- Crie ou examine um relatório que contenha campos personalizados e dados de relacionamento.
- Exporte um conjunto representativo de registros e examine os nomes das colunas, os valores e os campos vazios.
- Verifique se as permissões de relatórios e exportações correspondem à sua política de acesso.
Acompanhe campos personalizados em APIs, importações e aplicações conectadas
Uma integração pode transformar um campo bem projetado em uma dependência frágil se seu nome, valores permitidos, permissões ou comportamento de atualização não estiverem claros. Identifique todas as rotas pelas quais um registro representativo pode ser criado ou alterado: a interface da aplicação, importações, uma API compatível e qualquer fluxo de trabalho conectado que você pretenda utilizar.
A documentação REST do Frappe descreve a seleção de campos, filtragem por condições, ordenação e paginação de registros. Esses comportamentos documentados ilustram um teste eficaz: verifique se seus campos personalizados são retornados quando solicitados e podem ser filtrados quando necessário. Separadamente, teste qualquer comportamento de criação, atualização ou exclusão exigido por sua integração em relação à documentação oficial e à versão que pretende usar. Consulte a documentação da API REST do Frappe: https://docs.frappe.io/framework/user/en/api/rest.
As operações em massa merecem seu próprio teste. A documentação de Data Import do ERPNext informa que as planilhas enviadas são validadas antes da importação, os avisos são apresentados por linha ou coluna e devem ser resolvidos antes da importação, e as importações bem-sucedidas são registradas em um log de importação. Independentemente de sua aplicação escolhida funcionar dessa forma ou não, determine se os erros são encontrados antes que os dados de negócio sejam gravados e se o resultado é auditável. Consulte a documentação de Data Import do ERPNext: https://docs.frappe.io/erpnext/data-import.
- Crie um registro representativo por cada rota compatível necessária.
- Leia-o novamente e compare cada valor personalizado com a origem.
- Atualize um campo permitido e confirme os efeitos esperados no fluxo de trabalho.
- Tente uma atualização inválida e examine o erro e o estado resultante do registro.
- Teste seleção de campos, filtragem, ordenação e paginação na API, se as integrações precisarem desses recursos.
- Execute uma pequena importação que contenha linhas válidas e linhas deliberadamente inválidas.
Avalie a segurança das alterações de esquema antes de precisar delas
Os campos evoluem. As equipes renomeiam categorias, substituem processos e descontinuam valores. A pergunta essencial não é apenas se um administrador consegue fazer uma alteração, mas o que acontece depois com registros existentes, relatórios, integrações e interpretação histórica.
Mantenha um registro de alterações para cada campo relevante: finalidade de negócio, responsável, tipo, valores permitidos, padrão, validação, política de acesso, dependências e abordagem de descontinuação. Antes de aprovar uma alteração, identifique quais relatórios salvos, importações, consumidores de API e fluxos de trabalho fazem referência a ele. Teste a alteração em cópias de registros representativos antes de aplicá-la amplamente.
Os valores controlados exigem cuidado especial. A documentação do ORM do Odoo descreve um recurso ondelete para opções Selection estendidas, incluindo definir um valor como nulo, excluir em cascata, definir um padrão, atribuir uma substituição especificada ou executar processamento personalizado. Esse é um padrão útil para decisões: quando um valor é descontinuado, decida explicitamente como os registros que contêm esse valor serão tratados. Nunca permita que o significado histórico se torne acidental. Consulte a documentação da API ORM do Odoo: https://www.odoo.com/documentation/19.0/developer/reference/backend/orm.html.
- Renomeie um campo de teste não crítico e examine relatórios, exportações e integrações.
- Tente uma alteração de tipo de campo usando valores existentes representativos.
- Descontinue um valor controlado e verifique o tratamento dos registros existentes.
- Documente uma abordagem aprovada de substituição, valor nulo ou outra forma de retenção para valores descontinuados.
- Verifique se registros finalizados exigem um controle de alterações mais rigoroso.
- Mantenha um registro das decisões de esquema e de suas datas de vigência.
Perguntas frequentes
Qual é o teste mais importante ao avaliar campos personalizados?
Crie um modelo de registro realista e acompanhe-o por todo o ciclo de vida: entrada, validação, fluxo de trabalho, permissões, pesquisa, relatórios, exportação, importação e qualquer integração de API necessária. Um campo que funciona apenas em um formulário ainda não comprovou ser operacionalmente útil.
Toda categoria personalizada deve ser uma lista suspensa ou um valor controlado?
Não. Use valores controlados quando for necessária consistência para filtragem, relatórios, automação ou governança. Use texto livre quando houver variações significativas esperadas e elas não devem ser forçadas em uma lista artificial. Se o valor for, na verdade, outro objeto de negócio mantido, teste um relacionamento em vez de uma lista suspensa.
Por que devemos testar o acesso por API a campos restritos?
Ocultar um campo em uma interface de usuário não é evidência suficiente de que os dados subjacentes estão protegidos. Teste um usuário restrito por todas as rotas de acesso compatíveis que você pretende usar, incluindo APIs, relatórios, exportações e importações, para verificar se os controles de acesso são aplicados.
O que devemos preservar durante uma migração?
Preserve identificadores estáveis de registros quando a aplicação os utiliza para atualizações, mapeie relacionamentos deliberadamente e teste anexos e linhas filhas repetíveis separadamente. A documentação do ERPNext, por exemplo, informa que as atualizações usam a coluna ID exportada e que remover uma linha de tabela filha de um arquivo de atualização é tratado como uma exclusão intencional. Sua aplicação de destino pode ser diferente, portanto ensaie seu comportamento real. Consulte a documentação de Data Import do ERPNext: https://docs.frappe.io/erpnext/data-import.
Quando uma aplicação configurável é a escolha errada?
Escolha um sistema desenvolvido para uma finalidade específica ou desenvolvimento dedicado quando seu processo central depender de regras complexas de domínio, cálculos especializados, controles regulatórios excepcionalmente rigorosos, tratamento de relacionamentos em alto volume ou um modelo de dados que não possa ser representado e governado de forma limpa com as estruturas compatíveis da aplicação. A configuração deve reduzir o risco operacional, e não ocultar uma incompatibilidade fundamental.
Fontes e leituras adicionais
- Field Types — Frappe Framework
- DocField — Frappe Framework
- Child / Table DocType — Frappe Framework
- Users and Permissions — Frappe Framework
- REST API — Frappe Framework
- List — Frappe Framework
- Query Report — Frappe Framework
- Data Import — ERPNext
- Allow on Submit — Frappe Framework
- ORM API — Odoo