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"
    }
  }
}

Importante

  • Utilização do token sem aspas
  • CRM para testes 999999

Carga de Produtos (HOMOLOGAÇÃO)

Essa função será usada para fazer a carga dos produtos para testes

query Pharma_discountPrograms {
  # storeCode = CNPJ (utilizando 010 para homologação).
  # origin = Ponto de origem da venda.
  Pharma_discountPrograms(storeCode: "00000000000010", origin: POINT_OF_SALES) {
    # id = ID do programa de desconto.
    id
    # name = Nome do programa de desconto.
    name
    # url = Site do programa de desconto (pode retornar null).
    url
    # allowedOrigins = Pontos de origem para aquele programa (PDV, Web, etc.).
    allowedOrigins
    # rules = Regra de Produtos.
    rules {
      # product = Objeto para mostrar os produtos disponíveis no programa de descontos.
      product {
        # name = Nome do produto.
        name
        # packge = Informações do produto como mg, quantidade, etc.
        package
        # eans = Lista de eans do produto.
        eans
      }
      # requiresMedicalPrescription = Se o produto necessita de receita.
      requiresMedicalPrescription
      # witholdsMedicalPrescription = Se o produto necessita de retenção de receita.
      witholdsMedicalPrescription
      # blocked = Produto bloqueado para o PDV.
      blocked
      # saleBaseDiscountPercentage = Desconto base do produto para a venda.
      saleBaseDiscountPercentage
      # maximumConsumerPrice = Preço máximo para o consumidor.
      maximumConsumerPrice
      # repositionBaseDiscountPercentage = Desconto base do produto para reposição.
      repositionBaseDiscountPercentage
      # id = Código da regra do produto.
      id
      # description = Código da regra da descrição do produto.
      description
    }
  }
}

resposta

{
    "id": "9",
    "name": "PROGRAMA VIVER - ADIUM",
    "url": null,
    "allowedOrigins": [
        29,
        3,
        5,
        6,
        8,
        16
    ],
    "rules": [
        {
            "product": {
                "name": "LACOTEM",
                "package": "200 mg emb. c/ 28",
                "eans": [
                    "7892953003909"
                ]
            },
            "requiresMedicalPrescription": false,
            "witholdsMedicalPrescription": false,
            "blocked": false,
            "saleBaseDiscountPercentage": 65,
            "maximumConsumerPrice": 562.61,
            "repositionBaseDiscountPercentage": 1,
            "id": "6888",
            "description": null
        },
        {
            "product": {
                "name": "LACOTEM",
                "package": "100 mg emb. c/ 28",
                "eans": [
                    "7892953003879"
                ]
            },
            "requiresMedicalPrescription": false,
            "witholdsMedicalPrescription": false,
            "blocked": false,
            "saleBaseDiscountPercentage": 65,
            "maximumConsumerPrice": 288.15,
            "repositionBaseDiscountPercentage": 1,
            "id": "6887",
            "description": null
        },
        {
            "product": {
                "name": "LACOTEM",
                "package": "50 mg emb. c/ 14",
                "eans": [
                    "7892953003831"
                ]
            },
            "requiresMedicalPrescription": false,
            "witholdsMedicalPrescription": false,
            "blocked": false,
            "saleBaseDiscountPercentage": 65,
            "maximumConsumerPrice": 71.96,
            "repositionBaseDiscountPercentage": 1,
            "id": "6889",
            "description": null
        },
        {
            "product": {
                "name": "TAMSULON",
                "package": "0,4 mg emb. c/ 30",
                "eans": [
                    "7892953000755",
                    "7892953002186"
                ]
            },
            "requiresMedicalPrescription": false,
            "witholdsMedicalPrescription": false,
            "blocked": false,
            "saleBaseDiscountPercentage": 66,
            "maximumConsumerPrice": 270.46,
            "repositionBaseDiscountPercentage": 1,
            "id": "176",
            "description": null
        }
    ]
},

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 {
  Pharma_assessEligibility(
    # Origem da solicitação
    origin: POINT_OF_SALES
    # CNPJ da loja
    storeCode: "00000000000010"
    # Ean do produto
    productCode: "7896672203923"
    # CPF do Cliente
    customerCode: "71956929061"
  ) {
    # Resultado da validação
    validationResult {
      status
      message
      errors {
        message
      }
    }
    # Retorno de eligibilidade
    eligibilityAssessment {
      # Se pertence a algum programa = Boolean
      belongsToIndustryProgram
      # Descrição do Programa
      programDescription
      # Código do Programa (OBS: Salvar campo)
      programCode
      # Descrição do produto (Geralmente o nome)
      productDescription
    }
    # Politicas de registro do programa
    # Aqui teremos campos opcionais e requeridos
    # Campos requeridos deverão ser mandados para cadastro
    registrationPolicy {
      # Informa se o programa utiliza pacientes dependentes
      allowDependents
      # Limite de pacientes dependentes
      dependentsLimit
      # Informa se é necessário cadastro no programa
      requiresBeneficiaryRegistration
      # Informa se é necessário prescrição médica
      requiresMedicalPrescriptionRegistration
      # Informa se é necessário pelo menos um telefone de contato exigido
      requiresAtLeastOneContactMedium
      # Informa se o CRM é obrigatório ou opcional para o programa
      requiresMedicalPrescriber
      # Campos de origens permitidas
      allowedOrigins
      # Campos de cadastro do beneficiáro
      # Aqui ira mostrar os campos requeridos para cadastro.
      beneficiaryFields {
        # Nome do campo - EX: "Nome"
        field
        # Descrição do campo - EX: "Nome Completo"
        label
        # Tipo do campo - EX: STRING
        type
        # Descrição do campo
        description
        # Aqui mostra se o campo é "REQUIRED" ou opcional
        display
        # A qual entidade esse campo pertence - EX: "BENEFICIARIO"
        entity
        # Valor pré definido - EX: null
        defaultValue
      }
      # Campo de dependentes
      dependentFields {
        field
        label
        type
        description
        display
        entity
        defaultValue
      }
      # Campo de prescrição médica
      medicalPrescriptionFields {
        field
        label
        type
        description
        display
        entity
        defaultValue
      }
      extraFields {
        field
        label
        type
        description
        display
        entity
        defaultValue
      }
      extraFormFields {
        QuestionCode
        ParentQuestionCode
        ProgramCode
        ProductName
        DisplayTitle
        MultipleChoice
        Mandatory
        DisplayOrder
        QuestionHint
        ControlType
        QuestionTypeFlag
      }
    }
    dependents {
      id
      name
      birth
      gender
      holder
    }
  }
}

