# Backend aplikacji medycznej i baza danych

> Czym musi zajmować się backend aplikacji medycznej i jej baza danych, które części Anpheros udostępnia jako zarządzana baza danych opieki zdrowotnej, co pozostaje w Twoim backendzie, trzy sposoby połączenia i jak zachować synchronizację za pomocą webhooków.

Source: https://developers.anpheros.com/pl/guides/medical-app-backend

**Backend aplikacji medycznej to serwerowa część aplikacji medycznej: przechowuje dane pacjentów, egzekwuje, kto może je zobaczyć, prowadzi historię zmian i komunikuje się z laboratoriami, klinikami oraz innymi usługami.** Dzięki Anpheros, medyczna część tego backendu — baza danych opieki zdrowotnej przechowująca rekord każdego pacjenta, wraz z jego historią, zgodami, pochodzeniem danych, audytem, importem wyników laboratoryjnych i zdarzeniami — jest udostępniana przez platformę za pośrednictwem API, a Twój własny backend przechowuje tylko to, co jest specyficzne dla Twojego produktu.

## Co musi obsługiwać medyczny backend

| Odpowiedzialność | Dlaczego jest to trudne w opiece zdrowotnej | Z Anpheros |
|---|---|---|
| Medyczny model danych | dziesiątki rodzajów danych, każdy ze standardowymi kodami | HL7 FHIR R4, 26 typów zasobów, LOINC / ICD-10 / ATC / UCUM |
| Wersjonowanie | dane medyczne są poprawiane, nigdy nie są cicho nadpisywane | każda aktualizacja to nowa wersja; `If-Match` dla aktualizacji warunkowych |
| Dokumenty | oryginały muszą pozostać niezmienione i możliwe do prześledzenia | niezmienne oryginały z SHA-256, przechowywanie w UE szyfrowane kluczem zarządzanym przez klienta |
| Kontrola dostępu | na pacjenta, na aplikację, na typ danych | izolacja projektów, identyfikatory parami, zakresy OAuth z filtrami kategorii |
| Zgoda | pacjent decyduje i może zmienić zdanie | zgody na 30–365 dni, odwoływalne, odzwierciedlone jako FHIR `Consent` |
| Audyt | pacjenci i regulatorzy pytają, kto co widział | każde odczytanie i zapis jest rejestrowane i widoczne dla pacjenta |
| Pochodzenie | wartość z laboratorium nie jest wartością wpisaną przez pacjenta | typ autora, organizacja, praktykujący lekarz i system źródłowy przy każdym zapisie |
| Integracje | laboratoria wysyłają CSV, HL7 v2, JSON; aplikacje potrzebują zdarzeń | import z laboratorium, transakcje FHIR, podpisane webhooki |
| Bezpieczne ponawianie prób | zduplikowany lek lub wynik to błąd kliniczny | `Idempotency-Key` przy każdym tworzeniu |
| Dane testowe | prawdziwi pacjenci nigdy nie powinni znajdować się w środowisku deweloperskim | baza danych sandbox z syntetycznymi pacjentami |

## Co pozostaje w Twoim backendzie

- Twoi **użytkownicy i konta** oraz mapowanie każdego użytkownika na jego identyfikator pacjenta Anpheros (identyfikator parzysty, który widzi Twój projekt);
- **dane produktu**, które nie są medyczne: ustawienia, subskrypcje, treści, harmonogramy przypomnień;
- **reguły biznesowe** — którzy z Twoich pracowników mogą widzieć którego pacjenta w Twoim produkcie;
- **klucz API**, który nigdy nie powinien być umieszczany w aplikacji mobilnej lub internetowej.

## Trzy sposoby połączenia

**1. Twoje zaplecze przechowuje klucz API (najczęściej).** Twoja aplikacja wywołuje Twoje zaplecze; Twoje zaplecze wywołuje Anpheros z kluczem `sk_live_` i widzi pacjentów utworzonych przez Twój projekt.

```ts
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });

// GET /api/me/vitals in your backend, after your own authentication
export async function myVitals(user: { anpherosPatientId: string }) {
  const page = await anpheros.observations.list(user.anpherosPatientId, { category: 'vital-signs', limit: 50 });
  return page.data;
}
```

**2. Aplikacja działa w imieniu pacjenta z użyciem OAuth.** W przypadku osób, które już posiadają rekord w Anpheros, aplikacja mobilna lub internetowa jest *publicznym* klientem OAuth z PKCE: osoba wyraża zgodę na hostowanej stronie, a aplikacja otrzymuje 30-minutowy token dostępu i rotujący token odświeżania dla tego jednego rekordu. SDK implementują ten przepływ (`OAuthFlow`).

**3. Partnerzy serwer-serwer.** Poufny klient (z tajnym kluczem, przechowywanym na serwerze) może używać przepływu kodu autoryzacji lub `client_credentials`, który działa jak klucz API dla tego projektu.

