{"openapi":"3.1.0","info":{"title":"Altis Pronto — API","version":"1.0.0","description":"A securitizadora cadastra clínicas e, com X-Clinica-Id, opera médicos, recebíveis e a trava de domicílio. A chave da clínica faz o mesmo só para ela. Valores em reais. Datas em ISO-8601. Autenticação por Bearer token."},"servers":[{"url":"https://pronto.altis.online"}],"security":[{"bearer":[]}],"tags":[{"name":"Clínicas"},{"name":"Planos"},{"name":"Médicos"},{"name":"Recebíveis"},{"name":"Operações"}],"paths":{"/api/v1/clinicas":{"post":{"tags":["Clínicas"],"operationId":"clinicas-criar","summary":"Cadastra uma clínica da securitizadora.","description":"Exige a chave da securitizadora, não a da clínica. A clínica nasce vinculada a essa securitizadora e no mesmo ambiente: sandbox gera clínica sandbox. A resposta traz chave uma única vez, para a clínica chamar a API sem a securitizadora. Sem taxaMensal, o padrão é 0.0198. Sem taxaOriginacao e tarifa, o padrão é 0.","parameters":[],"responses":{"201":{"description":"Cadastra uma clínica da securitizadora.","content":{"application/json":{"example":{"id":"cm9clinica","nome":"Clínica Cardio Leste","cnpj":"00000000000191","email":"financeiro@cardio.com.br","sandbox":false,"taxaMensal":0.0198,"taxaOriginacao":0.015,"tarifa":25,"criadoEm":"2026-09-30T18:00:00.000Z","atualizadoEm":"2026-09-30T18:00:00.000Z","chave":"apt_sua_chave"}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. nome_invalido: Nome com menos de 3 caracteres. cnpj_invalido: CNPJ ausente, inválido ou diferente da clínica autenticada (atributo cnpj no XML). email_invalido: E-mail de contato da clínica ausente ou sem @. preco_invalido: Taxa mensal, originação ou tarifa fora do intervalo. Taxa mensal em fração, por exemplo 0.0198.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"cnpj_duplicado: Já existe clínica ou securitizadora com este CNPJ neste ambiente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nome":{"type":"string","description":"Nome da clínica, ao menos 3 caracteres."},"cnpj":{"type":"string","description":"Com ou sem máscara. Precisa ter dígitos verificadores válidos."},"email":{"type":"string","description":"Recebe o pedido de troca de domicílio, fora do sandbox."},"taxaMensal":{"type":"number","description":"Fração mensal, por exemplo 0.0198. Maior que 0 e menor que 0.30."},"taxaOriginacao":{"type":"number","description":"Fração sobre o valor de face. Entre 0 e 0.30."},"tarifa":{"type":"number","description":"Tarifa fixa em reais, por operação. Zero ou mais."}},"required":["nome","cnpj","email"]},"example":{"nome":"Clínica Cardio Leste","cnpj":"00000000000191","email":"financeiro@cardio.com.br","taxaMensal":0.0198,"taxaOriginacao":0.015,"tarifa":25}}}}},"get":{"tags":["Clínicas"],"operationId":"clinicas-listar","summary":"Lista as clínicas desta securitizadora.","description":"Só devolve clínicas vinculadas à chave. A chave da clínica não aparece de novo.","parameters":[{"name":"limite","in":"query","required":false,"description":"Itens por página. Padrão 50, máximo 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Passe o pagina.proximo da resposta anterior. Opaco.","schema":{"type":"string"}},{"name":"atualizadoDesde","in":"query","required":false,"description":"ISO-8601. Devolve só o que mudou a partir deste instante.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Lista as clínicas desta securitizadora.","content":{"application/json":{"example":{"clinicas":[{"id":"cm9clinica","nome":"Clínica Cardio Leste","cnpj":"00000000000191","email":"financeiro@cardio.com.br","sandbox":false,"taxaMensal":0.0198,"taxaOriginacao":0.015,"tarifa":25,"criadoEm":"2026-09-30T18:00:00.000Z","atualizadoEm":"2026-09-30T18:00:00.000Z"}],"pagina":{"limite":50,"proximo":null}}}}},"400":{"description":"limite_invalido: Limite negativo ou parâmetro limite da listagem inválido. data_invalida: atualizadoDesde não é uma data ISO-8601. cursor_invalido: O cursor de paginação não existe.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/clinicas/{id}":{"get":{"tags":["Clínicas"],"operationId":"clinicas-obter","summary":"Detalhe de uma clínica.","description":"Um id de outra securitizadora responde 404.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco da clínica.","schema":{"type":"string"}}],"responses":{"200":{"description":"Detalhe de uma clínica.","content":{"application/json":{"example":{"id":"cm9clinica","nome":"Clínica Cardio Leste","cnpj":"00000000000191","email":"financeiro@cardio.com.br","sandbox":false,"taxaMensal":0.0198,"taxaOriginacao":0.015,"tarifa":25,"criadoEm":"2026-09-30T18:00:00.000Z","atualizadoEm":"2026-09-30T18:00:00.000Z"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}},"patch":{"tags":["Clínicas"],"operationId":"clinicas-atualizar","summary":"Atualiza nome, e-mail ou preço.","description":"Envie só o que muda. O preço vale para as próximas operações. Operações já abertas mantêm o preço contratado. Não troca o ambiente nem o CNPJ.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco da clínica.","schema":{"type":"string"}}],"responses":{"200":{"description":"Atualiza nome, e-mail ou preço.","content":{"application/json":{"example":{"id":"cm9clinica","nome":"Clínica Cardio Leste","cnpj":"00000000000191","email":"financeiro@cardio.com.br","sandbox":false,"taxaMensal":0.021,"taxaOriginacao":0.015,"tarifa":25,"criadoEm":"2026-09-30T18:00:00.000Z","atualizadoEm":"2026-09-30T18:10:00.000Z"}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. preco_invalido: Taxa mensal, originação ou tarifa fora do intervalo. Taxa mensal em fração, por exemplo 0.0198.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nome":{"type":"string","description":"Nome da clínica, ao menos 3 caracteres."},"email":{"type":"string","description":"E-mail de contato."},"taxaMensal":{"type":"number","description":"Fração mensal, por exemplo 0.0198."},"taxaOriginacao":{"type":"number","description":"Fração sobre o valor de face."},"tarifa":{"type":"number","description":"Tarifa fixa em reais."}}},"example":{"taxaMensal":0.021}}}}}},"/api/v1/convenios":{"get":{"tags":["Planos"],"operationId":"convenios","summary":"Catálogo de planos aceitos.","description":"Use o campo codigo em convenio ao enviar um recebível de plano. A clínica não cadastra plano novo por esta API. Produto pago pela própria clínica, como uma consulta, não entra neste catálogo: envie o código no recebível.","parameters":[],"responses":{"200":{"description":"Catálogo de planos aceitos.","content":{"application/json":{"example":{"convenios":[{"codigo":"unimed","nome":"Unimed","sigla":"UN","prazoMedioPagamentoDias":45},{"codigo":"amil","nome":"Amil","sigla":"AM","prazoMedioPagamentoDias":60}]}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/medicos":{"post":{"tags":["Médicos"],"operationId":"medicos-criar","summary":"Cadastra ou atualiza um médico.","description":"A chave é o CPF dentro da clínica. O primeiro envio responde 201. O mesmo CPF enviado de novo responde 200 e atualiza nome, telefone e só os campos opcionais presentes no corpo: um campo omitido mantém o valor gravado. Sem chavePix no primeiro envio, a chave Pix passa a ser o CPF. O médico completa o acesso no aplicativo com o código SMS. Enquanto o status for pre_cadastro ele ainda não antecipa.","parameters":[],"responses":{"200":{"description":"O CPF já existia e o cadastro foi atualizado.","content":{"application/json":{"example":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","telefone":"+5511999998888","email":"ana.lima@clinica.com.br","crm":"123456-SP","especialidade":"Cardiologia","status":"pre_cadastro","cadastroCompletoEm":null,"limite":50000,"limiteUsado":0,"conta":{"banco":"Itaú","codigoBanco":"341","agencia":"1234","conta":"56789-0","tipoChavePix":"CPF","chavePix":"52998224725"},"criadoEm":"2026-09-22T18:04:00.000Z","atualizadoEm":"2026-09-22T18:04:00.000Z"}}}},"201":{"description":"Cadastra ou atualiza um médico.","content":{"application/json":{"example":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","telefone":"+5511999998888","email":"ana.lima@clinica.com.br","crm":"123456-SP","especialidade":"Cardiologia","status":"pre_cadastro","cadastroCompletoEm":null,"limite":50000,"limiteUsado":0,"conta":{"banco":"Itaú","codigoBanco":"341","agencia":"1234","conta":"56789-0","tipoChavePix":"CPF","chavePix":"52998224725"},"criadoEm":"2026-09-22T18:04:00.000Z","atualizadoEm":"2026-09-22T18:04:00.000Z"}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. telefone_invalido: Telefone ausente ou fora do formato brasileiro. nome_invalido: Nome com menos de 3 caracteres. limite_invalido: Limite negativo ou parâmetro limite da listagem inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cpf":{"type":"string","description":"Com ou sem máscara. Precisa ter dígitos verificadores válidos."},"nome":{"type":"string","description":"Nome completo, ao menos 3 caracteres."},"telefone":{"type":"string","description":"Celular com DDD, com ou sem +55. Recebe o SMS de ativação."},"email":{"type":"string","description":"E-mail do médico."},"crm":{"type":"string","description":"Número e UF, por exemplo 123456-SP. Vai para o contrato de cessão."},"especialidade":{"type":"string","description":"Texto livre."},"limite":{"type":"number","description":"Limite total de antecipação em reais. Padrão 0 no cadastro; com 0 o médico não antecipa."},"banco":{"type":"string","description":"Nome do banco da conta do médico."},"codigoBanco":{"type":"string","description":"Código COMPE, por exemplo 341."},"agencia":{"type":"string","description":"Agência, sem dígito."},"conta":{"type":"string","description":"Conta com dígito."},"tipoChavePix":{"type":"string","description":"CPF, E-mail, Telefone ou Aleatória. Padrão CPF."},"chavePix":{"type":"string","description":"Chave que recebe o desembolso. Padrão: o CPF."}},"required":["cpf","nome","telefone"]},"example":{"cpf":"529.982.247-25","nome":"Ana Lima","telefone":"11999998888","email":"ana.lima@clinica.com.br","crm":"123456-SP","especialidade":"Cardiologia","limite":50000,"banco":"Itaú","codigoBanco":"341","agencia":"1234","conta":"56789-0","tipoChavePix":"CPF","chavePix":"52998224725"}}}}},"get":{"tags":["Médicos"],"operationId":"medicos-listar","summary":"Lista os médicos da clínica.","description":"Filtre por CPF para buscar um médico sem guardar o id. limiteUsado soma as operações que não foram recusadas.","parameters":[{"name":"limite","in":"query","required":false,"description":"Itens por página. Padrão 50, máximo 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Passe o pagina.proximo da resposta anterior. Opaco.","schema":{"type":"string"}},{"name":"atualizadoDesde","in":"query","required":false,"description":"ISO-8601. Devolve só o que mudou a partir deste instante.","schema":{"type":"string","format":"date-time"}},{"name":"cpf","in":"query","required":false,"description":"CPF com ou sem máscara.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"pre_cadastro ou ativo.","schema":{"type":"string","enum":["pre_cadastro","ativo"]}}],"responses":{"200":{"description":"Lista os médicos da clínica.","content":{"application/json":{"example":{"medicos":[{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","telefone":"+5511999998888","email":"ana.lima@clinica.com.br","crm":"123456-SP","especialidade":"Cardiologia","status":"pre_cadastro","cadastroCompletoEm":null,"limite":50000,"limiteUsado":0,"conta":{"banco":"Itaú","codigoBanco":"341","agencia":"1234","conta":"56789-0","tipoChavePix":"CPF","chavePix":"52998224725"},"criadoEm":"2026-09-22T18:04:00.000Z","atualizadoEm":"2026-09-22T18:04:00.000Z"}],"pagina":{"limite":50,"proximo":null}}}}},"400":{"description":"limite_invalido: Limite negativo ou parâmetro limite da listagem inválido. data_invalida: atualizadoDesde não é uma data ISO-8601. cursor_invalido: O cursor de paginação não existe. cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. status_invalido: Status fora da lista aceita naquele recurso. No envio de recebível, só confirmado ou pendente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/medicos/{id}":{"get":{"tags":["Médicos"],"operationId":"medicos-obter","summary":"Detalhe de um médico.","description":"O id vem da resposta do cadastro. Um id de outra clínica responde 404.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco do médico.","schema":{"type":"string"}}],"responses":{"200":{"description":"Detalhe de um médico.","content":{"application/json":{"example":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","telefone":"+5511999998888","email":"ana.lima@clinica.com.br","crm":"123456-SP","especialidade":"Cardiologia","status":"pre_cadastro","cadastroCompletoEm":null,"limite":50000,"limiteUsado":0,"conta":{"banco":"Itaú","codigoBanco":"341","agencia":"1234","conta":"56789-0","tipoChavePix":"CPF","chavePix":"52998224725"},"criadoEm":"2026-09-22T18:04:00.000Z","atualizadoEm":"2026-09-22T18:04:00.000Z"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/recebiveis":{"post":{"tags":["Recebíveis"],"operationId":"recebiveis-enviar","summary":"Envia um lote ou uma lista de lotes.","description":"Aceita um objeto ou uma lista de até 500 objetos. A chave do lote é clínica + médico + lote + competência. Reenviar atualiza valores. Se o corpo incluir procedimentos, a lista anterior desse lote é substituída; sem procedimentos, a lista gravada fica como está. O envio é atômico: ou todos os itens entram, ou nenhum. Numa lista, a mensagem de erro começa com Item N para indicar qual item falhou. Responde 201 quando todos os itens são novos e 200 quando ao menos um já existia; cada item traz criado true ou false. Um lote já vinculado a uma operação responde 409. Valores em reais. Status aceitos no envio: confirmado e pendente, ambos elegíveis para antecipação. antecipado e pago são definidos pela Altis. Cada lote tem uma origem. Para um plano, envie convenio com o código do catálogo. Para um produto pago pela clínica, envie produto e, se quiser, produtoNome — por exemplo produto consulta e produtoNome Consulta. origem pode ser plano ou produto; se omitida, a Altis infere pelo campo enviado. Informe um dos dois, não os dois.","parameters":[],"responses":{"200":{"description":"Ao menos um lote já existia e foi atualizado.","content":{"application/json":{"example":{"recebiveis":[{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z","procedimentos":[{"id":"cm9proc014","descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03T00:00:00.000Z","quantidade":1,"valorUnitario":8420.5}],"criado":true}]}}}},"201":{"description":"Envia um lote ou uma lista de lotes.","content":{"application/json":{"example":{"recebiveis":[{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z","procedimentos":[{"id":"cm9proc014","descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03T00:00:00.000Z","quantidade":1,"valorUnitario":8420.5}],"criado":true}]}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. vazio: A lista de recebíveis veio vazia. muitos_itens: Mais de 500 recebíveis numa só chamada. cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. origem_invalida: Faltou a origem, vieram plano e produto juntos, ou origem fora de plano e produto. convenio_invalido: Código de plano fora do catálogo. produto_invalido: Código de produto ausente ou fora do formato (letras, números e hífen). lote_invalido: Lote, competência ou vencimento ausente. valor_invalido: Valor bruto ausente, zero, negativo ou não numérico. procedimento_invalido: procedimentos não é lista, ou um item tem quantidade ou valor unitário inválidos. status_invalido: Status fora da lista aceita naquele recurso. No envio de recebível, só confirmado ou pendente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"medico_nao_encontrado: O CPF ainda não foi cadastrado nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"lote_vinculado: O lote já entrou numa operação e não pode ser alterado nem apagado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"cpf":{"type":"string","description":"CPF de um médico já cadastrado nesta clínica."},"origem":{"type":"string","description":"Se omitida, vem de convenio ou produto.","enum":["plano","produto"]},"convenio":{"type":"string","description":"Código do catálogo de planos. Obrigatório quando a origem é plano."},"produto":{"type":"string","description":"Código do produto: letras, números e hífen. Obrigatório quando a origem é produto."},"produtoNome":{"type":"string","description":"Nome exibido ao médico. Padrão: derivado do código."},"lote":{"type":"string","description":"Código do lote na clínica."},"competencia":{"type":"string","description":"Mês de referência no formato AAAA-MM."},"vencimento":{"type":"string","description":"Data prevista de pagamento pelo pagador. AAAA-MM-DD ou ISO-8601."},"valorBruto":{"type":"number","description":"Valor faturado do lote em reais. Maior que zero. O líquido do lote é igual ao bruto."},"status":{"type":"string","description":"Padrão confirmado.","enum":["confirmado","pendente"]},"procedimentos":{"type":"array","description":"Composição do lote. Substitui a lista anterior quando enviada.","items":{"type":"object","properties":{"descricao":{"type":"string","description":"Padrão Procedimento."},"codigoTuss":{"type":"string","description":"Código TUSS."},"data":{"type":"string","description":"Data do atendimento. Padrão: o vencimento do lote."},"quantidade":{"type":"integer","description":"Inteiro maior que zero. Padrão 1."},"valorUnitario":{"type":"number","description":"Em reais. Padrão 0."}}}}},"required":["cpf","lote","competencia","vencimento","valorBruto"]},{"type":"array","items":{"type":"object","properties":{"cpf":{"type":"string","description":"CPF de um médico já cadastrado nesta clínica."},"origem":{"type":"string","description":"Se omitida, vem de convenio ou produto.","enum":["plano","produto"]},"convenio":{"type":"string","description":"Código do catálogo de planos. Obrigatório quando a origem é plano."},"produto":{"type":"string","description":"Código do produto: letras, números e hífen. Obrigatório quando a origem é produto."},"produtoNome":{"type":"string","description":"Nome exibido ao médico. Padrão: derivado do código."},"lote":{"type":"string","description":"Código do lote na clínica."},"competencia":{"type":"string","description":"Mês de referência no formato AAAA-MM."},"vencimento":{"type":"string","description":"Data prevista de pagamento pelo pagador. AAAA-MM-DD ou ISO-8601."},"valorBruto":{"type":"number","description":"Valor faturado do lote em reais. Maior que zero. O líquido do lote é igual ao bruto."},"status":{"type":"string","description":"Padrão confirmado.","enum":["confirmado","pendente"]},"procedimentos":{"type":"array","description":"Composição do lote. Substitui a lista anterior quando enviada.","items":{"type":"object","properties":{"descricao":{"type":"string","description":"Padrão Procedimento."},"codigoTuss":{"type":"string","description":"Código TUSS."},"data":{"type":"string","description":"Data do atendimento. Padrão: o vencimento do lote."},"quantidade":{"type":"integer","description":"Inteiro maior que zero. Padrão 1."},"valorUnitario":{"type":"number","description":"Em reais. Padrão 0."}}}}},"required":["cpf","lote","competencia","vencimento","valorBruto"]},"minItems":1,"maxItems":500}]},"example":{"cpf":"52998224725","origem":"plano","convenio":"unimed","lote":"UN-2026-09-014","competencia":"2026-09","vencimento":"2026-11-15","valorBruto":8420.5,"status":"confirmado","procedimentos":[{"descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03","quantidade":1,"valorUnitario":8420.5}]}}}}},"get":{"tags":["Recebíveis"],"operationId":"recebiveis-listar","summary":"Lista os lotes já recebidos.","description":"A listagem não traz os procedimentos. Use o detalhe para a composição do lote. cessaoId preenchido significa que o lote já foi antecipado.","parameters":[{"name":"limite","in":"query","required":false,"description":"Itens por página. Padrão 50, máximo 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Passe o pagina.proximo da resposta anterior. Opaco.","schema":{"type":"string"}},{"name":"atualizadoDesde","in":"query","required":false,"description":"ISO-8601. Devolve só o que mudou a partir deste instante.","schema":{"type":"string","format":"date-time"}},{"name":"cpf","in":"query","required":false,"description":"CPF do médico.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"confirmado, pendente, antecipado ou pago.","schema":{"type":"string","enum":["confirmado","pendente","antecipado","pago"]}},{"name":"lote","in":"query","required":false,"description":"Código exato do lote.","schema":{"type":"string"}},{"name":"competencia","in":"query","required":false,"description":"Competência gravada, por exemplo 2026-09.","schema":{"type":"string"}},{"name":"origem","in":"query","required":false,"description":"plano ou produto.","schema":{"type":"string","enum":["plano","produto"]}}],"responses":{"200":{"description":"Lista os lotes já recebidos.","content":{"application/json":{"example":{"recebiveis":[{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z"}],"pagina":{"limite":50,"proximo":null}}}}},"400":{"description":"limite_invalido: Limite negativo ou parâmetro limite da listagem inválido. data_invalida: atualizadoDesde não é uma data ISO-8601. cursor_invalido: O cursor de paginação não existe. cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. status_invalido: Status fora da lista aceita naquele recurso. No envio de recebível, só confirmado ou pendente. origem_invalida: Faltou a origem, vieram plano e produto juntos, ou origem fora de plano e produto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/recebiveis/xml":{"post":{"tags":["Recebíveis"],"operationId":"recebiveis-xml","summary":"Importa lotes no padrão XML v1.","description":"Use quando a clínica exporta produção em arquivo. Clínica e médicos não vão no XML: cadastre-os antes no backoffice ou pela API. A clínica autenticada pela chave é o destino. Cada Recebivel aponta o médico pelo Cpf já cadastrado. Atributo cnpj na raiz é opcional e, se vier, precisa bater com o CNPJ da clínica. Mesmas regras do envio JSON: chave lote+competência, upsert, até 500 itens, atômico. Content-Type: application/xml ou text/xml. Valores aceitam ponto (8420.50) ou vírgula (8420,50).","parameters":[],"responses":{"200":{"description":"Ao menos um lote já existia e foi atualizado.","content":{"application/json":{"example":{"recebiveis":[{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z","procedimentos":[{"id":"cm9proc014","descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03T00:00:00.000Z","quantidade":1,"valorUnitario":8420.5}],"criado":true}]}}}},"201":{"description":"Importa lotes no padrão XML v1.","content":{"application/json":{"example":{"recebiveis":[{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z","procedimentos":[{"id":"cm9proc014","descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03T00:00:00.000Z","quantidade":1,"valorUnitario":8420.5}],"criado":true}]}}}},"400":{"description":"xml_invalido: Corpo XML ausente, raiz diferente de AltisRecebiveis, ou versão diferente de 1. vazio: A lista de recebíveis veio vazia. muitos_itens: Mais de 500 recebíveis numa só chamada. cnpj_invalido: CNPJ ausente, inválido ou diferente da clínica autenticada (atributo cnpj no XML). cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. origem_invalida: Faltou a origem, vieram plano e produto juntos, ou origem fora de plano e produto. convenio_invalido: Código de plano fora do catálogo. produto_invalido: Código de produto ausente ou fora do formato (letras, números e hífen). lote_invalido: Lote, competência ou vencimento ausente. valor_invalido: Valor bruto ausente, zero, negativo ou não numérico. procedimento_invalido: procedimentos não é lista, ou um item tem quantidade ou valor unitário inválidos. status_invalido: Status fora da lista aceita naquele recurso. No envio de recebível, só confirmado ou pendente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"medico_nao_encontrado: O CPF ainda não foi cadastrado nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"lote_vinculado: O lote já entrou numa operação e não pode ser alterado nem apagado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/xml":{"schema":{"type":"string","description":"Documento AltisRecebiveis versao=1."},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<AltisRecebiveis versao=\"1\" cnpj=\"45567890000156\">\n  <Recebivel>\n    <Cpf>52998224725</Cpf>\n    <Origem>plano</Origem>\n    <Convenio>unimed</Convenio>\n    <Lote>UN-2026-09-014</Lote>\n    <Competencia>2026-09</Competencia>\n    <Vencimento>2026-11-15</Vencimento>\n    <ValorBruto>8420.50</ValorBruto>\n    <Status>confirmado</Status>\n    <Procedimentos>\n      <Procedimento>\n        <Descricao>Consulta em consultório</Descricao>\n        <CodigoTuss>10101012</CodigoTuss>\n        <Data>2026-09-03</Data>\n        <Quantidade>1</Quantidade>\n        <ValorUnitario>8420.50</ValorUnitario>\n      </Procedimento>\n    </Procedimentos>\n  </Recebivel>\n</AltisRecebiveis>"},"text/xml":{"schema":{"type":"string"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<AltisRecebiveis versao=\"1\" cnpj=\"45567890000156\">\n  <Recebivel>\n    <Cpf>52998224725</Cpf>\n    <Origem>plano</Origem>\n    <Convenio>unimed</Convenio>\n    <Lote>UN-2026-09-014</Lote>\n    <Competencia>2026-09</Competencia>\n    <Vencimento>2026-11-15</Vencimento>\n    <ValorBruto>8420.50</ValorBruto>\n    <Status>confirmado</Status>\n    <Procedimentos>\n      <Procedimento>\n        <Descricao>Consulta em consultório</Descricao>\n        <CodigoTuss>10101012</CodigoTuss>\n        <Data>2026-09-03</Data>\n        <Quantidade>1</Quantidade>\n        <ValorUnitario>8420.50</ValorUnitario>\n      </Procedimento>\n    </Procedimentos>\n  </Recebivel>\n</AltisRecebiveis>"}}}}},"/api/v1/recebiveis/{id}":{"get":{"tags":["Recebíveis"],"operationId":"recebiveis-obter","summary":"Detalhe de um lote, com procedimentos.","description":"Devolve a composição enviada pela clínica.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco do recebível.","schema":{"type":"string"}}],"responses":{"200":{"description":"Detalhe de um lote, com procedimentos.","content":{"application/json":{"example":{"id":"cm9receb014","medicoId":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","convenioNome":"Unimed","produto":null,"produtoNome":null,"vencimento":"2026-11-15T00:00:00.000Z","valorBruto":8420.5,"valorLiquido":8420.5,"status":"confirmado","elegivel":true,"motivoInelegivel":null,"cessaoId":null,"criadoEm":"2026-09-22T18:10:00.000Z","atualizadoEm":"2026-09-22T18:10:00.000Z","procedimentos":[{"id":"cm9proc014","descricao":"Consulta em consultório","codigoTuss":"10101012","data":"2026-09-03T00:00:00.000Z","quantidade":1,"valorUnitario":8420.5}]}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}},"delete":{"tags":["Recebíveis"],"operationId":"recebiveis-apagar","summary":"Remove um lote enviado por engano.","description":"Responde 204 sem corpo. Se o lote já entrou numa operação, responde 409 e o registro permanece.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco do recebível.","schema":{"type":"string"}}],"responses":{"204":{"description":"Remove um lote enviado por engano."},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"lote_vinculado: O lote já entrou numa operação e não pode ser alterado nem apagado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/cessoes":{"get":{"tags":["Operações"],"operationId":"cessoes-listar","summary":"Lista as antecipações pedidas pelos médicos.","description":"Consulte status=solicitada para achar o que ainda precisa de troca de domicílio. A Altis também avisa por e-mail. A clínica confirma ou recusa por esta API. status possíveis: solicitada, confirmada, desembolsada, recusada.","parameters":[{"name":"limite","in":"query","required":false,"description":"Itens por página. Padrão 50, máximo 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Passe o pagina.proximo da resposta anterior. Opaco.","schema":{"type":"string"}},{"name":"atualizadoDesde","in":"query","required":false,"description":"ISO-8601. Devolve só o que mudou a partir deste instante.","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","required":false,"description":"solicitada, confirmada, desembolsada ou recusada.","schema":{"type":"string","enum":["solicitada","confirmada","desembolsada","recusada"]}},{"name":"cpf","in":"query","required":false,"description":"CPF do médico.","schema":{"type":"string"}}],"responses":{"200":{"description":"Lista as antecipações pedidas pelos médicos.","content":{"application/json":{"example":{"cessoes":[{"id":"cm9cessao918","numeroContrato":"ANT 2026.5918","status":"solicitada","medico":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima"},"valorBruto":8420.5,"desconto":312.4,"tarifa":148.61,"tarifaFixa":25,"taxaOriginacao":0.015,"valorLiquido":7959.49,"taxaMensal":0.0198,"cetAnual":0.265,"prazoMedioDias":54,"chavePix":"52998224725","contrato":"INSTRUMENTO PARTICULAR DE CESSÃO DE CRÉDITOS E OUTRAS AVENÇAS\nInstrumento nº ANT 2026.5918...","criadaEm":"2026-09-22T19:02:00.000Z","confirmadaEm":null,"desembolsadaEm":null,"lotes":[{"id":"cm9receb014","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","produto":null,"produtoNome":null,"valorLiquido":8420.5}],"trava":{"status":"email_enviado","canal":null,"protocolo":null,"autorizadoPor":null,"crm":null,"autorizadoEm":null,"bancoDestino":"Banco da Altis","agenciaDestino":"0001","contaDestino":"12345-6","pixDestino":"00.000.000/0001-00"},"eventos":[{"status":"solicitada","titulo":"Solicitação recebida","descricao":"Contrato assinado. Aguardando a clínica confirmar a troca de domicílio bancário.","em":"2026-09-22T19:02:00.000Z"}]}],"pagina":{"limite":50,"proximo":null}}}}},"400":{"description":"limite_invalido: Limite negativo ou parâmetro limite da listagem inválido. data_invalida: atualizadoDesde não é uma data ISO-8601. cursor_invalido: O cursor de paginação não existe. cpf_invalido: CPF ausente ou com dígitos verificadores inválidos. status_invalido: Status fora da lista aceita naquele recurso. No envio de recebível, só confirmado ou pendente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/cessoes/{id}":{"get":{"tags":["Operações"],"operationId":"cessoes-obter","summary":"Detalhe da operação, dos lotes e da trava de domicílio.","description":"trava.bancoDestino, agenciaDestino, contaDestino e pixDestino são a conta para a qual a produção deve passar a ser paga. tarifa é o total da originação nesta operação. tarifaFixa e taxaOriginacao são o preço da clínica no momento da assinatura: a parte fixa em reais e o percentual do valor de face. contrato é o termo assinado.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco da operação.","schema":{"type":"string"}}],"responses":{"200":{"description":"Detalhe da operação, dos lotes e da trava de domicílio.","content":{"application/json":{"example":{"id":"cm9cessao918","numeroContrato":"ANT 2026.5918","status":"solicitada","medico":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima"},"valorBruto":8420.5,"desconto":312.4,"tarifa":148.61,"tarifaFixa":25,"taxaOriginacao":0.015,"valorLiquido":7959.49,"taxaMensal":0.0198,"cetAnual":0.265,"prazoMedioDias":54,"chavePix":"52998224725","contrato":"INSTRUMENTO PARTICULAR DE CESSÃO DE CRÉDITOS E OUTRAS AVENÇAS\nInstrumento nº ANT 2026.5918...","criadaEm":"2026-09-22T19:02:00.000Z","confirmadaEm":null,"desembolsadaEm":null,"lotes":[{"id":"cm9receb014","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","produto":null,"produtoNome":null,"valorLiquido":8420.5}],"trava":{"status":"email_enviado","canal":null,"protocolo":null,"autorizadoPor":null,"crm":null,"autorizadoEm":null,"bancoDestino":"Banco da Altis","agenciaDestino":"0001","contaDestino":"12345-6","pixDestino":"00.000.000/0001-00"},"eventos":[{"status":"solicitada","titulo":"Solicitação recebida","descricao":"Contrato assinado. Aguardando a clínica confirmar a troca de domicílio bancário.","em":"2026-09-22T19:02:00.000Z"}]}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/v1/cessoes/{id}/confirmar":{"post":{"tags":["Operações"],"operationId":"cessoes-confirmar","summary":"Confirma a troca de domicílio e registra o desembolso.","description":"Chame depois de alterar o domicílio bancário da produção para a conta da Altis. Uma segunda chamada da mesma operação já desembolsada devolve o mesmo registro e não paga de novo. Protocolo, nome de quem autorizou e CRM são obrigatórios.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco da operação.","schema":{"type":"string"}}],"responses":{"200":{"description":"Confirma a troca de domicílio e registra o desembolso.","content":{"application/json":{"example":{"id":"cm9cessao918","numeroContrato":"ANT 2026.5918","status":"desembolsada","medico":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima"},"valorBruto":8420.5,"desconto":312.4,"tarifa":148.61,"tarifaFixa":25,"taxaOriginacao":0.015,"valorLiquido":7959.49,"taxaMensal":0.0198,"cetAnual":0.265,"prazoMedioDias":54,"chavePix":"52998224725","contrato":"INSTRUMENTO PARTICULAR DE CESSÃO DE CRÉDITOS E OUTRAS AVENÇAS\nInstrumento nº ANT 2026.5918...","criadaEm":"2026-09-22T19:02:00.000Z","confirmadaEm":"2026-09-22T20:15:00.000Z","desembolsadaEm":"2026-09-22T20:15:00.000Z","lotes":[{"id":"cm9receb014","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","produto":null,"produtoNome":null,"valorLiquido":8420.5}],"trava":{"status":"email_enviado","canal":null,"protocolo":null,"autorizadoPor":null,"crm":null,"autorizadoEm":null,"bancoDestino":"Banco da Altis","agenciaDestino":"0001","contaDestino":"12345-6","pixDestino":"00.000.000/0001-00"},"eventos":[{"status":"solicitada","titulo":"Solicitação recebida","descricao":"Contrato assinado. Aguardando a clínica confirmar a troca de domicílio bancário.","em":"2026-09-22T19:02:00.000Z"}]}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. autorizacao_incompleta: Confirmação sem protocolo, autorizador ou CRM.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"status_invalido: A operação já foi desembolsada ou recusada e a ação não cabe mais.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"protocolo":{"type":"string","description":"Protocolo da troca de domicílio no banco ou no pagador."},"autorizadoPor":{"type":"string","description":"Nome de quem autorizou a troca na clínica."},"crm":{"type":"string","description":"CRM de quem autorizou."}},"required":["protocolo","autorizadoPor","crm"]},"example":{"protocolo":"DOM-2026-00421","autorizadoPor":"Carlos Mendes","crm":"654321-SP"}}}}}},"/api/v1/cessoes/{id}/recusar":{"post":{"tags":["Operações"],"operationId":"cessoes-recusar","summary":"Recusa a operação e devolve os lotes à carteira.","description":"Use quando o médico não autorizar a troca de domicílio. Os lotes voltam a confirmado e elegível. Uma operação já desembolsada não pode ser recusada. Repetir a recusa devolve o mesmo registro.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador opaco da operação.","schema":{"type":"string"}}],"responses":{"200":{"description":"Recusa a operação e devolve os lotes à carteira.","content":{"application/json":{"example":{"id":"cm9cessao918","numeroContrato":"ANT 2026.5918","status":"recusada","medico":{"id":"cm9medicoana","cpf":"52998224725","nome":"Ana Lima"},"valorBruto":8420.5,"desconto":312.4,"tarifa":148.61,"tarifaFixa":25,"taxaOriginacao":0.015,"valorLiquido":7959.49,"taxaMensal":0.0198,"cetAnual":0.265,"prazoMedioDias":54,"chavePix":"52998224725","contrato":"INSTRUMENTO PARTICULAR DE CESSÃO DE CRÉDITOS E OUTRAS AVENÇAS\nInstrumento nº ANT 2026.5918...","criadaEm":"2026-09-22T19:02:00.000Z","confirmadaEm":null,"desembolsadaEm":null,"lotes":[{"id":"cm9receb014","lote":"UN-2026-09-014","competencia":"2026-09","origem":"plano","pagador":"Unimed","convenio":"unimed","produto":null,"produtoNome":null,"valorLiquido":8420.5}],"trava":{"status":"email_enviado","canal":null,"protocolo":null,"autorizadoPor":null,"crm":null,"autorizadoEm":null,"bancoDestino":"Banco da Altis","agenciaDestino":"0001","contaDestino":"12345-6","pixDestino":"00.000.000/0001-00"},"eventos":[{"status":"solicitada","titulo":"Solicitação recebida","descricao":"Contrato assinado. Aguardando a clínica confirmar a troca de domicílio bancário.","em":"2026-09-22T19:02:00.000Z"}]}}}},"400":{"description":"json_invalido: Corpo ausente, JSON malformado ou com formato diferente do esperado. motivo_invalido: Recusa sem um motivo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"nao_autorizado: Chave ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"nao_encontrado: O id não existe nesta clínica.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"409":{"description":"status_invalido: A operação já foi desembolsada ou recusada e a ação não cabe mais.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"500":{"description":"erro_interno: Falha inesperada. O corpo traz codigo erro_interno.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"motivo":{"type":"string","description":"Ao menos 3 caracteres. Vira o evento da operação."}},"required":["motivo"]},"example":{"motivo":"Médico não autorizou a troca de domicílio."}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Chave da securitizadora (aps_ ou aps_test_) ou da clínica (apt_ ou apt_test_). Com a chave da securitizadora, operações da clínica levam o cabeçalho X-Clinica-Id."}},"schemas":{"Erro":{"type":"object","required":["erro","codigo"],"properties":{"erro":{"type":"string"},"codigo":{"type":"string","enum":["cpf_invalido","telefone_invalido","nome_invalido","limite_invalido","convenio_invalido","produto_invalido","origem_invalida","lote_invalido","valor_invalido","procedimento_invalido","status_invalido","data_invalida","cursor_invalido","json_invalido","xml_invalido","vazio","muitos_itens","autorizacao_incompleta","motivo_invalido","cnpj_invalido","email_invalido","preco_invalido","clinica_obrigatoria","nao_autorizado","nao_encontrado","medico_nao_encontrado","cnpj_duplicado","lote_vinculado","erro_interno"]}}}}}}