Архитектур
Хувилбар 0.3 · 2026-10-14 · Төлөв: санал (ADR-ээр батлагдах хүртэл)
Эх сурвалж: олон улсын судалгаа v1.6
(цаашид «GS §N»), нээлттэй эх ба мэдлэг v1.2
(«OS §N»), Nexus цөмийн docs/, docs/, docs/ (backend/).
Хэрэгжүүлэх дараалал: implementation-plan.mn.md.
011. Зорилго ба хамрах хүрээ
PowerGrid бол Монгол Улсын 1,000,000 цахилгааны тоолуурыг (захиалагчийн төлөвлөлтийн таамаглал, албан статистик биш) хамрах зорилготой үндэсний хэмжилтийн өгөгдлийн платформ. Гол үнэ цэнэ нь бодит тоолуурын заалтаас тайлбарлаж болох төлбөр, баталгаатай команд хүртэлх урсгалын зөв байдал (OS §13).
Зорилтын эрэмбэ (GS §18.1):
- Эн тэргүүний зорилт:
- Эрчим хүчний урсгалыг дэд станцаас хэрэглэгч хүртэл бүрэн хянах.
- Гар утсаар төлбөр төлөх.
- Ойрын ирээдүйн зорилт: postpaid-аас prepaid руу шилжих.
«Удирдах» гэдэг нь тоолуурын түвшний удирдлагыг хэлнэ: реле болон ачааллын хязгаар. Сүлжээний сэлгэлтийг SCADA хариуцна.
| Багтана | Багтахгүй |
|---|---|
| Тоолуур, хэмжилтийн цэг, топологийн бүртгэл (FN-01, FN-02); фидер ба трансформаторын системийн тоолуур | SCADA, хамгаалалтын реле, ADMS-ийн шуурхай шийдвэр (GS §8); SCADA-аас зөвхөн уншина |
| Заалт цуглуулах HES адаптер, raw архив (FN-03, FN-12) | Тоолуурын hardware, холбооны сүлжээ |
| VEE, хувилбартай MDM (FN-04) | Хэрэглэгч бүрт SIM байна гэсэн таамаглал |
| Дэд станц → фидер → трансформатор → хэрэглэгчийн баланс (FN-05), дохиолол/осол (FN-06) | Төлбөрийн үйлчилгээ үзүүлэгчийн өөрийн систем (зөвхөн адаптераар) |
| Тариф, shadow billing, ledger, гар утсаар төлөх, prepaid (FN-07, GS §18.3–18.4) | |
| Баталгаатай алсын команд (FN-08) | |
| Эрх, зөвшөөрөл, бүлэглэл, аналитик (FN-09, FN-13–15) | |
| Хэрэглэгчийн портал, ажиллагааны төв (FN-10, FN-11) |
Бүтээгдэхүүний зарчмууд (судалгаанаас):
- Түүхий заалтыг дарж засахгүй — засвар бүр шинэ хувилбар (GS §3, §9).
- DB-ийн төлөв өөрчлөгдсөн нь төхөөрөмж дээр биелсэн гэсэн үг биш (GS §10, FN-08).
- Simulator/туршилтын өгөгдлийг quality төлөвөөр бус, эх үүсвэр ба орчноор тусгаарлана (GS §9).
- Эрхийг засаг захиргаагаар бус, үүрэг + хэмжилтийн цэгтэй холбоо хамаарлаар олгоно (GS §17.4).
- «Exactly once»-д найдахгүй; хүлээн авагч бүр idempotent (GS §14, OS §5.2).
- Шинэ технологийг хэмжсэн нотолгоогоор нэмнэ; эхлээд PostgreSQL (GS §14).
022. Системийн контекст
text1 ┌───────────── Хэрэглэгчид ─────────────┐2 Иргэн/ААН (eID) Түгээх компани ЭХЗХ Аймаг/дүүрэг Гуравдагч тал Аудитор3 │ │ │ │ │ │4 ▼ ▼ ▼ ▼ ▼ ▼5 /api/v1/me/* /api/v1/* (Nexus workspace урсгал) API + зөвшөөрөл6 └────────────────┴──────┬──────┴──────────┴──────────────┴────────────┘7 ▼8 ┌───────── powergrid-api (Nexus host.Run) ─────────┐9 │ powergrid модуль(ууд) + Nexus цөм (auth, RBAC, │10 │ workspace, audit, eID, каталог) │11 └───────┬───────────────────────────┬──────────────┘12 │ PostgreSQL │ outbox → JetStream13 ▼ ▼14 ┌──────────────┐ ┌──────────────────────┐15 │ PostgreSQL │◀────────│ powergrid-worker │ ingest, VEE,16 │ powergrid.* │ │ (Go, тусдаа процесс) │ command, backfill17 └──────────────┘ └──────────┬───────────┘18 │ версионтой мессежийн гэрээ19 ┌──────────▼───────────┐20 │ HES адаптер(ууд) │ бүсчилсэн pool21 │ түгээх компанийн │22 │ импорт/команд (үндсэн)│23 │ DLMS (цоорхойд) │24 └──────────┬───────────┘25 ▼26 Түгээх компаниудын HES/MDM · SCADA (зөвхөн унших) · тоолуур (цоорхойд)033. Nexus дээр буулгах нь
PowerGrid нь Nexus-ийн Go dependency хэлбэрийн distribution (core.lock,
backend/). Цөмийг засахгүй; шаардлагатай өөрчлөлтийг эхлээд цөмд оруулна
(DISTRIBUTION §«Шинэ distribution» 10).
| PowerGrid ойлголт | Nexus дахь хэлбэр |
|---|---|
| Байгууллага (түгээх компани, ЭХЗХ, аймаг, банк) | Workspace (tenant) — registry + workspace. |
| Байгууллагын ажилтан (инженер, оператор, шинжээч) | Workspace гишүүн + Nexus RBAC эрх |
| Final customer (иргэн, ААН) | Хүний урсгал /api/v1/me/*, surfaces: ["person"]; таних нь nexus.EID |
| Платформын оператор (Gerege) | Операторын консол — PowerGrid-ийн өгөгдлийн эрх биш |
| PowerGrid функц | nexus.Register-тэй модуль, catalog/ |
| Модулийн хүснэгт | nexus. → powergrid schema, goose_ |
| Аудит | nexus.Audit + PowerGrid-ийн хандалтын аудит (§7.5) |
| Нууц (төхөөрөмжийн түлхүүр биш) | nexus.Secrets |
| Тайлан | nexus. |
3.1 Модулийн хуваалт
Эхэнд нэг модуль io. (Core) — registry, ingest, MDM/VEE,
баланс, команд, эрх нэг schema-д, хоорондоо FK-тэй. Модуль хооронд FK тавих,
migration-ий дараалал зохицуулах өртгийг суулгалтын хил шаардлагатай болох хүртэл
авахгүй. Хоёр модулийг тусад нь салгана, учир нь хэрэглэгч, өгөгдлийн хил нь өөр:
| Модуль | FN | Surface | Яагаад тусдаа |
|---|---|---|---|
io. — PowerGrid Hub | 01–09, 11, 12 | workspace | Түгээх компани, ЭХЗХ-ны үндсэн ажил |
io. — PowerGrid App | 10, 13 | person | Иргэн өөрийн цэг, «Download/Share My Data». Hub-тэй нэг Go багц, нэг schema (holder_* RLS); route нь цөмийн person gate-ийн ард / |
io. | 14, 15 | workspace | Нутгийн захиргаа Core-ийн түүхий хүснэгтэд хүрэх замгүй байх ёстой (GS §17.4) |
Дотооддоо Core нь Go багцуудаар хуваагдана (registry, ingest, mdm, balance,
billing, command, authz, incident). Тусдаа модуль болгох шалгуур: өөр
байгууллага өөр цагт суулгах шаардлага гарах.
3.2 Процессууд
| Процесс | Үүрэг | Тэлэлт |
|---|---|---|
powergrid-api | Nexus host.Run + модулиуд; UI/API | Хэвтээ, stateless |
powergrid-worker | Ingest consumer, VEE, баланс, command dispatcher, backfill scheduler | Queue consumer group-ээр |
hes-adapter | Протоколын session (DLMS, TEAMI pull) | Бүсээр pool; төхөөрөмж бүрд нэг session эзэн |
migrate | Цөм + модулийн migration | Deploy бүрд нэг удаа |
UI хүсэлт төхөөрөмжтэй шууд харилцахгүй; бүх төхөөрөмжийн ажил queue-ээр (GS §8).
044. Домэйн загвар (Core)
IEC CIM-тэй зураглах боломжтой нэршил (GS §17.3). ID-уудыг хэзээ ч нэгтгэхгүй (GS §3, §10).
text1organisation (= workspace) ─┬─ grid_area ── topology_node (substation → feeder → transformer)2 │ │ хүчинтэй хугацаатай (normal topology)3 ▼ ▼4 metering_point (CIM UsagePoint) — тогтвортой ID, тоолуур солигдсон ч хэвээр5 │ │6 meter_mounting ─────┘ └──── supply_contract ── customer7 (meter ↔ point, valid_from/until; давхцахгүй — EXCLUDE constraint)8 │9 meter (CIM EndDevice) ── device_model ── capability_profile (firmware, OBIS, команд)Lifecycle төлөв тоолуур бүрт тусдаа (GS §5): registered → installed → commissioned → communicating → billing_. KPI тус бүрээр.
4.1 Заалт
GS §9-ийн заавал талбарууд:
| Бүлэг | Талбар |
|---|---|
| Таних | owner_org_id, scope_cell_id, metering_, meter_id, source_system, source_ |
| Утга | channel/OBIS, value (numeric), unit, scaler, direction (import/export) |
| Хугацаа | interval_start, interval_end (timestamptz, UTC), source_, received_at, clock_quality; цэгийн local_zone (Asia/Hovd / Asia/, GS §18.5) — тариф, өдрийн хаалт, таслахгүй цагийг үүгээр |
| Чанар ба хувилбар | quality (A/E/S/F/invalid), version, supersedes_id, rule_version |
| Мөрдөлт | raw_receipt_id, checksum, ingest_job_id, corrected_by, correction_ |
| Тохиргоо | mounting, CT/VT коэффициентийн хувилбар, topology хувилбар |
- Интервал тогтмол биш (5/15/30/60 мин); 30 минутыг хуваасан утгыг 5 минутын бодит гэж тэмдэглэхгүй.
meter_reading— сараар partition,(metering_unique.point_ id, channel, interval_ start, version) - Одоогийн хувилбарыг
is_currentэсвэл тусдаа «current» view-ээр; түүх устахгүй. - kWh индекс, интервалын kWh, агшин зуурын kW нь өөр хэмжигдэхүүн — UI-д холихгүй.
4.2 Raw receipt
Адаптерын batch бүр raw_receipt (source ID, checksum, received_at, payload-ийн
байршил)-д commit хийгдсэний дараа л эх системд ACK буцаана (GS §11). Payload
нь эхэндээ PostgreSQL-д, хэмжээ нотлогдвол object storage руу (GS §14).
055. Өгөгдлийн урсгал
5.1 Заалтын урсгал
text1тоолуур / TEAMI ─▶ HES адаптер ─▶ JetStream (readings.raw.<region>)2 ─▶ ingest consumer: idempotency_key = (source_system, source_record_id, checksum)3 ├─ raw_receipt INSERT (давхардвал no-op)4 └─ canonical meter_reading (quality=A, version=1)5 ─▶ VEE ─┬─ тэнцсэн → баталгаажсан архив → баланс, billing, портал6 └─ унасан → quarantine (billing-д автоматаар орохгүй)7 ─▶ хожуу бодит заалт → шинэ version → нөлөөлсөн баланс/billing-ийн дахин тооцох жагсаалтVEE шалгалтууд (GS §9): давхардал, интервалын давхцал/цоорхой, хүрээнээс гарсан утга,
индекс буурсан, rollover, тоолуур солилт, цагийн зөрүү, нэгж/коэффициент өөрчлөлт.
Экспорт дэмждэг төхөөрөмжийн сөрөг утга алдаа биш. Дүрэм нь capability_ ба
хэмжилтийн төрлөөс хамаарна; дүрэм бүр хувилбартай.
5.2 Командын урсгал (FN-08)
text1REQUESTED ─▶ APPROVED ─▶ QUEUED ─▶ SENT ─▶ ACKNOWLEDGED ─▶ VERIFIED2 │ │ │ │ │3 └───────────┴──────────┴────────┴───────────┴──▶ FAILED | UNKNOWN | EXPIRED | CANCELLEDapproved_— CHECK constraint (хоёр түлхүүр, GS §17.7).by <> requested_ by - Worker илгээхийн өмнө эрх, хугацаа, хамгаалагдсан хэрэглэгч, маргаантай нэхэмжлэлийг дахин шалгана.
- ACK ≠ VERIFIED; read-back-аар батална. Timeout → UNKNOWN + төлөв шалгах ажил; сохор retry хийхгүй.
- Төхөөрөмж бүрд нэг идэвхтэй команд (partial unique index); bulk командад тоо, хурд, бүсийн хязгаар.
- Командын эрх (
command.,request command.) ньapprove reading.read-ээс тусдаа. - Туршилтын ба бодит командын түлхүүр, дараалал тусдаа.
5.3 Төлбөр (FN-07)
- Тариф: хүчинтэй хугацаа, ангилал, шатлал, татвар, дугуйруулах дүрэм; хувилбартай.
- Нэхэмжлэх нь хэрэглэсэн хэмжилтийн ба тарифын хувилбарыг заана; мөнгө
numeric/мөнгөний хамгийн жижиг нэгж. - Ledger append-only: давтан callback → нэг бичилт (idempotency key), буцаалт эсрэг бичилтээр.
- Хаагдсан нэхэмжлэлийг чимээгүй өөрчлөхгүй — засварын баримт.
- Хуучин системтэй зөрүү шийдэгдэх хүртэл автомат таслалт идэвхгүй (GS §7).
- Гар утсаар төлөх (GS §18.3):
- PowerGrid бол биллер.
payment_адаптер нь invoice/QR үүсгэх, статус асуух, callback, буцаалт, settlement файлыг хариуцна.provider - Нээлттэй billing API (ADR-010): нэхэмжлэл бүх төлбөрийн апп, банк, QR үйлчилгээ, e-Mongolia руу нэг стандарт API-аар очно; иргэн дуртай аппаараа төлнө. PowerGrid App-ыг төлбөрийн суваг болгон онцлохгүй.
- Callback-д дангаар итгэхгүй, үйлчилгээ үзүүлэгчээс статусыг асууж баталгаажуулна.
- Өдөр бүр ledger ↔ settlement ↔ billing-ийг тулгана.
- PowerGrid-ийн billing бэлэн болох хүртэл нэхэмжлэлийг одоогийн billing-ээс импортолж, төлбөрийг outbox-оор буцааж илгээнэ.
- PowerGrid бол биллер.
- Prepaid (GS §18.4):
- Дансны горим нь
POSTPAID | PREPAID. - Үлдэгдлийг ledger тооцож, өдрийн register snapshot-оор хасна.
- Таслалт, залгалт нь §5.2-ын командын урсгал болон хамгаалалтын бодлогын хөдөлгүүрээр (таслахгүй цаг, хүйтний хориг, хамгаалагдсан хэрэглэгч) явна.
- Emergency credit болон өрийн суутгалыг тохиргоогоор тогтооно.
- Дансны горим нь
5.4 Баланс (FN-05)
зөрүү = оролт − гаралт − зөвшөөрөгдсөн тоолуургүй хэрэглээ; оролт тэг/баталгаагүй
бол хувь тооцохгүй. Dashboard зөрүүтэй хамт бүрэн байдал, estimated хувь, хамрагдсан
цэгийн тоо, topology хувилбарыг харуулна. Бүрэн бус бүлэг алдагдлын чансаанд орохгүй (GS §9).
066. Технологийн сонголт
| Давхарга | Эхний сонголт | Солих нөхцөл (нотолгоо) |
|---|---|---|
| Backend | Go 1.26, Nexus SDK | — |
| Frontend | Nexus Next.js shell + @gerege-systems/ | — |
| OLTP + хэмжилт | PostgreSQL 16, сараар partition, batch insert, өдөр/сарын aggregate | Query/retention өртөг хэмжигдэж өссөн → ClickHouse (зөвхөн аналитик, ledger биш) |
| Queue | NATS JetStream (PoC-д Kafka-тай ижил нөхцөлөөр харьцуулна) | Урт replay, олон consumer → Kafka |
| DLMS | Gurux Python адаптер (лаб); gxdlms-go-г ижил тестээр харьцуулна | GPL/арилжааны лицензийн шийдвэр ADR-д |
| Эрх | PostgreSQL authz схем + RLS + pgTAP | Олон систем нэг эрх хуваалцах → OpenFGA/SpiceDB PDP |
| Нууц/түлхүүр | nexus.Secrets (апп); DLMS түлхүүрт OpenBao турших | HSM шаардлага ADR-д |
| Ажиглалт | Nexus /metrics + Prometheus/Grafana; label нь бүс/адаптер/загвар (serial биш) | — |
| Backup | Одоогийн pg_dump (rollout) → pgBackRest + PITR | Ledger RPO 0 → synchronous replica |
| GIS | Эхэндээ координат багана | Газарзүйн query → PostGIS |
TimescaleDB-ийн continuous aggregate/columnstore/retention нь TSL — ашиглахын өмнө хуулийн шалгалт (GS §17.11). ThingsBoard 4.4+ (BUSL), GXF (retired) суурь болохгүй.
077. Өгөгдөлд хандах эрх (FN-09)
7.1 Хоёр давхаргын тусгаарлалт
Nexus-ийн dbguard холболт бүрийг gerege_ role, app.,
app.-аар уядаг. Энэ нь «өөрийн байгууллагын мөр» гэсэн нэг хэмжээс.
PowerGrid-д хэмжээс илүү: ЭХЗХ бүх grid area-г, гуравдагч тал зөвшөөрлөөр нэг
цэгийг, инженер өөрийн топологийн бүсийг харна. Тиймээс powergrid хүснэгтүүдийн
бодлого:
sql1CREATE POLICY reading_select ON powergrid.meter_reading2FOR SELECT TO gerege_nexus_tenant3USING (4 (SELECT authz.has_all('reading.read'))5 OR scope_cell_id = ANY ((SELECT authz.allowed_cells('reading.read')))6);authz. нь app., app.-аас (dbguard тавьсан)
тухайн хэрэглэгчийн бүх grant-ыг нэгтгэнэ: эзэмшигч байгууллагын өөрийн cell-үүд нь
OPERATIONAL grant, ЭХЗХ-ны хандалт REGULATORY grant, гуравдагч тал CUSTOMER_
grant. Ингэснээр байгууллага дамнасан хандалт тусгай policy шаардахгүй.
(SELECT …) нь InitPlan болж transaction-д нэг удаа тооцогдох ёстой — EXPLAIN-аар
батална (GS §17.5). Анхаар: зөвхөн cell-ээр шүүх нь METERING_POINT (гуравдагч тал нэг цэг)
ба data_ (аудитор, эзэмшил шилжүүлэх) grant-ыг илэрхийлж чадахгүй.
Cell + цэг + хугацааны authz. EXISTS хувилбарыг GS §17.5-аас үз.
Энэ policy-ийн эцсийн хэлбэр ADR-001-ийн сэдэв (§11).
7.2 Grant
text1access_grant2 grantee_org_id / grantee_user_id3 basis REGULATORY | OPERATIONAL | CONTRACT | CUSTOMER_CONSENT | AUDIT4 role DSO_OPERATOR | ENGINEER | REGULATOR_VIEWER | SECAUD | …5 action reading.read | summary.read | pii.read | export | tariff.change6 | command.request | command.approve7 scope_kind ALL | GRID_AREA | TOPOLOGY | GROUP | METERING_POINT8 scope_ids ALL-аас бусад үед хоосон байж болохгүй (CHECK)9 data_from / data_until, valid_from / valid_until10 purpose, legal_ref, group_snapshot_version, statusБодит эрх = байгууллагын grant-уудын нэгдэл ∩ үүргийн эрх ∩ хэрэглэгчийн хамрах хүрээний нэгдэл. Нэг grant доторх нөхцөл AND; grant хооронд cross-product үүсгэхгүй.
7.3 Scope cell
(owner_ хослол бүрт scope_cell_id.
Заалт, команд, төлбөр бүр хэмжилтийн үеийн харьяаллаар cell-тэй хадгалагдана; команд
одоогийн харьяаллаар шалгагдана (GS §17.6). Cell-ийн тоо ≈ трансформаторын тоо.
Засаг захиргаа Core-д атрибут, эрхийн хэмжээс биш.
7.4 Service role
| Role | Эрх |
|---|---|
powergrid_ | Зөвхөн INSERT, өөрийн HES-д бүртгэлтэй owner_org_id-оор WITH CHECK; SELECT-гүй |
powergrid_ | Командын төлөв шилжүүлэх; заалт бичихгүй |
powergrid_ | Analytics dataset бичих; Core-ийг зөвхөн нэгтгэлийн view-ээр унших |
Background job хэрэглэгчийн эрх өвлөхгүй. Аппын role-д BYPASSRLS болон хүснэгтийн
эзэмшил өгөхгүй; хүснэгт FORCE ROW LEVEL SECURITY.
Итгэлийн хязгаар: аппын DB хэрэглэгч SET LOCAL app.-ийг өөрөө тавьж чадна —
RLS нь аппын алдаанаас хамгаална, эвдэрсэн аппаас бүрэн биш (GS §17.5). Үүнийг
threat model-д ингэж бичнэ.
7.5 Зөвшөөрөл (FN-13) ба аналитик (FN-15)
- 2023/1162-ийн 6 процедур = хүлээн авах тестийн сценари. Цуцлалт дараагийн хүсэлтээс хүчинтэй, бүх талд мэдэгдэл.
- «Download My Data» ба «Share My Data» тусдаа функц, эрх, аудит. Экспорт CIM/Green Button-тэй зураглах JSON/CSV.
- Баталгаажсан түүхэн өгөгдөл ба баталгаажаагүй шуурхай өгөгдөл өөр суваг, өөр шошго.
- Аналитик: k ≥ 10 (нутгийн захиргаа, нээлттэй, өдөр+), k ≥ 5 (DSO төлөвлөлт, 15–30 мин); k-ээс бага нүд «<k». Зөвхөн урьдчилан тодорхойлсон бүлэг нийтэлнэ (ялгавар халдлага). k нь санал — ЭХЗХ/хуулиар батална.
- ЭХЗХ, аудиторын дэлгэрэнгүй хандалт бүр: хэн, юу, хэзээ, ямар grant-аар.
7.6 Бүлэглэл (FN-14)
Засаг захиргааны мод bitemporal; дурын бүлэг (CIM UsagePointGroup). Гишүүнчлэлийн snapshot хувилбар, огноотой; Core аль хувилбарыг хэрэглэснээ аудитад хадгална. Шинэ бүлэглэл Core-ийн schema, RLS-ийг өөрчлөхгүй.
088. Аюулгүй байдал
| Чиглэл | Хэрэгжүүлэлт |
|---|---|
| Нэвтрэлт | Nexus (password, eID, OIDC); оператор/командын эрхтэнд MFA |
| Сүлжээний зааг | OT (адаптер ↔ төхөөрөмж), ingestion, хэрэглэгчийн API тусдаа сегмент; порталаас төхөөрөмжид зам байхгүй |
| Төхөөрөмжийн түлхүүр | UI, Git, log, payload-д байхгүй; key version, rotation; зөвхөн адаптер авна |
| Аудит | actor, before/after, reason, request ID; энгийн CRUD-аар устгагдахгүй |
| Хувийн мэдээлэл | Log, тайлан, алдааны хариунд PII/түлхүүр гарахгүй; Хүний хувийн мэдээлэл хамгаалах тухай хууль — DPIA |
| Supply chain | distribution-security. долоо хоног бүр; SBOM, license inventory |
Threat model (OS §10.3): meter key алдагдах, хуурамч команд, tenant хооронд задрал, replay, supply-chain өөрчлөлт, backup устах.
099. Багтаамж
| Тоолуур | Бичлэг/өдөр (1 суваг) | Бичлэг/жил | Дундаж/сек | 15 мин оргил (60 сек) |
|---|---|---|---|---|
| 10,000 | 960,000 | 350 сая | 11 | 167/сек |
| 100,000 | 9.6 сая | 3.5 тэрбум | 111 | 1,667/сек |
| 1,000,000 | 96 сая | 35 тэрбум | 1,111 | 16,667/сек (4 суваг: 66,667) |
Түүхий хэмжээ 1 сая × 1 суваг: 3.5–8.8 TB/жил (100–250 B), нийт ×3. 24 цагийн тасалдлыг 6 цагт нөхөх нь 4 сувагт ~22,000 бичлэг/сек (OS §9.1). Эдгээр нь тооцоо — туршилтаар батлагдаагүй. Ачааллын заавал турших хувилбарууд: GS §14.
1010. Ажиллагаа
- Хэмжүүр (Prometheus): read success, D+1 completeness, queue lag, backfill age, command UNKNOWN, DB write latency, backup age.
- On-call ялгах ангилал: тоолуур offline / холбоо / queue хоцрол / DB / billing зөрүү.
- Нэг фидерийн олон дохиолол → нэг incident; холбоо тасрах ≠ цахилгаан тасрах (GS §5).
- RPO/RTO санал: MDM RPO ≤ 15 мин, RTO ≤ 4 цаг; ledger RPO 0 зорилт.
- Deploy: deployment.mn.md (одоо нэг сервер, compose).
1111. Шийдвэрийн бүртгэл (ADR)
docs/-д бичнэ. Нээлттэй:
| # | Асуулт | Санал | Хэн шийдэх |
|---|---|---|---|
| ADR-001 | Nexus tenant RLS + PowerGrid scope cell-ийг нэг policy-д хэрхэн нийлүүлэх; байгууллага дамнасан grant | §7.1 загвар; pgTAP + EXPLAIN-аар батлах | Архитектор, DBA |
| ADR-002 | Hub эсвэл тархсан (DSO бүр өөрийн MDM) | Hub: түгээх компаниуд өөрийн HES/MDM-ээ хадгалж, өгөгдлөө гэрээгээр илгээнэ; команд тэдний HES-ээр (GS §18.2) | Захиалагч, ЭХЗХ |
| ADR-015 | Өгөгдөл солилцооны гэрээ | CIM-тэй зураглагдах JSON/CSV, D+1, засвар = шинэ version | Архитектор, түгээх компаниуд |
| ADR-003 | Зөвшөөрлийн бүртгэлийн эзэн, хариуцлага | — | Захиалагч, хуулийн зөвлөх |
| ADR-004 | Хэрэглэгчийн зөвшөөрлийг eID-ээр баталгаажуулах | Тийм (nexus.EID) | Захиалагч |
| ADR-005 | k босго, нарийвчлал, нээлттэй өгөгдлийн хүрээ | k=10/5 | ЭХЗХ |
| ADR-006 | Эрхийн эх сурвалж: authz схем эсвэл OpenFGA/SpiceDB | authz схемээр эхлэх | Архитектор |
| ADR-007 | DLMS сан ба лиценз (Gurux GPL/арилжааны, gxdlms-go) | Лабд Python, Go-г харьцуулах | Техникийн удирдагч |
| ADR-008 | Queue: JetStream эсвэл Kafka | JetStream | PoC-ийн benchmark |
| ADR-009 | teami-gerege-uz кодыг шилжүүлэх эсвэл лавлагаа болгох | Лавлагаа; TEAMI pull логикийг адаптер болгон шилжүүлэх | Техникийн удирдагч |
| ADR-010 | Төлбөрийн архитектур | Батлагдсан: PowerGrid биллер, нээлттэй billing API — аль ч төлбөрийн апп; payment_ адаптер, payment hub-аар эхлэх | Захиалагч, техникийн удирдагч |
| ADR-011 | SCADA интеграц | Зөвхөн унших; CIM экспорт эсвэл IEC 104 gateway | Захиалагч, диспетчерийн төв |
| ADR-012 | Цагийн бүс | UTC хадгалалт; цэг бүрт local_zone | Архитектор |
| ADR-013 | Prepaid загвар | Серверийн үлдэгдэлтэй ухаалаг prepaid; STS нөөц | Захиалагч |
| ADR-014 | Хамгаалалтын бодлогын анхны утга | GS §18.4 хүснэгт | ЭХЗХ |