Appearance
API - Campos de Pagamento por Parte (value e contractType)
Contexto
Cada parte (prestador) de um contrato possui campos de pagamento individuais:
- value: valor do contrato para aquela parte (formato moeda BR: "1.000,00")
- contractType: frequência de pagamento
Esses campos são enviados no payload de criação/atualização do contrato dentro do array parts.
ContractType (Enum)
HOURLY → Por hora
WEEKLY → Semanal
DOUBLE_WEEKLY → Quinzenal
MONTHLY → Mensal
ANNUAL → Anual
FIXED_PRICE → Valor únicoOnde o Frontend Envia
POST /api/v1/contracts (Criação)
PUT /api/v1/contracts/:id (Atualização)
Os campos value e contractType são enviados dentro de cada item do array parts:
json
{
"name": "Contrato de prestação",
"workflowId": "wf-123",
"parts": [
{
"companyId": "company-america-ltda",
"value": "1.000,00",
"contractType": "HOURLY"
},
{
"companyId": "company-brasil-ltda",
"value": "5.000,00",
"contractType": "MONTHLY"
}
],
"variableValues": [...]
}Notas:
valueé string no formato moeda brasileira (ex: "1.000,00", "500,00")contractTypeé string enum (HOURLY, WEEKLY, DOUBLE_WEEKLY, MONTHLY, ANNUAL, FIXED_PRICE)- Ambos são opcionais no payload (podem ser
undefinedse o usuário não preencheu) - Cada parte tem seus próprios valores independentes
Onde o Backend Deve Retornar
GET /api/v1/contracts/:id (Detalhes do contrato)
O backend deve retornar value e contractType dentro de cada parte no response:
json
{
"id": "contract-123",
"name": "Contrato de prestação",
"status": "model",
"parts": [
{
"id": "part-1",
"person": {
"id": "company-america-ltda",
"name": "America LTDA",
"email": "[email protected]",
"document": "12345678000190"
},
"role": "provider",
"value": "1.000,00",
"contractType": "HOURLY"
},
{
"id": "part-2",
"person": {
"id": "company-brasil-ltda",
"name": "Brasil LTDA",
"email": "[email protected]",
"document": "98765432000190"
},
"role": "provider",
"value": "5.000,00",
"contractType": "MONTHLY"
}
]
}Onde Salvar no Banco
Tabela: contract_parts (ou equivalente)
| Campo | Tipo | Descrição |
|---|---|---|
id | UUID | PK da parte |
contract_id | UUID | FK para contratos |
company_id | UUID | FK para empresa/provider |
role | VARCHAR | borrower, provider, witness, guarantor |
value | VARCHAR | Valor do contrato (formato moeda: "1.000,00") |
contract_type | VARCHAR/ENUM | HOURLY, WEEKLY, DOUBLE_WEEKLY, MONTHLY, ANNUAL, FIXED_PRICE |
Migração sugerida:
sql
ALTER TABLE contract_parts
ADD COLUMN value VARCHAR(50) NULL,
ADD COLUMN contract_type VARCHAR(20) NULL;Relação com Variáveis do Template
Se o template do contrato possui uma variável chamada valor_contrato:
- O frontend não envia essa variável separadamente no array
variableValues - O campo
valueda parte substitui automaticamente a variávelvalor_contratono preview - O campo aparece como disabled no drawer de variáveis (não editável direto, só pelo campo fixo de Pagamento)
O backend pode usar o value da parte para popular a variável valor_contrato no template ao gerar o PDF/preview, ou o frontend já envia o valor sincronizado no variableValues.
Fluxo Visual no Frontend
┌─────────────────────────────────────────┐
│ Drawer: "America LTDA" │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Pagamento R$ 1.000,00 │ │ ← Salva em part.value
│ │ Frequência Por hora ▼ │ │ ← Salva em part.contractType
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Razao Social America LTDA │ │ ← variableValues
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Valor Contrato R$ 1.000,00 🔒│ │ ← Mesmo valor do Pagamento
│ └─────────────────────────────────┘ │ (disabled, sincronizado)
│ │
│ [Salvar] │
└─────────────────────────────────────────┘