> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omophub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FHIR ConceptMap/$closure for subsumption tables

> Compute and maintain FHIR subsumption closure tables across OMOP concepts - track ancestor/descendant links between vocabulary version updates.

## Overview

Given a set of concept codes, computes all subsumption (is-a) relationships among them and returns a FHIR ConceptMap. Used by advanced FHIR clients for offline hierarchy reasoning.

This is a stateless operation -- the closure is computed fresh each request.

## Request

```bash theme={null}
curl -X POST "https://fhir.omophub.com/fhir/r4/ConceptMap/\$closure" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/fhir+json" \
  -d '{
    "resourceType": "Parameters",
    "parameter": [
      { "name": "name", "valueString": "my-closure" },
      { "name": "concept", "valueCoding": { "system": "http://snomed.info/sct", "code": "73211009" } },
      { "name": "concept", "valueCoding": { "system": "http://snomed.info/sct", "code": "44054006" } },
      { "name": "concept", "valueCoding": { "system": "http://snomed.info/sct", "code": "46635009" } }
    ]
  }'
```

## Parameters

| Parameter | Type   | Required         | Description                                                    |
| --------- | ------ | ---------------- | -------------------------------------------------------------- |
| `name`    | string | No               | Client-defined closure table name (accepted but not persisted) |
| `concept` | Coding | Yes (repeatable) | Concept codes to include in the closure (max 50)               |

## Response

```json theme={null}
{
  "resourceType": "ConceptMap",
  "name": "my-closure",
  "status": "active",
  "group": [
    {
      "source": "http://snomed.info/sct",
      "target": "http://snomed.info/sct",
      "element": [
        {
          "code": "73211009",
          "target": [
            { "code": "44054006", "equivalence": "subsumes" },
            { "code": "46635009", "equivalence": "subsumes" }
          ]
        }
      ]
    }
  ]
}
```

In this example, "Diabetes mellitus" (73211009) subsumes both "Type 2 diabetes mellitus" (44054006) and "Type 1 diabetes mellitus" (46635009).

## Limits

* Maximum **50 concepts** per request
* POST only (per FHIR specification)
* Stateless -- no server-side closure table is maintained

## Errors

| HTTP | Issue Code | Cause                                                  |
| ---- | ---------- | ------------------------------------------------------ |
| 400  | `invalid`  | No concept parameters provided, or exceeds 50 concepts |
