# API de datos de síntomas: conceptos, terminología FHIR y síntomas reportados por el paciente

> Identificadores de síntomas estables mapeados a ICD-10, servidos como REST y como FHIR CodeSystem, ValueSet y ConceptMap; cómo se ve una observación de síntoma reportado por el paciente y cómo validar una.

Source: https://developers.anpheros.com/es/guides/symptom-data-api

**Anpheros asigna a cada síntoma un identificador estable (`SYM-0047` es dolor de cabeza), lo mapea a ICD-10 y sirve la lista a través de un endpoint REST y como terminología FHIR R4 (`CodeSystem`, `ValueSet`, `ConceptMap`, `$lookup`). Los síntomas que los pacientes reportan se almacenan como `Observation`s de FHIR que llevan ambos códigos, las propias palabras de la persona, la intensidad y, cuando se conoce, cuándo comenzó y terminó el síntoma.** Esta página muestra cómo encontrar un concepto, cómo se ve un síntoma reportado por el paciente, cómo verificar uno que usted mismo escriba y qué datos deliberadamente no contiene.

## Contenido del lanzamiento

| | |
|---|---|
| Lanzamiento | `2026.10.4` (cada respuesta indica cuál) |
| Conceptos | 274: 197 síntomas (ICD-10 R00–R69 y sus subcategorías no residuales como R06.0 disnea o R43.0 anosmia, más el código de la OMS donde la OMS clasifica el síntoma en otro lugar: G47, H53.2, H53.8, H93.1, K59.0, L29.9, M25.5, M54) y 77 hallazgos (R65, R70–R94) |
| Sistema de identificadores | `https://anpheros.com/fhir/CodeSystem/symptom` |
| Códigos | verificados contra la versión 2019 de la OMS ICD-10 (15 de octubre de 2026), con sus notas de inclusión y exclusión; los títulos oficiales de la OMS ICD-10 no se proporcionan hasta que la OMS confirme la licencia (`icd10.display: null`), el título oficial en inglés es el de ICD-11 |
| ICD-11 | cada concepto se mapea a un código ICD-11 MMS 2025-01 (el código de síntoma del capítulo 21) y a un sistema corporal |
| Etiquetas proporcionadas | el título oficial en inglés de la OMS ICD-11 (`source`), las etiquetas en rumano y términos coincidentes utilizados por Anpheros Daily (`in_use`), y etiquetas para el público general en 19 idiomas adicionales (`ai_reviewed`: traducciones automáticas revisadas con ayuda de IA, no por un traductor médico profesional); para los 188 conceptos añadidos en 2026.10.3, el nombre en rumano también es una traducción de IA |
| Revisión clínica | `clinical_review: false` — ningún clínico ha revisado el lanzamiento; no hay causas ni asociaciones de condiciones |
| Señales de advertencia | 32, para 14 conceptos, citadas textualmente de las páginas de CDC y NIDDK (`review: source_quoted`) |

Los identificadores nunca se reutilizan. Un concepto que se retira permanece en la lista con `status: deprecated`.

## Buscar un concepto (REST)

```bash
export API=https://platform.anpheros.com/v1
export KEY=sk_test_…

curl "$API/terminology/symptoms?q=headache" -H "Authorization: Bearer $KEY"
```

`q` coincide con el ID del concepto, los códigos ICD-10 e ICD-11, las etiquetas y los términos de coincidencia. Otros parámetros: `icd10=R51` (el concepto para un código), `icd11=MB4D`, `body_system=nervous`, `kind=symptom|finding|all`, `lang=de` (el idioma de `display`: la etiqueta preferida, si no, la etiqueta común, si no, inglés), `limit` y `offset`.

