> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api-docs.nilo.services/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api-docs.nilo.services/_mcp/server.

# Equipe de cuidado

> Montar a equipe de profissionais que acompanha um paciente e atribuir essa equipe a ele, no padrão FHIR CareTeam.

Uma **equipe de cuidado** é o grupo de profissionais responsável por acompanhar um paciente:
quem está nela e com que especialidade cada um atua. O **vínculo** é o outro lado da mesma
moeda — qual equipe acompanha qual paciente, e desde quando.

No FHIR as duas coisas são o mesmo recurso,
[`CareTeam`](https://hl7.org/fhir/R4/careteam.html), e é o campo `subject` que diz qual delas
você está manipulando.

> **Note**
>
> A equipe de cuidado é pré-requisito de boa parte do produto: um paciente sem equipe não recebe
> diretriz aplicada, e a aplicação de uma diretriz é recusada se a equipe dele não cobrir as
> especialidades exigidas — veja [Diretriz aplicada](/guia/recursos/careplan).

## As duas formas do recurso

| `subject`    | O que a escrita faz                                                                     | O que a leitura devolve                                                        |
| ------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| **ausente**  | Cria ou atualiza a **equipe**: nome, unidade de cuidado e a composição de profissionais | A equipe, sempre com `status: active` e sem `period`                           |
| **presente** | Cria ou atualiza o **vínculo** entre o paciente e uma equipe, com vigência              | O vínculo, com `subject`, `period` e um único `participant` apontando a equipe |

> **Warning**
>
> As duas formas convivem no mesmo endpoint e no mesmo conjunto de dados: uma busca sem filtro
> devolve equipes e vínculos misturados. **Use identificadores distintos para cada uma.** Se a
> sua chave do vínculo for igual à chave da equipe, a escrita alcança o registro errado — e não
> há erro, porque do ponto de vista do FHIR os dois são um `CareTeam` com aquele `identifier`.

## Campos

A coluna **Onde** diz em qual das duas formas o campo é lido. A coluna **No NiloCare** traz o
rótulo com que o dado aparece para a equipe; são rótulos, não caminhos de navegação.

| Campo                  | Obrigatório                                       | Onde    | O que significa                                                                                                                                                                 | No NiloCare                                                       |
| ---------------------- | ------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| `resourceType`         | **sim**                                           | ambas   | Constante `CareTeam`                                                                                                                                                            | —                                                                 |
| `identifier`           | não pela validação, **sim na prática**            | ambas   | Suas chaves do registro. É por aqui que a API reconhece uma equipe — ou um vínculo — que já existe                                                                              | —                                                                 |
| `subject`              | só no vínculo                                     | vínculo | O paciente, por um identificador dele. `type` tem de ser `Patient`. **É a presença dele que escolhe a forma do recurso**                                                        | o vínculo aparece como **Equipe de cuidado** na ficha do paciente |
| `participant`          | **sim**                                           | ambas   | Quem compõe a equipe. Na equipe, um item por profissional; no vínculo, um único item apontando a equipe                                                                         | **Profissionais**                                                 |
| `participant[].member` | **sim**                                           | ambas   | O profissional (`type: Practitioner`) ou a equipe já criada (`type: CareTeam`)                                                                                                  | **Profissional**                                                  |
| `participant[].role`   | **sim** quando `member.type` é `Practitioner`     | ambas   | As especialidades desse profissional dentro da equipe, uma por item, em CBO ou SNOMED CT                                                                                        | **Especialidades no time**                                        |
| `managingOrganization` | não                                               | ambas   | A unidade de cuidado da equipe, **só pelo identificador Nilo dela**. Havendo mais de um item, vale o último com esse `system`; omitido, a unidade padrão da implantação é usada | **Unidade de cuidado**                                            |
| `name`                 | não                                               | ambas   | Nome da equipe. Omitido na criação, a plataforma gera um nome aleatório de dez caracteres                                                                                       | **Nome**                                                          |
| `status`               | não pela validação, **sim na prática** no vínculo | vínculo | `active` atribui a equipe ao paciente, `inactive` encerra o vínculo. Omitido, o vínculo nasce ativo e sem datas. Na equipe o campo não tem efeito sobre o cadastro              | —                                                                 |
| `period`               | não                                               | vínculo | Vigência do vínculo. Omitido, o `status` decide as datas                                                                                                                        | —                                                                 |
| `id` · `meta`          | não                                               | ambas   | Só resposta: identificador Nilo FHIR e metadados da gravação                                                                                                                    | —                                                                 |

### Campos que a Nilo não usa

A `CareTeam` canônica traz mais do que esta integração lê: `category`, `encounter`, `note`,
`reasonCode`, `reasonReference`, `telecom`, e ainda `participant[].onBehalfOf`,
`participant[].period` e `participant[].id`. Nenhum deles é lido, e por isso nenhum aparece na
referência do recurso.

> **Note**
>
> Enviá-los não é erro, e nenhum deles tem efeito — um `period` dentro de um `participant`, por
> exemplo, não limita a participação daquele profissional na equipe. Os campos de topo (`note`,
> `telecom`, `category`, `encounter`, `reasonCode`, `reasonReference`) ficam guardados no recurso
> e voltam nas leituras seguintes. Os que ficam **dentro** de `participant[]` não: quando a
> plataforma regrava a equipe, ela reescreve a lista de participantes inteira, e
> `onBehalfOf`, `period` e `id` desaparecem com ela.

## Montar a equipe

Não há endpoint separado para criar e atualizar: o mesmo `POST` faz os dois, e a equipe é
reconhecida pelo `identifier`.

### Request

POST [https://landing-zone-api.nilo.services/fhir/resources/CareTeam](https://landing-zone-api.nilo.services/fhir/resources/CareTeam)

**`Equipe nova`**

```curl Equipe nova
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/CareTeam \
     -H "x-api-key: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "participant": [
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "1111",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    },
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "2222",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "225130",
              "display": "Médico de Família e Comunidade",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    }
  ],
  "resourceType": "CareTeam",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
      "value": "123",
      "use": "usual"
    }
  ],
  "managingOrganization": [
    {
      "identifier": {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471",
        "use": "usual"
      },
      "type": "Organization"
    }
  ],
  "name": "Equipe de cuidado crônico — Zona Sul",
  "status": "active"
}'
```

**`Equipe nova`**

```python Equipe nova
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/CareTeam"

payload = {
    "participant": [
        {
            "member": {
                "identifier": {
                    "system": "https://www.acmesaude.com.br/integracao/profissional/",
                    "value": "1111",
                    "use": "usual"
                },
                "type": "Practitioner"
            },
            "role": [{ "coding": [
                        {
                            "code": "223565",
                            "display": "Enfermeiro da Estratégia de Saúde da Família",
                            "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
                        }
                    ] }]
        },
        {
            "member": {
                "identifier": {
                    "system": "https://www.acmesaude.com.br/integracao/profissional/",
                    "value": "2222",
                    "use": "usual"
                },
                "type": "Practitioner"
            },
            "role": [{ "coding": [
                        {
                            "code": "225130",
                            "display": "Médico de Família e Comunidade",
                            "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
                        }
                    ] }]
        }
    ],
    "resourceType": "CareTeam",
    "identifier": [
        {
            "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
            "value": "123",
            "use": "usual"
        }
    ],
    "managingOrganization": [
        {
            "identifier": {
                "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
                "value": "4471",
                "use": "usual"
            },
            "type": "Organization"
        }
    ],
    "name": "Equipe de cuidado crônico — Zona Sul",
    "status": "active"
}
headers = {
    "x-api-key": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Equipe nova`**

```javascript Equipe nova
const url = 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam';
const options = {
  method: 'POST',
  headers: {'x-api-key': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"participant":[{"member":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/profissional/","value":"1111","use":"usual"},"type":"Practitioner"},"role":[{"coding":[{"code":"223565","display":"Enfermeiro da Estratégia de Saúde da Família","system":"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"}]}]},{"member":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/profissional/","value":"2222","use":"usual"},"type":"Practitioner"},"role":[{"coding":[{"code":"225130","display":"Médico de Família e Comunidade","system":"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"}]}]}],"resourceType":"CareTeam","identifier":[{"system":"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/","value":"123","use":"usual"}],"managingOrganization":[{"identifier":{"system":"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit","value":"4471","use":"usual"},"type":"Organization"}],"name":"Equipe de cuidado crônico — Zona Sul","status":"active"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Equipe nova`**

```go Equipe nova
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/CareTeam"

	payload := strings.NewReader("{\n  \"participant\": [\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"1111\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"223565\",\n              \"display\": \"Enfermeiro da Estratégia de Saúde da Família\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"2222\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"225130\",\n              \"display\": \"Médico de Família e Comunidade\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    }\n  ],\n  \"resourceType\": \"CareTeam\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/\",\n      \"value\": \"123\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"managingOrganization\": [\n    {\n      \"identifier\": {\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit\",\n        \"value\": \"4471\",\n        \"use\": \"usual\"\n      },\n      \"type\": \"Organization\"\n    }\n  ],\n  \"name\": \"Equipe de cuidado crônico — Zona Sul\",\n  \"status\": \"active\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Equipe nova`**

```ruby Equipe nova
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/CareTeam")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"participant\": [\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"1111\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"223565\",\n              \"display\": \"Enfermeiro da Estratégia de Saúde da Família\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"2222\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"225130\",\n              \"display\": \"Médico de Família e Comunidade\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    }\n  ],\n  \"resourceType\": \"CareTeam\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/\",\n      \"value\": \"123\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"managingOrganization\": [\n    {\n      \"identifier\": {\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit\",\n        \"value\": \"4471\",\n        \"use\": \"usual\"\n      },\n      \"type\": \"Organization\"\n    }\n  ],\n  \"name\": \"Equipe de cuidado crônico — Zona Sul\",\n  \"status\": \"active\"\n}"

response = http.request(request)
puts response.read_body
```

**`Equipe nova`**

```java Equipe nova
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://landing-zone-api.nilo.services/fhir/resources/CareTeam")
  .header("x-api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"participant\": [\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"1111\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"223565\",\n              \"display\": \"Enfermeiro da Estratégia de Saúde da Família\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"2222\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"225130\",\n              \"display\": \"Médico de Família e Comunidade\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    }\n  ],\n  \"resourceType\": \"CareTeam\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/\",\n      \"value\": \"123\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"managingOrganization\": [\n    {\n      \"identifier\": {\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit\",\n        \"value\": \"4471\",\n        \"use\": \"usual\"\n      },\n      \"type\": \"Organization\"\n    }\n  ],\n  \"name\": \"Equipe de cuidado crônico — Zona Sul\",\n  \"status\": \"active\"\n}")
  .asString();
```

**`Equipe nova`**

```php Equipe nova
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam', [
  'body' => '{
  "participant": [
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "1111",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    },
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "2222",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "225130",
              "display": "Médico de Família e Comunidade",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    }
  ],
  "resourceType": "CareTeam",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
      "value": "123",
      "use": "usual"
    }
  ],
  "managingOrganization": [
    {
      "identifier": {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471",
        "use": "usual"
      },
      "type": "Organization"
    }
  ],
  "name": "Equipe de cuidado crônico — Zona Sul",
  "status": "active"
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Equipe nova`**

```csharp Equipe nova
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/CareTeam");
var request = new RestRequest(Method.POST);
request.AddHeader("x-api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"participant\": [\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"1111\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"223565\",\n              \"display\": \"Enfermeiro da Estratégia de Saúde da Família\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"member\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"2222\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      },\n      \"role\": [\n        {\n          \"coding\": [\n            {\n              \"code\": \"225130\",\n              \"display\": \"Médico de Família e Comunidade\",\n              \"system\": \"http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO\"\n            }\n          ]\n        }\n      ]\n    }\n  ],\n  \"resourceType\": \"CareTeam\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/\",\n      \"value\": \"123\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"managingOrganization\": [\n    {\n      \"identifier\": {\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit\",\n        \"value\": \"4471\",\n        \"use\": \"usual\"\n      },\n      \"type\": \"Organization\"\n    }\n  ],\n  \"name\": \"Equipe de cuidado crônico — Zona Sul\",\n  \"status\": \"active\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Equipe nova`**

```swift Equipe nova
import Foundation

let headers = [
  "x-api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "participant": [
    [
      "member": [
        "identifier": [
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "1111",
          "use": "usual"
        ],
        "type": "Practitioner"
      ],
      "role": [["coding": [
            [
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            ]
          ]]]
    ],
    [
      "member": [
        "identifier": [
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "2222",
          "use": "usual"
        ],
        "type": "Practitioner"
      ],
      "role": [["coding": [
            [
              "code": "225130",
              "display": "Médico de Família e Comunidade",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            ]
          ]]]
    ]
  ],
  "resourceType": "CareTeam",
  "identifier": [
    [
      "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
      "value": "123",
      "use": "usual"
    ]
  ],
  "managingOrganization": [
    [
      "identifier": [
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471",
        "use": "usual"
      ],
      "type": "Organization"
    ]
  ],
  "name": "Equipe de cuidado crônico — Zona Sul",
  "status": "active"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/CareTeam")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A resposta é o recurso gravado, sem envelope:

### Response (200)

```json
{
  "participant": [
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "1111",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    },
    {
      "member": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "2222",
          "use": "usual"
        },
        "type": "Practitioner"
      },
      "role": [
        {
          "coding": [
            {
              "code": "225130",
              "display": "Médico de Família e Comunidade",
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
            }
          ]
        }
      ]
    }
  ],
  "resourceType": "CareTeam",
  "id": "9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
      "value": "123",
      "use": "usual"
    },
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-team",
      "value": "8812",
      "use": "usual"
    }
  ],
  "managingOrganization": [
    {
      "identifier": {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471",
        "use": "usual"
      },
      "type": "Organization"
    }
  ],
  "meta": {
    "lastUpdated": "2026-03-02T13:22:41.204000Z",
    "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
  },
  "name": "Equipe de cuidado crônico — Zona Sul",
  "status": "active"
}
```

Guarde o `id`: é por ele que se faz a leitura direta. Ao lado do seu `identifier`, a resposta
traz o identificador Nilo da equipe, no `system`
`…/NamingSystem/sorting-hat-api--care-team`.

> **Warning**
>
> **A resposta da escrita repete o que você enviou — ela não confirma o que a plataforma
> registrou.** Na gravação, todo campo presente no seu payload vence a visão da plataforma:
> `participant`, `role`, `name`, `status` e `period` voltam como foram mandados, acrescidos apenas
> de `id`, `meta` e do identificador Nilo. Um profissional que a plataforma descartou continua
> aparecendo na resposta, e as referências (`member.reference`) não vêm.
>
> Para saber como a equipe ficou de fato, **leia a equipe depois** — por `id` ou por
> `identifier`. A leitura é o que reflete a plataforma; a resposta da escrita, não.

> **Warning**
>
> **Sem `identifier` que case, a chamada cria uma equipe nova.** Não há reconhecimento por
> composição de profissionais nesta forma do recurso: mandar duas vezes a mesma equipe com
> chaves diferentes produz duas equipes com os mesmos integrantes. Mande sempre a sua chave, e a
> mesma chave.

### Os profissionais e as especialidades

Cada item de `participant` é um profissional, e `role` são as especialidades com que ele atua
naquela equipe. Um profissional com duas especialidades no time vai num único `participant`,
com dois itens em `role`.

> **Note**
>
> Repetir o mesmo profissional em dois `participant` também funciona: as especialidades dos dois
> itens são somadas, e o resultado é o mesmo de um item com dois `role`. É o que permite reenviar,
> sem tratamento, a forma que a leitura devolve.

Três condições, todas verificadas na chamada:

1. **`member.type` tem de ser `Practitioner`.** Na escrita da equipe nenhum outro tipo é
   aceito.
2. **O profissional tem de existir e estar ativo** — é o cadastro de
   [Profissional](/guia/recursos/practitioner) que responde por isso.
3. **O profissional tem de pertencer à unidade de cuidado da equipe.** Um profissional fora
   dela recusa a chamada inteira.

> **Warning**
>
> **A atualização substitui a composição, não a complementa.** Todo par profissional +
> especialidade que não vier no `participant` é **removido** da equipe. Para trocar um integrante,
> reenvie a formação completa — inclusive quem não mudou.

**`Requisição — Trocar um profissional da equipe`**

```json title="Requisição — Trocar um profissional da equipe"
{
  "resourceType": "CareTeam",
  "status": "active",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
      "value": "123"
    }
  ],
  "managingOrganization": [
    {
      "identifier": {
        "use": "usual",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471"
      },
      "type": "Organization"
    }
  ],
  "participant": [
    {
      "member": {
        "type": "Practitioner",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "3333"
        }
      },
      "role": [
        {
          "coding": [
            {
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO",
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família"
            }
          ]
        }
      ]
    },
    {
      "member": {
        "type": "Practitioner",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "2222"
        }
      },
      "role": [
        {
          "coding": [
            {
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO",
              "code": "225130",
              "display": "Médico de Família e Comunidade"
            }
          ]
        }
      ]
    }
  ]
}
```

> **Note**
>
> A chave `participant` tem de estar presente: um payload sem ela é recusado com
> `participant of the CareTeam is required`. Uma lista vazia (`[]`) é aceita pela regra de negócio
> e **esvazia a equipe** — todos os integrantes são removidos e a equipe continua existindo, sem
> ninguém. Mas o padrão FHIR não admite array vazio, e a validação do recurso acontece antes
> dessa regra: se você precisa esvaziar uma equipe pela API, confirme esse caminho com o Suporte
> antes de contar com ele.

> **Warning**
>
> **Um `role` cujo `coding` não esteja em CBO nem em SNOMED CT é ignorado em silêncio**, e o
> profissional acaba fora da equipe: sem especialidade reconhecida, não há o que registrar. A
> chamada responde `200`, e — como a resposta repete o payload — **ela ainda mostra o
> profissional**. Só uma leitura posterior revela que ele não entrou. Já um código **dentro**
> desses sistemas que não esteja mapeado recusa a chamada, com mensagem explícita — veja
> [Erros](#erros).

### A unidade de cuidado

A unidade vem em `managingOrganization[].identifier`, e **só é reconhecida no `system`
`…/NamingSystem/sorting-hat-api--care-unit`** — o identificador Nilo da unidade. Omitida, ou
informada em outro `system`, a unidade padrão da sua implantação é usada.

```json
"managingOrganization": [
  {
    "identifier": {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
      "value": "4471"
    },
    "type": "Organization"
  }
]
```

> **Warning**
>
> **A unidade de cuidado não muda depois da criação.** Numa atualização ela é usada apenas para
> validar os profissionais enviados; a unidade gravada na equipe continua a mesma. E como a
> validação é feita contra a unidade do payload, **omitir `managingOrganization` numa atualização
> faz a chamada ser validada contra a unidade padrão** — se a equipe não for dela, os
> profissionais são recusados por não pertencerem "a nenhuma unidade de cuidado". Envie sempre a
> mesma unidade que você usou na criação.

> **Warning**
>
> **Aqui a sua própria chave não serve.** Ao contrário do [Paciente](/guia/recursos/patient) e
> do [Profissional](/guia/recursos/practitioner), que aceitam qualquer identificador da unidade,
> a equipe de cuidado só lê o identificador Nilo. Um `managingOrganization` com o identificador
> do seu sistema é **ignorado em silêncio**, e a equipe acaba na unidade padrão — ou a chamada é
> recusada com `Managing organization not found.` se não houver padrão configurado.
>
> Havendo mais de um item em `managingOrganization`, vale o **último** cujo `system` seja o
> identificador Nilo, não o primeiro.

Para descobrir as unidades do seu ambiente e o identificador Nilo de cada uma, liste-as — veja
[Unidade de cuidado](/guia/recursos/organization):

### Request

GET [https://landing-zone-api.nilo.services/fhir/resources/Organization](https://landing-zone-api.nilo.services/fhir/resources/Organization)

**`Busca com resultados`**

```curl Busca com resultados
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
```

**`Busca com resultados`**

```python Busca com resultados
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/Organization"

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","active":"true","identifier":"https://www.acmesaude.com.br/integracao/unidade/|UC-01","name":"Centro"}

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

