Integrações

Integração via webhook

Na integração via webhook, o sistema V2Saúde realiza o envio de notificações para um endereço especificado, utilizando uma estrutura de dados específica de acordo com o tipo de notificação.

Ativação de webhooks

Os webhooks podem ser ativados na página Cadastros > Empresa e preferências, na aba "Integrações".
É necessária a contratação do mõdulo de webhooks para utilizar esta função.

image-1737333886755.png

Ao clicar em "Gerenciar webhooks", a página de gerenciamento de webhooks será exibida. Nesta página é possível gerir as notificações configuradas para a empresa:

image-1737333968778.png

Clique em "Novo webhook" para cadastrar um novo webhook:


image-1737334004801.png

Escolha o tipo, a API Key e a URL do webhook.

Linhas gerais sobre o envio de webhooks

As seguintes informações se aplicam a todas as chamadas de webhook:

  1. O V2Saúde realiza chamadas POST para a URL especificada
  2. A API Key informada será enviada no cabeçalho (header) "Authorization" da requisição

Tipos de webhook

Os seguintes tipos de webhook são atualmente suportados.

Cadastro e alterações em cirurgias

Uma notificação é enviada sempre que uma cirurgia for inserida ou modificada no sistema.

Exemplo de payload da requisição:

[
    {
        "id": 583581,
        "cliente": {
            "id": 63387,
            "nome": "BRADESCO SAUDE - OPERADORA DE PLANOS S/A",
            "razaoSocial": "BRADESCO SAUDE - OPERADORA DE PLANOS S/A",
            "cnpj": "15.011.651/0001-54",
            "cpf": null
        },
      "responsavel": "MACHADO DE ASSIS",
      "paciente": "JOSE DE ALENCAR",
        "matriculaPaciente": "",
      "medico": "GRACILIANO RAMOS",
      "medicoCRM": "1234",
      "procedimento": "CIRURGIA DE QUADRIL",
      "data": "2025-01-01",
      "dataDeCadastro": "2025-01-01",
        "finalizada": false,
        "dataDeFinalizacao": null,
        "dataOrcamentoPos": null,
        "dataLiberacaoMaterial": null,
        "dataLimiteRetirada": null,
        "finalizadaPor": null,
        "observacao": "",
        "observacaoVale": "",
        "observacaoPos": null,
      "horaCirurgia": "14:30",
        "cancelada": false,
        "vendedor": {
            "id": null,
            "nome": null,
            "razaoSocial": null,
            "cnpj": null,
            "cpf": null
        },
        "hospital": {
            "id": 62707,
          "nome": "ALBERT EINSTEIN",
          "razaoSocial": "",
          "cnpj": "",
            "cpf": null
        },
        "convenio": {
            "id": 63387,
            "nome": "BRADESCO SAUDE - OPERADORA DE PLANOS S/A",
            "razaoSocial": "BRADESCO SAUDE - OPERADORA DE PLANOS S/A",
            "cnpj": "15.011.651/0001-54",
            "cpf": null
        },
        "codigoSus": "",
        "cirurgiaBaixada": false,
        "observacaoBaixa": null,
        "nota": null,
        "statusCotacao": "APROVADA",
        "procedimentoCirurgico": null,
        "numeroEmpenho": ""
    }
]

Os seguintes atributos fazem parte do payload da requisição

Atributo
Registro Pai
Tipo
Descrição
id

Número
Código da cirurgia
cliente

