ZETRONIC MCHJ · Texnik tahlil va ish rejasi · 18.08.2026

etender.uzex.uz — taklif hujjatlarini avtomatlashtirish

Platformaning ikkala oqimi jonli teskari tahlil qilindi: API'lari, so'rov imzosi, lot ma'lumot modeli, taklif yuborish zanjiri va ERI to'sig'i. Quyida — nima isbotlangani, nima mumkin emasligi, tavsiya etilgan arxitektura va bosqichma-bosqich vazifalar ro'yxati.

Angular SPA v1.5.2378 API endpoint2 oqimJonli tekshirilganKod hali yozilmagan

01Qisqacha xulosa

Bir kunlik chuqur teskari tahlildan keyin holat aniq: tayyorlash jarayonini 100% avtomatlashtirish mumkin, yakuniy imzo esa har doim operator kompyuterida qoladi. Bu bizning cheklovimiz emas — platformaning o'zi shunday qurilgan, va buni chetlab o'tishga urinish qonuniy jihatdan ham, texnik jihatdan ham noto'g'ri yo'l.

626Faol tanlov loti (18.08.2026)
213Faol konvert e'loni
41 543Ro'yxatdagi yetkazib beruvchi
378Ochilgan API endpoint

Nima isbotlandi

  • Jonli  Platformaning barcha ro'yxat va detal API'lari server tomondan chaqirila oladi — anti-bot Validation headeri to'liq ochildi va takrorlandi.
  • Jonli  Lot detali ichida taklif uchun talab qilinadigan hamma narsa bor: mezonlar, kvalifikatsiya talablari, mahsulot qatorlari, zakalat foizi, texnik topshiriq fayllari.
  • Kodda  Platformada qoralama (Draft) mexanizmi bor va u ERI imzosini talab qilmaydi — biz taklifni to'liq tayyorlab, qoralama sifatida kabinetga joylashtira olamiz.
  • Tanlov  Yakuniy yuborish (AddBid) PKCS#7 ERI imzosini talab qiladi. Brauzerdagi oddiy yo'llar yopiq — lekin serverimizda ishlab turgan sertifikatlangan E-IMZO imzolovchisi bor (SIGN markazi). Demak to'liq avtomat yuborish ham ochiq; bu texnik emas, siyosat qarori.

Tavsiya qilinadigan yechim

Yagona poydevor: serverdagi Tender Studio — kuzatuv, tahlil, narx, hujjat generatsiyasi, PDF muhr/imzo va tayyor paket. Yuborish esa ikki xil bo'lishi mumkin: operator brauzeri orqali (ko'prik) yoki to'liq serverda (SIGN markazi imzosi bilan). Bu tanlovni hozir qilish shart emas — birinchi uch faza ikkalasida ham bir xil. Konvert oqimida esa server chop etishga tayyor to'liq papka beradi.

02Ikki oqim — bir-biridan tubdan farq qiladi

Elektron · to'liq avtomat

Tanlov lotlari

etender.uzex.uz/lots/1/0
  1. Server lotni topadi va mezonlarni o'qiydi
  2. Narx va marja hisoblanadi
  3. Shakl №1–№4 + texnik taklif PDF yaratiladi
  4. Elektron muhr va imzo tasviri PDF ga joylanadi
  5. Kabinetga qoralama sifatida yuklanadi
  6. Operator ko'zdan kechiradi
  7. ERI paroli → yuborildi
Konvert · qo'lda yakunlanadi

Fuqarolik shartnomalari

etender.uzex.uz/civil-list
  1. Server e'lonni topadi va talablarni o'qiydi
  2. Narx va marja hisoblanadi
  3. Hujjatlar to'plami tayyorlanadi
  4. Chop etishga tayyor PDF papka + konvert yorlig'i
  5. Operator chop etadi
  6. Muhr bosiladi, qo'l qo'yiladi
  7. Konvertlanadi va manzilga yetkaziladi

Farq shunchaki "yuborish usuli"da emas. Elektron oqimda platforma bizga tuzilmali mezonlar beradi — har bir mezon uchun alohida fayl biriktiriladi. Konvert oqimida esa hech qanday onlayn taklif shakli yo'q: e'londa faqat manzil, muddat va texnik hujjatlar bo'ladi, qolgani qog'ozda. Shuning uchun ikkinchi oqim uchun tizimning yakuniy mahsuloti — chop etishga tayyor, tartiblangan, raqamlangan hujjatlar papkasi.

Aniqlangan tur kodlari

/lots/:typeId/:regIdtypeId qiymatlari: 1 = tanlov (competitive, bizning asosiy nishonimiz), 2 = tender, 3 = ramkaviy bitim, 4 = muqobil energetika, 5 = master-savdo, 6 = loyiha muhokamasi. regId=0 — barcha viloyatlar.

03Platforma texnik tahlili

3.1 Sayt qanday qurilgan

etender.uzex.uz — bu Angular SPA. Sahifani oddiy curl bilan olsangiz, atigi 748 baytlik bo'sh qobiq keladi; barcha mazmun JavaScript orqali API'dan yuklanadi. Demak sahifani "o'qib olish" (scraping) mantiqsiz — to'g'ridan-to'g'ri API bilan ishlash kerak. Ilova konfiguratsiyasi main.js ichidan to'liq chiqarildi:

version:        "1.5.2"
authUrl:        https://id.uzex.uz          ← ERI bilan kirish
authApiUrl:     https://idapi.uzex.uz
newId:          https://id-api.uzex.uz
serverUrl:      https://apietender.uzex.uz  ← asosiy API
serverUrlNew:   https://api-etender-new.uzex.uz
tradeUrl:       https://xarid-api-trade.uzex.uz  ← umumiy lug'atlar
fileServiceUrl: https://etender-fileservice.uzex.uz
minioUrl:       minio-cdn.uzex.uz
requiredEsi:    true                        ← ERI imzosi majburiy
domain:         "etender.uzex.uz"

E'tiborli jihat: tradeUrl — bu bizga allaqachon tanish xarid-api-trade.uzex.uz, ya'ni Zetron'dagi UZEX integratsiyasida ishlatiladigan lug'atlar (viloyatlar, tumanlar, toifalar, mahsulotlar) shu yerda ham bir xil. Bu lug'atlarni qaytadan qurish shart emas.