**`Busca com resultados`**

```javascript Busca com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Busca com resultados`**

```go Busca com resultados
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Busca com resultados`**

```ruby Busca com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`Busca com resultados`**

```java Busca com resultados
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca com resultados`**

```php Busca com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Busca com resultados`**

```csharp Busca com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca com resultados`**

```swift Busca com resultados
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Organization?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&active=true&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Funidade%2F%7CUC-01&name=Centro")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

> **Note**
>
> `status` na escrita da equipe **não tem efeito sobre o cadastro**: a equipe não tem vigência. Mas
> o valor que você enviar fica no recurso FHIR e é lido de volta até a plataforma regravar a
> equipe — o que pode levar horas, porque uma regravação sem mudança de conteúdo é dispensada.
> Envie `active`, que é o valor que a plataforma produz.

## Atribuir a equipe a um paciente

Com `subject`, a mesma escrita passa a ser o vínculo entre o paciente e uma equipe. Há **duas
formas**, escolhidas pelo `member.type` do `participant`.

### Apontando uma equipe existente

`member.type` igual a `CareTeam`, com o identificador da equipe. É a forma previsível: o
vínculo aponta uma equipe que você já criou.

**`Requisição — Atribuir uma equipe já criada ao paciente`**

```json title="Requisição — Atribuir uma equipe já criada ao paciente"
{
  "resourceType": "CareTeam",
  "status": "active",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
      "value": "321"
    }
  ],
  "managingOrganization": [
    {
      "identifier": {
        "use": "usual",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471"
      },
      "type": "Organization"
    }
  ],
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "participant": [
    {
      "member": {
        "type": "CareTeam",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
          "value": "123"
        }
      }
    }
  ]
}
```

