# Construiește o aplicație de sănătate

> Tutorial: folosește Anpheros ca backend pentru date medicale al unei aplicații de sănătate — pacienți, măsurători, afecțiuni, medicamente, documente, analize, consimțământ, webhooks și SDK-uri.

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

Acest tutorial arată cum o aplicație de sănătate sau medicală poate folosi Anpheros Platform ca backend pentru date medicale: unde sunt stocate dosarele pacienților, cum sunt citite și scrise, cum sunt conectate alte sisteme și cum pacientul deține controlul. Fiecare apel de mai jos face parte din API-ul public ([referință](https://developers.anpheros.com/docs)).

## Ce construiți

O aplicație tipică pentru pacienți — un tracker pentru boli cronice, o aplicație de sănătate familială, un companion pentru monitorizare la distanță — trebuie să:

1. păstreze un dosar per pacient: măsurători, afecțiuni, medicamente, documente;
2. afișeze acel dosar sub formă de liste și o cronologie;
3. accepte date din alte surse (dispozitive, laboratoare, clinici);
4. partajeze părți din dosar, cu consimțământul pacientului;
5. reacționeze atunci când ceva se schimbă.

Cu Anpheros, aplicația dvs. își păstrează proprii utilizatori, ecrane și logică de business, și deleagă dosarul medical platformei:

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

Backend-ul dvs. deține cheia API; aplicația comunică cu backend-ul dvs. (Aplicațiile care acționează în numele unui pacient care are deja un dosar Anpheros folosesc OAuth în schimb — vezi pasul 7.)

## 1. Obține o cheie de sandbox

Sandbox-ul este self-service: autentifică-te cu Google pe dashboard (`https://platform.anpheros.com/dashboard/`) și apasă pe *Get a sandbox key*. Cheile de sandbox încep cu `sk_test_` și pot accesa doar baza de date sandbox, unde proiectul tău are deja propria copie a 30 de pacienți sintetici.

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

## 2. Crearea unui pacient

Fiecare utilizator al aplicației dvs. primește un dosar de pacient deținut de proiectul dvs.

```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"}'
```

Răspunsul conține pacientul `id` (identificatorul dvs. unic pentru această persoană — alte proiecte văd unul diferit) și referința sa `fhir`.

## 3. Scrieți măsurători, afecțiuni și medicamente

Indicați de unde provin datele cu `author_type`: `patient`, `practitioner`, `device`, `import` sau `ai`. Dacă omiteți acest câmp, platforma înregistrează `import`, niciodată `patient` prin presupunere.

```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"}'
```

Categorii de observații: `vital-signs`, `laboratory`, `symptom`, `activity`, `survey`, `exam`, `imaging`, `social-history`. Fiecare scriere este stocată ca o resursă FHIR și primește automat o intrare `Provenance`.

## 4. Stocarea documentelor

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

Originalul este imutabil după încărcare; valorile pe care le extrageți din acesta pot indica înapoi către el cu `derived_from`.

## 5. Citirea înregistrării înapoi

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

Când aveți nevoie de modelul FHIR complet, aceleași date sunt disponibile la `/fhir/R4` cu aceleași ID-uri ([API FHIR R4](https://developers.anpheros.com/ro/guides/fhir)).

## 6. Conectați laboratoarele și dispozitivele

- **Rapoarte de laborator:** `POST /v1/patients/{id}/labs/import` cu CSV, HL7 v2 ORU^R01 sau JSON transformă un raport întreg în Observații de laborator cu coduri LOINC ([Conector de laborator](https://developers.anpheros.com/ro/guides/lab-connector)).
- **Dispozitive și dispozitive purtabile:** scrieți Observații cu `author_type: device` și codul LOINC al măsurătorii (ritm cardiac, SpO₂, pași, durata somnului și altele sunt listate în [Sisteme de coduri FHIR](https://developers.anpheros.com/ro/guides/fhir-code-systems)).

## 7. Accesarea unui record pe care pacientul îl deține deja (OAuth)

Dacă persoana deține deja un record în Anpheros (de exemplu, prin Anpheros Daily), aplicația dvs. poate solicita acces în loc să creeze un pacient nou: înregistrați o aplicație, trimiteți persoana la pagina de consimțământ cu scope-urile de care aveți nevoie, schimbați codul pentru token-uri și apelați API-ul cu acces token-ul. Pacientul alege durata și poate revoca accesul în orice moment. Detalii: [Autentificare și OAuth](https://developers.anpheros.com/ro/guides/authentication).

## 8. Reacționați la modificări cu webhooks

```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"]}'
```

Verificați antetul `Anpheros-Signature` al fiecărei livrări ([Webhooks](https://developers.anpheros.com/ro/guides/webhooks)).

## 9. Utilizați un SDK

Același flux în 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 });
```

Un client Dart / Flutter cu aceeași structură este disponibil ca `anpheros_sdk` ([SDKs](https://developers.anpheros.com/ro/guides/sdks)).

## Înainte de a trece în producție

- Cheile de producție (`sk_live_`) sunt emise organizațiilor verificate, cu un acord de procesare a datelor semnat.
- Citiți pagina [Securitate, confidențialitate și rezidența datelor](https://developers.anpheros.com/ro/guides/security) și [limitele](https://developers.anpheros.com/ro/guides/limits).
- Gestionați erorile în funcție de tipul lor și citați antetul `Anpheros-Request-Id` atunci când contactați suportul ([Erori](https://developers.anpheros.com/ro/guides/errors)).

## Resurse Suplimentare

- [Cum să construiești un API de sănătate cu TypeScript](https://developers.anpheros.com/ro/guides/healthcare-api-typescript): tutorial pas cu pas cu Express
- [Cum să construiești o aplicație de sănătate cu Flutter](https://developers.anpheros.com/ro/guides/healthcare-app-flutter): tutorial pas cu pas cu SDK-ul Dart
- [Cum să construiești o aplicație AI pentru sănătate cu un backend FHIR](https://developers.anpheros.com/ro/guides/build-ai-healthcare-app): tutorial pas cu pas în TypeScript
- [Dezvoltă cu Anpheros](https://developers.anpheros.com/ro/guides/build-with-anpheros)
- [Backend și bază de date pentru aplicații medicale](https://developers.anpheros.com/ro/guides/medical-app-backend)
- [API pentru date medicale](https://developers.anpheros.com/ro/guides/medical-data-api)
- [Dezvoltare software în domeniul sănătății](https://developers.anpheros.com/ro/guides/healthcare-software)
- [Cum să construiești o aplicație de dosar personal de sănătate (PHR) cu FHIR](https://developers.anpheros.com/ro/guides/personal-health-record-app)
