> 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.

# Gestação

> Registrar, atualizar e encerrar a gestação de uma paciente no padrão FHIR Observation, com DUM, risco, tipo e data do parto.

A gestação é o acompanhamento pré-natal da paciente na Nilo: quando começou, o risco, se é
única ou múltipla, e como terminou — em parto ou em aborto. Cada paciente tem no máximo
**uma gestação em curso** por vez.

No FHIR ela é uma [`Observation`](https://hl7.org/fhir/R4/observation.html) com o código LOINC
`82810-3` (*Pregnancy status*). É **uma observação só por gestação**, não uma por dado: o
status vai em `valueCodeableConcept`, e DUM, DPP, data do parto, risco e tipo vão cada um num
`component` da mesma observação.

> **Note**
>
> A gestação é, hoje, o único tipo de `Observation` que a Nilo aceita. O endpoint é genérico,
> mas um `code` sem o LOINC `82810-3` é recusado com `not-supported` — não há como gravar
> sinais vitais, resultados de exame ou outras observações por aqui.

## Campos

| Campo                   | Obrigatório        | O que significa                                                                                                        |
| ----------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| `identifier`            | **sim** na prática | Chaves da gestação. É por aqui que a API decide entre criar e atualizar                                                |
| `status`                | **sim**            | Status do **registro**, não da gestação: `final`, `amended`, `corrected` ou `preliminary`. Na leitura é sempre `final` |
| `code`                  | **sim**            | O tipo de observação: um `coding` `http://loinc.org` com `82810-3`, em qualquer posição                                |
| `subject`               | **sim**            | A paciente, por um identificador dela já cadastrado                                                                    |
| `valueCodeableConcept`  | **sim**            | O status da gestação — veja [Catálogos](#catálogos)                                                                    |
| `effectivePeriod.start` | não                | Na escrita, a DUM quando o `component` `8665-2` não vem. Na leitura, veja [Datas](#datas)                              |
| `effectivePeriod.end`   | não                | Data de encerramento. Recusado em `prenatal`                                                                           |
| `component` `8665-2`    | não                | DUM (*Last menstrual period start date*), em `valueDateTime`                                                           |
| `component` `11778-8`   | não                | DPP (*Delivery date Estimated*). Só resposta: calculada pela plataforma a partir da DUM                                |
| `component` `93857-1`   | não                | Data do parto (*Date and time of obstetric delivery*), em `valueDateTime`                                              |
| `component` `risk`      | não                | Risco da gestação, em `valueCodeableConcept`. O `code` é `risk` no `system` `…/CodeSystem/pregnancy-observation`       |
| `component` `57722-1`   | não                | Tipo da gestação (*Birth plurality of Pregnancy*), em `valueCodeableConcept`                                           |
| `id`                    | não                | Só resposta: o identificador Nilo FHIR do recurso                                                                      |
| `meta`                  | não                | Só resposta: metadados da gravação                                                                                     |

Os `component` são reconhecidos pelo `code`, não pela posição na lista, e a ordem em que você
os manda não importa.

### Campos que a Nilo não usa

A `Observation` canônica tem campos que esta integração não lê nem grava: `basedOn`,
`partOf`, `category`, `focus`, `encounter`, `issued`, `performer`, `dataAbsentReason`,
`interpretation`, `note`, `bodySite`, `method`, `specimen`, `device`, `referenceRange`,
`hasMember`, `derivedFrom` e todo `value[x]` que não seja `valueCodeableConcept`. Ficam fora da
referência de propósito. O servidor os aceita, guarda no recurso FHIR e devolve nas leituras
seguintes, mas nada na plataforma passa a usá-los.

`effectiveDateTime`, `effectiveInstant` e `effectiveTiming` são diferentes: eles não são
ignorados, são **recusados**. O único `effective[x]` aceito é `effectivePeriod`.

> **Note**
>
> Um `component` com um `code` que não está na tabela acima não é erro: é ignorado na escrita e
> **some** do recurso na regravação. O mesmo vale para a DPP que você enviar — ela não é lida, e a
> leitura traz a que a plataforma calculou.

## Catálogos

Os três catálogos da gestação são da Nilo, e o `system` de cada um é
`{host}/fhir/resources/CodeSystem/<nome>`.

### Status

O status vai em `valueCodeableConcept`, num `coding` com o `system`
`{host}/fhir/resources/CodeSystem/pregnancy-status`. Ele é **obrigatório**: sem esse `coding`,
a escrita é recusada, mesmo que venha um LOINC.

| Código       | Significado          | LOINC aceito junto (opcional) |
| ------------ | -------------------- | ----------------------------- |
| `prenatal`   | Gestação em curso    | `LA15173-0` (*Pregnant*)      |
| `postpartum` | Encerrada por parto  | `LA26683-5` (*Not pregnant*)  |
| `abortion`   | Encerrada por aborto | `LA26683-5` (*Not pregnant*)  |

O `coding` LOINC no `system` `http://loinc.org` é opcional. Se vier, tem de concordar com o
status da Nilo pela tabela acima; um LOINC que contradiz o status é recusado com
`business-rule`, e um LOINC fora desses dois códigos, com `code-invalid`. Na leitura, os dois
`coding` vêm sempre.

### Risco

`component` com o `code` `risk` no `system` `{host}/fhir/resources/CodeSystem/pregnancy-observation`,
e o valor em `valueCodeableConcept` no `system` `{host}/fhir/resources/CodeSystem/pregnancy-risk`:

| Código     | Significado    |
| ---------- | -------------- |
| `low`      | Risco baixo    |
| `moderate` | Risco moderado |
| `high`     | Risco alto     |

### Tipo

`component` com o `code` LOINC `57722-1`, e o valor em `valueCodeableConcept` no `system`
`{host}/fhir/resources/CodeSystem/pregnancy-type`:

| Código            | Significado        |
| ----------------- | ------------------ |
| `singleton`       | Gestação única     |
| `twins`           | Gemelar            |
| `triplet_or_more` | Trigemelar ou mais |

> **Note**
>
> Esses catálogos são fixos e estão completos nesta página. Ao contrário do `flag-code`, eles
> **não** são servidos por `GET /fhir/resources/CodeSystem/{nome}` — veja
> [Catálogo de códigos](/guia/recursos/codesystem).

## Cadastrar ou atualizar

Não há endpoint separado para criar e atualizar. O mesmo `POST` faz os dois, e quem decide é
o `identifier`: se já existir uma gestação com aquele par `system` + `value`, ela é
atualizada; se não existir, é criada.

### Request

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

**`Gestação em curso`**

```curl Gestação em curso
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Observation \
     -H "x-api-key: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "code": {
    "coding": [
      {
        "code": "82810-3",
        "display": "Pregnancy status",
        "system": "http://loinc.org"
      }
    ]
  },
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "code": "prenatal",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
      },
      {
        "code": "LA15173-0",
        "display": "Pregnant",
        "system": "http://loinc.org"
      }
    ]
  },
  "component": [
    {
      "code": {
        "coding": [
          {
            "code": "8665-2",
            "display": "Last menstrual period start date",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueDateTime": "2026-03-01"
    },
    {
      "code": {
        "coding": [
          {
            "code": "risk",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "high",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
          }
        ]
      }
    },
    {
      "code": {
        "coding": [
          {
            "code": "57722-1",
            "display": "Birth plurality of Pregnancy",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "twins",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
          }
        ]
      }
    }
  ],
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318",
      "use": "usual"
    }
  ]
}'
```

**`Gestação em curso`**

```python Gestação em curso
import requests

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

payload = {
    "code": { "coding": [
            {
                "code": "82810-3",
                "display": "Pregnancy status",
                "system": "http://loinc.org"
            }
        ] },
    "resourceType": "Observation",
    "status": "final",
    "subject": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
        },
        "type": "Patient"
    },
    "valueCodeableConcept": { "coding": [
            {
                "code": "prenatal",
                "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
            },
            {
                "code": "LA15173-0",
                "display": "Pregnant",
                "system": "http://loinc.org"
            }
        ] },
    "component": [
        {
            "code": { "coding": [
                    {
                        "code": "8665-2",
                        "display": "Last menstrual period start date",
                        "system": "http://loinc.org"
                    }
                ] },
            "valueDateTime": "2026-03-01"
        },
        {
            "code": { "coding": [
                    {
                        "code": "risk",
                        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
                    }
                ] },
            "valueCodeableConcept": { "coding": [
                    {
                        "code": "high",
                        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
                    }
                ] }
        },
        {
            "code": { "coding": [
                    {
                        "code": "57722-1",
                        "display": "Birth plurality of Pregnancy",
                        "system": "http://loinc.org"
                    }
                ] },
            "valueCodeableConcept": { "coding": [
                    {
                        "code": "twins",
                        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
                    }
                ] }
        }
    ],
    "identifier": [
        {
            "system": "https://www.acmesaude.com.br/integracao/gestacao/",
            "value": "3318",
            "use": "usual"
        }
    ]
}
headers = {
    "x-api-key": "<apiKey>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

**`Gestação em curso`**

```javascript Gestação em curso
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Observation';
const options = {
  method: 'POST',
  headers: {'x-api-key': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"code":{"coding":[{"code":"82810-3","display":"Pregnancy status","system":"http://loinc.org"}]},"resourceType":"Observation","status":"final","subject":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/paciente/","value":"507823709","use":"usual"},"type":"Patient"},"valueCodeableConcept":{"coding":[{"code":"prenatal","system":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"},{"code":"LA15173-0","display":"Pregnant","system":"http://loinc.org"}]},"component":[{"code":{"coding":[{"code":"8665-2","display":"Last menstrual period start date","system":"http://loinc.org"}]},"valueDateTime":"2026-03-01"},{"code":{"coding":[{"code":"risk","system":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"}]},"valueCodeableConcept":{"coding":[{"code":"high","system":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"}]}},{"code":{"coding":[{"code":"57722-1","display":"Birth plurality of Pregnancy","system":"http://loinc.org"}]},"valueCodeableConcept":{"coding":[{"code":"twins","system":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"}]}}],"identifier":[{"system":"https://www.acmesaude.com.br/integracao/gestacao/","value":"3318","use":"usual"}]}'
};

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

**`Gestação em curso`**

```go Gestação em curso
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"82810-3\",\n        \"display\": \"Pregnancy status\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"resourceType\": \"Observation\",\n  \"status\": \"final\",\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"valueCodeableConcept\": {\n    \"coding\": [\n      {\n        \"code\": \"prenatal\",\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status\"\n      },\n      {\n        \"code\": \"LA15173-0\",\n        \"display\": \"Pregnant\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"component\": [\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"8665-2\",\n            \"display\": \"Last menstrual period start date\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueDateTime\": \"2026-03-01\"\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"risk\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"high\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk\"\n          }\n        ]\n      }\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"57722-1\",\n            \"display\": \"Birth plurality of Pregnancy\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"twins\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type\"\n          }\n        ]\n      }\n    }\n  ],\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/gestacao/\",\n      \"value\": \"3318\",\n      \"use\": \"usual\"\n    }\n  ]\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))

}
```

**`Gestação em curso`**

```ruby Gestação em curso
require 'uri'
require 'net/http'

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

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  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"82810-3\",\n        \"display\": \"Pregnancy status\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"resourceType\": \"Observation\",\n  \"status\": \"final\",\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"valueCodeableConcept\": {\n    \"coding\": [\n      {\n        \"code\": \"prenatal\",\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status\"\n      },\n      {\n        \"code\": \"LA15173-0\",\n        \"display\": \"Pregnant\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"component\": [\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"8665-2\",\n            \"display\": \"Last menstrual period start date\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueDateTime\": \"2026-03-01\"\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"risk\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"high\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk\"\n          }\n        ]\n      }\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"57722-1\",\n            \"display\": \"Birth plurality of Pregnancy\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"twins\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type\"\n          }\n        ]\n      }\n    }\n  ],\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/gestacao/\",\n      \"value\": \"3318\",\n      \"use\": \"usual\"\n    }\n  ]\n}"

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

**`Gestação em curso`**

```java Gestação em curso
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/Observation")
  .header("x-api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"82810-3\",\n        \"display\": \"Pregnancy status\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"resourceType\": \"Observation\",\n  \"status\": \"final\",\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"valueCodeableConcept\": {\n    \"coding\": [\n      {\n        \"code\": \"prenatal\",\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status\"\n      },\n      {\n        \"code\": \"LA15173-0\",\n        \"display\": \"Pregnant\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"component\": [\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"8665-2\",\n            \"display\": \"Last menstrual period start date\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueDateTime\": \"2026-03-01\"\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"risk\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"high\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk\"\n          }\n        ]\n      }\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"57722-1\",\n            \"display\": \"Birth plurality of Pregnancy\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"twins\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type\"\n          }\n        ]\n      }\n    }\n  ],\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/gestacao/\",\n      \"value\": \"3318\",\n      \"use\": \"usual\"\n    }\n  ]\n}")
  .asString();
```

**`Gestação em curso`**

```php Gestação em curso
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://landing-zone-api.nilo.services/fhir/resources/Observation', [
  'body' => '{
  "code": {
    "coding": [
      {
        "code": "82810-3",
        "display": "Pregnancy status",
        "system": "http://loinc.org"
      }
    ]
  },
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "code": "prenatal",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
      },
      {
        "code": "LA15173-0",
        "display": "Pregnant",
        "system": "http://loinc.org"
      }
    ]
  },
  "component": [
    {
      "code": {
        "coding": [
          {
            "code": "8665-2",
            "display": "Last menstrual period start date",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueDateTime": "2026-03-01"
    },
    {
      "code": {
        "coding": [
          {
            "code": "risk",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "high",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
          }
        ]
      }
    },
    {
      "code": {
        "coding": [
          {
            "code": "57722-1",
            "display": "Birth plurality of Pregnancy",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "twins",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
          }
        ]
      }
    }
  ],
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318",
      "use": "usual"
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Gestação em curso`**

```csharp Gestação em curso
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Observation");
var request = new RestRequest(Method.POST);
request.AddHeader("x-api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"82810-3\",\n        \"display\": \"Pregnancy status\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"resourceType\": \"Observation\",\n  \"status\": \"final\",\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"valueCodeableConcept\": {\n    \"coding\": [\n      {\n        \"code\": \"prenatal\",\n        \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status\"\n      },\n      {\n        \"code\": \"LA15173-0\",\n        \"display\": \"Pregnant\",\n        \"system\": \"http://loinc.org\"\n      }\n    ]\n  },\n  \"component\": [\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"8665-2\",\n            \"display\": \"Last menstrual period start date\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueDateTime\": \"2026-03-01\"\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"risk\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"high\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk\"\n          }\n        ]\n      }\n    },\n    {\n      \"code\": {\n        \"coding\": [\n          {\n            \"code\": \"57722-1\",\n            \"display\": \"Birth plurality of Pregnancy\",\n            \"system\": \"http://loinc.org\"\n          }\n        ]\n      },\n      \"valueCodeableConcept\": {\n        \"coding\": [\n          {\n            \"code\": \"twins\",\n            \"system\": \"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type\"\n          }\n        ]\n      }\n    }\n  ],\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/gestacao/\",\n      \"value\": \"3318\",\n      \"use\": \"usual\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Gestação em curso`**

```swift Gestação em curso
import Foundation

let headers = [
  "x-api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "code": ["coding": [
      [
        "code": "82810-3",
        "display": "Pregnancy status",
        "system": "http://loinc.org"
      ]
    ]],
  "resourceType": "Observation",
  "status": "final",
  "subject": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    ],
    "type": "Patient"
  ],
  "valueCodeableConcept": ["coding": [
      [
        "code": "prenatal",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
      ],
      [
        "code": "LA15173-0",
        "display": "Pregnant",
        "system": "http://loinc.org"
      ]
    ]],
  "component": [
    [
      "code": ["coding": [
          [
            "code": "8665-2",
            "display": "Last menstrual period start date",
            "system": "http://loinc.org"
          ]
        ]],
      "valueDateTime": "2026-03-01"
    ],
    [
      "code": ["coding": [
          [
            "code": "risk",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
          ]
        ]],
      "valueCodeableConcept": ["coding": [
          [
            "code": "high",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
          ]
        ]]
    ],
    [
      "code": ["coding": [
          [
            "code": "57722-1",
            "display": "Birth plurality of Pregnancy",
            "system": "http://loinc.org"
          ]
        ]],
      "valueCodeableConcept": ["coding": [
          [
            "code": "twins",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
          ]
        ]]
    ]
  ],
  "identifier": [
    [
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318",
      "use": "usual"
    ]
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Observation")! 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 devolve o recurso como ficou gravado, sem envelope:

### Response (200)

```json
{
  "code": {
    "coding": [
      {
        "code": "82810-3",
        "display": "Pregnancy status",
        "system": "http://loinc.org"
      }
    ]
  },
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient",
    "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "code": "prenatal",
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
      },
      {
        "code": "LA15173-0",
        "display": "Pregnant",
        "system": "http://loinc.org"
      }
    ]
  },
  "component": [
    {
      "code": {
        "coding": [
          {
            "code": "8665-2",
            "display": "Last menstrual period start date",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueDateTime": "2026-03-01"
    },
    {
      "code": {
        "coding": [
          {
            "code": "11778-8",
            "display": "Delivery date Estimated",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueDateTime": "2026-12-06"
    },
    {
      "code": {
        "coding": [
          {
            "code": "risk",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "high",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
          }
        ]
      }
    },
    {
      "code": {
        "coding": [
          {
            "code": "57722-1",
            "display": "Birth plurality of Pregnancy",
            "system": "http://loinc.org"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "twins",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
          }
        ]
      }
    }
  ],
  "effectivePeriod": {
    "start": "2026-03-01"
  },
  "id": "5e2d9a41-7c3b-4f08-9b6e-2a1f4c8d7e53",
  "identifier": [
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--pregnancy",
      "value": "18342",
      "use": "usual"
    },
    {
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318",
      "use": "usual"
    }
  ]
}
```

Ao lado do seu identificador vem o identificador Nilo da gestação, no `system`
`…/NamingSystem/hippocrates-api--pregnancy`. Ele também serve para atualizar: é o que você usa
para mexer numa gestação que foi criada na plataforma, e não por você — veja
[Uma gestação em curso por paciente](#uma-gestação-em-curso-por-paciente).

> **Warning**
>
> O `identifier` não é exigido pela validação, e é por isso que ele é obrigatório na prática:
> sem identificador a API não tem como reconhecer a gestação, e cada `POST` tenta criar uma
> nova — que é recusada enquanto a paciente tiver uma gestação em curso. Mande sempre a sua
> chave.

### A paciente

`subject` é obrigatório e tem de trazer um `identifier` da paciente; só `reference` não basta.
A paciente tem de **existir** — a gestação não cria paciente. Cadastre a
[Paciente](/guia/recursos/patient) primeiro.

A paciente de uma gestação **não muda**. Reenviar um `identifier` já gravado apontando para
outra paciente é recusado com `business-rule`; para registrar a gestação de outra paciente,
use um `identifier` novo.

> **Note**
>
> Só pacientes do sexo biológico feminino podem ter gestação. Essa regra é da plataforma, não da
> integração: a recusa vem com `business-rule` e a mensagem que a plataforma devolver, sem
> `expression`.

### Datas

Toda data da gestação exige **data completa**. `2026-03` ou `2026` são recusados com `invalid`.

* **DUM.** Vem do `component` `8665-2`. Sem ele, a API lê `effectivePeriod.start` como DUM.
  Vindo os dois, vale o `component`.
* **Data do parto.** Vem do `component` `93857-1`.
* **Data de encerramento.** Vem de `effectivePeriod.end` — veja
  [Encerrar uma gestação](#encerrar-uma-gestação).

Nos `component`, a hora é descartada: só o dia é gravado. Em `effectivePeriod.end` a hora é
mantida; um `end` só com a data é lido como meia-noite, e um `end` com hora e sem fuso, como
horário de Brasília (`America/Sao_Paulo`).

> **Warning**
>
> Na **leitura**, `effectivePeriod.start` não é sempre a DUM: numa gestação sem DUM, ele traz a
> **data em que a gestação foi criada** na plataforma. Como a escrita lê `start` como DUM quando
> falta o `component` `8665-2`, reenviar esse recurso como foi lido **grava a data de criação
> como DUM**.
>
> Se o seu integrador lê gestações e as reenvia, confira o `component` `8665-2` antes: se ele não
> veio, retire `effectivePeriod.start` do payload.

## Atualização parcial

A gestação aceita atualização parcial. Risco, tipo, DUM e data do parto só são gravados
quando vêm no payload: um `component` ausente **mantém** o valor que já estava lá.

**`Requisição — Atualização parcial`**

```json title="Requisição — Atualização parcial"
{
  "resourceType": "Observation",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318"
    }
  ],
  "status": "final",
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "82810-3"
      }
    ]
  },
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status",
        "code": "prenatal"
      }
    ]
  },
  "component": [
    {
      "code": {
        "coding": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation",
            "code": "risk"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk",
            "code": "moderate"
          }
        ]
      }
    }
  ]
}
```

Três dados, porém, são sempre aplicados: a paciente, o status e a data de encerramento. O
status é obrigatório em todo envio, e é ele que decide a data de encerramento.

> **Warning**
>
> O status enviado **substitui** o gravado, sem exceção. Reenviar uma gestação encerrada com
> `prenatal` — um payload antigo, guardado antes do encerramento, por exemplo — apaga a data de
> encerramento. Não guarde payloads de gestação para reenvio: monte o envio a partir do status
> atual.

## Encerrar uma gestação

Uma gestação termina quando o status muda para `postpartum` (parto) ou `abortion` (aborto). A
data de encerramento é escolhida nesta ordem:

1. `effectivePeriod.end`, se vier no payload;
2. senão, a data de encerramento que já estava gravada;
3. senão, em `abortion`, o momento da gravação;
4. senão, em `postpartum`, a meia-noite (horário de Brasília) do dia do parto — o do
   `component` `93857-1` do payload ou, sem ele, o já gravado;
5. sem nenhuma dessas, `postpartum` é recusado com `required`.

**`Requisição — Encerramento por parto`**

```json title="Requisição — Encerramento por parto"
{
  "resourceType": "Observation",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318"
    }
  ],
  "status": "final",
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "82810-3"
      }
    ]
  },
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status",
        "code": "postpartum"
      },
      {
        "system": "http://loinc.org",
        "code": "LA26683-5",
        "display": "Not pregnant"
      }
    ]
  },
  "component": [
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "93857-1",
            "display": "Date and time of obstetric delivery"
          }
        ]
      },
      "valueDateTime": "2026-11-29"
    }
  ]
}
```

**`Requisição — Encerramento por aborto`**

```json title="Requisição — Encerramento por aborto"
{
  "resourceType": "Observation",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/gestacao/",
      "value": "3318"
    }
  ],
  "status": "final",
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "82810-3"
      }
    ]
  },
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "valueCodeableConcept": {
    "coding": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status",
        "code": "abortion"
      }
    ]
  },
  "effectivePeriod": {
    "end": "2026-05-10"
  }
}
```

Em `prenatal`, `effectivePeriod.end` é recusado com `business-rule`: para encerrar, mude o
status.

> **Warning**
>
> Não há como **apagar** uma gestação por esta API: a escrita nunca responde `204`, e
> `entered-in-error` e `cancelled` em `status` são recusados. Uma gestação registrada por engano
> tem de ser removida na plataforma; a remoção é propagada para o store FHIR pela
> sincronização.

## Uma gestação em curso por paciente

A paciente tem no máximo uma gestação `prenatal`. Enviar uma gestação com um `identifier` novo
enquanto ela tem outra em curso é recusado:

**`Resposta 400 — Gestação ativa existente`**

```json title="Resposta 400 — Gestação ativa existente"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "business-rule",
      "expression": [
        "Observation.subject"
      ],
      "details": {
        "text": "The patient already has an active pregnancy. Search the patient's pregnancy Observation and resend it with one of its identifiers to update it, or finish it (status postpartum or abortion) before sending a new one."
      }
    }
  ]
}
```

A recusa costuma aparecer quando a gestação em curso foi registrada **na plataforma**, e o seu
sistema não conhece a chave dela. Para atualizá-la:

1. Busque as gestações da paciente: `GET /fhir/resources/Observation?patient.identifier=<system>|<value>&code=http://loinc.org|82810-3`.
2. Pegue, na gestação `prenatal`, um dos `identifier` — o identificador Nilo, no `system`
   `…/NamingSystem/hippocrates-api--pregnancy`, sempre está lá.