resposta

{
    "data": {
        "Pharma_assessEligibility": {
            "validationResult": {
                "status": "SUCCESS",
                "message": null,
                "errors": []
            },
            "eligibilityAssessment": {
                "belongsToIndustryProgram": true,
                "programDescription": "PROGRAMA ACESSAR - CHIESI",
                "programCode": "21",
                "productDescription": "BRONCHO VAXOM"
            },
            "registrationPolicy": {
                "allowDependents": false,
                "dependentsLimit": 0,
                "requiresBeneficiaryRegistration": true,
                "requiresMedicalPrescriptionRegistration": true,
                "requiresAtLeastOneContactMedium": true,
                "requiresMedicalPrescriber": false,
                "allowedOrigins": [
                    "POINT_OF_SALES",
                    "CALL_CENTER",
                    "INDUSTRY_PROGRAM_WEBSITE",
                    "MOBILE_APP",
                    "PARTNERS_ECOMMERCE",
                    "MEMED"
                ],
                "beneficiaryFields": [
                    {
                        "field": "Nome",
                        "label": "Nome Completo",
                        "type": "STRING",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "Nascimento",
                        "label": "Data de Nascimento",
                        "type": "DATETIME",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "Sexo",
                        "label": "Sexo",
                        "type": "SELECT",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "PermiteContatoTelefone",
                        "label": "Contato posterior por Telefone?",
                        "type": "BOOLEAN",
                        "description": null,
                        "display": "HIDDEN",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "TelefoneCelular",
                        "label": "Telefone Celular",
                        "type": "STRING",
                        "description": null,
                        "display": "OPTIONAL",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "Telefone",
                        "label": "Telefone Residencial",
                        "type": "STRING",
                        "description": null,
                        "display": "OPTIONAL",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "TelefoneComercial",
                        "label": "Outro Telefone",
                        "type": "STRING",
                        "description": null,
                        "display": "OPTIONAL",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    },
                    {
                        "field": "Email",
                        "label": "Email",
                        "type": "STRING",
                        "description": null,
                        "display": "OPTIONAL",
                        "entity": "BENEFICIARIO",
                        "defaultValue": null
                    }
                ],
                "dependentFields": [],
                "medicalPrescriptionFields": [
                    {
                        "field": "TipoConselho",
                        "label": "Tipo de conselho",
                        "type": "SELECT",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "PRODUTO",
                        "defaultValue": null
                    },
                    {
                        "field": "NumeroRegistroConselho",
                        "label": "Número de Registro",
                        "type": "INTEGER",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "PRODUTO",
                        "defaultValue": null
                    },
                    {
                        "field": "UF",
                        "label": "UF",
                        "type": "SELECT",
                        "description": null,
                        "display": "REQUIRED",
                        "entity": "PRODUTO",
                        "defaultValue": null
                    }
                ],
                "extraFields": [],
                "extraFormFields": []
            },
            "dependents": []
        }
    }
}

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)
      # Aqui só iremos mandar campos marcados como "REQUIRED"
      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" }
      ]
      dependentFields: null
      extraFields: null
      extraFormFields: null
    }
  ) {
    # 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_signUpProgramBeneficiary {
  Pharma_signUpProgramBeneficiary(
    input: {
      origin: POINT_OF_SALES
      storeCode: "00000000000010"
      customerCode: "14771206023"
      productCode: "7896672203923"
      programCode: "21"
      beneficiaryFields: [
        { text: "Nome", value: "Nome da Silva Sauro" }
        { text: "Nascimento", value: "1999-06-05" }
        { text: "Sexo", value: "M" }
        { text: "Telefone", value: "12398472" }
      ]
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "6055" }
        { text: "UF", value: "SC" }
        { text: "TipoConselho", value: "0" }
      ]
      dependentFields: null
      extraFields: null
      extraFormFields: null
    }
  ) {
    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" }
      ]
    }
  ) {
    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": []
    }
  }
}

