Pular para o conteúdo principal

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âmetroTipoObrigatórioDescriçãoValor
programCodeIntSimCódigo do programa PBM126
originCodeIntSimCódigo da origem de cadastro37

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âmetroTipoObrigatórioDescriçãoValor
programCodeIntSimCódigo do programa PBM126
originCodeIntSimCódigo da origem de cadastro37

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.

questionCodeparentQuestionCodetitleDisplayRespostas
99Responsável Cadastro- 960 – Cuidador - 961 – Paciente- 962 – Responsável Legal
10399Os dados são do paciente?- 963 – Sim - 964 – Não
10499Nome- 965 – Nome (valor digitável, até 100 caracteres)
10599Celular- 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

questionCodeparentQuestionCodetitleDisplayRespostas
77Local de retirada- 928 – Farmácia- 929 – Plano de Saúde- 930 – SUS- 931 – Outros

📦 SPIOLTO

questionCodeparentQuestionCodetitleDisplayRespostas
78Local de retirada- 932 – Farmácia- 933 – Plano de Saúde- 934 – SUS- 935 – Outros

📦 GIOTRIF

questionCodeparentQuestionCodetitleDisplayRespostas
129Indicação- 1164 – Câncer de Pulmão

📦 SPEVIGO

questionCodeparentQuestionCodetitleDisplayRespostas
143Indicaçã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âmetroTipoObrigatórioDescriçãoValor
programCodeIntSimCódigo do programa PBM126
originCodeIntSimCódigo da origem de cadastro37
cpfStringSimCPF do paciente (somente números)Informado pelo chatbot
formsformsSimLista de formulários a preencherPaciente, Medicamento (dinâmico)

🧍‍♂️ Formulário: Paciente

ParâmetroTipoObrigatórioDescriçãoValorDinâmico/Estático
NomeStringSimNome completo do pacienteInformado pelo chatbotMap Input
DataNascimentoStringSimData de nascimento (DD/MM/YYYY)Informado pelo chatbotMap Input
SexoSelectOpcionalSexo do pacienteM = Masculino, F = Feminino, N = Não informadoStatic
TelefoneCelularStringSimTelefone celular com DDD. Ex: 43991287000Informado pelo chatbotMap Input
TelefoneStringNão ExibeTelefone residencialInformado pelo chatbotMap Input
TelefoneComercialStringNão ExibeTelefone comercialInformado pelo chatbotMap Input
EmailStringSimE-mail do pacienteInformado pelo chatbotMap Input
CEPStringSimCEP do endereçoInformado pelo chatbotMap Input
UFSelectSimEstado brasileiroRetorno Método WsAcesso_selectByZipCodeWsAcesso_selectByZipCode Field: state
CidadeSelectSimCidade (dependente da UF)Retorno Método WsAcesso_selectByZipCodeWsAcesso_selectByZipCode Field: city
BairroStringSimBairroRetorno Método WsAcesso_selectByZipCodeWsAcesso_selectByZipCode Field: neighborhood
EnderecoStringSimEndereço (sem número)Retorno Método WsAcesso_selectByZipCodeWsAcesso_selectByZipCode Field: publicPlace
NumeroIntegerSimNúmero do endereçoInformado pelo chatbotMap Input
ComplementoStringOpcionalComplementoInformado pelo chatbotMap Input
AutorizaContatoTelefoneCheckBoxSimPermite contato por telefoneS = Sim, N = NãoStatic
AutorizaContatoEmailCheckBoxSimPermite contato por e-mailS = Sim, N = NãoStatic
AutorizaContatoSMSCheckBoxSimPermite contato por SMSS = Sim, N = NãoStatic
AutorizaContatoCorreioCheckBoxSimPermite contato por CorreioS = Sim, N = NãoStatic
AutorizaContatoCheckBoxSimPermite contato telefônico geralS = Sim, N = NãoStatic

💊 Formulário: Medicamento

ParâmetroTipoObrigatórioDescriçãoValorDinâmico/Estático
CRMUFStringSimUF do CRM do prescritorAC, 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, TOEstático
CRMStringSimNúmero do CRM do prescritorInformado pelo chatbotMap Input
TipoConselhoSelectSimTipo do conselho do prescritor1 = CRM (médico)Map Input
EANStringSimNome da linha do medicamentoInformado pelo chatbotMap 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.