Skip to navigation

Consulta prevista

Uma consulta prevista é o que a diretriz mandou acontecer: quando a diretriz aplicada a um paciente é criada, ela gera uma consulta prevista para cada consulta que a diretriz determina — retorno com o endocrinologista em 90 dias, por exemplo.

Ela ainda não é um agendamento: é a intenção de um. Enquanto o paciente não marca, ela fica esperando; quando marca, um agendamento é criado e a plataforma liga os dois — mas esse elo é interno e não aparece neste recurso. No Nilo Care a consulta prevista fica no bloco de agendamentos da diretriz aplicada ao paciente.

No FHIR o recurso é o Schedule.

Este recurso é somente leitura. Não existe POST /fhir/resources/Schedule — as consultas previstas são geradas pela plataforma a partir da diretriz, e não há como criá-las, alterá-las ou cancelá-las por esta API.

As mesmas consultas previstas também aparecem em activity[] da diretriz aplicada do paciente, junto com as tarefas e os questionários que a diretriz gerou. A vantagem desta página é poder buscá-las diretamente, sem passar pela diretriz aplicada.

Campos

Todos os campos são de resposta — nenhum deles é enviado por você.

CampoSempre presenteO que significaNo Nilo Care
resourceTypesimConstante Schedule—
identifiersimIdentificador Nilo da consulta prevista, no system …/NamingSystem/hippocrates-api--guideline-patient-scheduling—
activesimSe a situação da consulta prevista ainda está em aberto — veja o avisoo selo de situação
actor[]quase sempreO paciente e, quando houver, o profissional—
planningHorizon.startsimA data prevista para a consultaa data do agendamento previsto
planningHorizon.endnãoO instante em que a consulta prevista foi encerrada—
specialty[0].textsimA especialidade da consultaa especialidade do agendamento previsto
serviceType[0].textnãoO tipo de atendimento previsto, como está cadastrado na plataforma—
commentnãoTexto de diagnóstico em formato interno — veja o aviso—
id · metasimIdentificador Nilo FHIR do recurso e metadados da gravação—

specialty vem sempre — a especialidade é obrigatória do lado da plataforma. serviceType, não: só aparece quando o tipo de atendimento está definido, e o vocabulário dele é o da plataforma, não uma lista fixa deste contrato.

active esconde oito situações em duas

A plataforma distingue oito situações para uma consulta prevista. Este recurso reduz todas a um booleano:

Situação na plataformaactive
Disponível para o paciente marcartrue
Aguardando o paciente marcartrue
Falha no envio do link de agendamentotrue
Já agendadatrue
Canceladafalse
Finalizadafalse
Não realizadafalse
Desatualizadafalse

active: true não quer dizer que a consulta foi marcada. Uma consulta prevista que o paciente ainda não agendou e uma que ele já agendou saem exatamente iguais aqui. E active: false junta o cancelamento, a conclusão e a desatualização num valor só.

Se a sua integração precisa saber se a consulta aconteceu, este recurso não responde. O agendamento de verdade é outro recurso, e a consulta prevista não traz referência para ele — mas o activity[] da diretriz aplicada traz.

E há uma segunda situação, que não é a mesma coisa. Além da situação acima, a equipe pode marcar uma consulta prevista à mão como feita ou não feita. Esse segundo eixo não mexe no active: uma consulta marcada à mão como feita continua active: true — e, apesar disso, ganha um planningHorizon.end.

O único lugar onde essa marcação aparece é o comment, como manual-status:done ou manual-status:not_done. Não conte com active para saber se a consulta foi resolvida.

O selo Atrasada, que a equipe vê quando o prazo de agendar passou, também não tem campo aqui: uma consulta prevista atrasada continua active: true.

Os selos que a equipe vê não são um por situação: a tela combina a situação, o atraso e a marcação manual antes de escolher o selo, e mais de uma situação desta tabela pode aparecer sem selo nenhum. Não tente casar active com o que está na tela.

planningHorizon não é um prazo

planningHorizon.start é a data prevista para a consulta, e planningHorizon.end é o instante em que a consulta prevista foi encerrada — não a data limite para marcá-la.

Três consequências:

  • numa consulta prevista em aberto, planningHorizon vem só com start. Um cliente que espere sempre os dois extremos quebra;
  • end aparece também quando a equipe marca a consulta à mão como feita — e nesse caso active continua true. Ver end preenchido não significa active: false;
  • end é um instante com hora, enquanto start é uma data pura. Eles não descrevem a mesma coisa e não formam um intervalo de agenda.

