Cadastrar Paciente
O cadastro de pacientes é realizado através do método WsAcesso_registerPatient.
Esse método recebe dados dinâmicos que variam conforme o programa e a origem do cadastro.
Por esse motivo, o fluxo completo envolve validações prévias antes da efetiva criação do paciente no PBM.
🔐 Passo 1: Obtenção do Token de Autenticação e Headers
Antes de realizar qualquer consulta, é obrigatório autenticar-se e obter um token JWT válido.
Todos os endpoints deste fluxo utilizam os mesmos headers de autenticação.
👉 Para mais detalhes, consulte: Autenticação e Headers
📋 Passo 2: Consultar Campos do Formulário
Use o método WsAcesso_consultProgramForm para obter os campos obrigatórios e opcionais do formulário conforme os parâmetros abaixo:
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição | Valor |
|---|---|---|---|---|
| programCode | Int | Sim | Código do programa PBM | 126 |
| originCode | Int | Sim | Código da origem de cadastro | 37 |
Exemplo de requisição
query {
WsAcesso_consultProgramForm(
args: {
programCode: 126
originCode: 37
}
){
code
message
status
forms {
formType
fields{
optionFields {
fieldCode
value
text
inclusionDate
}
fieldName
valueField
displayName
description
type
format
displayConfiguration
regex
mask
pixelFieldSize
sequence
intialValue
}
dynamicFields {
responseCode
enteredValue
codeQuestion
userProgramCode
questionTypeFlag
codeProductRule
}
}
}
}
Exemplo Retorno Completo
👉 Saiba mais sobre o Exemplo Retorno Consulta Formulário
❓ Passo 3: Consultar Perguntas e Respostas Dinâmicas (opcional)
Caso o programa utilize perguntas e respostas dinâmicas, utilize o método WsAcesso_listDynamicsFieldsOrigin.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição | Valor |
|---|---|---|---|---|
| programCode | Int | Sim | Código do programa PBM | 126 |
| originCode | Int | Sim | Código da origem de cadastro | 37 |
Exemplo de requisição
query {
WsAcesso_listDynamicsFieldsOrigin(
args: {
programCode: 126
originCode: 37
}
){
code
message
status
questionnaire {
code
message
status
questionCode
parentQuestionCode
programCode
titleDisplay
multipleChoice
required
displayOrder
tipQuestion
answers {
responseCode
titleDisplay
allowTypedValue
maximumSizeTypedValue
EnteredValue
displayOrder
effectiveDateStart
effectiveDateEnd
}
lineCode
effectiveDateStart
effectiveDateEnd
typeControl
flagQuestionType
nestedQuestion {
parentQuestionCode
parentResponseCode
codeNestedQuestion
}
productName
EAN
}
}
}
Exemplo de retorno
👉 Saiba mais sobre o Exemplo Retorno Perguntas Dinâmicas
Exemplo de utilização das Perguntas Dinâmicas
Lembrando que os códigos de Questão e Respostas, podem ser modificadas por se tratarem de campos dinâmicos, então é necessário consultar o método WsAcesso_listDynamicsFieldsOrigin para ter os valores atualizados.
| questionCode | parentQuestionCode | titleDisplay | Respostas |
|---|---|---|---|
| 99 | — | Responsável Cadastro | - 960 – Cuidador - 961 – Paciente- 962 – Responsável Legal |
| 103 | 99 | Os dados são do paciente? | - 963 – Sim - 964 – Não |
| 104 | 99 | Nome | - 965 – Nome (valor digitável, até 100 caracteres) |
| 105 | 99 | Celular | - 966 – Celular (valor digitável, até 100 caracteres) |
Preenchimento de respostas dinâmicas dentro do Formulário Paciente
dynamicFields: [
{ codeQuestion: 99, responseCode: 960, questionTypeFlag: 1, enteredValue: "" }
{ codeQuestion: 103, responseCode: 963, questionTypeFlag: 1, enteredValue: "" }
{ codeQuestion: 103, responseCode: 965, questionTypeFlag: 1, enteredValue: "NOME TESTE" }
{ codeQuestion: 103, responseCode: 966, questionTypeFlag: 1, enteredValue: "43991287000" }
]
📦 SPIRIVA
| questionCode | parentQuestionCode | titleDisplay | Respostas |
|---|---|---|---|
| 77 | — | Local de retirada | - 928 – Farmácia- 929 – Plano de Saúde- 930 – SUS- 931 – Outros |
📦 SPIOLTO
| questionCode | parentQuestionCode | titleDisplay | Respostas |
|---|---|---|---|
| 78 | — | Local de retirada | - 932 – Farmácia- 933 – Plano de Saúde- 934 – SUS- 935 – Outros |
📦 GIOTRIF
| questionCode | parentQuestionCode | titleDisplay | Respostas |
|---|---|---|---|
| 129 | — | Indicação | - 1164 – Câncer de Pulmão |
📦 SPEVIGO
| questionCode | parentQuestionCode | titleDisplay | Respostas |
|---|---|---|---|
| 143 | — | Indicação | - 1244 – Psoríase Postulosa Generalizada |
Preenchimento de respostas dinâmicas dentro do Formulário Medicamento
dynamicFields: [
{ codeQuestion: 77, responseCode: 929, questionTypeFlag: 2, enteredValue: "" }
]
Dentro do WsAcesso_registerPatient, teremos a requisição completa com, "Cabeçalho, Formulário Paciente, Formulário Produto e Questões Dinâmicas".
📝 Passo 4: Enviar Dados para Cadastro
Com todos os dados coletados, envie a mutation WsAcesso_registerPatient.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição | Valor |
|---|---|---|---|---|
| programCode | Int | Sim | Código do programa PBM | 126 |
| originCode | Int | Sim | Código da origem de cadastro | 37 |
| cpf | String | Sim | CPF do paciente (somente números) | Informado pelo chatbot |
| forms | forms | Sim | Lista de formulários a preencher | Paciente, Medicamento (dinâmico) |
🧍♂️ Formulário: Paciente
| Parâmetro | Tipo | Obrigatório | Descrição | Valor | Dinâmico/Estático |
|---|---|---|---|---|---|
| Nome | String | Sim | Nome completo do paciente | Informado pelo chatbot | Map Input |
| DataNascimento | String | Sim | Data de nascimento (DD/MM/YYYY) | Informado pelo chatbot | Map Input |
| Sexo | Select | Opcional | Sexo do paciente | M = Masculino, F = Feminino, N = Não informado | Static |
| TelefoneCelular | String | Sim | Telefone celular com DDD. Ex: 43991287000 | Informado pelo chatbot | Map Input |
| Telefone | String | Não Exibe | Telefone residencial | Informado pelo chatbot | Map Input |
| TelefoneComercial | String | Não Exibe | Telefone comercial | Informado pelo chatbot | Map Input |
| String | Sim | E-mail do paciente | Informado pelo chatbot | Map Input | |
| CEP | String | Sim | CEP do endereço | Informado pelo chatbot | Map Input |
| UF | Select | Sim | Estado brasileiro | Retorno Método WsAcesso_selectByZipCode | WsAcesso_selectByZipCode Field: state |
| Cidade | Select | Sim | Cidade (dependente da UF) | Retorno Método WsAcesso_selectByZipCode | WsAcesso_selectByZipCode Field: city |
| Bairro | String | Sim | Bairro | Retorno Método WsAcesso_selectByZipCode | WsAcesso_selectByZipCode Field: neighborhood |
| Endereco | String | Sim | Endereço (sem número) | Retorno Método WsAcesso_selectByZipCode | WsAcesso_selectByZipCode Field: publicPlace |
| Numero | Integer | Sim | Número do endereço | Informado pelo chatbot | Map Input |
| Complemento | String | Opcional | Complemento | Informado pelo chatbot | Map Input |
| AutorizaContatoTelefone | CheckBox | Sim | Permite contato por telefone | S = Sim, N = Não | Static |
| AutorizaContatoEmail | CheckBox | Sim | Permite contato por e-mail | S = Sim, N = Não | Static |
| AutorizaContatoSMS | CheckBox | Sim | Permite contato por SMS | S = Sim, N = Não | Static |
| AutorizaContatoCorreio | CheckBox | Sim | Permite contato por Correio | S = Sim, N = Não | Static |
| AutorizaContato | CheckBox | Sim | Permite contato telefônico geral | S = Sim, N = Não | Static |
💊 Formulário: Medicamento
| Parâmetro | Tipo | Obrigatório | Descrição | Valor | Dinâmico/Estático |
|---|---|---|---|---|---|
| CRMUF | String | Sim | UF do CRM do prescritor | AC, AL, AM, AP, BA, CE, DF, ES, GO, MA, MG, MS, MT, PA, PB, PE, PI, PR, RJ, RN, RO, RR, RS, SC, SE, SP, TO | Estático |
| CRM | String | Sim | Número do CRM do prescritor | Informado pelo chatbot | Map Input |
| TipoConselho | Select | Sim | Tipo do conselho do prescritor | 1 = CRM (médico) | Map Input |
| EAN | String | Sim | Nome da linha do medicamento | Informado pelo chatbot | Map Input |
Lista dos possíveis Eans (Será utilizado apenas um no cadastro do Paciente)
{
"eans": [
"7896026306096","7896026306720","7896026306751","7896026306416","7896026306188","7896026307741",
"7896026304016","7896026304337","7896026305600","7896026307031","7896026305558","7896026307024"
"7896026304245","7896026304276","7896026305327","7896026305280","7896026305310","7896026304306",
"7896026306683","7896026306676","7896026303057","7896026302890","7896026303064","7896026304702",
"7896026304719","7896026303088","7896026302852","7896026306799","7896026302999","7896026305259"
]
}
Exemplo de requisição
mutation {
WsAcesso_registerPatient(
input: {
programCode: 126
registerPatient: {
cpf: "12345678900"
originCode: "37"
forms: [
{
formType: "Paciente"
fields: [
{ name: "Nome", value: "PACIENTE TESTE" }
{ name: "DataNascimento", value: "06/10/1992" }
{ name: "Sexo", value: "M" }
{ name: "TelefoneCelular", value: "43991287000" }
{ name: "Telefone", value: "" }
{ name: "TelefoneComercial", value: "" }
{ name: "Email", value: "emailteste@teste.com" }
{ name: "CEP", value: "86000000" }
{ name: "UF", value: "PR" }
{ name: "Cidade", value: "Londrina" }
{ name: "Bairro", value: "Centro" }
{ name: "Endereco", value: "Rua Exemplo" }
{ name: "Numero", value: "100" }
{ name: "Complemento", value: "" }
{ name: "AutorizaContatoTelefone", value: "S" }
{ name: "AutorizaContatoEmail", value: "S" }
{ name: "AutorizaContatoSMS", value: "S" }
{ name: "AutorizaContatoCorreio", value: "S" }
{ name: "AutorizaContato", value: "S" }
],
dynamicFields: [
{ codeQuestion: 99, responseCode: 960, questionTypeFlag: 1, enteredValue: "" }
{ codeQuestion: 103, responseCode: 963, questionTypeFlag: 1, enteredValue: "" }
{ codeQuestion: 103, responseCode: 965, questionTypeFlag: 1, enteredValue: "NOME TESTE" }
{ codeQuestion: 103, responseCode: 966, questionTypeFlag: 1, enteredValue: "43991287000" }
]
},
{
formType: "Medicamento"
fields: [
{ name: "CRMUF", value: "SP" }
{ name: "CRM", value: "222222" }
{ name: "EAN", value: "7896026302999" }
{ name: "TipoConselho", value: "0" }
],
dynamicFields: [
{ codeQuestion: 77, responseCode: 929, questionTypeFlag: 2, enteredValue: "" }
]
}
]
}
}
) {
code
message
status
}
}
Exemplo de retorno
{
"data": {
"registerPatient": {
"code": 0,
"message": "Cadastro realizado com sucesso",
"status": "00"
}
}
}
Exemplo de retorno com erro
Quando ocorre um erro no processamento, o serviço retorna status = "01".
Os campos code e message podem variar conforme a regra interna da API.
{
"data": {
"registerPatient": {
"code": 0,
"message": "",
"status": "01"
}
}
}
---
## ✅ Observações Finais
- Os campos variam conforme o programa e devem ser validados dinamicamente.
- Utilize exatamente os nomes de campo (`fieldName`) retornados nas consultas.
- Os campos dinâmicos podem incluir respostas obrigatórias ou múltiplas, dependendo do programa.