3.2 Validation headeri — ochildi

Platformaning har bir API so'rovida Validation nomli sirli header bor. Bu — anti-bot himoyasi. main.js ichidagi interceptor'dan uning to'liq algoritmi topildi va u oddiy, kalitsiz va to'liq takrorlanadigan ekan:

Validation = base64( RSA_encrypt_PKCS1( PUBLIC_KEY, "<api-yo'li>~dd.MM.yyyy" ) )

Ochiq kalit ham main.js ichida ochiq turibdi (1023-bitli RSA). Ya'ni: har bir so'rov uchun "yo'l + bugungi sana" satri ochiq kalit bilan shifrlanadi. Sana kunlik almashadi, kalit statik.

Jonli tekshirildi · 18.08.2026

Python bilan header qayta yasaldi va GET /api/common/GetTopStats/0 chaqirildi → HTTP 200, javob: {"deals_count":3355,"gov_customers_count":10289,"providers_count":41543,"active_proposals":675}. Demak server tomondan avtorizatsiyasiz kuzatuv ishlaydi.

Amalda buni PHP'da takrorlash ham bir necha qator:

$payload = $path . '~' . date('d.m.Y');
openssl_public_encrypt($payload, $enc, $publicKey, OPENSSL_PKCS1_PADDING);
$header = 'Validation: ' . base64_encode($enc);
Ehtiyot chorasi

Kalit va algoritm platformaning yangi relizida o'zgarishi mumkin (fayl nomlari hash bilan versiyalangan). Shuning uchun tizimga avto-tekshiruv kiritamiz: index.html dagi bundle hash o'zgarsa, ogohlantirish beriladi va kalit qayta chiqariladi.

3.3 So'rov sarlavhalari

HeaderQiymatIzoh
Validationyuqoridagi RSA satrHar bir so'rovda majburiy
AuthorizationBearer <token>Faqat kabinet amallarida
Languageuz / ru / enJavob tilini belgilaydi
Acceptapplication/json
User-Agentto'liq brauzer satriQisqa UA → WAF rad etadi

04API xaritasi

main.js dan 378 ta endpoint yo'li ajratib olindi. Bizga tegishlilari quyida. To'liq ro'yxat /root/etender-auto/research/api_paths.txt faylida saqlandi.

4.1 Kuzatuv va o'qish — avtorizatsiyasiz ishlaydi

MetodYo'lVazifaHolat
POST/api/common/TradeListTanlov lotlari ro'yxati200 ✓
GET/api/common/GetTrade/{id}/0Lotning to'liq detali200 ✓
POST/api/CivilContracts/GetListKonvert e'lonlari ro'yxati200 ✓
GET/api/CivilContracts/Get/{id}Konvert e'loni detali200 ✓
GET/api/common/GetTopStats/0Umumiy statistika200 ✓
GET/api/Common/GetCriteriaFiles/{id}Mezon bo'yicha fayllartekshiriladi
GET/api/common/GetProposalUsers/{id}Ishtirokchilar ro'yxatitekshiriladi
POST/api/common/NotDealedListBo'lib o'tmagan savdolartekshiriladi
POST/api/common/DealsListYakunlangan bitimlartekshiriladi
POST/api/Common/TradeListXlsRo'yxatni XLSX qilib olishtekshiriladi
GET/api/common/DownloadFileTexnik topshiriq fayllaritekshiriladi

TradeList so'rov tanasi (localStorage'dagi tradeListFilter ob'ekti bilan bir xil): From, To (yozuv-offset diapazoni, sahifa raqami emas), TypeId, RegionId, District_Id, CurrencyId, System_Id: 0 va qidiruv/narx filtrlari. Javobning birinchi elementidagi total_count — umumiy soni.

4.2 Kabinet amallari — Bearer token talab qiladi

MetodYo'lVazifaERI imzo
POST/api/Draft/AddBid?name={nom}Taklifni qoralama qilib saqlashKerak emas
GET/api/Draft/GetBidListQoralamalar ro'yxatiKerak emas
GET/api/Draft/GetBid/{id}Qoralamani ochishKerak emas
POST/api/Provider/AddBidTaklifni rasman yuborishMAJBURIY
POST/api/Provider/UploadFile/{n}Fayl yuklashKerak emas
POST/api/Provider/EncodeFileFaylni shifrlash
POST/api/Provider/CalcPledgeByLotZakalat summasini hisoblash
POST/api/Provider/CalcProviderComissionAndPledgeKomissiya + zakalat
GET/api/Provider/IsNeedToLoadQualificationFieldsKvalifikatsiya kerakmi
POST/api/Provider/AddQualificationFields/{id}Kvalifikatsiya hujjatlari
GET/api/provider/getBidsBizning takliflarimiz
POST/api/Esi/SetSignatureImzoni ro'yxatga olish
POST/api/Esi/VerifyCertificateSertifikatni tekshirish
Eng muhim topilma

/api/Draft/AddBid — taklifning butun tanasini (narx, mahsulot qatorlari, mezon javoblari, barcha fayllar) qoralama sifatida saqlaydi va ERI imzosini so'ramaydi. Kodda ko'rinib turibdi: qoralama yuborishda faqat Authorization va Validation headerlari bor, signed_data/signature maydonlari esa faqat rasmiy yuborishda qo'shiladi. Bu bizning butun avtomatlashtirish strategiyamizning tayanch nuqtasi.

05Lot va taklif ma'lumot modeli

