Skip to navigation

Unidade de cuidado

Uma unidade de cuidado é como a sua operação se divide dentro do Nilo Care: uma clínica, uma regional, uma frente de atendimento. Pacientes, profissionais e equipes de cuidado são todos alocados a uma unidade, e é ela que delimita quem enxerga quem — um profissional vinculado à Unidade Centro trabalha com os pacientes da Unidade Centro.

Na tela a unidade aparece como o campo Unidade de cuidado: no cadastro do paciente, na ficha dele e no cadastro das equipes de cuidado, sempre como uma escolha em lista.

No FHIR o recurso é o Organization. Esta página é curta de propósito: a unidade tem um único dado gravável, o nome. O valor dela está em ser referenciada — por Paciente, Profissional e Equipe de cuidado —, e é por isso que ela costuma ser a primeira coisa que uma integração cadastra.

Campos

A coluna No Nilo Care traz o rótulo com que o dado aparece para a equipe; são rótulos, não caminhos de navegação.

CampoObrigatórioO que significaNo Nilo Care
resourceTypesimConstante Organization—
identifiersimSuas chaves da unidade. É por elas que a API decide entre criar uma unidade nova e renomear uma existente—
namesimNome da unidade, com no máximo 200 caracteresUnidade de cuidado, o rótulo escolhido nas listas
activenãoSó resposta: constante true—
aliasnãoSó resposta: repete o name—
telecomnãoSó resposta: o telefone da sua operação, não desta unidade—
id · metanãoSó resposta: identificador Nilo FHIR da unidade e metadados da gravação—

A referência declara name como obrigatório porque é o único dado que a plataforma guarda desta unidade. O Organization do FHIR R4, em si, não exige o nome — quem recusa o payload sem nome é a plataforma, e por isso essa recusa tem uma forma diferente das outras: vem como code: exception, sem expression. Veja Erros.

Campos que a Nilo não usa

O Organization canônico traz muito mais do que esta integração lê: type, address, partOf, contact, endpoint, text e contained. Nenhum deles é lido, e por isso nenhum aparece na referência do recurso.

A referência lista só os campos suportados e por isso rejeita os demais no seu validador, mas a API em si não recusa quem os manda. O que acontece com eles é que ficam guardados no recurso e voltam nas leituras seguintes — sem nunca terem significado nada para a plataforma, e sem aparecer em lugar nenhum do Nilo Care. Um address enviado assim parece o endereço da unidade, e não é. Omita-os.

Cadastrar ou atualizar

POST
/fhir/resources/Organization
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Organization \
-H "x-api-key: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "Organization",
"identifier": [
{
"system": "https://www.acmesaude.com.br/integracao/unidade/",
"value": "UC-01",
"use": "usual"
}
],
"name": "Unidade Centro"
}'

A resposta é o recurso gravado, sem envelope:

Response
{
"resourceType": "Organization",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
"value": "812",
"use": "usual"
},
{
"system": "https://www.acmesaude.com.br/integracao/unidade/",
"value": "UC-01",
"use": "usual"
}
],
"name": "Unidade Centro",
"id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
"meta": {
"lastUpdated": "2026-08-24T11:20:41.207000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"alias": [
"Unidade Centro"
],
"telecom": [
{
"system": "phone",
"value": "+551155556473"
}
]
}

Guarde o id: é por ele que se faz a leitura direta. Ao lado do seu identifier, a resposta traz o identificador Nilo da unidade, no system …/NamingSystem/sorting-hat-api--care-unit — é esse valor que aparece nas referências dos outros recursos quando a sua implantação não usa identificadores externos.

O mesmo POST cria e atualiza. Reenviando um identifier que já corresponde a uma unidade, ela é renomeada:

POST
/fhir/resources/Organization
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Organization \
-H "x-api-key: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "Organization",
"identifier": [
{
"system": "https://www.acmesaude.com.br/integracao/unidade/",
"value": "UC-01",
"use": "usual"
}
],
"name": "Unidade Centro — Matriz"
}'