Pessoa (ver Registros Auxiliares)
Dados do cliente
responsavel
String Responsável pela cirurgia
paciente
String Nome do paciente
matriculaPaciente
String Matrícula do paciente
medico
String Nome do médico
medicoCRM
String
CRM do médico
procedimento
String
Descrição do procedimento
data
Date
Data da cirurgia
dataDeCadastro
DateTime
Data de cadastro
cadastradoPor
Pessoa (ver Registros Auxiliares) Usuário responsável pelo cadastro
finalizada
Boolean
Cirurgia finalizada?
dataDeFinalizacao
DateTime
Data da finalização
dataOrcamentoPos
DateTIme
Data do orçamento pś
dataLiberacaoMaterial
DateTime
Data da liberação do material
dataLimiteRetirada
DateTime
Data limite da retirada do material consignado
finalizadaPor
Pessoa (ver Registros Auxiliares) Usuário responsável pela finalização
observacao
String
Observações da cirurgia
observacaoVale
String
Observações do vale/consignação
observacaoPos
String
Observações do orçamento pós
horaCirurgia
Time
Hora da cirurgia
cancelada
Boolean
Cirurgia cancelada?
vendedor
Pessoa (ver Registros Auxiliares) Vendedor
hospital
Pessoa (ver Registros Auxiliares) Hospital
convenio
Pessoa (ver Registros Auxiliares) Convênio
codigoSus
String
Código SUS do procedimento
cirurgiaBaixada
Boolean
Cirurgia com pagamento cancelado/baixado?
observacaoBaixa
String
Observações da baixa
nota
Número
Número da nota fiscal de venda
statusCotacao
String
Status da cotação.
Os seguintes valores são suportados:

  • APROVADA
    Cotação aprovada

  • NAO_APROVADA
    Cotação não aprovada
  • EM_ANDAMENTO
    Aprovação em andamento
  • PERDIDA
    Cotação perdida
procedimentoCirurgico
String
Descrição do procedimento
numeroEmpenho
String
Número do empenho da licitação
Cadastro e alterações em orçamentos pré

Uma notificação é enviada quando o orçamento pré de uma cirurgia é alterado.

Exemplo de payload da requisição:

[
    {
        "id": 48391,
        "cirurgia": {
            "id": 142913,
            "cliente": {
              "id": 1234,
              "nome": "AMIL",
                "razaoSocial": null,
              "cnpj": "11.111.111/0001-11",
                "cpf": null
            },
          "responsavel": "AUGUSTO DOS ANJOS",
          "paciente": "CARLOS DRUMMOND DE ANDRADE",
            "matriculaPaciente": null,
          "medico": "VINICIUS DE MORAIS",
            "medicoCRM": "9196",
            "instrumentadoresAvulsos": null,
            "procedimento": "RESSECÇAO ENDOSCOPICA DA PROSTATA",
          "data": "2025-01-01",
          "dataDeCadastro": "2025-01-01",
            "finalizada": false,
            "dataDeFinalizacao": null,
            "dataOrcamentoPos": null,
            "dataLiberacaoMaterial": null,
            "dataLimiteRetirada": null,
            "finalizadaPor": null,
          "observacao": "",
            "observacaoVale": null,
            "observacaoPos": null,
          "horaCirurgia": "16:00",
            "cancelada": false,
            "vendedor": {
                "id": 1829,
              "nome": "NOME DO VENDEDOR",
                "razaoSocial": null,
                "cnpj": null,
                "cpf": null
            },
            "hospital": {
                "id": null,
                "nome": null,
                "razaoSocial": null,
                "cnpj": null,
                "cpf": null
            },
            "convenio": {
                "id": null,
                "nome": null,
                "razaoSocial": null,
                "cnpj": null,
                "cpf": null
            },
            "codigoSus": null,
            "cirurgiaBaixada": false,
            "observacaoBaixa": null,
            "nota": null,
            "statusCotacao": "APROVADA",
            "procedimentoCirurgico": null,
            "numeroEmpenho": null,
            "action": null
        },
        "cadastradoPor": {
            "id": 1747,
          "nome": "OPERADOR DO SISTEMA",
            "razaoSocial": null,
            "cnpj": null,
            "cpf": null
        },
        "aprovado": false,
      "data": "2025-01-01",
        "dataAprovacao": null,
        "observacoes": "",
        "desconto": 0,
        "itens": [
            {
                "id": 170011,
                "produto": {
                    "id": 235167,
                    "descricao": "CARGA  ARTICULADA ROXA P3H 45 MM",
                    "referenciaFabricante": "CADD45ENTS",
                    "registroAnvisa": "80940400003",
                    "codigoDeBarras": "1000001048024",
                    "fabricante": {
                        "id": 101565,
                        "nome": "PANTHER HEALTHCARE",
                        "razaoSocial": null,
                        "cnpj": null,
                        "cpf": null
                    }
                },
                "valor": 500,
                "desconto": 0,
                "quantidade": 1,
                "quantidadeAutorizada": 0,
                "quantidadeDoacao": 0
            }
        ]
    }
]

