# SDK-uri

> Clienții Dart / Flutter (anpheros_sdk) și TypeScript (@anpheros/sdk): aceeași structură, creări idempotente, reîncercări, reîmprospătare token și fluxul de consimțământ.

Source: https://developers.anpheros.com/ro/guides/sdks

> Biblioteci client oficiale pentru o API FHIR R4 de sănătate cu un sandbox FHIR gratuit: pacienți, observații, rezultate de laborator, condiții, medicamente, International Patient Summary, consimțământul pacientului și context AI, în TypeScript și Dart / Flutter.

**Anpheros este o infrastructură interoperabilă de date medicale pentru construirea de aplicații de sănătate, software medical și servicii AI.** Fiecare pacient are un singur dosar HL7 FHIR R4 pe care îl controlează; aplicațiile, clinicile, laboratoarele și agenții AI îl citesc și îl scriu prin Anpheros Platform API — cu consimțământul pacientului (OAuth 2.1 / SMART on FHIR), proveniență la fiecare scriere și un jurnal de acces pe care pacientul îl poate vizualiza. Acest repository conține bibliotecile client oficiale și exemple executabile.

| Limbaj | Pachet | Instalare | Sursă |
|---|---|---|---|
| Dart / Flutter | [`anpheros_sdk`](https://pub.dev/packages/anpheros_sdk) | `dart pub add anpheros_sdk` | [`dart/anpheros_sdk`](https://github.com/anpheros/anpheros-sdk/tree/main/dart/anpheros_sdk) |
| TypeScript (Node 18+, browsere, Deno, Bun) | [`@anpheros/sdk`](https://www.npmjs.com/package/@anpheros/sdk) | `npm install @anpheros/sdk` | [`ts`](https://github.com/anpheros/anpheros-sdk/tree/main/ts) |

## Pornire rapidă în 2 minute

1. **Obțineți o cheie sandbox gratuită:** conectați-vă pe [dashboard](https://platform.anpheros.com/dashboard/) și apăsați **Get a sandbox key** (`sk_test_…`). Sandbox-ul dvs. are 30 de pacienți sintetici.
2. **Verificați funcționarea:**

   ```bash
   curl -H "Authorization: Bearer $ANPHEROS_KEY" "https://platform.anpheros.com/fhir/R4/Patient?_count=3"
   ```

3. **Instalați un SDK și citiți o înregistrare:** `npm install @anpheros/sdk` sau `dart pub add anpheros_sdk`, apoi rulați codul de sub [Connect](#connect) sau clonați [quickstart-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-ts).

## Pentru cine este

Dezvoltatori care creează aplicații pentru sănătatea pacienților și a familiilor, backend-uri pentru aplicații medicale, integrări clinice și de laborator, precum și asistenți sau agenți AI care necesită context medical structurat al unui pacient — fără a proiecta de la zero o bază de date medicală, un sistem de consimțământ și un jurnal de audit.

## Obține o cheie de sandbox

Sandbox-ul este gratuit și self-service. Autentifică-te cu Google pe [dashboard](https://platform.anpheros.com/dashboard/) și apasă **Get a sandbox key**: vei obține instantaneu un proiect sandbox și o cheie. Fiecare proiect sandbox vine cu proprii 30 de pacienți sintetici — șase luni de condiții, medicații, alergii, rezultate de laborator și semne vitale — pe care îi poți modifica liber și reseta oricând. Cheile de sandbox (`sk_test_…`) nu ajung niciodată la date reale ale pacienților.

Când treci în producție, producția este pentru organizații verificate cu un acord de procesare a datelor, iar producția începe de la 99 € pe lună, cu prima lună gratuită ([pricing](https://developers.anpheros.com/ro/guides/pricing)).

## Conectare

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

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });   // sk_test_… in the sandbox
const { data: patients } = await anpheros.patients.list();
const labs = await anpheros.observations.list(patients[0].id, { category: 'laboratory', limit: 10 });
const ctx = await anpheros.context.build({ patient: patients[0].id, task: 'weekly check-in', budget_tokens: 1500, format: 'text' });
```

```dart
import 'package:anpheros_sdk/anpheros_sdk.dart';

final anpheros = Anpheros(auth: AnpherosAuth.apiKey('sk_test_…'));
final patients = await anpheros.patients.list();
final labs = await anpheros.observations.list(patients.data.first.id, category: 'laboratory', limit: 10);
```

Cheile API aparțin serverelor. O aplicație care acționează în numele unei persoane folosește OAuth în schimb: ambele SDK-uri implementează fluxul de consimțământ (cod de autorizare + PKCE) și reîmprospătează automat token-urile.

## Ce acoperă SDK-urile

Ambele acoperă întreaga suprafață publică (`/v1`, `/fhir/R4`, `/oauth/token`, `/oauth/revoke`) cu aceeași formă: `patients`, `observations`, `conditions`, `medications`, `documents`, `timeline`, `provenance`, `context`, `grants`, `terminology` și `fhir` brut. Un test eșuează compilarea atunci când o rută publică lipsește din oricare SDK sau când un SDK apelează o rută pe care serverul nu o are.

Ambele SDK-uri: `Idempotency-Key` automat la creări, reîncercări cu backoff la 429/5xx, o reîmprospătare a tokenului la 401, erori tipizate cu ID-ul cererii, asistență PKCE și fluxul de consimțământ.

## Date medicale și FHIR

Înregistrarea este compusă din resurse FHIR R4 standard — 26 de tipuri, inclusiv `Observation`, `Condition`, `MedicationStatement`, `DocumentReference`, `Immunization` și `AllergyIntolerance` — codificate cu LOINC, ICD-10, ATC și UCUM. API-ul REST (`/v1`) și API-ul FHIR (`/fhir/R4`) citesc și scriu aceleași resurse cu aceleași ID-uri; `fhir` în ambele SDK-uri oferă acces FHIR brut (căutare, tranzacții, `$everything`, `$summary`, `$validate`).

## Exemple

| Exemplu | Arată |
|---|---|
| [quickstart-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-ts) | scrie și citește o înregistrare: măsurători, rezultat de laborator, diagnostic, medicație, cronologie, căutare FHIR, IPS, context AI |
| [quickstart-dart](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-dart) | același lucru din Dart / Flutter |
| [consent-app-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/consent-app-ts) | o aplicație web care solicită consimțământ (OAuth 2.1 + PKCE) și citește înregistrarea persoanei |
| [ai-context-llm](https://github.com/anpheros/anpheros-sdk/tree/main/examples/ai-context-llm) | o întrebare despre o înregistrare la care răspunde un model la alegerea dvs. (local sau găzduit) |
| [fhir-transaction](https://github.com/anpheros/anpheros-sdk/tree/main/examples/fhir-transaction) | un pachet de tranzacție FHIR R4 și rezumatul internațional al pacientului rezultat |

Exemplele rulează pe sandbox-ul gratuit, unde fiecare proiect sandbox are proprii 30 de pacienți sintetici — vezi [Obține o cheie sandbox](#get-a-sandbox-key).

## Repozitorii asociate

| Repozitoriu | Ce este |
|---|---|
| [fhir-api-openapi](https://github.com/anpheros/fhir-api-openapi) | Specificație OpenAPI 3.1 și colecție Postman a API-ului |
| [mcp-server](https://github.com/anpheros/mcp-server) | Serverul FHIR MCP găzduit pentru agenți AI: configurații pentru Claude, Cursor, VS Code |
| [agent-skills](https://github.com/anpheros/agent-skills) | Agent Skill, plugin Claude Code, reguli Cursor și AGENTS.md |
| [fhir-synthetic-patients](https://github.com/anpheros/fhir-synthetic-patients) | Cei 30 de pacienți sintetici ca FHIR R4 Bundles și NDJSON |
| [ips-examples](https://github.com/anpheros/ips-examples) | Documente International Patient Summary în FHIR R4 |
| [fhir-validate-action](https://github.com/anpheros/fhir-validate-action) | Acțiune GitHub care validează FHIR R4 JSON în CI |
| [lab-results-to-fhir](https://github.com/anpheros/lab-results-to-fhir) | CLI: Rapoarte de laborator CSV / HL7 v2 → Observații FHIR |
| [healthcare-app-starters](https://github.com/anpheros/healthcare-app-starters) | Șabloane de aplicații de sănătate Next.js și Flutter |

## Conformitate

Rezultatele brute ale testelor, publicate pentru a putea fi verificate (rezultate ale testelor, nu certificări): [conformance/](https://github.com/anpheros/anpheros-sdk/tree/main/conformance). La 28 septembrie 2026, grupul Standalone Launch al kitului de testare Inferno SMART App Launch STU2 (v1.0.3) a trecut 22 din 22 de teste împotriva platformei. Lansarea EHR nu este suportată.

## Documentație

- [Ghiduri pentru dezvoltatori](https://developers.anpheros.com/guides/)
- [Introducere](https://developers.anpheros.com/ro/guides/getting-started)
- [Sandbox FHIR](https://developers.anpheros.com/ro/guides/fhir-sandbox)
- [API pentru Sănătate](https://developers.anpheros.com/ro/guides/healthcare-api)
- [Platformă API pentru Sănătate](https://developers.anpheros.com/ro/guides/healthcare-api-platform)
- [Platformă FHIR](https://developers.anpheros.com/ro/guides/fhir)
- [Ghid SDK](https://developers.anpheros.com/ro/guides/sdks)
- [Referință API (OpenAPI)](https://developers.anpheros.com/docs)
- [Pentru asistenți AI](https://developers.anpheros.com/llms.txt)
- [Anpheros](https://anpheros.com/)

## Probleme și securitate

Raportați erorile în secțiunea issues a acestui repository. Nu includeți niciodată chei API, token-uri sau date despre pacienți într-un issue. Rapoarte de securitate: contact@anpheros.com.

## Licență

Apache License 2.0 — consultați fișierul `LICENSE` din fiecare pachet. Copyright 2026 Anpheros.

## @anpheros/sdk

Client TypeScript pentru **Anpheros Platform**: un dosar medical FHIR R4 per pacient, izolare proiect, consimțământ pacient (OAuth 2.1 / SMART on FHIR), proveniență la fiecare scriere și un API de context AI. Rulează oriunde există `fetch` (Node 18+, browsere, Deno, Bun).

```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 labs = await anpheros.observations.list(patients[0].id, { category: 'laboratory', limit: 10 });
const ctx = await anpheros.context.build({ patient: patients[0].id, task: 'weekly check-in', budget_tokens: 1500, format: 'text' });
```

Acționând în numele unei persoane:

```ts
import { OAuthFlow, OAuthAuth, generatePkce } from '@anpheros/sdk';

const flow = new OAuthFlow({ baseUrl: BASE, clientId: 'client_…', redirectUri: 'https://myapp.example/callback' });
const pkce = await generatePkce();
location.href = flow.authorizeUrl({ scopes: ['patient/Observation.rs?category=laboratory', 'offline_access'], state, pkce, lang: 'ro' });
// on the callback:
const tokens = await flow.exchange(code, pkce);
const anpheros = new Anpheros({ auth: new OAuthAuth({ tokens, onRefresh: flow.refresh, onTokens: persist }) });
```

Erorile sunt `AnpherosError` (`status`, `type`, `message`, `field`, `requestId`). Creările trimit un `Idempotency-Key`; 429/5xx sunt reîncercate; token-urile expirate sunt reîmprospătate o dată și apelul este reîncercat.

## anpheros_sdk

Client Dart / Flutter pentru **Anpheros Platform**: un backend de date medicale cu un record FHIR R4
per pacient, izolare proiect, consimțământ pacient (OAuth 2.1 / SMART on FHIR), proveniență la fiecare
scriere și un API de context AI.

```dart
import 'package:anpheros_sdk/anpheros_sdk.dart';

final anpheros = Anpheros(auth: AnpherosAuth.apiKey('sk_test_…'));      // server / sandbox

final patients = await anpheros.patients.list();
final elena = patients.data.first;
final labs = await anpheros.observations.list(elena.id, category: 'laboratory', limit: 10);
final ctx = await anpheros.context.build(ContextRequest(patient: elena.id, task: 'weekly check-in', budgetTokens: 1500));
```

## Acționarea în numele unei persoane (aplicații)

```dart
final flow = OAuthFlow(baseUrl: 'https://…', clientId: 'client_…', redirectUri: 'myapp://callback');
final pkce = Pkce.generate();
final url = flow.authorizeUrl(scopes: ['patient/Observation.rs?category=laboratory', 'patient/MedicationStatement.r', 'offline_access'],
                              state: 'abc', pkce: pkce, lang: 'ro');
// open `url`; on return with ?code=…:
final tokens = await flow.exchange(code: code, pkce: pkce);
final anpheros = Anpheros(auth: AnpherosAuth.oauth(
  accessToken: tokens.accessToken, refreshToken: tokens.refreshToken, expiresAt: tokens.expiresAt,
  onRefresh: flow.refresh, onTokens: persist));
final meds = await anpheros.medications.listMedications(tokens.patient!);
```

Fiecare obiect poartă `fhir` (referința sa `/fhir/R4`); `anpheros.fhir` oferă acces FHIR brut
(read, search, create, transaction, `$everything`, `$summary`, `$validate`).

Erorile sunt `AnpherosException` cu `status`, `type`, `message`, `field` și `requestId`.
Creările trimit automat un `Idempotency-Key`; 429/5xx sunt reîncercate cu backoff; token-urile OAuth expirate
sunt reîmprospătate o dată și apelul este reîncercat.