Não há como desativar nem excluir uma unidade por esta API. O active da resposta é sempre true, e enviá-lo como false não muda nada. Encerrar uma unidade é assunto do Suporte.

Renomear é seguro: nenhum vínculo de paciente, profissional ou equipe é afetado. O que muda é o rótulo, em todos os lugares onde a unidade aparece.

Buscar

GET
/fhir/resources/Organization
curl -G https://landing-zone-api.nilo.services/fhir/resources/Organization \
-H "x-api-key: <apiKey>" \
-d _count=50 \
-d _lastUpdated=eq2013-01-14 \
-d active=true \
--data-urlencode identifier=https://www.acmesaude.com.br/integracao/unidade/|UC-01 \
-d name=Centro

A resposta é sempre um Bundle do tipo searchset:

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
"resource": {
"resourceType": "Organization",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
"value": "812",
"use": "usual"
},
{
"system": "https://www.acmesaude.com.br/integracao/unidade/",
"value": "UC-01",
"use": "usual"
}
],
"name": "Unidade Centro",
"id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
"active": true,
"alias": [
"Unidade Centro"
],
"telecom": [
{
"system": "phone",
"value": "+551155556473"
}
]
},
"search": {
"mode": "match"
}
},
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/9c4e5b60-1f8a-42d3-b7e1-6d0a2f3c8815",
"resource": {
"resourceType": "Organization",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
"value": "813",
"use": "usual"
}
],
"name": "Unidade Zona Sul",
"id": "9c4e5b60-1f8a-42d3-b7e1-6d0a2f3c8815",
"active": true,
"alias": [
"Unidade Zona Sul"
],
"telecom": [
{
"system": "phone",
"value": "+551155556473"
}
]
},
"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 unidade, em system|value. Aceita a sua chave ou o identificador NiloOrganization.identifier
namestringParte do nome da unidade. Casa também com o alias, que repete o nomeOrganization.name | Organization.alias
activetokenAceito, e inútil: toda unidade é trueOrganization.active
_lastUpdateddateData da última gravação no store, com os prefixos eq, ge, le—

Os demais parâmetros canônicos do Organization existem e não encontram nada aqui, porque a Nilo não preenche o campo correspondente: address e as suas variações, type, partof e endpoint. A exceção é o campo que você mesmo tenha enviado: ele fica no recurso e passa a ser encontrável — mais um motivo para omitir o que a plataforma não usa.

A busca sem filtro nenhum é a chamada mais útil deste recurso: as unidades de um ambiente são poucas, e listá-las é como se descobre o identificador para referenciar em outros recursos.

curl --request GET \
--url 'https://landing-zone-api.nilo.services/fhir/resources/Organization' \
--header 'x-api-key: SUA_API_KEY'

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

A consulta não devolve só as unidades que você criou: as criadas ou alteradas dentro do Nilo Care também aparecem. Elas trazem apenas o identificador Nilo, no system …/NamingSystem/sorting-hat-api--care-unit; só as que vieram por integração trazem também a sua chave. É por essa diferença que você separa umas das outras.

Uma unidade antiga, que ninguém tenha tocado desde que a sua integração começou, pode não aparecer na lista. Se você espera uma unidade e ela não vem, peça ao Suporte — a busca não é um inventário garantido do ambiente.

Adotar uma unidade que já existe

Para passar a referenciar pela sua chave uma unidade que já estava na plataforma, envie um POST com os dois identificadores: o Nilo, que casa com a unidade existente, e o seu, que fica gravado ao lado. A partir daí as duas chaves encontram a mesma unidade, e você não precisa mais carregar o identificador Nilo.

Mande no name o nome que a unidade já tem — lembre que o name é sempre gravado, e um nome diferente renomeia a unidade.

Ler por ID

GET
/fhir/resources/Organization/:id
curl https://landing-zone-api.nilo.services/fhir/resources/Organization/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 unidade está em resource. Ler name na raiz da resposta não encontra nada.

