PowerGridDocumentation
Platform

Meter-data contract

3 min readdocs/data-contracts/meter-data-v1.mdEdit on GitHub

Хувилбар 1 · 2026-10-14 · Төлөв: ашиглалтад (PGX-08) · Код: modules/powergrid/ingest.go

This page has not been translated yet — it is shown in Mongolian, the language it is written in.

Түгээх компани (DSO) сүлжээний бүртгэл болон тоолуурын заалтаа PowerGrid hub руу илгээх гэрээ (GS §18.2). Компани өөрийн HES/MDM-ээ хадгалж, өгөгдлөө энэ форматаар илгээнэ. Формат нь IEC 61968-9 (CIM)-тэй зураглагдана: metering_point нь UsagePoint, topology_node нь сүлжээний байгууламж.

01Илгээх

text
POST /api/v1/powergrid/batches        Content-Type: application/json   (≤ 32 MB)GET  /api/v1/powergrid/batches        сүүлийн 100 багцын баримт

Нэвтрэлт нь Nexus-ийн байгууллагын session эсвэл service account. powergrid.manage эрх шаардана. Компани зөвхөн өөрийн өгөгдлийг илгээж, харна.

02Бүтэц

json
{  "contract": "powergrid.meter-data/v1",  "batch_id": "UBEDN-2026-10-14-001",  "created_at": "2026-10-14T01:00:00+08:00",  "grid_areas":      [{"code": "UB-E", "name": "Улаанбаатар зүүн"}],  "topology_nodes":  [    {"code": "SS-12",  "kind": "SUBSTATION",  "name": "12-р дэд станц", "grid_area": "UB-E"},    {"code": "F-12-3", "kind": "FEEDER",      "name": "Ф-3",           "grid_area": "UB-E", "parent": "SS-12"},    {"code": "TP-881", "kind": "TRANSFORMER", "name": "ТП-881",        "grid_area": "UB-E", "parent": "F-12-3"}  ],  "metering_points": [    {"code": "TP-881-M", "kind": "TRANSFORMER", "grid_area": "UB-E", "topology_node": "TP-881"},    {"code": "0101234567", "kind": "CUSTOMER", "grid_area": "UB-E", "topology_node": "TP-881", "local_zone": "Asia/Ulaanbaatar"}  ],  "readings": [    {"metering_point": "0101234567", "channel": "A+", "tariff": 0, "kind": "REGISTER",     "period_end": "2026-10-14T00:00:00+08:00", "value": 15234.512, "quality": "A", "source_record_id": "hes-77812"},    {"metering_point": "0101234567", "channel": "A+", "tariff": 1, "kind": "REGISTER",     "period_end": "2026-10-14T00:00:00+08:00", "value": 9120.004, "quality": "A"},    {"metering_point": "TP-881-M", "channel": "A+", "kind": "INTERVAL",     "period_start": "2026-10-13T23:45:00+08:00", "period_end": "2026-10-14T00:00:00+08:00", "value": 41.7, "quality": "E"}  ]}

Бүх хэсэг сонголттой боловч багц хоосон байж болохгүй. Бүртгэлийг өөрчлөгдсөн үед илгээхэд хангалттай. Заалтыг өдөр бүр (D+1) илгээнэ.

