# Zbuduj aplikację medyczną

> Samouczek: użyj Anpheros jako zaplecza danych medycznych aplikacji medycznej — pacjenci, pomiary, schorzenia, leki, dokumenty, badania laboratoryjne, zgody, webhooki i SDK.

Source: https://developers.anpheros.com/pl/guides/build-a-healthcare-app

Ten samouczek pokazuje, jak aplikacja medyczna lub związana z ochroną zdrowia może wykorzystać Anpheros Platform jako zaplecze danych medycznych: gdzie przechowywane są dane pacjentów, jak są one odczytywane i zapisywane, jak łączone są inne systemy i jak pacjent zachowuje kontrolę. Każde poniższe wywołanie jest częścią publicznego API ([referencja](https://developers.anpheros.com/docs)).

## Co budujesz

Typowa aplikacja dla pacjenta — monitorująca choroby przewlekłe, aplikacja zdrowia rodzinnego, towarzysz zdalnego monitorowania — musi:

1. prowadzić rejestr dla każdego pacjenta: pomiary, schorzenia, leki, dokumenty;
2. wyświetlać ten rejestr w postaci list i osi czasu;
3. akceptować dane z innych źródeł (urządzenia, laboratoria, kliniki);
4. udostępniać części rejestru za zgodą pacjenta;
5. reagować na zmiany.

Dzięki Anpheros Twoja aplikacja zarządza własnymi użytkownikami, ekranami i logiką biznesową, a rejestr medyczny deleguje do platformy:

```
Mobile / web app ──► your backend ──► Anpheros Platform API ──► FHIR R4 record of each patient
                         ▲                                              │
                         └──────────── signed webhooks ◄────────────────┘
```

Twój backend przechowuje klucz API; aplikacja komunikuje się z Twoim backendem. (Aplikacje działające w imieniu pacjenta, który ma już rejestr Anpheros, zamiast tego używają OAuth — patrz krok 7.)

## 1. Uzyskaj klucz sandbox

Sandbox jest samoobsługowy: zaloguj się przez Google na pulpicie nawigacyjnym (`https://platform.anpheros.com/dashboard/`) i naciśnij *Uzyskaj klucz sandbox*. Klucze sandbox zaczynają się od `sk_test_` i mogą uzyskiwać dostęp tylko do bazy danych sandbox, gdzie Twój projekt ma już własną kopię 30 syntetycznych pacjentów.

```bash
export BASE=https://platform.anpheros.com
export KEY=sk_test_…
curl $BASE/v1/patients -H "Authorization: Bearer $KEY"
```

## 2. Utwórz pacjenta

Każdy użytkownik Twojej aplikacji otrzymuje rekord pacjenta należący do Twojego projektu.

```bash
curl -X POST $BASE/v1/patients -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -H "Idempotency-Key: $(uuidgen)" \
     -d '{"given": "Elena", "family": "Ionescu", "birth_date": "1985-09-03", "gender": "female"}'
```

Odpowiedź zawiera identyfikator pacjenta `id` (Twój własny identyfikator tej osoby — inne projekty widzą inny) oraz jego referencję `fhir`.

## 3. Zapisywanie pomiarów, schorzeń i leków

Określ, skąd pochodzą dane, używając `author_type`: `patient`, `practitioner`, `device`, `import` lub `ai`. Jeśli tego nie zrobisz, platforma zapisze `import`, nigdy `patient` przez domniemanie.

```bash
# a blood-pressure reading from a connected device (LOINC panel with two components)
curl -X POST $BASE/v1/patients/$PID/observations -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -H "Idempotency-Key: $(uuidgen)" -d '{
  "code": "85354-9", "display": "Blood pressure panel", "category": "vital-signs",
  "effective_at": "2026-09-28T08:00:00Z", "author_type": "device",
  "components": [
    {"code": "8480-6", "display": "Systolic", "value": 128, "unit": "mm[Hg]"},
    {"code": "8462-4", "display": "Diastolic", "value": 82, "unit": "mm[Hg]"}
  ]}'

# a diagnosis (ICD-10 by default)
curl -X POST $BASE/v1/patients/$PID/conditions -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"code": "I10", "display": "Essential hypertension", "onset": "2024-03-01", "author_type": "practitioner"}'

# a medication (ATC by default)
curl -X POST $BASE/v1/patients/$PID/medications -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"display": "Amlodipine 5 mg", "code": "C08CA01", "dosage": "1 tablet in the morning", "start": "2024-03-01", "author_type": "patient"}'
```

Kategorie obserwacji: `vital-signs`, `laboratory`, `symptom`, `activity`, `survey`, `exam`, `imaging`, `social-history`. Każdy zapis jest przechowywany jako zasób FHIR i automatycznie otrzymuje wpis `Provenance`.

## 4. Przechowywanie dokumentów

```bash
# create the document, then upload the bytes
curl -X POST $BASE/v1/patients/$PID/documents -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"title": "Blood tests 2026-09-14", "kind": "lab_report", "content_type": "application/pdf", "date": "2026-09-14"}'
curl -X PUT $BASE/v1/documents/$DOC/content -H "Authorization: Bearer $KEY" -H 'content-type: application/pdf' --data-binary @report.pdf
```

Oryginał jest niezmienny po przesłaniu; wartości, które z niego wyodrębnisz, mogą do niego wskazywać za pomocą `derived_from`.

## 5. Odczytanie rekordu

```bash
curl "$BASE/v1/patients/$PID/observations?category=vital-signs&limit=20" -H "Authorization: Bearer $KEY"
curl "$BASE/v1/patients/$PID/medications?status=active" -H "Authorization: Bearer $KEY"
curl "$BASE/v1/patients/$PID/timeline?from=2026-06-01" -H "Authorization: Bearer $KEY"   # everything, chronologically
```

Gdy potrzebny jest pełny model FHIR, te same dane są dostępne pod adresem `/fhir/R4` z tymi samymi identyfikatorami ([FHIR R4 API](https://developers.anpheros.com/pl/guides/fhir)).

## 6. Połącz laboratoria i urządzenia

- **Wyniki laboratoryjne:** `POST /v1/patients/{id}/labs/import` w formacie CSV, HL7 v2 ORU^R01 lub JSON przekształcają cały raport w obserwacje laboratoryjne z kodami LOINC ([Łącznik laboratoriów](https://developers.anpheros.com/pl/guides/lab-connector)).
- **Urządzenia i urządzenia noszone:** zapisują obserwacje z `author_type: device` i kodem LOINC pomiaru (tętno, SpO₂, kroki, czas trwania snu i inne są wymienione w [Systemach kodów FHIR](https://developers.anpheros.com/pl/guides/fhir-code-systems)).

## 7. Uzyskanie dostępu do istniejącego rekordu pacjenta (OAuth)

Jeśli osoba posiada już rekord w Anpheros (na przykład za pośrednictwem Anpheros Daily), Twoja aplikacja może poprosić o dostęp zamiast tworzyć nowego pacjenta: zarejestruj aplikację, prześlij osobę na stronę zgody z wymaganymi zakresami (scopes), wymień kod na tokeny i wywołaj API za pomocą tokenu dostępu. Pacjent wybiera czas trwania dostępu i może go w dowolnym momencie cofnąć. Szczegóły: [Uwierzytelnianie i OAuth](https://developers.anpheros.com/pl/guides/authentication).

## 8. Reaguj na zmiany za pomocą webhooków

```bash
curl -X POST $BASE/v1/webhooks -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"url": "https://your.app/anpheros/hook", "events": ["resource.created", "consent.revoked"]}'
```

Zweryfikuj nagłówek `Anpheros-Signature` każdego dostarczenia ([Webhooks](https://developers.anpheros.com/pl/guides/webhooks)).

## 9. Użyj SDK

Ten sam przepływ w TypeScript:

```ts
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
const { data: patients } = await anpheros.patients.list();
const vitals = await anpheros.observations.list(patients[0].id, { category: 'vital-signs', limit: 20 });
```

Dostępny jest klient Dart / Flutter o tym samym kształcie jako `anpheros_sdk` ([SDK](https://developers.anpheros.com/pl/guides/sdks)).

## Przed wdrożeniem produkcyjnym

- Klucze produkcyjne (`sk_live_`) są wydawane zweryfikowanym organizacjom z podpisaną umową o przetwarzaniu danych.
- Zapoznaj się ze stroną [Bezpieczeństwo, prywatność i rezydencja danych](https://developers.anpheros.com/pl/guides/security) oraz [limitami](https://developers.anpheros.com/pl/guides/limits).
- Obsługuj błędy według ich typu i cytuj nagłówek `Anpheros-Request-Id` podczas kontaktu z pomocą techniczną ([Błędy](https://developers.anpheros.com/pl/guides/errors)).

## Powiązane

- [Jak zbudować API medyczne w TypeScript](https://developers.anpheros.com/pl/guides/healthcare-api-typescript): samouczek krok po kroku z Express
- [Jak zbudować aplikację medyczną we Flutter](https://developers.anpheros.com/guides/healthcare-app-flutter): samouczek krok po kroku z Dart SDK
- [Jak zbudować aplikację AI dla służby zdrowia z backendem FHIR](https://developers.anpheros.com/pl/guides/build-ai-healthcare-app): samouczek krok po kroku w TypeScript
- [Twórz z Anpheros](https://developers.anpheros.com/pl/guides/build-with-anpheros)
- [Backend i baza danych aplikacji medycznych](https://developers.anpheros.com/pl/guides/medical-app-backend)
- [API danych medycznych](https://developers.anpheros.com/pl/guides/medical-data-api)
- [Tworzenie oprogramowania dla służby zdrowia](https://developers.anpheros.com/pl/guides/healthcare-software)
- [Jak zbudować aplikację Personal Health Record (PHR) z FHIR](https://developers.anpheros.com/pl/guides/personal-health-record-app)