Os seguintes atributos fazem parte do payload da requisição:

Atributo
Registro Pai
Tipo
Descrição
id

Número
Código do orçamento
cirurgia

Cirurgia (ver Cadastro e alterações em cirurgias)
Dados da cirurgia
cadastradoPor

Pessoa
Usuário responsável pelo cadastro do orçamento
aprovado

Boolean
Aprovado?
data

Date
Data do orçamento
dataAprovacao
Date
Data de aprovação do orçamento
observacoes
String
Observações do orçamento
desconto
Número
Valor do desconto
itens
Objeto
Itens do orçamento
id
itens
Número
Código do orçamento
produto
itens
Produto
Dados do produto
valor
itens
Número
Valor unitário
desconto
itens
Desconto
Valor do desconto
quantidade
itens
Número
Quantidade
quantidadeAutorizada
itens
Número
Quantidade autorizada
quantidadeDoacao itens
Número
Quantidade que não deve ser faturada (doada)

Registros auxiliares

Pessoa
Atributo
Registro Pai
Tipo
Descrição
id

Número
Código
nome

String
Nome
razaoSocial

String
Razão social
cnpj

String
CNPJ
cpf

String
CPF
Produto
Atributo
Registro Pai
Tipo
Descrição
id

Número
Código
descricao
String
Descrição
referenciaFabricante
String
Referência do fabricante
registroAnvisa
String
Número do registro na Anvisa
codigoDeBarras
String
Código de barras
fabricante

Pessoa
Dados do fabricante


Agendor

A integração do V2Saúde com o Agendor, realiza a integração dos deals ganhos do Agendor como cirurgias aprovadas no estágio de orçamento pré. 

Durante a integração do deal do Agendor com a cirurgia no V2Saúde, o sistema irá criar a cirurgia com os dados do Agendor, registrar os itens do orçamento e, se necessário, cadastrar o cliente caso não seja encontrado no sistema. 

Pré requisitos

Para realizar a integração com o Agendor, é preciso:

Configurações

Após a geração do token no Agendor e contratação do mõdulo no sistema, basta configurar a integração.
As configurações da integração são definidas no cadastro da empresa, aba Integrações.

image-1737337326911.png

 

Fluxo de integração

