Procedimento

Um procedimento aqui é uma cirurgia do paciente: o que foi feito, por quem, onde e em que período. No Nilo Care ele aparece na linha de eventos da ficha do paciente, ao lado das hospitalizações e dos atendimentos; o card da linha mostra Procedimento, Profissional e as datas, e o detalhe da cirurgia mostra também Lateralidade, Endereço, Data de entrada, Data de saída, Horário, Duração e Informações adicionais.

No FHIR o recurso é o Procedure, e esta integração o usa nas duas pontas: registrar uma cirurgia e consultar as que o paciente tem.

O procedimento é identificado por um código de tabela — TUSS ou Tabela SUS —, e o código enviado precisa existir no catálogo da plataforma. É a recusa mais comum deste recurso; veja Valores aceitos.

Campos

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

CampoObrigatórioO que significaNo Nilo Care
resourceTypesimConstante Procedure
identifiersimSuas chaves do procedimento. É por elas que a API decide entre criar e atualizar
statussimExigido pelo FHIR. É gravado como você enviar e não é conferido contra o período. Envie completed
code.coding[0].systemsimA tabela do código: TUSS ou Tabela SUSSistema de codificação
code.coding[0].codesimO código do procedimento na tabela informadaProcedimento
subject.identifiersimO paciente, por um identificador delePaciente
performer[0].actor.identifiersimO profissional que realizou o procedimentoProfissional do procedimento, no formulário; Profissional, no detalhe
location.displaysimOnde foi feito, em texto livre, com no máximo 500 caracteresEndereço
performedPeriod.startsimInício do procedimentoData de entrada · Horário
performedPeriod.endsimFim do procedimentoData de saída · Duração
bodySite[0].coding[0].codenãoLateralidade, num dos três códigos aceitosLateralidade
note[]nãoInformações adicionaisInformações adicionais
id · metanãoSó resposta: identificador Nilo FHIR do procedimento e metadados da gravação

Nove campos são obrigatórios: resourceType, identifier, status, code, subject, performer, location e os dois extremos de performedPeriod. Confira a lista acima antes de enviar.

Os dois que o próprio FHIR exige — status e subject — são recusados com o caminho do campo em expression. Os outros sete não: a recusa vem com uma mensagem genérica, em inglês, sem apontar o campo. Veja Erros.

status não é conferido contra o período

O status que você envia é gravado e devolvido como veio — a plataforma não o valida contra o performedPeriod. Mandando completed num procedimento marcado para o mês que vem, é completed que a leitura devolve.

A plataforma tem o seu próprio cálculo, a partir do período: preparation antes do início, in-progress durante, completed depois do fim. Mas ele só vale do lado dela, e só chega ao recurso quando a equipe edita o procedimento no Nilo Care — nesse momento o valor calculado substitui o seu.

Consequência prática: status não é uma fonte confiável para saber se o procedimento já aconteceu. Num procedimento vindo de integração ele é o que você mandou; num editado pela equipe é o que valia no momento daquela edição, e nunca é recalculado depois.

Para saber se já aconteceu, compare o performedPeriod com a data de hoje do seu lado.

Se você mandar not-done, on-hold, stopped ou entered-in-error, o valor é gravado e devolvido — mas ele não significa nada para a plataforma: o procedimento aparece na ficha do paciente do mesmo jeito, e a equipe não vê nenhuma marca de cancelamento. Não há como registrar um procedimento cancelado por esta API.

Campos que a Nilo não usa

O Procedure canônico traz muito mais do que esta integração lê: basedOn, partOf, statusReason, category, encounter, performedDateTime, recorder, asserter, reasonCode, reasonReference, outcome, report, complication, followUp, focalDevice, usedReference e usedCode. Dentro de performer, também function e onBehalfOf. Nenhum deles é lido, e por isso nenhum aparece na referência do recurso.

Dois merecem aviso, porque é natural mandá-los:

  • category — o Procedure do FHIR costuma vir com uma categoria SNOMED (Surgical procedure). Aqui ela é aceita e não significa nada: quem classifica o procedimento é o code.
  • performedDateTime — só o performedPeriod é lido. Um procedimento enviado com performedDateTime é recusado por falta de período.

