
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
* 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_signUpProgramBeneficiaryENVIO:
- 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
}
}
}
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": []
}
}
}