**`Resposta 200 — Vínculo gravado`**

```json title="Resposta 200 — Vínculo gravado"
{
  "resourceType": "CareTeam",
  "id": "4a7e15d8-3c62-4f09-b8a3-71de095cb246",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
      "value": "321"
    },
    {
      "use": "usual",
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--patient-care-team",
      "value": "30512"
    }
  ],
  "status": "active",
  "name": "Equipe de cuidado crônico — Zona Sul",
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "managingOrganization": [
    {
      "identifier": {
        "use": "usual",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471"
      },
      "type": "Organization"
    }
  ],
  "participant": [
    {
      "member": {
        "reference": "CareTeam/9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
        "type": "CareTeam",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
          "value": "123"
        }
      }
    }
  ],
  "period": {
    "start": "2026-03-02T00:00:00Z"
  }
}
```

A equipe precisa existir antes. Não existindo, a chamada é recusada — mas o erro sai como
`code: exception`, com uma mensagem de linguagem no lugar de uma explicação do campo. Crie a
equipe primeiro e confirme o `identifier` dela antes de atribuí-la.

### Compondo pelos profissionais

`member.type` igual a `Practitioner` em todos os participantes, cada um com o seu `role`. A
plataforma procura uma equipe cuja composição de profissionais e especialidades seja
**exatamente** a que você enviou e, achando, vincula o paciente a ela.