A referência lista só os campos suportados, e é assim que ela deve ser lida: o que mandar na escrita. A API em si é mais tolerante — o que você mandar a mais fica guardado no recurso e volta nas leituras seguintes, sem nunca ter significado nada para a plataforma. Se o seu validador for estrito contra a referência, uma resposta assim vai parecer inválida; o remédio é não enviá-los.

Cadastrar ou atualizar

POST
/fhir/resources/Procedure
1curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Procedure \
2 -H "x-api-key: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "resourceType": "Procedure",
6 "identifier": [
7 {
8 "system": "https://www.acmesaude.com.br/integracao/procedimento/",
9 "value": "55162",
10 "use": "usual"
11 }
12 ],
13 "status": "completed",
14 "code": {
15 "coding": [
16 {
17 "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
18 "code": "20103182"
19 }
20 ]
21 },
22 "subject": {
23 "identifier": {
24 "system": "https://www.acmesaude.com.br/integracao/paciente/",
25 "value": "507823709",
26 "use": "usual"
27 },
28 "type": "Patient"
29 },
30 "performer": [
31 {
32 "actor": {
33 "identifier": {
34 "system": "https://www.acmesaude.com.br/integracao/profissional/",
35 "value": "5032932",
36 "use": "usual"
37 },
38 "type": "Practitioner"
39 }
40 }
41 ],
42 "location": {
43 "display": "Hospital Central Acme"
44 },
45 "performedPeriod": {
46 "end": "2026-04-16T20:30:00+00:00",
47 "start": "2026-04-16T17:00:00+00:00"
48 },
49 "bodySite": [
50 {
51 "coding": [
52 {
53 "code": "24028007",
54 "system": "http://snomed.info/sct"
55 }
56 ]
57 }
58 ],
59 "note": [
60 {
61 "text": "Paciente em jejum desde as 22h."
62 }
63 ]
64}'

A resposta é o recurso gravado, sem envelope:

Response
1{
2 "resourceType": "Procedure",
3 "identifier": [
4 {
5 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
6 "value": "31805",
7 "use": "usual"
8 },
9 {
10 "system": "https://www.acmesaude.com.br/integracao/procedimento/",
11 "value": "55162",
12 "use": "usual"
13 }
14 ],
15 "status": "completed",
16 "code": {
17 "coding": [
18 {
19 "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
20 "code": "20103182"
21 }
22 ]
23 },
24 "subject": {
25 "identifier": {
26 "system": "https://www.acmesaude.com.br/integracao/paciente/",
27 "value": "507823709",
28 "use": "usual"
29 },
30 "type": "Patient"
31 },
32 "performer": [
33 {
34 "actor": {
35 "identifier": {
36 "system": "https://www.acmesaude.com.br/integracao/profissional/",
37 "value": "5032932",
38 "use": "usual"
39 },
40 "type": "Practitioner"
41 }
42 }
43 ],
44 "location": {
45 "display": "Hospital Central Acme"
46 },
47 "performedPeriod": {
48 "end": "2026-04-16T20:30:00+00:00",
49 "start": "2026-04-16T17:00:00+00:00"
50 },
51 "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
52 "meta": {
53 "lastUpdated": "2026-04-16T20:35:12.441000Z",
54 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
55 },
56 "bodySite": [
57 {
58 "coding": [
59 {
60 "code": "24028007",
61 "system": "http://snomed.info/sct"
62 }
63 ]
64 }
65 ],
66 "note": [
67 {
68 "text": "Paciente em jejum desde as 22h."
69 }
70 ]
71}

Guarde o id: é por ele que se faz a leitura direta. Ao lado do seu identifier, a resposta traz o identificador Nilo do procedimento, no system …/NamingSystem/hippocrates-api--patient-surgery.

O mesmo POST cria e atualiza. Reenviando um identifier que já corresponde a um procedimento, ele é atualizado.

Reenvie o recurso inteiro em toda atualização. O que você omitir é apagado do Nilo Care: um POST de atualização sem note limpa as informações adicionais na ficha, e sem bodySite limpa a lateralidade.

