Хөгжүүлэгчдийн гарын авлага

ЭМХТ — FHIR API
Интеграцийн гарын авлага

Эмнэлгийн мэдээллийн технологийн хөгжүүлэгчид болон EMR программ хангамж нийлүүлэгчдэд зориулсан дэлгэрэнгүй техникийн заавар.

5
API
Endpoint
R4
FHIR
Хувилбар
3
CodeSystem
Лавлах сан
JWT
Token
Хэлбэр
Base URL https://fhir.mn/fhir
Auth URL https://auth.fhir.mn/realms/hdc/…/token
6 хэсэг
1

Ерөнхий мэдээлэл болон Үе шатууд

EMR нийлүүлэгчдийн интеграци хийх нийтлэг үе шатууд:

1
Баталгаажуулалт

Систем автоматаар client_credentials ашиглан хүчинтэй Access Token авна.

2
Жагсаалт татах (Cache)

Үндэсний нэр томьёоны сангууд болон лавлах жагсаалт (CodeSystems)-ийг татаж системдээ хадгална.

3
Эмчийн үйлдэл

Эмч маягт, өвчний түүхийг бөглөнө.

4
Мэдээлэл илгээх

EMR систем мэдээллийг автоматаар FHIR Transaction Bundle руу хөрвүүлэн илгээнэ.

5
Сунгах (Renewal)

Токены хугацаа дуусвал EMR автоматаар дахин шинэ токен авна.

2.1

Authentication — Баталгаажуулалт

🔑
Бүх хүсэлтийн (Metadata-аас бусад) Header хэсэгт Authorization: Bearer <TOKEN> ба Content-Type: application/fhir+json байх ёстой.
POST https://auth.fhir.mn/realms/hdc/protocol/openid-connect/token
FHIR API руу хандах эрхийн токен авах хүсэлт. Систем хоорондын харилцаа тул хэрэглэгчийн нэвтрэх үйлдэл шаардлагагүй (client_credentials).
Request Headers
HeaderУтга
Content-Typeapplication/x-www-form-urlencoded
Request Body (Form-Data)
ParameterТөрөлШаардлагаТайлбар
client_idString Заавал Танд олгогдсон Application (Client) ID
client_secretString Заавал Танд олгогдсон Нууц үг (Secret)
grant_typeString Заавал client_credentials байх ёстой
cURL
curl -X POST "https://auth.fhir.mn/realms/hdc/protocol/openid-connect/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "client_id=hospital-first-client" \
     -d "client_secret=<ЭМХТ-ӨӨС_ӨГСӨН_НУУЦ_ҮГ>" \
     -d "grant_type=client_credentials"
Буцах хариу — 200 OK
JSON
{
  "access_token": "eyJhbGciOiJ...",
  "expires_in": 300,
  "refresh_expires_in": 0,
  "token_type": "Bearer",
  "not-before-policy": 0,
  "scope": "profile email"
}
2.2

System Metadata — Системийн мэдээлэл

GET /metadata

FHIR серверийн дэмжиж ажилладаг ресурсууд, үйлдлүүд болон тохиргоог буцаах Capability Statement.

ℹ️
Энэ endpoint руу токенгүй хандах боломжтой.
2.3

Terminology Services — Нэр томьёо, Лавлах сан

Өвчтөний EMR мэдээллийг илгээхээс өмнө онош (ICD-10), морфологийн код гэх мэт албан ёсны кодыг татаж авах, шалгахад ашиглана.

Жишээ Лавлах сангуудын URL
http://fhir.mn/fhir/CodeSystem/mn-core-icd10
http://fhir.mn/fhir/CodeSystem/mn-core-icd9
http://fhir.mn/fhir/CodeSystem/mn-core-morphology
2.3.1 Read CodeSystem — Кодын системийг татах
GET /CodeSystem?url={system_url}
cURL — ICD-10 харах
curl -X GET "https://fhir.mn/fhir/CodeSystem?url=http://fhir.mn/fhir/CodeSystem/mn-core-icd10" \
     -H "Authorization: Bearer <ТАНЫ_ACCESS_TOKEN>"