## Utrzymanie synchronizacji backendu

Subskrybuj webhaki zamiast odpytywania (polling). Dostawy są podpisywane (`Anpheros-Signature`, HMAC-SHA256 na timestamp i body), dostarczane co najmniej raz i potencjalnie nie w kolejności; deduplikuj według identyfikatora zdarzenia i ignoruj przestarzałe wersje.

```ts
import { verifyWebhookSignature } from '@anpheros/sdk';

app.post('/anpheros/hook', express.raw({ type: 'application/json' }), async (req, res) => {
  const ok = await verifyWebhookSignature({ secret: process.env.ANPHEROS_WEBHOOK_SECRET!, header: req.header('anpheros-signature'), body: req.body });
  if (!ok) return res.status(400).end();
  const event = JSON.parse(req.body.toString());   // ids and versions only — read the resource if you need it
  res.status(204).end();
});
```

## Obsługa błędów i limitów

- Traktuj `404` jako „niewidoczne dla Ciebie”, nigdy jako dowód na to, że rekord nie istnieje.
- `403` oznacza, że poświadczenie istnieje, ale może nie być w stanie tego zrobić — brak zakresu (scope) lub zasób zapisany przez inną organizację.
- `429` występuje wraz z `Retry-After`; SDK automatycznie czekają i ponawiają próbę, tak jak robią to dla `5xx`.
- Zachowaj `Anpheros-Request-Id` nieudanych wywołań na potrzeby wsparcia technicznego.

[Błędy](https://developers.anpheros.com/pl/guides/errors) · [Limity i limity szybkości](https://developers.anpheros.com/pl/guides/limits)

## Często zadawane pytania

### Jakiej bazy danych powinna używać aplikacja medyczna?
Takiej, która przechowuje dane medyczne w standardowej, wersjonowanej formie i kontroluje dostęp na poziomie pacjenta. Anpheros to zarządzana baza danych opieki zdrowotnej oparta na HL7 FHIR R4: rekord każdego pacjenta jest wersjonowany i przeszukiwalny, każdy zapis zawiera informacje o pochodzeniu (provenance), a aplikacja widzi pacjenta tylko wtedy, gdy utworzyła jego rekord lub pacjent wyraził zgodę. Twoja własna baza danych przechowuje pozostałe dane Twojego produktu – konta, rozliczenia, treści. Aby zapoznać się z kompromisami związanymi z projektowaniem własnych tabel, zobacz [FHIR vs. niestandardowa baza danych medycznych](https://developers.anpheros.com/pl/guides/fhir-vs-custom-database).

### Czy istnieje darmowa baza danych dla aplikacji medycznych?
Tak. Piaskownica (sandbox) Anpheros jest darmowa: zaloguj się za pomocą Google, uzyskaj klucz jednym kliknięciem, a Twój projekt otrzyma własnych 30 syntetycznych pacjentów i do 10 000 zapisów dziennie. Produkcja zaczyna się od 99 € miesięcznie za 2500 pacjentów, z pierwszym miesiącem za darmo; dostęp produkcyjny jest dla zweryfikowanych organizacji z podpisaną umową o przetwarzaniu danych. Zobacz [Cennik](https://developers.anpheros.com/pl/guides/pricing).

### Czy mogę przechowywać rzeczywiste dane pacjentów w darmowej piaskownicy?
Nie. Piaskownica jest przeznaczona wyłącznie do danych syntetycznych: każdy projekt piaskownicy otrzymuje własnych syntetycznych pacjentów, a klucze piaskownicy nie mogą uzyskać dostępu do produkcji. Rzeczywiste rekordy pacjentów należą do projektu produkcyjnego.

## Powiązane tematy

- [FHIR vs. niestandardowa baza danych medycznych](https://developers.anpheros.com/pl/guides/fhir-vs-custom-database): kiedy projektować własne tabele, a kiedy używać FHIR
- [Jak zbudować API dla sektora opieki zdrowotnej w TypeScript](https://developers.anpheros.com/pl/guides/healthcare-api-typescript): samouczek krok po kroku z Express
- [Jak zbudować aplikację dla sektora opieki zdrowotnej we Flutterze](https://developers.anpheros.com/guides/healthcare-app-flutter): samouczek krok po kroku z Dart SDK
- [Tworzenie oprogramowania dla sektora opieki zdrowotnej](https://developers.anpheros.com/pl/guides/healthcare-software)
- [Budowanie aplikacji dla sektora opieki zdrowotnej](https://developers.anpheros.com/pl/guides/build-a-healthcare-app)
- [Architektura](https://developers.anpheros.com/pl/guides/architecture)
- [API danych medycznych](https://developers.anpheros.com/pl/guides/medical-data-api)
- [SDK](https://developers.anpheros.com/pl/guides/sdks)
