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

@@ -1,5 +1,10 @@
# Izmaiņu žurnāls # Izmaiņu žurnāls
## 0.1.2 — 2026-10-11
- Terminoloģija: „naudas fakts” → „finanšu fakts” un līdzīgi formulējumi pārlūkā, dokumentācijā, shēmas un datu līguma aprakstos (datu struktūra nemainās).
- Pārlūks: precizēts skaidrojums par klasifikācijas kodu trūkumu pielikumu tabulās.
## 0.1.1 — 2026-10-11 ## 0.1.1 — 2026-10-11
- Pārlūks `editor/Budget-as-Code.html`: viena HTML datne ar abiem budžetiem (2025, 2026), XSD un pārbaudes rezultātiem; cilnes Problēma, Budžets, 2025 ↔ 2026, Atradumi, Saderība, Modelis. - Pārlūks `editor/Budget-as-Code.html`: viena HTML datne ar abiem budžetiem (2025, 2026), XSD un pārbaudes rezultātiem; cilnes Problēma, Budžets, 2025 ↔ 2026, Atradumi, Saderība, Modelis.

View File

@@ -8,19 +8,19 @@ Autors: PPP Asociācija (PPPA), Valsts Pirmkods (VPK). Shēmas versija 0.1, meln
## Kāpēc šāds modelis ## Kāpēc šāds modelis
Pieņemtais budžets šobrīd ir likuma teksts ar 12 pielikumiem (Excel un Word datnes), un katram pielikumam ir savs izkārtojums. Šis modelis neatkārto pielikumu formu. Tas apraksta budžetu kā lēmumu: 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. Pieņemtais budžets šobrīd ir likuma teksts ar 12 pielikumiem (Excel un Word datnes), un katram pielikumam ir savs izkārtojums. Šis modelis neatkārto pielikumu formu. Tas apraksta budžetu kā lēmumu: 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.
``` ```
Budget (likuma versija, piemēram lv-vb-2026) Budget (likuma versija, piemēram lv-vb-2026)
├── Source avota dokumenti ar SHA-256 (likuma teksts, 12 pielikumi) ├── Source avota dokumenti ar SHA-256 (likuma teksts, 12 pielikumi)
├── Provision likuma panti (teksts) ├── Provision likuma panti (teksts)
├── Parameter lielumi, kas nav naudas piešķīrumi (IKP prognoze, informatīvie rādītāji) ├── Parameter lielumi, kas nav finanšu piešķīrumi (IKP prognoze, informatīvie rādītāji)
├── Actor kurš tur vai saņem naudu: resors (ar VPK ID), pašvaldība, nesadalītie līdzekļi ├── Actor kurš tur vai saņem finansējumu: resors (ar VPK ID), pašvaldība, nesadalītie līdzekļi
├── Purpose kam nauda paredzēta: resors → programma → apakšprogramma → projekts; mērķdotācijas ├── Purpose kam finansējums paredzēts: resors → programma → apakšprogramma → projekts; mērķdotācijas
├── Indicator rezultatīvie rādītāji (budžeta paskaidrojumos; likumā nav — rezervēts) ├── Indicator rezultatīvie rādītāji (budžeta paskaidrojumos; likumā nav — rezervēts)
├── Rule mašīnlasāmi noteikumi no likuma teksta (rezervēts) ├── Rule mašīnlasāmi noteikumi no likuma teksta (rezervēts)
├── ClassItem izmantotie klasifikāciju kodi ar nosaukumiem un vecākkodu ├── ClassItem izmantotie klasifikāciju kodi ar nosaukumiem un vecākkodu
└── Allocation viens naudas fakts: plūsma × fonds × būtība × gads × turētājs × mērķis × bloks × kods × summa └── Allocation viens finanšu fakts: plūsma × fonds × būtība × gads × turētājs × mērķis × bloks × kods × summa
``` ```
Visi ieraksti ir plakani un saistīti ar identifikatoriem. Kopsummas, starpsummas un bilances datnē netiek glabātas — tās aprēķina. Sīkāk: [docs/MODELIS.md](docs/MODELIS.md). Visi ieraksti ir plakani un saistīti ar identifikatoriem. Kopsummas, starpsummas un bilances datnē netiek glabātas — tās aprēķina. Sīkāk: [docs/MODELIS.md](docs/MODELIS.md).
@@ -57,7 +57,7 @@ Abi gadi izmanto to pašu shēmu un tos pašus rīkus. Metode, rezultāti pa pie
| Datne | Saturs | | Datne | Saturs |
|---|---| |---|---|
| `data/lv-vb-2026.xml` | 2026. gada valsts budžeta likums (LV 2025/244): 81 pants, 12 pielikumu dati, 6 400 naudas faktu | | `data/lv-vb-2026.xml` | 2026. gada valsts budžeta likums (LV 2025/244): 81 pants, 12 pielikumu dati, 6 400 finanšu faktu |
| `data/lv-vb-2025.xml` | 2025. gada valsts budžeta likums (LV 2024/248): 82 panti, 12 pielikumu dati | | `data/lv-vb-2025.xml` | 2025. gada valsts budžeta likums (LV 2024/248): 82 panti, 12 pielikumu dati |
Datnes nosaukums ir budžeta identifikators. Datnes nosaukums ir budžeta identifikators.

