#!/usr/bin/env python3 """Jaunas valdības deklarācijas projekts no PPPA MI stratēģijas + atbilstošie Kulberga deklarācijas uzdevumi. Lietojums: python3 tools/projekts_no_mi_strategijas.py data/lv-dekl-2026-05-28.xml 2026-10-10 data/ Struktūra (teksts pārņemts burtiski): ievads = stratēģijas vīzija principi = stratēģijas īstenošanas principi prioritātes → nodaļa = stratēģijas pīlārs (I, II, III) → apakšnodaļa = stratēģijas mērķis (Goal = mērķa apraksts) → uzdevums = stratēģijas rīcība („Nosaukums. Teksts”) Identifikatori: stratēģijas rīcība rNN → uzdevums u(052+NN) (avota deklarācijā 52 uzdevumi; nākamie brīvie numuri) pārņemtais avota uzdevums → tas pats uNNN + @derivedFrom """ import sys from pathlib import Path from xml.etree import ElementTree as ET from xml.sax.saxutils import escape, quoteattr S = {"s": "urn:pppa:cac:mi-strategija:0.1"} V = {"v": "urn:pppa:cac:valdiba:0.2"} # Kulberga deklarācijas uzdevumi, kas atbilst stratēģijai: avota uzdevums -> stratēģijas mērķis (pievieno mērķa sākumā) FROM_SOURCE = {"u021": 1, "u015": 2, "u039": 5} def sentence(t): t = t.strip() return t if t[-1:] in ".!?" else t + "." def main(mis_path, src_path, day, out_dir): mis = ET.parse(mis_path).getroot() src = ET.parse(src_path).getroot() src_id = src.get("id") did = f"lv-dekl-{day}" src_tasks = {t.get("id").rsplit(".", 1)[1]: t for t in src.iterfind(".//v:Task", V)} max_src = max(int(k[1:]) for k in src_tasks) assert max_src == 52, max_src n = 0 # drukātais numurs dokumentā L = [] add = L.append def task(uid, text, derived=None): nonlocal n n += 1 d = f" derivedFrom={quoteattr(derived)}" if derived else "" add(f' ') add(f" {escape(text)}") add(" ") vision = mis.findtext("s:Vision", namespaces=S) pr = mis.find("s:Principles", S) add(f'
') add(f" {escape(vision)}") add("
") add(f'
') add(f" {escape(pr.findtext('s:Heading', namespaces=S))}") add(f" {escape(pr.findtext('s:Intro', namespaces=S))}") add(' ') for p in pr.iterfind("s:Principle", S): add(f" {escape(p.findtext('s:Label', namespaces=S))}: {escape(p.findtext('s:Text', namespaces=S))}") add(" ") add("
") add(f'
') add(" Ministru kabineta iecerētās darbības prioritātes") mapping = [] for pi, p in enumerate(mis.iterfind("s:Pillar", S), 1): cid = f"{did}.s03-{pi:02d}" add(f'
') add(f" {escape(p.findtext('s:Name', namespaces=S))} — {escape(p.findtext('s:Heading', namespaces=S))}") add(f" {escape(p.findtext('s:Description', namespaces=S))}") for gi, g in enumerate(p.iterfind("s:Goal", S), 1): gn = int(g.get("number").rstrip(".")) sid = f"{cid}-{gi:02d}" add(f'
') add(f" {escape(g.findtext('s:Title', namespaces=S))}") add(f' {escape(g.findtext("s:Description", namespaces=S))}') for u, goal in FROM_SOURCE.items(): if goal == gn: task(u, src_tasks[u].findtext("v:Text", namespaces=V), f"{src_id}.{u}") mapping.append((n, u, f"{src_id}.{u}")) for a in g.iterfind("s:Action", S): an = int(a.get("number")) u = f"u{max_src + an:03d}" task(u, sentence(a.findtext("s:Title", namespaces=S)) + " " + a.findtext("s:Text", namespaces=S)) mapping.append((n, u, a.get("id"))) add("
") add("
") add("
") mis_id = mis.get("id") head = f""" Deklarācija par Ministru kabineta iecerēto darbību Projekts {day} Rīga lv Ministru kabineta iekārtas likums, 14. un 15. pants {src_id} {mis_id}.xml https://processgit.org/Country-as-Code/AI-Strategija/src/branch/main/data/{mis_id}.xml Projekts izveidots no PPPA Latvijas Nacionālās MI stratēģijas {mis_id} ({mis.get("version")}): pīlāri — nodaļas, mērķi — apakšnodaļas, rīcības r01–r{max(int(a.get("number")) for a in mis.iterfind(".//s:Action", S)):02d} — uzdevumi u{max_src + 1:03d}–u{max_src + len(list(mis.iterfind(".//s:Action", S))):03d} (uNNN = 052 + rīcības numurs). No {src_id} pārņemti atbilstošie uzdevumi {", ".join(sorted(FROM_SOURCE))} (Task/@derivedFrom). """ tail = """ Ministru prezidenta amata kandidātsNav noteikts Nav noteiktsNav noteikts """ out = Path(out_dir) / f"{did}.xml" out.write_text(head + "\n" + "\n".join(L) + "\n" + tail, encoding="utf-8") print("->", out, f"({n} uzdevumi)") for num, u, ref in mapping: print(f" {num:>2}. {u} ← {ref}") if __name__ == "__main__": main(*sys.argv[1:5])