Šauktinių sąrašo sudarymo kodo apžvalga

Šaltinis

Krašto apsaugos ministerijos tinklalapyje yra skiltis „Aktualu šauktiniams“, kur yra štai tokia nuoroda:

Sąrašams sudaryti naudojamos PROGRAMOS KODĄ galima peržiūrėti čia

Nuorodą „čia“ yra į ZIP archyvą „kodas.zip“, kurio SHA1 maišos kodas yra 45c1abe10591896ca9fe60738d15ad704a9753bd. Jeigu pašalintų failą arba pakeistų jį kitokiu, pateikiu vietinę kopiją (mirror).

Archyvas sukurtas gegužės 11-tą dieną, dvi dienos prieš sąrašo pateikimą, ir jame yra du failai:

Archive:  kodas.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    8957  Defl:N     1826  80% 2015-05-11 16:14 3f1d15de  Kodas/Forma Saukimo_sarasas.txt
   13667  Defl:N     2294  83% 2015-05-11 16:14 30aefda2  Kodas/Package Saukimo_Sarasas.txt
--------          -------  ---                            -------
   22624             4120  82%                            2 files

Turinys

Failas „Forma Saukimo_Sarasas.txt“ (nuoroda į peržiūrą naršyklėje) yra UTF-8 koduotės Visual Basic.NET kalba parašyta vartotojo sąsaja.

Failas „Package Saukimo_Sarasas.txt“ yra ISO-8859-13 koduotės Oracle SQL programa. Anot komentarų abiejų failų autorius yra ArtuCer, paskutinio modifikavimo data 2015-05-07.

Pagrindinė dalis yra dvi INSERT užklausos. Anot komentarų, vienas jų generuoja „A sąrašą“, o kitas „regioninį A sąrašą“. Pastarojo procedūra dėl aplinkybių vadinasi Naujas_Sarasas_B.

INSERT INTO PRS_A (PersonalCode, SarasoID, EilesNr, AtsitiktinisSkaicius, RevOrgNo, UserID, RevisionDate)
  SELECT PersonalCode, in_SarasoID, rownum as Eil_Nr, atsitiktinis, 0, User, SysDate
  FROM (SELECT dbms_random.value as atsitiktinis, PersonalCode
        FROM PRV
        WHERE PersonalCode Not In(SELECT PersonalCode FROM PRA WHERE KKPAKodas In('V','Z','X'))
        ORDER BY 1) a1;

Čia sudaroma bendra eilė. Vidiniame SELECT kiekvienam kandidatui naudojant dbms_random.value priskiriamas atsitiktinis skaičius intervale [0,1), pagal kurį išrikiuojami rezultatai ir priskiriami numeriai bendroje eilėje.

Pozicija eilėje priskiriama atsitiktinai, tačiau nevyksta joks atsiktinis išrinkimas, t.y. į eilę patenka visi kandidatai esantys PRV lentelėje.

INSERT INTO PRS_B (PersonalCode, SarasoID, EilesNr, TeritOrgNo, RevOrgNo, UserID, RevisionDate)
  SELECT PersonalCode, in_SarasoID||in_RegionoKodas, rownum as Eil_Nr, OfficeCode, 0, User, SysDate
  FROM (SELECT PRS_A.EilesNr, PRS_A.PersonalCode, DCH.OfficeCode
        FROM PRS_A
          INNER JOIN PER ON PRS_A.PersonalCode=PER.PersonalCode
          INNER JOIN PRV ON PRS_A.PersonalCode=PRV.PersonalCode
          INNER JOIN DCH ON PRS_A.PersonalCode=DCH.PersonalCode
        WHERE PRS_A.SarasoID=in_SarasoID
          --iki einamųjų metų pradžios sukakęs 19 - 25 metų amžius
          AND PER.BirthDate BETWEEN add_months(trunc(sysdate,'YEAR'),-26*12) AND add_months(trunc(sysdate,'YEAR'),-19*12)-1
          --neįtraukti kandidatų į NPPKT kurių priėmimo būsena "Vykdomas priėmimas"
          AND PRS_A.PersonalCode Not IN (SELECT PersonalCode
                                          FROM TKT
                                          WHERE TKT.KTKTKodas='S'
                                            AND TKT.KTKBKodas=0
                                            AND RegistravimoData<sysdate
                                            AND nvl(PabaigosData,'2100-12-31')>sysdate)
          AND PRV.KKPTKodas='N' --neparengtojo rezervo karys
          AND (DCH.OfficeCode=in_SkyriausOrgNo OR DCH.OfficeCode=in_PoskyrioOrgNo)
        ORDER BY 1) a1;

Čia bendroji eilė išfiltruojama ir paskirstoma pagal regionus. Amžiaus filtravimo funkcija išrenka žmones, kurių gimimo data yra tarp 1989-01-01 ir 1995-12-31 imtinai. Priskiriami regioniniai eilės numeriai.

Turbūt tai ir yra eilė matoma šauktinių sąrašuose.

Išvados

Tai nėra tinklapyje minima „atsitiktinė elektroninės atrankos sistema“. Nėra tos dalies, kuri išrenka 36 825 kandidatų iš visų galimų „apie 175 000“. Nera paaiškinimų apie kitas sistemos dalis, ir didžiąją publikacijos dalį sudaro šalutinis funkcionaluma.

Kokios galėtų būti šio kodo publikavimo priežastys? Nevykęs bandymas sudaryti skaidrumo ir atvirumo įvaizdį?