O prazo para o paciente marcar não tem campo neste recurso. Ele aparece na diretriz aplicada, em activity[].detail.scheduledPeriod, como uma janela fixa de sete dias a partir da data prevista.

comment vaza formato interno

Quando há motivo de cancelamento ou situação marcada à mão, comment traz os dois num texto montado internamente:

cancelled-reason:Paciente remarcou | manual-status:not_done

Não é contrato. O formato pode mudar sem aviso, os valores não são traduzidos e não há garantia de que os dois pedaços apareçam. Use comment só para exibição a um humano, e nunca faça parsing dele.

Quando não há nem motivo de cancelamento nem situação manual, o campo não vem.

Um cancelled-reason não implica consulta cancelada. Cancelar o agendamento sem remover a consulta prevista devolve ela para disponível — e o motivo do cancelamento fica gravado. Você verá active: true com um cancelled-reason no comment.

Leia actor pelo tipo, não pela posição

Na prática o paciente vem primeiro e o profissional depois, mas isso não é garantido: se o paciente não puder ser resolvido, o profissional ocupa a primeira posição e o array vem com um item só.

Case pelo actor[].type — Patient ou Practitioner —, nunca por índice.

Qual identificador a referência de actor carrega depende da sua implantação. Na configuração que usa identificadores externos, cada referência sai com o identificador do seu sistema se o recurso apontado tiver um; se não tiver, cai silenciosamente no identificador Nilo. Confira o que veio na resposta antes de montar a busca em volume.

Campos que a Nilo não usa

O Schedule canônico tem campos que esta integração não produz: serviceCategory, specialty como código (aqui só há text) e actor com papéis distinguíveis. Como esta referência descreve só o que é suportado, eles não aparecem no schema — e, como não há escrita, também não há como preenchê-los.

specialty e serviceType são CodeableConcept, mas vêm só com text, nunca com coding. Não há código para casar com um catálogo: o que você recebe é o nome, como ele está cadastrado — e, por isso, não há como buscar por eles (veja Parâmetros de busca).

specialty ainda tem uma degradação silenciosa: quando a especialidade não tem nome cadastrado, o text traz o identificador numérico dela — um valor como "418", que parece um nome e não é. Se o texto for só dígitos, trate como desconhecido.

Cadastrar ou atualizar

Não existe. Este recurso não tem caminho de escrita nesta API — nem para criar, nem para atualizar, nem para cancelar uma consulta prevista.

Um POST /fhir/resources/Schedule não é uma operação suportada e não devolve um erro de validação tratável: a chamada falha com erro inesperado do servidor (500). Não escreva tratamento em cima desse comportamento — ele não é contrato, e nada é gravado de qualquer forma.

Dentro de uma carga em lote o erro é limpo, e igualmente definitivo: a entrada é recusada com Resource Schedule not supported.

O que existe de escrita nesta área é a aplicação da diretriz — veja Diretriz aplicada. As consultas previstas nascem dela.

Buscar

GET
/fhir/resources/Schedule
curl -G https://landing-zone-api.nilo.services/fhir/resources/Schedule \
-H "x-api-key: <apiKey>" \
-d _count=50 \
-d _lastUpdated=eq2013-01-14 \
-d active=true \
--data-urlencode actor=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
--data-urlencode actor:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
-d date=ge2026-06-01 \
--data-urlencode identifier=https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--guideline-patient-scheduling|90412 \
--data-urlencode "service-type=Consulta de retorno" \
-d specialty=Endocrinologia

A resposta é sempre um Bundle do tipo searchset:

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Schedule/6a2f70b4-cd39-4185-92e7-8b04f1c6ae53",
"resource": {
"resourceType": "Schedule",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--guideline-patient-scheduling",
"value": "90412",
"use": "usual"
}
],
"id": "6a2f70b4-cd39-4185-92e7-8b04f1c6ae53",
"meta": {
"lastUpdated": "2026-05-20T08:12:03.552000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"actor": [
{
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient",
"reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
},
{
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/profissional/",
"value": "5032932",
"use": "usual"
},
"type": "Practitioner",
"reference": "Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19"
}
],
"planningHorizon": {
"start": "2026-06-15"
},
"specialty": [
{
"text": "Endocrinologia"
}
],
"serviceType": [
{
"text": "Consulta de retorno"
}
]
},
"search": {
"mode": "match"
}
},
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Schedule/c93a1e07-45b8-4d26-b7f1-08e5c2947da6",
"resource": {
"resourceType": "Schedule",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--guideline-patient-scheduling",
"value": "90413",
"use": "usual"
}
],
"id": "c93a1e07-45b8-4d26-b7f1-08e5c2947da6",
"meta": {
"lastUpdated": "2026-05-22T17:45:11.908000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM4NQ"
},
"active": false,
"actor": [
{
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient",
"reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
}
],
"planningHorizon": {
"end": "2026-05-22T17:45:10+00:00",
"start": "2026-05-18"
},
"specialty": [
{
"text": "Nutrição"
}
],
"comment": "cancelled-reason:Paciente remarcou | manual-status:not_done"
},
"search": {
"mode": "match"
}
}
],
"link": []
}