E o pior é que você não vê isso na leitura: do lado FHIR, o campo omitido é preservado, e a consulta continua devolvendo o valor antigo — um valor que a equipe já não vê. Depois de uma atualização parcial, o recurso e a ficha do paciente ficam divergentes, e a API mostra a versão desatualizada.

O procedimento

O código vai em code.coding[0], e só o primeiro item da lista é lido:

1"code": {
2 "coding": [
3 {
4 "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
5 "code": "20103182"
6 }
7 ]
8}
POST
/fhir/resources/Procedure
1curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Procedure \
2 -H "x-api-key: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "resourceType": "Procedure",
6 "identifier": [
7 {
8 "system": "https://www.acmesaude.com.br/integracao/procedimento/",
9 "value": "55163",
10 "use": "usual"
11 }
12 ],
13 "status": "completed",
14 "code": {
15 "coding": [
16 {
17 "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
18 "code": "0301010032"
19 }
20 ]
21 },
22 "subject": {
23 "identifier": {
24 "system": "https://www.acmesaude.com.br/integracao/paciente/",
25 "value": "507823709",
26 "use": "usual"
27 },
28 "type": "Patient"
29 },
30 "performer": [
31 {
32 "actor": {
33 "identifier": {
34 "system": "https://www.acmesaude.com.br/integracao/profissional/",
35 "value": "5032932",
36 "use": "usual"
37 },
38 "type": "Practitioner"
39 }
40 }
41 ],
42 "location": {
43 "display": "Hospital Público Municipal"
44 },
45 "performedPeriod": {
46 "end": "2026-05-04T15:20:00+00:00",
47 "start": "2026-05-04T12:00:00+00:00"
48 }
49}'

O display que você mandar é guardado e devolvido como veio — mas não significa nada: quem identifica o procedimento é o par system + code. O nome do catálogo é o que a equipe vê na tela, e ele só aparece no recurso quando o procedimento é criado ou editado dentro do Nilo Care.

Ou seja: o display de um procedimento que você criou é o seu texto, não o da plataforma. Não o use para conferir se o código foi entendido — para isso, olhe se a chamada foi aceita.

O local

O local é texto livre, em location.display:

1"location": { "display": "Hospital Central Acme" }

Por compatibilidade, um location.identifier apontando para um local de atendimento já cadastrado também é aceito, e o nome daquele local é o que a equipe passa a ver na ficha. Não há vínculo: alterar o local depois não muda o que ficou no procedimento.

Mas atenção: mandando identifier, é identifier que a leitura devolve — o display não é preenchido a partir dele. Quem consome o recurso não encontra o nome do local em lugar nenhum. Por isso, prefira display; ou mande os dois.

Ao contrário do que acontece nos eventos, aqui o location é obrigatório. Um procedimento sem local é recusado.

As informações adicionais

Os itens de note[] voltam na leitura como você os enviou: três notas enviadas, três notas lidas.

Do lado do Nilo Care, porém, elas viram um texto só, com quebras de linha entre os itens — é assim que a equipe as vê no campo Informações adicionais. A separação em itens existe no recurso, não na ficha.

Na tela, o rótulo do campo é Informações adicionais (uso interno da equipe de cuidado). O texto não é mostrado ao paciente.

Buscar

GET
/fhir/resources/Procedure
1curl -G https://landing-zone-api.nilo.services/fhir/resources/Procedure \
2 -H "x-api-key: <apiKey>" \
3 -d _count=50 \
4 -d _lastUpdated=eq2013-01-14 \
5 --data-urlencode _page_token=Cjj3YopYuf%2F%2F%2F%2F%2BABd%2BbgE0m...dSANQAFoLCUSM7w9VYUqaEANglLWUugQ%3D \
6 --data-urlencode code=https://fhir.ans.gov.br/CodeSystem/tuss-63|20103182 \
7 -d date=ge2026-01-01 \
8 --data-urlencode identifier=https://www.acmesaude.com.br/integracao/procedimento/|55162 \
9 --data-urlencode patient=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
10 --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
11 --data-urlencode performer=Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19 \
12 --data-urlencode performer:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
13 -d status=completed \
14 --data-urlencode subject=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4