**`Requisição — Atribuir uma equipe pelos profissionais`**

```json title="Requisição — Atribuir uma equipe pelos profissionais"
{
  "resourceType": "CareTeam",
  "status": "active",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
      "value": "322"
    }
  ],
  "name": "Equipe de cuidado crônico — Zona Sul",
  "managingOrganization": [
    {
      "identifier": {
        "use": "usual",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
        "value": "4471"
      },
      "type": "Organization"
    }
  ],
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "participant": [
    {
      "member": {
        "type": "Practitioner",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "1111"
        }
      },
      "role": [
        {
          "coding": [
            {
              "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO",
              "code": "223565",
              "display": "Enfermeiro da Estratégia de Saúde da Família"
            }
          ]
        }
      ]
    }
  ]
}
```

> **Warning**
>
> **Não achando, uma equipe nova é criada.** É o efeito colateral mais fácil de disparar sem
> querer: uma especialidade a mais ou a menos já faz a composição não casar, e o resultado é uma
> equipe nova — com o `name` que você mandou, ou um nome aleatório — em vez do vínculo com a
> equipe que você tinha em mente. Se a intenção é reusar uma equipe, aponte-a pelo
> `member.type: CareTeam`.

> **Warning**
>
> **A equipe reaproveitada é reescrita.** Antes de comparar composições, a API tenta reencontrar o
> vínculo pelo `identifier` que você mandou; achando, reusa a equipe que ele já apontava. Mas em
> seguida essa equipe **recebe o `name` do payload e tem a composição substituída** pela que você
> enviou, par a par — exatamente como numa atualização da equipe. Reenviar o vínculo com um
> profissional a menos remove esse profissional da equipe, **para todos os pacientes ligados a
> ela**.
>
> Se a sua intenção é só trocar o paciente de equipe, aponte a equipe por `member.type: CareTeam`:
> essa forma não mexe na composição.