Bitta jonli lot (id=506376, "25 yillik yubiley uchun kristal shisha suvenirlar", "SHURTAN GAZ KIMYO MAJMUASI" MCHJ, 76 800 000 so'm) to'liq yuklab olindi va tuzilmasi ochildi. Taklif tayyorlash uchun kerak bo'lgan hamma narsa shu bitta javobda bor.

MaydonNamuna qiymatBizga nima uchun kerak
display_no26120012506376Hujjatlardagi lot raqami
end_date2026-08-18T10:41:31Muddat — ogohlantirish taymeri
start_cost76 800 000Boshlang'ich narx, marja hisobi
valuation_nameEng past narx usuliBaholash strategiyasi (yoki "Ball usuli" 70/30)
type_nameEng yaxshi takliflarni tanlashOqim turini aniqlash
budget_products[]toifa, miqdor, o'lchovNarx jadvalining qatorlari
fields[]JSON satr — mezonlarHar bir mezon = alohida hujjat
qualification_fields[]9 ta talabKvalifikatsiya papkasi
pledge_name / pledge_valueZakalat talab etiladi / 3.0Zakalat summasi = 3%
tech_file_path/files/2026/8/6/…rarTexnik topshiriq — tahlil uchun
contract_proform_file_path…docxShartnoma loyihasi
term_payment_days20To'lov muddati — moliyaviy qaror
is_local_manufacturstrueMahalliy ishlab chiqaruvchi imtiyozi
authorized_count19Raqobat darajasi indikatori

5.1 Mezon (fields) tuzilmasi — avtomatlashtirishning yuragi

Har bir mezon quyidagicha keladi (qisqartirilgan):

{
  "Type_Name": "BINARY_VALUE",
  "Label": "Товарнинг зарур техник тавсифига қўйиладиган талаблар…",
  "Is_Required": true,
  "Is_File_Required": true,            ← fayl biriktirish MAJBURIY
  "File_Name": "3-sonli shakl hamda 1 va 2-ilovasiga muvofiq shakllantiriladi",
  "Gravity": 100.0,                    ← mezon vazni (ball usulida)
  "Description": "Texnik taklif / Техническое предложение",
  "Form_Name": "Texnik taklif / Техническое предложение",
  "Control": { "Yes_text": "Согласен", "No_text": "Не согласен" }
}

Ya'ni platformaning o'zi bizga aytadi: qaysi shakl kerak (File_Name ichida "3-sonli shakl", "1 va 2-ilova" deb yozilgan), fayl majburiymi, vazni qancha. Demak hujjat generatori uchun kirish ma'lumoti tayyor — buni qo'lda kiritish shart emas. Aynan shu sabab avtomatlashtirish real.

5.2 Taklif (Bid) modeli

AddBid ga multipart/form-data ko'rinishida yuboriladigan ob'ekt:

TradeId, Old_Id, Cost, Currency_Id, Currency_Code, Currency_Curs,
DeliveringDays, Is_local_manufacturs, Is_Agree_To_Show_Files,
pledge_type_id, isLocalFile, guaranteesFile,
Products[]              ← har bir mahsulot qatori: narx, QQS, miqdor
Fields[]                ← mezon javoblari + fayllar
QualificationFields[]   ← kvalifikatsiya javoblari + fayllar
Requirements[]          ← talablar bo'yicha fayllar
Additional[], EditBankFile[]
── rasmiy yuborishda qo'shiladi ──
signed_data             ← taklifning JSON nusxasi
signature               ← shu JSON ning PKCS#7 ERI imzosi

E'tibor bering: imzo fayllarga emas, taklif ob'ektining JSON ko'rinishiga qo'yiladi. Fayllar esa oldindan UploadFile orqali yuklanadi. Bu bizga qulay: server hamma faylni oldindan joylashtirib, faqat yakuniy JSON ni imzolashga qoldiradi.

5.3 Konvert e'loni modeli

Konvert oqimidagi e'lon ancha sodda — chunki unda onlayn taklif shakli umuman yo'q:

id, display_id, name, cost, currency_name,
customer_name, customer_inn, phone, js_contacts[],
publish_term (5 kun), delivery_term (7 kun),
provision_address     ← hujjat topshiriladigan manzil
venue_address         ← konvert ochiladigan joy
delivery_address      ← mahsulot yetkaziladigan manzil
js_products[]         ← toifa, miqdor, o'lchov
js_files[]            ← xaridorning texnik hujjatlari
start_date / end_date ← taklif qabul qilish oynasi

Demak tizim bu yerda platformaga hech narsa yubormaydi. U operatorga chop etishga tayyor papka beradi: ariza, narx jadvali, texnik taklif, kvalifikatsiya hujjatlari, ilovalar ro'yxati va konvert yorlig'i — ustida xaridor nomi, manzili (provision_address), lot raqami va muddati bosilgan holda.

06ERI imzosi — to'siq emas, tanlov

Bu bo'lim loyihaning chegarasini belgilaydi va u dastlabki taxminimdan ancha yaxshi chiqdi. Qisqacha: brauzerdan tashqarida imzolashning oddiy yo'llari yopiq, lekin serverimizda allaqachon ishlaydigan, sertifikatlangan E-IMZO imzolovchisi bor. Demak to'liq avtomat yuborish ham texnik jihatdan ochiq — bu endi imkoniyat masalasi emas, siyosat masalasi.

6.1 Platforma imzoni qanday oladi

scripts.js bundle ichida E-IMZO ning rasmiy brauzer klienti (EIMZOClient, CAPIWS) turibdi. Imzolash zanjiri:

esi.sign(JSON.stringify(bid), cb)
   └─ EIMZOClient.loadKey(...)          ← operator kompyuteridagi kalit
      └─ CAPIWS → wss://127.0.0.1:64443 ← lokal E-IMZO dasturi
         └─ createPkcs7(...)            ← PKCS#7 imzo qaytadi
            └─ FormData.append("signature", pkcs7)

Ya'ni Provider/AddBid ga taklifning JSON nusxasi (signed_data) va uning PKCS#7 imzosi (signature) qo'shiladi. Imzo fayllarga emas, aynan shu JSON ga qo'yiladi — bu bizga qulay.

6.2 Nima uchun brauzerdagi oddiy yo'llar yopiq

Oldingi loyihada isbotlangan

O'zbekiston ERI kalitlari RSA emas — ular O'zDSt 1092:2009 milliy kriptografiyasida (OID 1.2.860.3.15.x). Ikkita real PFX ustida diagnostika bilan qat'iy isbotlangan: node-forge, OpenSSL va boshqa standart kutubxonalar bu sertifikatlarni na o'qiy, na imzolay oladi.

E-IMZO ning brauzer SDK'si domenga bog'langan API-kalit talab qiladi. etender.uzex.uz o'z kalitiga ega (u scripts.js da ochiq turibdi), lekin boshqa domendan foydalanib bo'lmaydi — tekshiruvni brauzer emas, o'rnatilgan dastur bajaradi. new.onetech.uz uchun urinib ko'rilgan va rad javobi olingan.

6.3 Lekin bizda ishlaydigan imzolovchi bor — SIGN markazi

Serverda jonli · tekshirildi 18.08.2026

Zetron v3 tarkibida SIGN markazi ishlab turibdi (/settings/sign-center). U brauzerni butunlay chetlab o'tadi: serverda Java headless imzolovchi ishlaydi va E-IMZO ning rasmiy sertifikatlangan kutubxonalarini to'g'ridan-to'g'ri chaqiradi.

Runtime /opt/zetron-sign-center/ da: yt-crypt-lib-1.5-certified, yt-crypt2-lib-1.0-certified, yt-jce-lib, cams-common-pki, e-imzo-pkcs12-reader — ya'ni O'zDSt ning haqiqiy implementatsiyasi. Bu aynan autopilot.exe qo'llagan usul, faqat bizning serverimizda va bizning nazoratimizda.

Xavfsizlik allaqachon o'ylangan: PFX shifrlangan omborda (EncryptedPfxVault, alohida master-kalit), parol hech qayerga yozilmaydi, imzolangandan keyin xotira tozalanadi, sertifikat seriali biriktirilgan kalitga mos kelishi tekshiriladi. Bu tizim hozir cooperation.uz va xarid.uzex.uz portallariga avtomatik kirish uchun har kuni ishlatilyapti.

6.4 Demak ikki variant bor

A — To'liq avtomatB — Ko'prik (operator brauzeri)
Imzo qayerdaServerda, SIGN markazi orqaliOperator kompyuterida, E-IMZO dasturida
Operator roliBizning tizimda tasdiqlaydietender kabinetida imzolaydi
PFX qayerdaServerda, shifrlangan ombordaFaqat operator kompyuterida
Kechasi va dam olish kunlariIshlaydiOperator kerak
Qo'shimcha ishid.uzex.uz ERI-kirishini ochishBrauzer kengaytmasi yozish
TavakkalchilikKalit serverda — siyosat qaroriKalit hech qayerga chiqmaydi
HolatiBitta noma'lum borTo'siqsiz

Muhimi: ikkalasi ham bir xil poydevorga tayanadi — kuzatuv, tahlil, narx, hujjat generatsiyasi va qoralama. Faza 0–3 ikkala variantda ham bir xil. Tanlov faqat 4-fazada kerak bo'ladi, ya'ni hozir qaror qabul qilish shart emas.

6.5 A varianti uchun ochilishi kerak bo'lgan bitta noma'lum

Serverda imzolash uchun avval id.uzex.uz orqali ERI bilan kirish oqimini ochish kerak — ya'ni tizim Bearer tokenni o'zi olishi lozim. Bu cooperation.uz va xarid.uzex.uz uchun allaqachon qilingan ish bilan bir xil naqsh, lekin id.uzex.uz uchun alohida o'rganish talab qiladi: challenge qanday olinadi, PKCS#7 qaysi formatda kutiladi, token muddati qancha.

Bu — yarim kunlik tadqiqot ishi. Uni Faza 1 bilan parallel bajaraman va natijaga qarab A varianti realmi yoki yo'qmi, aniq javob beraman. Agar ochilmasa, B varianti to'siqsiz ishlaydi va biz hech narsa yo'qotmaymiz.

Mening tavsiyam

Boshida B, keyin A. Sabab: B tezroq ishga tushadi va operator har bir taklifni ko'zdan kechirish odatini shakllantiradi — yangi tizimda bu juda qimmatli. Tizim bir necha hafta ishlab, ishonch hosil bo'lgach, A ga o'tish bir necha kunlik ish bo'ladi, chunki butun poydevor tayyor turadi. Lekin agar siz darhol to'liq avtonomlikni istasangiz, A ni birinchi qilib olamiz — texnik to'siq yo'q.

07Tavsiya etilgan arxitektura

Uch qatlam. Har birining mas'uliyati aniq ajratilgan.

QatlamJoylashuviMas'uliyati
1. Kuzatuvchi
Watcher
Server, navbat + cron Har 10–15 daqiqada TradeList va CivilContracts/GetList ni so'raydi; yangi lotlarni bazaga yozadi; texnik topshiriq fayllarini yuklaydi; muddatlarni kuzatadi va ogohlantiradi.
2. Studiya
Tender Studio
Server, veb-interfeys Lotni bizning katalogimizga moslashtiradi; narx va marjani hisoblaydi; mezonlarga qarab hujjatlarni generatsiya qiladi; muhr va imzo tasvirini PDF ga joylaydi; operatorga ko'rib chiqish uchun beradi.
3. Yuborish
Bridge / SIGN
Operator brauzeri yoki server B varianti: brauzer kengaytmasi tayyor paketni Draft/AddBid orqali qoralamaga joylaydi, operator ERI bilan yuboradi. A varianti: server id.uzex.uz ga ERI bilan kiradi, taklifni SIGN markazi imzolaydi va Provider/AddBid ga to'g'ridan-to'g'ri yuboradi. Ikkala holatda ham 1- va 2-qatlam o'zgarmaydi.

7.1 Elektron oqim — to'liq zanjir

[Server]  TradeList so'rovi ────────────────► yangi lot topildi
[Server]  GetTrade → mezonlar, kvalifikatsiya, mahsulotlar
[Server]  texnik topshiriq fayli yuklandi va tahlil qilindi
[Server]  katalogga moslashtirish → narx → marja → zakalat
[Studio]  Shakl №1..№4 + texnik taklif + kvalifikatsiya PDF
[Studio]  har bir PDF ga muhr + imzo tasviri joylandi
[Operator] ko'rib chiqish ekrani → tasdiqlash
[Bridge]  UploadFile × N  →  Draft/AddBid  →  kabinetda qoralama
[Operator] etender kabinetida ochadi → ERI paroli → YUBORILDI

7.2 Konvert oqimi — to'liq zanjir

[Server]  CivilContracts/GetList ─────────► yangi e'lon topildi
[Server]  Get/{id} → mahsulotlar, manzillar, muddat, fayllar
[Server]  narx → marja → yetkazib berish shartlari
[Studio]  hujjatlar to'plami + ilovalar ro'yxati + konvert yorlig'i
[Studio]  imzo/muhr uchun BO'SH joy qoldiriladi (qo'lda bosiladi)
[Operator] bitta tugma → butun papka bitta PDF bo'lib chiqadi
[Operator] chop etish → muhr → imzo → konvert → yetkazish
[Studio]  "yuborildi" belgisi + yetkazish tasdig'i qaydnomasi