View File

@@ -363,7 +363,7 @@ schema:
logicalType: string logicalType: string
required: true required: true
description: revenue — valsts ieņēmumi (nodokļi, nodevas), ko administrē resors; resource — resursi izdevumu segšanai konkrētam mērķim (dotācija, description: 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). pašu ieņēmumi, transferti, ārvalstu palīdzība); expenditure — izdevumi; financing — finansēšana (aizņēmumi, aizdevumi, līdzekļu atlikumu izmaiņas).
quality: quality:
- type: library - type: library
rule: validValues rule: validValues
@@ -749,7 +749,7 @@ schema:
logicalType: object logicalType: object
physicalType: xml-element physicalType: xml-element
physicalName: Allocation physicalName: Allocation
description: Viens naudas fakts. Kopsummas aprēķina, saskaitot ierakstus bez partOf. description: Viens finanšu fakts. Kopsummas aprēķina, saskaitot ierakstus bez partOf.
properties: properties:
- name: id - name: id
logicalType: string logicalType: string
@@ -764,7 +764,7 @@ schema:
logicalType: string logicalType: string
required: true required: true
description: revenue — valsts ieņēmumi (nodokļi, nodevas), ko administrē resors; resource — resursi izdevumu segšanai konkrētam mērķim (dotācija, description: 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). pašu ieņēmumi, transferti, ārvalstu palīdzība); expenditure — izdevumi; financing — finansēšana (aizņēmumi, aizdevumi, līdzekļu atlikumu izmaiņas).
quality: quality:
- type: library - type: library
rule: validValues rule: validValues
@@ -932,4 +932,4 @@ customProperties:
- property: rootElement - property: rootElement
value: Budget value: Budget
- property: identifiers - property: identifiers
value: lv-vb-GGGG; pants .pNNN; resors .ac.rSS; programma .pr.SS.PP.AA.00; projekts .pj.…; naudas fakts .a.pNN.r<rinda>.y<gads> value: lv-vb-GGGG; pants .pNNN; resors .ac.rSS; programma .pr.SS.PP.AA.00; projekts .pj.…; finanšu fakts .a.pNN.r<rinda>.y<gads>

View File

@@ -24,9 +24,9 @@ Datnes nosaukums = budžeta identifikators: `data/lv-vb-2026.xml`.
| Programma, apakšprogramma | `…pr.SS.PP.AA.00` | `lv-vb-2026.pr.17.23.06.00` | | Programma, apakšprogramma | `…pr.SS.PP.AA.00` | `lv-vb-2026.pr.17.23.06.00` |
| Projekts (11. pielikums) | `…pj.SS.PP.AA.00.<projekta kods>` | `lv-vb-2026.pj.12.67.02.00.ceki-em-002` | | Projekts (11. pielikums) | `…pj.SS.PP.AA.00.<projekta kods>` | `lv-vb-2026.pj.12.67.02.00.ceki-em-002` |
| Mērķdotācija | `…pr.gNN` (NN — pielikums) | `lv-vb-2026.pr.g06` | | Mērķdotācija | `…pr.gNN` (NN — pielikums) | `lv-vb-2026.pr.g06` |
| Naudas fakts | `…a.pNN.r<rinda>.y<gads>[l][-N]` | `lv-vb-2026.a.p04.r89.y2026` | | Finanšu fakts | `…a.pNN.r<rinda>.y<gads>[l][-N]` | `lv-vb-2026.a.p04.r89.y2026` |
Naudas fakta identifikators ir atvasināts no avota: pielikums, rinda avota datnē un gads. `l` nozīmē aili „tālākā laika posmā līdz projekta beigām”. `-N` tiek pievienots, ja viena avota šūna dod vairākus faktus (piemēram, mērķdotāciju ailes vienā rindā). Atkārtoti parsējot to pašu likumu, identifikatori nemainās. Finanšu fakta identifikators ir atvasināts no avota: pielikums, rinda avota datnē un gads. `l` nozīmē aili „tālākā laika posmā līdz projekta beigām”. `-N` tiek pievienots, ja viena avota šūna dod vairākus faktus (piemēram, mērķdotāciju ailes vienā rindā). Atkārtoti parsējot to pašu likumu, identifikatori nemainās.
## Klasifikāciju kodi ## Klasifikāciju kodi

