"""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:])