Appearance
Signature Field Placement
Schema
SignatureFieldPlacement
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Identificador único (gerado no frontend) |
type | string | Sim | 'signature' ou 'initials' |
x | number | Sim | Posição horizontal em % (0-100) do A4 |
y | number | Sim | Posição vertical em % (0-100) do A4 |
width | number | Não | Largura em % (8-50). Default por tipo |
height | number | Não | Altura em % (3-20). Default por tipo |
Tamanhos default por tipo
| Tipo | Width (%) | Height (%) |
|---|---|---|
signature | 19 | 6 |
initials | 10 | 4 |
Os tamanhos default são definidos em SIGNATURE_FIELD_SIZES. Quando o usuário redimensiona um campo, width e height são salvos individualmente. Se omitidos, o backend deve usar os defaults acima.
Limites de redimensionamento
| Limite | Width (%) | Height (%) |
|---|---|---|
| Mínimo | 8 | 3 |
| Máximo | 50 | 20 |
Coordenadas
As coordenadas x e y são percentuais relativos à página A4 (210mm x 297mm).
x = 0→ borda esquerdax = 100→ borda direitay = 0→ topo da páginay = 100→ base da página
Armazenamento
Os campos ficam dentro de SignerMember.signatureFields[] na SignatureStepConfig:
json
{
"signatureConfig": {
"groups": [
{
"id": "group-1",
"name": "Partes",
"order": 1,
"isPartGroup": true,
"members": [
{
"id": "signer-1",
"userId": "user-123",
"name": "João Silva",
"email": "[email protected]",
"order": 1,
"signatureFields": [
{ "id": "field-1", "type": "signature", "x": 10.5, "y": 85.2, "width": 25, "height": 8 },
{ "id": "field-2", "type": "initials", "x": 75.0, "y": 92.0 }
]
}
]
}
]
}
}Conversão para coordenadas absolutas no PDF
A4 em pontos (72 DPI): 595.28pt × 841.89pt
absoluteX = (x / 100) * 595.28
absoluteY = (y / 100) * 841.89Tamanhos absolutos (defaults)
| Tipo | Width (pt) | Height (pt) |
|---|---|---|
signature | ~113.1 | ~50.5 |
initials | ~59.5 | ~33.7 |
Quando width/height estão presentes no campo:
absoluteWidth = (width / 100) * 595.28
absoluteHeight = (height / 100) * 841.89Endpoint
Não requer endpoint novo. Os campos são enviados como parte do payload existente:
PUT /workflows/:id: atualiza workflow incluindosignatureFieldsnos membrosPOST /workflows: cria workflow incluindosignatureFieldsnos membros