Filas de atendimento são utilizadas também como Especialidades médicas. Para facilitar o entendimento, imagine um ambulatório médico. Neste ambulatório podem existir pacientes previamente agendados e pacientes que chegaram para atendimento imediato.
No modo de atendimento imediato os pacientes são enfileirados um atrás do outro e são atendidos de acordo com a ordem de entrada na fila (primeiro a chegar, primeiro a ser atendido).
No modo de atendimento agendado os pacientes são previamente agendados por um médico ou administrador do sistema e podem ou não passar pela triagem.
Todo atendimento pode estar sujeito ao questionário de triagem. A triagem de um atendimento imediato, por exemplo, pode dispensar o paciente que não se encaixe em alguma pré-condição estabelecida para aquela fila. Por exemplo: em uma triagem de pacientes que desejam orientações sobre COVID-19, podemos dispensar aqueles que não apresentam nenhum sintoma da doença.
A listagem poderá ser filtrada por meio de params/query:
Campo/Propriedade | Tipagem | Padrão/Formato | Descrição | Obrigatório |
---|---|---|---|---|
offset | Integer | offset/início de referência para a busca | ❌ | |
limit | Integer | limite de resultados, não é possível ser maior que 100 | ❌ | |
title | String | Nome da fila | ❌ | |
sorting | String | “asc” ou “desc” | Ordenar resultados por crescente ou decrescente, pela propriedade “title” | ❌ |
specialtyId | String | Id da especialidade que pertence à fila | ❌ |
GET /api/queues HTTP/2
Host: telemedicina.example.com
accesskey: sua-chave-de-acesso
A listagem poderá ser feita por meio de um id na params/query:
GET /api/queues/:id HTTP/2
Host: telemedicina.example.com
accesskey: sua-chave-de-acesso ## Criação de fila
Para cadastrar:
POST /api/queues HTTP/2
Host: telemedicina.example.com
Content-Type: application/json
accesskey: sua-chave-de-acesso
Campo/Propriedade | Tipagem | Padrão/Formato | Descrição | Obrigatório |
---|---|---|---|---|
title | String | Título da fila | ✅ | |
isDefault | Boolean | Boolean que indica se a fila é a padrão para aparecer primeiro na tela do paciente | ❌ | |
hiddenForPatient | Boolean | Boolean que indica se a fila aparecerá na tela do paciente | ❌ | |
disableOnDemand | Boolean | Boolean que indica se a fila é utilizada para atendimento sobre demanda(como pronto atendimento) | ❌ | |
specialtyId | String | Id da especialidade a ser atribuída a fila | ❌ | |
questions | Object | Dicionário do questionário da fila, no qual a propriedade indicará o id da pergunta(exemplo: pergunta1) e suas propriedades | ❌ | |
questions.pergunta1 | Object | 🟡 | ||
questions.pergunta1.order | Integer | Número inteiro que indica a ordem/posição da pergunta | 🟡 | |
questions.pergunta1.question | String | Título da pergunta | 🟡 | |
questions.pergunta1.type | String | “radio”, “check” ou “text” | Indica se a pergunta vai ser única resposta(“radio”), múltipla escolha(“check”) ou texto livre(“text”) | 🟡 |
questions.pergunta1.constraints | Object | Requisitos e configurações para responder a pergunta | 🟡 | |
questions.pergunta1.constraints.minOptions | Integer | Funcionalidade somente quando o type é check, indica o mínimo de escolhas necessárias | 🟡 | |
questions.pergunta1.constraints.required | Boolean | Funcionalidade somente quando o type é radio, indica se é obrigatório responder para prosseguir | 🟡 | |
questions.pergunta1.constraints.minLength | Integer | Funcionalidade somente quando o type é text, indica o m´ínimo de caractéres necessários para preencher para prosseguir | 🟡 | |
questions.pergunta1.responses | Array of Objects | Funcionalidade somente quando o type é radio ou check, indica as respostas possíveis da pergunta | 🟡 | |
questions.pergunta1.responses[0].score | Float | Pontuação que será somada com a resposta selecionada, podendo ser negativa ou positiva | 🟡 | |
questions.pergunta1.responses[0].text | String | Opção da pergunta, exemplo “sim” ou “não” | 🟡 | |
responses | Array of Objects | Matriz de objetos que contém as possíveis respostas para o question´ário com base na pontuação total das respostas | 🟡 | |
responses[0].maxScore | Integer | Pontuação máxima para cancelar o questionário e informar o paciente | 🟡 | |
responses[0].minScore | Integer | Pontuação mínima para cancelar o questionário e informar o paciente | 🟡 | |
responses[0].reponse | Object | Objeto que indica a resposta que o paciente irá receber | 🟡 | |
responses[0].reponse.body | String | Texto informativo ao paciente | 🟡 | |
responses[0].reponse.title | String | Título do informativo ao paciente | 🟡 | |
splitRules | Array of Objects | Matriz de objetos que contém a informação necessária para divisão de pagamentos | 🟡 | |
splitRules[0].percent | Float | 55.5 | Valor em decimal da porcentagem a ser repassada | ✅ |
splitRules[0].kind | String | “professional”, “company” ou “attendanceDoctor” | Tipo do recebedor do pagamento | ✅ |
splitRules[0].id | String | Id dentro do nosso sitema de quem vai receber o pagamento, tem que estar adequado com o kind, pois faremos a consulta e o pagamento com base nisso. | ✅ |
Neste exemplo, estamos criando um questionário de teste com apenas uma pergunta: Teve febre, tosse ou dificuldade de respirar nos últimos dias?
. Esta questão é do tipo radio
, ou seja, é uma questão de seleção única. O paciente poderá selecionar entre duas alternativas: Sim
(com pontuação 500) ou Não
(com pontuação 100). Ao final do questionário (neste caso, após responder a única questão), o score das respostas é calculado e confrontado com a chave responses
, que possui os resultados que dispensam atendimento médico.
Na chave responses
, temos a seguinte configuração: O usuário receberá a resposta com título Sem risco
, se apresentar score entre 0 (minScore
) e 499 (maxScore
). Qualquer score diferente disso, o usuário seguirá para a sala de espera de atendimento médico. Estando dentro do grupo Sem risco
, o paciente é dispensado do atendimento e o pedido é encerrado. No caso de dispensa do atendimento, todos os dados do paciente, data, hora, respostas do questionário, score alcançado e orientações recebidas ficam armazenadas em seu prontuário.
{
"title": "Covid-19",
"questions": {
"pergunta1": {
"order": 1,
"question": "Teve febre, tosse ou dificuldade de respirar nos últimos dias?",
"type": "radio",
"constraints": {
"required": true
},
"responses": [
{
"score": 500,
"text": "Sim"
},
{
"score": 100,
"text": "Não"
}
]
},
"pergunta2": {
"order": 2,
"question": "Escolha dois motivos para ter procurado por atendimento",
"type": "check",
"constraints": {
"minOptions": 2
},
"responses": [
{
"score": 0,
"text": "Estou me sentindo mal"
},
{
"score": 0,
"text": "Consulta de check-up"
},
{
"score": 0,
"text": "Indicação de Amigos/Familiares"
},
{
"score": 0,
"text": "Outros"
}
]
},
"pergunta3": {
"order": 3,
"question": "Descreva pelo menos em 50 caracteres o que você está sentindo",
"type": "text",
"constraints": {
"minLength": 50
}
}
},
"responses": [
{
"minScore": 0,
"maxScore": 499,
"response": {
"body": "No momento, você não apresenta risco. Se tiver algum dos sintomas graves, entre em contato novamente.",
"title": "Sem risco"
}
}
]
}
Para atualizar é só seguir as mesmas especificações da criação, porém informando o id
na queryString no método PATCH
.
PATCH /api/queues/:id HTTP/2
Accept: application/json
Host: telemedicina.example.com
Content-Type: application/json
accesskey: sua-chave-de-acesso
Para deletar, basta informar o id
na queryString no método DELETE
:
DELETE /api/queues/:id HTTP/2
Host: telemedicina.example.com
Content-Type: application/json
accesskey: sua-chave-de-acesso