3. Reenvie a gestação com esse `identifier`. Pode mandar o seu junto, na mesma lista.

Para registrar uma gestação nova, encerre a atual antes (`postpartum` ou `abortion`). Uma gestação
encerrada não impede o registro de uma nova.

## Erros

Recusa é `400`, e o corpo é um `OperationOutcome`: `issue[].expression` aponta o campo culpado
e `issue[].details.text` explica o motivo.

| `code`          | `expression`                                             | Mensagem                                                                                                                   | Quando                                                         |
| --------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| `not-supported` | `Observation.code`                                       | `Observation code is not supported. Supported codes: http://loinc.org\|82810-3 (Pregnancy status).`                        | `code` sem o LOINC `82810-3`                                   |
| `not-supported` | `Observation.status`                                     | `Observation status '<status>' is not supported for a pregnancy. Accepted values: final, amended, corrected, preliminary.` | `status` fora dos quatro aceitos                               |
| `not-supported` | `Observation.effective[x]`                               | `Only effectivePeriod is supported for a pregnancy.`                                                                       | `effectiveDateTime`, `effectiveInstant` ou `effectiveTiming`   |
| `required`      | `Observation.valueCodeableConcept`                       | `A coding with system …/CodeSystem/pregnancy-status is required to inform the pregnancy status.`                           | Status sem o `coding` da Nilo                                  |
| `code-invalid`  | `Observation.valueCodeableConcept`                       | `Unknown code '<código>'. Accepted values: prenatal, postpartum, abortion.`                                                | Status fora do catálogo                                        |
| `code-invalid`  | `Observation.valueCodeableConcept`                       | `Unknown LOINC answer '<código>'. Accepted values: LA15173-0, LA26683-5.`                                                  | LOINC fora dos dois aceitos                                    |
| `business-rule` | `Observation.valueCodeableConcept`                       | `The LOINC answer <código> (<nome>) contradicts the pregnancy status '<status>'. …`                                        | LOINC contradiz o status                                       |
| `business-rule` | `Observation.effectivePeriod.end`                        | `A prenatal pregnancy cannot have an end. …`                                                                               | `end` em `prenatal`                                            |
| `required`      | `Observation.effectivePeriod.end`                        | `A postpartum pregnancy requires effectivePeriod.end or the component 93857-1 (…).`                                        | `postpartum` sem data de encerramento possível                 |
| `invalid`       | `Observation.effectivePeriod.start` · `.end`             | `A full date is required.`                                                                                                 | Data incompleta                                                |
| `required`      | `Observation.subject` · `Observation.subject.identifier` | `Field is required`                                                                                                        | `subject` ausente ou sem `identifier`                          |
| `not-found`     | `Observation.subject`                                    | `Patient does not exist`                                                                                                   | O identificador da paciente não resolve                        |
| `business-rule` | `Observation.subject`                                    | `The pregnancy belongs to another patient. …`                                                                              | `identifier` já gravado com outra paciente                     |
| `business-rule` | `Observation.subject`                                    | `The patient already has an active pregnancy. …`                                                                           | Gestação nova com outra em curso                               |
| `required`      | `Observation.component.valueDateTime`                    | `A valueDateTime is required in the component <código> (<nome>).`                                                          | `component` de data sem `valueDateTime`                        |
| `invalid`       | `Observation.component.valueDateTime`                    | `A full date is required in the component <código> (<nome>).`                                                              | Data incompleta num `component`                                |
| `required`      | `Observation.component.valueCodeableConcept`             | `A coding with system <system> is required in the component <risk\|57722-1>.`                                              | Risco ou tipo sem o `coding` da Nilo                           |
| `code-invalid`  | `Observation.component.valueCodeableConcept`             | `Unknown code '<código>'. Accepted values: …`                                                                              | Risco ou tipo fora do catálogo                                 |
| `business-rule` | —                                                        | mensagem da plataforma                                                                                                     | Recusa da plataforma, como paciente que não é do sexo feminino |

