# Backend a databáze lékařské aplikace

> Co musí zvládnout backend lékařské aplikace a její databáze, které části poskytuje Anpheros jako spravovaná zdravotnická databáze, co zůstává ve vašem backendu, tři způsoby připojení a jak zůstat synchronizován pomocí webhooků.

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

**Backend lékařské aplikace je serverová část zdravotnické aplikace: ukládá data pacientů, vynucuje, kdo je smí vidět, udržuje historii změn a komunikuje s laboratořemi, klinikami a dalšími službami.** S Anpherosem je lékařská část tohoto backendu – zdravotnická databáze, která uchovává záznam každého pacienta s jeho historií, souhlasem, původem dat, auditem, importem z laboratoří a událostmi – poskytována platformou prostřednictvím API a váš vlastní backend uchovává pouze to, co je specifické pro váš produkt.

## Co musí lékařský backend zvládnout

| Zodpovědnost | Proč je to ve zdravotnictví obtížné | S Anpheros |
|---|---|---|
| Lékařský datový model | desítky druhů dat, každý se standardními kódy | HL7 FHIR R4, 26 typů zdrojů, LOINC / ICD-10 / ATC / UCUM |
| Verzování | lékařská data se opravují, nikdy se tiše nepřepisují | každá aktualizace je nová verze; `If-Match` pro podmíněné aktualizace |
| Dokumenty | originály musí zůstat nezměněné a sledovatelné | neměnné originály s SHA-256, úložiště v EU šifrované klíčem spravovaným zákazníkem |
| Řízení přístupu | na pacienta, na aplikaci, na typ dat | izolace projektů, párové ID, rozsahy OAuth s filtry kategorií |
| Souhlas | pacient rozhoduje a může změnit názor | udělení na 30–365 dní, odvolatelné, zrcadlené jako FHIR `Consent` |
| Audit | pacienti a regulátoři se ptají, kdo co viděl | každé čtení a zápis zaznamenáno a viditelné pro pacienta |
| Původ | hodnota z laboratoře není hodnota zadaná pacientem | typ autora, organizace, praktický lékař a zdrojový systém při každém zápisu |
| Integrace | laboratoře posílají CSV, HL7 v2, JSON; aplikace potřebují události | import z laboratoře, transakce FHIR, podepsané webhooky |
| Bezpečné opakování | duplikovaný lék nebo výsledek je klinická chyba | `Idempotency-Key` při každém vytvoření |
| Testovací data | skuteční pacienti nesmí být nikdy ve vývoji | databáze sandboxu se syntetickými pacienty |

## Co zůstává na vašem backendu

- **Uživatelé a účty** a mapování každého uživatele na jejich Anpheros patient id (párové id, které váš projekt vidí);
- **Produktová data**, která nejsou lékařská: nastavení, předplatná, obsah, plány připomenutí;
- **Obchodní pravidla** — kteří z vašich zaměstnanců mohou vidět kterého pacienta ve vašem produktu;
- **API klíč**, který nikdy nesmí být dodán uvnitř mobilní nebo webové aplikace.

## Tři způsoby připojení

**1. Váš backend drží API klíč (nejběžnější).** Vaše aplikace volá váš backend; váš backend volá Anpheros s klíčem `sk_live_` a vidí pacienty, které váš projekt vytvořil.

```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. Aplikace jedná jménem pacienta s OAuth.** Pro lidi, kteří již mají záznam v Anpheros, je mobilní nebo webová aplikace *veřejným* OAuth klientem s PKCE: osoba udělí souhlas na hostované stránce a aplikace obdrží 30minutový přístupový token a rotující obnovovací token pro tento jeden záznam. SDK implementují tento tok (`OAuthFlow`).

**3. Partnerské připojení server-to-server.** Důvěrný klient (s tajným klíčem, uloženým na serveru) může použít tok autorizačního kódu, nebo `client_credentials`, který se chová jako API klíč pro daný projekt.

## Udržování synchronizace vašeho backendu

Přihlaste se k odběru webhooků namísto opakovaného dotazování. Dodávky jsou podepsané (`Anpheros-Signature`, HMAC-SHA256 přes časové razítko a tělo), doručované alespoň jednou a případně mimo pořadí; deduplikujte podle ID události a ignorujte zastaralé verze.

```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();
});
```

## Zpracování chyb a limitů

- Zacházejte s `404` jako s "pro vás neviditelným", nikdy ne jako s důkazem, že záznam neexistuje.
- `403` znamená, že pověření existuje, ale nemusí to umožňovat — chybějící rozsah (scope) nebo prostředek zapsaný jinou organizací.
- `429` přichází s `Retry-After`; SDK čekají a automaticky opakují pokusy, stejně jako u `5xx`.
- Uchovávejte `Anpheros-Request-Id` neúspěšných volání pro podporu.

[Chyby](https://developers.anpheros.com/cs/guides/errors) · [Limity a rychlostní limity](https://developers.anpheros.com/cs/guides/limits)

## Často kladené dotazy

### Jakou databázi by měla lékařská aplikace používat?
Takové, která uchovává lékařská data ve standardizované, verzované formě a řídí přístup na základě pacienta. Anpheros je spravovaná databáze pro zdravotnictví postavená na HL7 FHIR R4: záznam každého pacienta je verzovaný a prohledávatelný, každý zápis nese původ (provenance) a aplikace vidí pacienta pouze v případě, že záznam vytvořila, nebo pacient udělil souhlas. Vaše vlastní databáze uchovává zbytek dat vašeho produktu – účty, fakturaci, obsah. O kompromisech při navrhování vlastních tabulek místo toho se dočtete v [FHIR vs. vlastní lékařská databáze](https://developers.anpheros.com/cs/guides/fhir-vs-custom-database).

### Existuje bezplatná databáze pro lékařské aplikace?
Ano. Sandbox Anpheros je zdarma: přihlaste se pomocí Googlu, získejte klíč jedním kliknutím a váš projekt získá 30 syntetických pacientů a až 10 000 zápisů denně. Produkční prostředí začíná na 99 € měsíčně za 2 500 pacientů, s prvním měsícem zdarma; přístup do produkčního prostředí je pro ověřené organizace s podepsanou dohodou o zpracování dat. Viz [Ceník](https://developers.anpheros.com/cs/guides/pricing).

### Mohu v bezplatném sandboxu uchovávat skutečná data pacientů?
Ne. Sandbox je určen pouze pro syntetická data: každý projekt v sandboxu získá své vlastní syntetické pacienty a klíče sandboxu nemohou dosáhnout produkčního prostředí. Záznamy skutečných pacientů patří do produkčního projektu.

## Související

- [FHIR vs. vlastní lékařská databáze](https://developers.anpheros.com/cs/guides/fhir-vs-custom-database): kdy navrhnout vlastní tabulky a kdy použít FHIR
- [Jak vytvořit zdravotnické API s TypeScript](https://developers.anpheros.com/cs/guides/healthcare-api-typescript): podrobný návod s Express
- [Jak vytvořit zdravotnickou aplikaci s Flutter](https://developers.anpheros.com/guides/healthcare-app-flutter): podrobný návod s Dart SDK
- [Vývoj zdravotnického softwaru](https://developers.anpheros.com/cs/guides/healthcare-software)
- [Vytvořte zdravotnickou aplikaci](https://developers.anpheros.com/cs/guides/build-a-healthcare-app)
- [Architektura](https://developers.anpheros.com/cs/guides/architecture)
- [API pro lékařská data](https://developers.anpheros.com/cs/guides/medical-data-api)
- [SDK](https://developers.anpheros.com/cs/guides/sdks)
