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
1curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Organization \
2 -H "x-api-key: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "resourceType": "Organization",
6 "identifier": [
7 {
8 "system": "https://www.acmesaude.com.br/integracao/unidade/",
9 "value": "UC-01",
10 "use": "usual"
11 }
12 ],
13 "name": "Unidade Centro"
14}'

A resposta é o recurso gravado, sem envelope:

Response
1{
2 "resourceType": "Organization",
3 "identifier": [
4 {
5 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
6 "value": "812",
7 "use": "usual"
8 },
9 {
10 "system": "https://www.acmesaude.com.br/integracao/unidade/",
11 "value": "UC-01",
12 "use": "usual"
13 }
14 ],
15 "name": "Unidade Centro",
16 "id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
17 "meta": {
18 "lastUpdated": "2026-08-24T11:20:41.207000Z",
19 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
20 },
21 "active": true,
22 "alias": [
23 "Unidade Centro"
24 ],
25 "telecom": [
26 {
27 "system": "phone",
28 "value": "+551155556473"
29 }
30 ]
31}

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
1curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Organization \
2 -H "x-api-key: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "resourceType": "Organization",
6 "identifier": [
7 {
8 "system": "https://www.acmesaude.com.br/integracao/unidade/",
9 "value": "UC-01",
10 "use": "usual"
11 }
12 ],
13 "name": "Unidade Centro — Matriz"
14}'

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
1curl -G https://landing-zone-api.nilo.services/fhir/resources/Organization \
2 -H "x-api-key: <apiKey>" \
3 -d _count=50 \
4 -d _lastUpdated=eq2013-01-14 \
5 --data-urlencode _page_token=Cjj3YopYuf%2F%2F%2F%2F%2BABd%2BbgE0m...dSANQAFoLCUSM7w9VYUqaEANglLWUugQ%3D \
6 -d active=true \
7 --data-urlencode identifier=https://www.acmesaude.com.br/integracao/unidade/|UC-01 \
8 -d name=Centro

A resposta é sempre um Bundle do tipo searchset:

Response
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [
5 {
6 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
7 "resource": {
8 "resourceType": "Organization",
9 "identifier": [
10 {
11 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
12 "value": "812",
13 "use": "usual"
14 },
15 {
16 "system": "https://www.acmesaude.com.br/integracao/unidade/",
17 "value": "UC-01",
18 "use": "usual"
19 }
20 ],
21 "name": "Unidade Centro",
22 "id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
23 "active": true,
24 "alias": [
25 "Unidade Centro"
26 ],
27 "telecom": [
28 {
29 "system": "phone",
30 "value": "+551155556473"
31 }
32 ]
33 },
34 "search": {
35 "mode": "match"
36 }
37 },
38 {
39 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/9c4e5b60-1f8a-42d3-b7e1-6d0a2f3c8815",
40 "resource": {
41 "resourceType": "Organization",
42 "identifier": [
43 {
44 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
45 "value": "813",
46 "use": "usual"
47 }
48 ],
49 "name": "Unidade Zona Sul",
50 "id": "9c4e5b60-1f8a-42d3-b7e1-6d0a2f3c8815",
51 "active": true,
52 "alias": [
53 "Unidade Zona Sul"
54 ],
55 "telecom": [
56 {
57 "system": "phone",
58 "value": "+551155556473"
59 }
60 ]
61 },
62 "search": {
63 "mode": "match"
64 }
65 }
66 ],
67 "link": []
68}

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
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [],
5 "link": []
6}

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
1curl https://landing-zone-api.nilo.services/fhir/resources/Organization/id \
2 -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
1{
2 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Organization/3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
3 "resource": {
4 "resourceType": "Organization",
5 "identifier": [
6 {
7 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
8 "value": "812",
9 "use": "usual"
10 },
11 {
12 "system": "https://www.acmesaude.com.br/integracao/unidade/",
13 "value": "UC-01",
14 "use": "usual"
15 }
16 ],
17 "name": "Unidade Centro",
18 "id": "3f2b91d7-64c8-4a15-8e77-51a0b9c3d204",
19 "meta": {
20 "lastUpdated": "2026-08-24T11:20:41.207000Z",
21 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
22 },
23 "active": true,
24 "alias": [
25 "Unidade Centro"
26 ],
27 "telecom": [
28 {
29 "system": "phone",
30 "value": "+551155556473"
31 }
32 ]
33 },
34 "search": {
35 "mode": "match"
36 }
37}

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.identifier, mas nenhum utilizável — falta system ou falta value
structureResource 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
exceptionHTTPBadRequest: …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
1{
2 "issue": [
3 {
4 "code": "required",
5 "details": {
6 "text": "Field is required"
7 },
8 "expression": [
9 "Organization.identifier"
10 ],
11 "severity": "error"
12 }
13 ],
14 "resourceType": "OperationOutcome"
15}

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