> **Warning**
>
> Nesta forma, **um profissional que não pertence à unidade de cuidado é descartado em
> silêncio**: ele é validado como profissional, mas fica de fora da equipe montada, e a chamada
> responde `200`. É diferente da escrita da equipe, onde o mesmo caso é recusado com erro.
> Confira a composição da equipe criada antes de considerar a atribuição concluída.

> **Note**
>
> Um `participant` vazio também é aceito aqui, e vincula o paciente a uma **equipe nova sem
> nenhum profissional**. Como um paciente sem profissionais na equipe não recebe diretriz
> aplicada, essa combinação raramente é o que se quer.

### Vigência: `status` e `period`

O `status` é a instrução, e o `period` é o registro. Enviando um sem o outro, o `status`
decide as datas:

| Você envia                       | O que fica registrado                                                |
| -------------------------------- | -------------------------------------------------------------------- |
| `status: active`, sem `period`   | O vínculo começa **agora**; a data de fim atual é preservada         |
| `status: inactive`, sem `period` | O vínculo é encerrado **agora**; a data de início atual é preservada |
| `period` com `start` e/ou `end`  | As datas enviadas; a que faltar mantém o valor atual                 |

Havendo `period` no payload, três regras são conferidas:

* `period.end` não pode ser enviado com `status: active`;
* `period.end` tem de ser anterior ao momento da chamada;
* o período tem de ser coerente com o `status` — um período vigente não pode vir marcado como
  `inactive`, nem o contrário.

Na leitura, o `status` é **derivado** do período: `active` quando o momento da leitura cai
dentro dele, `inactive` fora. Um vínculo sem datas é lido como `active`.

> **Warning**
>
> **Criar um vínculo encerra um vínculo anterior do paciente.** A plataforma fecha um dos vínculos
> existentes com a data e hora da chamada antes de registrar o novo — não é preciso encerrá-lo
> antes, e não há aviso na resposta de que isso aconteceu. Um paciente tem uma equipe por vez.
>
> O vínculo escolhido não é necessariamente o vigente: é o primeiro que a plataforma encontra para
> aquele paciente. Num paciente com histórico de vínculos, isso pode reescrever a data de fim de um
> vínculo **já encerrado**. Encerre você mesmo o vínculo vigente, com `status: inactive`, antes de
> atribuir a equipe nova — é o caminho previsível.

> **Note**
>
> O encerramento automático vale para a **criação** de um vínculo, não para a atualização de um
> que já existe. Reenviar um vínculo que a API reconheça pelo `identifier` atualiza aquele
> registro e não mexe em nenhum outro.

> **Warning**
>
> Quando o encerramento automático não resolve a situação — por exemplo, um paciente com mais de
> um vínculo em aberto —, a escrita é recusada com
> `This patient already belongs to an unfinished care team`, e nada é gravado. Nesse caso encerre
> os vínculos abertos explicitamente, com `status: inactive`, antes de atribuir a equipe nova.

### Encerrar o vínculo

Reenvie o vínculo com `status: inactive` e sem `period`:

**`Requisição — Encerrar o vínculo do paciente`**

```json title="Requisição — Encerrar o vínculo do paciente"
{
  "resourceType": "CareTeam",
  "status": "inactive",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
      "value": "321"
    }
  ],
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "participant": [
    {
      "member": {
        "type": "CareTeam",
        "identifier": {
          "use": "usual",
          "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
          "value": "123"
        }
      }
    }
  ]
}
```

> **Warning**
>
> Depois disso o paciente fica **sem equipe de cuidado** até uma nova atribuição — e sem equipe
> ele não entra em diretriz nova e não recebe itens de diretriz aplicada. Encerrar sem atribuir
> outra equipe interrompe o acompanhamento.

## Buscar

### Request