Validando Regras e Checando Preços

query {
  Pharma_checkPricesAndRules(
    # Origem da venda
    origin: POINT_OF_SALES
    # CNPJ da loja
    storeCode: "00000000000010"
    # CPF do Cliente
    customerCode: "23225452017"
    # Lista de Produtos (Pode ser mais de 1)
    products: [
      {
        ean: "7897337706339"
        price: 222.99
        saleAmount: 1
        medicalPrescription: {
          quantity: 1
          date: "2025-05-28"
          prescriber: { council: CRM, stateAbbr: "SP", registerNumber: 999999 }
        }
      }
    ]
  ) {
    aproved
    createdAt
    totalValue
    moneyPaidValue
    cardPaidValue
    totalValueMaxConsumerPrice
    totalValueWithPrescription
    totalValueWithoutPrescription
    totalDiscountAmount
    requiredUploadWithPrescription
    products {
      transactionType
      ean
      description
      maximumConsumerPrice
      priceReceived
      funcionalPrice
      salePrice
      saleAmount
      status {
        aproved
        message
      }
      medicalPrescription {
        quantity
        date
        prescriber {
          council
          stateAbbr
          registerNumber
        }
        # o parâmetro deve ser declarado na pré-autorização, após validação se retornado true no requiredInformDailyDose
        dailyDose
        # o mesmo valida se é obrigatório o envio do parâmetro "dailyDose"
        requiredInformDailyDose
      }
    }
  }
}

resposta

{
  "data": {
    "Pharma_checkPricesAndRules": {
      "aproved": true,
      "createdAt": "2025-05-28T15:22:57.000Z",
      "totalValue": 221.84,
      "moneyPaidValue": 221.84,
      "cardPaidValue": 0,
      "totalValueMaxConsumerPrice": 221.84,
      "totalValueWithPrescription": 0,
      "totalValueWithoutPrescription": 221.84,
      "totalDiscountAmount": 0,
      "requiredUploadWithPrescription": false,
      "products": [
        {
          "transactionType": "PHARMA",
          "ean": "7897337706339",
          "description": "JANUMET 50 mg + 850 mg emb. c/ 56",
          "maximumConsumerPrice": 221.84,
          "priceReceived": 221.84,
          "funcionalPrice": 221.84,
          "salePrice": 221.84,
          "saleAmount": 1,
          "status": {
            "aproved": true,
            "message": ""
          },
          "medicalPrescription": {
            "quantity": 1,
            "date": "2025-05-28T15:22:57.000Z",
            "prescriber": {
              "council": "CRM",
              "stateAbbr": "SP",
              "registerNumber": 999999
            },
            "dailyDose": null,
            "requiredInformDailyDose": true
          }
        }
      ]
    }
  }
}

Pre-autorizando uma venda