```json
{
  "data": [{
    "concept_id": "SYM-0047",
    "system": "https://anpheros.com/fhir/CodeSystem/symptom",
    "kind": "symptom",
    "status": "active",
    "display": "Headache, not elsewhere classified",
    "display_lang": "en",
    "icd10": {"system": "http://hl7.org/fhir/sid/icd-10", "code": "R51", "display": null, "equivalence": "equivalent"},
    "icd11": {"system": "http://id.who.int/icd/release/11/mms", "code": "MB4D", "display": "Headache, not elsewhere classified", "equivalence": "equivalent"},
    "body_system": {"code": "nervous", "display": "Symptoms, signs or clinical findings of the nervous system", "icd11_block": "BlockL1-MB4"},
    "labels": [
      {"lang": "ro", "use": "preferred", "text": "Durere de cap (cefalee)", "review": "in_use"},
      {"lang": "de", "use": "lay", "text": "Kopfschmerzen", "review": "ai_reviewed"}
    ],
    "match_terms": [{"lang": "ro", "text": "durere de cap"}, {"lang": "ro", "text": "cefalee"}],
    "clinical_review": false,
    "release": "2026.10.2"
  }],
  "total": 1,
  "release": "2026.10.2"
}
```

`labels` lista cada etiqueta servida (20 idiomas; acortada aquí). Un concepto: `GET $API/terminology/symptoms/SYM-0047`.

## La misma lista que la terminología FHIR

```bash
export BASE=https://platform.anpheros.com/fhir/R4

curl "$BASE/CodeSystem/anpheros-symptom" -H "Authorization: Bearer $KEY"
curl "$BASE/CodeSystem/\$lookup?system=https://anpheros.com/fhir/CodeSystem/symptom&code=SYM-0047&displayLanguage=ro" -H "Authorization: Bearer $KEY"
curl "$BASE/ValueSet/\$expand?url=https://anpheros.com/fhir/ValueSet/anpheros-symptoms&filter=cough" -H "Authorization: Bearer $KEY"
curl "$BASE/ConceptMap/anpheros-symptom-to-icd10" -H "Authorization: Bearer $KEY"
curl "$BASE/ConceptMap/anpheros-symptom-to-icd11" -H "Authorization: Bearer $KEY"
```

- `CodeSystem/anpheros-symptom` — `content: complete`, `status: draft` (la versión no ha sido revisada por un clínico); propiedades `kind`, `status`, `icd10`; etiquetas rumanas, términos coincidentes y etiquetas generales como `designation`.
- `ValueSet/anpheros-symptoms` — los síntomas activos (hallazgos excluidos); `$expand` toma `filter`, `displayLanguage`, `count` y `offset`.
- `ConceptMap/anpheros-symptom-to-icd10` — `equivalent`, o `wider` cuando el código ICD-10 abarca más que el concepto (H53.8 "Otras alteraciones visuales" es más amplio que la visión borrosa).
- Todos ellos son de solo lectura y se enumeran en el `CapabilityStatement` del servidor (`GET $BASE/metadata`).

## Un síntoma reportado por el paciente

Así es como Anpheros Daily registra un síntoma que una persona reportó como presente, sobre sí misma:

```json
{
  "resourceType": "Observation",
  "status": "final",
  "meta": {"profile": ["https://anpheros.com/fhir/StructureDefinition/anpheros-symptom-observation"]},
  "category": [{"coding": [{"system": "urn:anpheros:observation-category", "code": "symptom"}]}],
  "code": {
    "text": "Mă doare capul de 3 zile",
    "coding": [
      {"system": "http://hl7.org/fhir/sid/icd-10", "code": "R51"},
      {"system": "https://anpheros.com/fhir/CodeSystem/symptom", "code": "SYM-0047", "display": "Headache"}
    ]
  },
  "subject": {"reference": "Patient/…"},
  "effectivePeriod": {"start": "2026-10-11T08:00:00+03:00", "end": "2026-10-14T18:00:00+03:00"},
  "valueQuantity": {"value": 6, "unit": "1-10", "system": "http://unitsofmeasure.org", "code": "{score}"}
}
```

- `code.text` son siempre las palabras de la persona, en su idioma (`Observation.language`); los códigos se sitúan a su lado.
- `effectivePeriod` se utiliza cuando la persona indica cuándo comenzó o terminó; de lo contrario, `effectiveDateTime` es el momento en que lo anotó. Las horas conservan el desplazamiento del teléfono que las registró.
- `valueQuantity` es la intensidad en una escala de 1 a 10; sin ella no hay valor.
- Cuando la persona edita un síntoma, el mismo recurso obtiene una nueva versión; lea las anteriores con `GET $BASE/Observation/{id}/_history`.
- Filtre por categoría con `?category=symptom`; los ámbitos de consentimiento como `patient/Observation.rs?category=symptom` funcionan de la misma manera.

