# Crea una aplicación de salud

> Tutorial: usa Anpheros como backend de datos médicos para una aplicación de salud — pacientes, mediciones, condiciones, medicamentos, documentos, laboratorios, consentimiento, webhooks y SDKs.

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

Este tutorial muestra cómo una aplicación de salud o médica puede usar Anpheros Platform como su backend de datos médicos: dónde se almacenan los registros de pacientes, cómo se leen y escriben, cómo se conectan otros sistemas y cómo el paciente mantiene el control. Cada llamada a continuación es parte de la API pública ([referencia](https://developers.anpheros.com/docs)).

## Lo que estás construyendo

Una aplicación típica orientada al paciente —un rastreador de enfermedades crónicas, una aplicación de salud familiar, un compañero de monitorización remota— necesita:

1.  mantener un registro por paciente: mediciones, condiciones, medicamentos, documentos;
2.  mostrar ese registro como listas y una línea de tiempo;
3.  aceptar datos de otras fuentes (dispositivos, laboratorios, clínicas);
4.  compartir partes del registro, con el consentimiento del paciente;
5.  reaccionar cuando algo cambia.

Con Anpheros, tu aplicación mantiene sus propios usuarios, pantallas y lógica de negocio, y delega el registro médico a la plataforma:

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

Tu backend contiene la clave API; la aplicación habla con tu backend. (Las aplicaciones que actúan en nombre de un paciente que ya tiene un registro Anpheros utilizan OAuth en su lugar — consulta el paso 7).

## 1. Obtener una clave de sandbox

El sandbox es de autoservicio: inicie sesión con Google en el panel (`https://platform.anpheros.com/dashboard/`) y presione *Obtener una clave de sandbox*. Las claves de sandbox comienzan con `sk_test_` y solo pueden acceder a la base de datos del sandbox, donde su proyecto ya tiene su propia copia de 30 pacientes sintéticos.

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

## 2. Crear un paciente

Cada usuario de su aplicación obtiene un registro de paciente propiedad de su proyecto.

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

La respuesta contiene el paciente `id` (su propio identificador para esta persona; otros proyectos ven uno diferente) y su referencia `fhir`.

## 3. Escribir mediciones, condiciones y medicamentos

Indique de quién provienen los datos con `author_type`: `patient`, `practitioner`, `device`, `import` o `ai`. Si lo omite, la plataforma registra `import`, nunca `patient` por suposición.

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

Categorías de observación: `vital-signs`, `laboratory`, `symptom`, `activity`, `survey`, `exam`, `imaging`, `social-history`. Cada escritura se almacena como un recurso FHIR y obtiene una entrada `Provenance` automáticamente.

## 4. Almacenar documentos

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

El original es inmutable después de la carga; los valores que extraiga de él pueden apuntar de nuevo a él con `derived_from`.

## 5. Leer el registro de vuelta

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

Cuando necesite el modelo FHIR completo, los mismos datos están disponibles en `/fhir/R4` con los mismos ids ([API FHIR R4](https://developers.anpheros.com/es/guides/fhir)).

## 6. Conectar laboratorios y dispositivos

- **Informes de laboratorio:** `POST /v1/patients/{id}/labs/import` con CSV, HL7 v2 ORU^R01 o JSON convierten un informe completo en Observaciones de laboratorio con códigos LOINC ([Conector de laboratorio](https://developers.anpheros.com/es/guides/lab-connector)).
- **Dispositivos y wearables:** escriben Observaciones con `author_type: device` y el código LOINC de la medición (frecuencia cardíaca, SpO₂, pasos, duración del sueño y otros se enumeran en [Sistemas de códigos FHIR](https://developers.anpheros.com/es/guides/fhir-code-systems)).

## 7. Acceder a un registro que el paciente ya tiene (OAuth)

Si la persona ya tiene un registro en Anpheros (por ejemplo, a través de Anpheros Daily), su aplicación puede solicitar acceso en lugar de crear un nuevo paciente: registre una aplicación, envíe a la persona a la página de consentimiento con los ámbitos que necesita, intercambie el código por tokens y llame a la API con el token de acceso. El paciente elige la duración y puede revocar el acceso en cualquier momento. Detalles: [Autenticación y OAuth](https://developers.anpheros.com/es/guides/authentication).

## 8. Reaccionar a los cambios con 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"]}'
```

Verifique la cabecera `Anpheros-Signature` de cada entrega ([Webhooks](https://developers.anpheros.com/es/guides/webhooks)).

## 9. Usar un SDK

El mismo flujo en 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 cliente Dart / Flutter con la misma estructura está disponible como `anpheros_sdk` ([SDKs](https://developers.anpheros.com/es/guides/sdks)).

## Antes de pasar a producción

- Las claves de producción (`sk_live_`) se emiten a organizaciones verificadas con un acuerdo de procesamiento de datos firmado.
- Lea la página de [Seguridad, privacidad y residencia de datos](https://developers.anpheros.com/es/guides/security) y los [límites](https://developers.anpheros.com/es/guides/limits).
- Gestione los errores por su tipo y cite la cabecera `Anpheros-Request-Id` cuando contacte con el soporte ([Errores](https://developers.anpheros.com/es/guides/errors)).

## Relacionado

- [Cómo crear una API de salud con TypeScript](https://developers.anpheros.com/es/guides/healthcare-api-typescript): tutorial paso a paso con Express
- [Cómo crear una aplicación de salud con Flutter](https://developers.anpheros.com/es/guides/healthcare-app-flutter): tutorial paso a paso con el SDK de Dart
- [Cómo crear una aplicación de salud con IA y un backend FHIR](https://developers.anpheros.com/es/guides/build-ai-healthcare-app): tutorial paso a paso en TypeScript
- [Desarrollar con Anpheros](https://developers.anpheros.com/es/guides/build-with-anpheros)
- [Backend y base de datos de aplicaciones médicas](https://developers.anpheros.com/es/guides/medical-app-backend)
- [API de datos médicos](https://developers.anpheros.com/es/guides/medical-data-api)
- [Desarrollo de software de salud](https://developers.anpheros.com/es/guides/healthcare-software)
- [Cómo crear una aplicación de registro personal de salud (PHR) con FHIR](https://developers.anpheros.com/es/guides/personal-health-record-app)