View File

@@ -2,22 +2,22 @@
## 1. Jēdzieni ## 1. Jēdzieni
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.
| Ieraksts | Kas tas ir | Galvenie lauki | | Ieraksts | Kas tas ir | Galvenie lauki |
|---|---|---| |---|---|---|
| `Budget` | Viena budžeta likuma versija | `id`, `year`, `horizonTo`, `status` (draft / adopted / amended), `act`, `published`, `version` | | `Budget` | Viena budžeta likuma versija | `id`, `year`, `horizonTo`, `status` (draft / adopted / amended), `act`, `published`, `version` |
| `Source` | Avota dokuments | `kind` (lawText / annex / form), `annex`, `url`, `sha256` | | `Source` | Avota dokuments | `kind` (lawText / annex / form), `annex`, `url`, `sha256` |
| `Provision` | Likuma pants (teksts) | `article`, `chapter` | | `Provision` | Likuma pants (teksts) | `article`, `chapter` |
| `Parameter` | Lielums, kas nav naudas piešķīrums | `name`, `code`, `year`, `value`, `unit` | | `Parameter` | Lielums, kas nav finanšu piešķīrums | `name`, `code`, `year`, `value`, `unit` |
| `Actor` | Kurš tur vai saņem naudu | `kind` (resort / institution / municipality / unallocated), `code` (resora kods), `vpk` (VPK ID) | | `Actor` | Kurš tur vai saņem finansējumu | `kind` (resort / institution / municipality / unallocated), `code` (resora kods), `vpk` (VPK ID) |
| `Purpose` | Kam nauda paredzēta (koks) | `kind` (resort / programme / subprogramme / project / grant), `code`, `parent`, `holder`, `function` | | `Purpose` | Kam finansējums paredzēts (koks) | `kind` (resort / programme / subprogramme / project / grant), `code`, `parent`, `holder`, `function` |
| `Indicator` | Rezultatīvais rādītājs | `purpose`, `unit`, `year`, `base`, `target` (rezervēts paskaidrojumiem) | | `Indicator` | Rezultatīvais rādītājs | `purpose`, `unit`, `year`, `base`, `target` (rezervēts paskaidrojumiem) |
| `Rule` | Mašīnlasāms likuma noteikums | `kind` (limit / condition / permission), `parameter`, `value`, `provision` (rezervēts) | | `Rule` | Mašīnlasāms likuma noteikums | `kind` (limit / condition / permission), `parameter`, `value`, `provision` (rezervēts) |
| `ClassItem` | Izmantotais klasifikācijas kods | `scheme`, `code`, `name`, `parent`, `parentScheme`, `intraFund` | | `ClassItem` | Izmantotais klasifikācijas kods | `scheme`, `code`, `name`, `parent`, `parentScheme`, `intraFund` |
| `Allocation` | Viens naudas fakts | skatīt 2. nodaļu | | `Allocation` | Viens finanšu fakts | skatīt 2. nodaļu |
## 2. Naudas fakts (`Allocation`) ## 2. Finanšu fakts (`Allocation`)
| Lauks | Vērtības | Nozīme | | Lauks | Vērtības | Nozīme |
|---|---|---| |---|---|---|

View File