GET [https://landing-zone-api.nilo.services/fhir/resources/CareTeam](https://landing-zone-api.nilo.services/fhir/resources/CareTeam)

**`Busca com resultados`**

```curl Busca com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/CareTeam \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     -d date=ge2026-01-01 \
     --data-urlencode identifier=https://www.acmesaude.com.br/integracao/equipe-de-cuidado/|123 \
     --data-urlencode participant=Practitioner/2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88 \
     --data-urlencode participant:identifier=https://www.acmesaude.com.br/integracao/profissional/|1111 \
     --data-urlencode patient=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
     --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
     -d status=active \
     --data-urlencode subject=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
     --data-urlencode subject:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709
```

**`Busca com resultados`**

```python Busca com resultados
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/CareTeam"

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","date":"[\"ge2026-01-01\"]","identifier":"https://www.acmesaude.com.br/integracao/equipe-de-cuidado/|123","participant":"Practitioner/2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88","participant:identifier":"https://www.acmesaude.com.br/integracao/profissional/|1111","patient":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4","patient:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709","status":"active","subject":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4","subject:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709"}

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

**`Busca com resultados`**

```javascript Busca com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Busca com resultados`**

```go Busca com resultados
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Busca com resultados`**

```ruby Busca com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`Busca com resultados`**

```java Busca com resultados
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca com resultados`**

```php Busca com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Busca com resultados`**

```csharp Busca com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca com resultados`**

```swift Busca com resultados
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/CareTeam?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fequipe-de-cuidado%2F%7C123&participant=Practitioner%2F2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88&participant%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C1111&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&status=active&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A resposta é sempre um `Bundle` do tipo `searchset`, com equipes e vínculos misturados:

### Response (200)

```json
{
  "resourceType": "Bundle",
  "type": "searchset",
  "entry": [
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
      "resource": {
        "participant": [
          {
            "member": {
              "identifier": {
                "system": "https://www.acmesaude.com.br/integracao/profissional/",
                "value": "1111",
                "use": "usual"
              },
              "type": "Practitioner",
              "reference": "Practitioner/2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88"
            },
            "role": [
              {
                "coding": [
                  {
                    "code": "223565",
                    "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
                  }
                ],
                "text": "ENFERMEIRO DA ESTRATEGIA DE SAUDE DA FAMILIA"
              }
            ]
          },
          {
            "member": {
              "identifier": {
                "system": "https://www.acmesaude.com.br/integracao/profissional/",
                "value": "2222",
                "use": "usual"
              },
              "type": "Practitioner",
              "reference": "Practitioner/6f30b71c-9e48-4a11-84d0-b7c25e9138af"
            },
            "role": [
              {
                "coding": [
                  {
                    "code": "225130",
                    "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
                  }
                ],
                "text": "MEDICO DA FAMILIA E COMUNIDADE"
              }
            ]
          }
        ],
        "resourceType": "CareTeam",
        "id": "9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-team",
            "value": "8812",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
            "value": "123",
            "use": "usual"
          }
        ],
        "managingOrganization": [
          {
            "identifier": {
              "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
              "value": "4471",
              "use": "usual"
            },
            "type": "Organization"
          }
        ],
        "name": "Equipe de cuidado crônico — Zona Sul",
        "status": "active"
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/4a7e15d8-3c62-4f09-b8a3-71de095cb246",
      "resource": {
        "participant": [
          {
            "member": {
              "identifier": {
                "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-team",
                "value": "8812",
                "use": "usual"
              },
              "type": "CareTeam",
              "reference": "CareTeam/9d2c47f0-6b18-4a35-8e71-05fc93b2ad64"
            }
          }
        ],
        "resourceType": "CareTeam",
        "id": "4a7e15d8-3c62-4f09-b8a3-71de095cb246",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--patient-care-team",
            "value": "30512",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
            "value": "321",
            "use": "usual"
          }
        ],
        "managingOrganization": [
          {
            "identifier": {
              "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
              "value": "4471",
              "use": "usual"
            },
            "type": "Organization"
          }
        ],
        "name": "Equipe de cuidado crônico — Zona Sul",
        "period": {
          "start": "2026-03-02T00:00:00Z"
        },
        "status": "active",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
        }
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": []
}
```

> **Note**
>
> 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 (200)

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

### Parâmetros de busca suportados

| Nome                             | Tipo                                                       | Descrição                                                                            | Expressão                                |
| -------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------- |
| `identifier`                     | [token](https://hl7.org/fhir/R4/search.html#token)         | Identificador da equipe ou do vínculo, em `system\|value`                            | `CareTeam.identifier`                    |
| `status`                         | [token](https://hl7.org/fhir/R4/search.html#token)         | `active` ou `inactive`                                                               | `CareTeam.status`                        |
| `subject:identifier`             | [token](https://hl7.org/fhir/R4/search.html#token)         | Vínculos de um paciente, pelo identificador dele                                     | `CareTeam.subject.identifier`            |
| `subject`                        | [reference](https://hl7.org/fhir/R4/search.html#reference) | Vínculos de um paciente, pelo `id` Nilo FHIR                                         | `CareTeam.subject`                       |
| `patient:identifier` · `patient` | idem                                                       | Sinônimos dos dois acima: aqui o `subject` é sempre um paciente                      | `CareTeam.subject`                       |
| `participant:identifier`         | [token](https://hl7.org/fhir/R4/search.html#token)         | Recursos em que um profissional — ou uma equipe — participa, pelo identificador dele | `CareTeam.participant.member.identifier` |
| `participant`                    | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo, pelo `id` Nilo FHIR                                                         | `CareTeam.participant.member`            |
| `date`                           | [date](https://hl7.org/fhir/R4/search.html#date)           | Vigência do vínculo, com os prefixos `eq`, `ge`, `le`                                | `CareTeam.period`                        |
| `_lastUpdated`                   | [date](https://hl7.org/fhir/R4/search.html#date)           | Data da última gravação no store, com os mesmos prefixos                             | —                                        |

A busca mais usada é a do vínculo vigente de um paciente:

```bash
curl --request GET \
  --url 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam?subject:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709&status=active' \
  --header 'x-api-key: SUA_API_KEY'
```

> **Note**
>
> `status=inactive` traz **apenas vínculos**, e só os encerrados: a equipe de cuidado sai sempre
> como `active`. Não há, do outro lado, um filtro que traga apenas equipes — para separá-las dos
> vínculos, olhe a presença de `subject` em cada entrada do resultado.

> **Warning**
>
> Qual identificador as referências carregam **depende da sua implantação**. Na configuração que
> usa identificadores externos nas referências, `subject` e `participant[].member` trazem o
> identificador do seu sistema, e os filtros acima funcionam como estão. Sem ela, vêm os
> identificadores Nilo (`…/NamingSystem/hippocrates-api--patient`,
> `…/NamingSystem/almanac-api--professional`), e é esse `system` que você tem de usar no filtro.
> Confira numa resposta de leitura qual dos dois está lá antes de montar a busca em volume.

> **Note**
>
> Dois parâmetros canônicos da `CareTeam` existem e **não encontram nada** aqui, porque a Nilo
> não preenche o campo correspondente: `category` e `encounter`.

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

## Ler por ID

### Request

GET [https://landing-zone-api.nilo.services/fhir/resources/CareTeam/\{id}](https://landing-zone-api.nilo.services/fhir/resources/CareTeam/\{id})

**`Equipe encontrada`**

```curl Equipe encontrada
curl https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id \
     -H "x-api-key: <apiKey>"