ТалбарДүрэм
batch_idКомпанийн дотор давтагдахгүй, ≤ 64 тэмдэгт
ЦагRFC 3339, offset заавал (+08:00, +07:00 эсвэл Z). Offset-гүй цагийг татгалзана, учир нь Монгол хоёр цагийн бүстэй (GS §18.5)
codeКомпанийн өөрийн таних дугаар. Бүс ≤ 32, node ба цэг ≤ 64 тэмдэгт. Node-ийн код компанийн дотор давтагдахгүй
topology_nodes[].kindSUBSTATION, FEEDER, TRANSFORMER
topology_nodes[].parentЭнэ node-ийг өнөөдөр тэжээж буй node. Өөр эцэг ирвэл хуучин холбоос одоо хаагдаж, шинэ холбоос нээгдэнэ. Түүх устахгүй
metering_points[].kindFEEDER, TRANSFORMER (тухайн node-ийн урсгалыг хэмжинэ, topology_node заавал), CUSTOMER
local_zoneAsia/Ulaanbaatar (анхдагч) эсвэл Asia/Hovd (Баян-Өлгий, Говь-Алтай, Завхан, Увс, Ховд)
channelA+ идэвхтэй импорт, A- экспорт (kWh); R+, R- реактив (kvarh)
tariff0 нийт регистр, 1–4 тарифын бүсийн регистр (өдөр, шөнө …)
kindREGISTER: period_end агшин дахь хуримтлагдсан индекс. INTERVAL: [period_start, period_end) хугацааны энерги
valueТоо, |утга| < 10¹⁴. 6 аравтын орон хүртэл хадгалагдана
qualityA бодит, E тооцоолсон, S орлуулсан, F эцсийн орлуулалт (AEMO, GS §3)
ХязгаарБагцад ≤ 100,000 заалт, ≤ 20,000 бүртгэлийн мөр. Нэг багцад ижил түлхүүртэй (цэг, channel, tariff, kind, period_end) заалт давтагдахгүй

03Хариу

КодУтга
201Хүлээн авсан: {"receipt_id", "batch_id", "received_at", "readings", "inserted", "duplicate": false}
200Ижил batch_id-ийг ижил агуулгаар дахин илгээсэн. Анхны баримтыг duplicate: true-тэй буцаана, юу ч өөрчлөгдөхгүй. Сүлжээ тасарсан бол итгэлтэйгээр дахин илгээж болно
409Ижил batch_id-ийг өөр агуулгаар илгээсэн. Өөрчлөлтийг шинэ batch_id-аар илгээнэ
422Дүрэм зөрчсөн, эсвэл бүртгэлд байхгүй бүс/node/цэг заасан (эхний 20 кодыг нэрлэнэ)
400, 413JSON биш, мэдэгдэхгүй талбартай, эсвэл 32 MB-аас их

Багц бүхлээрээ хүлээн авагдана эсвэл бүхлээрээ татгалзагдана. Хагас нь орсон байдал гарахгүй.

04Засвар ба давхардал

  • Ижил түлхүүртэй заалт ижил утга, ижил чанартай ирвэл юу ч өөрчлөгдөхгүй (inserted-д тоологдохгүй). Иймээс давхцсан цонхыг дахин илгээж болно.
  • Өөр утга эсвэл чанартай ирвэл шинэ хувилбар болно (version + 1). Хуучин хувилбар түүхэнд үлдэж, supersedes_id-ээр холбогдоно. Түүхий заалтыг дарж бичихгүй (GS §9).
  • Заалт хүлээн авах үеийн цэгийн бүс, node-ийг өөртөө хадгална. Иймээс дараа нь эзэмшил солигдсон ч түүх шилжихгүй (GS §17.6).

05Хэмжилт (2026-10-14, Postgres 16, laptop)

ТохиолдолХугацаа
100,000 заалт, шинэ (статистикгүй) хүснэгт1.9 сек
Давхцсан 100,000 заалт, 1 нь өөрчлөгдсөн, статистикгүй5.1 сек

Анхны хувилбар нэг statement-д уншиж, бичдэг байсан тул шинэ хүснэгт дээр 4 минут болж байсан. Одоо харьцуулалтыг түр хүснэгтээр тусад нь хийдэг.

06Дараагийн хувилбар руу

Шинэ талбар нэмэх нь v1 дотор боломжгүй (мэдэгдэхгүй талбарыг татгалзана). Иймээс өөрчлөлт бүр powergrid.meter-data/v2 болж, v1 тодорхой хугацаанд зэрэг ажиллана. Үйл явдлууд (тасралт, хөндлөнгийн оролдлого) нь v2-ийн нэр дэвшигч.

Was this page helpful?Your answer helps improve the docs.