mutation preAuthorizeSale {
  # Pré-autorização de venda
  Sales_preAuthorizeSale(
    # Canal PHARMA ou BENEFITS
    channel: PHARMA
    # Origem da chamada
    origin: POINT_OF_SALES
    # Cartão ou CPF
    customerCode: "23225452017"
    # CNPJ da farmácia
    storeCode: "00000000000010"
    # Produtos
    products: [
      {
        ean: "7897337706339"
        unitPrice: 222.99
        # Opcional - PMC do produto, praticado pelo estabelecimento.
        maxConsumerPrice: 316.92
        # Quantidade do produto a ser pré-autorizada
        quantity: 1
        # Receita Médica
        medicalPrescription: {
          date: "2025-05-28"
          quantity: 1
          usage: CONTINUAL # uso contínuo
          # Prescritor (Médico, Dentista)
          prescriber: { council: CRM, registerNumber: 999999, stateAbbr: "SP" }
        }
      }
    ]
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    status
    statusCode
    statusMessage
    # Se exige um token gerado no app de celular
    secondFactorAuthentication
    products {
      ean
      description
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      medicalPrescription {
        date
        quantity
        # quando necessário a declaração de acordo a validação de regra, é importante pedir o retorno para ser especificado no próximo passo que é a confirmação.
        dailyDose
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta

{
    "data": {
        "Sales_preAuthorizeSale": {
            "createdAt": "2025-06-02T16:46:51.000Z",
            "authorizationID": "143790",
            "sequenceID": "143801",
            "totalValue": 221.84,
            "moneyPaidValue": 221.84,
            "cardPaidValue": 0,
            "status": "SUCCESS",
            "statusCode": 0,
            "statusMessage": "Desconto calculado com sucesso!",
            "secondFactorAuthentication": "NONE",
            "products": [
                {
                    "ean": "7897337706339",
                    "description": "JANUMET",
                    "maxConsumerPrice": 316.92,
                    "unitPrice": 221.84,
                    "quantity": 1,
                    "status": "SUCCESS",
                    "statusCode": 0,
                    "statusMessage": "Desconto Por Mes de Tratamento",
                    "medicalPrescription": {
                        "date": "2025-05-28",
                        "quantity": 1,
                        "dailyDose": null,
                        "prescriber": {
                            "council": "CRM",
                            "registerNumber": 999999,
                            "stateAbbr": "SP"
                        }
                    }
                }
            ]
        }
    }
}

Enviando receitas caso campo seja requerido

OBS: Aqui é um pouco mais complicado, mas vamos de passo a passo, essa é uma função multi-part, explicação utilizando POSTMAN

  • Requisição POST
  • Headers - Key - Content-Type - Value - multipart/form-data
  • Body - form-data
  • Key - operations - Text - Value
{
  "query": "mutation upload($file: Prescription_Upload!) {\n  Prescription_uploadPrescription(\n    file: $file\n    uploadInfo: {\n      cardNumber: \"00000000000\"\n      source: POINT_OF_SALES\n      mime: \"image/png\"\n    }\n  ) {\n    id\n    uploadedAt\n    name\n    cardNumber\n    identity\n  }\n}",
  "variables": {
    "file": null
  },
  "operationName": "upload"
}
  • Key - map - Text - Value
{
  "uploaded_file": ["variables.file"]
}
  • Key - uploaded_file - File (selecione o arquivo)

resposta

{
  "data": {
    "Prescription_uploadPrescription": {
      "id": "165651",
      "uploadedAt": "2025-06-03T09:22:28.514Z",
      "name": "65cc502a-be34-4c46-bf31-cc39fa4da2dd",
      "cardNumber": "00000000000",
      "identity": "00000000000"
    }
  }
}

Em Python

import requests
import json

# Caminho do arquivo local
file_path = "C:/caminho/para/new-year-background-736885_1280.jpg"

operations = {
    "query": """
        mutation upload($file: Prescription_Upload!) {
          Prescription_uploadPrescription(
            file: $file
            uploadInfo: {
              cardNumber: "00000000000"
              source: POINT_OF_SALES
              mime: "image/png"
            }
          ) {
            id
            uploadedAt
            name
            cardNumber
            identity
          }
        }
    """,
    "variables": {
        "file": None
    },
    "operationName": "upload"
}

map_part = {
    "uploaded_file": ["variables.file"]
}

with open(file_path, "rb") as f:
    files = {
        "operations": (None, json.dumps(operations), "application/json"),
        "map": (None, json.dumps(map_part), "application/json"),
        "uploaded_file": (file_path.split("/")[-1], f, "image/png")
    }

    response = requests.post("https://sua-api/graphql", files=files)
    print(response.status_code)
    print(response.json())

Observação

  • operations - especificação do Cartão e Origem da requisição
  • map - é fixo "uploaded_file":["variables.file"]
  • uploaded_file - do "tipo file", onde tem como Funcionalidade pegar o arquivo digitalizado e salvo na máquina
  • tamanho máximo do arquivo 2MB.

Associar Prescrição por ID retornado no ADD PRESCRIPTION

Aqui serão usado os dados gerados

  • autorization e sequence vem de pre-autorização
mutation {
  Prescription_bindPrescription(
    prescriptionIDs: [247, 246, 245] # aqui podem ser anexadas mais de uma receita a venda
    transaction: {
      authorization: 53616
      sequence: 53627
      timestamp: "2022-01-14T16:08:09.000Z"
    }
  )
}

resposta

{
  "data": {
    "Prescription_bindPrescription": true
  }
}

Consultando uma transação

Consulta a pré-autorização gerada, Resgata PreAutorizacao para seguir com a finalização

Exemplo de query

query transaction {
  # Consulta os detalhes de uma transação
  Sales_transaction(
    # CNPJ da farmácia
    storeCode: "00000000000010"
    # CPF (Pharma) ou Cartão (Benefits) o envio é recomendado sendo um double check
    customerCode: "00000000000"
    # ID da autorização
    authorizationID: "53466"
    # Data da autorização (se não for de hoje)
    createdAt: "2022-01-14T00:00:00.000Z"
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    status
    statusCode
    statusMessage
    products {
      ean
      description
      #storePrice
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      medicalPrescription {
        date
        quantity
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta

{
  "data": {
    "Sales_transaction": {
      "createdAt": "2022-01-14T15:17:11.567Z",
      "authorizationID": "53594",
      "sequenceID": "53605",
      "totalValue": 0,
      "moneyPaidValue": 0,
      "cardPaidValue": 0,
      "status": "SUCCESS",
      "statusCode": 0,
      "statusMessage": "",
      "products": [
        {
          "ean": "7896015523398",
          "description": "COMBODART",
          "maxConsumerPrice": 130.81,
          "unitPrice": 130.81,
          "quantity": 1,
          "status": "SUCCESS",
          "statusCode": 0,
          "statusMessage": null,
          "medicalPrescription": {
            "date": "2022-01-13",
            "quantity": 1,
            "prescriber": {
              "council": "CRO",
              "registerNumber": 12345,
              "stateAbbr": "SP"
            }
          }
        },
        {
          "ean": "7897337706742",
          "description": "JANUVIA",
          "maxConsumerPrice": 274.62,
          "unitPrice": 0,
          "quantity": 2000,
          "status": "ERROR",
          "statusCode": 72,
          "statusMessage": null,
          "medicalPrescription": {
            "date": "2022-01-14",
            "quantity": 2,
            "prescriber": {
              "council": "CRO",
              "registerNumber": 12345,
              "stateAbbr": "SP"
            }
          }
        }
      ]
    }
  }
}

Confirmando uma autorização

Esse é o último passo para encerrar a venda da PBM, aqui nada podera ser alterado.

mutation confirmPreAuthorizedSale {
  # Confirma pré-autorização e conclui venda
  Sales_confirmPreAuthorizedSale(
    # Cartão ou CPF
    customerCode: "00000000000"
    # Origem da chamada
    origin: PARTNERS_ECOMMERCE
    # CNPJ da farmácia
    storeCode: "00000000000010"
    # Código da pré-autorização
    authorizationID: 57133
    # Data e hora da pré-autorizaçao, retornado no campo createdAt da mutation Sales_preAuthorizeSale
    preAuthorizationDate: "2022-01-14T15:22:57.000Z"
    # Chave Danfe - Opcional
    invoiceCode: "00000000000000000000000000000000000000000000"
    # Protocolo de autenticação da Danfe - Opcional
    invoiceAuthProtocol: "xxxxxxxxxxxxx"
    # Produtos
    products: [
      {
        ean: "7897337706742"
        unitPrice: 45
        # Opcional - PMC do produto, praticado pelo estabelecimento.
        maxConsumerPrice: 45
        quantity: 1
        # Receita Médica
        medicalPrescription: {
          date: "2022-01-14"
          quantity: 1
          usage: CONTINUAL # uso contínuo
          # Prescritor (Médico, Dentista)
          prescriber: { council: CRM, registerNumber: 999999, stateAbbr: "SP" }
        }
      }
      {
        ean: "7896015523398" # COMBODART
        unitPrice: 120
        # Opcional - PMC do produto, praticado pelo estabelecimento.
        maxConsumerPrice: 120
        quantity: 1
        # Receita Médica
        medicalPrescription: {
          date: "2022-01-13"
          quantity: 1
          usage: CONTINUAL # uso contínuo
          # Prescritor (Médico, Dentista)
          prescriber: { council: CRO, registerNumber: 12345, stateAbbr: "SP" }
        }
      }
    ]
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    cardBalance
    status
    statusCode
    statusMessage
    reimbursementValue # Valor do ressarcimento de toda a venda
    receipt
    products {
      ean
      description
      #storePrice
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      reimbursementValue # Valor do ressarcimento por produto
      medicalPrescription {
        date
        quantity
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta sucesso

{
    "data": {
        "Sales_confirmPreAuthorizedSale": {
            "createdAt": "2022-02-07T12:33:11.000Z",
            "authorizationID": "57134",
            "sequenceID": "57145",
            "totalValue": 364.89,
            "moneyPaidValue": 0,
            "cardPaidValue": 364.89,
            "cardBalance": 99634.11,
            "status": "SUCCESS",
            "statusCode": 0,
            "statusMessage": "",
            "reimbursementValue": null,
            "receipt": " Cartao: 60100022100000116@ Plano:Funcional Card@ CNPJ:03322366000175@
            Data: 07/02/2022 Hora: 12:33:11@ Seq: 00057144 Aut: 00057134@ Cod Acesso: 00000010@
            11004 - COMPRA MEDIC.INF. FARMACO@ TOTAL COMPRA:     405.43@ DESCONTO:          40.54           10 %
            @ TOTAL A PAGAR:    364.89@ TOTAL A PAGAR A VISTA:           0.00@ TOTAL A PAGAR NO CARTAO:       364.89
            @@ RECONHECO A DIVIDA E AUTORIZO O @ DESCONTO DO VALOR NA FORMA PREVISTA@@@ -------------------------------- @
            Assinatura@@ RG------------------------------@ O VALOR DE R$ 364.89 SERA PAGO A TESTE @ FUNCIONAL POR FUNCIONAL CARD",
            "products": [
                {
                    "ean": "7897337706742",
                    "description": "JANUVIA   27462",
                    "maxConsumerPrice": 274.62,
                    "unitPrice": 247.16,
                    "quantity": 1,
                    "status": "SUCCESS",
                    "statusCode": 0,
                    "statusMessage": "",
                    "reimbursementValue": null,
                    "medicalPrescription": {
                        "date": "2022-01-14T00:00:00.000Z",
                        "quantity": 1,
                        "prescriber": {
                            "council": "CRM",
                            "registerNumber": 999999,
                            "stateAbbr": "SP"
                        }
                    }
                },
                {
                    "ean": "7896015523398",
                    "description": "COMBODART 13081",
                    "maxConsumerPrice": 130.81,
                    "unitPrice": 117.73,
                    "quantity": 1,
                    "status": "SUCCESS",
                    "statusCode": 0,
                    "statusMessage": "",
                    "reimbursementValue": null,
                    "medicalPrescription": {
                        "date": "2022-01-13T00:00:00.000Z",
                        "quantity": 1,
                        "prescriber": {
                            "council": "CRO",
                            "registerNumber": 12345,
                            "stateAbbr": "SP"
                        }
                    }
                }
            ]
        }
    }
}

exemplo de erro

{
  "data": {
    "Sales_confirmPreAuthorizedSale": {
      "createdAt": "2022-01-14T16:08:09.000Z",
      "authorizationID": "53616",
      "sequenceID": "53627",
      "totalValue": null,
      "moneyPaidValue": null,
      "cardPaidValue": null,
      "cardBalance": 0,
      "status": "ERROR",
      "statusCode": 1,
      "statusMessage": "Pre-Autorizacao nao encontrada!",
      "products": []
    }
  }
}

Teste de Cadastro (HOMOLOGAÇÃO)

  • Verificar Elegibilidade
query Pharma_assessEligibility {
  Pharma_assessEligibility(
    origin: POINT_OF_SALES
    storeCode: "00000000000010"
    productCode: "7897337706339"
    customerCode: "23225452017"
  ) {
    validationResult {
      status
      message
    }
    eligibilityAssessment {
      belongsToIndustryProgram
      programDescription
      programCode
      productDescription
    }
    registrationPolicy {
      allowDependents
      dependentsLimit
      requiresBeneficiaryRegistration
      requiresMedicalPrescriptionRegistration
      requiresAtLeastOneContactMedium
      requiresMedicalPrescriber
      allowedOrigins
    }
    dependents {
      id
      name
      birth
      gender
      holder
    }
  }
}

resposta

{
  "data": {
      "Pharma_assessEligibility": {
          "validationResult": {
              "status": "SUCCESS",
              "message": null
          },
          "eligibilityAssessment": {
              "belongsToIndustryProgram": true,
              "programDescription": "PROGRAMA RECEITA DE VIDA - MSD",
              "programCode": "6",
              "productDescription": "JANUMET"
          },
          "registrationPolicy": {
              "allowDependents": false,
              "dependentsLimit": 0,
              "requiresBeneficiaryRegistration": true,
              "requiresMedicalPrescriptionRegistration": true,
              "requiresAtLeastOneContactMedium": false,
              "requiresMedicalPrescriber": false,
              "allowedOrigins": [
                  "POINT_OF_SALES",
                  "INDUSTRY_PROGRAM_WEBSITE",
                  "CALL_CENTER",
                  "INTERACTIVE_VOICE_RESPONSE",
                  "PURCHASE",
                  "MOBILE_APP",
                  "PARTNERS_ECOMMERCE"
              ]
          },
          "dependents": []
      }
  }
}
  • Cadastrar Beneficiário
mutation Pharma_signUpProgramBeneficiary {
  Pharma_signUpProgramBeneficiary(
    input: {
      origin: POINT_OF_SALES
      storeCode: "00000000000010"
      customerCode: "23225452017"
      productCode: "7897337706339"
      programCode: "6"
      beneficiaryFields: [
        { text: "Nome", value: "João Arlindo Mahoa Benedito" }
        { text: "Nascimento", value: "1984-06-05 12:00:00" }
        { text: "Sexo", value: "M" }
        { text: "Email", value: "jao@gmail.com" }
        { text: "Telefone", value: "41997126445" }
        { text: "TelefoneCelular", value: "41997126445" }
      ]
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "123456" }
        { text: "UF", value: "SP" }
        { text: "CRM", value: "999999" }
      ]
      dependentFields: null
      extraFields: null
      extraFormFields: null
    }
  ) {
    status
    message
    errors {
      message
    }
  }
}

resposta

{
    "data": {
        "Pharma_signUpProgramBeneficiary": {
            "status": "SUCCESS",
            "message": "Beneficiario cadastrado com sucesso",
            "errors": []
        }
    }
}
  • Adicionar Beneficiario ao Produto
mutation {
  Pharma_addProgramBeneficiaryToProduct(
    input: {
      origin: POINT_OF_SALES
      programCode: "6"
      storeCode: "00000000000010"
      customerCode: "23225452017"
      productCode: "7897337706339"
      dependentID: null
      medicalPrescriptionFields: [
        { text: "NumeroRegistroConselho", value: "123456" }
        { text: "UF", value: "SP" }
        { text: "CRM", value: "999999" }
      ]
    }
  ) {
    status
    message
    errors {
      message
    }
  }
}

resposta

{
    "data": {
        "Pharma_addProgramBeneficiaryToProduct": {
            "status": "ERROR",
            "message": null,
            "errors": [
                {
                    "message": "Usuário já cadastrado no produto, consulte novamente"
                }
            ]
        }
    }
}

Teste de Venda

  • Checkando Preço
query {
  Pharma_checkPricesAndRules(
    origin: POINT_OF_SALES
    storeCode: "00000000000010"
    customerCode: "23225452017"
    products: [
      {
        ean: "7897337706339"
        price: 222.99
        saleAmount: 1
        medicalPrescription: {
          quantity: 1
          date: "2025-05-28"
          prescriber: { council: CRM, stateAbbr: "SP", registerNumber: 999999 }
        }
      }
    ]
  ) {
    aproved
    createdAt
    totalValue
    moneyPaidValue
    cardPaidValue
    totalValueMaxConsumerPrice
    totalValueWithPrescription
    totalValueWithoutPrescription
    totalDiscountAmount
    requiredUploadWithPrescription
    products {
      transactionType
      ean
      description
      maximumConsumerPrice
      priceReceived
      funcionalPrice
      salePrice
      saleAmount
      status {
        aproved
        message
      }
      medicalPrescription {
        quantity
        date
        prescriber {
          council
          stateAbbr
          registerNumber
        }
        dailyDose # o parâmetro deve ser declarado na pré-autorização, após validação se retornado true no requiredInformDailyDose
        requiredInformDailyDose # o mesmo valida se é obrigatório o envio do parâmetro "dailyDose"
      }
    }
  }
}

resposta

{
    "data": {
        "Pharma_checkPricesAndRules": {
            "aproved": true,
            "createdAt": "2025-05-28T14:17:15.000Z",
            "totalValue": 221.84,
            "moneyPaidValue": 221.84,
            "cardPaidValue": 0,
            "totalValueMaxConsumerPrice": 316.92,
            "totalValueWithPrescription": 0,
            "totalValueWithoutPrescription": 221.84,
            "totalDiscountAmount": 95.08,
            "requiredUploadWithPrescription": false,
            "products": [
                {
                    "transactionType": "PHARMA",
                    "ean": "7897337706339",
                    "description": "JANUMET 50 mg + 850 mg emb. c/ 56",
                    "maximumConsumerPrice": 316.92,
                    "priceReceived": 222.99,
                    "funcionalPrice": 221.84,
                    "salePrice": 221.84,
                    "saleAmount": 1,
                    "status": {
                        "aproved": true,
                        "message": ""
                    },
                    "medicalPrescription": {
                        "quantity": 1,
                        "date": "2025-05-28T14:17:15.000Z",
                        "prescriber": {
                            "council": "CRM",
                            "stateAbbr": "00",
                            "registerNumber": 0
                        },
                        "dailyDose": null,
                        "requiredInformDailyDose": false
                    }
                }
            ]
        }
    }
}
  • Pre-autorizando Venda
mutation preAuthorizeSale {
  Sales_preAuthorizeSale(
    # Canal PHARMA ou BENEFITS
    channel: PHARMA
    origin: POINT_OF_SALES
    customerCode: "23225452017"
    storeCode: "00000000000010"
    products: [
      {
        ean: "7897337706339"
        unitPrice: 222.99
        maxConsumerPrice: 316.92
        quantity: 1
        medicalPrescription: {
          date: "2025-05-28"
          quantity: 1
          usage: CONTINUAL
          prescriber: { council: CRM, registerNumber: 999999, stateAbbr: "SP" }
        }
      }
    ]
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    status
    statusCode
    statusMessage
    # Se exige um token gerado no app de celular
    secondFactorAuthentication
    products {
      ean
      description
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      medicalPrescription {
        date
        quantity
        # quando necessário a declaração de acordo a validação de regra, é importante pedir o retorno para ser especificado no próximo passo que é a confirmação.
        dailyDose
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta - 200 OK

{
    "data": {
        "Sales_preAuthorizeSale": {
            "createdAt": "2025-06-02T16:43:38.000Z",
            "authorizationID": "143788",
            "sequenceID": "143799",
            "totalValue": 221.84,
            "moneyPaidValue": 221.84,
            "cardPaidValue": 0,
            "status": "SUCCESS",
            "statusCode": 0,
            "statusMessage": "Desconto calculado com sucesso!",
            "secondFactorAuthentication": "NONE",
            "products": [
                {
                    "ean": "7897337706339",
                    "description": "JANUMET",
                    "maxConsumerPrice": 316.92,
                    "unitPrice": 221.84,
                    "quantity": 1,
                    "status": "SUCCESS",
                    "statusCode": 0,
                    "statusMessage": "Desconto Por Mes de Tratamento",
                    "medicalPrescription": {
                        "date": "2025-05-28",
                        "quantity": 1,
                        "dailyDose": null,
                        "prescriber": {
                            "council": "CRM",
                            "registerNumber": 999999,
                            "stateAbbr": "SP"
                        }
                    }
                }
            ]
        }
    }
}
  • Fazendo upload de receita

Requisição POST Headers - Key - Content-Type - Value - multipart/form-data Body - form-data Key - operations - Text - Value

{
  "query": "mutation upload($file: Prescription_Upload!) {\n  Prescription_uploadPrescription(\n    file: $file\n    uploadInfo: {\n      cardNumber: \"00000000000\"\n      source: POINT_OF_SALES\n      mime: \"image/png\"\n    }\n  ) {\n    id\n    uploadedAt\n    name\n    cardNumber\n    identity\n  }\n}",
  "variables": {
    "file": null
  },
  "operationName": "upload"
}
  • Key - map - Text - Value
{
  "uploaded_file": ["variables.file"]
}
  • Key - uploaded_file - File (selecione o arquivo)

resposta

{
  "data": {
    "Prescription_uploadPrescription": {
      "id": "165651",
      "uploadedAt": "2025-06-03T09:22:28.514Z",
      "name": "65cc502a-be34-4c46-bf31-cc39fa4da2dd",
      "cardNumber": "00000000000",
      "identity": "00000000000"
    }
  }
}

Anexando prescrição criada

mutation Prescription_bindPrescription {
  Prescription_bindPrescription(
    prescriptionIDs: 165649
    transaction: {
      authorization: 143815
      sequence: 143826
      timestamp: "2025-06-03T09:22:28.514Z"
    }
  )
}

resposta

{
  "data": {
    "Prescription_bindPrescription": true
  }
}

Consulta de pre-autorização

query transaction {
  Sales_transaction(
    storeCode: "00000000000010"
    customerCode: "23225452017"
    authorizationID: "143815"
    createdAt: "2025-06-03T09:22:28.514Z"
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    status
    statusCode
    statusMessage
    products {
      ean
      description
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      medicalPrescription {
        date
        quantity
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta

{
    "data": {
        "Sales_transaction": {
            "createdAt": "2025-06-03T10:24:06.000Z",
            "authorizationID": "143815",
            "sequenceID": "143826",
            "totalValue": 221.84,
            "moneyPaidValue": 221.84,
            "cardPaidValue": 0,
            "status": "SUCCESS",
            "statusCode": 0,
            "statusMessage": "",
            "products": [
                {
                    "ean": "7897337706339",
                    "description": "JANUMET",
                    "maxConsumerPrice": 316.92,
                    "unitPrice": 221.84,
                    "quantity": 1,
                    "status": "SUCCESS",
                    "statusCode": 0,
                    "statusMessage": null,
                    "medicalPrescription": {
                        "date": "2025-05-28",
                        "quantity": 1,
                        "prescriber": {
                            "council": "CRM",
                            "registerNumber": 999999,
                            "stateAbbr": "SP"
                        }
                    }
                }
            ]
        }
    }
}

Confirmar autorização

mutation confirmPreAuthorizedSale {
  Sales_confirmPreAuthorizedSale(
    customerCode: "23225452017"
    origin: POINT_OF_SALES
    storeCode: "00000000000010"
    authorizationID: 143788
    preAuthorizationDate: "2025-06-03T09:22:28.514Z"
    products: [
      {
        ean: "7897337706339"
        unitPrice: 221.84
        maxConsumerPrice: 316.92
        quantity: 1
        medicalPrescription: {
          date: "2025-05-28"
          quantity: 1
          usage: null
          prescriber: { council: CRM, registerNumber: 999999, stateAbbr: "SP" }
        }
      }
    ]
  ) {
    createdAt
    authorizationID
    sequenceID
    totalValue
    moneyPaidValue
    cardPaidValue
    cardBalance
    status
    statusCode
    statusMessage
    reimbursementValue # Valor do ressarcimento de toda a venda
    receipt
    products {
      ean
      description
      #storePrice
      maxConsumerPrice
      unitPrice
      quantity
      status
      statusCode
      statusMessage
      reimbursementValue # Valor do ressarcimento por produto
      medicalPrescription {
        date
        quantity
        prescriber {
          council
          registerNumber
          stateAbbr
        }
      }
    }
  }
}

resposta

{
  "data": {
    "Sales_confirmPreAuthorizedSale": {
      "createdAt": "2025-06-03T10:39:37.000Z",
      "authorizationID": "143816",
      "sequenceID": "143827",
      "totalValue": 221.84,
      "moneyPaidValue": 221.84,
      "cardPaidValue": 0,
      "cardBalance": 0,
      "status": "SUCCESS",
      "statusCode": 0,
      "statusMessage": "",
      "reimbursementValue": null,
      "receipt": " Cartao:       2322*****17@ Plano:Funcional Card@ CNPJ:03322366000175@ Data: 03/06/2025 Hora: 10:39:43@ Seq: 00143799 Aut: 00143816@ Cod Acesso: 00000010@ 11004 - COMPRA MEDIC.INF. FARMACO@ TOTAL COMPRA:     316.92@ DESCONTO:          95.08           30 %@ TOTAL A PAGAR:    221.84@ TOTAL A PAGAR A VISTA:         221.84@ TOTAL A PAGAR NO CARTAO:         0.00",
      "products": [
        {
          "ean": "7897337706339",
          "description": "JANUMET        ",
          "maxConsumerPrice": 316.92,
          "unitPrice": 221.84,
          "quantity": 1,
          "status": "SUCCESS",
          "statusCode": 0,
          "statusMessage": "",
          "reimbursementValue": null,
          "medicalPrescription": {
            "date": "2025-05-28",
            "quantity": 1,
            "prescriber": {
              "council": "CRM",
              "registerNumber": 999999,
              "stateAbbr": "SP"
            }
          }
        }
      ]
    }
  }
}