A resposta é sempre um Bundle do tipo searchset:

Response
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [
5 {
6 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
7 "resource": {
8 "resourceType": "Procedure",
9 "identifier": [
10 {
11 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
12 "value": "31805",
13 "use": "usual"
14 },
15 {
16 "system": "https://www.acmesaude.com.br/integracao/procedimento/",
17 "value": "55162",
18 "use": "usual"
19 }
20 ],
21 "status": "completed",
22 "code": {
23 "coding": [
24 {
25 "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
26 "code": "20103182"
27 }
28 ]
29 },
30 "subject": {
31 "identifier": {
32 "system": "https://www.acmesaude.com.br/integracao/paciente/",
33 "value": "507823709",
34 "use": "usual"
35 },
36 "type": "Patient"
37 },
38 "performer": [
39 {
40 "actor": {
41 "identifier": {
42 "system": "https://www.acmesaude.com.br/integracao/profissional/",
43 "value": "5032932",
44 "use": "usual"
45 },
46 "type": "Practitioner"
47 }
48 }
49 ],
50 "location": {
51 "display": "Hospital Central Acme"
52 },
53 "performedPeriod": {
54 "end": "2026-04-16T20:30:00+00:00",
55 "start": "2026-04-16T17:00:00+00:00"
56 },
57 "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
58 "meta": {
59 "lastUpdated": "2026-04-16T20:35:12.441000Z",
60 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
61 },
62 "bodySite": [
63 {
64 "coding": [
65 {
66 "code": "24028007",
67 "system": "http://snomed.info/sct"
68 }
69 ]
70 }
71 ],
72 "note": [
73 {
74 "text": "Paciente em jejum desde as 22h."
75 }
76 ]
77 },
78 "search": {
79 "mode": "match"
80 }
81 },
82 {
83 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/e0416b93-8c27-4fd5-a1b6-25907dc4e83f",
84 "resource": {
85 "resourceType": "Procedure",
86 "identifier": [
87 {
88 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
89 "value": "31806",
90 "use": "usual"
91 }
92 ],
93 "status": "completed",
94 "code": {
95 "coding": [
96 {
97 "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
98 "code": "0301010032",
99 "display": "Procedimento cirúrgico"
100 }
101 ]
102 },
103 "subject": {
104 "identifier": {
105 "system": "https://www.acmesaude.com.br/integracao/paciente/",
106 "value": "507823709",
107 "use": "usual"
108 },
109 "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4",
110 "type": "Patient"
111 },
112 "performer": [
113 {
114 "actor": {
115 "identifier": {
116 "system": "https://www.acmesaude.com.br/integracao/profissional/",
117 "value": "5032932",
118 "use": "usual"
119 },
120 "reference": "Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19",
121 "type": "Practitioner"
122 }
123 }
124 ],
125 "location": {
126 "display": "Hospital Público Municipal"
127 },
128 "performedPeriod": {
129 "end": "2026-05-02T11:00:00+00:00",
130 "start": "2026-05-02T08:00:00+00:00"
131 },
132 "id": "e0416b93-8c27-4fd5-a1b6-25907dc4e83f",
133 "meta": {
134 "lastUpdated": "2026-05-02T11:14:38.207000Z",
135 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM3Mg"
136 },
137 "note": [
138 {
139 "text": "Paciente em jejum desde as 22h.\nAcompanhante presente."
140 }
141 ]
142 },
143 "search": {
144 "mode": "match"
145 }
146 }
147 ],
148 "link": []
149}

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

Response
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [],
5 "link": []
6}

A busca devolve mais do que cirurgias

GET /fhir/resources/Procedure não devolve só cirurgias. Uma conduta registrada num atendimento cujo desfecho seja resultado de exame também é gravada como Procedure, e aparece na mesma busca — inclusive num filtro por paciente.

Esses recursos são fáceis de reconhecer: eles não têm code, performer, location nem performedPeriod, trazem um category SNOMED e o identificador deles está num system próprio de conduta. Se a sua integração só trata cirurgias, filtre pela presença de performedPeriod.