08Hujjat generatsiyasi

Tizimning eng qimmatli qismi shu. Lot detali bizga qaysi shakl kerakligini o'zi aytadi (fields[].File_Name ichida "3-sonli shakl", "1 va 2-ilova" kabi ko'rsatmalar bo'ladi), demak generator qo'lda sozlashsiz ishlay oladi.

8.1 Standart shakllar

HujjatManbasiAvtomatlashuv
Shakl №1 — taklif arizasiKompaniya profili + lot rekvizitlariTo'liq
Shakl №2 — narx jadvalibudget_products[] + narx kalkulyatoriTo'liq
Shakl №3 — texnik taklifTexnik topshiriq + katalog xususiyatlariQisman — tekshiruv kerak
№3 ga 1–2-ilova — muvofiqlik jadvaliTalab ↔ bizning ko'rsatkichQisman
Kvalifikatsiya to'plamiHujjat kutubxonasi (doimiy fayllar)To'liq
Kafolat xati / zakalatBank ma'lumotlariQo'lda tasdiqlash
Ilovalar ro'yxati (opis)Yaratilgan fayllar ro'yxatiTo'liq

8.2 Doimiy hujjatlar kutubxonasi

Kompaniyaning o'zgarmas hujjatlari bir marta yuklanadi va har bir taklifga avtomatik biriktiriladi: davlat ro'yxatidan o'tganlik guvohnomasi, ustav, litsenziyalar va sertifikatlar, soliq qarzi yo'qligi ma'lumotnomasi, moliyaviy hisobot, bank rekvizitlari, rahbar buyrug'i, ishonchnoma. Har biriga amal qilish muddati qo'yiladi — muddati o'tayotgan hujjat haqida tizim oldindan ogohlantiradi. Bu juda muhim: eng ko'p uchraydigan rad etish sababi — muddati o'tgan ma'lumotnoma.

