Skip to navigation

Grupo de pacientes

Um grupo de pacientes é uma etiqueta de organização da carteira: Gestantes de alto risco, Pós-operatório, Piloto de telemedicina. Todo paciente pertence a pelo menos um.

No FHIR o recurso é o Group, e ele é mínimo: guarda só o nome.

A participação dos pacientes não está aqui. O Group do FHIR tem um campo member[], e esta integração não o usa — nem na leitura, nem na escrita. Quem diz a que grupos um paciente pertence é o recurso do paciente.

Para colocar ou tirar um paciente de um grupo, veja Paciente. Para listar os pacientes de um grupo, você precisa percorrer os pacientes: não há busca que faça o caminho inverso.

Campos

CampoObrigatórioO que significaNo Nilo Care
resourceTypesimConstante Group—
identifiersimSuas chaves do grupo. É por elas que a API decide entre criar e atualizar—
namesimNome do grupo. É único por prestador, comparado sem caixa e sem acentoGrupos de pacientes
activenãoNa escrita, false apaga o grupo. Na leitura, constante true—
actualnãoSó resposta: constante true—
typenãoSó resposta: constante person—
id · metanãoSó resposta: identificador Nilo FHIR e metadados da gravação—

A leitura devolve dois identificadores Nilo para o mesmo grupo, nos system …/NamingSystem/sorting-hat-api--cohort e …/NamingSystem/care-api--cohort, com o mesmo value. O segundo é preservado por compatibilidade; os dois funcionam na busca e nas referências.

Campos que a Nilo não usa

O Group canônico traz code, quantity, managingEntity, characteristic e — o mais importante — member[]. Nenhum deles é lido.

A referência lista só os campos suportados, não os permitidos: a API não recusa quem manda os outros, e eles ficam guardados no recurso, voltando nas leituras seguintes sem nunca terem significado nada. Um member[] enviado assim parece a lista de pacientes do grupo, e não é.

Criar ou renomear

POST
/fhir/resources/Group
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Group \
-H "x-api-key: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "Group",
"identifier": [
{
"system": "https://www.acmesaude.com.br/integracao/grupo/",
"value": "GR-500",
"use": "usual"
}
],
"name": "Gestantes de alto risco"
}'

A resposta é o recurso gravado, sem envelope:

Response
{
"resourceType": "Group",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--cohort",
"value": "1042",
"use": "usual"
},
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--cohort",
"value": "1042",
"use": "usual"
},
{
"system": "https://www.acmesaude.com.br/integracao/grupo/",
"value": "GR-500",
"use": "usual"
}
],
"name": "Gestantes de alto risco",
"id": "6b41e097-2c58-4a3d-91f0-7e25c48b0a63",
"meta": {
"lastUpdated": "2026-02-19T13:44:07.615000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"actual": true,
"type": "person"
}

Guarde o id: é por ele que se faz a leitura direta.

O mesmo POST cria e renomeia. Reenviando um identifier que já corresponde a um grupo, ele é renomeado — e os pacientes dele não são afetados.

POST
/fhir/resources/Group
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Group \
-H "x-api-key: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "Group",
"identifier": [
{
"system": "https://www.acmesaude.com.br/integracao/grupo/",
"value": "GR-500",
"use": "usual"
}
],
"name": "Gestantes — acompanhamento intensivo"
}'

O nome é único por prestador, e a comparação ignora caixa e acento: São João, Sao Joao e são joão são o mesmo nome. Criar um grupo com um nome que já existe responde 409, e renomear para um nome já usado também. É o único 409 deste recurso.

Dentro de uma carga em lote, o conflito é reportado no response.status daquela entrada, como 409, sem interromper o processamento das demais.

Apagar um grupo

Enviar active: false apaga o grupo. A resposta é 204, sem corpo.

POST
/fhir/resources/Group
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Group \
-H "x-api-key: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "Group",
"identifier": [
{
"system": "https://www.acmesaude.com.br/integracao/grupo/",
"value": "GR-500",
"use": "usual"
}
],
"name": "Gestantes de alto risco",
"active": false
}'

Não é uma desativação: é uma remoção. O grupo deixa de existir, e o id que você já leu passa a responder 404. Não há como reativá-lo — só criar outro.

Um grupo com pacientes não pode ser apagado. A chamada é recusada com The Group cannot be deactivated as it contains patients. Tire os pacientes do grupo antes — o que se faz pelo recurso de cada paciente, não por aqui.

Criar um grupo já com active: false também é recusado: não faz sentido nascer apagado.