E há uma armadilha na escrita: se o identifier que você enviar casar com um desses recursos, o POST falha com uma mensagem sobre não encontrar o identificador de cirurgia. Use chaves suas, num system seu, e o problema não aparece.

Parâmetros de busca suportados

NomeTipoDescriçãoExpressão
identifiertokenIdentificador do procedimento, em system|valueProcedure.identifier
patient · subjectreferencePaciente, pelo id Nilo FHIR deleProcedure.subject
patient:identifier · subject:identifierreferencePaciente, pelo identificador deleProcedure.subject.identifier
performerreferenceProfissional, pelo id Nilo FHIR deleProcedure.performer.actor
performer:identifierreferenceProfissional, pelo identificador deleProcedure.performer.actor.identifier
codetokenCódigo do procedimento, em system|codeProcedure.code
datedateData do procedimento, com os prefixos eq, ge, leProcedure.performed
statustokenSituação calculada — veja o aviso abaixoProcedure.status
_lastUpdateddateData da última gravação no store, com os prefixos eq, ge, le

Prefira as formas :identifier. Um procedimento criado por integração guarda a referência do paciente e a do profissional como você as mandou — só com identifier, sem o campo reference. E é justamente em reference que patient=Patient/{id} e performer=Practitioner/{id} procuram.

Essas duas formas só encontram os procedimentos originados no Nilo Care, ou os que já foram editados por lá depois de criados por você. Para uma busca previsível, use patient:identifier e performer:identifier.

Buscar por status não recorta por tempo. O valor gravado é o que você mandou — ou, nos procedimentos vindos do Nilo Care, o que valia quando a equipe os editou. Ele não é recalculado. Para recortar por tempo, use date.

Os demais parâmetros canônicos do Procedure existem e não encontram nada aqui, porque a Nilo não preenche o campo correspondente: based-on, encounter, instantiates-canonical, instantiates-uri, part-of, reason-code, reason-reference e subject:Group.

location é o caso curioso: o parâmetro canônico procura por referência, e o local recomendado é texto em display — que não é encontrável. Se você mandou location.identifier, aí sim location:identifier encontra o procedimento. Não há como buscar pelo nome do local.

E category encontra algo, mas não o que você espera — veja o aviso logo abaixo.

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/Procedure/:id
1curl https://landing-zone-api.nilo.services/fhir/resources/Procedure/id \
2 -H "x-api-key: <apiKey>"

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

Response
1{
2 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
3 "resource": {
4 "resourceType": "Procedure",
5 "identifier": [
6 {
7 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
8 "value": "31805",
9 "use": "usual"
10 },
11 {
12 "system": "https://www.acmesaude.com.br/integracao/procedimento/",
13 "value": "55162",
14 "use": "usual"
15 }
16 ],
17 "status": "completed",
18 "code": {
19 "coding": [
20 {
21 "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
22 "code": "20103182"
23 }
24 ]
25 },
26 "subject": {
27 "identifier": {
28 "system": "https://www.acmesaude.com.br/integracao/paciente/",
29 "value": "507823709",
30 "use": "usual"
31 },
32 "type": "Patient"
33 },
34 "performer": [
35 {
36 "actor": {
37 "identifier": {
38 "system": "https://www.acmesaude.com.br/integracao/profissional/",
39 "value": "5032932",
40 "use": "usual"
41 },
42 "type": "Practitioner"
43 }
44 }
45 ],
46 "location": {
47 "display": "Hospital Central Acme"
48 },
49 "performedPeriod": {
50 "end": "2026-04-16T20:30:00+00:00",
51 "start": "2026-04-16T17:00:00+00:00"
52 },
53 "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
54 "meta": {
55 "lastUpdated": "2026-04-16T20:35:12.441000Z",
56 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
57 },
58 "note": [
59 {
60 "text": "Paciente em jejum desde as 22h."
61 }
62 ]
63 },
64 "search": {
65 "mode": "match"
66 }
67}

Valores aceitos

code.coding[0].system

Dois, e só dois:

TabelasystemExemplo de code
TUSShttps://fhir.ans.gov.br/CodeSystem/tuss-6320103182
Tabela SUShttps://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS0301010032