8.3 Muhr va imzo

Elektron oqimda hujjatlar PDF ko'rinishida tayyorlanadi va ularga kompaniya muhri hamda rahbar imzosining tasviri joylashtiriladi. Bu — huquqiy imzo emas, balki hujjatning ko'rinishi; huquqiy kuchni esa taklifning ERI imzosi beradi (6-bo'limga qarang). Muhr tasviri xavfsiz saqlanadi va faqat generator jarayoniga beriladi.

Texnik yechim

Shablonlar HTML sifatida yoziladi va PDF ga aylantiriladi — bu bizda allaqachon sinovdan o'tgan yo'l. Muhr/imzo PNG shaffof fon bilan aniq koordinatalarga qo'yiladi; har bir shablonda "imzo maydoni" belgilanadi. Konvert oqimida esa aksincha — bo'sh joy qoldiriladi, chunki u yerga haqiqiy muhr bosiladi.

09Ma'lumotlar bazasi

JadvalVazifasi
et_lotsTanlov lotlari — ro'yxatdan kelgan asosiy maydonlar, holat, muddat
et_lot_detailsTo'liq detal: mezonlar, kvalifikatsiya, mahsulot qatorlari (JSON)
et_civil_lotsKonvert e'lonlari
et_lot_filesXaridorning yuklab olingan fayllari (texnik topshiriq, shartnoma loyihasi)
et_screeningsSkrining natijasi: mos/mos emas, sabab, ball
et_bidsBizning takliflarimiz: narx, marja, holat, qoralama ID, yuborilgan vaqt
et_bid_documentsHar bir taklif uchun yaratilgan hujjatlar
et_doc_templatesShablonlar (Shakl №1–№4 va boshqalar)
et_company_documentsDoimiy hujjatlar kutubxonasi + amal qilish muddati
et_company_profileRekvizitlar, bank hisoblari, rahbar, muhr/imzo tasvirlari
et_price_rulesNarx qoidalari: minimal marja, chegirma pog'onalari
et_outcomesNatijalar: g'olib, g'olib narxi, biz nechanchi bo'ldik
et_sync_logsSinxronizatsiya loglari va xatolar
et_audit_logsKim nima qildi — har bir amal qaydi

10Fazalar va vazifalar ro'yxati

Sakkiz faza, 58 vazifa. Har faza mustaqil qiymat beradi — birinchi faza tugagach tizim allaqachon foydali bo'ladi (lotlarni o'tkazib yubormaslik). Muddatlar taxminiy, bir kishilik ish sur'atida.

FAZA 0

Poydevor

≈2 kun
KodVazifaNatija
ET-001Loyiha skeleti: alohida katalog, domen, ma'lumotlar bazasi, deployBo'sh, lekin ishlaydigan tizim
ET-002EtenderClient: Validation headeri, qayta urinish, sur'at cheklovi, brauzer UAHar qanday endpointni chaqira oladigan qatlam
ET-003Bundle-hash kuzatuvchisi — platforma yangilansa ogohlantirishKalit eskirsa darhol bilamiz
ET-004Lug'atlar: viloyat, tuman, toifa, valyuta, o'lchov birligiFiltrlar uchun asos
ET-005Rollar, kirish, audit logXavfsiz asos
FAZA 1

Kuzatuv — lotni o'tkazib yubormaslik