Este é um dos poucos endpoints da API que respondem 204. Um POST de grupo que devolve 204 em vez de 200 significa que o grupo foi apagado, não que a chamada falhou.

Não reenvie o id que veio de uma leitura. Com id no corpo, a resposta do apagamento é 200 com o recurso, não 204 — e é fácil concluir que nada aconteceu. Monte o payload de apagamento com identifier, name e active: false, só.

Buscar

GET
/fhir/resources/Group
curl -G https://landing-zone-api.nilo.services/fhir/resources/Group \
-H "x-api-key: <apiKey>" \
-d _count=50 \
-d _lastUpdated=eq2013-01-14 \
-d actual=true \
--data-urlencode identifier=https://www.acmesaude.com.br/integracao/grupo/|GR-500 \
-d type=person

A resposta é sempre um Bundle do tipo searchset:

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Group/6b41e097-2c58-4a3d-91f0-7e25c48b0a63",
"resource": {
"resourceType": "Group",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--cohort",
"value": "1042",
"use": "usual"
},
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--cohort",
"value": "1042",
"use": "usual"
},
{
"system": "https://www.acmesaude.com.br/integracao/grupo/",
"value": "GR-500",
"use": "usual"
}
],
"name": "Gestantes de alto risco",
"id": "6b41e097-2c58-4a3d-91f0-7e25c48b0a63",
"meta": {
"lastUpdated": "2026-02-19T13:44:07.615000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"actual": true,
"type": "person"
},
"search": {
"mode": "match"
}
}
],
"link": []
}

Busca sem resultados não é erro: volta 200 com um Bundle cujo entry é uma lista vazia.

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

Parâmetros de busca suportados

NomeTipoDescriçãoExpressão
identifiertokenIdentificador do grupo, em system|valueGroup.identifier
typetokenAceito, e inútil: todo grupo é personGroup.type
actualtokenAceito, e inútil: todo grupo é trueGroup.actual
_lastUpdateddateData da última gravação no store, com os prefixos eq, ge, le—

Não há busca por nome. O Group do FHIR R4 não define parâmetro de busca sobre name — e como o name é o único dado do recurso, a busca útil é listar tudo e filtrar do seu lado. São listas curtas.

Os demais parâmetros canônicos do Group existem e não encontram nada, porque a plataforma não preenche o campo correspondente: code, member, managing-entity, characteristic, value, exclude e characteristic-value.

Repare em member: não há como perguntar “quais grupos este paciente tem” pelo Group. A resposta está no recurso do paciente.

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/Group/:id
curl https://landing-zone-api.nilo.services/fhir/resources/Group/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 o grupo está em resource.

Response
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Group/6b41e097-2c58-4a3d-91f0-7e25c48b0a63",
"resource": {
"resourceType": "Group",
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--cohort",
"value": "1042",
"use": "usual"
},
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--cohort",
"value": "1042",
"use": "usual"
}
],
"name": "Gestantes de alto risco",
"id": "6b41e097-2c58-4a3d-91f0-7e25c48b0a63",
"meta": {
"lastUpdated": "2026-02-19T13:44:07.615000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"active": true,
"actual": true,
"type": "person"
},
"search": {
"mode": "match"
}
}

Efeitos colaterais

Criar um grupo não coloca ninguém nele. O grupo nasce vazio, e os pacientes entram quando o recurso deles o referencia.

Renomear um grupo não afeta os pacientes: eles continuam nele, e passam a ver o nome novo.

Erros

Recusa é 400, com uma exceção: o 409 do nome repetido. O corpo é um OperationOutcome.

StatuscodeexpressionMensagemQuando
400requiredGroup.identifierField is requiredO payload não tem identifier
400business-ruleGroup.identifierUnable to use any of the provided identifiers to match an existing resource, which can lead to duplicates.Há identifier, mas nenhum utilizável
400business-rule—The Group cannot be deactivated as it contains patients.active: false num grupo que ainda tem pacientes
400business-ruleGroup.activeThe cohort cannot be created with active False.Grupo novo criado com active: false
400structure—Resource has identifier from a Nilo environment that is not the current environment.O payload traz um identificador Nilo gerado em outro ambiente
400exception—mensagem da plataformaO name está ausente — esta API não o valida, e a recusa vem crua do serviço
409conflictGroup.nameA cohort named '…' already exists for this care provider.Já existe um grupo com esse nome
Response
{
"issue": [
{
"code": "business-rule",
"details": {
"text": "The Group cannot be deactivated as it contains patients."
},
"severity": "error"
}
],
"resourceType": "OperationOutcome"
}

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