@@ -3,7 +3,7 @@
## Metode ## Metode
1. `tools/parse_budget.py` nolasa likuma tekstu un visus 12 pielikumus. Katru drukāto skaitli tas pieraksta kopā ar tā nozīmi: fonds, plūsma, gads, būtība, mērķis (resors / programma / projekts), bloks, saistību veids un klasifikācijas kodi, ko skaitlis aptver. 1. `tools/parse_budget.py` nolasa likuma tekstu un visus 12 pielikumus. Katru drukāto skaitli tas pieraksta kopā ar tā nozīmi: fonds, plūsma, gads, būtība, mērķis (resors / programma / projekts), bloks, saistību veids un klasifikācijas kodi, ko skaitlis aptver.
2. XML datnē tiek ierakstīti tikai naudas fakti (`Allocation`). Kopsummas, starpsummas un bilances netiek glabātas. 2. XML datnē tiek ierakstīti tikai finanšu fakti (`Allocation`). Kopsummas, starpsummas un bilances netiek glabātas.
3. `tools/verify_budget.py` pārbauda XML pret XSD un **katru drukāto skaitli aprēķina no jauna tikai no XML**. Abi rīki izmanto tos pašus summēšanas noteikumus (`tools/calc.py`). Skaitlis ir atjaunots, ja starpība ir mazāka par 0,5 euro (procentiem no IKP — 0,005). 3. `tools/verify_budget.py` pārbauda XML pret XSD un **katru drukāto skaitli aprēķina no jauna tikai no XML**. Abi rīki izmanto tos pašus summēšanas noteikumus (`tools/calc.py`). Skaitlis ir atjaunots, ja starpība ir mazāka par 0,5 euro (procentiem no IKP — 0,005).
## Rezultāts ## Rezultāts
@@ -27,7 +27,7 @@ Likuma teksts: 2026. gadā 81 pants, 2025. gadā 82 panti (`Provision`).
| Saturs XML | 2026 | 2025 | | Saturs XML | 2026 | 2025 |
|---|---:|---:| |---|---:|---:|
| Naudas fakti (`Allocation`) | 6 400 | 6 322 | | Finanšu fakti (`Allocation`) | 6 400 | 6 322 |
| — apropriācijas (budžeta gads) | 1 892 | 1 826 | | — apropriācijas (budžeta gads) | 1 892 | 1 826 |
| — maksimālie apjomi (nākamie divi gadi) | 838 | 796 | | — maksimālie apjomi (nākamie divi gadi) | 838 | 796 |
| — ieņēmumu prognozes | 392 | 388 | | — ieņēmumu prognozes | 392 | 388 |
@@ -44,7 +44,7 @@ Likuma teksts: 2026. gadā 81 pants, 2025. gadā 82 panti (`Provision`).
3. **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. 3. **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.
4. **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”. 4. **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”.
5. **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`. 5. **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`.
6. **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. 6. **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.
7. **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ā. 7. **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ā.
8. **Speciālā budžeta ieņēmumi nākamajiem gadiem** 2. pielikumā 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”. 8. **Speciālā budžeta ieņēmumi nākamajiem gadiem** 2. pielikumā 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”.
9. **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. 9. **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.

View File