### Lo que nunca se publica como síntoma

Solo los síntomas que están **presentes** y son **sobre el paciente** se convierten en Observaciones, y solo después de que el texto libre ha sido normalizado. "Ya no me duele la cabeza", "quizás tenga fiebre mañana", "mi madre tiene tos" o un texto que el normalizador no pudo leer no se convierten en un síntoma del paciente; si un síntoma publicado se corrige posteriormente a uno de estos, su Observación se retira (eliminación lógica: el historial permanece). Las quejas de los familiares no se convierten automáticamente en historial familiar.

## Comprobar un síntoma que escriba

```bash
curl -X POST "$BASE/Observation/\$validate?profile=anpheros-symptom" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/fhir+json" -d @symptom.json
```

El perfil `anpheros-symptom` (canónico `https://anpheros.com/fhir/StructureDefinition/anpheros-symptom-observation`) informa, como un `OperationOutcome`:

| Regla | Severidad |
|---|---|
| Categoría `urn:anpheros:observation-category\|symptom` (el sistema HL7 `observation-category` no tiene código `symptom`) | error |
| `code.text` presente | error |
| Un concepto de Anpheros que existe y coincide con el código ICD-10 | error |
| `subject` es un Paciente; `status` final, enmendado, corregido o introducido por error; `effective[x]` presente; `effectivePeriod.end` no antes de `start` | error |
| Intensidad como UCUM `{score}` entre 0 y 10 | error |
| Solo texto libre, sin códigos | information (still valid) |

Al igual que los otros perfiles, informa y no rechaza escrituras. Un `meta.profile` que envíe se mantiene en el recurso almacenado.

## Límites

- La versión no ha sido revisada por un clínico; úsela para codificación y búsqueda, no para decisiones médicas.
- Las señales de advertencia se citan palabra por palabra de páginas de dominio público del gobierno federal de EE. UU. (CDC: signos de accidente cerebrovascular y ataque cardíaco; NIDDK: diarrea y estreñimiento) y se verificaron contra esas páginas el 15 de octubre de 2026. Cada elemento lleva el encabezado propio de la fuente (`context`), su consejo (`quote`), el grupo al que se aplica (`applies_to`), la fuente con licencia y atribución, `review: source_verified` y la nota de que no es un diagnóstico y no ha sido revisado por un clínico. Las fuentes son estadounidenses: donde una cita dice 9-1-1, la nota añade que el número de emergencia en Europa es 112.
- No se sirven causas ni asociaciones de condiciones: `associations` permanece vacío hasta que un clínico revise un elemento. Una asociación es siempre "puede estar asociada con".
- Los códigos SNOMED CT se escriben solo donde la licencia lo permite (ver [Sistemas de códigos FHIR](https://developers.anpheros.com/es/guides/fhir-code-systems)).
- Las Observaciones de síntomas anteriores reciben la codificación de concepto de Anpheros la próxima vez que se actualicen.

## Relacionado

- [Anpheros Symptom Engine: metodología](https://developers.anpheros.com/es/guides/symptom-engine): cómo se asignan, verifican y evalúan los conceptos
- [Anpheros Search](https://developers.anpheros.com/es/guides/anpheros-search): una búsqueda sobre síntomas, afecciones y tratamientos, con fuentes
- [Sistemas de códigos FHIR](https://developers.anpheros.com/es/guides/fhir-code-systems): cada sistema de códigos por tipo de recurso
- [API de datos longitudinales del paciente](https://developers.anpheros.com/es/guides/longitudinal-patient-data-api)
- [Cómo almacenar historiales médicos usando FHIR R4](https://developers.anpheros.com/es/guides/store-medical-records-fhir)
- [Plataforma FHIR](https://developers.anpheros.com/es/guides/fhir)