Os payloads completos das recusas mais comuns estão na aba **Referência**, em
`POST /fhir/resources/Observation`. Três deles:

**`Resposta 400 — Status sem coding Nilo`**

```json title="Resposta 400 — Status sem coding Nilo"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "required",
      "expression": [
        "Observation.valueCodeableConcept"
      ],
      "details": {
        "text": "A coding with system https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status is required to inform the pregnancy status."
      }
    }
  ]
}
```

**`Resposta 400 — LOINC contraditório`**

```json title="Resposta 400 — LOINC contraditório"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "business-rule",
      "expression": [
        "Observation.valueCodeableConcept"
      ],
      "details": {
        "text": "The LOINC answer LA15173-0 (Pregnant) contradicts the pregnancy status 'postpartum'. Send LA26683-5 (Not pregnant) or omit the LOINC coding."
      }
    }
  ]
}
```

**`Resposta 400 — Parto sem data`**

```json title="Resposta 400 — Parto sem data"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "required",
      "expression": [
        "Observation.effectivePeriod.end"
      ],
      "details": {
        "text": "A postpartum pregnancy requires effectivePeriod.end or the component 93857-1 (Date and time of obstetric delivery)."
      }
    }
  ]
}
```

## Buscar

### Request

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

**`Busca de gestações com resultados`**