≈3 kun
KodVazifaNatija
ET-010Tanlov lotlari sinxronizatsiyasi (TypeId=1), inkremental626+ lot bazada
ET-011Konvert e'lonlari sinxronizatsiyasi213+ e'lon bazada
ET-012Lot detali + xaridor fayllarini yuklab olishMezonlar va texnik topshiriq qo'lda
ET-013Muddat taymeri va ogohlantirish (Telegram + e-pochta)"3 soat qoldi" xabari
ET-014Kuzatuv ekrani: ro'yxat, filtr, qidiruv, muddat bo'yicha saralashKunlik ish oynasi
ET-015Sinxronizatsiya loglari va xato monitoringiJim to'xtab qolmaydi
ET-016Sur'at intizomi: bir vaqtda bitta sinxron, so'rovlar orasi pauzaPlatformaga yuk bermaslik
FAZA 2

Tanlash va qaror

≈4 kun
KodVazifaNatija
ET-020Kompaniya profili: rekvizitlar, bank, rahbar, muhr va imzo tasvirlariHujjatlar uchun manba
ET-021Mahsulot katalogi va lot bilan moslashtirish dvigateli"Bu lot bizga tegishlimi?"
ET-022Avtomatik skrining: mos / shubhali / mos emas + sababKunlik 626 lotdan 10–15 tasi qoladi
ET-023Narx kalkulyatori: tannarx, QQS, zakalat 3%, birja komissiyasi, marjaTaklif narxi
ET-024Raqobat tahlili: ko'rishlar soni, tarixiy g'oliblar, narx darajasiStrategik qaror
ET-025Qaror ekrani: qatnashamizmi, kim mas'ul, muddatAniq javobgarlik
ET-026Texnik topshiriq faylini tahlil qilish (PDF/DOCX/RAR ichidan matn)Talablar avtomatik chiqariladi
FAZA 3

Hujjat generatori — loyihaning yuragi

≈6 kun
KodVazifaNatija
ET-030Shablon dvigateli va PDF chiqarish qatlamiHar qanday shakl PDF bo'ladi
ET-031Shakl №1 — taklif arizasi (uz/ru)Tayyor hujjat
ET-032Shakl №2 — narx jadvali, mahsulot qatorlari bilanTayyor hujjat
ET-033Shakl №3 va 1–2-ilova — texnik taklif, muvofiqlik jadvaliTayyor hujjat
ET-034Kvalifikatsiya hujjatlari to'plamiTayyor papka
ET-035fields[] mezonlarini shablonlarga avtomatik bog'lashQo'lda sozlash kerak emas
ET-036Doimiy hujjatlar kutubxonasi + muddat nazoratiMuddati o'tgan hujjat yubormaymiz
ET-037Muhr va imzo tasvirini PDF ga joylashRasmiy ko'rinish
ET-038Sahifa raqamlash, ilovalar ro'yxati, bitta PDF ga birlashtirishYaxlit paket
ET-039Operator ko'rib chiqish ekrani: har bir hujjat oldindan ko'rishYuborishdan oldingi nazorat
ET-040Hujjat versiyalari va o'zgarishlar tarixiNima o'zgarganini ko'rish
FAZA 4

Yuborish yo'li