Qualquer outro system recusa a chamada. E o code precisa existir no catálogo da plataforma naquela tabela: um código TUSS válido mas não cadastrado é recusado do mesmo jeito.

O catálogo de procedimentos é único da plataforma, não do seu ambiente, e não é publicado por esta API. Se um código que você usa não é aceito, ele não consta desse catálogo — fale com o Suporte.

bodySite[0].coding[0].code

Três códigos SNOMED, e o campo guarda lateralidade, não sítio anatômico:

CódigoLateralidade
24028007Direito
7771000Esquerdo
51440002Bilateral

Qualquer outro código recusa a chamada — inclusive um código SNOMED de sítio anatômico legítimo. Não há como registrar onde no corpo o procedimento foi feito.

status

A plataforma só produz três: preparation, in-progress e completed. Mas o valor que você manda é gravado como veio, qualquer que seja — e sem efeito. Veja status não é conferido contra o período.

Efeitos colaterais

Registrar um procedimento não cria atendimento nem notifica o paciente. Ele entra apenas na linha de eventos da ficha.

Dois campos da ficha são preenchidos pela integração e não podem ser escolhidos por você: o procedimento entra sempre marcado como referido por outros, e com todas as atividades de diretriz habilitadas — a pergunta que o formulário do Nilo Care faz sobre quais atividades serão necessárias. Para mudar qualquer um dos dois, a equipe precisa editar o procedimento na tela.

Este endpoint nunca responde 204: não há remoção de procedimento por integração. Apagar uma cirurgia é ação da equipe no Nilo Care — e, feita por lá, o id que você já leu passa a responder 404.

Erros

Recusa é 400, e o corpo é um OperationOutcome.

As recusas vêm de dois lugares, e têm formas diferentes:

  • Forma do payload — campo que o próprio FHIR exige (status, subject), tipo inválido, valor fora do formato. Vem com code: structure e o caminho do campo em expression.
  • Regra de negócio — tudo o mais desta página. Vem com code: exception, sem expression, e a única pista é a mensagem em details.text.

As mensagens da segunda lista são texto de erro de linguagem, em inglês, e não são contrato. Não as interprete programaticamente: trate code: exception como “payload recusado” e confira a lista de obrigatórios.

Mensagem em details.textQuando
ValueError: Identifier is mandatoryO payload não tem identifier
ValueError: Could not find Patient in subjectO subject.identifier não resolve para um paciente do seu ambiente
ValueError: performer.actor is mandatoryNão há performer, ou o primeiro item não tem actor
ValueError: Could not find Professional in performerO performer[0].actor.identifier não resolve para um profissional do seu ambiente
ValueError: location is mandatoryO payload não tem location
ValueError: Could not find HealthFacility in locationO location veio só com identifier, e ele não resolveu
ValueError: code.coding is mandatoryNão há code, ou ele não tem coding
ValueError: code.coding.system must be …O system do código não é TUSS nem Tabela SUS
ValueError: Could not find MedicalProcedure with code …O código não existe no catálogo da plataforma
ValueError: Unsupported laterality code …O bodySite traz um código fora dos três aceitos
ValueError: performedPeriod is mandatoryO payload não tem performedPeriod
ValueError: Both performedPeriod.start and performedPeriod.end are mandatoryO período veio sem início ou sem fim
ValueError: Too many matches for …Os identificadores enviados casam com mais de um procedimento já gravado
ValueError: Could not find … identifier for Procedure …O identifier enviado casa com um recurso que não é uma cirurgia — veja o aviso sobre condutas em Buscar
Response
1{
2 "issue": [
3 {
4 "code": "exception",
5 "details": {
6 "text": "ValueError: Could not find MedicalProcedure with code 20103182"
7 },
8 "severity": "error"
9 }
10 ],
11 "resourceType": "OperationOutcome"
12}

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

429

Este recurso pode ter limite de escrita, conforme a configuração do ambiente. Havendo limite e estourando-o, a chamada responde 429 com code: throttled, e a mensagem informa quantos segundos esperar. Repita depois desse tempo — nada foi gravado.