Voltar para publicações
Documentação Funcional Simplificada

Documentação Funcional Simplificada

Cristhyan Couto / 22 de maio de 2025

Documentação resumida por Cristhyan Couto

Você pode conferir toda a documentação disponibilizada pela Funcional Health Tech diretamente no site da empresa. Documentação Funcional Health Tech

Endereços

  • Produção: https://stores.funcionalmais.com/graphql
  • Homologação: https://stores-uat.funcionalmais.com/graphql

GraphQL

Toda chamada e resposta para a Funcional é feita via GraphQL. Em resumo, usaremos apenas dois tipos de chamadas.

Query

A query será utilizada para dados sem mudanças (GETs), sempre que quisermos apenas o retorno da informação.

query {
    # Nome da função de chamada
    Pharma_checkPricesAndRules(
        # Informações da requisição
        storeCode: "0000000000010"
        etc...
    ){
        aproved
        createdAt
        etc...
    }
}

Resposta

{
    "data": {
        "Pharma_checkPricesAndRules":{
            "aproved": true,
            "createdAt": "2022-01-14T15:22:57.000Z",
            etc...
        }
    }
}

Mutations

Mutations serão usadas sempre que quiser sobrescrever ou criar um dado (POST, PUT).

mutation preAuthorizeSale {
  # Pré-autorização de venda
  Sales_preAuthorizeSale(
    # Canal PHARMA ou BENEFITS
    channel: PHARMA
    # Origem da chamada
    origin: PARTNERS_ECOMMERCE
    # Cartão ou CPF
    customerCode: "00000000000"
    # CNPJ da farmácia
    storeCode: "00000000000010"
    etc...
  )
}{
    createdAt
    totalValue
    etc...
}

Tokens

  • Toda chamada enviada precisa ser acompanhada por um TOKEN JWT (Authorization: Bearer).
  • Os tokens têm duração de 24 horas.

Para criar um token se chama um mutation

mutation {
  createToken(login: "<usuario>", password: "<senha>") {
    token
  }
}

Resposta

{
  "data": {
    "createToken": {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
    }
  }
}

Cadastro e Elegibilidade

- Avaliar elegibilidade do CPF: query Pharma_assessEligibility
- Parâmetros Farmácia: Origem e CNPJ

* CAMPO: origin

Aqui será enviada a origem da venda, que é do tipo ENUM, então PRECISA ser exata.

* Exemplos de Origem:

  • MOBILE_APP
  • POINT_OF_SALES
  • CALL_CENTER

Lista de todos os campos

* CAMPO: storeCode

Aqui deve ser enviado o CNPJ da farmácia.

* Formatação:

"0000000000010"

- Parâmetros Cliente: EAN e CPF.

* CAMPO: productCode

Aqui deve ser enviado o código de barras EAN do produto.

* Formatação:

"<EAN>"

* CAMPO: customerCode

Aqui deve ser enviado o CPF do cliente.

* Formatação:

"<CPF da pessoa>"

Fluxo da consulta:

  • A consulta é feita sempre com dois parâmetros, o CPF do cliente e o EAN do produto.
  • Primeiro, verifica-se se o produto está cadastrado em algum programa.
  • Verifica-se se o CPF está cadastrado no programa ao qual o produto pertence.
  • Verifica-se se o CPF está cadastrado no produto específico.

Caso CPF não esteja no programa:

  • Será retornada uma lista de campos necessários para o cadastro no programa.

Caso exista e se houver (pacientes)

  • Será retornada uma lista de pacientes atrelados àquele CPF.

Retorno:

* CAMPO: registrationPolicy.requiresBeneficiaryRegistration.TRUE

  • Isso significa que o CPF não está cadastrado no programa.

* CAMPO: registrationPolicy.requiresBeneficiaryRegistration.FALSE

  • Isso significa que o CPF está cadastrado e não precisa continuar o fluxo de cadastro.

* CAMPO: eligibilityAssessment.programCode

  • OBS: Salve este campo, pois ele será enviado no momento do cadastro do CPF no programa.

Envio