Busca sem resultados não é erro: volta 200 com um Bundle cujo entry é uma lista vazia. Trate a ausência de resultados pela lista vazia, não esperando um 404.

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [],
"link": []
}

Parâmetros de busca suportados

NomeTipoDescriçãoExpressão
identifiertokenIdentificador da consulta prevista, em system|valueSchedule.identifier
actorreferencePaciente ou profissional, pelo id Nilo FHIR deleSchedule.actor
actor:identifierreferenceO mesmo, pelo identificador embutido na referênciaSchedule.actor.identifier
activetokentrue ou falseSchedule.active
datedateData prevista, com os prefixos eq, ge, leSchedule.planningHorizon
_lastUpdateddateData da última gravação no store, com os prefixos eq, ge, le—

Em date, prefira o prefixo ge. Como a consulta prevista em aberto não tem planningHorizon.end, o período é semanticamente aberto, e eq e le sobre um período aberto se comportam de forma pouco intuitiva.

actor não distingue paciente de profissional. É um só parâmetro para os dois papéis: buscar por um profissional devolve as consultas previstas em que ele é o profissional, e buscar por um paciente devolve as dele — mas não há como pedir “as consultas em que este paciente é o paciente” de forma explícita. Na prática isso não gera confusão, porque um identificador de paciente não casa com um profissional.

Os demais parâmetros canônicos do Schedule existem e não encontram nada aqui: service-category, porque a plataforma não preenche o campo; e specialty e service-type, porque os dois são parâmetros de token, que procuram dentro de coding — e a Nilo preenche só o text. Buscar pelo nome da especialidade ou do tipo de atendimento não devolve nada.

Não há parâmetro que ligue a consulta prevista à diretriz aplicada que a gerou. Para listar as consultas previstas de uma diretriz aplicada, leia o activity[] da diretriz aplicada.

A paginação é por _count e _page_token; havendo página seguinte, o Bundle traz a URL pronta em link.

Ler por ID

GET
/fhir/resources/Schedule/:id
curl https://landing-zone-api.nilo.services/fhir/resources/Schedule/id \
-H "x-api-key: <apiKey>"

Diferente da busca, esta leitura não devolve um Bundle — mas também não devolve o recurso nu. A resposta é um envelope com fullUrl, search e resource, e a consulta prevista está em resource. Ler active ou planningHorizon na raiz da resposta não encontra nada.

Response
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Schedule/6a2f70b4-cd39-4185-92e7-8b04f1c6ae53",
"resource": {
"resourceType": "Schedule",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--guideline-patient-scheduling",
"value": "90412",
"use": "usual"
}
],
"id": "6a2f70b4-cd39-4185-92e7-8b04f1c6ae53",
"meta": {
"lastUpdated": "2026-05-20T08:12:03.552000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"actor": [
{
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient",
"reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
}
],
"planningHorizon": {
"start": "2026-06-15"
},
"specialty": [
{
"text": "Endocrinologia"
}
],
"serviceType": [
{
"text": "Consulta de retorno"
}
]
},
"search": {
"mode": "match"
}
}

A leitura por ID responde 404 quando o id não existe — inclusive quando a consulta prevista foi removida junto com a diretriz aplicada que a gerou.

O que a integração não cobre

Não há escrita, e vários dados que a plataforma guarda não têm campo aqui:

  • o agendamento que a consulta prevista virou — não há referência para ele;
  • a diretriz aplicada que a gerou, e a diretriz por trás dela;
  • o prazo para o paciente marcar — ele está no activity[].detail.scheduledPeriod da diretriz aplicada, não aqui;
  • quem cancelou a consulta prevista;
  • a distinção entre as oito situações da plataforma, reduzida ao booleano active.

Para a diretriz aplicada e o que ela gerou, veja Diretriz aplicada; para a diretriz, Diretriz.