Appearance
API de Uploads do Contrato - Contrato para Backend
Visão Geral
Endpoints para gerenciar o upload de documentos por prestadores dentro de um contrato.
Autenticação padrão via Authorization: Bearer {token} + x-company-id.
Endpoints
1. GET /contracts/:contractId/uploads
Retorna os uploads agrupados por prestador.
Response 200:
json
{
"data": {
"providers": [
{
"id": "uuid",
"name": "Empresa Prestadora LTDA",
"tradeName": "Prestadora",
"uploaded": 2,
"total": 5,
"approved": 1,
"rejected": 1,
"files": [
{
"id": "uuid",
"documentId": "uuid",
"name": "Exame Clínico Ocupacional",
"fileName": "exame-clinico.pdf",
"fileUrl": "https://storage.example.com/exame-clinico.pdf",
"fileSize": 1048576,
"status": "pending",
"rejectionReason": null,
"uploadedAt": "2024-07-20T10:00:00Z"
},
{
"id": "uuid",
"documentId": "uuid",
"name": "Certidão de Regularidade",
"fileName": "certidao.pdf",
"fileUrl": "https://storage.example.com/certidao.pdf",
"fileSize": 524288,
"status": "approved",
"rejectionReason": null,
"uploadedAt": "2024-07-18T14:30:00Z"
},
{
"id": "uuid",
"documentId": "uuid",
"name": "Comprovante de Endereço",
"fileName": null,
"fileUrl": null,
"fileSize": null,
"status": "waiting",
"rejectionReason": null,
"uploadedAt": null
}
]
}
],
"allApproved": false
}
}Notas:
filescontém todos os documentos configurados no contrato para aquele prestador, independente de ter upload ou não- Documentos sem upload vêm com
fileName,fileUrl,fileSizeeuploadedAtcomonullestatus: "waiting" status:"waiting"|"pending"|"approved"|"rejected"waiting= prestador ainda não envioupending= enviado, aguardando revisão do tomadorapproved= tomador aprovourejected= tomador rejeitou (verrejectionReason)
uploaded= quantidade de arquivos já enviadostotal= total de documentos configuradosallApproved=truequando todos os documentos de todos os prestadores estão aprovados
2. POST /contracts/:contractId/documents/:documentId/files
Upload de arquivo. Content-Type: multipart/form-data com campo file e partId.
Response 200:
json
{
"data": {
"id": "uuid",
"documentId": "uuid",
"fileName": "exame-clinico.pdf",
"fileUrl": "https://storage.example.com/exame-clinico.pdf",
"fileSize": 1048576,
"uploadedAt": "2024-07-20T10:00:00Z"
}
}3. DELETE /contracts/:contractId/documents/:documentId/files/:fileId
Remove arquivo. Só permitido se status não for approved.
Response 204
4. PATCH /contracts/:contractId/documents/:documentId/review
Tomador aprova ou rejeita. reason obrigatório quando rejected.
Body:
json
{
"status": "approved"
}json
{
"status": "rejected",
"reason": "Documento ilegível"
}Response 200: retorna o documento atualizado.
5. DELETE /contracts/:contractId
Exclui o contrato e todos os dados relacionados (cascade delete: partes, etapas, documentos, arquivos no storage, revisões, histórico, tokens de onboarding).
Não permite exclusão se status for completed ou signature.
Response 204
Response 409:
json
{
"message": "Não é possível excluir contrato já finalizado ou em assinatura"
}