```curl Busca de gestações com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/Observation \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     --data-urlencode code=http://loinc.org|82810-3 \
     -d date=ge2026-01-01 \
     --data-urlencode identifier=https://www.acmesaude.com.br/integracao/gestacao/|3318 \
     --data-urlencode patient.identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
     --data-urlencode value-concept=https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status|prenatal
```

**`Busca de gestações com resultados`**

```python Busca de gestações com resultados
import requests

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

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","code":"http://loinc.org|82810-3","date":"[\"ge2026-01-01\"]","identifier":"https://www.acmesaude.com.br/integracao/gestacao/|3318","patient.identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709","value-concept":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status|prenatal"}

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

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

print(response.json())
```

**`Busca de gestações com resultados`**

```javascript Busca de gestações com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal';
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 de gestações com resultados`**

```go Busca de gestações com resultados
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal"

	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 de gestações com resultados`**

```ruby Busca de gestações com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal")

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 de gestações com resultados`**

```java Busca de gestações 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/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca de gestações com resultados`**

```php Busca de gestações com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Busca de gestações com resultados`**

```csharp Busca de gestações com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca de gestações com resultados`**

```swift Busca de gestações com resultados
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Observation?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=http%3A%2F%2Floinc.org%7C82810-3&date=%5B%22ge2026-01-01%22%5D&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fgestacao%2F%7C3318&patient.identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&value-concept=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fpregnancy-status%7Cprenatal")! 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`, mesmo quando há um único resultado:

### Response (200)

```json
{
  "resourceType": "Bundle",
  "type": "searchset",
  "entry": [
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Observation/5e2d9a41-7c3b-4f08-9b6e-2a1f4c8d7e53",
      "resource": {
        "code": {
          "coding": [
            {
              "code": "82810-3",
              "display": "Pregnancy status",
              "system": "http://loinc.org"
            }
          ]
        },
        "resourceType": "Observation",
        "status": "final",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
        },
        "valueCodeableConcept": {
          "coding": [
            {
              "code": "prenatal",
              "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
            },
            {
              "code": "LA15173-0",
              "display": "Pregnant",
              "system": "http://loinc.org"
            }
          ]
        },
        "component": [
          {
            "code": {
              "coding": [
                {
                  "code": "8665-2",
                  "display": "Last menstrual period start date",
                  "system": "http://loinc.org"
                }
              ]
            },
            "valueDateTime": "2026-03-01"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "11778-8",
                  "display": "Delivery date Estimated",
                  "system": "http://loinc.org"
                }
              ]
            },
            "valueDateTime": "2026-12-06"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "risk",
                  "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
                }
              ]
            },
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "high",
                  "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
                }
              ]
            }
          },
          {
            "code": {
              "coding": [
                {
                  "code": "57722-1",
                  "display": "Birth plurality of Pregnancy",
                  "system": "http://loinc.org"
                }
              ]
            },
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "twins",
                  "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
                }
              ]
            }
          }
        ],
        "effectivePeriod": {
          "start": "2026-03-01"
        },
        "id": "5e2d9a41-7c3b-4f08-9b6e-2a1f4c8d7e53",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--pregnancy",
            "value": "18342",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/gestacao/",
            "value": "3318",
            "use": "usual"
          }
        ],
        "meta": {
          "lastUpdated": "2026-04-21T13:40:10.452000Z",
          "versionId": "MTc4NjQ0MzIxMDQ1MjAwMDEyMw"
        }
      },
      "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": []
}
```

