Skip to content

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 único

Onde 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 undefined se 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": "contato@america.com",
        "document": "12345678000190"
      },
      "role": "provider",
      "value": "1.000,00",
      "contractType": "HOURLY"
    },
    {
      "id": "part-2",
      "person": {
        "id": "company-brasil-ltda",
        "name": "Brasil LTDA",
        "email": "contato@brasil.com",
        "document": "98765432000190"
      },
      "role": "provider",
      "value": "5.000,00",
      "contractType": "MONTHLY"
    }
  ]
}

Onde Salvar no Banco

Tabela: contract_parts (ou equivalente)

CampoTipoDescrição
idUUIDPK da parte
contract_idUUIDFK para contratos
company_idUUIDFK para empresa/provider
roleVARCHARborrower, provider, witness, guarantor
valueVARCHARValor do contrato (formato moeda: "1.000,00")
contract_typeVARCHAR/ENUMHOURLY, 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 value da parte substitui automaticamente a variável valor_contrato no 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]     │
└─────────────────────────────────────────┘