query {
  Pharma_assessEligibility(
    # Origem da solicitação
    origin: POINT_OF_SALES
    # CNPJ da farmácia
    storeCode: "0000000000010"
    # EAN do produto do programa da indústria
    productCode: "<EAN>"
    # CPF do consumidor
    customerCode: "<CPF da pessoa>"
  ) {
    # Resultado da validação
    validationResult {
      status
      message
      errors {
        message
      }
    }
    # Avaliação da eligibilidade
    eligibilityAssessment {
      # Código do programa
      programCode
      # Produto pertence a um programa da industria?
      belongsToIndustryProgram
      # Nome do programa
      programDescription
      # Nome do produto
      productDescription
    }
    # Política cadastral
    registrationPolicy {
      # Permite pacientes dependentes do principal
      allowDependents
      # Número máximo de pacientes dependentes
      dependentsLimit
      # Requer cadastro do beneficiário?
      requiresBeneficiaryRegistration
      # Requer cadastro da receita médica?
      requiresMedicalPrescriptionRegistration
      # Requer ao menos uma forma de contato?
      requiresAtLeastOneContactMedium
      # Requer dados do profisasional que prescreveu a receita?
      requiresMedicalPrescriber
      # Campos para cadastro do beneficiário
      beneficiaryFields {
        ...registrationPolicyFields
      }
      # Campos para cadastro do paciente dependente
      dependentFields {
        ...registrationPolicyFields
      }
      # Campos para cadastro da receita médica
      medicalPrescriptionFields {
        ...registrationPolicyFields
      }
      # Campos extras do programa
      extraFields {
        ...registrationPolicyFields
      }
      extraFormFields {
        ...registrationPolicyExtraFields
      }
      # Origens permitidas
      allowedOrigins
    }
    # Dependentes atualmente cadastrados no programa
    # para o consumidor informado na chamada
    dependents {
      id
      name
      birth
      gender
      holder
    }
  }
}

Após a verificação, caso o cliente seja elegível para o PBM, inicia-se o fluxo de cadastro.

Inscrição do Beneficiário

Mutation Pharma_signUpProgramBeneficiary

ENVIO:

  • O envio dependerá do retorno do Pharma_assessEligibility.
  • Serão enviados os campos obrigatórios e, caso deseje, os opcionais.

Exemplo de envio:

mutation {
  Pharma_signUpProgramBeneficiary(
    input: {
      # Código do programa
      programCode: "1"
      # Origem da solicitação
      origin: POINT_OF_SALES
      # CNPJ da farmácia
      storeCode: "00000000000010"
      # CPF do consumidor
      customerCode: "00000000000"
      # EAN do produto do programa da indústria
      productCode: "7897572004405"
      # Campos do cadastro de beneficiários
      # (conforme Pharma_assessEligibility)
      beneficiaryFields: [
        { text: "Nome", value: "Fulano Beltrano Ciclano" }
        { text: "Nascimento", value: "1989-03-07 12:00:00" }
        { text: "Sexo", value: "M" }
        { text: "Email", value: "r@r.com" }
        { text: "Telefone", value: "12398472" }
        { text: "TelefoneCelular", value: "12398472" }
        { text: "CEP", value: "20261905" }
        { text: "Endereco", value: "Rua Jatoba" }
        { text: "Numero", value: "02" }
        { text: "Bairro", value: "Leblon" }
        { text: "Cidade", value: "Rio de Janeiro" }
        { text: "UF", value: "PR" }
      ]
      # Campos do cadastro de receita médica
      # (conforme Pharma_assessEligibility)
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "6055" }
        { text: "UF", value: "SC" }
        { text: "TipoConselho", value: "0" }
      ]
      # Campos extras preenchidos
      # (conforme Pharma_assessEligibility)
      extraFormFields: [
        {
          QuestionCode: 99
          AnswerCode: 960
          QuestionTypeFlag: 1
          TypedValue: ""
        }
        {
          QuestionCode: 103
          AnswerCode: 963
          QuestionTypeFlag: 1
          TypedValue: ""
        }
        {
          QuestionCode: 104
          AnswerCode: 965
          QuestionTypeFlag: 1
          TypedValue: "Nome digitado"
        }
        {
          QuestionCode: 105
          AnswerCode: 966
          QuestionTypeFlag: 1
          TypedValue: "011123456789"
        }
        {
          QuestionCode: 84
          AnswerCode: 942
          QuestionTypeFlag: 2
          TypedValue: ""
        }
      ]
    }
  ) {
    # Status da solicitação
    status
    message
    errors {
      message
    }
  }
}

