Lançamento Plano Saúde
Endpoints da WebApiAlcance para gerenciar lançamentos de plano de saúde - os registros mensais de valores de plano de saúde por cliente, sócio (QSA) e operadora, usados como base para dedução de IRPF e para a apuração da Reinf (aba Plano de Saúde). Cobrem criação, listagem por usuário logado, listagem por cliente, o mapa de competência agregado (visão org-wide), exportação em CSV/XLSX, detalhamento por ID, atualização parcial e exclusão.
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/lancamento-plano-saudeEscopos necessários
lancamento_plano_saude:read- listagem por usuário, listagem por cliente, mapa de competência, exportação e detalhamentolancamento_plano_saude:write- criação, atualização e exclusão
O escopo é derivado da rota: o prefixo /lancamento-plano-saude vira o recurso lancamento_plano_saude (hífen → underscore), e o método HTTP define a ação (read para GET, write para POST/PUT/DELETE).
Endpoints
POST /lancamento-plano-saude/
Cria um novo lançamento de plano de saúde. O id_usuario_created é derivado do usuário autenticado - não é enviado no body.
Parâmetros
Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (LancamentoPlanoSaudeCreate). Campos obrigatórios: id_cliente, id_qsa_cliente, id_operadora_saude, competencia, data_registro e valor.
Request
{
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"valor": "540.00"
}Response 201 Created
{
"success": true,
"message": "Lançamento de plano de saúde criado com sucesso!",
"data": {
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": null,
"valor": "540.00",
"natureza_rendimento": null,
"status": "pendente",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
}Erros de validação de negócio retornam código conforme a mensagem: 404 Not Found (registro não encontrado), 409 Conflict (duplicado), 403 Forbidden (acesso negado) ou 422 Unprocessable Entity (demais casos). Escopo: lancamento_plano_saude:write
GET /lancamento-plano-saude/by-user
Lista os lançamentos criados pelo usuário logado. Lista vazia é um estado válido - sempre retorna 200 OK, inclusive com data: [] e a mensagem "Nenhum lançamento de plano de saúde encontrado.".
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
competencia | str | query | não | Filtro por competência (MM/YYYY). |
page | int >= 1 | query | não | Página. |
per_page | int 1..500 | query | não | Itens por página. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Lançamentos recuperados com sucesso!",
"data": [
{
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": null,
"valor": "540.00",
"natureza_rendimento": null,
"status": "pendente",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
]
}Escopo: lancamento_plano_saude:read
GET /lancamento-plano-saude/by-customer/{customer_id}
Lista os lançamentos de um cliente específico. Lista vazia retorna 200 OK com data: [].
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
customer_id | int | path | sim | ID interno do cliente. |
competencia | str | query | não | Filtro por competência (MM/YYYY). |
status | str | query | não | Filtro por status do lançamento. |
page | int >= 1 | query | não | Página. |
per_page | int 1..500 | query | não | Itens por página. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Lançamentos recuperados com sucesso!",
"data": [
{
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": null,
"valor": "540.00",
"natureza_rendimento": null,
"status": "pendente",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
]
}Erros de validação seguem o mapeamento de status descrito no POST. Escopo: lancamento_plano_saude:read
GET /lancamento-plano-saude/mapa-competencia
Gera o mapa de competência da Reinf (aba Plano de Saúde): agrega, por competência (ano/mês), os clientes elegíveis (com sócios) junto de seus sócios, operadoras ativas, dependentes e lançamentos do mês. Visão org-wide.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
ano | int 2000..2100 | query | sim | Ano de referência. |
mes | int 1..12 | query | sim | Mês de referência. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Mapa de competência gerado com sucesso!",
"data": {
"ano": 2026,
"mes": 1,
"competencia": "01/2026",
"resumo": {
"clientes_total": 12,
"clientes_pendentes": 4,
"clientes_ok": 8,
"valor_distribuido": "6480.00",
"qtd_lancamentos": 15,
"socios_contemplados": 10,
"socios_pendentes": 5
},
"comparativo_mes_anterior": {
"valor_distribuido_delta_pct": "+12.5",
"lancamentos_delta": 3
},
"clientes": [
{
"id_cliente": 1234,
"nome": "Cliente Exemplo LTDA",
"status": "ok",
"socios": [{ "id": 45, "nome": "João da Silva" }],
"operadoras_ativas": [{ "id": 3, "razao_social": "Operadora Saúde S.A." }],
"dependentes": [],
"lancamentos": [
{
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": null,
"valor": "540.00",
"natureza_rendimento": null,
"status": "pendente",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
]
}
]
}
}Escopo: lancamento_plano_saude:read
GET /lancamento-plano-saude/mapa-competencia/export
Exporta o mapa de competência em CSV ou XLSX. Devolve o arquivo diretamente (Content-Disposition: attachment), não o envelope JSON.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
ano | int 2000..2100 | query | sim | Ano de referência. |
mes | int 1..12 | query | sim | Mês de referência. |
formato | str | query | não | csv (default) ou xlsx. |
status | str | query | não | Filtro por status do cliente: pendentes ou ok. |
formato fora de csv/xlsx ou status fora de pendentes/ok retornam 422 Unprocessable Entity.
Request
Sem corpo de requisição.
Response 200 OK
GET /api/v1/lancamento-plano-saude/mapa-competencia/export?ano=2026&mes=1&formato=xlsx&status=pendentes
Content-Disposition: attachment; filename="mapa-competencia-plano-saude-2026-01.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
<conteúdo binário do arquivo>Escopo: lancamento_plano_saude:read
GET /lancamento-plano-saude/{lancamento_id}
Detalha um lançamento pelo ID inteiro. Quando não encontrado, retorna 404 Not Found.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
lancamento_id | int | path | sim | ID interno do lançamento. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Lançamento de plano de saúde encontrado!",
"data": {
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": null,
"valor": "540.00",
"natureza_rendimento": null,
"status": "pendente",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
}Escopo: lancamento_plano_saude:read
PUT /lancamento-plano-saude/{lancamento_id}
Atualiza um lançamento existente. O body é um LancamentoPlanoSaudeUpdate com campos parciais - somente o que vier preenchido é alterado. Os campos id, id_usuario_created, id_cliente e data_hora_criacao são imutáveis.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
lancamento_id | int | path | sim | ID do lançamento. |
Request (LancamentoPlanoSaudeUpdate - todos os campos opcionais)
{
"valor": "620.00",
"status": "pago",
"data_pagamento": "2026-01-15"
}Response 200 OK
{
"success": true,
"message": "Lançamento de plano de saúde atualizado!",
"data": {
"id": 88,
"id_cliente": 1234,
"id_qsa_cliente": 45,
"id_dependente": null,
"id_operadora_saude": 3,
"competencia": "01/2026",
"data_registro": "2026-01-10",
"data_pagamento": "2026-01-15",
"valor": "620.00",
"natureza_rendimento": null,
"status": "pago",
"observacao": null,
"nome_socio": "João da Silva",
"nome_dependente": null,
"nome_operadora": "Unimed",
"id_usuario_created": 7,
"data_hora_criacao": "2026-01-10T14:32:00"
}
}Escopo: lancamento_plano_saude:write
DELETE /lancamento-plano-saude/{lancamento_id}
Remove um lançamento de plano de saúde pelo ID.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
lancamento_id | int | path | sim | ID do lançamento. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Lançamento de plano de saúde removido!",
"data": null
}Escopo: lancamento_plano_saude:write
Schemas
LancamentoPlanoSaudeCreate
Herda todos os campos de LancamentoPlanoSaudeBase. O id_usuario_created é derivado do usuário autenticado (não enviado no body).
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
id_cliente | int | sim | ID do cliente (customer). |
id_qsa_cliente | int | sim | ID do sócio no quadro societário (QSA). |
id_dependente | int | não | ID do dependente. Default null. |
id_operadora_saude | int | sim | ID da operadora de saúde. |
competencia | str | sim | Formato MM/YYYY (ex.: 01/2026). |
data_registro | date | sim | Data do registro (YYYY-MM-DD). |
data_pagamento | date | não | Data do pagamento. Default null. |
valor | Decimal | sim | Não pode ser negativo; deve ser < 10.000.000.000.000. |
natureza_rendimento | str | não | Máx. 100 caracteres. Default null. |
status | "pendente" | "pago" | "cancelado" | não | Default "pendente". |
observacao | str | não | Observação livre. Default null. |
LancamentoPlanoSaudeUpdate
Todos os campos são opcionais; apenas os enviados são atualizados. Campos imutáveis (id, id_usuario_created, id_cliente, data_hora_criacao) não aparecem aqui.
| Campo | Tipo | Observações |
|---|---|---|
id_qsa_cliente | int | Reatribui o sócio. |
id_dependente | int | Reatribui o dependente. |
id_operadora_saude | int | Reatribui a operadora. |
competencia | str | Formato MM/YYYY. |
data_registro | date | Nova data de registro. |
data_pagamento | date | Nova data de pagamento. |
valor | Decimal | Mesmas regras de valor do Create. |
natureza_rendimento | str | Máx. 100 caracteres. |
status | "pendente" | "pago" | "cancelado" | Novo status. |
observacao | str | Nova observação. |
LancamentoPlanoSaudeRead
Herda LancamentoPlanoSaudeBase e acrescenta os campos de leitura.
| Campo | Tipo | Notas |
|---|---|---|
id | int | Identificador do lançamento. |
id_cliente | int | Cliente do lançamento. |
id_qsa_cliente | int | Sócio (QSA). |
nome_socio | str | null | Nome do sócio (customer_qsa.nome) de id_qsa_cliente, denormalizado em lote no service. |
id_dependente | int | null | Dependente (quando aplicável). |
nome_dependente | str | null | Nome do dependente (customer_dependente.nome_completo) de id_dependente. null quando não há dependente. |
id_operadora_saude | int | Operadora de saúde. |
nome_operadora | str | null | Razão social da operadora (operadora_saude.razao_social) de id_operadora_saude. |
competencia | str | Competência MM/YYYY. |
data_registro | date | Data do registro. |
data_pagamento | date | null | Data do pagamento. |
valor | Decimal | Valor do lançamento. |
natureza_rendimento | str | null | Natureza do rendimento. |
status | "pendente" | "pago" | "cancelado" | Situação do lançamento. |
observacao | str | null | Observação livre. |
id_usuario_created | int | null | null quando criado pelo Portal do Cliente. |
data_hora_criacao | datetime | Timestamp de criação. |
MapaCompetenciaPlanoSaude
Payload do mapa de competência mensal (Reinf - aba Plano de Saúde).
| Campo | Tipo | Notas |
|---|---|---|
ano | int | Ano de referência. |
mes | int | Mês de referência. |
competencia | str | Competência MM/YYYY. |
resumo | MapaResumoPlanoSaude | Totais do mês (ver abaixo). |
comparativo_mes_anterior | MapaComparativoPlanoSaude | null | Deltas vs mês anterior. |
clientes | List[MapaClientePlanoSaude] | Um item por cliente elegível. |
MapaResumoPlanoSaude: clientes_total, clientes_pendentes, clientes_ok (int), valor_distribuido (soma do mês, serializado como string com 2 casas), qtd_lancamentos, socios_contemplados, socios_pendentes (int).
MapaComparativoPlanoSaude: valor_distribuido_delta_pct (str, ex.: "+12.5"), lancamentos_delta (int).
MapaClientePlanoSaude: id_cliente (int), nome (str), status ("ok" | "pendente" - ok quando há ≥ 1 lançamento no mês), socios (List[MapaSocioItem]), operadoras_ativas (List[MapaOperadoraItem]), dependentes (List[MapaDependenteItem]) e lancamentos (List[LancamentoPlanoSaudeRead]).
Os itens auxiliares carregam apenas identificação: MapaSocioItem = { id, nome }, MapaOperadoraItem = { id, razao_social }, MapaDependenteItem = { id, nome }.
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. - As rotas estáticas
GET /by-user,GET /by-customer/{customer_id},GET /mapa-competenciaeGET /mapa-competencia/exportsão declaradas antes da rota dinâmicaGET /{lancamento_id}, então são resolvidas corretamente (e não interpretadas como umlancamento_id). - Valores monetários do mapa de competência (
valor_distribuido) são serializados como string com 2 casas decimais. competenciasempre segue o formatoMM/YYYY;valornão pode ser negativo e deve ser menor que10.000.000.000.000.- Lançamentos criados pelo Portal do Cliente têm
id_usuario_created = null(a autoria é registrada por outra coluna interna,id_portal_user_created). GET /mapa-competencia/exportdevolve o arquivo binário (CSV/XLSX) comContent-Disposition: attachment, não o envelope JSON.