2.3.2 Lookup Code — Код шалгах
GET /CodeSystem/$lookup?system={system_url}&code={code}
Тухайн код өгөгдсөн лавлах санд байгаа эсэх болон түүний дэлгэрэнгүй тайлбарыг буцаана.
cURL — J09 шалгах
curl -X GET "https://fhir.mn/fhir/CodeSystem/\$lookup?system=http://fhir.mn/fhir/CodeSystem/mn-core-icd10&code=J09" \
     -H "Authorization: Bearer <ТАНЫ_ACCESS_TOKEN>" \
     -H "Content-Type: application/fhir+json"
2.4

Clinical Data Submission — Эмнэлзүйн мэдээлэл илгээх

2.4.1 Create Single Resource — Ганц мэдээлэл үүсгэх
POST /{ResourceType}
Өвчтөн (Patient), Үзлэг (Encounter), Онош (Condition) зэргийг саллангид байдлаар илгээх тохиолдолд ашиглана.
cURL — Condition үүсгэх
curl -X POST "https://fhir.mn/fhir/Condition" \
     -H "Authorization: Bearer <ТАНЫ_ACCESS_TOKEN>" \
     -H "Content-Type: application/fhir+json" \
     -d '{
  "resourceType": "Condition",
  "code": {
    "coding": [
      {
        "system": "http://fhir.mn/fhir/CodeSystem/mn-core-icd10",
        "code": "J09"
      }
    ]
  },
  "subject": { "reference": "Patient/12345" }
}'
2.4.2 Transaction Bundle — Цогц маягт илгээх
POST /  (Шууд Base URL руу хандана)
ЭММ-3 маягт зэрэг олон төрлийн ресурс (Patient, Encounter, Observation, Condition г.м) хослож үүсэх өгөгдлийг цогцоор нь нэгтгэн илгээх хэлбэр. Өгөгдлийн бүрэн бүтэн байдлыг баталгаажуулж, алдаа гарвал rollback хийгдэнэ.
💡
References (urn:uuid:xxx) — Bundle доторх ресурсуудыг хооронд нь холбохдоо түр зуурын UUID ашиглана. Төв сервер нь бодит ID үүсгэж, хооронд нь саадгүй холбоно.
Үйлдэл тус бүрийн request хэсэгт өөрийн үйлдэл болон URL-ийг заана.
cURL
curl -X POST "https://fhir.mn/fhir" \
     -H "Authorization: Bearer <ТАНЫ_ACCESS_TOKEN>" \
     -H "Content-Type: application/fhir+json" \
     -d @emm3-bundle.json
JSON — emm3-bundle.json
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [
    {
      "fullUrl": "urn:uuid:b590e211-1da3-406c-9c71-332e6fb0e0fa",
      "resource": {
        "resourceType": "Patient",
        "meta": {
          "profile": [ "http://fhir.mn/fhir/StructureDefinition/mn-core-patient" ]
        },
        "identifier": [
          { "system": "http://fhir.mn/sid/national-id", "value": "УУ80010155" }
        ],
        "name": [ { "family": "Сүх", "given": [ "Намсрай" ] } ],
        "gender": "male",
        "birthDate": "1980-01-01"
      },
      "request": { "method": "POST", "url": "Patient" }
    },
    {
      "fullUrl": "urn:uuid:7c0ebbd0-5d6e-4f01-9ac0-cd5cf5480eb4",
      "resource": {
        "resourceType": "Encounter",
        "meta": {
          "profile": [ "http://fhir.mn/fhir/StructureDefinition/mn-core-encounter" ]
        },
        "status": "finished",
        "class": {
          "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
          "code": "AMB"
        },
        "subject": {
          "reference": "urn:uuid:b590e211-1da3-406c-9c71-332e6fb0e0fa"
        },
        "period": { "start": "2026-05-15T10:00:00Z" }
      },
      "request": { "method": "POST", "url": "Encounter" }
    }
  ]
}
3

HTTP Response Codes — Буцах хариуны кодууд

200 OK / 201 Created
Хүсэлт амжилттай болж өгөгдөл бүртгэгдсэн / буцсан.
⚠️
400 Bad Request
Илгээсэн FHIR JSON өгөгдлийн бүтэц алдаатай эсвэл дутуу байна.
🔒
401 Unauthorized
Таны токены хугацаа дууссан буюу токен буруу байна. Шинэ токен авна уу.
🔥
500 Server Error
Серверийн түвшний алдаа.