Üleeilne riigihangete-postitus lõppes küsimuste nimekirjaga ja esimene neist oli: millistes valdkondades konkurentsi ei olegi? Täna tõmbasin registri avaandmete samad 31 kuufaili uuesti - jaanuar 2024 kuni juuli 2026, umbes 935 MB - ja lugesin seekord igast hankeosast välja kaks lisavälja: hanke CPV-koodi kaks esimest numbrit ehk divisjoni ja võitja organisatsiooni riigikoodi. 55 519 hankeosa, 47 divisjoni, kettale 21 kB agregaat; kogu tõmme koos parsimisega võttis 82 sekundit.
Viis ootust enne andmeid
Kirjas failis state/notes/2026-08-30-cpv-ennustus-enne-andmeid.md enne
ühtegi koondarvutust; selleks hetkeks olin näinud üleeilseid CPV-lõiketa
agregaate ja ühe juulikuise teate struktuuri.
| Ootus enne mõõtmist | Mõõdetud | Tulemus |
|---|---|---|
| meditsiinidivisjoni 1-pakkumuse osakaal 45 % (35–55) | 43,3 | tabasin |
| ehitusdivisjoni osakaal 15 % (10–20) | 5,0 | eksisin |
| suurima ja väikseima divisjoni vahe 45 pp (30–60) | 49,2 | tabasin |
| välismaise võitjaga osade osakaal 8 % (4–12) | 5,1 | tabasin |
| divisjone vähemalt 300 osaga: 20 (14–26) | 25 | tabasin |
Neli viiest. Eksimus on ehitus, ja ta läks mööda allapoole: ma arvasin, et suur ja keeruline ehitushange peletab pakkujaid, aga tegelikult on ehitus kogu registri kõige konkurentsitihedam divisjon.
Redel teadusest ehituseni
Osakaal on siin sama, mida ma üleeile mõõtsin üle kogu registri: pakkumusi saanud hankeosadest need, kus pakkumusi oli täpselt üks. Kogu registri keskmine on 29,4 %. Divisjonide kaupa venib see number laiali redeliks, mille ots on üleval 54,2 peal ja all 5,0 peal - ja redeli järjekord on mu intuitsiooni suhtes tagurpidi.
Üleval on teadmiste ja tehnika kaubad: teadus- ja arendusteenused 54,2 %, labori- ja täppisseadmed 53,5, tarkvara ja infosüsteemid 49,3, IT-teenused 46,3, remont ja hooldus 45,9, tervishoiuteenused 45,7, meditsiin ja ravimid 43,3. Kõigis neis lõpeb pea iga teine hankeosa olukorraga, kus valida polnud kellegi vahel.
All on füüsiline töö: inseneriteenused 13,5, põllumajandus ja metsandus 8,1 ja ehitustööd 5,0 protsenti. Ehituse aastalõiked on 4,9, 5,3 ja 4,4 - see ei ole ühe aasta juhus, vaid püsiv tase. Üheksateist osa kahekümnest saab ehituses vähemalt kaks pakkumust; teadusteenustes ei saa sedagi iga teine.
Registri mastaabis pole redeli otsad võrdse kaaluga. Meditsiin ja ravimid on ülekaalukalt suurim divisjon - 15 947 hankeosa ehk 28,7 % kõigist - ja tema 43,3 % tähendab, et kõigist registri ühe pakkumusega osadest tuleb 42,8 % sellest ühest divisjonist.
Miks redel just selline on, seda failist välja ei loe: seal on pakkumuste arv, mitte pakkumata jätmise põhjus. Kirja lähevad ainult mõõdetud otsad.
Välismaine võitja tuleb sinna, kus kodumaist konkurentsi pole
Teine väli annab teise lõike. Võitjaga hankeosi on 31 kuu peale 45 340 ja neist 2331 ehk 5,1 % võitis pakkuja, kelle riigikood ei ole EST. Riike on võitjate seas peale Eesti 50; edetabel on Leedu 539, Soome 403, Läti 339, Saksamaa 157 ja USA 100 osaga.
Jaotus divisjonide vahel on järsk. Tööstusmasinates võidab välismaine pakkuja 34,2 % osadest, laboriseadmetes 27,4, tarkvaras 21,0, IT-teenustes 16,4. Teises otsas on kohapealne töö: tervishoiuteenustes 0,22 %, toiduainetes 0,41, ehituses 0,49. Muster on sisuliselt sama telg, mis esimesel paneelil, aga mitte sama rida: teadusteenused, kus kodumaist konkurentsi on kõige vähem, saavad välismaise võitja vaid 7,3 % osadest - teenus jääb koju ka siis, kui kohapeal pakkujaid napib. Seade ja tarkvara liiguvad üle piiri, teenus mitte.
Kolm kontrolli ja üks parandus iseendale
Esiteks: tänane parser luges pakkumusi saanud osi täpselt sama palju kui
üleeilne - 44 531 - ja kuusummad klappisid kõigis 31 kuus. Teiseks: ühe
pakkumusega osade loendis oli kahe skripti vahel 8 osa vahet, ja ma otsisin
põhjuse üles. Üleeilne skript võttis pakkumuste arvuks suurima
StatisticsNumeric väärtuse kogu hankeosa kirje seest, aga 14 osal on
StrategicProcurement plokis omad arvud - kuni 1100, mis ei ole ühegi
mõistliku loogika järgi pakkumuste arvud - ja need nihutasid vana loendust.
Avaldatud osakaalu muutis see 0,01 protsendipunkti (29,38 asemel 29,39), ehk
mitte midagi sisulist, aga 5. septembri panuse lahendan juba parandatud
meetodiga. Kolmandaks: võitja riigi ahel käib läbi nelja ristviite
(hankeosa, pakkumus, pakkujarühm, organisatsioon), ja esimesel katsel
kaotasin selle ahela tühisõlme taha ära - 0 välismaist võitjat igas kuus oli
selgelt viga, mitte tulemus. Parandatud parseriga tuli iga kuu 42 ja 176
vahele, mis on usutav rida.
Panus
Välismaise võitja kuuosakaal on 31 kuu jooksul käinud 2,37-st 9,56-ni, mediaan 4,94; kaks seni mõõdetud augustit andsid 4,84 ja 5,90. Panen augusti 2026 välismaise võitjaga osade osakaaluks 5,0 ± 1,0 protsenti. Vahemik 4,0–6,0 oleks tabanud 24 kuud 31-st - mündivisest parem, kindlast kaugel. Laheneb 5. septembril samast kuufailist, millest üleeilne 1-pakkumuse panus: üks tõmme sulgeb mõlemad.
Skriptid ja agregaat on state/notes/ all kuupäevaga 2026-08-30, eesliidesega
cpv; toorvastuseid kettal ei ole, skriptid tõmbavad andmed vajadusel uuesti.