Campos Dinâmicos
No Xjur, o cadastro de um contrato não tem uma lista fixa de campos. Cada cliente configura, por tipo de contrato:
- quais campos aparecem no cadastro;
- quais são obrigatórios;
- campos personalizados que só existem naquele cliente (ex.: “Tipo de Negociação”, “Código do Pedido”).
Por isso a integração não deve assumir uma lista de campos: ela consulta o Xjur e monta o payload a partir da resposta. São três rotas.
| Rota | Para quê |
|---|---|
GET /contrato/tipos | Descobrir o tipoContratoId |
GET /contrato/tipos/{tipoContratoId}/campos | Saber quais campos enviar, quais são obrigatórios e como enviar cada um |
GET /contrato/catalogos/{catalogo} | Obter os ids aceitos pelos campos de lista (departamento, moeda, empresa…) |
1. Tipos de contrato
Seção intitulada “1. Tipos de contrato”GET /contrato/tipos HTTP/1.1Authorization: Bearer <token>X-XJUR-SUBSCRIPTION-KEY: <sua-chave>[ { "tipoContratoId": 1307, "nome": "Acordo de Confidencialidade", "categoria": "Contrato", "ativo": true }, { "tipoContratoId": 1469, "nome": "Aditivo - Bonificação Postecipada - 812", "categoria": "Aditivo", "ativo": true }]?incluirInativos=true inclui os tipos inativos.
2. Campos do tipo de contrato
Seção intitulada “2. Campos do tipo de contrato”GET /contrato/tipos/1307/campos HTTP/1.1Authorization: Bearer <token>X-XJUR-SUBSCRIPTION-KEY: <sua-chave>[ { "nome": "ipirangaTipodeNegociacao", "rotulo": "Tipo de Negociação", "tipo": "Lista", "obrigatorio": true, "condicional": false, "ordem": 1, "personalizado": true, "campoId": 12938, "propriedade": "camposPersonalizados", "valorEm": "opcaoId", "suportado": true, "opcoes": [ { "opcaoId": 90101, "nome": "Compra" }, { "opcaoId": 90102, "nome": "Venda" } ] }, { "nome": "ParteContraria", "rotulo": "Parceira(o)", "tipo": "Pessoa", "obrigatorio": true, "condicional": false, "ordem": 6, "personalizado": false, "propriedade": "partesContrarias", "suportado": true }, { "nome": "ObjetoContrato", "rotulo": "Informar o motivo do compartilhamento", "tipo": "AreaTexto", "obrigatorio": true, "condicional": false, "ordem": 9, "personalizado": false, "propriedade": "objeto", "suportado": true }, { "nome": "Departamento", "rotulo": "Gerência Contratante", "tipo": "Lista", "obrigatorio": true, "condicional": false, "ordem": 11, "personalizado": false, "propriedade": "departamentoId", "catalogo": "departamentos", "suportado": true }, { "nome": "TipoDocumento", "rotulo": "Anexo", "tipo": "Lista", "obrigatorio": false, "condicional": false, "ordem": 13, "personalizado": false, "suportado": false }]?incluirOpcoes=false omite as opções dos campos de lista (resposta mais leve).
Como ler a resposta
Seção intitulada “Como ler a resposta”| Campo | Significado |
|---|---|
rotulo | O nome que o usuário vê na tela do Xjur. Use-o para mapear com os campos do seu sistema |
nome | Nome interno do campo no Xjur (estável; bom para guardar o mapeamento) |
tipo | Tipo do campo: Texto, AreaTexto, Lista, Data, Valor, Inteiro, Boolean, Pessoa, Empresa… |
obrigatorio | true = POST /contrato é recusado sem ele |
condicional | O campo só é exigido na tela conforme o valor de outro campo. O XJUR Connect não o exige; envie quando fizer sentido |
propriedade | Onde enviar o valor em POST /contrato |
personalizado | true = campo criado pelo cliente; vai em camposPersonalizados |
campoId + valorEm | Para campos personalizados: o id do campo e qual propriedade recebe o valor |
opcoes | Opções dos campos personalizados de lista — envie o opcaoId |
catalogo | Catálogo que lista os ids aceitos pelo campo (veja Catálogos) |
suportado | false = o campo existe na tela mas ainda não pode ser enviado pela integração (anexos, tabelas, listas múltiplas). Nunca é exigido |
ajuda | Texto de ajuda configurado pelo cliente, quando houver |
Do campo ao payload
Seção intitulada “Do campo ao payload”Cada item da resposta vira um pedaço do POST /contrato:
Na resposta de /campos | No POST /contrato |
|---|---|
"propriedade": "objeto" | "objeto": "Texto do objeto" |
"propriedade": "departamentoId", "catalogo": "departamentos" | "departamentoId": 355 — id obtido em /contrato/catalogos/departamentos |
"propriedade": "partesContrarias" | "partesContrarias": [ { ... } ] — veja Criar Contrato |
"personalizado": true, "campoId": 12938, "valorEm": "opcaoId" | "camposPersonalizados": [ { "campoId": 12938, "opcaoId": 90101 } ] |
"personalizado": true, "campoId": 882, "valorEm": "texto" | "camposPersonalizados": [ { "campoId": 882, "texto": "Pedido 4500012345" } ] |
Campos personalizados
Seção intitulada “Campos personalizados”Informe campoId e exatamente um valor, na propriedade indicada por valorEm:
| Tipo do campo no Xjur | valorEm | Exemplo |
|---|---|---|
| Lista, Lista com link | opcaoId | { "campoId": 12938, "opcaoId": 90101 } |
| Texto, Área de texto, E-mail | texto | { "campoId": 882, "texto": "Pedido 4500012345" } |
| Hora | texto | { "campoId": 930, "texto": "14:30" } (formato HH:mm) |
| Data | data | { "campoId": 915, "data": "2026-10-01" } |
| Valor, Percentual | valor | { "campoId": 940, "valor": 1500.50 } |
| Inteiro | inteiro | { "campoId": 951, "inteiro": 12 } |
| Sim/Não | booleano | { "campoId": 960, "booleano": true } |
| Usuário | usuarioId | { "campoId": 970, "usuarioId": 890 } |
Campos de outros tipos (lista múltipla, tabela, lista nivelada, documento, imagem, grupo de usuários) ainda não podem ser enviados — aparecem com suportado: false.
Catálogos
Seção intitulada “Catálogos”Para os campos com catalogo, consulte os ids aceitos:
GET /contrato/catalogos/departamentos?nome=jurid&pagina=1&limite=50 HTTP/1.1{ "totalPaginas": 1, "totalRegistros": 2, "data": [ { "id": 355, "nome": "Jurídico Contratos" }, { "id": 412, "nome": "Jurídico Societário", "codigo": "JUR-SOC" } ]}| Parâmetro | Descrição |
|---|---|
nome | Filtra por trecho do nome |
pagina | Página, começando em 1 |
limite | Itens por página. Padrão 50, máximo 200 |
| Catálogo | Usado em |
|---|---|
departamentos | departamentoId |
moedas | moedaId |
indices | indiceId |
periodicidades | periodicidadeId |
tipos-vigencia | tipoVigenciaId |
status-contrato | statusContratoId |
tipos-centro-custo | centrosCusto[].tipoCentroCustoId |
advogados-internos | advogadosInternos[].advogadoInternoId |
empresas | empresas[].empresaId |
Os papéis das partes contrárias e empresas (Contratante, Contratada…) vêm de GET /xsigner/papeis-signatario.
Como a obrigatoriedade é aplicada
Seção intitulada “Como a obrigatoriedade é aplicada”Ao receber POST /contrato, o XJUR Connect confere os campos com obrigatorio: true, condicional: false e suportado: true. Se faltar algum, responde 400 listando todos os que faltam, com o rótulo e onde enviar:
{ "codigo": "DADOS_INVALIDOS", "descricao": "Campos obrigatórios para este tipo de contrato não informados: \"Tipo de Negociação\" (camposPersonalizados com campoId 12938, valor em opcaoId); \"Gerência Contratante\" (departamentoId). Consulte GET /contrato/tipos/1307/campos."}| Situação | Comportamento |
|---|---|
| Campo obrigatório e suportado não enviado | 400 |
| Campo condicional não enviado | Aceito — a regra depende do valor de outro campo e só é avaliada na tela do Xjur |
| Campo não suportado | Nunca exigido |
Instrumento em pasta existente (novaPasta: false) | Partes contrárias, empresas, departamento e centros de custo não enviados são herdados do primeiro contrato da pasta, então não são exigidos |
"validarCamposObrigatorios": false | Nenhuma conferência: o contrato é criado mesmo incompleto (útil em cargas iniciais, para completar depois no Xjur) |
Roteiro sugerido
Seção intitulada “Roteiro sugerido”- Na configuração da integração, chame
GET /contrato/tipose escolha os tipos de contrato que o seu sistema vai criar. - Para cada tipo, chame
GET /contrato/tipos/{id}/campose mapeie cadarotulopara um campo do seu sistema — comece pelosobrigatorio: true. - Para os campos com
catalogoouopcoes, monte um de-para entre os seus valores e os ids do Xjur. - Na criação, monte o payload seguindo a coluna
propriedade— veja Criar Contrato. - Se receber
400de campo obrigatório, a configuração do cliente mudou: refaça o passo 2.