Activity) é o registro de uma ação operacional a ser realizada pelo time de cobrança. Representa tarefas como ligações, e-mails, reuniões e outras interações vinculadas a contratos e títulos da carteira. É a unidade de trabalho do time de cobrança e o principal instrumento de rastreabilidade das interações com clientes devedores.actionType = ACTIVITY é disparada (ver ReguasCobranca.md). A atividade herda o title, description, priority e activityType configurados no actionConfig da etapa.Régua de Cobrança → (dispara etapa) → Atividade → (registra em) → Histórico de Interações do Cliente| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador único da atividade. |
| companyId | UUID | Sim | Empresa à qual a atividade pertence. |
| contractId | UUID | Sim | Contrato vinculado. |
| receivableId | UUID | Não | Título específico vinculado. null quando a atividade é sobre o contrato como um todo. |
| clientId | UUID | Sim | Cliente devedor. Desnormalizado a partir do contrato para facilitar consultas e filtros. |
| type | Enum | Sim | Tipo da atividade: CALL, EMAIL, MEETING, OTHER. |
| typeDescription | String | Condicional | Descrição livre quando type = OTHER. Obrigatório nesse caso. |
| title | String | Sim | Título da atividade (ex: "Ligar para negociar acordo de pagamento"). |
| description | String | Não | Descrição detalhada ou instrução para o responsável. |
| priority | Enum | Sim | Prioridade: LOW, MEDIUM, HIGH. |
| status | Enum | Sim | Status da atividade: PENDING, SCHEDULED, OVERDUE, COMPLETED, CANCELLED. |
| source | Enum | Sim | Origem: MANUAL (criada pelo usuário) ou COLLECTION_RULE (gerada por régua de cobrança). |
| collectionRuleId | UUID | Não | Régua que gerou a atividade. Preenchido quando source = COLLECTION_RULE. |
| collectionStepId | UUID | Não | Etapa da régua que gerou a atividade. Preenchido quando source = COLLECTION_RULE. |
| assignedTo | UUID | Não | Usuário responsável pela execução da atividade. null se não atribuída. |
| dueDate | Date | Sim | Data limite para conclusão da atividade. |
| dueTime | Time | Não | Hora agendada para a atividade (ex: 10:00). null quando sem horário definido. |
| completedAt | DateTime | Não | Data e hora da conclusão. Preenchido ao mover para COMPLETED. |
| completedBy | UUID | Não | Usuário que concluiu a atividade. |
| outcome | Enum | Não | Resultado da interação ao concluir. Opcional. Ver seção 2.2. |
| outcomeNotes | String | Não | Observações livres sobre o resultado da interação. |
| cancelledAt | DateTime | Não | Data de cancelamento. |
| cancelledBy | UUID | Não | Usuário que cancelou. |
| cancellationReason | String | Não | Motivo do cancelamento. |
| notes | String | Não | Observações gerais sobre a atividade (visíveis antes da conclusão). |
| createdBy | UUID | Sim | Usuário que criou (manual) ou sistema (automática). |
| createdAt | DateTime | Sim | Data de criação. |
| updatedAt | DateTime | Sim | Data da última atualização. |
| Valor | Label | Descrição |
|---|---|---|
CONTACT_MADE | Contato realizado | Cliente foi contactado com sucesso. |
NO_ANSWER | Não atendeu | Tentativa de contato sem resposta. |
PAYMENT_PROMISE | Promessa de pagamento | Cliente prometeu pagar até uma data específica. |
AGREEMENT_PROPOSED | Proposta de acordo | Proposta de renegociação enviada ao cliente. |
AGREEMENT_FORMALIZED | Acordo formalizado | Acordo de pagamento/renegociação formalizado. |
PAYMENT_CONFIRMED | Pagamento confirmado | Cliente informou que pagamento já foi efetuado. |
DISPUTE | Contestação | Cliente contestou o débito ou os valores. |
WRONG_CONTACT | Contato incorreto | Dados de contato do cliente estão incorretos/desatualizados. |
OTHER | Outro | Resultado não classificado nas opções anteriores. Usar outcomeNotes para detalhar. |
PENDING ──► SCHEDULED ──► COMPLETED
│ │
│ ├──► OVERDUE ──► COMPLETED
│ │ └──► CANCELLED
│ └──► CANCELLED
├──► OVERDUE ──► COMPLETED
│ └──► CANCELLED
└──► CANCELLED| Transição | Tipo | Descrição |
|---|---|---|
| PENDING → SCHEDULED | Manual | Atividade atribuída a um usuário e/ou com dueTime definido. |
| PENDING → OVERDUE | Automática (job) | dueDate ultrapassado sem conclusão. |
| PENDING → COMPLETED | Manual | Concluída diretamente sem passar por agendamento. |
| PENDING → CANCELLED | Manual | Cancelada antes da execução. |
| SCHEDULED → COMPLETED | Manual | Atividade executada e concluída. |
| SCHEDULED → OVERDUE | Automática (job) | dueDate ultrapassado sem conclusão. |
| SCHEDULED → CANCELLED | Manual | Cancelada. |
| OVERDUE → COMPLETED | Manual | Concluída com atraso. |
| OVERDUE → CANCELLED | Manual | Cancelada após atraso. |
PENDING → SCHEDULED ocorre automaticamente quando a atividade é atualizada com assignedTo e/ou dueTime. Atividades criadas já com esses campos nascem diretamente como SCHEDULED.| Campo | Tipo | Descrição |
|---|---|---|
| totalCount | Integer | Total de atividades no escopo do filtro aplicado. |
| pendingCount | Integer | Atividades com status = PENDING. |
| scheduledCount | Integer | Atividades com status = SCHEDULED. |
| completedCount | Integer | Atividades com status = COMPLETED. |
| overdueCount | Integer | Atividades com status = OVERDUE. |
| cancelledCount | Integer | Atividades com status = CANCELLED. |
| Campo | Tipo | Descrição |
|---|---|---|
| clientName | String | Nome do cliente devedor. |
| clientDocument | String | CPF/CNPJ do cliente. |
| clientEmail | String | E-mail do cliente. |
| clientPhone | String | Telefone do cliente. |
| contractCode | String | Código do contrato vinculado. |
| receivableCode | String | Código do título vinculado. null se sem título específico. |
| clientOpenAmount | Decimal | Valor total em aberto do cliente na carteira. |
| receivableOverdueDays | Integer | Dias em atraso do título vinculado. null se sem título ou título não vencido. |
| activityOverdueDays | Integer | Dias de atraso da atividade (diferença entre data atual e dueDate). 0 se não atrasada. |
contractId. O contrato deve pertencer à mesma empresa. O clientId é resolvido automaticamente a partir do contrato. Erro: CONTRACT_NOT_FOUND.receivableId, quando informado, deve pertencer ao contrato vinculado. Erro: RECEIVABLE_NOT_FOUND ou RECEIVABLE_CONTRACT_MISMATCH.source = COLLECTION_RULE, collectionRuleId, collectionStepId, e os campos title, description, priority, type a partir do actionConfig da etapa. As variáveis de template ({{clientName}}, {{contractCode}}, etc.) são resolvidas no momento da criação. O dueDate é calculado como data do disparo + dueDaysAfterTrigger configurado na etapa.assignedTo e/ou dueTime preenchidos nascem com status = SCHEDULED. Atividades sem esses campos nascem como PENDING.assignedTo deve ser um usuário tenant da mesma empresa. Quando não informado na criação, a atividade fica não atribuída (PENDING) e pode ser atribuída posteriormente via PATCH. Erro: USER_NOT_FOUND.status = PENDING ou SCHEDULED para OVERDUE quando a data atual ultrapassar dueDate. Executado por job diário — o mesmo job que processa títulos e contratos.COMPLETED é sempre manual (via endpoint PATCH /status). O campo outcome é opcional mas recomendado — permite classificar o resultado da interação para análise de efetividade. O campo outcomeNotes permite detalhar o resultado em texto livre. Os campos completedAt e completedBy são preenchidos automaticamente.CANCELLED é permitida de qualquer status exceto COMPLETED. O campo cancellationReason é opcional mas recomendado. Atividades geradas por régua de cobrança que são canceladas registram o cancelamento no CollectionStepExecution — o log de execução da régua permanece com status = SUCCESS (a atividade foi criada com sucesso; o cancelamento é posterior).dueDate e dueTime podem ser alterados via PATCH enquanto a atividade estiver em PENDING, SCHEDULED ou OVERDUE. Reagendar uma atividade OVERDUE com uma data futura move-a de volta para SCHEDULED. O histórico de reagendamentos é registrado no ActivityHistory.COMPLETED ou CANCELLED: title, description, priority, type, typeDescription, assignedTo, dueDate, dueTime, notes, receivableId.status = COMPLETED ou CANCELLED não podem ser editadas. Erro: ACTIVITY_IMMUTABLE.COMPLETED ou CANCELLED.Carteiras.md.| Status | Código | Descrição |
|---|---|---|
| 404 Not Found | ACTIVITY_NOT_FOUND | Atividade não encontrada ou não pertence à empresa. |
| 404 Not Found | CONTRACT_NOT_FOUND | Contrato vinculado não encontrado ou não pertence à empresa. |
| 404 Not Found | RECEIVABLE_NOT_FOUND | Título vinculado não encontrado. |
| 422 Unprocessable Entity | RECEIVABLE_CONTRACT_MISMATCH | O título informado não pertence ao contrato vinculado. |
| 422 Unprocessable Entity | MISSING_TYPE_DESCRIPTION | type = OTHER sem typeDescription. |
| 422 Unprocessable Entity | INVALID_STATUS_TRANSITION | Transição de status não permitida. |
| 422 Unprocessable Entity | ACTIVITY_IMMUTABLE | Atividade em status final (COMPLETED, CANCELLED). |
| 422 Unprocessable Entity | USER_NOT_FOUND | assignedTo não é um usuário válido da empresa. |
| 422 Unprocessable Entity | INVALID_DUE_DATE | dueDate é anterior à data atual na criação. |
activity:create{
"contractId": "b9d3f1aa-22cc-4e72-b430-1e45a3d6e001",
"receivableId": "r1a2b3c4-0000-0000-0000-000000000001",
"type": "CALL",
"title": "Ligar para negociar acordo de pagamento",
"description": "Cliente possui 2 títulos em atraso totalizando R$ 85.000. Verificar possibilidade de acordo com desconto.",
"priority": "HIGH",
"assignedTo": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"dueDate": "2025-01-15",
"dueTime": "10:00",
"notes": null
}{
"id": "act1a2b3c4-0000-0000-0000-000000000001",
"companyId": "a1b2c3d4-0000-0000-0000-000000000001",
"contractId": "b9d3f1aa-22cc-4e72-b430-1e45a3d6e001",
"receivableId": "r1a2b3c4-0000-0000-0000-000000000001",
"clientId": "a3f1c2d4-0000-0000-0000-000000000010",
"type": "CALL",
"typeDescription": null,
"title": "Ligar para negociar acordo de pagamento",
"description": "Cliente possui 2 títulos em atraso totalizando R$ 85.000. Verificar possibilidade de acordo com desconto.",
"priority": "HIGH",
"status": "SCHEDULED",
"source": "MANUAL",
"collectionRuleId": null,
"collectionStepId": null,
"assignedTo": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"dueDate": "2025-01-15",
"dueTime": "10:00",
"completedAt": null,
"completedBy": null,
"outcome": null,
"outcomeNotes": null,
"cancelledAt": null,
"cancelledBy": null,
"cancellationReason": null,
"notes": null,
"createdBy": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"createdAt": "2025-01-14T09:00:00Z",
"updatedAt": "2025-01-14T09:00:00Z",
"clientName": "Agropecuária Horizonte",
"clientDocument": "12.345.678/0001-90",
"clientEmail": "contato@agrohorizonte.com.br",
"clientPhone": "(11) 99999-9999",
"contractCode": "CT-2024-002",
"receivableCode": "NF-001",
"clientOpenAmount": 85000.00,
"receivableOverdueDays": 10,
"activityOverdueDays": 0
}| Status | Código |
|---|---|
| 404 | CONTRACT_NOT_FOUND |
| 404 | RECEIVABLE_NOT_FOUND |
| 422 | RECEIVABLE_CONTRACT_MISMATCH |
| 422 | MISSING_TYPE_DESCRIPTION |
| 422 | USER_NOT_FOUND |
| 422 | INVALID_DUE_DATE |
activity:read| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| search | String | Não | Busca por nome do cliente, código do contrato ou descrição da atividade. |
| status | Enum (multi) | Não | Filtrar por status. Aceita múltiplos valores. |
| type | Enum (multi) | Não | Filtrar por tipo: CALL, EMAIL, MEETING, OTHER. |
| priority | Enum (multi) | Não | Filtrar por prioridade: LOW, MEDIUM, HIGH. |
| source | Enum | Não | Filtrar por origem: MANUAL, COLLECTION_RULE. |
| assignedTo | UUID | Não | Filtrar por usuário responsável. |
| clientId | UUID | Não | Filtrar por cliente. |
| contractId | UUID | Não | Filtrar por contrato. |
| dueDateStart | Date (ISO) | Não | Atividades com dueDate >= esta data. |
| dueDateEnd | Date (ISO) | Não | Atividades com dueDate <= esta data. |
| sortBy | Enum | Não | Ordenação: dueDate, priority, createdAt, clientName. Default: dueDate. |
| sortOrder | Enum | Não | asc ou desc. Default: asc. |
| page | Integer | Não | Default: 1. |
| pageSize | Integer | Não | Default: 20. Máximo: 100. |
{
"summary": {
"totalCount": 8,
"pendingCount": 5,
"scheduledCount": 2,
"completedCount": 1,
"overdueCount": 5,
"cancelledCount": 0
},
"data": [
{
"id": "act1a2b3c4-0000-0000-0000-000000000001",
"contractId": "b9d3f1aa-22cc-4e72-b430-1e45a3d6e001",
"receivableId": "r1a2b3c4-0000-0000-0000-000000000001",
"clientId": "a3f1c2d4-0000-0000-0000-000000000010",
"type": "CALL",
"title": "Ligar para negociar acordo de pagamento",
"description": "Cliente possui 2 títulos em atraso totalizando R$ 85.000.",
"priority": "HIGH",
"status": "SCHEDULED",
"source": "COLLECTION_RULE",
"assignedTo": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"assignedToName": "João Silva",
"dueDate": "2025-01-15",
"dueTime": "10:00",
"outcome": null,
"createdAt": "2025-01-14T09:00:00Z",
"clientName": "Agropecuária Horizonte",
"clientDocument": "12.345.678/0001-90",
"clientEmail": "contato@agrohorizonte.com.br",
"clientPhone": "(11) 99999-9999",
"contractCode": "CT-2024-002",
"receivableCode": "NF-001",
"clientOpenAmount": 85000.00,
"receivableOverdueDays": 10,
"activityOverdueDays": 0
},
{
"id": "act1a2b3c4-0000-0000-0000-000000000002",
"contractId": "c7e2a1bb-33dd-4f83-c541-2f56b4e7f999",
"receivableId": null,
"clientId": "b4g2d3e5-0000-0000-0000-000000000020",
"type": "EMAIL",
"title": "Enviar proposta de renegociação",
"description": null,
"priority": "LOW",
"status": "PENDING",
"source": "MANUAL",
"assignedTo": null,
"assignedToName": null,
"dueDate": "2025-01-15",
"dueTime": "14:00",
"outcome": null,
"createdAt": "2025-01-14T10:00:00Z",
"clientName": "João Silva",
"clientDocument": "123.456.789-00",
"clientEmail": "joao.silva@email.com",
"clientPhone": "(11) 97777-6666",
"contractCode": "CT-2024-005",
"receivableCode": null,
"clientOpenAmount": 85000.00,
"receivableOverdueDays": null,
"activityOverdueDays": 0
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"nextPage": false
}
}summary é calculado sobre todos os registros que atendem aos filtros aplicados (não apenas a página atual), permitindo que a interface exiba os cards de contadores.activity:readstatus != COMPLETED e status != CANCELLED.activity:updatetitle, description, priority, type, typeDescription, assignedTo, dueDate, dueTime, receivableId, notes.{
"assignedTo": "e4a5b6c7-7g99-6b05-e763-4178d6g9h334",
"dueDate": "2025-01-20",
"dueTime": "09:00",
"notes": "Reagendada — responsável anterior em férias."
}OVERDUE é reagendada com dueDate futura, o status transita automaticamente para SCHEDULED.| Status | Código |
|---|---|
| 422 | ACTIVITY_IMMUTABLE |
| 422 | USER_NOT_FOUND |
| 422 | RECEIVABLE_CONTRACT_MISMATCH |
activity:update{
"status": "COMPLETED",
"outcome": "PAYMENT_PROMISE",
"outcomeNotes": "Cliente informou que efetuará pagamento via PIX até 20/01. Valor acordado: R$ 85.000 sem desconto."
}{
"status": "COMPLETED"
}{
"status": "CANCELLED",
"cancellationReason": "Título foi pago antes da atividade ser executada."
}{
"id": "act1a2b3c4-0000-0000-0000-000000000001",
"status": "COMPLETED",
"outcome": "PAYMENT_PROMISE",
"outcomeNotes": "Cliente informou que efetuará pagamento via PIX até 20/01.",
"completedAt": "2025-01-15T10:30:00Z",
"completedBy": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"updatedAt": "2025-01-15T10:30:00Z"
}| Status | Código |
|---|---|
| 422 | INVALID_STATUS_TRANSITION |
| 422 | ACTIVITY_IMMUTABLE |
activity:readGET /activities, acrescidos de:| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| format | Enum | Sim | CSV ou XLSX. |
| Resource | Domínio | Descrição |
|---|---|---|
activity | TENANT | CRUD e gestão de atividades de cobrança. |
| Resource | Actions |
|---|---|
activity | create, read, update, delete |
delete cobre cancelamento (não existe exclusão física).ACTIVITY da régua de cobrança (ver ReguasCobranca.md, seção 2.3) cria atividades neste módulo. O resultRef no CollectionStepExecution aponta para o id da atividade criada. O assignedTo da atividade gerada por régua é:null (não atribuída) quando o contrato não está em sub-carteira ou a sub-carteira não tem gestor.GET /portfolio/clients/:clientId/interactions (ver ClientesCarteira.md) é uma fachada que consulta este módulo com filtro clientId implícito. Os campos lastInteractionAt e lastInteractionType do PortfolioClientSummary são calculados a partir da atividade COMPLETED mais recente do cliente.PortfolioSummary (ver Carteiras.md) inclui indicadores de efetividade por ação (actionEffectiveness). Esses indicadores são calculados cruzando pagamentos de títulos com a última atividade COMPLETED registrada antes do pagamento — ex: se a última atividade antes de um pagamento foi do tipo CALL, o valor recuperado é atribuído ao tipo CALL.