@@ -15795,17 +15795,17 @@ Pārejas noteikums</Provision>
<xs:annotation> <xs:annotation>
<xs:documentation xml:lang="lv"> <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. Modelis nav likuma pielikumu izkārtojuma kopija. Pielikumi ir skati, kurus var atjaunot no šiem ierakstiem.
Ierakstu veidi: Ierakstu veidi:
Source — avota dokuments (likuma teksts, pielikuma datne) ar kontrolsummu Source — avota dokuments (likuma teksts, pielikuma datne) ar kontrolsummu
Provision — likuma panta daļa (teksts) Provision — likuma panta daļa (teksts)
Parameter — likumā vai pielikumā noteikts lielums, kas nav naudas piešķīrums (piemēram, IKP prognoze) Parameter — likumā vai pielikumā noteikts lielums, kas nav finanšu piešķīrums (piemēram, IKP prognoze)
Actor — kurš tur, dod vai saņem naudu (resors, iestāde, pašvaldība) Actor — kurš tur, dod vai saņem finansējumu (resors, iestāde, pašvaldība)
Purpose — kam nauda paredzēta (resors, programma, apakšprogramma, projekts) kā koks Purpose — kam finansējums paredzēts (resors, programma, apakšprogramma, projekts) kā koks
ClassItem — izmantotie klasifikāciju kodi ar nosaukumiem un vecākkodu 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) 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) 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. 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"> <xs:annotation><xs:documentation xml:lang="lv">
revenue — valsts ieņēmumi (nodokļi, nodevas), ko administrē resors; 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); 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:documentation></xs:annotation>
<xs:restriction base="xs:token"> <xs:restriction base="xs:token">
<xs:enumeration value="revenue"/> <xs:enumeration value="revenue"/>
@@ -16016,7 +16016,7 @@ Pārejas noteikums</Provision>
</xs:complexType> </xs:complexType>
<xs:complexType name="AllocationType"> <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="id" type="ItemId" use="required"/>
<xs:attribute name="flow" type="Flow" use="required"/> <xs:attribute name="flow" type="Flow" use="required"/>
<xs:attribute name="fund" type="Fund" use="required"/> <xs:attribute name="fund" type="Fund" use="required"/>
@@ -16225,7 +16225,7 @@ function vProblem(root){
<div class="stats"> <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>${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(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 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> </div>
<h2>Kur budžets atrodas</h2> <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> <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> <h2>Kāpēc pielikumi nav dati</h2>
<ol> <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>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>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> <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> <ul>
<li>Viena XSD shēma visiem gadiem un viena XML datne katrai likuma versijai.</li> <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>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>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> <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> </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("")) + 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("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("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>`; 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>`; } 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; 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, ceil("expenditure"), ys1, `Izdevumi nākamajos gados (3. pielikums)`)}
${breakdown(M, comm, cy, `Ilgtermiņa saistības: izdevumi (11. 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>` : ""} ${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); 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){ function showClass(M, k){
@@ -16544,7 +16544,7 @@ function showClass(M, k){
function showAlloc(M, id){ function showAlloc(M, id){
const a = M.byId[id]; if (!a) return; const a = M.byId[id]; if (!a) return;
const s = M.src[a.src]; 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 */ /* ============================================================ 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."], ["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”."], ["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."], ["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ā."], ["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”."], ["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."], ["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> <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> <h2>Galvenais</h2>
<ul> <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>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>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> <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> <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> <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("")} ${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> <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>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> <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> <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> <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> <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> <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> <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("")} ${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){ function vModel(root){
const M = cur(); 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 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 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"], ["Naudas fakts", "…a.pNN.r<rinda>.y<gads>[l][-N]", M.id + ".a.p04.r93." + "y" + M.year]]; 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"]]; 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"> root.innerHTML = `<div class="prose" style="max-width:1000px">
<h1>Modelis</h1> <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> <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> <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> <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">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> <tr><td class="mono">fund</td><td>${Object.entries(FUND).map(([k, v]) => `<span class="mono">${k}</span> — ${v}`).join("; ")}</td></tr>

View File

@@ -12,17 +12,17 @@
<xs:annotation> <xs:annotation>
<xs:documentation xml:lang="lv"> <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. Modelis nav likuma pielikumu izkārtojuma kopija. Pielikumi ir skati, kurus var atjaunot no šiem ierakstiem.
Ierakstu veidi: Ierakstu veidi:
Source — avota dokuments (likuma teksts, pielikuma datne) ar kontrolsummu Source — avota dokuments (likuma teksts, pielikuma datne) ar kontrolsummu
Provision — likuma panta daļa (teksts) Provision — likuma panta daļa (teksts)
Parameter — likumā vai pielikumā noteikts lielums, kas nav naudas piešķīrums (piemēram, IKP prognoze) Parameter — likumā vai pielikumā noteikts lielums, kas nav finanšu piešķīrums (piemēram, IKP prognoze)
Actor — kurš tur, dod vai saņem naudu (resors, iestāde, pašvaldība) Actor — kurš tur, dod vai saņem finansējumu (resors, iestāde, pašvaldība)
Purpose — kam nauda paredzēta (resors, programma, apakšprogramma, projekts) kā koks Purpose — kam finansējums paredzēts (resors, programma, apakšprogramma, projekts) kā koks
ClassItem — izmantotie klasifikāciju kodi ar nosaukumiem un vecākkodu 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) 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) 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. Kopsummas, starpsummas un bilance netiek glabātas: tās aprēķina no Allocation ierakstiem.
@@ -63,7 +63,7 @@
<xs:annotation><xs:documentation xml:lang="lv"> <xs:annotation><xs:documentation xml:lang="lv">
revenue — valsts ieņēmumi (nodokļi, nodevas), ko administrē resors; 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); 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:documentation></xs:annotation>
<xs:restriction base="xs:token"> <xs:restriction base="xs:token">
<xs:enumeration value="revenue"/> <xs:enumeration value="revenue"/>
@@ -233,7 +233,7 @@
</xs:complexType> </xs:complexType>
<xs:complexType name="AllocationType"> <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="id" type="ItemId" use="required"/>
<xs:attribute name="flow" type="Flow" use="required"/> <xs:attribute name="flow" type="Flow" use="required"/>
<xs:attribute name="fund" type="Fund" use="required"/> <xs:attribute name="fund" type="Fund" use="required"/>