≈4 kun (B) · +2 kun (A)
KodVazifaNatija
ET-041Tadqiqot: id.uzex.uz ERI-kirish oqimini ochish (challenge, PKCS#7 formati, token muddati)A varianti realmi — aniq javob
ET-042Brauzer kengaytmasi skeleti (Chrome/Edge, Manifest V3)O'rnatiladigan ko'prik
ET-043Server ↔ kengaytma xavfsiz almashinuviPaket brauzerga yetadi
ET-044Fayllarni UploadFile orqali ketma-ket yuklashFayllar platformada
ET-045Draft/AddBid — taklifni qoralama qilib joylashKabinetda tayyor qoralama
ET-046Qoralama holatini serverga qaytarish va bog'lashIkki tomon sinxron
ET-047Xato holatlari, qayta urinish, qisman yuklanishIshonchlilik
ET-048Operator qo'llanmasi: qoralamadan yuborishgacha3 qadamlik yo'riqnoma
ET-049Jonli sinov: bitta real lotda to'liq zanjirIsbotlangan oqim
A varianti — to'liq avtomat (ET-041 ijobiy chiqsa)
ET-04AAlohida PFX ombori: shifrlangan saqlash, master-kalit, seriali tekshiruviKalit xavfsiz saqlanadi
ET-04BHeadless imzolovchi qatlami (/opt/zetron-sign-center runtime'i, o'z wrapper'imiz bilan)Server PKCS#7 yasay oladi
ET-04Cid.uzex.uz avto-kirish va token yangilash (ish oynasi bilan)Tizim o'zi kiradi
ET-04DProvider/AddBid to'g'ridan-to'g'ri yuborish + tasdiq nazoratiTo'liq avtomat zanjir
ET-04EIkki bosqichli tasdiq: tayyorlovchi → imzolovchi, har imzo audit jurnalidaNazorat saqlanadi
FAZA 5

Konvert paketi

≈3 kun
KodVazifaNatija
ET-050Chop etish maketi: A4, kolontitul, sahifa raqami, imzo joyiChiroyli qog'oz hujjat
ET-051Konvert yorlig'i: xaridor, manzil, lot raqami, muddatYopishtirib yuboriladi
ET-052Ilovalar ro'yxati (opis) va varaqlar soniRasmiy talab bajariladi
ET-053Butun papkani bitta PDF qilib chiqarishBitta bosishda chop etish
ET-054Topshirish qaydnomasi: kim, qachon, qayerga eltdiKuzatuv izi
ET-055Konvert e'lonlari uchun alohida ish oynasiIkki oqim ajratilgan
FAZA 6

Natijalar va o'rganish

≈3 kun
KodVazifaNatija
ET-060Natijalarni kuzatish: g'olib kim, qaysi narxdaBozor ma'lumoti
ET-061Yutqazish tahlili: narxmi, hujjatmi, muddatmiSabablar aniq
ET-062Narx strategiyasini natijaga qarab sozlashHar oy yaxshilanish
ET-063Hisobotlar: qatnashish, g'alaba foizi, marjaRahbar uchun ko'rsatkichlar
ET-064Zakalat va komissiya harakati nazoratiPul yo'qolmaydi
FAZA 7

Sifat va barqarorlik

≈2 kun
KodVazifaNatija
ET-070Avtomatik testlar (API qatlami, generator, hisob-kitob)Regressiyadan himoya
ET-071Statik tahlil va kod sifati tekshiruviToza kod
ET-072Zaxira nusxa: baza + hujjatlarYo'qotish xavfi yo'q
ET-073Ishlash monitoringi va ogohlantirishlarTizim jim o'lmaydi
ET-074Hujjatlashtirish va topshirishBoshqa odam ham davom ettira oladi

Jami taxminiy: 27 ish kuni. Faza 1 tugashi bilan tizim allaqachon kunlik foyda bera boshlaydi.

11Xatarlar va ularni qanday yopamiz

XatarTa'siriYechim
Platforma yangilanadi — API yoki Validation kaliti o'zgaradiKuzatuv to'xtaydiET-003 bundle-hash kuzatuvchisi + xato bo'lsa darhol xabar; kalit bir necha daqiqada yangilanadi
So'rovlar ko'payib ketishiIP cheklanishiET-016 sur'at intizomi: bir vaqtda bitta sinxron, so'rovlar orasi pauza, tungi soatlarda kamroq
Noto'g'ri narx bilan taklif yuborilishiZararga ishlashOperator tasdig'isiz hech narsa yuborilmaydi; minimal marja qoidasi qattiq cheklov sifatida
Muddati o'tgan ma'lumotnoma biriktirilishiTaklif rad etiladiET-036 hujjat muddati nazorati va oldindan ogohlantirish
Mezonga noto'g'ri hujjat biriktirilishiBall yo'qotishET-035 avtomatik bog'lash + ET-039 ko'rib chiqish ekrani
Muddat o'tib ketishiQatnashmay qolishET-013 ko'p bosqichli ogohlantirish: 24 soat, 6 soat, 1 soat
ERI kaliti egasi ishda bo'lmasligiYuborilmay qolishQoralama oldindan tayyor turadi — imzo 30 soniyalik ish; ishonchnoma bilan ikkinchi imzolovchi

Huquqiy jihat

Biz platformaning ochiq API'sidan yetkazib beruvchi sifatida o'z ishimiz uchun foydalanamiz: o'z takliflarimizni tayyorlaymiz va o'z kabinetimizga joylashtiramiz. Har bir taklif vakolatli shaxs tomonidan shaxsan ERI bilan imzolanadi. Boshqa ishtirokchilarning ma'lumotlariga aralashish, imzoni chetlab o'tish yoki platformaga ortiqcha yuk berish — bularning hech biri rejaga kirmaydi va kirmaydi ham.

12Sizdan qaror kutayotgan savollar

Quyidagi ettita savolga javob bersangiz, ish darhol boshlanadi. Javob bo'lmaguncha men eng mantiqiy variantni tanlab, uni aniq belgilab qo'yaman — keyin o'zgartirish oson.

#SavolMening tavsiyam
1Tizim qayerda yashaydi — mustaqil yangi loyihami yoki Zetron v3 ichida modulmi?Hal qilindi Mustaqil yangi loyiha, alohida domen va baza. Hujjat sahifasi: tender.onetech.uz.
1aYuborish yo'li: A (to'liq avtomat, server imzolaydi) yoki B (operator brauzerda imzolaydi)?Tavsiya: B dan boshlab, keyin A. Qaror 4-fazagacha kutishi mumkin — birinchi uch faza ikkalasida bir xil. ET-041 tadqiqoti A ning realligini aniqlaydi.
2Mahsulot katalogi va narxlar qayerdan olinadi?Boshida o'z katalogi (Excel import bilan), keyin Zetron v3 dan faqat o'qish uchun ulanish.
3Qaysi toifadagi lotlar bizga tegishli?Sizdan kalit so'zlar va toifalar ro'yxati kerak — bu skriningning aniqligini belgilaydi.
4Kompaniya hujjatlari: guvohnoma, litsenziya, muhr va imzo tasviriSkanlarni bir marta yuklaysiz; muhr va imzo shaffof fonli PNG bo'lishi kerak.
5Operator qaysi brauzerdan foydalanadi?Chrome yoki Edge — kengaytma shu ikkisi uchun bir xil yoziladi.
6Hujjatlar tiliIkki tilda (uz + ru) — platformadagi ko'p lotlar ruscha, shakllar ikki tilli talab qilinadi.
7Nechta operator ishlaydi va kim yakuniy imzo qo'yadi?Rollarni shunga qarab sozlaymiz: tayyorlovchi, tasdiqlovchi, imzolovchi.
Boshlash uchun eng kam narsa

Agar hoziroq boshlashni istasangiz, 1-savolga javob yetarli. Faza 0 va Faza 1 boshqa hech narsani talab qilmaydi — kuzatuv tizimi 3–4 kunda ishga tushadi va siz birorta lotni o'tkazib yubormaydigan bo'lasiz. Qolgan savollarga javoblarni yo'l-yo'lakay beraverasiz.

13To'liq tadqiqot logi

18.08.2026, Toshkent vaqti bilan 10:29–11:05. Har bir qadam va uning natijasi — hech narsa taxmin qilinmagan, hammasi tekshirilgan.

  1. 10:31

    Server holatini o'rganish

    Avval mavjud ishlarni ko'rdim: /var/www/UZEX_SESSION_HANDOFF.md (Zetron v3 dagi UZEX shartnomalari moduli — 1,7 mln yozuv, PDF xizmati), cooperation-autofill-modern (cooperation.uz uchun avto-to'ldirish), xarid_uzex_analysis (xarid.uzex.uz API'sining oldingi teskari tahlili). Bu — bizga tayyor tajriba: lug'atlar, sur'at intizomi va PDF ishlash allaqachon sinovdan o'tgan.

  2. 10:32

    Ikkala sahifa yuklab olindi

    /lots/1/0 va /civil-list — ikkalasi ham bir xil 748 baytlik HTML qaytardi. Bu Angular SPA ekanini darhol ko'rsatdi: sahifada mazmun yo'q, hammasi JavaScript orqali keladi. Demak sahifani o'qish emas, API bilan ishlash kerak.

  3. 10:33

    Bundle fayllar olindi

    main.js — 9,3 MB, scripts.js — 671 KB. Ilovaning butun mantiqi shu ikki faylda.

  4. 10:34

    Konfiguratsiya topildi

    main.js ichidan ilova sozlamalari to'liq chiqarildi: 9 ta domen, versiya 1.5.2 va eng muhimi — requiredEsi: true. Shu daqiqada ERI masalasi loyihaning markaziy savoliga aylanishi ma'lum bo'ldi.

  5. 10:35

    Validation headeri ochildi

    HTTP interceptor kodida sirli headerning manbasi topildi: base64(RSA(ochiq_kalit, "yo'l~sana")). Ochiq kalit ham shu yerda ochiq turibdi. Ya'ni bu himoya emas, formallik — kalitsiz takrorlash mumkin.

  6. 10:37

    378 endpoint ajratildi

    Controller bo'yicha guruhlandi: Customer 63, AddressList 99, Organization 26, Common 35, Provider 22, CivilContracts 12, Trade 14, Draft 7. Bizga kerakli uchtasi — Common (o'qish), Provider (yuborish), CivilContracts (konvert).

  7. 10:39

    Marshrutlar va tur kodlari

    Angular marshrutlaridan lots/:typeId/:regId ning ma'nosi ochildi: typeId=1 — aynan "tanlov" (competitive). Shu bilan siz bergan havolaning nimani anglatishi aniqlandi.

  8. 10:41

    Jonli sinov — header ishladi

    Python bilan header qayta yasaldi va GetTopStats chaqirildi → HTTP 200. Platformada 41 543 yetkazib beruvchi, 675 faol taklif. Bu — butun kuzatuv qismining texnik isboti.

  9. 10:43

    Ikkala ro'yxat olindi

    TradeList626 faol tanlov loti. CivilContracts/GetList213 faol konvert e'loni. Ikkala oqim ham jonli va o'qiladigan holatda.

  10. 10:45

    Lot detali to'liq ochildi

    GetTrade/506376/0 → mezonlar, 9 ta kvalifikatsiya talabi, mahsulot qatorlari, zakalat 3%, texnik topshiriq va shartnoma loyihasi fayllari. Muhimi: mezon ichida qaysi shakl kerakligi matn bilan yozilgan — demak hujjat generatori uchun kirish ma'lumoti tayyor.

  11. 10:47

    Taklif yuborish zanjiri

    Provider/AddBid topildi va uning oldida esi.sign(...) chaqirilishi ko'rindi: taklifning JSON nusxasi imzolanadi va signature maydoniga qo'shiladi. Ya'ni imzosiz yuborish yo'q.

  12. 10:49

    ERI mexanizmi tekshirildi

    scripts.js ichida EIMZOClient va CAPIWS topildi — imzo wss://127.0.0.1:64443 orqali operator kompyuteridagi dasturda yasaladi. etender'ning o'z domen kaliti ham shu faylda ochiq turibdi, lekin u boshqa domenda ishlamaydi. Oldingi loyihada isbotlangan fakt bilan birlashtirilganda (kalitlar O'zDSt kriptografiyasida, RSA emas) xulosa qat'iy: serverdan mustaqil imzo mumkin emas.

  13. 10:52

    Yechim topildi — qoralama

    addOfferToDraft funksiyasi ochib ko'rildi: POST /api/Draft/AddBid?name=... — faqat Authorization va Validation headerlari bilan, imzosiz. Demak biz taklifni to'liq tayyorlab, fayllari bilan birga kabinetga qoralama qilib joylashimiz mumkin. Operatorga faqat ochish va imzolash qoladi. Bu — butun arxitektura shu topilma ustiga qurildi.

  14. 10:55

    Konvert oqimi tekshirildi

    CivilContracts/Get/16141 → manzillar, muddatlar, mahsulotlar, xaridor fayllari. Onlayn taklif shakli yo'q — bu haqiqatan ham qog'oz oqimi. Demak tizimning mahsuloti — chop etishga tayyor papka.

  15. 11:00

    Rasmiy integratsiya yo'li bormi

    Ochiq manbalarda qidirildi: UZEX'ning yetkazib beruvchilar uchun rasmiy hujjatlangan API'si topilmadi. Shakl №1–№4 tizimi va baholash usullari ("Ball usuli" — texnika 70 / narx 30, yoki "Eng past narx usuli") tasdiqlandi.

  16. 11:05

    Tadqiqot fayllari saqlandi

    /root/etender-auto/research/ — endpointlar ro'yxati, ochiq kalit, lot va konvert namunalari, sinov skriptlari. Kod yozish boshlanganda hammasi qo'l ostida bo'ladi.

  17. 11:10

    Poddomen ko'tarildi

    Siz DNS yozuvini qo'shdingiz — tender.onetech.uz uchun alohida nginx bloki yaratildi, SSL sertifikati olindi va sahifa jonli. Mavjud saytlarga tegilmadi; parallel sessiyaga nginx reload haqida oldindan xabar berildi.

  18. 11:15

    Burilish nuqtasi — SIGN markazi topildi

    Siz "v3 dagi sign centr orqali ishlatamiz" deb eslatganingizdan keyin v3 ni o'qib chiqdim (faqat o'qish). Topilgan narsa dastlabki xulosamni o'zgartirdi: app/Services/SignCenter/ ichida HeadlessPkcs7Signer, EncryptedPfxVault, PfxCertificateInspector va portal autentifikatorlari bor. /opt/zetron-sign-center/lib/ da esa E-IMZO ning rasmiy sertifikatlangan kutubxonalari: yt-crypt-lib-1.5-certified, yt-crypt2-lib-1.0-certified, yt-jce-lib, cams-common-pki, e-imzo-pkcs12-reader.

    Ya'ni serverda O'zDSt imzo allaqachon ishlaydi va har kuni cooperation.uz hamda xarid.uzex.uz uchun ishlatilyapti. Demak 6-bo'limdagi "to'liq avtomat mumkin emas" degan xulosam noto'g'ri edi — u brauzer uchun to'g'ri, server uchun emas. Bo'lim to'liq qayta yozildi va rejaga A varianti qo'shildi.