Para documentação completa

Resposta

{
  "data": {
    "Pharma_signUpProgramBeneficiary": {
      "status": "SUCCESS",
      "message": "Beneficiario cadastrado com sucesso",
      "errors": []
    }
  }
}

Inscrição de Dependentes (OPCIONAL)

mutation {
  Pharma_signUpProgramBeneficiaryDependent(
    input: {
      # CNPJ da farmácia
      storeCode: "00000000000010"
      # Codigo do programa
      programCode: "8"
      # Origem
      origin: POINT_OF_SALES
      # CPF do consumidor (beneficiário titular)
      customerCode: "29489536008"
      # EAN do produto do programa da indústria
      productCode: "7897337707435"
      # Campos do cadastro de dependente
      # (conforme Pharma_assessEligibility)
      dependentFields: [
        { text: "Nome", value: "Beltrano Ciclano Junior" }
        { text: "Nascimento", value: "1999-03-07 12:00:00" }
        { text: "Sexo", value: "M" }
        { text: "Email", value: "ree@r.com" }
        { text: "Telefone", value: "12398472" }
        { text: "TelefoneCelular", value: "12398472" }
        { text: "CEP", value: "20261905" }
        { text: "Endereco", value: "Rua Jatoba" }
        { text: "Numero", value: "02" }
        { text: "Bairro", value: "Leblon" }
        { text: "Cidade", value: "Rio de Janeiro" }
        { text: "UF", value: "PR" }
      ]
      # Campos do cadastro de receita médica
      # (conforme Pharma_assessEligibility)
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "6055" }
        { text: "UF", value: "SC" }
        { text: "TipoConselho", value: "0" }
      ]
    }
  ) {
    # Status da solicitação
    status
    message
    errors {
      message
    }
  }
}

Resposta

{
  "data": {
    "Pharma_signUpProgramBeneficiaryDependent": {
      "status": "SUCCESS",
      "message": "Beneficiario cadastrado com sucesso",
      "errors": []
    }
  }
}

Incluir Produto a um Beneficiário

  • Inclui um produto no cadastro do beneficiário, podendo também associá-lo a um paciente.
  • Novamente, isso será baseado no retorno do Pharma_assessEligibility.

Exemplo:

mutation {
  Pharma_addProgramBeneficiaryToProduct(
    input: {
      # Origem
      origin: POINT_OF_SALES
      # Codigo do programa
      programCode: "8"
      # CNPJ da farmácia
      storeCode: "00000000000010"
      # CPF do consumidor
      # (beneficiário titular se for usar
      # o ID de um dependente no campo dependenteID)
      customerCode: "000000000000"
      # EAN do produto do programa da indústria
      productCode: "7896269900150"
      # ID de um paciente dependente do beneficiário
      # (titular). ID está na lista de dependentes na
      # query Pharma_assessEligibility)
      dependentID: null
      # Campos do cadastro de receita médica
      # (conforme Pharma_assessEligibility)
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "6055" }
        { text: "UF", value: "SC" }
        { text: "TipoConselho", value: "0" }
      ]
      extraFormFields: [
        {
          QuestionCode: 96
          AnswerCode: 956
          QuestionTypeFlag: 2
          TypedValue: ""
        }
      ]
    }
  ) {
    status
    message
    errors {
      message
    }
  }
}

Validar os dados do CRM do Prescritor

Phrama_prescriber

Envio:

query {
  Pharma_prescriber(
    data: { council: CRM, stateAbbr: "SP", registerNumber: 999999 }
  ) {
    status
    message
    errors {
      message
    }
  }
}

Resposta

{
  "data": {
    "Pharma_prescriber": {
      "status": "SUCCESS",
      "message": "",
      "errors": []
    }
  }
}