```

**`Equipe encontrada`**

```python Equipe encontrada
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id"

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

**`Equipe encontrada`**

```javascript Equipe encontrada
const url = 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Equipe encontrada`**

```go Equipe encontrada
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Equipe encontrada`**

```ruby Equipe encontrada
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`Equipe encontrada`**

```java Equipe encontrada
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Equipe encontrada`**

```php Equipe encontrada
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Equipe encontrada`**

```csharp Equipe encontrada
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Equipe encontrada`**

```swift Equipe encontrada
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

> **Warning**
>
> 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 equipe está em
> `resource`. Ler `participant` ou `status` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
  "resource": {
    "participant": [
      {
        "member": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "1111",
            "use": "usual"
          },
          "type": "Practitioner",
          "reference": "Practitioner/2c9f81ab-4d70-4e33-9b52-6ad10f7c4e88"
        },
        "role": [
          {
            "coding": [
              {
                "code": "224571005",
                "system": "http://snomed.info/sct"
              }
            ],
            "text": "Nurse practitioner"
          },
          {
            "coding": [
              {
                "code": "223565",
                "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO"
              }
            ],
            "text": "ENFERMEIRO DA ESTRATEGIA DE SAUDE DA FAMILIA"
          }
        ]
      }
    ],
    "resourceType": "CareTeam",
    "id": "9d2c47f0-6b18-4a35-8e71-05fc93b2ad64",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-team",
        "value": "8812",
        "use": "usual"
      },
      {
        "system": "https://www.acmesaude.com.br/integracao/equipe-de-cuidado/",
        "value": "123",
        "use": "usual"
      }
    ],
    "managingOrganization": [
      {
        "identifier": {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
          "value": "4471",
          "use": "usual"
        },
        "type": "Organization"
      }
    ],
    "meta": {
      "lastUpdated": "2026-03-02T13:22:41.204000Z",
      "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
    },
    "name": "Equipe de cuidado crônico — Zona Sul",
    "status": "active"
  },
  "search": {
    "mode": "match"
  }
}
```

> **Warning**
>
> **A leitura da equipe quebra um profissional com várias especialidades em vários
> `participant`.** Você escreve um item com dois `role`; a leitura devolve dois itens com o mesmo
> `member` e um `role` cada. Não é perda de dado — reenviar o que foi lido reconstrói a mesma
> composição —, mas quem conta `participant` para saber o tamanho da equipe conta errado. Conte
> `member` distintos.

Cada `role` lido traz **um** `coding`, e `text` com o nome da ocupação naquele catálogo — não o
nome da especialidade na plataforma. Uma especialidade mapeada nos dois catálogos sai como **dois
itens de `role`**, um por sistema, e não como um item com dois `coding`.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/CareTeam/4a7e15d8-3c62-4f09-b8a3-71de095cb246",
  "resource": {
    "participant": [
      {
        "member": {
          "identifier": {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-team",
            "value": "8812",
            "use": "usual"
          },
          "type": "CareTeam",
          "reference": "CareTeam/9d2c47f0-6b18-4a35-8e71-05fc93b2ad64"
        }
      }
    ],
    "resourceType": "CareTeam",
    "id": "4a7e15d8-3c62-4f09-b8a3-71de095cb246",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--patient-care-team",
        "value": "30512",
        "use": "usual"
      },
      {
        "system": "https://www.acmesaude.com.br/integracao/vinculo-equipe/",
        "value": "321",
        "use": "usual"
      }
    ],
    "managingOrganization": [
      {
        "identifier": {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/sorting-hat-api--care-unit",
          "value": "4471",
          "use": "usual"
        },
        "type": "Organization"
      }
    ],
    "name": "Equipe de cuidado crônico — Zona Sul",
    "period": {
      "end": "2026-08-14T18:03:12.517000Z",
      "start": "2026-03-02T00:00:00Z"
    },
    "status": "inactive",
    "subject": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
    }
  },
  "search": {
    "mode": "match"
  }
}
```

A leitura por ID responde `404` quando o `id` não existe.

## Valores aceitos

### `participant[].role`

Dois sistemas de codificação, e só eles:

