Skip to content

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:

  • files conté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, fileSize e uploadedAt como null e status: "waiting"
  • status: "waiting" | "pending" | "approved" | "rejected"
    • waiting = prestador ainda não enviou
    • pending = enviado, aguardando revisão do tomador
    • approved = tomador aprovou
    • rejected = tomador rejeitou (ver rejectionReason)
  • uploaded = quantidade de arquivos já enviados
  • total = total de documentos configurados
  • allApproved = true quando 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"
}