1
0
Files
Rihards 3386fcaff7 0.6.0: kataloga robu mezgli un punktu pārvietošana (remap.csv)
7 jauni mezgli (arhīvi, civildienesta politika, kapitālsabiedrības, ģeotelpiskā informācija, pārtikas drošība,
veselības aprūpes finansēšana, jaunatne); 149 punkti pārvietoti.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016igpMJBtapmG6vHE4vSF9q
2026-10-24 16:36:02 +00:00

349 lines
24 KiB
Python

"""generate.py — data/funkcijas.xml no divām daļām:
H horizontālās funkcijas (definētas šeit, HORIZONTAL; lietvedība sadalīta pēc Arhīvu likuma 4. panta);
S nozaru funkcijas no valdības funkciju klasifikācijas (sources/cofog.csv — kodi, kā VDZP budžeta datos).
python3 tools/generate.py # raksta data/funkcijas.xml un pārbauda pret XSD
Izmaiņas katalogā veic šeit (vai CSV) un ģenerē no jauna; jauna izmaiņa → jauns DATA_VERSIONS ieraksts.
"""
import csv
import sys
from lxml import etree
NS = "urn:pppa:vpk:funkcijas:0.1"
Q = "{%s}" % NS
ARH = "lv-lik-2010-02-11" # Arhīvu likums
PIL = "lv-lik-2016-12-15" # Publisko iepirkumu likums
APL = "lv-lik-2001-10-25" # Administratīvā procesa likums
VPIL = "lv-lik-2002-06-06" # Valsts pārvaldes iekārtas likums
EADR = "lv-lik-2016-06-16" # Oficiālās elektroniskās adreses likums
IESN = "lv-lik-2007-09-27" # Iesniegumu likums
CSL = "lv-lik-1997-10-01" # Ceļu satiksmes likums
DATA_VERSIONS = [
("2026-10-24", ["Pirmā versija: nozaru funkcijas pēc COFOG (99 kodi no VDZP budžeta datiem), "
"horizontālās funkcijas H.01–H.10; lietvedība (H.01) sadalīta pēc Arhīvu likuma 4., 6.–9. panta."]),
("2026-10-24", ["Nozaru funkcijām atslēgvārdi (SECTOR_KEYWORDS), lai tām piesaistītu likumu pilnvarojumus un nolikumu punktus.",
"H.01.08 pamats — Oficiālās elektroniskās adreses likums, turētājs arī VDAA (sistēmas pārzinis); "
"H.01.09 pamats — Iesniegumu likums."]),
("2026-10-24", ["S.04.510 Autotransports sadalīts: reģistrācija, valsts tehniskā apskate, vadītāju apmācība un apliecības "
"(pamats — Ceļu satiksmes likums 10., 16., 22. pants)."]),
("2026-10-24", ["H.05 IKT sadalīts H.05.01–H.05.08; jaunas horizontālās funkcijas H.11–H.14.",
"Nolikumu punktu klasifikācija (sources/klasifikacija.csv): pirmā partija — VARAM resors un KISC, MI priekšlikums."]),
("2026-10-24", ["Visi 2176 nolikumu funkciju un uzdevumu punkti (95 nolikumi) klasificēti, MI priekšlikums; kataloga robi — docs/kataloga-robi.md."]),
("2026-10-24", ["Kataloga robu aizpilde: S.01.600.01–.03, S.04.210.01, S.07.610.01, S.08.290.01, S.08.620.01; punkti pārvietoti ar sources/remap.csv."]),
]
# Nozaru funkciju atslēgvārdi (vārda sākums mazajiem burtiem). Šauri, lai sasaiste ar likumu pilnvarojumiem un
# nolikumu punktiem būtu pārskatāma; plašākas grupas (S.NN) atslēgvārdus saņem tikai tad, ja nav precīzāka.
SECTOR_KEYWORDS = {
"S.01.110": ["saeim", "valsts prezident", "ministru kabinet sēd"],
"S.01.120": ["nodokļ", "valsts kas", "fiskāl", "budžeta likum"],
"S.01.131": ["ārlietu", "ārpolitik"],
"S.01.132": ["diplomātisk", "konsulār", "vēstniecīb"],
"S.01.133": ["starptautiskajās organizācijās", "dalības maks"],
"S.01.320": ["statistik", "reģionālās politik", "pašvaldību darbības uzraudzīb", "reģionālā attīstīb"],
"S.01.400": ["zinātnisk", "fundamentālo pētījum"],
"S.01.500": ["lietišķo pētījum", "eksperimentālās izstrād", "inovācij"],
"S.01.700": ["valsts parād", "aizņēmum"],
"S.02.100": ["valsts aizsardzīb", "nacionālo bruņoto spēk", "bruņoto spēk", "militār", "zemessardz"],
"S.02.500": ["mobilizācij", "aizsardzības industrij"],
"S.03.110": ["policij", "noziedzīg", "sabiedriskās kārtīb"],
"S.03.120": ["robežsardz", "valsts robež", "robežkontrol"],
"S.03.130": ["pilsonīb", "migrācij", "uzturēšanās atļauj", "patvērum", "vīzu", "vīzas"],
"S.03.200": ["ugunsdrošīb", "ugunsdzēs", "glābšan", "civilās aizsardzīb", "katastrof"],
"S.03.311": ["tiesu sistēm", "tiesneš", "tiesu administrācij", "tiesvedīb"],
"S.03.320": ["prokuratūr", "prokuror"],
"S.03.330": ["probācij"],
"S.03.390": ["zvērinātu advokāt", "notār", "tiesu izpildītāj", "maksātnespēj"],
"S.03.410": ["ieslodzījum", "brīvības atņemšan"],
"S.04.111": ["komercdarbīb", "uzņēmējdarbīb", "konkurenc", "patērētāju tiesīb"],
"S.04.112": ["komercreģistr", "uzņēmumu reģistr", "tirdzniecīb"],
"S.04.121": ["nodarbinātīb", "darba tiesīb", "darba aizsardzīb"],
"S.04.122": ["bezdarbniek", "darba meklētāj"],
"S.04.210": ["lauksaimniecīb", "lauksaimniecības dzīvniek", "augu aizsardzīb", "veterinār", "pārtikas aprit"],
"S.04.220": ["mežsaimniecīb", "meža resurs", "meža zem"],
"S.04.230": ["zivsaimniecīb", "zvejniecīb", "medīb", "medniecīb"],
"S.04.240": ["lauku attīstīb", "lauku atbalst"],
"S.04.300": ["enerģētik", "elektroenerģij", "siltumenerģij", "dabasgāz", "atjaunojamo energoresurs"],
"S.04.430": ["būvniecīb", "būvatļauj", "būvvald", "būvuzraudzīb"],
"S.04.510": ["autoceļ", "ceļu satiksm", "transportlīdzekļ", "autopārvadājum"],
"S.04.540": ["aviācij", "gaisa kuģ", "lidost", "gaisa satiksm"],
"S.04.500": ["dzelzceļ", "jūras transport", "ostu", "kuģošan"],
"S.04.600": ["elektronisko sakar", "pasta pakalpojum", "radiofrekvenč"],
"S.04.730": ["tūrism"],
"S.05.100": ["atkritum"],
"S.05.300": ["piesārņojum", "siltumnīcefekta gāz", "ūdens kvalitāt", "gaisa kvalitāt"],
"S.05.400": ["bioloģiskās daudzveidīb", "īpaši aizsargājam", "dabas aizsardzīb", "ainav"],
"S.05.600": ["vides aizsardzīb", "ietekmes uz vidi novērtējum"],
"S.06.200": ["teritorijas plānojum", "teritorijas attīstības plānošan", "teritoriālplānojum", "zemes ierīcīb"],
"S.07.110": ["zāļu", "medikament", "farmac"],
"S.07.210": ["ambulator", "ģimenes ārst", "primārās veselības aprūp"],
"S.07.300": ["slimnīc", "stacionār"],
"S.07.460": ["asins donor", "asins sagād"],
"S.07.610": ["veselības aprūp", "ārstniecības iestāž", "ārstniecības person"],
"S.07.620": ["sabiedrības veselīb", "infekcijas slimīb", "epidemioloģ"],
"S.08.100": ["sport"],
"S.08.210": ["bibliotēk"],
"S.08.220": ["muzej", "kultūras pieminekļ", "kultūras mantojum"],
"S.08.240": ["teātr", "koncert", "skatuves māksl"],
"S.08.290": ["kultūras politik", "kultūras institūcij", "radošo industrij"],
"S.08.310": ["elektronisko plašsaziņas līdzekļ", "sabiedriskā medij", "sabiedrisko medij"],
"S.08.330": ["izdevniecīb", "obligātā eksemplār"],
"S.08.400": ["reliģisk"],
"S.09.210": ["vispārējās izglītīb", "pamatizglītīb", "vidējās izglītīb", "pirmsskolas izglītīb"],
"S.09.200": ["profesionālās izglītīb"],
"S.09.410": ["augstākās izglītīb", "augstskol", "universitāt", "studij"],
"S.09.430": ["studiju kredīt", "studējošo kredīt"],
"S.09.510": ["interešu izglītīb", "profesionālās ievirzes"],
"S.09.520": ["pedagogu profesionālās", "tālākizglītīb", "valsts administrācijas skol"],
"S.09.810": ["izglītības kvalitāt", "izglītības iestāžu akreditācij", "izglītības programm"],
"S.10.110": ["slimības pabalst", "darbnespēj"],
"S.10.120": ["invaliditāt"],
"S.10.200": ["vecuma pensij", "pensij", "gados vec"],
"S.10.400": ["ģimenes valsts pabalst", "bērna kopšan", "bērnu tiesību aizsardzīb", "ārpusģimenes aprūp"],
"S.10.500": ["bezdarba pabalst", "bezdarba gadījum"],
"S.10.600": ["mājokļa pabalst", "dzīvokļa jautājum", "mājokļu atbalst"],
"S.10.700": ["sociālās palīdzīb", "sociālo pakalpojum", "trūcīg", "maznodrošināt"],
"S.10.910": ["sociālās apdrošināšan", "sociālās drošīb"],
}
# Nozaru funkciju sīkāks sadalījums, kur valdības funkciju klasifikācija ir par rupju: id, nosaukums, apraksts,
# pamats [(vienība, atsauce)], atslēgvārdi. Budžeta kods paliek vecākfunkcijai.
SECTOR_CHILDREN = {
"S.01.600": [
("S.01.600.01", "Valsts pārvaldes un civildienesta politika", "Valsts pārvaldes attīstība, cilvēkresursi, atlīdzība, laba pārvaldība.",
[], ["valsts pārvaldes attīstības politik", "civildienest", "atlīdzības sistēm"]),
("S.01.600.02", "Kapitālsabiedrību pārvaldība", "Publisku personu kapitāla daļu un kapitālsabiedrību pārvaldības koordinācija.",
[], ["kapitālsabiedrību pārvaldīb", "kapitāla daļu"]),
("S.01.600.03", "Ģeodēzija, kartogrāfija un ģeotelpiskā informācija", "Ģeodēziskā atskaites sistēma, kartes, ģeotelpiskie pamatdati.",
[], ["ģeodēz", "kartogrāf", "ģeotelpisk"]),
],
"S.04.210": [
("S.04.210.01", "Pārtikas drošība, veterinārija un fitosanitārija", "Pārtikas aprites, dzīvnieku veselības un augu aizsardzības uzraudzība.",
[], ["pārtikas aprit", "veterinār", "fitosanitār", "augu aizsardzības līdzekļ", "dzīvnieku veselīb"]),
],
"S.07.610": [
("S.07.610.01", "Veselības aprūpes pakalpojumu finansēšana", "Valsts apmaksāto veselības aprūpes pakalpojumu līgumi, tarifi, norēķini.",
[], ["valsts apmaksāto veselības aprūpes pakalpojum", "apmaksājamo veselības aprūpes"]),
],
"S.08.290": [
("S.08.290.01", "Arhīvi", "Nacionālā dokumentārā mantojuma uzkrāšana, glabāšana un pieejamība.",
[], ["dokumentārā mantojum", "nacionālais arhīv"]),
],
"S.08.620": [
("S.08.620.01", "Jaunatnes politika un darbs ar jaunatni", "Darbs ar jaunatni, jaunatnes informācija un līdzdalība.",
[], ["darbā ar jaunatni", "darbs ar jaunatni", "jaunatnes politik"]),
],
"S.04.510": [
("S.04.510.01", "Transportlīdzekļu reģistrācija",
"Transportlīdzekļu un to vadītāju valsts reģistrs, reģistrācijas darbības un numura zīmes.",
[(f"{CSL}.art10", "Ceļu satiksmes likums, 10. pants"), (f"{CSL}.art14s1", "Ceļu satiksmes likums, 14.¹ pants")],
["transportlīdzekļu reģistrācij", "transportlīdzekļu un to vadītāju valsts reģistr"]),
("S.04.510.02", "Transportlīdzekļu valsts tehniskā apskate",
"Tehniskā stāvokļa kontrole un atļauja piedalīties ceļu satiksmē; tehniskā kontrole uz ceļiem.",
[(f"{CSL}.art16", "Ceļu satiksmes likums, 16. pants")], ["tehnisko apskat", "tehniskās apskat", "tehniskā apskat", "tehniskā stāvokļa kontrol"]),
("S.04.510.03", "Transportlīdzekļu vadītāju apmācība un vadītāja apliecības",
"Vadītāju apmācība, eksāmeni un vadītāja apliecības izsniegšana.",
[(f"{CSL}.art22", "Ceļu satiksmes likums, 22. pants")], ["vadītāja apliecīb", "vadītāju apmācīb"]),
],
}
EVERY = ("every_institution", None, "katra iestāde")
LNA = ("institution", "22-0663", "Latvijas Nacionālais arhīvs")
CAB = ("cabinet", None, "Ministru kabinets")
VDAA = ("institution", "21-0627", "Valsts digitālās attīstības aģentūra")
# id, nosaukums, apraksts, pamats [(vienība, atsauce)], turētāji, atslēgvārdi, apakšfunkcijas
HORIZONTAL = [
("H.01", "Lietvedība un arhīvu pārvaldība",
"Iestādes darbības dokumentēšana, dokumentu klasifikācija, glabāšana, pieejamība un nodošana valsts glabāšanā.",
[(f"{ARH}.art4", "Arhīvu likums, 4. pants")], [EVERY, LNA],
["dokumentu pārvaldīb", "dokumentu un arhīvu pārvaldīb", "lietved", "dokumentu aprit", "dokumentu vadīb",
"arhīva pārvaldīb", "dokumentu glabāšan"],
[
("H.01.01", "Darbības dokumentēšana", "Autentisku, ticamu un integrētu darbības liecību radīšana.",
[(f"{ARH}.art4.d1.p1", "Arhīvu likums, 4. panta 1. daļas 1. punkts")], [EVERY],
["dokumentēšan", "darbības liecīb"], []),
("H.01.02", "Dokumentu klasifikācija un sistematizācija",
"Klasifikācijas shēma, saskaņota ar Latvijas Nacionālo arhīvu.",
[(f"{ARH}.art4.d1.p2", "Arhīvu likums, 4. panta 1. daļas 2. punkts"),
(f"{ARH}.art4.d3", "Arhīvu likums, 4. panta 3. daļa")], [EVERY, LNA],
["klasifikācij", "sistematizācij"], []),
("H.01.03", "Dokumentu pārvaldības iekšējā kontrole un atbildība",
"Iekšējā kontrole un uzraudzība; iestādes vadītāja atbildība.",
[(f"{ARH}.art4.d1.p3", "Arhīvu likums, 4. panta 1. daļas 3. punkts"),
(f"{ARH}.art4.d5", "Arhīvu likums, 4. panta 5. daļa")], [EVERY],
["dokumentu pārvaldības iekšēj"], []),
("H.01.04", "Dokumentu glabāšana, izmantošana un pieejamība",
"Glabāšana līdz nodošanai arhīvā; izziņas, kopijas, izraksti.",
[(f"{ARH}.art4.d1.p4", "Arhīvu likums, 4. panta 1. daļas 4. punkts"),
(f"{ARH}.art4.d2.p4", "Arhīvu likums, 4. panta 2. daļas 4. punkts")], [EVERY],
["dokumentu glabāšan", "dokumentu pieejamīb", "dokumentu kopij", "izziņ"], []),
("H.01.05", "Institūcijas arhīva pārvaldība un dokumentu izvērtēšana",
"Glabāšanas termiņi, arhīviskā vērtība, aprakstīšana, uzziņu sistēma.",
[(f"{ARH}.art4.d2", "Arhīvu likums, 4. panta 2. daļa"), (f"{ARH}.art8", "Arhīvu likums, 8. pants")],
[EVERY, LNA], ["arhīvisk", "glabāšanas termiņ", "uzziņu sistēm", "dokumentu izvērtēšan"], []),
("H.01.06", "Dokumentu nodošana pastāvīgā valsts glabāšanā",
"Pastāvīgi glabājamo dokumentu nodošana Latvijas Nacionālajam arhīvam; likvidējamās iestādes.",
[(f"{ARH}.art6", "Arhīvu likums, 6. pants"), (f"{ARH}.art7", "Arhīvu likums, 7. pants")], [EVERY, LNA],
["pastāvīgā valsts glabāšan", "valsts glabāšan"], []),
("H.01.07", "Publisko dokumentu pārvēršana elektroniskā formā",
"Digitalizācija ar integritātes un autentiskuma pārbaudi.",
[(f"{ARH}.art9", "Arhīvu likums, 9. pants")], [EVERY], ["pārvērš", "digitalizācij"], []),
("H.01.08", "Oficiālā elektroniskā saziņa",
"Dokumentu sūtīšana un saņemšana caur oficiālo elektronisko adresi.",
[(EADR, "Oficiālās elektroniskās adreses likums")], [EVERY, VDAA],
["oficiālās elektroniskās adres", "e-adres"], []),
("H.01.09", "Iesniegumu reģistrēšana un atbildes termiņos",
"Iesniegumu un sarakstes uzskaite, atbildes likumā noteiktajos termiņos.",
[(IESN, "Iesniegumu likums")], [EVERY], ["iesniegum"], []),
]),
("H.02", "Finanšu vadība un grāmatvedība", "Budžeta plānošana, izpilde, grāmatvedības uzskaite.",
[], [EVERY], ["grāmatvedīb", "budžeta plānošan", "budžeta izpild", "finanšu vadīb", "finanšu pārskat"], []),
("H.03", "Personāla vadība", "Personāla atlase, amati, atlīdzība, attīstība.",
[], [EVERY], ["personāla vadīb", "personāla atlas", "cilvēkresurs", "atlīdzīb", "amatu katalog"], []),
("H.04", "Publiskie iepirkumi", "Iepirkumu plānošana, procedūras, līgumu izpildes kontrole.",
[(PIL, "Publisko iepirkumu likums")], [EVERY], ["iepirkum"], []),
("H.05", "IKT un informācijas sistēmas", "Informācijas sistēmu un IKT infrastruktūras uzturēšana un attīstība.",
[], [EVERY], ["informācijas sistēm", "informācijas un komunikācijas tehnoloģ", "ikt "],
[
("H.05.01", "IKT infrastruktūra un koplietošanas pakalpojumi",
"Datu centri, tīkli, darba vietas, koplietošanas infrastruktūra un aprīkojums.",
[], [EVERY], ["ikt infrastruktūr", "koplietošanas infrastruktūr", "tehnoloģiju infrastruktūr"], []),
("H.05.02", "Informācijas sistēmu izstrāde, ieviešana un uzturēšana",
"Informācijas sistēmu iegāde, izstrāde, ieviešana, attīstība un uzturēšana.",
[], [EVERY], ["informācijas sistēmu izstrād", "informācijas sistēmu uzturēšan", "informācijas sistēmu attīstīb"], []),
("H.05.03", "Elektronisko pakalpojumu nodrošināšana", "E-pakalpojumu pieejamība fiziskām un juridiskām personām.",
[], [EVERY], ["elektronisko pakalpojum", "e-pakalpojum"], []),
("H.05.04", "IKT lietotāju atbalsts un apmācība", "Lietotāju atbalsts, palīdzības dienests, apmācība.",
[], [EVERY], ["lietotāju atbalst", "lietotājiem atbalst"], []),
("H.05.05", "IKT drošība un darbības nepārtrauktība", "Informācijas un kiberdrošība, pieejamība, nepārtrauktība.",
[], [EVERY], ["kiberdrošīb", "informācijas drošīb", "darbības nepārtrauktīb"], []),
("H.05.06", "Iestādes vai resora IKT plānošana un finansējums",
"IKT attīstības plānošana, finansējuma plānošana un IKT politikas īstenošana iestādē vai resorā.",
[], [EVERY], ["tehnoloģiju attīstības politik", "ikt attīstīb"], []),
("H.05.07", "Valsts pārvaldes digitālās transformācijas politika un arhitektūra",
"Valsts līmeņa digitālo tehnoloģiju pārvaldība, arhitektūras principi, koplietošanas pakalpojumu koordinācija.",
[], [], ["digitālās transformācij", "digitālo tehnoloģiju pārvaldīb", "informācijas sabiedrīb", "arhitektūras princip"], []),
("H.05.08", "Datu pārvaldība un atvērtie dati", "Datu pārvaldības politika, datu koplietošana un atkalizmantošana.",
[], [], ["datu pārvaldīb", "atvērto dat", "augstvērtīgo datu"], []),
]),
("H.06", "Politikas plānošana un normatīvo aktu izstrāde",
"Attīstības plānošanas dokumentu un tiesību aktu projektu izstrāde un atzinumi.",
[], [EVERY], ["tiesību aktu projekt", "normatīvo aktu projekt", "politikas plānošanas dokument",
"attīstības plānošanas dokument"], []),
("H.07", "Komunikācija ar sabiedrību", "Sabiedrības informēšana un iesaiste.",
[], [EVERY], ["sabiedrības informēšan", "informē sabiedrīb", "komunikācij"], []),
("H.08", "Iekšējā kontrole un audits", "Iekšējās kontroles sistēma un iekšējais audits.",
[], [EVERY], ["iekšējā audit", "iekšējās kontroles", "iekšējo audit"], []),
("H.09", "Administratīvais process", "Administratīvo aktu izdošana un apstrīdēšana.",
[(APL, "Administratīvā procesa likums")], [EVERY], ["administratīvā akt", "administratīvo akt", "administratīvais akt",
"administratīvā procesa"], []),
("H.10", "Personas datu aizsardzība", "Personas datu apstrāde atbilstoši regulai (ES) 2016/679.",
[], [EVERY], ["personas dat"], []),
("H.11", "Publisko pakalpojumu pārvaldība", "Valsts pārvaldes pakalpojumu pārvaldības politika, vienotais kontaktpunkts.",
[], [], ["pakalpojumu pārvaldīb", "vienotā kontaktpunkt"], []),
("H.12", "ES fondu un ārvalstu finanšu instrumentu vadība",
"ES fondu un citu ārvalstu finanšu instrumentu programmu vadība, ieviešana un uzraudzība.",
[], [], ["eiropas savienības fondu", "ārvalstu finanšu instrument", "interreg"], []),
("H.13", "Starptautiskā sadarbība", "Sadarbība ar ārvalstu un starptautiskām institūcijām, dalība starptautiskās organizācijās.",
[], [EVERY], ["starptautiskajās organizācijās", "starpvalstu sadarbīb"], []),
("H.14", "Valsts īpašuma pārvaldība", "Iestādes turējumā vai valdījumā nodotā valsts kustamā un nekustamā īpašuma pārvaldība.",
[], [EVERY], ["nekustamos īpašum", "valsts īpašumā esošo mant"], []),
]
def E(parent, tag, text=None, **attrs):
e = etree.SubElement(parent, Q + tag, {k: v for k, v in attrs.items() if v is not None})
if text is not None:
e.text = text
return e
def horizontal(parent, item, level):
fid, name, descr, basis, holders, keys, children = item
f = E(parent, "Function", id=fid, kind="horizontal", level=str(level))
E(f, "Name", name)
if descr:
E(f, "Description", descr)
for unit, ref in basis:
E(f, "Basis", ref, unit=unit)
for htype, vpk, label in holders:
E(f, "Holder", label, type=htype, vpkId=vpk)
for k in keys:
E(f, "Keyword", k)
for c in children:
horizontal(f, c, level + 1)
def main(out="data/funkcijas.xml"):
root = etree.Element(Q + "FunctionCatalogue", nsmap={None: NS}, id="lv-funkcijas", schemaVersion="0.1")
E(root, "Title", "Valsts pārvaldes funkciju katalogs")
E(root, "Description", "Nozaru funkcijas pēc valdības funkciju klasifikācijas (S) un horizontālās funkcijas, kas jāveic "
"katrai iestādei (H). Katalogs ir pamats, pie kura VDZP sasaista likumu pilnvarojumus, "
"nolikumu punktus un budžeta izdevumus.")
E(root, "Source", "Valdības funkciju klasifikācija, kā valsts budžeta izpildē (VDZP B03/B15)")
E(root, "Source", "Arhīvu likums (Likums-as-Code lv-lik-2010-02-11)", url="https://likumi.lv/ta/id/205971")
h = E(root, "Function", id="H", kind="horizontal", level="1")
E(h, "Name", "Horizontālās (atbalsta) funkcijas")
E(h, "Description", "Funkcijas, kas jāveic katrai iestādei neatkarīgi no nozares.")
for item in HORIZONTAL:
horizontal(h, item, 2)
s = E(root, "Function", id="S", kind="sector", level="1")
E(s, "Name", "Nozaru funkcijas (valdības funkciju klasifikācija)")
rows = list(csv.DictReader(open("sources/cofog.csv", encoding="utf-8")))
l1 = {}
for r in rows:
if r["l1"] not in l1:
f = E(s, "Function", id="S." + r["l1"][:2], kind="sector", level="2")
E(f, "Name", r["l1_name"])
E(f, "Cofog", r["l1"])
l1[r["l1"]] = f
if r["code"] == r["l1"]:
continue
c = E(l1[r["l1"]], "Function", id="S." + r["code"][:2] + "." + r["code"][3:], kind="sector", level="3")
E(c, "Name", r["name"])
E(c, "Cofog", r["code"])
for k in SECTOR_KEYWORDS.get(c.get("id"), []):
E(c, "Keyword", k)
for cid, name, descr, basis, keys in SECTOR_CHILDREN.get(c.get("id"), []):
g = E(c, "Function", id=cid, kind="sector", level="4")
E(g, "Name", name)
E(g, "Description", descr)
for unit, ref in basis:
E(g, "Basis", ref, unit=unit)
for k in keys:
E(g, "Keyword", k)
unknown = set(SECTOR_KEYWORDS) - {f.get("id") for f in s.iter(Q + "Function")}
if unknown:
sys.exit(f"SECTOR_KEYWORDS: nav katalogā {sorted(unknown)}")
ids = {f.get("id") for f in root.iter(Q + "Function")}
seen = set()
for r in csv.DictReader(open("sources/klasifikacija.csv", encoding="utf-8")):
if r["point"] in seen:
sys.exit(f"klasifikacija.csv: punkts divreiz {r['point']}")
seen.add(r["point"])
if r["type"] == "function" and r["function"] not in ids:
sys.exit(f"klasifikacija.csv: {r['point']} — nav funkcijas {r['function']}")
E(root, "Classification", r["rationale"], point=r["point"], type=r["type"],
function=r["function"] or None, status=r["status"], by=r["by"], date=r["date"])
for n, (date, changes) in enumerate(DATA_VERSIONS, 1):
dv = E(root, "DataVersion", number=str(n), date=date)
for ch in changes:
E(dv, "Change", ch)
etree.indent(root, space=" ")
doc = etree.ElementTree(root)
xsd = etree.XMLSchema(etree.parse("schemas/funkcijas-0.1.xsd"))
if not xsd.validate(doc):
sys.exit(f"XSD: {xsd.error_log.last_error}")
data = etree.tostring(root, xml_declaration=True, encoding="UTF-8")
open(out, "wb").write(data + b"\n")
n_h = len(root.findall(f".//{Q}Function[@kind='horizontal']"))
n_s = len(root.findall(f".//{Q}Function[@kind='sector']"))
n_c = len(root.findall(f"{Q}Classification"))
print(f"{out}: {n_h} horizontālās, {n_s} nozaru funkcijas, {n_c} punktu klasifikācijas; XSD derīgs")
if __name__ == "__main__":
main(*sys.argv[1:])