| Sistema   | `system`                                           | Catálogo                                                                                              |
| --------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| CBO       | `http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBO` | [Classificação Brasileira de Ocupações](https://terminologia.saude.gov.br/fhir/CodeSystem-BRCBO.html) |
| SNOMED CT | `http://snomed.info/sct`                           | [SNOMED CT](http://snomed.info/sct)                                                                   |

Dentro de um item de `role`, o **primeiro** `coding` num desses dois sistemas é o que vale — os
demais são ignorados. Um código em qualquer outro `system` é ignorado, e um item de `role` só
com códigos ignorados não registra especialidade nenhuma.

Nem todo código dos dois catálogos é utilizável: o código precisa estar mapeado para uma
especialidade da plataforma. Não estando, a chamada é recusada com
`BOC code … does not exist or it is not mapped` ou `SNOMED code … does not exist or it is not
mapped`.

### `status`

`active` e `inactive` — são os dois únicos valores que a leitura produz e os dois únicos com
efeito na escrita.

> **Warning**
>
> Os demais valores do FHIR R4 (`proposed`, `suspended`, `entered-in-error`) **não são recusados**:
> eles caem no mesmo caminho de um `status` ausente, e num vínculo novo isso grava um vínculo
> **sem datas**, que a leitura seguinte devolve como `active`. Não use nenhum deles esperando que o
> vínculo fique inativo — só `inactive` encerra.

## Efeitos colaterais

> **Warning**
>
> **Atribuir uma equipe a um paciente encerra o vínculo vigente dele.** O vínculo anterior é
> fechado com a data e hora da chamada, sem aviso na resposta.

> **Warning**
>
> **Atualizar a equipe remove quem não foi enviado.** A composição enviada substitui a
> existente, par a par (profissional + especialidade).

> **Warning**
>
> **Atribuir uma equipe pelos profissionais pode criar uma equipe nova.** Sem uma equipe cuja
> composição case exatamente com a enviada, uma é criada — e passa a existir no cadastro de
> equipes da unidade.

> **Note**
>
> Este endpoint não remove equipes nem vínculos: a escrita nunca responde `204`. O que existe é
> o encerramento do vínculo, por `status: inactive`, e ele preserva o registro no histórico do
> paciente.

## Erros

Recusa é `400`, e o corpo é um `OperationOutcome`: `issue[].expression` aponta o campo culpado
e `issue[].details.text` explica o motivo. O outro código que este endpoint devolve é `429`.

| `code`      | `expression`                    | Mensagem                                                         | Quando                                                                                                                |
| ----------- | ------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `structure` | `CareTeam.participant`          | `participant of the CareTeam is required`                        | A chave `participant` está ausente do payload                                                                         |
| `structure` | `CareTeam.participant.member`   | `Members of the Care Team must be Practitioners`                 | Na escrita da equipe, um `member` sem `type` ou com `type` diferente de `Practitioner`                                |
| `structure` | `CareTeam.participant.role`     | `The role of Practitioners is required`                          | Na escrita da equipe, um participante sem `role`                                                                      |
| `structure` | `CareTeam.participant.role`     | `BOC code … does not exist or it is not mapped`                  | Código CBO não mapeado para uma especialidade                                                                         |
| `structure` | `CareTeam.participant.role`     | `SNOMED code … does not exist or it is not mapped`               | Idem, em SNOMED CT                                                                                                    |
| `structure` | `CareTeam.participant`          | `Practitioner with identifier … does not exist or is not active` | O identificador do profissional não resolve, ou o profissional está inativo                                           |
| `structure` | `CareTeam.participant`          | `Practitioner with nilo identifier does not exist`               | O profissional existe no store mas não tem identificador Nilo                                                         |
| `structure` | `CareTeam.participant`          | `Participant not found.`                                         | O profissional tem identificador Nilo, mas o cadastro não foi encontrado                                              |
| `structure` | `CareTeam.participant`          | `Professional … not found in any Care Unit`                      | O profissional não pertence à unidade de cuidado da equipe                                                            |
| `structure` | `CareTeam.participant`          | `CareTeam … does not exist or is not active`                     | No vínculo, a equipe apontada existe no store mas o cadastro dela não                                                 |
| `structure` | `CareTeam.participant.member`   | `Only Practitioner and CareTeam is a type supported`             | No vínculo, um `member.type` fora desses dois                                                                         |
| `structure` | `CareTeam.participant.member`   | `Many Participant must be practitioners`                         | No vínculo com mais de um participante, algum não é `Practitioner`                                                    |
| `structure` | `CareTeam.managingOrganization` | `Managing organization not found.`                               | A unidade informada não existe, ou não há unidade padrão configurada                                                  |
| `structure` | `CareTeam.subject.type`         | `Subject type must be Patient`                                   | `subject.type` diferente de `Patient`                                                                                 |
| `structure` | `CareTeam.subject`              | `Patient with identifier … does not exist or is not active`      | O identificador do paciente não resolve                                                                               |
| `structure` | `CareTeam.subject`              | `Patient with nilo identifier does not exist`                    | O paciente existe no store mas não tem identificador Nilo                                                             |
| `structure` | `CareTeam.subject`              | `Patient not found`                                              | O identificador Nilo do paciente está presente mas vazio                                                              |
| `structure` | `CareTeam.subject`              | `Subject not found.`                                             | O paciente tem identificador Nilo, mas o cadastro não foi encontrado                                                  |
| `structure` | `CareTeam.subject`              | `Subject does not belongs to this managing organization.`        | O paciente não pertence à unidade de cuidado da equipe                                                                |
| `structure` | `CareTeam.subject`              | `This patient already belongs to an unfinished care team`        | O paciente tem vínculo em aberto que o encerramento automático não resolveu                                           |
| `structure` | `CareTeam.period`               | `period.end should not be used when status is active`            | `period.end` enviado com `status: active`                                                                             |
| `structure` | `CareTeam.period`               | `period.end should be less than now`                             | `period.end` no futuro                                                                                                |
| `structure` | `CareTeam.status`               | `The given period is inconsistent with status …`                 | Período vigente marcado como `inactive`, ou o contrário                                                               |
| `exception` | —                               | `TypeError: 'NoneType' object is not iterable`                   | Um item de `role` sem `coding` (só com `text`), ou, no vínculo composto por profissionais, um participante sem `role` |
| `exception` | —                               | `AttributeError: 'NoneType' object has no attribute …`           | O `subject`, ou a equipe apontada no `participant` de um vínculo, não casa com nenhum recurso                         |

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

**`Resposta 400 — Profissional fora da unidade de cuidado`**

```json title="Resposta 400 — Profissional fora da unidade de cuidado"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "structure",
      "expression": [
        "CareTeam.participant"
      ],
      "details": {
        "text": "Professional https://www.acmesaude.com.br/integracao/profissional/|1111 not found in any Care Unit"
      }
    }
  ]
}
```

> **Warning**
>
> **As duas últimas linhas da tabela não são validações — são falhas não tratadas**, e a segunda é
> o caso comum de identificador errado, não uma raridade. O `400` sai com `code: exception`, sem
> `expression`, e com uma mensagem de erro de linguagem em vez de uma explicação do campo. As
> mensagens específicas de paciente e de equipe inexistentes estão na tabela porque o código as
> produz, mas elas dependem de o repositório de recursos responder "não encontrado" — quando o
> identificador apenas não casa com nada, o que você recebe é o `exception`.
>
> Nenhuma das duas é contrato: não tente interpretá-las. Trate `code: exception` como "payload
> recusado, motivo não classificado", e confira os identificadores enviados.

### Limite de escrita

As escritas deste recurso podem ser limitadas por janela de tempo, para todo o seu ambiente.
Atingido o limite, a resposta é `429` com o `code` `throttled` e o tempo de espera na
mensagem — aguarde e repita.

O limite vigente é definido na implantação, e pode estar desligado. Se você vai fazer uma carga
em volume, confirme com o Suporte qual é o teto do seu ambiente antes de dimensionar.