Response
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
"resource": {
"resourceType": "Organization",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
"value": "812",
"use": "usual"
},
{
"system": "https://www.acmesaude.com.br/integracao/unidade/",
"value": "UC-01",
"use": "usual"
}
],
"name": "Unidade Centro",
"id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
"meta": {
"lastUpdated": "2026-08-24T11:20:41.207000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"alias": [
"Unidade Centro"
],
"telecom": [
{
"system": "phone",
"value": "+551155556473"
}
]
},
"search": {
"mode": "match"
}
}

Valores devolvidos que não são da unidade

Dois campos da resposta enganam, e vale saber antes de construir tela em cima deles:

telecom é o telefone da sua operação, não o desta unidade. Todas as unidades do ambiente devolvem o mesmo número — o cadastrado para o seu ambiente. Ele é omitido quando não há telefone cadastrado. Não trate esse valor como contato da unidade.

E ao contrário dos campos não suportados, um telecom que você envie não sobrevive: ele é substituído pelo telefone do ambiente na gravação. Não há como registrar um telefone próprio da unidade por esta API.

alias repete o name. É sempre uma lista de um item, com o mesmo texto do nome, e nunca traz um nome alternativo de verdade. Existe para quem lê o alias do Organization canônico e não encontraria nada.

Onde a unidade é referenciada

RecursoCampoO que a unidade faz ali
PacientemanagingOrganizationA unidade responsável pelo paciente. Omitido, um paciente já cadastrado mantém a unidade que tem; um paciente novo vai para a unidade padrão da implantação
Profissionalextensão practitioner-organizationVincula o profissional à unidade, e com ela ao acesso aos pacientes dela. Repetível, e só adiciona
Equipe de cuidadomanagingOrganizationA unidade da equipe. Havendo mais de um item, vale o último reconhecido

Nos três casos a unidade precisa já existir, e é referenciada por identificador. Cadastre as unidades antes de cadastrar paciente, profissional ou equipe.

Qual identificador vale muda conforme o recurso. Paciente e Profissional aceitam qualquer identificador da unidade, inclusive a sua chave — no Paciente, a referência precisa vir com "type": "Organization" para a chave própria ser resolvida. A Equipe de cuidado é a exceção: ela lê só o identificador Nilo da unidade, e um identificador do seu sistema é ignorado em silêncio, caindo na unidade padrão.

Alguns desses campos caem numa unidade padrão da implantação quando você os omite. Isso é configuração do seu ambiente, não do recurso: se não houver unidade padrão configurada, a escrita do outro recurso é recusada. Veja a página de cada um.

Efeitos colaterais

Criar uma unidade não move ninguém para ela. A unidade nasce vazia; pacientes, profissionais e equipes só passam a pertencer a ela quando os recursos deles a referenciam.

Este endpoint nunca responde 204: não há remoção de unidade por integração.

Erros

Recusa é 400, e o corpo é um OperationOutcome: issue[].details.text explica o motivo e, quando a recusa é de um campo conferido por esta API, issue[].expression aponta qual.

codeexpressionMensagemQuando
requiredOrganization.identifierField is requiredO payload não tem identifier
business-ruleOrganization.identifierUnable to use any of the provided identifiers to match an existing resource, which can lead to duplicates.Há identifier, mas nenhum utilizável — falta system ou falta value
structure—Resource has identifier from a Nilo environment that is not the current environment.O payload traz um identificador Nilo gerado em outro ambiente
structureo campo recusadomensagem da validação FHIRO payload não é um Organization válido — tipo errado num campo, valor fora do formato
exception—HTTPBadRequest: …O name está ausente, ou passa de 200 caracteres

A última linha não é uma validação desta API — é a recusa da própria plataforma, repassada como está. Ela sai com code: exception, sem expression, e com uma mensagem de erro de linguagem em vez de uma explicação do campo. Não tente interpretar o texto: trate code: exception como “payload recusado, motivo não classificado” e confira o name.

Response
{
"issue": [
{
"code": "required",
"details": {
"text": "Field is required"
},
"expression": [
"Organization.identifier"
],
"severity": "error"
}
],
"resourceType": "OperationOutcome"
}

Os payloads completos estão na aba Referência, em POST /fhir/resources/Organization.