1
0

Terminoloģija: „finanšu fakts” „naudas fakta” vietā (v0.1.2)

- Pārlūkā, README, docs, XSD un ODCS aprakstos „naudas fakts” → „finanšu fakts”, „kam nauda paredzēta” → „kam finansējums paredzēts” u. c.; datu struktūra un identifikatori nemainās
- Pārlūks: skaidrojums „Tabulās nav klasifikācijas kodu” ar piemēru; virsraksts „Kas datukopā vēl nav iekļauts”

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016679RwmHsuTFfxt26wP6rk
This commit is contained in:
2026-10-11 06:21:07 +00:00
parent 4698200a23
commit 5d89c73521
8 changed files with 54 additions and 49 deletions

View File

@@ -15795,17 +15795,17 @@ Pārejas noteikums</Provision>
<xs:annotation>
<xs:documentation xml:lang="lv">
Budžets ir lēmums par periodu: kurš drīkst saņemt vai izlietot cik naudas, kādam mērķim un pēc kādiem noteikumiem.
Budžets ir lēmums par periodu: kurš drīkst saņemt vai izlietot finanšu līdzekļus, kādā apmērā, kādam mērķim un pēc kādiem noteikumiem.
Modelis nav likuma pielikumu izkārtojuma kopija. Pielikumi ir skati, kurus var atjaunot no šiem ierakstiem.
Ierakstu veidi:
Source — avota dokuments (likuma teksts, pielikuma datne) ar kontrolsummu
Provision — likuma panta daļa (teksts)
Parameter — likumā vai pielikumā noteikts lielums, kas nav naudas piešķīrums (piemēram, IKP prognoze)
Actor — kurš tur, dod vai saņem naudu (resors, iestāde, pašvaldība)
Purpose — kam nauda paredzēta (resors, programma, apakšprogramma, projekts) kā koks
Parameter — likumā vai pielikumā noteikts lielums, kas nav finanšu piešķīrums (piemēram, IKP prognoze)
Actor — kurš tur, dod vai saņem finansējumu (resors, iestāde, pašvaldība)
Purpose — kam finansējums paredzēts (resors, programma, apakšprogramma, projekts) kā koks
ClassItem — izmantotie klasifikāciju kodi ar nosaukumiem un vecākkodu
Allocation — viens naudas fakts
Allocation — viens finanšu fakts
Indicator — mērķa sasniegšanas rādītājs (no budžeta paskaidrojumiem; likumā nav)
Rule — mašīnlasāms noteikums vai ierobežojums no likuma teksta (piemēram, pārdales robeža)
Kopsummas, starpsummas un bilance netiek glabātas: tās aprēķina no Allocation ierakstiem.
@@ -15846,7 +15846,7 @@ Pārejas noteikums</Provision>
<xs:annotation><xs:documentation xml:lang="lv">
revenue — valsts ieņēmumi (nodokļi, nodevas), ko administrē resors;
resource — resursi izdevumu segšanai konkrētam mērķim (dotācija, pašu ieņēmumi, transferti, ārvalstu palīdzība);
expenditure — izdevumi; financing — finansēšana (aizņēmumi, aizdevumi, naudas līdzekļu izmaiņas).
expenditure — izdevumi; financing — finansēšana (aizņēmumi, aizdevumi, līdzekļu atlikumu izmaiņas).
</xs:documentation></xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="revenue"/>
@@ -16016,7 +16016,7 @@ Pārejas noteikums</Provision>
</xs:complexType>
<xs:complexType name="AllocationType">
<xs:annotation><xs:documentation xml:lang="lv">Viens naudas fakts. Kopsummas aprēķina, saskaitot ierakstus bez partOf.</xs:documentation></xs:annotation>
<xs:annotation><xs:documentation xml:lang="lv">Viens finanšu fakts. Kopsummas aprēķina, saskaitot ierakstus bez partOf.</xs:documentation></xs:annotation>
<xs:attribute name="id" type="ItemId" use="required"/>
<xs:attribute name="flow" type="Flow" use="required"/>
<xs:attribute name="fund" type="Fund" use="required"/>
@@ -16225,7 +16225,7 @@ function vProblem(root){
<div class="stats">
<div class="stat"><b>${xlsx + docx + 1}</b><span>datnes vienā budžeta likumā (teksts un pielikumi)</span></div>
<div class="stat"><b>${NF.format(printed)}</b><span>skaitļi, kas drukāti 2026. gada pielikumos</span></div>
<div class="stat"><b>${NF.format(nA)}</b><span>atsevišķi naudas fakti, no kuriem visi šie skaitļi izriet</span></div>
<div class="stat"><b>${NF.format(nA)}</b><span>atsevišķi finanšu fakti, no kuriem visi šie skaitļi izriet</span></div>
<div class="stat"><b>${(printed / nA).toLocaleString("lv-LV", {maximumFractionDigits: 1})}×</b><span>vidēji tik reižu viens fakts parādās kā drukāts skaitlis</span></div>
</div>
<h2>Kur budžets atrodas</h2>
@@ -16239,7 +16239,7 @@ function vProblem(root){
<p>Šī lapa aptver 1. līmeni: to, ko pieņem Saeima. Tā ir juridiski saistošā budžeta daļa, un pārējie līmeņi to detalizē.</p>
<h2>Kāpēc pielikumi nav dati</h2>
<ol>
<li><b>Kodu nav.</b> Pielikumi ir izdrukas no Finanšu ministrijas SAP BW sistēmas (BEx Analyzer). Tabulās ir nosaukumi ar atkāpēm, bet nav ekonomiskās, ieņēmumu un finansēšanas klasifikācijas kodu. Kodi ir daļēji slēptās darblapās, pārējie jāatrod pēc nosaukuma klasifikāciju MK noteikumos.</li>
<li><b>Tabulās nav klasifikācijas kodu.</b> Pielikumi ir izdrukas no Finanšu ministrijas SAP BW sistēmas (BEx Analyzer). Katrā rindā ir tikai nosaukums ar atkāpi, piemēram, „Atlīdzība”, bet nav ekonomiskās klasifikācijas koda 1000. Tāpat trūkst ieņēmumu un finansēšanas klasifikācijas kodu. Lai programma varētu noteikt, kas rindā ir, kods jāatrod pēc nosaukuma klasifikāciju MK noteikumos vai pielikuma slēptajās darblapās.</li>
<li><b>Katram pielikumam ir savs izkārtojums.</b> Rindas, ailes, galvenes un starpsummas atšķiras. 11. pielikumā nav arī atkāpju, tāpēc līmeņi jāatjauno pēc citiem pielikumiem.</li>
<li><b>Viens skaitlis ir drukāts daudzās vietās.</b> Apakšprogrammas summa atkārtojas programmā, resorā, 3. pielikuma kopsavilkumā un 1. pielikumā. Ja kāda vieta nesakrīt, tas nav redzams bez pārrēķina.</li>
<li><b>Saites starp pielikumiem nav pierakstītas.</b> Programma 4. pielikumā, tās projekti 11. pielikumā un resora kopsumma 3. pielikumā ir saistīti tikai ar nosaukumiem un kodiem tekstā.</li>
@@ -16263,7 +16263,7 @@ function vProblem(root){
<ul>
<li>Viena XSD shēma visiem gadiem un viena XML datne katrai likuma versijai.</li>
<li>Modelis apraksta budžetu kā lēmumu: <b>kurš</b> (resors ar VPK ID), <b>cik</b> (summa), <b>kam</b> (programma, apakšprogramma, projekts), <b>kad</b> (gads), no kāda <b>fonda</b> un pēc kādas <b>klasifikācijas</b>.</li>
<li>Katrs naudas fakts ir glabāts vienreiz, no detalizētākā avota. Kopsummas, starpsummas un bilances tiek aprēķinātas.</li>
<li>Katrs finanšu fakts ir glabāts vienreiz, no detalizētākā avota. Kopsummas, starpsummas un bilances tiek aprēķinātas.</li>
<li>Katram faktam ir pastāvīgs identifikators un atsauce uz avota datni un rindu.</li>
<li>Pārbaude: no XML atjaunoti visi pielikumos drukātie skaitļi abos gados (sk. <a href="#/saderiba" data-go="saderiba">Saderība</a>).</li>
</ul>
@@ -16475,7 +16475,7 @@ function bSearch(root, M){
html = sec("Programmas, apakšprogrammas, projekti", pur.length, pur.map(p => `<div class="res" data-pur="${p.id}"><b>${esc(KIND[p.kind] || p.kind)} ${esc(p.code)}</b> ${esc(p.name || "")}<small class="mono">${esc(p.id)}</small></div>`).join("")) +
sec("Dalībnieki", act.length, act.map(a => `<div class="res" ${a.kind === "resort" ? `data-pur="${M.id}.pr.${a.code}"` : ""}><b>${esc(a.name)}</b><small class="mono">${esc(a.id)}${a.vpk ? " · VPK " + esc(a.vpk) : ""}</small></div>`).join("")) +
sec("Klasifikācijas kodi", cls.length, cls.map(([k, c]) => `<div class="res" data-cls="${esc(k)}"><b class="mono">${esc(c.scheme)} ${esc(c.code)}</b> ${esc(c.name)}</div>`).join("")) +
sec("Naudas fakti", al.length, al.map(a => `<div class="res" data-alloc="${esc(a.id)}"><b>${fmt(a.amt)} €</b> ${esc(FLOW[a.flow])}, ${esc(NATURE[a.nature])}, ${a.year}<small class="mono">${esc(a.id)}</small></div>`).join("")) +
sec("Finanšu fakti", al.length, al.map(a => `<div class="res" data-alloc="${esc(a.id)}"><b>${fmt(a.amt)} €</b> ${esc(FLOW[a.flow])}, ${esc(NATURE[a.nature])}, ${a.year}<small class="mono">${esc(a.id)}</small></div>`).join("")) +
sec("Likuma panti", pr.length, pr.map(p => `<div class="res" data-prov="${esc(p.id)}"><b>${esc(p.article)}. pants</b> ${esc(p.text.replace(/^\s*\d+\.\s*pants\.\s*/, "").slice(0, 160))}…</div>`).join("")) || `<div class="empty">Nekas nav atrasts</div>`;
} else html = `<div class="empty">Ierakstiet vismaz 2 rakstzīmes: nosaukumu, kodu (piem. 41.01.00, 7131, F40020000), identifikatoru vai summu.</div>`;
root.innerHTML = head("Meklēt", `Meklē nosaukumos, kodos, identifikatoros, summās un likuma tekstā.`, `<input class="q" id="sq" placeholder="Piem.: Valsts kase, 7131, lv-vb-${M.year}.pr.10" value="${esc(q)}">`) + html;
@@ -16528,7 +16528,7 @@ function showPurpose(M, pid){
${breakdown(M, ceil("expenditure"), ys1, `Izdevumi nākamajos gados (3. pielikums)`)}
${breakdown(M, comm, cy, `Ilgtermiņa saistības: izdevumi (11. pielikums)`)}
${kids.length ? `<h4>Ietver (${kids.length})</h4><table><tbody>${kids.map(k => `<tr><td class="mono">${esc(k.code)}</td><td><a href="#" data-pur="${k.id}">${esc(k.name || (KIND[k.kind] + " " + k.code))}</a></td><td class="n">${fmt0(G(M, k.id, "expenditure", k.kind === "project" ? "commitment" : "appropriation", M.year))}</td></tr>`).join("")}</tbody></table>` : ""}
${direct.length ? `<h4>Naudas fakti, kas piesaistīti tieši šim mērķim (${direct.length})</h4><table><thead><tr><th>Avots</th><th>Plūsma / būtība</th><th>Kods</th><th>Gads</th><th class="n">Summa</th></tr></thead><tbody>${direct.slice(0, 400).map(a => `<tr title="${esc(a.id)}"><td>${M.src[a.src] ? `<a href="${esc(M.src[a.src].url)}" target="_blank" rel="noopener">${esc(srcLabel(M, a))}</a>` : ""}</td><td>${esc(FLOW[a.flow])}<br><span class="muted">${esc(NATURE[a.nature])}${a.fund === "special" ? ", spec." : ""}${a.partOf ? ", t. sk." : ""}</span></td><td class="mono">${esc(a.code)}${a.commitmentKind ? `<br><span class="muted">${esc(a.commitmentKind)}</span>` : ""}</td><td>${a.untilEnd === "true" ? "līdz beigām" : a.year}</td><td class="n"><span class="idc" data-copy="${esc(a.id)}">${fmt(a.amt)}</span></td></tr>`).join("")}</tbody></table><p class="muted" style="font-size:12px">Klikšķis uz summas nokopē fakta identifikatoru.</p>` : ""}`;
${direct.length ? `<h4>Finanšu fakti, kas piesaistīti tieši šim mērķim (${direct.length})</h4><table><thead><tr><th>Avots</th><th>Plūsma / būtība</th><th>Kods</th><th>Gads</th><th class="n">Summa</th></tr></thead><tbody>${direct.slice(0, 400).map(a => `<tr title="${esc(a.id)}"><td>${M.src[a.src] ? `<a href="${esc(M.src[a.src].url)}" target="_blank" rel="noopener">${esc(srcLabel(M, a))}</a>` : ""}</td><td>${esc(FLOW[a.flow])}<br><span class="muted">${esc(NATURE[a.nature])}${a.fund === "special" ? ", spec." : ""}${a.partOf ? ", t. sk." : ""}</span></td><td class="mono">${esc(a.code)}${a.commitmentKind ? `<br><span class="muted">${esc(a.commitmentKind)}</span>` : ""}</td><td>${a.untilEnd === "true" ? "līdz beigām" : a.year}</td><td class="n"><span class="idc" data-copy="${esc(a.id)}">${fmt(a.amt)}</span></td></tr>`).join("")}</tbody></table><p class="muted" style="font-size:12px">Klikšķis uz summas nokopē fakta identifikatoru.</p>` : ""}`;
openDrawer(`<div class="muted" style="font-size:12px">${esc(KIND[p.kind] || "")} · ${esc(M.year)}. gada likums</div><h3>${esc(p.code)} ${esc(p.name || "")}</h3>`, body);
}
function showClass(M, k){
@@ -16544,7 +16544,7 @@ function showClass(M, k){
function showAlloc(M, id){
const a = M.byId[id]; if (!a) return;
const s = M.src[a.src];
openDrawer(`<div class="muted" style="font-size:12px">Naudas fakts</div><h3>${fmt(a.amt)} €</h3>`, `<dl class="kv">${Object.entries(a).filter(([k]) => !["amt", "k", "intra", "yk", "ch", "res"].includes(k)).map(([k, v]) => `<dt class="mono">${esc(k)}</dt><dd class="mono">${k === "purpose" && M.pur[v] ? `<a href="#" data-pur="${esc(v)}">${esc(v)}</a>` : esc(v)}</dd>`).join("")}</dl>${s ? `<h4>Avots</h4><p><a href="${esc(s.url)}" target="_blank" rel="noopener">${esc(s.title)}</a>, ${a.srcRow ? esc(a.srcRow) + ". rinda" : ""}<br><span class="mono muted" style="font-size:11px">SHA-256 ${esc(s.sha256)}</span></p>` : ""}`);
openDrawer(`<div class="muted" style="font-size:12px">Finanšu fakts</div><h3>${fmt(a.amt)} €</h3>`, `<dl class="kv">${Object.entries(a).filter(([k]) => !["amt", "k", "intra", "yk", "ch", "res"].includes(k)).map(([k, v]) => `<dt class="mono">${esc(k)}</dt><dd class="mono">${k === "purpose" && M.pur[v] ? `<a href="#" data-pur="${esc(v)}">${esc(v)}</a>` : esc(v)}</dd>`).join("")}</dl>${s ? `<h4>Avots</h4><p><a href="${esc(s.url)}" target="_blank" rel="noopener">${esc(s.title)}</a>, ${a.srcRow ? esc(a.srcRow) + ". rinda" : ""}<br><span class="mono muted" style="font-size:11px">SHA-256 ${esc(s.sha256)}</span></p>` : ""}`);
}
/* ============================================================ 2025 ↔ 2026 */
@@ -16585,7 +16585,7 @@ function vFindings(root){
["11. pielikumā atkāpju nav", "Līmeņi ir nolasīti no tiem pašiem nosaukumiem 4. pielikumā. Saistību veidu kodi grupējas pa diviem cipariem (01 01 10 00 00). Viens projekts var parādīties vairākos saistību veidos (vispārīgajā un precīzākajā); glabāts tiek precīzākais."],
["Galvenes forma atšķiras", "11. pielikuma speciālā budžeta daļā resors ir „18 Labklājības ministrija” (bez punkta), citur „18. Labklājības ministrija”."],
["Izkārtojums atšķiras starp gadiem", "2025. gada pielikumi ir .xls, 2026. gada — .xlsx. 2025. gada 1. un 2. pielikumā ir papildu tukša pirmā aile. 2025. gada 7. pielikuma datne ir 7_PIELIKUMS_G.DOCX."],
["Summas, kas likumā redzamas tikai apkopojuma līmenī", "Valsts aizņēmumi, aizdevumi un naudas līdzekļu izmaiņas 4. pielikumā ir tikai budžeta kopsavilkumā vai resora līmenī bez programmas. Tās glabātas tajā pašā līmenī: 2026. gadā 4 no 4. pielikuma un 6 no 3. pielikuma."],
["Summas, kas likumā redzamas tikai apkopojuma līmenī", "Valsts aizņēmumi, aizdevumi un līdzekļu atlikumu izmaiņas 4. pielikumā ir tikai budžeta kopsavilkumā vai resora līmenī bez programmas. Tās glabātas tajā pašā līmenī: 2026. gadā 4 no 4. pielikuma un 6 no 3. pielikuma."],
["3. un 4. pielikums dažas summas rāda atšķirīgi", "3. pielikums sadala pa blokiem (I pamatfunkcijas / II ES projekti) arī tās finansēšanas summas, kurām 4. pielikumā bloka nav — piemēram, Finanšu ministrijas aizdevumus (−334 457 337 euro). Tās ierakstītas ar bloku, ko norāda 3. pielikums, nemainot kopsummas: 4 pārklasifikācijas pa pāriem gan 2026., gan 2025. gadā."],
["Speciālā budžeta ieņēmumi nākamajiem gadiem", "2. pielikumā tie ir tikai valsts līmenī. Tie piesaistīti Labklājības ministrijai (18), jo tā ir vienīgais speciālā budžeta turētājs, un blokam „pamatfunkcijas”."],
["Budžeta bloks", "Programmu bloks (pamatfunkcijas / ES projekti) ņemts no Valsts kases izpildes datiem. 41 programmai, kurai izpildes datu nav, bloks noteikts pēc programmas koda (60.–85. programma — ES un ārvalstu finanšu palīdzība). Visas 3. pielikuma bloku summas atjaunojas."],
@@ -16603,7 +16603,7 @@ function vFindings(root){
<p class="lead">Pārveidojot abus likumus un pārrēķinot katru drukāto skaitli, atklājās vairākas avotu īpatnības. Neviena no tām nemaina likuma summas. Tās parāda, kāpēc pielikumi nav uzticams datu avots bez pārbaudes.</p>
<h2>Galvenais</h2>
<ul>
<li>Viss pieņemtā budžeta saturs ietilpst vienā plakanā XML datnē ar deviņiem ierakstu veidiem. 2026. gadā tie ir ${NF.format(M.A.length)} naudas fakti, ${M.prov.length} panti, ${Object.keys(M.pur).length} mērķi un ${Object.keys(M.cls).length} klasifikācijas kodi.</li>
<li>Viss pieņemtā budžeta saturs ietilpst vienā plakanā XML datnē ar deviņiem ierakstu veidiem. 2026. gadā tie ir ${NF.format(M.A.length)} finanšu fakti, ${M.prov.length} panti, ${Object.keys(M.pur).length} mērķi un ${Object.keys(M.cls).length} klasifikācijas kodi.</li>
<li>No šiem faktiem atjaunoti visi pielikumos drukātie skaitļi: ${NF.format(V26.reproduced || 0)} no ${NF.format(V26.total || 0)} (2026) un ${NF.format(V25.reproduced || 0)} no ${NF.format(V25.total || 0)} (2025).</li>
<li>Pielikumos viens fakts vidēji parādās ${(V26.total / M.A.length).toLocaleString("lv-LV", {maximumFractionDigits: 1})} reizes: apakšprogrammā, programmā, resorā, kopsavilkumos.</li>
<li>Abi gadi izmanto to pašu shēmu un tos pašus rīkus. Atšķirības starp gadiem ir tikai datņu formātā, nevis budžeta struktūrā.</li>
@@ -16614,7 +16614,7 @@ function vFindings(root){
<div class="find"><b>Konsolidētais budžets (1. pielikums)</b><p>Ieņēmumi ${fmt(s.KA)}, izdevumi ${fmt(s.KB)}, finansiālā bilance ${fmt(s.bal)} euro. Aprēķināti no ieņēmumiem un izdevumiem abos fondos, atņemot transfertus starp fondiem (EKK 7110, 7120, 9110, 9120): ${fmt(s.T)} euro.</p></div>
<h2>Avotu īpatnības</h2>
${F.map((f, i) => `<div class="find"><b>${i + 1}. ${esc(f[0])}</b><p>${esc(f[1])}</p></div>`).join("")}
<h2>Ko datukopā vēl nav</h2>
<h2>Kas datukopā vēl nav iekļauts</h2>
<ul>
<li>Rezultatīvie rādītāji (<span class="mono">Indicator</span>) ir budžeta paskaidrojumos, nevis likumā. Shēmā ieraksts ir rezervēts.</li>
<li>Likuma noteikumi mašīnlasāmā formā (<span class="mono">Rule</span>), piemēram, pārdales robežas. Shēmā ieraksts ir rezervēts.</li>
@@ -16634,7 +16634,7 @@ function vCompat(root){
<h1>Atpakaļsaderība ar likumu</h1>
<p class="lead">Katrs pielikumos drukātais skaitlis ir aprēķināts tikai no XML datnes un salīdzināts ar publicēto vērtību. Skaitlis ir atjaunots, ja starpība ir mazāka par 0,5 euro (procentiem no IKP — 0,005).</p>
<ol><li><span class="mono">tools/parse_budget.py</span> nolasa likuma tekstu un visus 12 pielikumus. Katram drukātajam skaitlim tas pieraksta nozīmi: fonds, plūsma, gads, būtība, mērķis, bloks, saistību veids un kodi, ko skaitlis aptver.</li>
<li>XML datnē ieraksta tikai naudas faktus. Kopsummas, starpsummas un bilances netiek glabātas.</li>
<li>XML datnē ieraksta tikai finanšu faktus. Kopsummas, starpsummas un bilances netiek glabātas.</li>
<li><span class="mono">tools/verify_budget.py</span> pārbauda XML pret XSD un katru drukāto skaitli aprēķina no jauna. Abi rīki izmanto tos pašus summēšanas noteikumus (<span class="mono">tools/calc.py</span>).</li></ol>
<div class="tbl"><table><thead><tr><th>Pielikums</th>${ids.map(id => `<th class="n">${id.slice(-4)}: drukāti</th><th class="n">${id.slice(-4)}: atjaunoti</th>`).join("")}</tr></thead><tbody>
${keys.map(k => `<tr><td>${k}. ${esc(AN[k])}</td>${ids.map(id => cell(id, k)).join("")}</tr>`).join("")}
@@ -16652,15 +16652,15 @@ function vCompat(root){
function vModel(root){
const M = cur();
const cnt = {Source: Object.keys(M.src).length, Provision: M.prov.length, Parameter: M.par.length, Actor: Object.keys(M.actors).length, Purpose: Object.keys(M.pur).length, Indicator: M.ind.length, Rule: M.rules.length, ClassItem: Object.keys(M.cls).length, Allocation: M.A.length};
const REC = [["Budget", "Viena budžeta likuma versija", "id, year, horizonTo, status, act, published, version"], ["Source", "Avota dokuments", "kind (lawText / annex / form), annex, url, sha256"], ["Provision", "Likuma pants (teksts)", "article, chapter"], ["Parameter", "Lielums, kas nav naudas piešķīrums", "name, code, year, value, unit"], ["Actor", "Kurš tur vai saņem naudu", "kind (resort / institution / municipality / unallocated), code, vpk"], ["Purpose", "Kam nauda paredzēta (koks)", "kind (resort / programme / subprogramme / project / grant), code, parent, holder, function"], ["Indicator", "Rezultatīvais rādītājs (rezervēts)", "purpose, unit, year, base, target"], ["Rule", "Mašīnlasāms likuma noteikums (rezervēts)", "kind (limit / condition / permission), parameter, value, provision"], ["ClassItem", "Izmantotais klasifikācijas kods", "scheme, code, name, parent, parentScheme, intraFund"], ["Allocation", "Viens naudas fakts", "flow, fund, nature, year, untilEnd, periodFrom/To, holder, recipient, purpose, block, commitmentKind, function, scheme, code, amount, partOf, src, srcRow"]];
const IDS = [["Budžeta likums", "lv-vb-GGGG", M.id], ["Avots", "…src.pNN", M.id + ".src.p04"], ["Pants", "…pNNN", M.id + ".p017"], ["Parametrs", "…par.<nosaukums>-GGGG", M.id + ".par.ikp-" + (M.year + 1)], ["Resors", "…ac.rSS (VPK ID atribūtā vpk)", M.id + ".ac.r13"], ["Pašvaldība", "…ac.m-<nosaukums>", M.id + ".ac.m-rigas-valstspilseta"], ["Programma, apakšprogramma", "…pr.SS.PP.AA.00", M.id + ".pr.17.23.06.00"], ["Projekts", "…pj.SS.PP.AA.00.<kods>", M.id + ".pj.12.67.02.00.ceki-em-002"], ["Mērķdotācija", "…pr.gNN", M.id + ".pr.g06"], ["Naudas fakts", "…a.pNN.r<rinda>.y<gads>[l][-N]", M.id + ".a.p04.r93." + "y" + M.year]];
const REC = [["Budget", "Viena budžeta likuma versija", "id, year, horizonTo, status, act, published, version"], ["Source", "Avota dokuments", "kind (lawText / annex / form), annex, url, sha256"], ["Provision", "Likuma pants (teksts)", "article, chapter"], ["Parameter", "Lielums, kas nav finanšu piešķīrums", "name, code, year, value, unit"], ["Actor", "Kurš tur vai saņem finansējumu", "kind (resort / institution / municipality / unallocated), code, vpk"], ["Purpose", "Kam finansējums paredzēts (koks)", "kind (resort / programme / subprogramme / project / grant), code, parent, holder, function"], ["Indicator", "Rezultatīvais rādītājs (rezervēts)", "purpose, unit, year, base, target"], ["Rule", "Mašīnlasāms likuma noteikums (rezervēts)", "kind (limit / condition / permission), parameter, value, provision"], ["ClassItem", "Izmantotais klasifikācijas kods", "scheme, code, name, parent, parentScheme, intraFund"], ["Allocation", "Viens finanšu fakts", "flow, fund, nature, year, untilEnd, periodFrom/To, holder, recipient, purpose, block, commitmentKind, function, scheme, code, amount, partOf, src, srcRow"]];
const IDS = [["Budžeta likums", "lv-vb-GGGG", M.id], ["Avots", "…src.pNN", M.id + ".src.p04"], ["Pants", "…pNNN", M.id + ".p017"], ["Parametrs", "…par.<nosaukums>-GGGG", M.id + ".par.ikp-" + (M.year + 1)], ["Resors", "…ac.rSS (VPK ID atribūtā vpk)", M.id + ".ac.r13"], ["Pašvaldība", "…ac.m-<nosaukums>", M.id + ".ac.m-rigas-valstspilseta"], ["Programma, apakšprogramma", "…pr.SS.PP.AA.00", M.id + ".pr.17.23.06.00"], ["Projekts", "…pj.SS.PP.AA.00.<kods>", M.id + ".pj.12.67.02.00.ceki-em-002"], ["Mērķdotācija", "…pr.gNN", M.id + ".pr.g06"], ["Finanšu fakts", "…a.pNN.r<rinda>.y<gads>[l][-N]", M.id + ".a.p04.r93." + "y" + M.year]];
const STORE = [["Izdevumi, resursi, finansēšana budžeta gadā", "4. un 5. pielikums — apakšprogrammu līmenī"], ["Nākamo divu gadu maksimālie apjomi", "3. pielikums — resora un bloka līmenī (nature=\"ceiling\")"], ["Ieņēmumi", "2. pielikums (nature=\"forecast\"); speciālā budžeta budžeta gada ieņēmumi — 5. pielikums"], ["Nodevas pa administrējošām ministrijām", "2. pielikums, partOf uz ieņēmumu kodu"], ["Ilgtermiņa saistības", "11. pielikums — projekta vai programmas un saistību veida līmenī"], ["Mērķdotācijas pašvaldībām", "6.–10. pielikums — pa pašvaldībām un periodiem"], ["IKP prognoze", "1. pielikums (Parameter)"], ["Viss pārējais: kopsummas, bilances, 1. pielikums, 3. pielikuma budžeta gads", "aprēķina"]];
root.innerHTML = `<div class="prose" style="max-width:1000px">
<h1>Modelis</h1>
<p class="lead">Budžets ir lēmums par periodu: kurš drīkst saņemt vai izlietot cik naudas, kādam mērķim un pēc kādiem noteikumiem. Pielikumi ir šo datu skati.</p>
<p class="lead">Budžets ir lēmums par periodu: kurš drīkst saņemt vai izlietot finanšu līdzekļus, kādā apmērā, kādam mērķim un pēc kādiem noteikumiem. Pielikumi ir šo datu skati.</p>
<p>Shēma <span class="mono">urn:pppa:vpk:budzets:0.1</span>. Viens saknes elements, deviņi plakani ierakstu veidi, saistīti ar identifikatoriem. Rādīts: <b>${esc(M.id)}</b> (${esc(M.published)}, versija ${esc(M.version)}).</p>
<div class="tbl"><table><thead><tr><th>Ieraksts</th><th>Kas tas ir</th><th>Galvenie lauki</th><th class="n">${esc(M.year)}</th></tr></thead><tbody>${REC.map(r => `<tr><td class="mono">${r[0]}</td><td>${r[1]}</td><td class="mono" style="font-size:11.5px">${esc(r[2])}</td><td class="n">${r[0] === "Budget" ? 1 : NF.format(cnt[r[0]] || 0)}</td></tr>`).join("")}</tbody></table></div>
<h2>Naudas fakta vērtības</h2>
<h2>Finanšu fakta vērtības</h2>
<div class="tbl"><table><tbody>
<tr><td class="mono">flow</td><td>${Object.entries(FLOW).map(([k, v]) => `<span class="mono">${k}</span> — ${v}`).join("; ")}</td></tr>
<tr><td class="mono">fund</td><td>${Object.entries(FUND).map(([k, v]) => `<span class="mono">${k}</span> — ${v}`).join("; ")}</td></tr>