Operadora Saúde

Endpoints da WebApiAlcance para o cadastro de operadoras de plano de saúde (ex.: Unimed, Bradesco Saúde). Cobrem criação, listagem das operadoras do usuário autenticado (com filtros opcionais e paginação), detalhamento por ID, atualização parcial e exclusão. O cadastro é multi-tenant: cada operadora pertence ao usuário que a criou (id_usuario_created).

Todos os endpoints exigem autenticação. Veja Autenticação para o fluxo de API Key. O Swagger oficial está em api.contabilidadealcance.com.br/docs.

Base path

/api/v1/operadora-saude

Escopos necessários

  • operadora_saude:read - listagem e detalhamento
  • operadora_saude:write - criação, atualização e exclusão

O escopo é derivado da rota: o prefixo /operadora-saude vira o recurso operadora_saude (hífen → underscore), e o método HTTP define a ação (read para GET, write para POST/PUT/DELETE).

Endpoints

POST /operadora-saude/

Cria uma nova operadora de saúde vinculada ao usuário autenticado. O campo id_usuario_created não vem no payload - é derivado do usuário logado. Único campo obrigatório é razao_social; os demais são opcionais.

Parâmetros

Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (OperadoraSaudeCreate).

Request

{
  "razao_social": "Unimed Salvador",
  "cnpj": "12.345.678/0001-90",
  "registro_ans": "123456",
  "tipo_contratacao": "Coletivo empresarial",
  "tipo_cobertura": "Ambulatorial + Hospitalar",
  "abrangencia": "Nacional",
  "numero_contrato": "CT-2026-0001",
  "status": "ativo",
  "observacao": "Operadora preferencial da carteira."
}

Response 201 Created

{
  "success": true,
  "message": "Operadora de saúde criada com sucesso!",
  "data": {
    "id": 1,
    "razao_social": "Unimed Salvador",
    "cnpj": "12.345.678/0001-90",
    "registro_ans": "123456",
    "tipo_contratacao": "Coletivo empresarial",
    "tipo_cobertura": "Ambulatorial + Hospitalar",
    "abrangencia": "Nacional",
    "numero_contrato": "CT-2026-0001",
    "status": "ativo",
    "observacao": "Operadora preferencial da carteira.",
    "id_usuario_created": 42,
    "data_hora_criacao": "2026-07-03T10:15:00"
  }
}

Validações de campos (razao_social obrigatória, status inválido) retornam 422 Unprocessable Entity. Escopo: operadora_saude:write

GET /operadora-saude/by-user

Lista todas as operadoras do usuário autenticado, com filtros opcionais e paginação. Lista vazia é um estado válido - sempre retorna 200 OK, com data: [] e a mensagem "Nenhuma operadora de saúde encontrada.".

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
statusstrquerynãoFiltro por status do cadastro (ex.: ativo).
razao_socialstrquerynãoFiltro por razão social (busca parcial, ex.: Unimed).
pageint (>= 1)querynãoPágina 1-based.
per_pageint (1..500)querynãoItens por página.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Operadoras de saúde recuperadas com sucesso!",
  "data": [
    {
      "id": 1,
      "razao_social": "Unimed Salvador",
      "cnpj": "12.345.678/0001-90",
      "registro_ans": "123456",
      "tipo_contratacao": "Coletivo empresarial",
      "tipo_cobertura": "Ambulatorial + Hospitalar",
      "abrangencia": "Nacional",
      "numero_contrato": "CT-2026-0001",
      "status": "ativo",
      "observacao": "Operadora preferencial da carteira.",
      "id_usuario_created": 42,
      "data_hora_criacao": "2026-07-03T10:15:00"
    }
  ]
}

Escopo: operadora_saude:read

GET /operadora-saude/{operadora_id}

Detalha uma operadora do usuário autenticado pelo ID inteiro. Quando não encontrada (ou pertencente a outro usuário), retorna 404 Not Found.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
operadora_idintpathsimID interno da operadora

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Operadora de saúde encontrada!",
  "data": {
    "id": 1,
    "razao_social": "Unimed Salvador",
    "cnpj": "12.345.678/0001-90",
    "registro_ans": "123456",
    "tipo_contratacao": "Coletivo empresarial",
    "tipo_cobertura": "Ambulatorial + Hospitalar",
    "abrangencia": "Nacional",
    "numero_contrato": "CT-2026-0001",
    "status": "ativo",
    "observacao": "Operadora preferencial da carteira.",
    "id_usuario_created": 42,
    "data_hora_criacao": "2026-07-03T10:15:00"
  }
}

Escopo: operadora_saude:read

PUT /operadora-saude/{operadora_id}

