Templates de Documentos
Gere documentos automaticamente com dados do sistema
Os Templates de Documentos permitem criar modelos de documentos (contratos, termos, declarações, relatórios) que são preenchidos automaticamente com dados reais dos itens de uma categoria. Você monta o modelo uma vez e o ENSPACE gera o documento final sempre que necessário, substituindo as marcações do template pelos dados do item.
Para acessar, vá até Configurações > Estrutura > Categorias, selecione a categoria e clique em Templates de Documentos.
O editor de templates é o OnlyOffice, um editor de documentos integrado ao ENSPACE com funcionalidades similares ao Microsoft Word — formatação de texto, tabelas, imagens, cabeçalhos, rodapés e estilos. Tudo o que você faz em um editor de texto convencional, pode fazer aqui.
Visão geral: como funciona
Como os templates se conectam à categoria
O diagrama abaixo mostra como os templates utilizam os campos da categoria para gerar documentos automaticamente dentro dos itens.
Jornada do usuário
O processo completo, do template ao documento final, segue esta jornada:
4. Vincular ao formulário
Conecte o template a um campo Editor de Documento em um formulário da categoria.
As seções abaixo detalham cada etapa.
Etapa 1 — Criar o template
Acesse os templates da categoria
Vá até Configurações > Estrutura > Categorias, selecione a categoria e clique em Templates de Documentos.
Crie um novo template
Clique em Criar e preencha:
- Nome — identificação do template na listagem (ex: "NDA", "Contrato de Prestação de Serviço").
- Saída — nome do arquivo gerado ao ser baixado (ex:
NDA,Contrato_Servico). - Descrição — texto opcional para descrever a finalidade do template.
{{ no campo, uma lista de campos da categoria é exibida para seleção. Isso permite gerar nomes dinâmicos como NDA_{{data.nome_cliente}}, que será resolvido para NDA_João_Silva.docx no momento da geração.Salve e abra o editor
Após salvar, clique no menu de ações do template e selecione Criar. Você pode iniciar um documento em branco ou importar um modelo existente. O editor OnlyOffice será aberto.
Etapa 2 — Inserir variáveis
As variáveis são marcações que representam dados reais dos campos da categoria. Elas aparecem no template como texto entre chaves duplas (ex: {{data.nome_cliente}}), mas são substituídas pelos dados reais somente no momento da geração do documento final — dentro do editor, você verá apenas as marcações.
Para inserir uma variável, clique no botão # (Variáveis) no topo do editor, selecione o campo desejado e cole no documento com CTRL + V.
Para entender o formato das variáveis, a diferença entre campos personalizados e metadados, e como evitar erros, consulte a seção Como usar variáveis no template abaixo.
Etapa 3 — Adicionar lógica
Os blocos lógicos permitem controlar quando um conteúdo aparece e quantas vezes ele se repete no documento. Eles são inseridos pelo botão de Comandos (ícone de chave de fenda) no topo do editor: ao clicar no tipo desejado, o sistema copia a estrutura para a área de transferência. Cole no documento com CTRL + V.
Existem três tipos de blocos:
| Bloco | Estrutura copiada | Para que serve | Exemplo de uso |
|---|---|---|---|
| Condicional de texto | {{}}{{IF variavel === 'valor'}} conteúdo {{END-IF}} | Exibe conteúdo se um campo de texto tiver determinado valor | "Se o status for 'Aprovado', mostre este parágrafo" |
| Condicional de valor | {{}}{{IF variavel === 123}} conteúdo {{END-IF}} | Exibe conteúdo se um campo numérico atender a uma condição | "Se o valor for maior que 10.000, mostre esta cláusula" |
| Bloco de repetição | {{}}{{FOR item IN variavel}} conteúdo {{= $item.subcampo}} {{END-FOR item}} | Repete conteúdo para cada item de uma lista | "Para cada produto da lista, mostre nome e preço" |
Para aprender a preencher cada estrutura com seus dados reais, consulte a seção Como usar blocos lógicos no template abaixo.
Etapa 4 — Vincular o template a um formulário
Após montar o template, é necessário vinculá-lo a um campo do tipo Editor de Documento dentro de um formulário da categoria. Esse é o campo onde o usuário final vai gerar o documento.
Acesse o formulário da categoria
Vá até Configurações > Estrutura > Categorias, selecione a categoria e clique em Formulários. Abra o formulário desejado.
Adicione um campo Editor de Documento
No construtor do formulário, adicione um bloco com um campo do tipo Editor de Documento.
Configure o template permitido
Clique no botão de configuração do bloco. No campo Template permitido, selecione o template que você criou. Ative as permissões desejadas para o documento (visualizar, editar, gerar).
Salve o formulário
As configurações serão aplicadas ao formulário.
Etapa 5 — Gerar o documento final
Com o template vinculado ao formulário, o usuário final pode gerar documentos ao criar ou editar itens.
Abra o item
Na tela de itens da categoria, abra o item desejado (via sidebar ou tela dedicada).
Acesse o campo Editor de Documento
Clique no campo configurado com o template.
Selecione o template
Clique em Usar template. A lista exibirá os templates configurados para aquele formulário. Selecione o desejado.
Confirme a geração
O sistema substituirá todas as variáveis pelos dados reais do item e gerará o documento. Revise o resultado e clique em Confirmar.
O documento gerado fica salvo no próprio campo do item. Se o resultado não for o esperado, você pode gerar novamente selecionando outro template ou o mesmo.
Onde o documento gerado fica salvo
O documento gerado fica armazenado como dado do item, dentro do campo Editor de Documento. Para visualizá-lo na tela dedicada do item, configure uma Pasta de Visualização do tipo Documento vinculada ao campo.
Para saber como montar a barra de pastas do item, consulte Construtor de Pastas.
Observações importantes
- Se uma variável não tiver valor preenchido no item, o espaço correspondente ficará vazio no documento final.
- Atualizar o template não afeta documentos já gerados — cada documento é uma cópia independente gerada no momento da criação.
- Documentos são gerados um por vez, por item. Não é possível gerar em lote.
- O editor de templates (OnlyOffice) serve apenas para montar o modelo — o documento final é visualizado após a geração no item.
Como usar variáveis no template
Esta seção detalha como as variáveis funcionam dentro do editor de templates.
Inserindo uma variável
Clique no botão Variáveis (#)
No topo do editor, clique no botão # (Variáveis).
Selecione o campo desejado
A lista exibe todos os campos da categoria. Clique no campo que deseja inserir.
Cole no documento
O sistema copia automaticamente a variável para a área de transferência (uma notificação verde confirmará). Cole no documento com CTRL + V na posição desejada.
Formato das variáveis
As variáveis seguem o padrão {{data.referencia_tecnica_do_campo}}. A referência técnica é o identificador interno do campo, definido na criação do campo — diferente do nome de exibição.
| Nome do campo | Referência técnica | Variável no documento | Resultado gerado |
|---|---|---|---|
| Nome do cliente | nome_cliente | {{data.nome_cliente}} | João da Silva |
| Data do contrato | data_contrato | {{data.data_contrato}} | 10/03/2026 |
| Valor total | valor_total | {{data.valor_total}} | R$ 1.500,00 |
Alguns campos são metadados do item e não usam o prefixo data.:
| Nome do campo | Variável no documento | Resultado gerado |
|---|---|---|
| E-mail do requisitante | {{request_email}} | joao@empresa.com |
| Referência do item | {{reference}} | REF-00123 |
| ID do item | {{id}} | 4521 |
| Data de criação | {{created_at}} | 2026-03-10T14:30:00 |
Se a referência de uma variável estiver incorreta (campo inexistente ou referência errada), o texto da variável aparecerá visível no documento final em vez de ser substituído por um valor. Sempre use o botão # para inserir variáveis em vez de digitá-las manualmente.
Para entender o sistema de variáveis em profundidade, consulte Variáveis e Formatação.
Como usar blocos lógicos no template
Esta seção detalha como preencher cada tipo de bloco lógico com seus dados reais.
Bloco condicional de texto (IF)
Exibe um trecho do documento somente se a condição sobre um campo de texto for verdadeira.
Estrutura
Elementos da estrutura:
| Elemento | O que é | Exemplo |
|---|---|---|
variavel | A variável do campo que será usado na condicional. | data.status, data.nome, data.equipe |
valor | O valor que se deseja comparar ao campo. | aprovado, João, financeiro |
conteúdo | O conteúdo de texto que deve aparecer caso a condição definida seja cumprida. | seu pedido foi aprovado, o responsável é o João, a equipe do financeiro será acionada |
Operadores disponíveis:
O condicional de texto usa o operador === (igual a) para comparar o valor do campo com um texto esperado. Para verificar o oposto (campo diferente de um valor), use !== (diferente de).
| Operador | Significado | Exemplo | Como é interpretado |
|---|---|---|---|
=== | Igual a | data.status === 'Aprovado' | "Se o campo status for exatamente Aprovado" |
!== | Diferente de | data.status !== 'Aprovado' | "Se o campo status for qualquer valor diferente de Aprovado" |
'Aprovado', 'Pendente', 'Ativo'.Como preencher:
- Substitua
variavelpelo campo real — ex:data.status - Substitua
'valor'pelo texto esperado — ex:'Aprovado' - Substitua
conteúdopelo texto que deve aparecer
Exemplo 1 — Exibir ou omitir um trecho:
{{}}{{IF variavel === 'valor'}} conteúdo {{END-IF}}
{{}}{{IF data.status === 'Aprovado'}} Este documento foi aprovado conforme as condições estabelecidas. {{END-IF}}
Resultado: o texto definido em conteúdo só aparecerá no documento final se o campo "status" do item for exatamente "Aprovado". Se a condição não for cumprida, o trecho será omitido do documento.
Exemplo 2 — Exibir textos diferentes conforme o resultado:
Para mostrar um texto quando a condição for verdadeira e outro quando não for, use dois blocos IF complementares — o primeiro com === e o segundo com !==:
{{}}{{IF variavel === 'valor'}} conteúdo se verdadeiro {{END-IF}}
{{}}{{IF variavel !== 'valor'}} conteúdo se falso {{END-IF}}
{{}}{{IF data.status === 'Aprovado'}} Este documento foi APROVADO e está apto para assinatura. {{END-IF}}
{{}}{{IF data.status !== 'Aprovado'}} Este documento NÃO foi aprovado. Consulte o responsável para mais informações. {{END-IF}}
Resultado: se o status for "Aprovado", o primeiro trecho aparece e o segundo é omitido. Se o status for qualquer outro valor (ex: "Pendente", "Recusado"), o segundo trecho aparece e o primeiro é omitido.
Bloco condicional de valor (IF com números)
Funciona como o condicional de texto explicado acima, mas compara valores numéricos. A diferença principal é que você pode usar operadores de comparação além do ===.
Estrutura
Elementos da estrutura:
| Elemento | O que é | Exemplo |
|---|---|---|
variavel | A variável do campo que será usado na condicional. | data.valor, data.quantidade, data.numeracao |
123 | O valor numérico que se deseja comparar ao campo. | 1000, 500, 40 |
conteúdo | O conteúdo de texto que deve aparecer caso a condição definida seja cumprida. | o valor total é de R$1000, a quantidade em estoque é de 500, a numeração do produto é 40 |
Operadores disponíveis:
O condicional de valor permite comparar campos numéricos usando diferentes operadores. Escolha o operador conforme o tipo de comparação que deseja fazer.
| Operador | Significado | Exemplo | Como é interpretado |
|---|---|---|---|
=== | Igual a | data.valor === 1000 | "Se o campo valor for exatamente 1.000" |
!== | Diferente de | data.valor !== 0 | "Se o campo valor for qualquer número diferente de zero" |
> | Maior que | data.valor > 10000 | "Se o campo valor for maior que 10.000" |
< | Menor que | data.parcelas < 12 | "Se o campo parcelas for menor que 12" |
>= | Maior ou igual a | data.nota >= 7 | "Se o campo nota for 7 ou mais" |
<= | Menor ou igual a | data.prazo <= 30 | "Se o campo prazo for 30 ou menos" |
Como preencher:
- Substitua
variavelpelo campo real — ex:data.valor - Substitua o operador
===pelo tipo de comparação desejado — ex:> - Substitua
123pelo valor de referência — ex:10000 - Substitua
conteúdopelo texto que deve aparecer
Exemplo 1 — Exibir cláusula para valores altos:
{{}}{{IF variavel === 123}} conteúdo {{END-IF}}
{{}}{{IF data.valor > 10000}} CLÁUSULA ADICIONAL: Para valores acima de R$ 10.000,00, aplica-se a taxa de administração de 2%. {{END-IF}}
Resultado: a cláusula adicional só aparecerá no documento final se o campo "valor" do item for maior que 10.000. Se o valor for 10.000 ou menor, o trecho será omitido.
Exemplo 2 — Textos diferentes conforme a faixa de valor:
{{}}{{IF variavel > 123}} conteúdo para valor alto {{END-IF}}
{{}}{{IF variavel <= 123}} conteúdo para valor baixo {{END-IF}}
{{}}{{IF data.valor > 10000}} Este contrato se enquadra na categoria de ALTO VALOR e requer aprovação da diretoria. {{END-IF}}
{{}}{{IF data.valor <= 10000}} Este contrato se enquadra na categoria PADRÃO e segue o fluxo regular de aprovação. {{END-IF}}
Resultado: se o valor for maior que 10.000, o primeiro trecho aparece e o segundo é omitido. Se o valor for 10.000 ou menor, o segundo trecho aparece e o primeiro é omitido.
Combinando condições (AND e OR)
Dentro de um IF, você pode combinar múltiplas condições:
- AND — todas devem ser verdadeiras para o conteúdo aparecer
- OR — basta uma ser verdadeira
{{}}{{IF data.status === 'Aprovado' AND data.valor > 10000}} Contrato de alto valor aprovado. {{END-IF}}
{{}}{{IF data.prioridade === 'Alta' OR data.valor > 50000}} Este item requer atenção especial. {{END-IF}}
Bloco de repetição (FOR)
Repete um trecho do documento para cada item de uma lista. Uma lista é qualquer campo que armazena múltiplos registros — como uma lista de produtos, parcelas, pessoas ou etapas.
Estrutura
Elementos da estrutura:
| Elemento | O que é | Exemplo |
|---|---|---|
item | Nome identificador que você escolhe para cada registro da lista. Pode ser qualquer palavra. | produto, parcela, pessoa |
variavel | O campo de lista (repetidor) que será percorrido. | data.produtos, data.parcelas |
$item.subcampo | Acesso a um dado específico de cada registro. | $produto.nome, $parcela.preco |
O prefixo
$é obrigatório para acessar dados dentro do FOR. Ele indica ao sistema que você está se referindo a um registro individual da lista, não a um campo global do item.O elemento
itemé um identificador livre para você nomear seu dado. Como boa prática, é indicado substituí-lo pelo nome do campo que será percorrido.
Como preencher:
- Escolha um nome identificador para cada registro — pode ser qualquer palavra que faça sentido (ex:
produto,parcela,pessoa). Esse nome substituiitemna estrutura. - Substitua
variavelpela variável do campo de lista — ex:data.produtos - Dentro do bloco, use
$+ nome escolhido + subcampo — ex:$produto.nome,$produto.preco
Exemplo 1 — Lista simples de produtos:
{{}}{{FOR item IN variavel}} conteúdo {{= $item.subcampo}} {{END-FOR item}}
{{}}{{FOR produto IN data.produtos}} Produto: {{= $produto.nome}} - Valor: R$ {{= $produto.preco}} {{END-FOR produto}}
Resultado: se o item tiver 3 produtos na lista, o documento final terá 3 linhas — uma para cada produto, com nome e preço preenchidos automaticamente.
Exemplo 2 — Lista com múltiplos subcampos:
{{}}{{FOR item IN variavel}} {{= $item.subcampo1}} - {{= $item.subcampo2}} - {{= $item.subcampo3}} {{END-FOR item}}
{{}}{{FOR pessoa IN data.participantes}} Nome: {{= $pessoa.nome}} - CPF: {{= $pessoa.cpf}} - Cargo: {{= $pessoa.cargo}} {{END-FOR pessoa}}
Resultado: para cada pessoa na lista de participantes, uma linha será gerada com nome, CPF e cargo preenchidos.
Combinações avançadas
Os blocos podem ser combinados para criar documentos com lógica complexa.
IF dentro de FOR — exibir conteúdo condicional para cada item da lista:
{{}}{{FOR produto IN data.produtos}} Produto: {{= $produto.nome}} {{}}{{IF $produto.valor > 1000}} (Valor elevado) {{END-IF}} {{END-FOR produto}}
{{}}{{FOR pessoa IN data.pessoas_cadastradas}} CPF: {{= $pessoa.cpf}} {{}}{{FOR telefone IN pessoa.telefones}} DDD: {{= $telefone.ddd}} {{END-FOR telefone}} {{END-FOR pessoa}}
Erros comuns
Verifique sempre estes pontos ao trabalhar com blocos lógicos:
- Todo
{{IF ...}}deve ter um{{END-IF}}correspondente. - Todo
{{FOR ... IN ...}}deve ter um{{END-FOR nome}}correspondente, com o mesmo nome. - Dentro do FOR, use
$antes do nome do registro (ex:$produto.nome, nãoproduto.nome). - Use um campo do tipo lista/repetidor no FOR, não um campo simples.
- Variáveis de campos globais usam
data.campo. Variáveis dentro de um FOR usam$nome.subcampo.