Para a integração de orçamentos, é importante mencionar que os produtos informados no Agendor precisam ter exatamente a mesma referência que o V2Saúde. A integração não cadastra novos produtos no V2. 

  1. Verifica se o deal do Agendor já foi cadastrado como cirurgia através de seu código legado. O código legado é composto pelo prefixo “agendor-” e o id do negócio no Agendor. Se uma cirurgia com o código legado já existir, ela não é integrada novamente e o processo segue para o próximo negócio da lista. 

  2. Integração do cliente
    O negócio do Agendor pode ter uma Organization ou uma Person, para pessoas jurídicas e físicas respectivamente. 
    Se o cliente não for encontrado, ele é cadastrado no V2.

  3. Integração dos produtos 
    Para cada produto informado no deal, a aplicação verifica se o produto existe no V2 com a referência do fabricante informada no campo  “code” do produto no Agendor.
    Se o produto não for encontrado, uma observação é gravada no orçamento informando que o produto não foi localizado. Importante: Não são cadastrados produtos no V2 

  4. Integração da cirurgia 
    O negócio do Agendor é integrado no V2 como cirurgia.
    Alguns campos customizados do Agendor são utilizados no V2 para preencher as informações da cirurgia.
    Os seguintes campos são integrados:
  1. Cliente 
  2. Hospital 
    Campo customizado hospital 

  3. Convênio 
    Campo customizado convenio 

  4. Paciente 
    Campo customizado paciente 

  5. Data da cirurgia 
    Campo wonAt do negócio 

  6. Médico 
    Campo customizado medico 

  7. Observação 
    Observações da integração do deal. 
    Este campo é formado pelo campo description do negócio e pelo sufixo “Criada a partir do Agendor: [url do deal no agendor]” 

  8. Data de cadastro 
    Data atual 

  9. Código legado 
    Formado pelo prefixo “agendor-” + id do negócio no Agendor 

  10. Observações do agendamento 
    Campo personalizado “grade_da_cirurgia” 

  11. Procedimento 
    Campo personalizado “procedimento_cirurgico” 
    Caso o procedimento não exista no V2, é automaticamente criado. 
  12. Vendedor 
    Campo personalizado “vendedor” 

Integração dos clientes 

Durante o processo de integração das cirurgias, a aplicação irá verificar se o cliente existe pelo CNPJ ou CPF. 

Caso o cliente não exista, ele é cadastrado no V2 utilizando os campos do Agendor. 

No Agendor, o cadastro do cliente deve conter os campos obrigatórios no V2 para que o cadastrado possa ser completado. Do contrário a cirurgia não será integrada. 

Campos obrigatórios no cadastro do cliente: 

Integrações da API V2Saúde

O V2Saúde possui uma API que permite a integração de sistemas externos.
Esta página descreve as funções disponíveis da API.

Convenções deste documento

URL Base
Sempre que os termos URL Base ou URL_BASE forem utilizados, estamos nos referindo ao endereço de acesso do V2Saúde utilizado pela empresa. Por exemplo: https://minhaempresa.v2saude.com.br

Autenticação

A autenticação de nossa API é realizada através de Token JWT, que deve ser gerado antes da chamadas subsequentes.

Chamada de autenticação
Método HTTP: POST
URL: URL_BASE/auth/login

Exemplo de requisição:

{
  "username": "machado.de.assis@minhaempresa.v2saude.com.br",
  "password": "capitu"
}

Exemplo de resposta:

{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3VhcmlvSWQiO...",
  "usuario": { ... }
}

O campo accessToken deve ser utilizado como token de autenticação nas chamadas da API.
O valor de accessToken deve ser enviado no Header "Authorization" junto à palavra Bearer.
Exemplo:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ

Clientes e fornecedores

Consultar pelo CPF
Método HTTP: GET
URL: URL_BASE/v2-api/clientefornecedor/cpf/{cpf}
Descrição: Retorna os dados do cliente ou fornecedor pelo CPF informado. O documento deve ser enviado sem formatação.

Consultar pelo CNPJ
Método HTTP: GET
URL: URL_BASE/v2-api/clientefornecedor/cnpj/{cnpj}
Descrição: Retorna os dados do cliente ou fornecedor pelo CNPJ informado.O documento deve ser enviado sem formatação.

Cirurgias

Cadastro
Método HTTP: POST
URL: URL_BASE/v2-api/cirurgia/

Exemplo de requisição:

{
    "cliente": 80733,
    "responsavel": null,
    "paciente": "TESTE 1",
    "matriculaPaciente": null,
    "medico": null,
    "medicoCRM": null,
    "instrumentadoresAvulsos": null,
    "cirurgia": "TESTE",
    "data": "2022-04-15",
    "hospital": "TESTE HOSPITAL",
    "observacao": null,
    "horaCirurgia": "18:00",
    "convenio": "AMIL"
}