Төлбөрийн гэрээ
Хувилбар 1 · 2026-10-14 · Төлөв: sandbox (PGX-20–25) · Код: modules/
Үе 1B-ийн payment hub (GS §18.3). Компанийн одоогийн billing систем нэхэмжлэх үүргээ хэвээр хадгална. PowerGrid нь дансны үлдэгдлийг ledger-ээр хөтөлж, хэрэглэгчийн гар утсаар хийсэн төлбөрийг хүлээн авна. Дараа нь billing систем тэр төлбөрийг PowerGrid-ээс татаж авна.
text1billing ──(данс, нэхэмжлэл)──▶ PowerGrid ledger ◀──(төлбөр)── хэрэглэгч ─▶ банк/QPay2billing ◀──(төлсөн төлбөр, ack)── PowerGrid ◀──(settlement файл)── үйлчилгээ үзүүлэгч01API (/api/v1/powergrid )
| Арга | Зам | Эрх | Утга |
|---|---|---|---|
| POST | / | manage | Данс ба нэхэмжлэл илгээх (≤ 100,000 тус бүр) |
| GET | / | read | Үлдэгдэл, сүүлийн 12 нэхэмжлэл, сүүлийн 50 бичилт |
| POST | / | manage | Төлбөр үүсгэж QR авах: {"amount": "50000", "idempotency_ |
| POST | / | нэвтрэлтгүй | Үйлчилгээ үзүүлэгчийн мэдэгдэл (rate limit 600/мин) |
| GET | / | read | Төлөгдсөн боловч billing хүлээж аваагүй төлбөрүүд (хуучнаас нь, ≤ 1000) |
| POST | / | manage | {"payment_: billing хүлээж авснаа баталгаажуулна |
| POST | /settlements | manage | Үйлчилгээ үзүүлэгчийн өдрийн settlement-ийг хадгалж тулгалт буцаана |
| GET | / | read | Нэг өдрийн тулгалт |
02Импорт
json1{2 "contract": "powergrid.billing/v1",3 "accounts": [{"account_no": "0101234567", "name": "Бат", "metering_point": "0101234567", "holder_reg_no": "УБ99010101"}],4 "invoices": [{"external_id": "INV-2026-10-0001", "account_no": "0101234567",5 "issued_on": "2026-10-01", "due_on": "2026-10-25", "amount": "125000.50"}]6}account_no≤ 32,external_id≤ 64 тэмдэгт. Хоёуланд нь урд, хойно хоосон зай байж болохгүй. Нэг импортод давтагдахгүй.holder_reg_noнь сонголттой: дансны эзэмшигчийн регистр (иргэнУБ99010101, ААН 7 оронтой). PowerGrid App-д иргэн eID-ээр дансаа холбох нөхцөл нь энэ. Өөр утгаар дахин илгээвэл хуучин эзэмшигч тэр даруй харахаа болино. Талбаргүй илгээвэл хадгалсан утга хэвээр үлдэнэ.holder_sinceнь сонголттой (YYYY-MM-DD): энэ эзэмшигчийн гэрээ эхэлсэн өдөр. Эзэмшигч үүнээс өмнөх заалт, нэхэмжлэл, төлбөрийг харахгүй. Өгөхгүй бол шинэ эзэмшигч нь импортын мөчөөс, PowerGrid-д анх бүртгэгдсэн эзэмшигч нь бүх түүхийг харна. Эзэмшигч солигдоход өмнөх эзэмшигчийн өгсөн бүх зөвшөөрөл автоматаар цуцлагдана.tariffнь сонголттой: PowerGrid-ийн тарифын код (GET /tariffs). Зөвхөн PowerGrid-ээр нэхэмжилдэг компанид хэрэгтэй (доорх «PowerGrid-ийн өөрийн billing»). Талбаргүй илгээвэл хадгалсан утга хэвээр үлдэнэ.metering_pointнь сонголттой. Утга өгвөл бүртгэлд байгаа цэгийн код байна (prepaid-д хэрэгтэй).amountнь 0 эсвэл эерэг тоо, хамгийн ихдээ 2 аравтын оронтой. Мөнгөн дүнг хөвөгч таслалтай тоо (float) болгож хувиргахгүй, хариунд string-ээр буцаана.- Дахин илгээх аюулгүй. Ижил агуулгаар дахин илгээхэд юу ч өөрчлөгдөхгүй. Нэхэмжлэлийн дүн өөрчлөгдвөл шинэ хувилбар үүсэж, ledger-т зөвхөн зөрүүг нь
INVOICE_болгон бичнэ.ADJUSTMENT - Нэхэмжлэлийг өөр данс руу шилжүүлбэл 422 буцаана, учир нь өрийг өөр хүн рүү шилжүүлсэн хэрэг болно.
- Байхгүй данс, цэг заасан бол 422, эхний 20 кодыг нэрлэнэ. Импорт бүхлээрээ орох эсвэл бүхлээрээ татгалзагдана.
03Ledger
ledger_entry нь зөвхөн нэмэгддэг: DB-ийн эрхэнд UPDATE, DELETE байхгүй. Нэхэмжлэл
дансны үлдэгдлийг нэмж (+), төлбөр хасна (−). Дансны үлдэгдэл бол бичилтүүдийн нийлбэр.
Бичилт бүр idempotency_-тэй (invoice:<external_, payment:<id>),
тиймээс давтан бичигдэх боломжгүй.
04Төлбөр
- Апп эсвэл кассчин
POST /дуудна. Сүлжээ тасарсан бол ижилaccounts/ {no}/ payments idempotency_-ээр дахин илгээхэд ижил төлбөр буцаана. Тэр түлхүүрийг өөр дүн эсвэл дансанд ашиглавал 409.key - PowerGrid үйлчилгээ үзүүлэгчээс QR авна (
Provider.). Хариу ирэхгүй бол 502 буцаана, ижил түлхүүрээр дахин оролдоно.CreateInvoice - Үйлчилгээ үзүүлэгч
/-ийг дуудна. Callback нь нотолгоо биш: PowerGrid тухайн үйлчилгээ үзүүлэгчээсpayments/ {id}/ callback Check(ref)-ээр өөрөө асууна. Төлсөн дүн таарвал нэг transaction-дPENDING → PAIDболгож, ledger-тPAYMENTбичнэ. Callback олон удаа, зэрэг ирсэн ч бичилт нэг л удаа хийгдэнэ (тестэд 8 зэрэг callback). Дүн зөрвөл төлбөрPENDINGхэвээр үлдэж, лог болон тулгалтад гарна. - Billing
GET /-ээр татаж, өөрийн системдээ бичээдbilling/ payments ackхийнэ (PGX-25-ийн pull хэлбэр). Ack-гүй үлдсэн төлбөрийг дахин татахад дахин гарч ирнэ.
05Тулгалт (PGX-24)
POST /
нь Улаанбаатарын цагаар нэг өдрийг тулгана:
| Талбар | Утга |
|---|---|
matched | Тухайн өдрийн settlement мөрөөс төлбөртэй тохирсон нь (төлбөр өмнөх өдөр хийгдсэн байж болно) |
paid_ | Тухайн өдөр төлөгдсөн боловч аль ч өдрийн settlement-д ороогүй |
settled_ | Үйлчилгээ үзүүлэгч шилжүүлсэн гэж мэдээлсэн боловч PowerGrid-д төлөгдсөн төлбөр байхгүй |
amount_differs | Хоёр талд байгаа боловч дүн нь өөр |
billing_ | 1 цагаас өмнө төлөгдсөн боловч billing хүлээж аваагүй |
Жагсаалт бүр нь хүн шалгаж тайлбарлах ёстой зөрүүнүүд. Гол үзүүлэлт: өдөр бүр 100% тулгагдсан байх.
06Үйлчилгээ үзүүлэгч
POWERGRID_ орчны хувьсагчаар сонгоно. Утга өгөөгүй бол төлбөр
хаалттай байж, 503 буцаана. Одоогоор зөвхөн sandbox байгаа: нэхэмжлэл бүрийг
шууд төлөгдсөн гэж үзнэ, санах ойд хадгална. Production-д ашиглахгүй. Жинхэнэ
үйлчилгээ үзүүлэгчийг (QPay, банк) захиалагч сонгосны дараа (ADR-010) Provider
интерфэйсийн шинэ хэрэгжүүлэлт болгон нэмнэ.
07PowerGrid-ийн өөрийн billing
Өөрийн billing системгүй түгээх компани (жишээ нь Gerege) нэхэмжлэлээ PowerGrid-ээр тооцуулна. Код: rating.go, billing.go.
| Арга | Зам | Эрх | Утга |
|---|---|---|---|
| GET | /tariffs | read | Тариф ба бүх хувилбар |
| PUT | / | manage | {"name"} |
| POST | / | manage | {"valid_ |
| POST | /billing/runs | manage | {"period": "2026-10", "issued_ → {invoiced, unchanged, skipped: [{account_ |
| GET | / | read | Нэхэмжлэлийн одоогийн хувилбар юунаас бүрдсэн бэ |
- Тарифын хувилбар засагдахгүй. Шинэ шийдвэр гарвал шинэ огнооноос эхлэх шинэ хувилбар болно. Тухайн сарыг эхний өдөрт хүчинтэй байсан хувилбараар тооцно.
- Тооцоо: шатлал бүрийн кВт·ц × үнэ + суурь хураамж + НӨАТ.
big.Rat-аар тооцож, зөвхөн нийт дүнг half-up дүрмээр 2 орон хүртэл тоймлоно. - Сарын 15 минутын бүх интервал (A+, одоогийн хувилбар; тооцоолсон, орлуулсан нь орно) ирсэн данс л нэхэмжлэгдэнэ. Дутуу бол
INCOMPLETE, тоолуургүй болNO_METER, тарифын хувилбаргүй болNO_гэж алгасна. Хувь бүр бүрэн дуусаагүй (Ховдын шөнө дунд хүртэл) сарыг 409-оор татгалзана.TARIFF_ VERSION - Нэхэмжлэлийн id:
PG-<сар>-<данс>. Дахин ажиллуулахад өөрчлөгдөөгүй бол юу ч болохгүй. Хожуу засвар ирж дүн өөрчлөгдвөл шинэ хувилбар үүсэж, ledger-т зөвхөн зөрүүINVOICE_болж бичигдэнэ (импортын дүрмээр).ADJUSTMENT invoice_basis: нэхэмжлэлийн хувилбар бүрд тарифын хувилбар, хугацаа, интервалын тоо (байгаа/хүлээгдэж буй/бодит), хамгийн сүүлийн заалт, тооцооны мөрүүд хадгалагдана. Иргэн үүнийг PowerGrid App-аас харна.- Хойшлуулсан: өдөр/шөнийн тариф (TOU), реактив энерги, нэмэгдэл хураамж.
Production-д оруулсан тариф (Гэрэгэ системс, 2026-10-15):
| Код | Хувилбар | Мөрдөх | Шатлал (₮/кВт·ц, НӨАТ-гүй) | Суурь | НӨАТ | Шийдвэр |
|---|---|---|---|---|---|---|
DORNOD-AHUI | 1 | 2026-06-01 | 0–150: 159 · 151–300: 244 · 300<: 274 | 3 360 ₮/сар | 10% | ЭХЗХ-ны 2026.05.29-ний №351, 2-р хавсралт (хүснэгт, ДБЭХС) |
Дорнодын айл өрхийн энгийн тоолуурт. Жишээ: 220 кВт·ц → 150×159 + 70×244 + 3 360 = 44 290, НӨАТ-тэй 48 719 ₮. 2 ба 3 тарифт тоолуурын үнэ ЭХЗХ-ны хүснэгтэд байгаа ч TOU хойшлогдсон тул оруулаагүй. Нийгмийн халамжийн өрхийн хөнгөлөлт (ЭХЗХ №356) ч оруулаагүй.
08Дараа нь
- Буцаалт (refund): ledger-т эсрэг бичилт хийнэ,
Provider-тRefundнэмнэ. - PGX-26: иргэн eID-ээр дансаа холбож өөрөө төлөх нь PowerGrid App-д хийгдсэн (цөмийн person gate —
backend/).v1. 34. 0 - PGX-28: мэдэгдэл.
- Billing руу push хийх (webhook, outbox): billing-ийн интерфэйс тодорхой болсны дараа.