{"openapi":"3.0.3","info":{"title":"Solus Proxy — APAS Saúde","version":"0.1.0","description":"Ponte para as APIs Solus. Autentica automaticamente e devolve os dados do beneficiário a partir do CPF. Todas as rotas de dados exigem o header `x-api-key`."},"servers":[{"url":"https://apasapi.healthplatformsuite.com.br","description":"Produção (HTTPS)"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"Erro":{"type":"object","properties":{"erro":{"type":"string","example":"x-api-key ausente ou invalida"},"detalhe":{"type":"string"},"dica":{"type":"string"}}}}},"security":[{"ApiKey":[]}],"paths":{"/paciente/{cpf}":{"get":{"tags":["Beneficiário"],"summary":"Busca beneficiário por CPF","description":"Consulta de elegibilidade: recebe o CPF e devolve os dados do beneficiário. O CPF pode conter pontuação (é limpo antes de consultar). Resposta: { cpf, total, beneficiarios[] }, onde cada item tem `resumo` (campos-chave decodificados) e `completo` (100% dos campos da Solus). CPFs de teste: 92307354859 (titular), 19874159065 (dependente).","parameters":[{"name":"cpf","in":"path","required":true,"schema":{"type":"string","example":"92307354859"},"description":"CPF do beneficiário (11 dígitos)"},{"name":"situacao","in":"query","required":false,"schema":{"type":"string"},"description":"Filtra pela situação do beneficiário"}],"responses":{"200":{"description":"Envelope { cpf, total, beneficiarios[{resumo, completo}] }"},"400":{"description":"CPF inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave do proxy ausente/errada ou token Solus expirado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/elegibilidade/{cpf}":{"get":{"tags":["Beneficiário"],"summary":"Elegibilidade por CPF (somente ativo)","description":"Retorna SOMENTE o registro ativo (filtra situacao=A na APAS) e inclui o campo booleano `elegivel`. Resposta: { cpf, total, elegivel, beneficiarios[] }. total:0 / elegivel:false = sem cadastro ativo.","parameters":[{"name":"cpf","in":"path","required":true,"schema":{"type":"string","example":"20500112886"}}],"responses":{"200":{"description":"{ cpf, total, elegivel, beneficiarios[{resumo, completo}] }"}}}},"/beneficiario/{id}":{"get":{"tags":["Beneficiário"],"summary":"Dados completos por ID","description":"Dados detalhados pelo ID do beneficiário (o id vem no retorno da busca por CPF).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"2748"}},{"name":"incluir","in":"query","required":false,"schema":{"type":"string","example":"cobertura,status"},"description":"Blocos extras: cobertura, status (separados por vírgula)"}],"responses":{"200":{"description":"Dados do beneficiário"}}}},"/carteira/{codigo}":{"get":{"tags":["Beneficiário"],"summary":"Busca por número de carteira","parameters":[{"name":"codigo","in":"path","required":true,"schema":{"type":"string"},"description":"Código da carteira"}],"responses":{"200":{"description":"Dados do beneficiário"}}}},"/tiss/elegibilidade/{carteira}":{"get":{"tags":["TISS"],"summary":"Elegibilidade via WebService TISS (por carteira)","description":"Chama tissVerificaElegibilidade (SOAP). Só leitura, não cria guia. Requer a integração TISS habilitada no .env.","parameters":[{"name":"carteira","in":"path","required":true,"schema":{"type":"string"},"description":"Número da carteira do beneficiário"}],"responses":{"200":{"description":"{ elegivel, respostaSolicitacao, nomeBeneficiario, ... }"},"503":{"description":"Integração TISS desabilitada/incompleta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/tiss/guia-consulta":{"post":{"tags":["TISS"],"summary":"Emite uma guia de consulta (tissLoteGuias)","description":"CRIA registro de faturamento. Corpo JSON com os dados da guia. Use numeroGuiaPrestador único (idempotência).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["numeroCarteira","numeroGuiaPrestador","numeroLote"],"properties":{"numeroCarteira":{"type":"string"},"numeroGuiaPrestador":{"type":"string"},"numeroLote":{"type":"string"},"atendimentoRN":{"type":"string","example":"N"},"profissional":{"type":"object","properties":{"nome":{"type":"string"},"conselho":{"type":"string","example":"06"},"numeroConselho":{"type":"string"},"uf":{"type":"string","example":"35"},"cbos":{"type":"string"}}},"atendimento":{"type":"object","properties":{"regimeAtendimento":{"type":"string","example":"05"},"tipoConsulta":{"type":"string","example":"1"},"dataAtendimento":{"type":"string","example":"2026-10-23"},"indicacaoAcidente":{"type":"string","example":"9"},"procedimento":{"type":"object","properties":{"codigoTabela":{"type":"string","example":"22"},"codigoProcedimento":{"type":"string","example":"10101012"},"valorProcedimento":{"type":"string","example":"0.00"}}}}},"observacao":{"type":"string"}}}}}},"responses":{"200":{"description":"{ protocolo, numeroGuiaOperadora, httpStatus, ... }"},"400":{"description":"Campos obrigatórios ausentes"},"503":{"description":"Integração TISS desabilitada/incompleta"}}}},"/tiss/consulta":{"post":{"tags":["TISS"],"summary":"Fluxo: elegibilidade e, se elegível, emite a guia","description":"Verifica elegibilidade da carteira e, SE elegível, emite a guia de consulta. Corpo igual ao de /tiss/guia-consulta.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["numeroCarteira","numeroGuiaPrestador","numeroLote"]}}}},"responses":{"200":{"description":"{ elegibilidade, guia, emitida }"},"503":{"description":"Integração TISS desabilitada/incompleta"}}}},"/auth/check":{"get":{"tags":["Diagnóstico"],"summary":"Verifica autenticação na Solus","description":"Retorna ok:true quando o token do software está válido.","responses":{"200":{"description":"Autenticado"},"401":{"description":"Falha de autenticação (token expirado/inválido)"}}}},"/health":{"get":{"tags":["Diagnóstico"],"summary":"Sinal de vida do proxy","description":"Não exige chave e não chama a Solus.","security":[],"responses":{"200":{"description":"Proxy no ar"}}}}}}