A busca traz **todas** as `Observation` do store, não só as gestações. Hoje as duas coisas
coincidem, mas inclua `code=http://loinc.org|82810-3` nas suas buscas para que elas continuem
trazendo só gestações quando outros tipos de observação forem aceitos.

### Parâmetros de busca suportados

| Nome                 | Tipo                                                                 | Descrição                                                         | Expressão                          |
| -------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------- |
| `identifier`         | [token](https://hl7.org/fhir/R4/search.html#token)                   | Identificador da gestação, em `system\|value`                     | `Observation.identifier`           |
| `patient.identifier` | [reference, encadeado](https://hl7.org/fhir/R4/search.html#chaining) | Paciente, pelo identificador dela                                 | `Observation.subject.identifier`   |
| `code`               | [token](https://hl7.org/fhir/R4/search.html#token)                   | Tipo de observação. `http://loinc.org\|82810-3` traz as gestações | `Observation.code`                 |
| `value-concept`      | [token](https://hl7.org/fhir/R4/search.html#token)                   | Status da gestação, no `system` da Nilo ou no LOINC               | `Observation.valueCodeableConcept` |
| `date`               | [date](https://hl7.org/fhir/R4/search.html#date)                     | Período da gestação, com os prefixos `eq`, `ge`, `le`             | `Observation.effectivePeriod`      |
| `_lastUpdated`       | [date](https://hl7.org/fhir/R4/search.html#date)                     | Data da última gravação no store, com os mesmos prefixos          | —                                  |

Para trazer só as gestações em curso de uma paciente:

```bash
curl --request GET \
  --url 'https://landing-zone-api.nilo.services/fhir/resources/Observation?patient.identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709&code=http://loinc.org|82810-3&value-concept=https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status|prenatal' \
  --header 'x-api-key: SUA_API_KEY'
```

> **Warning**
>
> Qual identificador da paciente o `subject` carrega **depende da sua implantação**. Na
> configuração que usa identificadores externos nas referências, é o identificador do seu
> sistema — e o filtro acima funciona como está. Sem ela, o `subject` traz o identificador Nilo
> da paciente (`…/NamingSystem/hippocrates-api--patient`), 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**
>
> `status` não serve para filtrar gestações: toda gestação é lida com `status` `final`. Para
> separar as em curso das encerradas, use `value-concept`.
>
> `date` filtra pelo `effectivePeriod`, cujo início é a DUM ou, sem ela, a data de criação da
> gestação — veja [Datas](#datas).

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/Observation/\{id}](https://landing-zone-api.nilo.services/fhir/resources/Observation/\{id})

**`Gestação encontrada`**

```curl Gestação encontrada
curl https://landing-zone-api.nilo.services/fhir/resources/Observation/id \
     -H "x-api-key: <apiKey>"
```

**`Gestação encontrada`**

```python Gestação encontrada
import requests

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

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

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

print(response.json())
```

**`Gestação encontrada`**

```javascript Gestação encontrada
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Observation/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);
}
```

**`Gestação encontrada`**

```go Gestação encontrada
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Observation/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))

}
```

**`Gestação encontrada`**

```ruby Gestação encontrada
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Observation/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
```

**`Gestação encontrada`**

```java Gestação 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/Observation/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Gestação encontrada`**

```php Gestação encontrada
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

**`Gestação encontrada`**

```csharp Gestação encontrada
using RestSharp;

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

**`Gestação encontrada`**

```swift Gestação encontrada
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Observation/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()
```

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

> **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 gestação está em
> `resource`. Ler `valueCodeableConcept` ou `component` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Observation/5e2d9a41-7c3b-4f08-9b6e-2a1f4c8d7e53",
  "resource": {
    "code": {
      "coding": [
        {
          "code": "82810-3",
          "display": "Pregnancy status",
          "system": "http://loinc.org"
        }
      ]
    },
    "resourceType": "Observation",
    "status": "final",
    "subject": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
    },
    "valueCodeableConcept": {
      "coding": [
        {
          "code": "postpartum",
          "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-status"
        },
        {
          "code": "LA26683-5",
          "display": "Not pregnant",
          "system": "http://loinc.org"
        }
      ]
    },
    "component": [
      {
        "code": {
          "coding": [
            {
              "code": "8665-2",
              "display": "Last menstrual period start date",
              "system": "http://loinc.org"
            }
          ]
        },
        "valueDateTime": "2026-03-01"
      },
      {
        "code": {
          "coding": [
            {
              "code": "11778-8",
              "display": "Delivery date Estimated",
              "system": "http://loinc.org"
            }
          ]
        },
        "valueDateTime": "2026-12-06"
      },
      {
        "code": {
          "coding": [
            {
              "code": "93857-1",
              "display": "Date and time of obstetric delivery",
              "system": "http://loinc.org"
            }
          ]
        },
        "valueDateTime": "2026-11-29"
      },
      {
        "code": {
          "coding": [
            {
              "code": "risk",
              "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-observation"
            }
          ]
        },
        "valueCodeableConcept": {
          "coding": [
            {
              "code": "moderate",
              "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-risk"
            }
          ]
        }
      },
      {
        "code": {
          "coding": [
            {
              "code": "57722-1",
              "display": "Birth plurality of Pregnancy",
              "system": "http://loinc.org"
            }
          ]
        },
        "valueCodeableConcept": {
          "coding": [
            {
              "code": "twins",
              "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/pregnancy-type"
            }
          ]
        }
      }
    ],
    "effectivePeriod": {
      "end": "2026-11-29T03:00:00+00:00",
      "start": "2026-03-01"
    },
    "id": "5e2d9a41-7c3b-4f08-9b6e-2a1f4c8d7e53",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--pregnancy",
        "value": "18342",
        "use": "usual"
      },
      {
        "system": "https://www.acmesaude.com.br/integracao/gestacao/",
        "value": "3318",
        "use": "usual"
      }
    ],
    "meta": {
      "lastUpdated": "2026-11-30T12:20:00.452000Z",
      "versionId": "MTc5NjAzMTIwMDQ1MjAwMDQ1Ng"
    }
  },
  "search": {
    "mode": "match"
  }
}
```

> **Note**
>
> Nem tudo o que você lê foi escrito por esta API. Gestações registradas pela equipe na
> plataforma aparecem aqui do mesmo jeito, com o identificador Nilo e sem o seu.

## O que a integração não cobre

Não há como apagar uma gestação, nem registrar outro tipo de observação além da gestação. A
DPP não é gravável: é sempre a que a plataforma calcula a partir da DUM.