Requisitos fundamentais
Guia completo para criar modelos e/ou documentos automatizados com HTML, JSON e o SDK de geração de documentos.
Toda automação requer exatamente 3 arquivos:
| Arquivo | Descrição |
|---|---|
| HTML máscara | O HTML que o usuário vê ao preencher o formulário por meio do SDK |
| HTML completo | HTML para gerar o PDF final, inclui os espaços para as assinaturas |
| Objeto JSON | Controla o comportamento, define os signatários e as perguntas |
Fluxo geral
O processo sempre começa com a construção do HTML completo. Este documento deve conter espaços editáveis onde o usuário insere as informações. Esse HTML dependerá das variáveis registradas no JSON, em que cada pergunta possui um identificador.
Por exemplo:
- HTML:
<p>Descrição: <span name="question_1">___________</span></p>
- Pergunta no JSON:
[
...,
{
"name": "question_1",
"description": "Informe o nome completo do representante legal da empresa contratante",
"type": "text"
},
...
]
- O que o usuário vê no final:

Configuration
- Para começar a gerar os arquivos HTML, saiba tudo sobre a criação deles em Configuração do HTML.
- Para começar a gerar o arquivo JSON, consulte a referência completa em Configuração do JSON — ela cobre os 17 tipos de pergunta, as validações e a lógica condicional.
- Para modelos que precisam validar um código ou buscar dados pré-preenchidos a partir do seu próprio serviço, consulte Tipo de requisição.
Dicas e boas práticas
- Nomenclatura consistente: use
snake_casedescritivo nas perguntas:buyer_name,seller_email. - Combine os tipos de campo com a semântica: use
identificationpara os documentos dos signatários (nãotextounumber),nitpara identificações fiscais colombianas,currencypara valores monetários,emailpara e-mails. - Validação antecipada: marque as perguntas críticas no array
sign. - Aproveite as validações: deduza
subYears(idade),maxlength,regex,min/maxa partir dos próprios requisitos do documento. Veja Propriedades de validação. - Convenção de signatários: ancore cada assinatura com
<div name="X">, não comid. Se uma assinatura aparecer em vários lugares, repita o mesmoname— veja Posicionamento das assinaturas. - Campos automáticos: adicione
<span name="signDate">onde a data da assinatura deve aparecer. Veja Campos automáticos ao concluir a assinatura. - Múltiplas identificações: use
|emsignatureProfile.identificationpara aceitar vários tipos de documento para um mesmo signatário. - Restrições do gerador de PDF: o gerador de PDF da Auco não oferece suporte a flexbox, CSS Grid nem variáveis CSS no HTML completo. Veja Restrições do gerador de PDF.
- Testes: verifique se cada opção
clausulaé ocultada/exibida corretamente e se a opção padrão corresponde aovalueda configuração.
Checklist de validação
Antes de publicar sua automação, verifique:
- Você tem os 3 arquivos (HTML máscara, HTML completo, JSON).
- Cada pergunta no JSON tem
name,descriptionetype. - Todo
nameno HTML corresponde a uma pergunta no JSON — e vice-versa. - As perguntas
clausulatêm um<span name="{name}_{value}">por opção no HTML. - O
valuepadrão na configuração de umaclausulacorresponde ao span sem o atributohidden. - As perguntas com
prereqreferenciam perguntas do tipoclausula. - Todo signatário em
signatureProfiletem seu<div name="X">no HTML completo, comXigual ao seutype. - As perguntas em
signreferenciam nomes de perguntas reais. - As perguntas de identificação dos signatários usam
type: "identification", e os NITs usamtype: "nit". - As perguntas
checkusam um array simplesvalues: [...](nãooptions). - O HTML não usa
display: flex, CSS Grid nem variáveis CSS. - Caracteres UTF-8 (
ñ,á) são escritos diretamente, não como entidades HTML. - Se estiver usando
preBuild: true, você incluiupreBuildData.
Exemplo integrado completo
JSON completo
{
"name": "Contrato de compra e venda",
"preBuild": false,
"sign": ["buyer_name", "buyer_email"],
"config": [
{
"name": "buyer_name",
"description": "Informe seu nome completo",
"type": "name"
},
{
"name": "identification_type",
"description": "Selecione seu tipo de documento de identificação",
"type": "clausula",
"value": "id_card",
"options": [
{ "name": "Documento de identidade nacional", "value": "id_card" },
{ "name": "Documento de identidade estrangeiro", "value": "foreign_id" }
]
},
{
"name": "id_card_number",
"description": "Informe seu número de identificação",
"type": "number",
"prereq": [{ "k": "identification_type", "v": "id_card" }]
},
{
"name": "foreign_id_number",
"description": "Informe o número do seu documento estrangeiro",
"type": "number",
"prereq": [{ "k": "identification_type", "v": "foreign_id" }]
},
{
"name": "buyer_email",
"description": "Informe seu endereço de e-mail",
"type": "email"
},
{
"name": "buyer_phone",
"description": "Informe seu número de telefone",
"type": "phone"
},
{
"name": "transaction_value",
"description": "Informe o valor total da compra",
"type": "currency"
},
{
"name": "transaction_date",
"description": "Selecione a data da transação",
"type": "date"
},
{
"name": "product_description",
"description": "Descreva brevemente o produto",
"type": "text"
}
],
"signatureProfile": [
{
"name": "buyer_name",
"identification": "id_card_number|foreign_id_number",
"email": "buyer_email",
"phone": "buyer_phone",
"type": "buyer"
}
]
}
HTML máscara
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8" />
<title>Contrato de compra e venda</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 40px auto;
padding: 20px;
}
.section {
margin-bottom: 30px;
padding: 15px;
border: 1px solid #ddd;
border-radius: 5px;
}
h1 {
text-align: center;
color: #333;
}
label {
font-weight: bold;
display: block;
margin-bottom: 5px;
}
span {
border-bottom: 1px solid #000;
min-width: 200px;
display: inline-block;
padding: 5px;
}
</style>
</head>
<body>
<h1>Contrato de compra e venda</h1>
<div class="section">
<h2>Informações do comprador</h2>
<label>Nome completo:</label>
<span name="buyer_name">___________________</span>
<label>Tipo de identificação:</label>
<span name="identification_type_id_card">Documento de identidade</span>
<span name="identification_type_foreign_id" hidden>Documento estrangeiro</span>
<label>Número de identificação:</label>
<span name="id_card_number">___________________</span>
<span name="foreign_id_number" hidden>___________________</span>
<label>Endereço de e-mail:</label>
<span name="buyer_email">___________________</span>
<label>Telefone de contato:</label>
<span name="buyer_phone">___________________</span>
</div>
<div class="section">
<h2>Informações da transação</h2>
<label>Descrição do produto:</label>
<span name="product_description">___________________</span>
<label>Valor total:</label>
<span name="transaction_value">___________________</span>
<label>Data da transação:</label>
<span name="transaction_date">___________________</span>
</div>
<p style="margin-top: 50px; text-align: center;">Assinatura do comprador: ______________________</p>
</body>
</html>
HTML completo
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8" />
<title>Contrato de compra e venda</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 40px auto;
padding: 20px;
}
.sign-margin {
min-height: 100px;
margin-top: 30px;
page-break-inside: avoid;
}
</style>
</head>
<body>
<h1>Contrato de compra e venda</h1>
<h2>Informações do comprador</h2>
<p>
Nome: <strong><span name="buyer_name">___________________</span></strong>
</p>
<p>
Identificação:
<strong
><span name="id_card_number">___________________</span
><span name="foreign_id_number" hidden>___________________</span></strong
>
</p>
<p>
E-mail: <strong><span name="buyer_email">___________________</span></strong>
</p>
<h2>Informações da transação</h2>
<p>
Produto: <strong><span name="product_description">___________________</span></strong>
</p>
<p>
Valor: <strong><span name="transaction_value">___________________</span></strong>
</p>
<p>
Data: <strong><span name="transaction_date">___________________</span></strong>
</p>
<h2>Assinatura</h2>
<div name="buyer" class="sign-margin"></div>
</body>
</html>