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.
Nima isbotlandi
- Jonli Platformaning barcha ro'yxat va detal API'lari server tomondan chaqirila oladi — anti-bot
Validationheaderi 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
Tanlov lotlari
etender.uzex.uz/lots/1/0- Server lotni topadi va mezonlarni o'qiydi
- Narx va marja hisoblanadi
- Shakl №1–№4 + texnik taklif PDF yaratiladi
- Elektron muhr va imzo tasviri PDF ga joylanadi
- Kabinetga qoralama sifatida yuklanadi
- Operator ko'zdan kechiradi
- ERI paroli → yuborildi
Fuqarolik shartnomalari
etender.uzex.uz/civil-list- Server e'lonni topadi va talablarni o'qiydi
- Narx va marja hisoblanadi
- Hujjatlar to'plami tayyorlanadi
- Chop etishga tayyor PDF papka + konvert yorlig'i
- Operator chop etadi
- Muhr bosiladi, qo'l qo'yiladi
- 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.
/lots/:typeId/:regId — typeId 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.
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);
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
| Header | Qiymat | Izoh |
|---|---|---|
Validation | yuqoridagi RSA satr | Har bir so'rovda majburiy |
Authorization | Bearer <token> | Faqat kabinet amallarida |
Language | uz / ru / en | Javob tilini belgilaydi |
Accept | application/json | — |
User-Agent | to'liq brauzer satri | Qisqa 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
| Metod | Yo'l | Vazifa | Holat |
|---|---|---|---|
| POST | /api/common/TradeList | Tanlov lotlari ro'yxati | 200 ✓ |
| GET | /api/common/GetTrade/{id}/0 | Lotning to'liq detali | 200 ✓ |
| POST | /api/CivilContracts/GetList | Konvert e'lonlari ro'yxati | 200 ✓ |
| GET | /api/CivilContracts/Get/{id} | Konvert e'loni detali | 200 ✓ |
| GET | /api/common/GetTopStats/0 | Umumiy statistika | 200 ✓ |
| GET | /api/Common/GetCriteriaFiles/{id} | Mezon bo'yicha fayllar | tekshiriladi |
| GET | /api/common/GetProposalUsers/{id} | Ishtirokchilar ro'yxati | tekshiriladi |
| POST | /api/common/NotDealedList | Bo'lib o'tmagan savdolar | tekshiriladi |
| POST | /api/common/DealsList | Yakunlangan bitimlar | tekshiriladi |
| POST | /api/Common/TradeListXls | Ro'yxatni XLSX qilib olish | tekshiriladi |
| GET | /api/common/DownloadFile | Texnik topshiriq fayllari | tekshiriladi |
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
| Metod | Yo'l | Vazifa | ERI imzo |
|---|---|---|---|
| POST | /api/Draft/AddBid?name={nom} | Taklifni qoralama qilib saqlash | Kerak emas |
| GET | /api/Draft/GetBidList | Qoralamalar ro'yxati | Kerak emas |
| GET | /api/Draft/GetBid/{id} | Qoralamani ochish | Kerak emas |
| POST | /api/Provider/AddBid | Taklifni rasman yuborish | MAJBURIY |
| POST | /api/Provider/UploadFile/{n} | Fayl yuklash | Kerak emas |
| POST | /api/Provider/EncodeFile | Faylni shifrlash | — |
| POST | /api/Provider/CalcPledgeByLot | Zakalat summasini hisoblash | — |
| POST | /api/Provider/CalcProviderComissionAndPledge | Komissiya + zakalat | — |
| GET | /api/Provider/IsNeedToLoadQualificationFields | Kvalifikatsiya kerakmi | — |
| POST | /api/Provider/AddQualificationFields/{id} | Kvalifikatsiya hujjatlari | — |
| GET | /api/provider/getBids | Bizning takliflarimiz | — |
| POST | /api/Esi/SetSignature | Imzoni ro'yxatga olish | — |
| POST | /api/Esi/VerifyCertificate | Sertifikatni tekshirish | — |
/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.
| Maydon | Namuna qiymat | Bizga nima uchun kerak |
|---|---|---|
display_no | 26120012506376 | Hujjatlardagi lot raqami |
end_date | 2026-08-18T10:41:31 | Muddat — ogohlantirish taymeri |
start_cost | 76 800 000 | Boshlang'ich narx, marja hisobi |
valuation_name | Eng past narx usuli | Baholash strategiyasi (yoki "Ball usuli" 70/30) |
type_name | Eng yaxshi takliflarni tanlash | Oqim turini aniqlash |
budget_products[] | toifa, miqdor, o'lchov | Narx jadvalining qatorlari |
fields[] | JSON satr — mezonlar | Har bir mezon = alohida hujjat |
qualification_fields[] | 9 ta talab | Kvalifikatsiya papkasi |
pledge_name / pledge_value | Zakalat talab etiladi / 3.0 | Zakalat summasi = 3% |
tech_file_path | /files/2026/8/6/…rar | Texnik topshiriq — tahlil uchun |
contract_proform_file_path | …docx | Shartnoma loyihasi |
term_payment_days | 20 | To'lov muddati — moliyaviy qaror |
is_local_manufacturs | true | Mahalliy ishlab chiqaruvchi imtiyozi |
authorized_count | 19 | Raqobat 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
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
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 avtomat | B — Ko'prik (operator brauzeri) | |
|---|---|---|
| Imzo qayerda | Serverda, SIGN markazi orqali | Operator kompyuterida, E-IMZO dasturida |
| Operator roli | Bizning tizimda tasdiqlaydi | etender kabinetida imzolaydi |
| PFX qayerda | Serverda, shifrlangan omborda | Faqat operator kompyuterida |
| Kechasi va dam olish kunlari | Ishlaydi | Operator kerak |
| Qo'shimcha ish | id.uzex.uz ERI-kirishini ochish | Brauzer kengaytmasi yozish |
| Tavakkalchilik | Kalit serverda — siyosat qarori | Kalit hech qayerga chiqmaydi |
| Holati | Bitta noma'lum bor | To'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.
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.
| Qatlam | Joylashuvi | Mas'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
| Hujjat | Manbasi | Avtomatlashuv |
|---|---|---|
| Shakl №1 — taklif arizasi | Kompaniya profili + lot rekvizitlari | To'liq |
| Shakl №2 — narx jadvali | budget_products[] + narx kalkulyatori | To'liq |
| Shakl №3 — texnik taklif | Texnik topshiriq + katalog xususiyatlari | Qisman — tekshiruv kerak |
| №3 ga 1–2-ilova — muvofiqlik jadvali | Talab ↔ bizning ko'rsatkich | Qisman |
| Kvalifikatsiya to'plami | Hujjat kutubxonasi (doimiy fayllar) | To'liq |
| Kafolat xati / zakalat | Bank ma'lumotlari | Qo'lda tasdiqlash |
| Ilovalar ro'yxati (opis) | Yaratilgan fayllar ro'yxati | To'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.
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
| Jadval | Vazifasi |
|---|---|
et_lots | Tanlov lotlari — ro'yxatdan kelgan asosiy maydonlar, holat, muddat |
et_lot_details | To'liq detal: mezonlar, kvalifikatsiya, mahsulot qatorlari (JSON) |
et_civil_lots | Konvert e'lonlari |
et_lot_files | Xaridorning yuklab olingan fayllari (texnik topshiriq, shartnoma loyihasi) |
et_screenings | Skrining natijasi: mos/mos emas, sabab, ball |
et_bids | Bizning takliflarimiz: narx, marja, holat, qoralama ID, yuborilgan vaqt |
et_bid_documents | Har bir taklif uchun yaratilgan hujjatlar |
et_doc_templates | Shablonlar (Shakl №1–№4 va boshqalar) |
et_company_documents | Doimiy hujjatlar kutubxonasi + amal qilish muddati |
et_company_profile | Rekvizitlar, bank hisoblari, rahbar, muhr/imzo tasvirlari |
et_price_rules | Narx qoidalari: minimal marja, chegirma pog'onalari |
et_outcomes | Natijalar: g'olib, g'olib narxi, biz nechanchi bo'ldik |
et_sync_logs | Sinxronizatsiya loglari va xatolar |
et_audit_logs | Kim 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.
Poydevor
≈2 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-001 | Loyiha skeleti: alohida katalog, domen, ma'lumotlar bazasi, deploy | Bo'sh, lekin ishlaydigan tizim |
ET-002 | EtenderClient: Validation headeri, qayta urinish, sur'at cheklovi, brauzer UA | Har qanday endpointni chaqira oladigan qatlam |
ET-003 | Bundle-hash kuzatuvchisi — platforma yangilansa ogohlantirish | Kalit eskirsa darhol bilamiz |
ET-004 | Lug'atlar: viloyat, tuman, toifa, valyuta, o'lchov birligi | Filtrlar uchun asos |
ET-005 | Rollar, kirish, audit log | Xavfsiz asos |
Kuzatuv — lotni o'tkazib yubormaslik
≈3 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-010 | Tanlov lotlari sinxronizatsiyasi (TypeId=1), inkremental | 626+ lot bazada |
ET-011 | Konvert e'lonlari sinxronizatsiyasi | 213+ e'lon bazada |
ET-012 | Lot detali + xaridor fayllarini yuklab olish | Mezonlar va texnik topshiriq qo'lda |
ET-013 | Muddat taymeri va ogohlantirish (Telegram + e-pochta) | "3 soat qoldi" xabari |
ET-014 | Kuzatuv ekrani: ro'yxat, filtr, qidiruv, muddat bo'yicha saralash | Kunlik ish oynasi |
ET-015 | Sinxronizatsiya loglari va xato monitoringi | Jim to'xtab qolmaydi |
ET-016 | Sur'at intizomi: bir vaqtda bitta sinxron, so'rovlar orasi pauza | Platformaga yuk bermaslik |
Tanlash va qaror
≈4 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-020 | Kompaniya profili: rekvizitlar, bank, rahbar, muhr va imzo tasvirlari | Hujjatlar uchun manba |
ET-021 | Mahsulot katalogi va lot bilan moslashtirish dvigateli | "Bu lot bizga tegishlimi?" |
ET-022 | Avtomatik skrining: mos / shubhali / mos emas + sabab | Kunlik 626 lotdan 10–15 tasi qoladi |
ET-023 | Narx kalkulyatori: tannarx, QQS, zakalat 3%, birja komissiyasi, marja | Taklif narxi |
ET-024 | Raqobat tahlili: ko'rishlar soni, tarixiy g'oliblar, narx darajasi | Strategik qaror |
ET-025 | Qaror ekrani: qatnashamizmi, kim mas'ul, muddat | Aniq javobgarlik |
ET-026 | Texnik topshiriq faylini tahlil qilish (PDF/DOCX/RAR ichidan matn) | Talablar avtomatik chiqariladi |
Hujjat generatori — loyihaning yuragi
≈6 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-030 | Shablon dvigateli va PDF chiqarish qatlami | Har qanday shakl PDF bo'ladi |
ET-031 | Shakl №1 — taklif arizasi (uz/ru) | Tayyor hujjat |
ET-032 | Shakl №2 — narx jadvali, mahsulot qatorlari bilan | Tayyor hujjat |
ET-033 | Shakl №3 va 1–2-ilova — texnik taklif, muvofiqlik jadvali | Tayyor hujjat |
ET-034 | Kvalifikatsiya hujjatlari to'plami | Tayyor papka |
ET-035 | fields[] mezonlarini shablonlarga avtomatik bog'lash | Qo'lda sozlash kerak emas |
ET-036 | Doimiy hujjatlar kutubxonasi + muddat nazorati | Muddati o'tgan hujjat yubormaymiz |
ET-037 | Muhr va imzo tasvirini PDF ga joylash | Rasmiy ko'rinish |
ET-038 | Sahifa raqamlash, ilovalar ro'yxati, bitta PDF ga birlashtirish | Yaxlit paket |
ET-039 | Operator ko'rib chiqish ekrani: har bir hujjat oldindan ko'rish | Yuborishdan oldingi nazorat |
ET-040 | Hujjat versiyalari va o'zgarishlar tarixi | Nima o'zgarganini ko'rish |
Yuborish yo'li
≈4 kun (B) · +2 kun (A)| Kod | Vazifa | Natija |
|---|---|---|
ET-041 | Tadqiqot: id.uzex.uz ERI-kirish oqimini ochish (challenge, PKCS#7 formati, token muddati) | A varianti realmi — aniq javob |
ET-042 | Brauzer kengaytmasi skeleti (Chrome/Edge, Manifest V3) | O'rnatiladigan ko'prik |
ET-043 | Server ↔ kengaytma xavfsiz almashinuvi | Paket brauzerga yetadi |
ET-044 | Fayllarni UploadFile orqali ketma-ket yuklash | Fayllar platformada |
ET-045 | Draft/AddBid — taklifni qoralama qilib joylash | Kabinetda tayyor qoralama |
ET-046 | Qoralama holatini serverga qaytarish va bog'lash | Ikki tomon sinxron |
ET-047 | Xato holatlari, qayta urinish, qisman yuklanish | Ishonchlilik |
ET-048 | Operator qo'llanmasi: qoralamadan yuborishgacha | 3 qadamlik yo'riqnoma |
ET-049 | Jonli sinov: bitta real lotda to'liq zanjir | Isbotlangan oqim |
| A varianti — to'liq avtomat (ET-041 ijobiy chiqsa) | ||
ET-04A | Alohida PFX ombori: shifrlangan saqlash, master-kalit, seriali tekshiruvi | Kalit xavfsiz saqlanadi |
ET-04B | Headless imzolovchi qatlami (/opt/zetron-sign-center runtime'i, o'z wrapper'imiz bilan) | Server PKCS#7 yasay oladi |
ET-04C | id.uzex.uz avto-kirish va token yangilash (ish oynasi bilan) | Tizim o'zi kiradi |
ET-04D | Provider/AddBid to'g'ridan-to'g'ri yuborish + tasdiq nazorati | To'liq avtomat zanjir |
ET-04E | Ikki bosqichli tasdiq: tayyorlovchi → imzolovchi, har imzo audit jurnalida | Nazorat saqlanadi |
Konvert paketi
≈3 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-050 | Chop etish maketi: A4, kolontitul, sahifa raqami, imzo joyi | Chiroyli qog'oz hujjat |
ET-051 | Konvert yorlig'i: xaridor, manzil, lot raqami, muddat | Yopishtirib yuboriladi |
ET-052 | Ilovalar ro'yxati (opis) va varaqlar soni | Rasmiy talab bajariladi |
ET-053 | Butun papkani bitta PDF qilib chiqarish | Bitta bosishda chop etish |
ET-054 | Topshirish qaydnomasi: kim, qachon, qayerga eltdi | Kuzatuv izi |
ET-055 | Konvert e'lonlari uchun alohida ish oynasi | Ikki oqim ajratilgan |
Natijalar va o'rganish
≈3 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-060 | Natijalarni kuzatish: g'olib kim, qaysi narxda | Bozor ma'lumoti |
ET-061 | Yutqazish tahlili: narxmi, hujjatmi, muddatmi | Sabablar aniq |
ET-062 | Narx strategiyasini natijaga qarab sozlash | Har oy yaxshilanish |
ET-063 | Hisobotlar: qatnashish, g'alaba foizi, marja | Rahbar uchun ko'rsatkichlar |
ET-064 | Zakalat va komissiya harakati nazorati | Pul yo'qolmaydi |
Sifat va barqarorlik
≈2 kun| Kod | Vazifa | Natija |
|---|---|---|
ET-070 | Avtomatik testlar (API qatlami, generator, hisob-kitob) | Regressiyadan himoya |
ET-071 | Statik tahlil va kod sifati tekshiruvi | Toza kod |
ET-072 | Zaxira nusxa: baza + hujjatlar | Yo'qotish xavfi yo'q |
ET-073 | Ishlash monitoringi va ogohlantirishlar | Tizim jim o'lmaydi |
ET-074 | Hujjatlashtirish va topshirish | Boshqa 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
| Xatar | Ta'siri | Yechim |
|---|---|---|
Platforma yangilanadi — API yoki Validation kaliti o'zgaradi | Kuzatuv to'xtaydi | ET-003 bundle-hash kuzatuvchisi + xato bo'lsa darhol xabar; kalit bir necha daqiqada yangilanadi |
| So'rovlar ko'payib ketishi | IP cheklanishi | ET-016 sur'at intizomi: bir vaqtda bitta sinxron, so'rovlar orasi pauza, tungi soatlarda kamroq |
| Noto'g'ri narx bilan taklif yuborilishi | Zararga ishlash | Operator tasdig'isiz hech narsa yuborilmaydi; minimal marja qoidasi qattiq cheklov sifatida |
| Muddati o'tgan ma'lumotnoma biriktirilishi | Taklif rad etiladi | ET-036 hujjat muddati nazorati va oldindan ogohlantirish |
| Mezonga noto'g'ri hujjat biriktirilishi | Ball yo'qotish | ET-035 avtomatik bog'lash + ET-039 ko'rib chiqish ekrani |
| Muddat o'tib ketishi | Qatnashmay qolish | ET-013 ko'p bosqichli ogohlantirish: 24 soat, 6 soat, 1 soat |
| ERI kaliti egasi ishda bo'lmasligi | Yuborilmay qolish | Qoralama 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.
| # | Savol | Mening tavsiyam |
|---|---|---|
| 1 | Tizim qayerda yashaydi — mustaqil yangi loyihami yoki Zetron v3 ichida modulmi? | Hal qilindi Mustaqil yangi loyiha, alohida domen va baza. Hujjat sahifasi: tender.onetech.uz. |
| 1a | Yuborish 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. |
| 2 | Mahsulot katalogi va narxlar qayerdan olinadi? | Boshida o'z katalogi (Excel import bilan), keyin Zetron v3 dan faqat o'qish uchun ulanish. |
| 3 | Qaysi toifadagi lotlar bizga tegishli? | Sizdan kalit so'zlar va toifalar ro'yxati kerak — bu skriningning aniqligini belgilaydi. |
| 4 | Kompaniya hujjatlari: guvohnoma, litsenziya, muhr va imzo tasviri | Skanlarni bir marta yuklaysiz; muhr va imzo shaffof fonli PNG bo'lishi kerak. |
| 5 | Operator qaysi brauzerdan foydalanadi? | Chrome yoki Edge — kengaytma shu ikkisi uchun bir xil yoziladi. |
| 6 | Hujjatlar tili | Ikki tilda (uz + ru) — platformadagi ko'p lotlar ruscha, shakllar ikki tilli talab qilinadi. |
| 7 | Nechta operator ishlaydi va kim yakuniy imzo qo'yadi? | Rollarni shunga qarab sozlaymiz: tayyorlovchi, tasdiqlovchi, imzolovchi. |
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.
-
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. -
10:32
Ikkala sahifa yuklab olindi
/lots/1/0va/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. -
10:33
Bundle fayllar olindi
main.js— 9,3 MB,scripts.js— 671 KB. Ilovaning butun mantiqi shu ikki faylda. -
10:34
Konfiguratsiya topildi
main.jsichidan 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. -
10:35
Validationheaderi ochildiHTTP 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. -
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).
-
10:39
Marshrutlar va tur kodlari
Angular marshrutlaridan
lots/:typeId/:regIdning ma'nosi ochildi:typeId=1— aynan "tanlov" (competitive). Shu bilan siz bergan havolaning nimani anglatishi aniqlandi. -
10:41
Jonli sinov — header ishladi
Python bilan header qayta yasaldi va
GetTopStatschaqirildi → HTTP 200. Platformada 41 543 yetkazib beruvchi, 675 faol taklif. Bu — butun kuzatuv qismining texnik isboti. -
10:43
Ikkala ro'yxat olindi
TradeList→ 626 faol tanlov loti.CivilContracts/GetList→ 213 faol konvert e'loni. Ikkala oqim ham jonli va o'qiladigan holatda. -
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. -
10:47
Taklif yuborish zanjiri
Provider/AddBidtopildi va uning oldidaesi.sign(...)chaqirilishi ko'rindi: taklifning JSON nusxasi imzolanadi vasignaturemaydoniga qo'shiladi. Ya'ni imzosiz yuborish yo'q. -
10:49
ERI mexanizmi tekshirildi
scripts.jsichidaEIMZOClientvaCAPIWStopildi — imzowss://127.0.0.1:64443orqali 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. -
10:52
Yechim topildi — qoralama
addOfferToDraftfunksiyasi ochib ko'rildi:POST /api/Draft/AddBid?name=...— faqatAuthorizationvaValidationheaderlari 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. -
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. -
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.
-
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. -
11:10
Poddomen ko'tarildi
Siz DNS yozuvini qo'shdingiz —
tender.onetech.uzuchun alohida nginx bloki yaratildi, SSL sertifikati olindi va sahifa jonli. Mavjud saytlarga tegilmadi; parallel sessiyaga nginx reload haqida oldindan xabar berildi. -
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/ichidaHeadlessPkcs7Signer,EncryptedPfxVault,PfxCertificateInspectorva 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.