Recebimentos
DadosClientesSSN
Cliente
| API | Description |
|---|---|
| POST api/Cliente/InserirClienteRapido?codClienteSSN={codClienteSSN} |
Insere um cliente rápido (mesmo cadastro simplificado usado na tela de Agenda) e retorna o ID gerado. |
| GET api/Cliente/VerificaCelularCadastrado?codClienteSSN={codClienteSSN}&celular={celular} |
Verifica se já existe um cliente cadastrado com o celular informado (usado para alertar duplicidade antes de inserir). |
| GET api/Cliente?codClienteSSN={codClienteSSN}&dataInicial={dataInicial}&dataFinal={dataFinal} |
Retorna os aniversariantes num intervalo de datas (filtra por mês/dia de nascimento). |
| POST api/Cliente?codClienteSSN={codClienteSSN} |
Coloca mensagens de aniversário na fila de envio do WhatsApp para os clientes informados. |
Agenda
CadastroPaciente
Cadastro de paciente do ATOSWeb (aba "Informações gerais") com as garantias do formClienteSelec2026V7 do desktop: gravação transacional, concorrência otimista por grupo de campos (409 com o valor atual), validação no servidor, histórico de status atômico e nenhum dado pessoal na URL (só codClienteSSN e idCliente vão na query). Os endpoints antigos (ClienteInfoGeraisController) continuam intactos: o app mobile os usa. Regras e whitelist: Services/CadastroPaciente/.
| API | Description |
|---|---|
| GET api/CadastroPaciente/GetCadastro?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
GET api/CadastroPaciente/GetCadastro?codClienteSSN=X&idCliente=Y 200 {Cadastro, SomenteLeitura, Rotulos, Contexto} / 404. |
| GET api/CadastroPaciente/GetLookups?codClienteSSN={codClienteSSN} |
GET api/CadastroPaciente/GetLookups?codClienteSSN=X Listas da tela (inclusive Profissoes e Indicacoes da aba Complementos) + TemConvenio2 + ExigeEmailRD + ExigeIndicacaoNoCadastroNovo. |
| GET api/CadastroPaciente/GetRecursos?codClienteSSN={codClienteSSN} |
GET api/CadastroPaciente/GetRecursos?codClienteSSN=X {NovoCadastroPaciente}: a clínica usa o cadastro novo (mesmo gate do V7, ssndbConfigGeral.tabClientesSSN.AtivaNovosRecursosParaTestesNivel0). Qualquer falha = false (a tela cai no cadastro antigo). |
| POST api/CadastroPaciente/PostCriar?codClienteSSN={codClienteSSN} |
POST api/CadastroPaciente/PostCriar?codClienteSSN=X — corpo {Cadastro, CidadeCodigoIBGE?, Usuario}. 201 {IdCliente, Cadastro, SomenteLeitura, Avisos} / 400 {Erros}. |
| PUT api/CadastroPaciente/PutAtualizar?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
PUT api/CadastroPaciente/PutAtualizar?codClienteSSN=X&idCliente=Y — corpo {Alteracoes[{Campo, Original, Valor}], CidadeCodigoIBGE?, Usuario}. 200 {Cadastro, SomenteLeitura, Avisos, NadaAlterado} / 400 {Erros} / 404 / 409 {Conflitos[{Campo, ValorAtual}], Cadastro, SomenteLeitura}. |
| POST api/CadastroPaciente/PostDuplicidades?codClienteSSN={codClienteSSN} |
POST api/CadastroPaciente/PostDuplicidades?codClienteSSN=X — corpo {CPF, Celular, Telefone, Nome, IgnorarIdCliente}. 200 [{Tipo, IdCliente, Nome}] (aviso; nunca bloqueia). |
| POST api/CadastroPaciente/PostProfissao?codClienteSSN={codClienteSSN} |
POST api/CadastroPaciente/PostProfissao?codClienteSSN=X — corpo {Descricao}. "+ Nova profissão" da aba Complementos. 200 {Id, Descricao} (a existente quando já há uma com o mesmo nome, sem diferenciar caixa) / 400 {Erros[{Campo:"Descricao", Mensagem}]}. |
| POST api/CadastroPaciente/PostIndicacao?codClienteSSN={codClienteSSN} |
POST api/CadastroPaciente/PostIndicacao?codClienteSSN=X — corpo {Nome, Observacoes}. "+ Nova indicação" da aba Complementos. 200 {Id, Descricao} (a existente quando já há uma com o mesmo nome) / 400 {Erros[{Campo:"Nome"|"Observacoes", Mensagem}]}. O IndicacaoController antigo fica como está (o app usa; não devolve o Id). |
| PUT api/CadastroPaciente/PutFoto?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
PUT api/CadastroPaciente/PutFoto?codClienteSSN=X&idCliente=Y — multipart/form-data com UM arquivo (JPEG ou PNG, até 3 MB; a tela já manda reduzida). Substitui a foto e a miniatura numa transação. 200 {FotoMiniatura} / 400 / 404 / 413 / 415. |
| DELETE api/CadastroPaciente/DeleteFoto?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
DELETE api/CadastroPaciente/DeleteFoto?codClienteSSN=X&idCliente=Y — 200 / 404. |
Odontologia
Leitura e operações sobre o Plano de Tratamento Odontológico (tabOdontoPlano / tabOdontoPlanoItem), espelhando as regras de negócio do SistemaSSN desktop (ModOdonto\ClassOdontoRepositorio2026.vb). Criação de um plano novo, edição livre de um item já salvo e o odontograma gráfico continuam exclusivos do desktop — aqui só: listar, aprovar, adicionar item, concluir item e excluir item. Travas que no desktop existem só na UI (botão desabilitado) e aqui são revalidadas no servidor: aprovar exige Situacao=1 e pelo menos um item ativo; excluir recusa item já Executado (Situacao=3).
| API | Description |
|---|---|
| GET api/Odontologia/GetSituacaoDoModulo?codClienteSSN={codClienteSSN} |
Espelha tabConfiguracoesGerais.AtivaAreaDeOdontologia (IDConfig = 1), o mesmo flag que no desktop decide se o submenu de Odontologia é montado (UsaOdontograma2026 em ModuloVariaveisGlobais.vb). Clínicas sem a tabela/coluna (banco desatualizado) ou sem o flag ligado: módulo não liberado. |
| GET api/Odontologia/GetPlanos?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
No documentation available. |
| GET api/Odontologia/GetPlanoDetalhado?codClienteSSN={codClienteSSN}&idPlano={idPlano} |
No documentation available. |
| GET api/Odontologia/GetPlanoParaAssinatura?codClienteSSN={codClienteSSN}&idPlano={idPlano}&cpf={cpf} |
Retorna os dados de um plano de tratamento odontológico para a página pública de assinatura do paciente (link por CPF + ID do plano, mesmo padrão de Ficha/Evolução/ Avaliação). Fail-closed: CPF ou plano não batem ⇒ null. |
| GET api/Odontologia/GetProcedimentos?codClienteSSN={codClienteSSN}&idConvenio={idConvenio} |
No documentation available. |
| POST api/Odontologia/PostAprovarPlano |
No documentation available. |
| POST api/Odontologia/PostAdicionarItem |
No documentation available. |
| DELETE api/Odontologia/DeleteItem?codClienteSSN={codClienteSSN}&idPlano={idPlano}&idItem={idItem} |
No documentation available. |
| POST api/Odontologia/PostConcluirItem |
No documentation available. |
RD
| API | Description |
|---|---|
| POST api/CreateAtosNoRD?codClienteSSN={codClienteSSN}&RDToken={RDToken} |
Cadastrar um cliente do ATOS para RD. |
| POST api/CreateRDNoAtos?codClienteSSN={codClienteSSN}&RDToken={RDToken} |
Cadastrar um cliente do RD para ATOS. |
| GET api/RD?RDToken={RDToken}&page={page}&limit={limit}&order={order}&direction={direction}&email={email}&q={q}&phone={phone}&title={title} |
Lista de Contato |
| GET api/RD?RDToken={RDToken}&ContactId={ContactId} |
Exibir dados de um Contato por Id |
| POST api/RD?RDToken={RDToken} |
Cria um novo contato na API do RD Station CRM. |
| PUT api/RD?RDToken={RDToken}&contactId={contactId} |
Edita um contato existente na API do RD Station CRM. |
ProntuarioIA
Endpoints do módulo "Prontuário por IA" (escuta da consulta): busca de paciente, atendimentos/anamneses para anexar a evolução, gravação da evolução revisada, e os proxies de IA (Claude para estruturação, AssemblyAI para transcrição) — as chaves dessas duas ficam no Web.config do servidor, nunca no aplicativo que chama esta API. Espelha, no servidor, as mesmas consultas que o SistemaSSN desktop já faz em ClassEscutaDados2026.vb — mesmo schema de tabelas, mesma regra de negócio (evolução exige atendimento e ficha de anamnese existentes; nada é inventado aqui).
| API | Description |
|---|---|
| GET api/ProntuarioIA/GetBuscarPacientes?codClienteSSN={codClienteSSN}&termo={termo}&maxLinhas={maxLinhas} |
Busca pacientes por trecho do nome ou pelo código exato. |
| GET api/ProntuarioIA/GetFichaResumidaPaciente?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Ficha resumida do paciente em texto, enviada à IA como fonte de dados (a regra anti-invenção do system prompt permite usar TRANSCRIÇÃO + FICHA). Só dados de identificação — nada de histórico clínico que a IA possa repetir como se tivesse sido dito na consulta. |
| GET api/ProntuarioIA/GetAtendimentosDoPaciente?codClienteSSN={codClienteSSN}&idCliente={idCliente}&diasAntes={diasAntes}&diasDepois={diasDepois} |
Atendimentos do paciente numa janela de dias em torno de hoje, para escolher a qual deles a evolução será anexada. Exclui desmarcado/cancelado (não se evolui atendimento que não aconteceu). |
| GET api/ProntuarioIA/GetAnamnesesDoPaciente?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Fichas de anamnese do paciente (tabHistoricoPaciente) — a evolução é sempre anexada a uma delas. |
| GET api/ProntuarioIA/GetConsultasGravadas?codClienteSSN={codClienteSSN}&usuarioLogin={usuarioLogin}&maxLinhas={maxLinhas} |
Últimas evoluções gravadas POR ESTA FERRAMENTA (identificadas pelo carimbo do texto), do profissional informado (LGPD: só as dele). |
| POST api/ProntuarioIA/PostGravarEvolucao |
Grava o prontuário revisado como evolução do atendimento escolhido (SP oficial InsereEvolucaoTratamento) e CONFERE no banco que a linha realmente entrou com o autor e o texto esperados — sem essa releitura, "salvo com sucesso" seria só uma esperança (a SP não garante contra truncamento/trigger silencioso). |
| GET api/ProntuarioIA/GetSituacaoDoModulo?codClienteSSN={codClienteSSN} |
Situação do "Prontuário por IA" para esta clínica: se o módulo está contratado (gate comercial) e como está a cota de horas do mês — o mesmo que o desktop mostra no cabeçalho da tela. O app chama isto para decidir se libera a gravação/transcrição, em vez de perguntar se há chave configurada (não há mais chave para configurar — ver ClassEscutaChavesCentral). |
| POST api/ProntuarioIA/PostEstruturarProntuario |
Estrutura o prontuário a partir da transcrição diarizada (+ ficha) usando a Claude API. Desde a migração para o gate central (mesma mudança feita no SistemaSSN desktop em 30/07/2026), a chave NUNCA vem do app — é sempre lida de tabChavesIAEscuta no banco central, condicionada ao plano contratado pela clínica (ClassEscutaChavesCentral). A estruturação não consome a cota de minutos — só entra no custo (ver ClassEscutaConsumoIA). |
| POST api/ProntuarioIA/PostTranscreverAudio?codClienteSSN={codClienteSSN}&idCliente={idCliente}&identificadorSessao={identificadorSessao}&idProfissional={idProfissional}&nomeProfissional={nomeProfissional} |
Transcreve o áudio da consulta (corpo da requisição = bytes do WAV/WEBM, application/octet-stream) usando a AssemblyAI. Chave central (ver PostEstruturarProntuario) e, diferente da estruturação, sujeita à cota MENSAL de minutos do plano da clínica — uma clínica sem saldo e sem uso extra liberado é bloqueada aqui, antes de gastar com a transcrição. |
AOL
Paciente
| API | Description |
|---|---|
| GET api/Paciente/Buscar?codClienteSSN={codClienteSSN}&termo={termo}&ativo={ativo}&maxLinhas={maxLinhas} |
GET api/Paciente/Buscar?codClienteSSN=X&termo=&ativo=&maxLinhas=300 Sem 'termo': retorna os cadastros mais recentes. Com 'termo': busca por nome, código, CPF ou celular. 'ativo': 1 = somente ativos, 0 = somente inativos, ausente = todos. |
| GET api/Paciente/Estatisticas?codClienteSSN={codClienteSSN} |
GET api/Paciente/Estatisticas?codClienteSSN=X Contagem de pacientes ativos/inativos e dos indicadores da tela de Pacientes (Inadimplentes, Devendo Guia, Guia Finalizada), replicando as mesmas fontes usadas pelos cards da lista de clientes do SistemaSSN desktop (formClientes22026): - Inadimplentes: igual à SP RetornaDadosGerenciais3 (COUNT(*) FROM tabClientes WHERE Bloqueado = 1, sem filtro de ativo/listado — a SP também não filtra). - DevendoGuia / GuiaFinalizada: iguais à view ViewClientesLista2 (filtro NaoListadoComoPaciente = 0 AND ExcluidoNaoListado = 0). |
IAL
Financeiro
LoginCliente
Endpoint de login consolidado para o app cliente. Criado à parte de DadosClientesSSNController para não alterar comportamento de endpoints já usados por outras telas/apps (postLoginWebAppClienteNovo, GetRetornaLogoAppCliente, GetRetornaNomeClienteSSN continuam intactos). Substitui, no app cliente, a sequência login -> retornaLogo -> retornaNomeECorCliente (3 requisições, cada uma resolvendo a conexão da clínica do zero) por uma única requisição que já devolve cliente, nome, cor e logo de cada clínica candidata, reaproveitando a resolução de conexão via ConexaoCacheLogin.
| API | Description |
|---|---|
| POST api/LoginCliente/Completo?cpf={cpf} |
No documentation available. |
EvolucaoPersonalizada
Endpoints da "Evolução Personalizada": modelos (campos configuráveis pelo usuário — texto, checkbox, seleção, pontuação, escala de dor, títulos de grupo) e o preenchimento desses modelos por atendimento. Espelha, no servidor, o mesmo desenho que o SistemaSSN desktop já usa (ModEvolucao\SQL\01_EvolucaoPersonalizada_Fase0.sql e ClassesCompartilhadas\ClassEvolucaoPersonalizadaDB.vb): as respostas de uma evolução são um SNAPSHOT (título/tipo/ordem copiados do modelo no momento do save, para a evolução continuar legível mesmo se o modelo mudar ou for excluído depois), e um "texto espelho" gerado a partir das respostas é gravado na mesma coluna Observacoes que a evolução em texto livre já usa (SP InsereEvolucaoTratamento) — assim listas e relatórios antigos continuam funcionando sem saber que a evolução é estruturada. Tipos de campo (catálogo fixo, mesmos IDs da feature irmã "Avaliação Personalizada"): 1 Texto longo, 10 Texto curto, 2 Caixa de seleção, 15 Seleciona vários (hoje renderizado igual ao 2 — ver GetTiposDeCampo), 13 Seleciona um, 3 Título de grupo, 17 Subtítulo, 6 Escala de Dor, 5 Pontuação.
| API | Description |
|---|---|
| GET api/EvolucaoPersonalizada/GetTiposDeCampo |
Catálogo fixo dos tipos de campo. Estático (não consulta banco) — os IDs e a semântica de cada tipo são uma regra de negócio fixa, compartilhada com a Avaliação Personalizada. |
| GET api/EvolucaoPersonalizada/GetModelos?codClienteSSN={codClienteSSN} |
No documentation available. |
| GET api/EvolucaoPersonalizada/GetModeloDetalhado?codClienteSSN={codClienteSSN}&idModelo={idModelo} |
No documentation available. |
| POST api/EvolucaoPersonalizada/PostCadastrarModelo |
No documentation available. |
| PUT api/EvolucaoPersonalizada/PutEditarModelo |
No documentation available. |
| DELETE api/EvolucaoPersonalizada/DeleteModelo?codClienteSSN={codClienteSSN}&idModelo={idModelo} |
No documentation available. |
| POST api/EvolucaoPersonalizada/PostDuplicarModelo |
No documentation available. |
| GET api/EvolucaoPersonalizada/GetRespostasDaEvolucaoPorSessao?codClienteSSN={codClienteSSN}&idSessao={idSessao} |
No documentation available. |
| POST api/EvolucaoPersonalizada/PostSalvarEvolucaoPersonalizada |
Grava uma evolução personalizada: gera o texto espelho, chama a SP oficial de evolução (InsereEvolucaoTratamento — mesma da evolução em texto livre) e regrava o snapshot de respostas (delete + insert, mesmo padrão de SalvarRespostas no desktop). Lê o corpo manualmente (como ProntuarioIAController.PostGravarEvolucao) para poder validar antes de tocar o banco. |
SalaDeEspera
Endpoints de apoio à tela de Sala de Espera (ModAgendas) do sistema desktop. Consulta e atualiza o status 13 (Em espera) das sessões agendadas do dia.
| API | Description |
|---|---|
| GET api/SalaDeEspera/Lista?codClienteSSN={codClienteSSN}&data={data} |
Retorna a lista (plana) de pacientes atualmente em espera (status 13) na data informada. |
| GET api/SalaDeEspera/ListaAgrupada?codClienteSSN={codClienteSSN}&data={data} |
Retorna a lista de pacientes em espera agrupada por profissional, na ordem de chegada (mesmo agrupamento exibido na tela FrmSalaDeEspera do sistema desktop). |
| POST api/SalaDeEspera/MarcarEmEspera?codClienteSSN={codClienteSSN}&idSessao={idSessao}&idProfissional={idProfissional}&idAgendamento={idAgendamento}&nomeCliente={nomeCliente} |
Marca a sessão como "Paciente em espera" (status 13), equivalente à opção "Paciente em espera" do menu de contexto da Agenda. |
| POST api/SalaDeEspera/RemoverDaEspera?codClienteSSN={codClienteSSN}&idSessao={idSessao}&idProfissional={idProfissional}&idAgendamento={idAgendamento}&nomeCliente={nomeCliente}&novoStatus={novoStatus} |
Remove a sessão da sala de espera, revertendo o status (por padrão para Aberto = 1). Útil para desfazer uma marcação de "Paciente em espera" feita por engano. |
RelatoriosAgenda
| API | Description |
|---|---|
| GET api/RelatoriosAgenda?codClienteSSN={codClienteSSN}&idIndiceAgendamento={idIndiceAgendamento} |
No documentation available. |
EncontraHorarioPorEspecialidade
Endpoints que sustentam o FrmEncontraHorarioPorEspecialidade2026 (busca de horários vagos por especialidade/centro de custo). A lista de especialidades já é coberta pelo PreenchimentoController (GetRetornaEspecialidadesComPreco, consumido no front via ShareService.retornaCentroDeCustoFinanceiro) — aqui fica só a busca: ProcurarVagas chama a SP BuscaAgendamentosComVaga2 e em seguida lê o resultado da ViewHorariosDisponiveisBusca, da mesma forma que classControleAgenda.
ConfClientes
Endpoints da aba Configurações do cadastro do cliente (formClienteSelec2). Campos de tabClientes são cobertos pelo GET/PATCH principal. O campo AvisarSeNaoEvoluirUmAtendimento fica em tabIndiceAgendamentoSessoesFisiot e é atualizado pelo endpoint EditarAvisarSeNaoEvoluir.
| API | Description |
|---|---|
| GET api/ConfClientes?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
No documentation available. |
| PATCH api/ConfClientes?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
No documentation available. |
| PATCH api/ConfClientes?codClienteSSN={codClienteSSN}&idIndiceAgendamento={idIndiceAgendamento}&avisar={avisar} |
No documentation available. |
| GET api/ConfClientes?codClienteSSNHoras={codClienteSSNHoras} |
No documentation available. |
| GET api/ConfClientes?codClienteSSNEvento={codClienteSSNEvento} |
No documentation available. |
| GET api/ConfClientes?codClienteSSNProf={codClienteSSNProf} |
No documentation available. |
ConfigAgenda
Endpoints da tela de configuração rápida da agenda (frmConfigDaAgenda): tipo de atendimento padrão ao agendar, atualização automática da agenda e ordenação alfabética dos profissionais. Os dados de configuração vêm de tabConfiguracoesGerais, que é uma tabela de linha única (IDConfig = 1). Feriados/bloqueio de dias (frmControleDisponibilidadeDiasEFeriados) não fazem parte desta config rápida e ficam de fora deste controller.
| API | Description |
|---|---|
| GET api/ConfigAgenda?codClienteSSN={codClienteSSN} |
No documentation available. |
| PATCH api/ConfigAgenda?codClienteSSN={codClienteSSN} |
No documentation available. |
| POST api/ConfigAgenda?codClienteSSN={codClienteSSN} |
No documentation available. |
TiposDeEventosComClientes
| API | Description |
|---|---|
| POST api/TiposDeEventosComClientes?codClienteSSN={codClienteSSN} |
Cadastra Tipo de EventosComCliente. |
| GET api/TiposDeEventosComClientes?codClienteSSN={codClienteSSN} |
Obtém informações de varios eventos. |
| GET api/TiposDeEventosComClientes?codClienteSSN={codClienteSSN}&idEvento={idEvento} |
Obtém informações de um evento com base em seu ID. |
| DELETE api/TiposDeEventosComClientes?codClienteSSN={codClienteSSN}&idEvento={idEvento} |
Deleta um evento com base em seu ID. |
| PUT api/TiposDeEventosComClientes?codClienteSSN={codClienteSSN}&idEvento={idEvento} |
Edita um evento com base em seu ID. |
ContratosModelo
| API | Description |
|---|---|
| POST api/ContratosModelo?codClienteSSN={codClienteSSN} |
Cadastrar contrato modelo. |
| GET api/ContratosModelo?codClienteSSN={codClienteSSN} |
Obter todos os contratos modelo. |
| GET api/ContratosModelo?codClienteSSN={codClienteSSN}&idContratoModelo={idContratoModelo} |
Obter um contrato modelo por ID. |
| DELETE api/ContratosModelo?codClienteSSN={codClienteSSN}&idContratoModelo={idContratoModelo} |
Deletar contrato modelo. |
| PUT api/ContratosModelo?codClienteSSN={codClienteSSN}&idContratoModelo={idContratoModelo} |
Editar contrato modelo. |
Chat
Chat interno da equipe: Sala Geral (legada, IDConversaFK NULL), conversas 1-1 e grupos. Reusa a tabela legada tabMensagens (mesma regra do FrmChat2026 / ClassControleChat do sistema desktop) + tabChatConversas / tabChatParticipantes (ver SQL\01_Fase1_ModeloDados.sql).
| API | Description |
|---|---|
| GET api/Chat?codClienteSSN={codClienteSSN}&idProf={idProf} |
Resolve o funcionário (tabFuncionarios, identidade usada pelo chat) vinculado a um profissional (tabProfissionaisSaude.IDProfSaude) — o app de profissionais loga por idProf e não conhece o IdUser do funcionário diretamente. |
| GET api/Chat?codClienteSSN={codClienteSSN}&idUsuario={idUsuario} |
Lista as conversas (1-1 e grupos) do usuário logado, com preview e nº de não-lidas. A Sala Geral não entra aqui: o app deve exibi-la como item fixo (IDConversa = 0). |
| GET api/Chat?codClienteSSN={codClienteSSN}&idConversa={idConversa}&idUsuarioLogado={idUsuarioLogado}&desdeId={desdeId}&quantidadeInicial={quantidadeInicial} |
Carrega as mensagens de uma conversa (ou da Sala Geral, se idConversa <= 0). desdeId = 0 -> últimas N mensagens (carga inicial). desdeId > 0 -> incremental (polling). |
| POST api/Chat?codClienteSSN={codClienteSSN} |
Recebe POSTs em api/Chat: envia mensagem OU cria conversa em grupo, dependendo do corpo enviado. Unificado numa única action porque as duas antigas actions (EnviarMensagem/CriarConversaGrupo) tinham a mesma assinatura de rota (codClienteSSN + objeto no corpo) e o Web API não consegue escolher entre elas sem inspecionar o corpo (o que só é possível aqui, dentro da action). Distingue pelo campo "Titulo": presente = criar grupo; ausente = enviar mensagem. |
| POST api/Chat?codClienteSSN={codClienteSSN}&idUsuarioA={idUsuarioA}&idUsuarioB={idUsuarioB} |
Acha a conversa 1-1 já existente entre dois funcionários ou cria uma nova. Retorna o IDConversa. |
| PUT api/Chat?codClienteSSN={codClienteSSN}&idConversa={idConversa}&idUsuario={idUsuario} |
Marca uma conversa como lida (ponteiro do participante = MAX(idMensagem) da conversa). Não se aplica à Sala Geral (idConversa <= 0 é ignorado). |
| GET api/Chat?codClienteSSN={codClienteSSN}&idUsuarioTotalNaoLidas={idUsuarioTotalNaoLidas} |
Total de mensagens não lidas do usuário em todas as conversas (para o badge do botão de chat). |
| GET api/Chat?codClienteSSN={codClienteSSN}&idUsuarioExcluir={idUsuarioExcluir} |
Lista os funcionários ativos (para o seletor de nova conversa/grupo), exceto o próprio usuário. |
| DELETE api/Chat?codClienteSSN={codClienteSSN}&idMensagem={idMensagem} |
Apaga uma mensagem (soft delete, igual ao chat legado: marca DeletadaEm). |
Indicacao
| API | Description |
|---|---|
| POST api/Indicacao?codClienteSSN={codClienteSSN} |
Cadastrar pessoa de indicação. |
| GET api/Indicacao?codClienteSSN={codClienteSSN} |
Obter todas as pessoas de indicação. |
| GET api/Indicacao?codClienteSSN={codClienteSSN}&idPessoaIndicacao={idPessoaIndicacao} |
Obter uma pessoa de indicação por ID. |
| DELETE api/Indicacao?codClienteSSN={codClienteSSN}&idPessoaIndicacao={idPessoaIndicacao} |
Deletar pessoa de indicação. |
| PUT api/Indicacao?codClienteSSN={codClienteSSN}&idPessoaIndicacao={idPessoaIndicacao} |
Editar pessoa de indicação. |
ModeloMensagem
| API | Description |
|---|---|
| POST api/ModeloMensagem?codClienteSSN={codClienteSSN} |
Cadastrar modelo de mensagem. |
| GET api/ModeloMensagem?codClienteSSN={codClienteSSN} |
Obter todos os modelos de mensagem. |
| GET api/ModeloMensagem?codClienteSSN={codClienteSSN}&idModeloMensagem={idModeloMensagem} |
Obter um modelo de mensagem por ID. |
| DELETE api/ModeloMensagem?codClienteSSN={codClienteSSN}&idModeloMensagem={idModeloMensagem} |
Deletar modelo de mensagem. |
| PUT api/ModeloMensagem?codClienteSSN={codClienteSSN}&idModeloMensagem={idModeloMensagem} |
Editar modelo de mensagem. |
StatusDoCliente
| API | Description |
|---|---|
| POST api/StatusDoCliente?codClienteSSN={codClienteSSN} |
Cadastra Status do Cliente. |
| GET api/StatusDoCliente?codClienteSSN={codClienteSSN} |
Retorna a lista de status do cliente. |
| GET api/StatusDoCliente?codClienteSSN={codClienteSSN}&IDStatusDoCliente={IDStatusDoCliente} |
Retorna um status do cliente. |
| DELETE api/StatusDoCliente?codClienteSSN={codClienteSSN}&idStatusCliente={idStatusCliente} |
Deletar Status do Cliente. |
| PUT api/StatusDoCliente?codClienteSSN={codClienteSSN}&IdStatus={IdStatus} |
Editar Status do Cliente. |
Sala
Cidade
| API | Description |
|---|---|
| POST api/Cidade?codClienteSSN={codClienteSSN} |
Cadastrar Cidade. |
| GET api/Cidade?codClienteSSN={codClienteSSN} |
Retorna a lista de cidades. |
| GET api/Cidade?codClienteSSN={codClienteSSN}&IdCidade={IdCidade} |
Retorna uma cidade. |
| DELETE api/Cidade?codClienteSSN={codClienteSSN}&IDCidade={IDCidade} |
Deletar uma cidade. |
| PUT api/Cidade?codClienteSSN={codClienteSSN}&IDCidade={IDCidade} |
Editar uma cidade. |
Patologia
| API | Description |
|---|---|
| POST api/Patologia?codClienteSSN={codClienteSSN} |
Cadastrar patologia. |
| GET api/Patologia?codClienteSSN={codClienteSSN} |
Retorna a lista de patologias. |
| GET api/Patologia?codClienteSSN={codClienteSSN}&IDPatologia={IDPatologia} |
Retorna a lista de patologias. |
| DELETE api/Patologia?codClienteSSN={codClienteSSN}&idPatologia={idPatologia} |
Deletar patologia. |
| PUT api/Patologia?codClienteSSN={codClienteSSN}&IDPatologia={IDPatologia} |
Editar patologia. |
Profissionais
Medicamento
| API | Description |
|---|---|
| POST api/Medicamento?codClienteSSN={codClienteSSN} |
Cadastra Medicamento. |
| GET api/Medicamento?codClienteSSN={codClienteSSN} |
Retorna a lista de medicamentos. |
| GET api/Medicamento?codClienteSSN={codClienteSSN}&IDMedicamento={IDMedicamento} |
Retorna um medicamento. |
| DELETE api/Medicamento?codClienteSSN={codClienteSSN}&IDMedicamento={IDMedicamento} |
Deleta Medicamento. |
| PUT api/Medicamento?codClienteSSN={codClienteSSN}&IDMedicamento={IDMedicamento} |
Edita Medicamento. |
StatusHistorico
Histórico de alterações de status do cliente (formClienteSelec2 — FrmStatusHistoricoCliente). A gravação do histórico é feita pelo próprio ClienteInfoGeraisController ao detectar mudança de status em EditarClienteInfoGerais (mesma transação do UPDATE, em tabStatusHistoricoAlteracoes).
| API | Description |
|---|---|
| GET api/StatusHistorico?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Retorna o histórico de alterações de status de um cliente, mais recente primeiro. |
ClienteInfoGerais
CRUD de clientes — campos da aba Informações Gerais (formClienteSelec2).
| API | Description |
|---|---|
| GET api/ClienteInfoGerais?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Retorna os dados do cliente pelo ID. |
| POST api/ClienteInfoGerais?codClienteSSN={codClienteSSN} |
Cadastra um novo cliente com os dados da aba Informações Gerais. |
| PATCH api/ClienteInfoGerais?codClienteSSN={codClienteSSN}&idCliente={idCliente}&usuario={usuario} |
Edita parcialmente um cliente. Envie apenas os campos que deseja alterar. |
| GET api/ClienteInfoGerais?codClienteSSN={codClienteSSN}&idClienteIndicador={idClienteIndicador} |
Retorna se o cliente tem atendimentos já realizados que ainda não foram quitados (pagos), e a quantidade. Equivalente simplificado do indicador do desktop (formClienteSelec2 — "Tem atendimentos realizados e não quitados"), que usa o status "Realizado" (2) da sessão e a flag de pagamento por sessão. |
| GET api/ClienteInfoGerais?codClienteSSN={codClienteSSN} |
Retorna a lista de sexos para preenchimento do select de gênero. |
| GET api/ClienteInfoGerais?codClienteSSN={codClienteSSN}&idConvenio={idConvenio} |
Retorna os planos disponíveis dentro de um convênio. |
RelatoriosSessoesEValores
| API | Description |
|---|---|
| GET api/RelatoriosSessoesEValores?codClienteSSN={codClienteSSN}&dataInicial={dataInicial}&dataFinal={dataFinal}&temAcessoAosValores={temAcessoAosValores} |
No documentation available. |
RelatorioContrato
Impressão de contrato em PDF (FrmContratoRelatorio / RelatContrato.rdlc do desktop).
| API | Description |
|---|---|
| GET api/RelatorioContrato?codClienteSSN={codClienteSSN}&idContrato={idContrato} |
Gera o PDF de um contrato. |
Contratos
Contratos do cliente (FrmContrato2026). Versão MVP para a web: usa os modelos e cláusulas já cadastrados no desktop (tabContratosModelo/tabContratosClausulas) — sem CRUD de modelos aqui — monta e grava o contrato, permite visualizar, excluir e gerar o link de envio por WhatsApp. Não inclui o bloco opcional "atendimento vinculado" (valor por extenso) do desktop.
| API | Description |
|---|---|
| GET api/Contratos?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Retorna a lista de contratos de um cliente, mais recente primeiro. |
| GET api/Contratos?codClienteSSN={codClienteSSN}&idContrato={idContrato} |
Retorna um contrato específico, incluindo o texto completo (para visualização/impressão). |
| GET api/Contratos?codClienteSSN={codClienteSSN} |
Retorna os modelos de contrato disponíveis (cadastrados no desktop) para preenchimento do select. |
| GET api/Contratos?codClienteSSNClinica={codClienteSSNClinica} |
Retorna os dados cadastrais da clínica (tabClientesSSN), já com o nome da contratada formatado (nome fantasia + endereço completo + CNPJ), para auto-preencher o novo contrato (mesma lógica de FrmContrato2026.CarregarDados no desktop). |
| GET api/Contratos?codClienteSSNEventos={codClienteSSNEventos} |
Retorna os tipos de atendimento (tabTiposDeEventosComCliente) com os 3 valores possíveis (por atendimento, mensal, total), para o bloco opcional "Atendimento vinculado" do contrato. |
| POST api/Contratos?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Monta e grava um novo contrato: cabeçalho global (tabContratosCabecalho) com placeholders substituídos + cláusulas do modelo selecionado (tabContratosClausulas, em ordem), e gera um código de acesso único (mesmo algoritmo do desktop: 20 caracteres alfanuméricos aleatórios). |
| POST api/Contratos?codClienteSSN={codClienteSSN}&idContrato={idContrato} |
Marca o contrato como enviado e retorna o link público de confirmação/assinatura, para envio ao cliente (por WhatsApp, e-mail, etc. — a montagem/disparo da mensagem fica a cargo do chamador). |
| GET api/Contratos?paramCodigoClienteSSNContratoAssin={paramCodigoClienteSSNContratoAssin}¶mCodigoContratoAssin={paramCodigoContratoAssin} |
Retorna os dados de um contrato para a página pública de assinatura do paciente (link por CodigoDeAcesso — não por CPF+ID, diferente de Ficha/Evolução/Avaliação/Atendimento, porque o CodigoDeAcesso já é um token único e secreto). Fail-closed: código inexistente devolve null. |
| DELETE api/Contratos?codClienteSSN={codClienteSSN}&idContrato={idContrato} |
Exclui um contrato. |
ControleMatricula
Controle de matrícula do cliente (frmControleMatriculaCliente2026): registra os "trancamentos" (pausas) do plano de tratamento. Cada trancamento trava os atendimentos do período na agenda (status 12 - trancado) e estende o fim do plano pela quantidade de dias trancados. Cancelar um trancamento destrava os atendimentos (status 1 - aberto) e remove o registro (sem recalcular automaticamente o fim do plano, mesmo comportamento do desktop).
| API | Description |
|---|---|
| GET api/ControleMatricula?codClienteSSN={codClienteSSN}&idCliente={idCliente} |
Retorna o resumo do plano (início, fim atual, dias trancados) e o histórico de trancamentos do cliente. |
| POST api/ControleMatricula?codClienteSSN={codClienteSSN}&idCliente={idCliente}&usuario={usuario} |
Registra um novo trancamento: trava os atendimentos do período na agenda e estende o fim do plano do cliente pela quantidade de dias informada. |
| DELETE api/ControleMatricula?codClienteSSN={codClienteSSN}&idRegistroMatricula={idRegistroMatricula} |
Cancela um trancamento: remove o registro e destrava os atendimentos do período na agenda. Não recalcula automaticamente o fim do plano do cliente (mesmo comportamento do desktop). |
Guia
| API | Description |
|---|---|
| POST api/Guia?codClienteSSN={codClienteSSN} |
Cadastrar Guia. |
| GET api/Guia?codClienteSSN={codClienteSSN} |
Obter Guia. |
| GET api/Guia?codClienteSSN={codClienteSSN}&idGuia={idGuia} |
Obter Guia por Id. |
| DELETE api/Guia?codClienteSSN={codClienteSSN}&idGuia={idGuia} |
Deletar Guia. |
| PUT api/Guia?codClienteSSN={codClienteSSN}&idGuia={idGuia} |
Atualizar Guia. |