Atualiza uma operadora existente do usuário autenticado. O body é um OperadoraSaudeUpdate com campos parciais - somente o que vier preenchido é alterado. Os campos id, id_usuario_created e data_hora_criacao são imutáveis e não aparecem no schema (proteção contra mass-assignment).

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
operadora_idintpathsimID da operadora

Request (OperadoraSaudeUpdate - todos os campos opcionais)

{
  "status": "suspenso",
  "observacao": "Contrato em renegociação."
}

Response 200 OK

{
  "success": true,
  "message": "Operadora de saúde atualizada!",
  "data": {
    "id": 1,
    "razao_social": "Unimed Salvador",
    "cnpj": "12.345.678/0001-90",
    "registro_ans": "123456",
    "tipo_contratacao": "Coletivo empresarial",
    "tipo_cobertura": "Ambulatorial + Hospitalar",
    "abrangencia": "Nacional",
    "numero_contrato": "CT-2026-0001",
    "status": "suspenso",
    "observacao": "Contrato em renegociação.",
    "id_usuario_created": 42,
    "data_hora_criacao": "2026-07-03T10:15:00"
  }
}

Escopo: operadora_saude:write

DELETE /operadora-saude/{operadora_id}

Remove uma operadora de saúde do usuário autenticado pelo ID.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
operadora_idintpathsimID da operadora

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Operadora de saúde removida!",
  "data": null
}

Escopo: operadora_saude:write

Schemas

OperadoraSaudeCreate

Herda todos os campos de OperadoraSaudeBase. Apenas razao_social é obrigatório.

CampoTipoObrigatórioObservações
razao_socialstrsimRazão social / nome da operadora. 1-200 caracteres.
cnpjstrnãoCNPJ da operadora. Máx. 20 caracteres (apenas comprimento é validado).
registro_ansstrnãoRegistro da operadora na ANS. Máx. 50 caracteres.
tipo_contratacaostrnãoTipo de contratação (ex.: Coletivo empresarial). Máx. 100.
tipo_coberturastrnãoTipo de cobertura (ex.: Ambulatorial + Hospitalar). Máx. 100.
abrangenciastrnãoAbrangência geográfica (ex.: Nacional). Máx. 100.
numero_contratostrnãoNúmero do contrato com a operadora. Máx. 100.
statusstrnãoStatus do cadastro. Default ativo. Ver valores aceitos abaixo.
observacaostrnãoObservação livre do cadastro.

Valores aceitos em status: ativo, inativo, suspenso, cancelado.

OperadoraSaudeUpdate

Todos os campos são opcionais; apenas os enviados são atualizados. Os campos imutáveis (id, id_usuario_created, data_hora_criacao) não aparecem aqui - bloqueio contra mass-assignment.

CampoTipoObservações
razao_socialstr1-200 caracteres.
cnpjstrMáx. 20 caracteres.
registro_ansstrMáx. 50 caracteres.
tipo_contratacaostrMáx. 100 caracteres.
tipo_coberturastrMáx. 100 caracteres.
abrangenciastrMáx. 100 caracteres.
numero_contratostrMáx. 100 caracteres.
statusstrativo, inativo, suspenso ou cancelado.
observacaostrObservação livre.

OperadoraSaudeRead

Herda OperadoraSaudeBase e adiciona os campos gerenciados (id, owner, timestamp).

CampoTipoNotas
idintIdentificador da operadora de saúde.
razao_socialstrRazão social / nome da operadora.
cnpjstrCNPJ (pode ser null).
registro_ansstrRegistro na ANS (pode ser null).
tipo_contratacaostrTipo de contratação (pode ser null).
tipo_coberturastrTipo de cobertura (pode ser null).
abrangenciastrAbrangência geográfica (pode ser null).
numero_contratostrNúmero do contrato (pode ser null).
statusstrStatus do cadastro (ativo por padrão).
observacaostrObservação livre (pode ser null).
id_usuario_createdintID do usuário que criou (multi-tenant).
data_hora_criacaodatetimeTimestamp de criação (server-side).

Notas

  • Toda resposta segue o envelope { success, message, data } (ou { success: false, message, details } em erro). Códigos HTTP refletem semântica REST padrão.
  • A rota estática GET /operadora-saude/by-user é declarada antes da rota dinâmica GET /operadora-saude/{operadora_id}, então o FastAPI resolve by-user como rota estática (e não interpreta by-user como um operadora_id).
  • O cadastro é multi-tenant: GET /by-user lista apenas as operadoras do usuário autenticado, e detalhar/atualizar/excluir uma operadora de outro usuário retorna 404 Not Found.
  • O cnpj valida apenas o comprimento (máx. 20 caracteres), sem verificação dos dígitos - mesmo padrão do resto da API.