From 88577135b5c43d9e6612bc97e61042027b62fbb0 Mon Sep 17 00:00:00 2001 From: Rihards Gailums Date: Sun, 11 Oct 2026 10:49:19 +0000 Subject: [PATCH] =?UTF-8?q?B03=20Valsts=20bud=C5=BEeta=20izpilde:=20m?= =?UTF-8?q?=C4=93r=C4=B7a=20sh=C4=93ma,=20avota=20un=20m=C4=93r=C4=B7a=20d?= =?UTF-8?q?atu=20l=C4=ABgumi,=20p=C4=81rveido=C5=A1anas=20noteikumi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - schemas/valsts-budzeta-izpilde-0.1.xsd - contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml (Valsts kases CSV) - contracts/B03-valsts-budzeta-izpilde.odcs.yaml (ģenerēts no XSD) - mappings/B03-izpilde.yaml, docs/IZPILDE.md; CHANGELOG 0.2.0 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016679RwmHsuTFfxt26wP6rk --- CHANGELOG.md | 5 + README.md | 13 + .../B03-valsts-budzeta-izpilde.odcs.yaml | 524 ++++++++++++++++++ ...03-valsts-budzeta-izpilde.source.odcs.yaml | 106 ++++ docs/IZPILDE.md | 65 +++ mappings/B03-izpilde.yaml | 77 +++ schemas/valsts-budzeta-izpilde-0.1.xsd | 202 +++++++ tools/odcs-config.yaml | 27 +- 8 files changed, 1017 insertions(+), 2 deletions(-) create mode 100644 contracts/B03-valsts-budzeta-izpilde.odcs.yaml create mode 100644 contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml create mode 100644 docs/IZPILDE.md create mode 100644 mappings/B03-izpilde.yaml create mode 100644 schemas/valsts-budzeta-izpilde-0.1.xsd diff --git a/CHANGELOG.md b/CHANGELOG.md index 34b0e93..c13d4c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Izmaiņu žurnāls +## 0.2.0 — 2026-10-11 + +- Budžeta izpilde (B03): mērķa shēma `schemas/valsts-budzeta-izpilde-0.1.xsd`, avota līgums `contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml` (Valsts kases CSV), mērķa līgums `contracts/B03-valsts-budzeta-izpilde.odcs.yaml` (ģenerēts no XSD), pārveidošanas noteikumi `mappings/B03-izpilde.yaml`, paraugs `examples/lv-vbi-2026.sample.xml`, apraksts `docs/IZPILDE.md`. +- Budžeta likuma shēma un dati nemainās. + ## 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). diff --git a/README.md b/README.md index 4bcf867..59736e7 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,18 @@ Datnes nosaukums ir budžeta identifikators. | `schemas/valsts-budzets-0.1.xsd` | Shēma: viens saknes elements, deviņi ierakstu veidi, vārdnīcas (plūsma, fonds, būtība, bloks, klasifikācija) | | `contracts/B15-valsts-budzets.odcs.yaml` | ODCS v3 datu līgums, ģenerēts no XSD (tāpat kā B01–B14) | +### Budžeta izpilde (B03) + +Likums ir plāns, izpilde ir fakts. Izpildes datus publicē Valsts kase; šeit glabājas to definīcijas, un VDE tos ielādē katru reizi, kad Valsts kase publicē jaunu datni. Sīkāk: `docs/IZPILDE.md`. + +| Datne | Saturs | +|---|---| +| `schemas/valsts-budzeta-izpilde-0.1.xsd` | Mērķa shēma: izpildes fakti pa mēnešiem uz budžeta likuma identifikatoriem (resors, programma, apakšprogramma, EKK) | +| `contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml` | Avota līgums: Valsts kases CSV datne data.gov.lv (kolonnas, secība, kodi) | +| `contracts/B03-valsts-budzeta-izpilde.odcs.yaml` | Mērķa līgums, ģenerēts no XSD | +| `mappings/B03-izpilde.yaml` | Pārveidošanas noteikumi: avota kolonna → shēmas atribūts | +| `examples/lv-vbi-2026.sample.xml` | Paraugs: daži pārveidoti izpildes fakti, pārbaudīti pret XSD | + ### Pārlūks | Datne | Saturs | @@ -83,6 +95,7 @@ Datnes nosaukums ir budžeta identifikators. | `docs/MODELIS.md` | Modeļa jēdzieni, konsolidācijas noteikums, pielikumu atbilstība modelim | | `docs/IDENTIFIKATORI.md` | Identifikatoru veidošanas noteikumi | | `docs/SADERIBA.md` | Atpakaļsaderības pārbaude: metode, rezultāti, atrastās avotu īpatnības | +| `docs/IZPILDE.md` | Budžeta izpilde: avots, plūsma uz VDE, sasaiste ar likumu, ierobežojumi | | `verification/lv-vb-GGGG.verify.json` | Pārbaudes rezultāts pa pielikumiem | ### Avoti (`source/`) diff --git a/contracts/B03-valsts-budzeta-izpilde.odcs.yaml b/contracts/B03-valsts-budzeta-izpilde.odcs.yaml new file mode 100644 index 0000000..6df51c8 --- /dev/null +++ b/contracts/B03-valsts-budzeta-izpilde.odcs.yaml @@ -0,0 +1,524 @@ +# ODCS v3 datu līgums: B03 Valsts budžeta izpilde (izpildes fakti uz budžeta likuma identifikatoriem) +# Ģenerēts no schemas/valsts-budzeta-izpilde-0.1.xsd (tools/xsd_to_odcs.py, lakehouse). Shēmas daļu nelabot ar roku — labot XSD un ģenerēt no jauna. +# Serveri un SLA pielāgoti: datu kopa tiek veidota VDE no Valsts kases CSV, nevis glabāta ProcessGit. +apiVersion: v3.0.2 +kind: DataContract +id: urn:pppa:cac:contract:B03 +name: Valsts budžeta izpilde (izpildes fakti uz budžeta likuma identifikatoriem) +version: 0.1.0 +status: active +domain: Valsts kā kods (Country as Code) +dataProduct: Valsts budžeta izpilde +tenant: PPP Asociācija (PPPA) +description: + purpose: Valsts pamatbudžeta un speciālā budžeta izpilde pa mēnešiem, iestādēm, programmām, apakšprogrammām un klasifikācijas kodiem, pārveidota + uz tiem pašiem identifikatoriem, kas budžeta likumā (B15), lai plānu un izpildi var salīdzināt bez manuālas sasaistes. + usage: Plāna (B15) un izpildes salīdzināšana VDE; AI aģentu vaicājumi caur MCP. + limitations: Koncepcijas demonstrācija, nav oficiāls izdevums. Plāns ir pieņemtais likums; gada laikā veiktās apropriāciju izmaiņas vēl nav + iekļautas. Valsts pamatbudžeta nodokļu ieņēmumi avotā nav. +servers: +- server: vde + type: postgres + format: iceberg + description: 'VDE (Valsts datu ezerkrātuve): Silver tabula, kurā savienotājs ieraksta pārveidotos izpildes faktus' + customProperties: + - property: table + value: cac_silver.budget_execution + - property: names + value: cac_silver.budget_execution_name + - property: portal + value: https://lakehouse.pppa.lv/ +- server: data.gov.lv + type: custom + format: csv + description: Avots (Valsts kase); avota līgums contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml + customProperties: + - property: sourceContract + value: contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml + - property: mapping + value: mappings/B03-izpilde.yaml +schema: +- name: BudgetExecution + logicalType: object + physicalType: xml-element + physicalName: BudgetExecution + description: Viena budžeta gada izpilde (vai tās daļa), kā publicēta konkrētā Valsts kases datnē. + properties: + - name: id + logicalType: string + required: true + logicalTypeOptions: + pattern: lv-vbi-[0-9]{4}(\.p[0-9]{3}|\.names)? + description: 'Izpildes dokumenta identifikators: lv-vbi-GGGG (budžeta gads) un, ja dokuments ir sadalīts daļās, .pNNN vai .names.' + primaryKey: true + unique: true + - name: year + logicalType: string + required: true + - name: asOfMonth + logicalType: integer + required: true + description: Pēdējais mēnesis, par kuru datnē ir dati. + - name: law + logicalType: string + required: false + logicalTypeOptions: + pattern: lv-vb-[0-9]{4}(-r[0-9]+)?(\.[A-Za-z0-9_-]+)* + description: Tā paša gada budžeta likuma datukopa, pret kuru sasaistīti mērķi. + - name: generated + logicalType: string + required: true + - name: Source@publisher + logicalType: string + required: true + - name: Source@dataset + logicalType: string + required: true + - name: Source@url + logicalType: string + required: true + - name: Source@sha256 + logicalType: string + required: true + logicalTypeOptions: + pattern: '[0-9a-f]{64}' + - name: Source@modified + logicalType: string + required: true + description: Datnes pēdējo izmaiņu laiks portālā. + - name: Source@rows + logicalType: integer + required: true + - name: Name + logicalType: array + required: false + description: Koda nosaukums, kā avotā (iestāde, resors, programma, funkcija, saistību veids, projekts, klasifikācijas kods, likuma griezuma + kods). + items: + logicalType: string + - name: Name@kind + logicalType: string + required: false + quality: + - type: library + rule: validValues + validValues: + - resort + - institution + - programme + - function + - commitment + - project + - code + - lawCode + - name: Name@key + logicalType: string + required: false + - name: Execution@id + logicalType: string + required: false + logicalTypeOptions: + pattern: lv-vbi-[0-9]{4}\.m(0[1-9]|1[0-2])\.[0-9a-f]{12} + description: 'Izpildes fakta identifikators: lv-vbi-GGGG.mMM.<12 heksadecimālas zīmes>. Zīmes ir SHA-1 no avota rindas atslēgas (mappings/B03-izpilde.yaml, + id.key), tāpēc atkārtotā ielādē tas pats fakts saņem to pašu identifikatoru.' + - name: Execution@month + logicalType: integer + required: false + - name: Execution@flow + logicalType: string + required: false + description: resource — iestādes resursi izdevumu segšanai (dotācija no vispārējiem ieņēmumiem, pašu ieņēmumi, ārvalstu finanšu palīdzība, + speciālā budžeta sociālās apdrošināšanas iemaksas, transferti); atbilst likuma pielikumu pozīcijai „Resursi izdevumu segšanai”. Valsts pamatbudžeta + nodokļu ieņēmumi šajā avotā nav. expenditure — izdevumi; financing — finansēšana. + quality: + - type: library + rule: validValues + validValues: + - resource + - expenditure + - financing + - name: Execution@fund + logicalType: string + required: false + description: basic — valsts pamatbudžets; special — valsts speciālais budžets; loans — aizdevumu un atmaksu budžets; donations — ziedojumi + un dāvinājumi. + quality: + - type: library + rule: validValues + validValues: + - basic + - special + - loans + - donations + - name: Execution@block + logicalType: string + required: false + description: core — valsts pamatfunkciju īstenošana; eu — Eiropas Savienības politiku instrumentu un pārējās ārvalstu finanšu palīdzības līdzfinansētie + projekti un pasākumi. Tās pašas vērtības kā budžeta likumā. + quality: + - type: library + rule: validValues + validValues: + - core + - eu + - name: Execution@consolidation + logicalType: string + required: false + description: net — „Visu resoru NETO – bez transfertiem” (summējams, lai iegūtu izpildi bez savstarpējiem transfertiem); basicTransfers — + pamatbudžeta savstarpējie transferti un atmaksas; basicSpecialTransfers — pamatbudžeta un speciālā budžeta savstarpējie transferti; specialTransfers + — speciālā budžeta savstarpējie transferti. Nekonsolidētu izpildi iegūst, saskaitot visas četras. + quality: + - type: library + rule: validValues + validValues: + - net + - basicTransfers + - basicSpecialTransfers + - specialTransfers + - name: Execution@resort + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{2}' + description: Budžeta resora (ministrijas vai citas centrālās valsts iestādes) kods, divi cipari. Tas pats kods budžeta likumā un VPK ID pirmajos + divos ciparos. + - name: Execution@institution + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{11}' + description: Iestādes reģistrācijas numurs (11 cipari); sasaista ar UR un Valsts kancelejas organizāciju reģistru (VPK ID). + - name: Execution@institutionCode + logicalType: string + required: false + description: Iestādes kods Valsts kases sistēmā (mainās starp gadiem; pastāvīgais ir institution). + - name: Execution@programme + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' + description: Programmas vai apakšprogrammas kods PP.AA.SS, kā budžeta likumā (piemēram 19.03.00). Programmai bez apakšprogrammām apakšprogrammas + kods ir programmas kods. + - name: Execution@subprogramme + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' + description: Programmas vai apakšprogrammas kods PP.AA.SS, kā budžeta likumā (piemēram 19.03.00). Programmai bez apakšprogrammām apakšprogrammas + kods ir programmas kods. + - name: Execution@function + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{3}' + description: Valdības funkciju klasifikācijas kods (COFOG), piemēram 09.200. + - name: Execution@commitmentKind + logicalType: string + required: false + description: Saistību veida kods (10 cipari), kā budžeta likuma 11. pielikumā; 0000000000 — bez saistību veida. + - name: Execution@project + logicalType: string + required: false + description: Projekta ārējais kods, ja izpilde attiecas uz projektu. + - name: Execution@scheme + logicalType: string + required: false + description: 'Kura klasifikācija ir atribūtā code: ekk — izdevumu ekonomiskā klasifikācija; revenue — ieņēmumu klasifikācija; financing — + finansēšanas klasifikācija. Tās pašas vērtības kā budžeta likumā.' + quality: + - type: library + rule: validValues + validValues: + - ekk + - revenue + - financing + - name: Execution@code + logicalType: string + required: false + description: Zemākā līmeņa klasifikācijas kods (EKK, ieņēmumu vai finansēšanas klasifikācija). + - name: Execution@group + logicalType: string + required: false + description: EKK grupa četru ciparu līmenī (1000, 2000 … 9000) — tas līmenis, kurā izdevumi noteikti budžeta likumā. + - name: Execution@lawCode + logicalType: string + required: false + description: Pozīcija likuma pielikumu griezumā (piemēram 1000, A300, 21710), ja avots to norāda. + - name: Execution@purpose + logicalType: string + required: false + logicalTypeOptions: + pattern: lv-vb-[0-9]{4}(-r[0-9]+)?(\.[A-Za-z0-9_-]+)* + description: 'Budžeta likuma mērķis (Purpose), kuram atbilst izpilde: tā paša gada likums, šī resora apakšprogramma vai programma.' + - name: Execution@lawMatch + logicalType: string + required: false + description: 'Kā izpildes fakts sasaistīts ar tā paša gada budžeta likumu: subprogramme — likumā ir šī resora apakšprogramma; programme — + likumā ir tikai programma; none — likumā šādas programmas nav (piemēram, izveidota gada laikā) vai likums nav ielādēts.' + quality: + - type: library + rule: validValues + validValues: + - subprogramme + - programme + - none + - name: Execution@amount + logicalType: number + required: false + description: Summa euro par mēnesi, kā publicēta. Negatīva vērtība nozīmē samazinājumu (atmaksu, korekciju) vai finansēšanā līdzekļu izlietojumu. + - name: Execution@srcRow + logicalType: integer + required: false + description: Rindas numurs avota datnē (bez virsrakstu rindas). + customProperties: [] +- name: Name + logicalType: object + physicalType: xml-element + physicalName: Name + description: Koda nosaukums, kā avotā (iestāde, resors, programma, funkcija, saistību veids, projekts, klasifikācijas kods, likuma griezuma + kods). + properties: + - name: kind + logicalType: string + required: true + quality: + - type: library + rule: validValues + validValues: + - resort + - institution + - programme + - function + - commitment + - project + - code + - lawCode + primaryKey: true + unique: true + - name: key + logicalType: string + required: true + primaryKey: true + unique: true + - name: text() + logicalType: string + required: true + customProperties: + - property: lakehouseTable + value: cac_silver.budget_execution_name +- name: Execution + logicalType: object + physicalType: xml-element + physicalName: Execution + description: 'Viens izpildes fakts: summa par mēnesi vienā avota griezumā.' + properties: + - name: id + logicalType: string + required: true + logicalTypeOptions: + pattern: lv-vbi-[0-9]{4}\.m(0[1-9]|1[0-2])\.[0-9a-f]{12} + description: 'Izpildes fakta identifikators: lv-vbi-GGGG.mMM.<12 heksadecimālas zīmes>. Zīmes ir SHA-1 no avota rindas atslēgas (mappings/B03-izpilde.yaml, + id.key), tāpēc atkārtotā ielādē tas pats fakts saņem to pašu identifikatoru.' + primaryKey: true + unique: true + - name: month + logicalType: integer + required: true + - name: flow + logicalType: string + required: true + description: resource — iestādes resursi izdevumu segšanai (dotācija no vispārējiem ieņēmumiem, pašu ieņēmumi, ārvalstu finanšu palīdzība, + speciālā budžeta sociālās apdrošināšanas iemaksas, transferti); atbilst likuma pielikumu pozīcijai „Resursi izdevumu segšanai”. Valsts pamatbudžeta + nodokļu ieņēmumi šajā avotā nav. expenditure — izdevumi; financing — finansēšana. + quality: + - type: library + rule: validValues + validValues: + - resource + - expenditure + - financing + - name: fund + logicalType: string + required: true + description: basic — valsts pamatbudžets; special — valsts speciālais budžets; loans — aizdevumu un atmaksu budžets; donations — ziedojumi + un dāvinājumi. + quality: + - type: library + rule: validValues + validValues: + - basic + - special + - loans + - donations + - name: block + logicalType: string + required: false + description: core — valsts pamatfunkciju īstenošana; eu — Eiropas Savienības politiku instrumentu un pārējās ārvalstu finanšu palīdzības līdzfinansētie + projekti un pasākumi. Tās pašas vērtības kā budžeta likumā. + quality: + - type: library + rule: validValues + validValues: + - core + - eu + - name: consolidation + logicalType: string + required: true + description: net — „Visu resoru NETO – bez transfertiem” (summējams, lai iegūtu izpildi bez savstarpējiem transfertiem); basicTransfers — + pamatbudžeta savstarpējie transferti un atmaksas; basicSpecialTransfers — pamatbudžeta un speciālā budžeta savstarpējie transferti; specialTransfers + — speciālā budžeta savstarpējie transferti. Nekonsolidētu izpildi iegūst, saskaitot visas četras. + quality: + - type: library + rule: validValues + validValues: + - net + - basicTransfers + - basicSpecialTransfers + - specialTransfers + - name: resort + logicalType: string + required: true + logicalTypeOptions: + pattern: '[0-9]{2}' + description: Budžeta resora (ministrijas vai citas centrālās valsts iestādes) kods, divi cipari. Tas pats kods budžeta likumā un VPK ID pirmajos + divos ciparos. + - name: institution + logicalType: string + required: true + logicalTypeOptions: + pattern: '[0-9]{11}' + description: Iestādes reģistrācijas numurs (11 cipari); sasaista ar UR un Valsts kancelejas organizāciju reģistru (VPK ID). + - name: institutionCode + logicalType: string + required: true + description: Iestādes kods Valsts kases sistēmā (mainās starp gadiem; pastāvīgais ir institution). + - name: programme + logicalType: string + required: true + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' + description: Programmas vai apakšprogrammas kods PP.AA.SS, kā budžeta likumā (piemēram 19.03.00). Programmai bez apakšprogrammām apakšprogrammas + kods ir programmas kods. + - name: subprogramme + logicalType: string + required: true + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{2}\.[0-9]{2}' + description: Programmas vai apakšprogrammas kods PP.AA.SS, kā budžeta likumā (piemēram 19.03.00). Programmai bez apakšprogrammām apakšprogrammas + kods ir programmas kods. + - name: function + logicalType: string + required: false + logicalTypeOptions: + pattern: '[0-9]{2}\.[0-9]{3}' + description: Valdības funkciju klasifikācijas kods (COFOG), piemēram 09.200. + - name: commitmentKind + logicalType: string + required: false + description: Saistību veida kods (10 cipari), kā budžeta likuma 11. pielikumā; 0000000000 — bez saistību veida. + - name: project + logicalType: string + required: false + description: Projekta ārējais kods, ja izpilde attiecas uz projektu. + - name: scheme + logicalType: string + required: true + description: 'Kura klasifikācija ir atribūtā code: ekk — izdevumu ekonomiskā klasifikācija; revenue — ieņēmumu klasifikācija; financing — + finansēšanas klasifikācija. Tās pašas vērtības kā budžeta likumā.' + quality: + - type: library + rule: validValues + validValues: + - ekk + - revenue + - financing + - name: code + logicalType: string + required: true + description: Zemākā līmeņa klasifikācijas kods (EKK, ieņēmumu vai finansēšanas klasifikācija). + - name: group + logicalType: string + required: false + description: EKK grupa četru ciparu līmenī (1000, 2000 … 9000) — tas līmenis, kurā izdevumi noteikti budžeta likumā. + - name: lawCode + logicalType: string + required: false + description: Pozīcija likuma pielikumu griezumā (piemēram 1000, A300, 21710), ja avots to norāda. + - name: purpose + logicalType: string + required: false + logicalTypeOptions: + pattern: lv-vb-[0-9]{4}(-r[0-9]+)?(\.[A-Za-z0-9_-]+)* + description: 'Budžeta likuma mērķis (Purpose), kuram atbilst izpilde: tā paša gada likums, šī resora apakšprogramma vai programma.' + - name: lawMatch + logicalType: string + required: true + description: 'Kā izpildes fakts sasaistīts ar tā paša gada budžeta likumu: subprogramme — likumā ir šī resora apakšprogramma; programme — + likumā ir tikai programma; none — likumā šādas programmas nav (piemēram, izveidota gada laikā) vai likums nav ielādēts.' + quality: + - type: library + rule: validValues + validValues: + - subprogramme + - programme + - none + - name: amount + logicalType: number + required: true + description: Summa euro par mēnesi, kā publicēta. Negatīva vērtība nozīmē samazinājumu (atmaksu, korekciju) vai finansēšanā līdzekļu izlietojumu. + - name: srcRow + logicalType: integer + required: true + description: Rindas numurs avota datnē (bez virsrakstu rindas). + customProperties: + - property: lakehouseTable + value: cac_silver.budget_execution +quality: +- name: xsd_valid + type: custom + engine: xsd + implementation: schemas/valsts-budzeta-izpilde-0.1.xsd + description: Katra pārveidotā BudgetExecution dokumenta daļa atbilst XSD shēmai + dimension: conformity +- name: id_unique + type: custom + engine: cac-lakehouse + implementation: app.cac_execution:id_unique + description: Izpildes faktu identifikatori ir unikāli visā gadā + dimension: uniqueness +- name: totals_reconcile + type: custom + engine: cac-lakehouse + implementation: app.cac_execution:totals_reconcile + description: Pārveidoto faktu summa katrā gadā sakrīt ar avota datnes summu (nekas nav zaudēts vai pievienots) + dimension: accuracy +- name: resort_known + type: custom + engine: cac-lakehouse + implementation: app.cac_execution:resort_known + description: Resora kods ir Valsts kancelejas organizāciju reģistrā (B01) vai budžeta likumā (B15) + dimension: consistency +slaProperties: +- property: frequency + value: 1 + unit: d + element: pārbaude katru dienu (cron 03:30 UTC); pārveidošana, ja mainījusies avota datne vai šī repozitorija commit +- property: retention + value: kārtējais stāvoklis; avota datnes kontrolsumma un commit katrā ielādē (cac_meta.loads) +team: +- role: owner + name: Valsts kase (izpildes dati); PPPA (shēma un pārveidošana) +- role: data steward + name: PPP Asociācija (PPPA) +support: +- channel: issues + url: https://processgit.org/Valsts-Pirmkods/Budget-as-Code/issues +customProperties: +- property: sourceId + value: B03 +- property: namespace + value: urn:pppa:vpk:budzeta-izpilde:0.1 +- property: rootElement + value: BudgetExecution +- property: identifiers + value: dokuments lv-vbi-GGGG[.pNNN]; fakts lv-vbi-GGGG.mMM.; purpose → lv-vb-GGGG.pr.RR.PP.AA.SS (B15) diff --git a/contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml b/contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml new file mode 100644 index 0000000..8395cbe --- /dev/null +++ b/contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml @@ -0,0 +1,106 @@ +# ODCS v3 datu līgums: B03 Valsts budžeta izpilde — AVOTS (Valsts kases CSV, kā publicēts data.gov.lv). +# Apraksta, ko VDE sagaida no Valsts kases datnes. Ja Valsts kase maina kolonnas vai kodus, ielāde to konstatē un reģistrē kā kļūdu. +# Mērķa (pārveidotās) datu kopas līgums: contracts/B03-valsts-budzeta-izpilde.odcs.yaml. Pārveidošana: mappings/B03-izpilde.yaml. +apiVersion: v3.0.2 +kind: DataContract +id: urn:pppa:cac:contract:B03-source +name: Valsts budžeta izpilde — Valsts kases avota datne +version: 0.1.0 +status: active +domain: Valsts kā kods (Country as Code) +dataProduct: Valsts budžeta izpilde +tenant: PPP Asociācija (PPPA) +description: + purpose: >- + Nekonsolidēta valsts pamatbudžeta un valsts speciālā budžeta izpilde pa mēnešiem sadalījumā pa iestādēm, gadskārtējā valsts + budžeta likumā apstiprinātām programmām un apakšprogrammām un ieņēmumu, izdevumu ekonomiskās un finansēšanas klasifikāciju + kodiem, atbilstoši Valsts kases valsts budžeta informācijas sistēmā reģistrētajiem datiem. + usage: Avots datu kopai B03 VDE. Datne tiek lejupielādēta, pārbaudīta pret šo līgumu un pārveidota pēc mappings/B03-izpilde.yaml. + limitations: >- + Summas ir mēneša apjoms (nevis uzkrājums). Datnē nav apstiprinātā plāna un gada laikā precizētā plāna — tikai izpilde. + Valsts pamatbudžeta nodokļu ieņēmumi datnē nav (ir iestāžu līmeņa resursi). Kārtējā gada datne tiek aizstāta katru mēnesi; + iepriekšējā gada datne pēc gada slēgšanas var tikt precizēta. +servers: +- server: data.gov.lv + type: custom + format: csv + description: Latvijas Atvērto datu portāls (CKAN), datu kopa ar vienu CSV datni katram gadam + customProperties: + - {property: dataset, value: "https://data.gov.lv/dati/lv/dataset/valsts-budzeta-izpilde-pa-iestadem-budzeta-programmam-apaksprogrammam-un-klasifikacijas-kodiem"} + - {property: api, value: "https://data.gov.lv/dati/api/3/action/package_show?id=valsts-budzeta-izpilde-pa-iestadem-budzeta-programmam-apaksprogrammam-un-klasifikacijas-kodiem"} + - {property: filePattern, value: "adkopai_(\\d{4})\\.csv$"} + - {property: encoding, value: utf-8-sig} + - {property: delimiter, value: ","} + - {property: quote, value: "\""} + - {property: decimalSeparator, value: "."} +schema: +- name: izpilde + logicalType: object + physicalType: csv-file + physicalName: "vb_izpilde_pa_iestadem_budzeta_progr_apakspr_adkopai_.csv" + description: Viena rinda = viena summa par mēnesi vienā griezumā. Kolonnu secība ir fiksēta; virsrakstu rinda ir obligāta. + customProperties: + - {property: lakehouseTable, value: cac_bronze.vk_budget_execution} + properties: + - {name: gads, physicalName: Gads, logicalType: integer, required: true, description: Budžeta gads; sakrīt ar gadu datnes nosaukumā} + - {name: menesis, physicalName: Menesis_Atslega, logicalType: integer, required: true, description: "Mēnesis 1–12", logicalTypeOptions: {minimum: 1, maximum: 12}} + - {name: menesis_nosaukums, physicalName: Menesis_nosaukums, logicalType: string, required: true} + - {name: ministrija_kods, physicalName: Ministrija_Atslega, logicalType: string, required: true, description: Budžeta resora kods (2 cipari), logicalTypeOptions: {pattern: "[0-9]{2}"}} + - {name: ministrija, physicalName: Ministrija_nosaukums, logicalType: string, required: true} + - {name: resora_veids, physicalName: Resora_veids, logicalType: string, required: true} + - {name: iestade_kods, physicalName: Iestade_Atslega, logicalType: string, required: true, description: Iestādes kods Valsts kases sistēmā} + - {name: iestade, physicalName: Iestade_nosaukums, logicalType: string, required: true} + - {name: nmr, physicalName: Iestades_NMR, logicalType: string, required: true, description: Iestādes reģistrācijas numurs, logicalTypeOptions: {pattern: "[0-9]{11}"}} + - {name: budzeta_tips_kods, physicalName: Budzeta_tips_Atslega, logicalType: string, required: true, + quality: [{type: library, rule: validValues, validValues: ["P", "S", "6", "7"]}]} + - {name: budzeta_tips, physicalName: Budzeta_tips_nosaukums, logicalType: string, required: true} + - {name: programma_kods, physicalName: Programma_Atslega, logicalType: string, required: true, logicalTypeOptions: {pattern: "[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}"}} + - {name: programma, physicalName: Programma_nosaukums, logicalType: string, required: true} + - {name: apaksprogramma_kods, physicalName: Apaksprogramma_Atslega, logicalType: string, required: true, logicalTypeOptions: {pattern: "[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}"}} + - {name: apaksprogramma, physicalName: Apaksprogramma_nosaukums, logicalType: string, required: true} + - {name: budzeta_bloks, physicalName: Buzeta_bloks, logicalType: string, required: false, description: "Kolonnas nosaukumā avotā ir drukas kļūda (Buzeta)", + quality: [{type: library, rule: validValues, validValues: ["Pamatfunkcijas", "Ārvalstu finanšu palīdzība"]}]} + - {name: funkcija_l1_kods, physicalName: Funkcija_augstakais_limenis_Atslega, logicalType: string, required: false} + - {name: funkcija_l1, physicalName: Funkcija_augstakais_limenis_Nosaukums, logicalType: string, required: false} + - {name: funkcija_kods, physicalName: Funkcija_zemakaja_limeni_Atslega, logicalType: string, required: false, logicalTypeOptions: {pattern: "[0-9]{2}\\.[0-9]{3}"}} + - {name: funkcija, physicalName: Funkcija_zemakaja_limeni_nosaukums, logicalType: string, required: false} + - {name: saistibu_veids_kods, physicalName: Saistibu_veids_Atslega, logicalType: string, required: false} + - {name: saistibu_veids, physicalName: Saistibu_veids_nosaukums, logicalType: string, required: false} + - {name: projekta_kods, physicalName: Projekta_arejais_kods_Atslega, logicalType: string, required: false} + - {name: projekts, physicalName: Projekts_nosaukums, logicalType: string, required: false} + - {name: klasifikacija, physicalName: Klasifikacija, logicalType: string, required: true, + quality: [{type: library, rule: validValues, validValues: ["Ieņēmumi", "Izdevumi", "Finansēšana"]}]} + - {name: ekk1, physicalName: Vienotais_EKK_Atslega_1_limenis, logicalType: string, required: false} + - {name: ekk2, physicalName: Vienotais_EKK_Atslega_2_limenis, logicalType: string, required: false} + - {name: ekk3, physicalName: Vienotais_EKK_Atslega_3_limenis, logicalType: string, required: false} + - {name: ekk4, physicalName: Vienotais_EKK_Atslega_4_limenis, logicalType: string, required: false} + - {name: ekk5, physicalName: Vienotais_EKK_Atslega_5_limenis, logicalType: string, required: false} + - {name: ekk6, physicalName: Vienotais_EKK_Atslega_6_limenis, logicalType: string, required: false} + - {name: ekk7, physicalName: Vienotais_EKK_Atslega_7_limenis, logicalType: string, required: true, description: Zemākā līmeņa klasifikācijas kods} + - {name: ekk7_nosaukums, physicalName: Vienotais_EKK_Nosaukums_7_limenis, logicalType: string, required: false} + - {name: likuma_griezuma_ekk, physicalName: Likuma_griezuma_EKK, logicalType: string, required: false, description: "Pozīcija likuma pielikumu griezumā: kods un nosaukums, piemēram „1000 Atlīdzība”"} + - {name: konsolidacija, physicalName: Konsolidacija, logicalType: string, required: true, + quality: [{type: library, rule: validValues, validValues: ["Visu resoru NETO - bez transfertiem", "+ pamatbudžeta savstarpējie transferti un atmaksas", + "+ pamatbudžeta/speciālā budžeta savstarpējie transferti", "+ speciālā budžeta savstarpējie transferti"]}]} + - {name: valuta, physicalName: Datu_valuta, logicalType: string, required: true, quality: [{type: library, rule: validValues, validValues: ["Euro"]}]} + - {name: summa, physicalName: Summa, logicalType: number, required: true, description: Summa euro par mēnesi (punkts kā decimālatdalītājs)} +quality: +- {name: source_columns_match, type: custom, engine: cac-lakehouse, implementation: "app.cac_execution:source_columns_match", + description: "Datnes virsrakstu rinda sakrīt ar līgumā noteiktajām kolonnām un to secību", dimension: conformity} +- {name: source_values_valid, type: custom, engine: cac-lakehouse, implementation: "app.cac_execution:source_values_valid", + description: "Obligātās kolonnas aizpildītas; vērtības atbilst šablonam vai pieļaujamo vērtību sarakstam; summa ir skaitlis; gads sakrīt ar datni", dimension: validity} +- {name: source_key_unique, type: custom, engine: cac-lakehouse, implementation: "app.cac_execution:source_key_unique", + description: "Rindas atslēga (mappings/B03-izpilde.yaml, id.key) ir unikāla", dimension: uniqueness} +slaProperties: +- {property: frequency, value: 1, unit: d, element: "pārbaude katru dienu (cron 03:30 UTC); ielāde, ja datne portālā mainījusies"} +- {property: latency, value: 1, unit: month, element: "Valsts kase publicē iepriekšējā mēneša izpildi mēneša sākumā"} +team: +- {role: owner, name: "Valsts kase, Pārskatu departaments"} +- {role: data steward, name: PPP Asociācija (PPPA)} +support: +- {channel: email, url: "mailto:pd@kase.gov.lv", description: Datu turētājs (Valsts kase)} +- {channel: issues, url: "https://processgit.org/Valsts-Pirmkods/Budget-as-Code/issues", description: Līgums un pārveidošana (PPPA)} +customProperties: +- {property: sourceId, value: B03} +- {property: licence, value: CC0-1.0} +- {property: years, value: "2024, 2025, 2026"} diff --git a/docs/IZPILDE.md b/docs/IZPILDE.md new file mode 100644 index 0000000..4c75df2 --- /dev/null +++ b/docs/IZPILDE.md @@ -0,0 +1,65 @@ +# Valsts budžeta izpilde (B03) + +Budžeta likums (B15) ir plāns. Izpilde ir fakts: cik katra iestāde katru mēnesi faktiski saņēmusi un izlietojusi pa programmām, apakšprogrammām un klasifikācijas kodiem. Šajā repozitorijā glabājas izpildes **definīcijas**; pašus datus publicē Valsts kase, un VDE tos ielādē no turienes. + +## Kas kur atrodas + +| Datne | Saturs | +|---|---| +| `schemas/valsts-budzeta-izpilde-0.1.xsd` | Mērķa shēma: izpildes fakti uz tiem pašiem identifikatoriem, kas budžeta likumā | +| `contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml` | Avota līgums: ko VDE sagaida no Valsts kases CSV datnes (kolonnas, secība, kodi, pieļaujamās vērtības) | +| `contracts/B03-valsts-budzeta-izpilde.odcs.yaml` | Mērķa līgums: pārveidotie izpildes fakti; ģenerēts no XSD | +| `mappings/B03-izpilde.yaml` | Pārveidošanas noteikumi: avota kolonna → shēmas atribūts, vērtību vārdnīcas, identifikatora un sasaistes ar likumu noteikumi | + +Datu mapes izpildei nav. Autoritatīvā datu kopija ir Valsts kases publikācija; katru mēnesi atkārtoti glabāt 300 000+ rindu git repozitorijā nav jēgas. + +## Avots + +Valsts kase, datu kopa „Valsts budžeta izpilde pa iestādēm, budžeta programmām/apakšprogrammām un klasifikācijas kodiem” Latvijas Atvērto datu portālā (CC0). Viena CSV datne katram gadam; kārtējā gada datne tiek aizstāta katru mēnesi. Summas ir mēneša apjoms, nevis uzkrājums no gada sākuma. Datnē ir tikai izpilde — nav apstiprinātā un precizētā plāna. + +## Plūsma + +``` +data.gov.lv (Valsts kase, CSV) ProcessGit Budget-as-Code (šis repozitorijs) + │ shēma · avota līgums · mērķa līgums · pārveidošanas noteikumi + ▼ │ +VDE savienotājs (katru dienu 03:30 UTC) ◄──────────────────────┘ lasa tajā pašā commit + 1. pārbauda, vai datne portālā mainījusies (ja nē — izlaiž) + 2. avota līguma pārbaudes: kolonnas un secība, vērtības, atslēgas unikalitāte + 3. Bronze: cac_bronze.vk_budget_execution — rindas, kā saņemtas + 4. pārveidošana pēc mappings/B03-izpilde.yaml → BudgetExecution dokumenti (pa 20 000 ierakstiem), katrs pārbaudīts pret XSD + 5. Silver: cac_silver.budget_execution — izpildes fakti ar likuma mērķi (purpose) + 6. mērķa līguma pārbaudes: identifikatori unikāli, summas sakrīt ar avotu, resors zināms + 7. Gold: plāns pret izpildi pa resoriem un apakšprogrammām; izpilde pa mēnešiem +``` + +## Sasaiste ar budžeta likumu + +Izpildes fakts saņem atribūtu `purpose`, ja tā paša gada likumā ir šī resora apakšprogramma (`lv-vb-GGGG.pr.RR.PP.AA.SS`) vai — ja nav — programma. Pretējā gadījumā `lawMatch="none"`: parasti tā ir programma vai apakšprogramma, kas izveidota gada laikā (piemēram, finansējums no 74. resora „Gadskārtējā valsts budžeta izpildes procesā pārdalāmais finansējums”). + +Kopējās vērtības: + +| Vērtība | Avotā | Likumā (B15) | +|---|---|---| +| Resors | `Ministrija_Atslega` | Purpose `kind="resort"`, Actor `code` | +| Programma, apakšprogramma | `Programma_Atslega`, `Apaksprogramma_Atslega` | Purpose `code` | +| Budžeta veids | `Budzeta_tips_Atslega` P / S | `fund` basic / special | +| Bloks | `Buzeta_bloks` | `block` core / eu | +| Funkcija | `Funkcija_zemakaja_limeni_Atslega` | Purpose `function` | +| Saistību veids | `Saistibu_veids_Atslega` | `commitmentKind` | +| EKK grupa | `Vienotais_EKK_Atslega_4_limenis` | Allocation `code` (izdevumi) | +| Iestāde | `Iestades_NMR` | — (likumā nav iestāžu līmeņa) → VPK ID caur B01 | + +## Ko salīdzinājums parāda un ko nē + +- Plāns ir **pieņemtais** likums. Gada laikā apropriācijas mainās (74. resora pārdale, apropriāciju pārdale un palielināšana saskaņā ar Likumu par budžetu un finanšu vadību, likuma grozījumi). Šīs izmaiņas vēl nav datu kopā, tāpēc izpilde virs 100 % vai programma bez plāna ne vienmēr nozīmē pārkāpumu. +- Izpilde ir „Visu resoru NETO – bez transfertiem” (`consolidation="net"`). Nekonsolidētu izpildi iegūst, saskaitot visas četras konsolidācijas pazīmes. +- Valsts pamatbudžeta nodokļu ieņēmumi šajā avotā nav; `flow="resource"` ir iestāžu līmeņa resursi izdevumu segšanai. + +## Nākamie avoti + +| Kas | Turētājs | Statuss | +|---|---|---| +| Precizētais plāns (tāmes ar grozījumiem) | Valsts kase | Iespējams `opendata.kase.gov.lv/api/v1/valsts_budzeta_tames`; jānoskaidro vaicājuma parametri | +| Valsts konsolidētā budžeta ieņēmumu izpilde (nodokļi) | Valsts kase, VID | Jāpārbauda | +| Mērķdotāciju izlietojums pašvaldībās | Valsts kase (pašvaldību budžeti) | Jāpārbauda | diff --git a/mappings/B03-izpilde.yaml b/mappings/B03-izpilde.yaml new file mode 100644 index 0000000..c859609 --- /dev/null +++ b/mappings/B03-izpilde.yaml @@ -0,0 +1,77 @@ +# B03 Valsts budžeta izpilde — pārveidošanas noteikumi (avota CSV → mērķa shēma valsts-budzeta-izpilde-0.1.xsd). +# Šo datni lasa VDE savienotājs (lakehouse app/cac_execution.py) katrā ielādē tajā pašā commit, kurā ir shēma un datu līgumi. +# Labojot noteikumus, jāpalielina version; savienotājs ielādi atkārto, ja mainījies Budget-as-Code commit. +version: 0.1.0 +source_contract: contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml +target_contract: contracts/B03-valsts-budzeta-izpilde.odcs.yaml +schema: schemas/valsts-budzeta-izpilde-0.1.xsd +namespace: urn:pppa:vpk:budzeta-izpilde:0.1 +root: BudgetExecution + +# Kuras avota rindas tiek pārveidotas. Visas rindas ar summu; rinda bez gada vai mēneša ir kļūda (avota līguma pārbaude). +document: + id: "lv-vbi-{Gads}" + law: "lv-vb-{Gads}" # tā paša gada budžeta likums (B15); ja nav ielādēts, purpose netiek aizpildīts + part_size: 20000 # Execution ierakstu skaits vienā dokumenta daļā (lv-vbi-GGGG.pNNN) + +# Execution ieraksta identifikators: lv-vbi-GGGG.mMM.; atslēga = šīs kolonnas, savienotas ar „|”. +# Kolonnu kombinācija avotā ir unikāla (pārbaudīts 2024–2026: katra rinda atšķiras vismaz vienā no tām). +id: + template: "lv-vbi-{Gads}.m{Menesis_Atslega:02d}.{hash}" + key: [Gads, Menesis_Atslega, Iestades_NMR, Budzeta_tips_Atslega, Programma_Atslega, Apaksprogramma_Atslega, + Funkcija_zemakaja_limeni_Atslega, Saistibu_veids_Atslega, Projekta_arejais_kods_Atslega, Klasifikacija, + Vienotais_EKK_Atslega_7_limenis, Konsolidacija] + +# Atribūti: kolonna → atribūts; map — vērtību vārdnīca (nezināma vērtība = kļūda); empty — ja tukšs, atribūts netiek rakstīts. +attributes: + month: {column: Menesis_Atslega, type: int} + flow: {column: Klasifikacija, map: {"Ieņēmumi": resource, "Izdevumi": expenditure, "Finansēšana": financing}} + fund: {column: Budzeta_tips_Atslega, map: {"P": basic, "S": special, "6": loans, "7": donations}} + block: {column: Buzeta_bloks, map: {"Pamatfunkcijas": core, "Ārvalstu finanšu palīdzība": eu}, empty: omit} + consolidation: {column: Konsolidacija, map: {"Visu resoru NETO - bez transfertiem": net, + "+ pamatbudžeta savstarpējie transferti un atmaksas": basicTransfers, + "+ pamatbudžeta/speciālā budžeta savstarpējie transferti": basicSpecialTransfers, + "+ speciālā budžeta savstarpējie transferti": specialTransfers}} + resort: {column: Ministrija_Atslega} + institution: {column: Iestades_NMR} + institutionCode: {column: Iestade_Atslega} + programme: {column: Programma_Atslega} + subprogramme: {column: Apaksprogramma_Atslega} + function: {column: Funkcija_zemakaja_limeni_Atslega, empty: omit} + commitmentKind: {column: Saistibu_veids_Atslega, empty: omit} + project: {column: Projekta_arejais_kods_Atslega, empty: omit} + scheme: {column: Klasifikacija, map: {"Ieņēmumi": revenue, "Izdevumi": ekk, "Finansēšana": financing}} + code: {column: Vienotais_EKK_Atslega_7_limenis} + group: {column: Vienotais_EKK_Atslega_4_limenis, when: {flow: expenditure}, empty: omit} + lawCode: {column: Likuma_griezuma_EKK, take: first_token, empty: omit} # „1000 Atlīdzība” → 1000 + amount: {column: Summa, type: decimal} + +# Sasaiste ar budžeta likumu (B15): vispirms apakšprogramma, tad programma; ja nav neviena — lawMatch=none. +purpose: + candidates: + - {match: subprogramme, template: "lv-vb-{Gads}.pr.{Ministrija_Atslega}.{Apaksprogramma_Atslega}"} + - {match: programme, template: "lv-vb-{Gads}.pr.{Ministrija_Atslega}.{Programma_Atslega}"} + +# Nosaukumi (Name ieraksti): koda nosaukums no avota; viens ieraksts katram (kind, key) gadā. +names: + - {kind: resort, key: Ministrija_Atslega, name: Ministrija_nosaukums} + - {kind: institution, key: Iestades_NMR, name: Iestade_nosaukums} + - {kind: programme, key: Programma_Atslega, name: Programma_nosaukums, scope: Ministrija_Atslega} + - {kind: programme, key: Apaksprogramma_Atslega, name: Apaksprogramma_nosaukums, scope: Ministrija_Atslega} + - {kind: function, key: Funkcija_zemakaja_limeni_Atslega, name: Funkcija_zemakaja_limeni_nosaukums} + - {kind: function, key: Funkcija_augstakais_limenis_Atslega, name: Funkcija_augstakais_limenis_Nosaukums} + - {kind: commitment, key: Saistibu_veids_Atslega, name: Saistibu_veids_nosaukums} + - {kind: project, key: Projekta_arejais_kods_Atslega, name: Projekts_nosaukums} + - {kind: code, key: Vienotais_EKK_Atslega_7_limenis, name: Vienotais_EKK_Nosaukums_7_limenis} + - {kind: lawCode, key: Likuma_griezuma_EKK, name: Likuma_griezuma_EKK, take: split_first} + +# Kolonnas, kas netiek pārnestas, un kāpēc. +not_mapped: + Menesis_nosaukums: "atkārto Menesis_Atslega" + Resora_veids: "resora veids (ministrija, centrālā valsts iestāde, neatkarīgā institūcija) — pieejams VPK reģistrā (B01)" + Vienotais_EKK_Atslega_1_limenis: "grupu teksta apzīmējumi; kods ir atribūtos code un group" + Vienotais_EKK_Atslega_2_limenis: "tas pats" + Vienotais_EKK_Atslega_3_limenis: "tas pats" + Vienotais_EKK_Atslega_5_limenis: "starplīmenis; atjaunojams no code" + Vienotais_EKK_Atslega_6_limenis: "starplīmenis; atjaunojams no code" + Datu_valuta: "vienmēr Euro (avota līguma pārbaude)" diff --git a/schemas/valsts-budzeta-izpilde-0.1.xsd b/schemas/valsts-budzeta-izpilde-0.1.xsd new file mode 100644 index 0000000..6e5ba02 --- /dev/null +++ b/schemas/valsts-budzeta-izpilde-0.1.xsd @@ -0,0 +1,202 @@ + + + + + + + Valsts budžeta izpilde pa mēnešiem kā dati. Avots: Valsts kases datu kopa „Valsts budžeta izpilde pa iestādēm, + budžeta programmām/apakšprogrammām un klasifikācijas kodiem” (data.gov.lv, CC0). Avota apraksts un pārbaudes: + contracts/B03-valsts-budzeta-izpilde.source.odcs.yaml. Pārveidošanas noteikumi: mappings/B03-izpilde.yaml. + + Viens Execution ieraksts ir viena avota rinda: mēnesis × iestāde × budžeta veids × programma/apakšprogramma × funkcija × + saistību veids × projekts × klasifikācijas kods × konsolidācijas pazīme. Summas ir mēneša apjoms, nevis uzkrājums no gada sākuma. + + Identifikatori sakrīt ar budžeta likuma datukopu (urn:pppa:vpk:budzets:0.1): resora kods, programmas un apakšprogrammas kods, + funkcijas kods, saistību veida kods. Atribūts purpose norāda likuma mērķi (lv-vb-GGGG.pr.RR.PP.AA.SS), ja tāds likumā ir. + + Kopsummas netiek glabātas: tās aprēķina no Execution ierakstiem. + + + + + + Izpildes dokumenta identifikators: lv-vbi-GGGG (budžeta gads) un, ja dokuments ir sadalīts daļās, .pNNN vai .names. + + + + Izpildes fakta identifikators: lv-vbi-GGGG.mMM.<12 heksadecimālas zīmes>. Zīmes ir SHA-1 no avota rindas atslēgas (mappings/B03-izpilde.yaml, id.key), tāpēc atkārtotā ielādē tas pats fakts saņem to pašu identifikatoru. + + + + Atsauce uz budžeta likuma datukopas ierakstu (urn:pppa:vpk:budzets:0.1), piemēram lv-vb-2026 vai lv-vb-2026.pr.22.19.03.00. + + + + Iestādes reģistrācijas numurs (11 cipari); sasaista ar UR un Valsts kancelejas organizāciju reģistru (VPK ID). + + + + Budžeta resora (ministrijas vai citas centrālās valsts iestādes) kods, divi cipari. Tas pats kods budžeta likumā un VPK ID pirmajos divos ciparos. + + + + Programmas vai apakšprogrammas kods PP.AA.SS, kā budžeta likumā (piemēram 19.03.00). Programmai bez apakšprogrammām apakšprogrammas kods ir programmas kods. + + + + Valdības funkciju klasifikācijas kods (COFOG), piemēram 09.200. + + + + Summa euro par mēnesi, kā publicēta. Negatīva vērtība nozīmē samazinājumu (atmaksu, korekciju) vai finansēšanā līdzekļu izlietojumu. + + + + + + + + + + resource — iestādes resursi izdevumu segšanai (dotācija no vispārējiem ieņēmumiem, pašu ieņēmumi, ārvalstu finanšu palīdzība, + speciālā budžeta sociālās apdrošināšanas iemaksas, transferti); atbilst likuma pielikumu pozīcijai „Resursi izdevumu segšanai”. + Valsts pamatbudžeta nodokļu ieņēmumi šajā avotā nav. expenditure — izdevumi; financing — finansēšana. + + + + + + + + + basic — valsts pamatbudžets; special — valsts speciālais budžets; loans — aizdevumu un atmaksu budžets; donations — ziedojumi un dāvinājumi. + + + + + + + + + core — valsts pamatfunkciju īstenošana; eu — Eiropas Savienības politiku instrumentu un pārējās ārvalstu finanšu palīdzības līdzfinansētie projekti un pasākumi. Tās pašas vērtības kā budžeta likumā. + + + + + + + + net — „Visu resoru NETO – bez transfertiem” (summējams, lai iegūtu izpildi bez savstarpējiem transfertiem); + basicTransfers — pamatbudžeta savstarpējie transferti un atmaksas; basicSpecialTransfers — pamatbudžeta un speciālā budžeta + savstarpējie transferti; specialTransfers — speciālā budžeta savstarpējie transferti. Nekonsolidētu izpildi iegūst, saskaitot visas četras. + + + + + + + + + + Kura klasifikācija ir atribūtā code: ekk — izdevumu ekonomiskā klasifikācija; revenue — ieņēmumu klasifikācija; financing — finansēšanas klasifikācija. Tās pašas vērtības kā budžeta likumā. + + + + + + + + Kā izpildes fakts sasaistīts ar tā paša gada budžeta likumu: subprogramme — likumā ir šī resora apakšprogramma; programme — likumā ir tikai programma; none — likumā šādas programmas nav (piemēram, izveidota gada laikā) vai likums nav ielādēts. + + + + + + + + + + + + + + + + + + + + + + Avota datne, no kuras dokuments izveidots, ar kontrolsummu un publicēšanas laiku. + + + + + Datnes pēdējo izmaiņu laiks portālā. + + + + + Koda nosaukums, kā avotā (iestāde, resors, programma, funkcija, saistību veids, projekts, klasifikācijas kods, likuma griezuma kods). + + + + + + + + + + Viens izpildes fakts: summa par mēnesi vienā avota griezumā. + + + + + + + + + Iestādes kods Valsts kases sistēmā (mainās starp gadiem; pastāvīgais ir institution). + + + + Saistību veida kods (10 cipari), kā budžeta likuma 11. pielikumā; 0000000000 — bez saistību veida. + Projekta ārējais kods, ja izpilde attiecas uz projektu. + + Zemākā līmeņa klasifikācijas kods (EKK, ieņēmumu vai finansēšanas klasifikācija). + EKK grupa četru ciparu līmenī (1000, 2000 … 9000) — tas līmenis, kurā izdevumi noteikti budžeta likumā. + Pozīcija likuma pielikumu griezumā (piemēram 1000, A300, 21710), ja avots to norāda. + Budžeta likuma mērķis (Purpose), kuram atbilst izpilde: tā paša gada likums, šī resora apakšprogramma vai programma. + + + Rindas numurs avota datnē (bez virsrakstu rindas). + + + + + Viena budžeta gada izpilde (vai tās daļa), kā publicēta konkrētā Valsts kases datnē. + + + + + + + + + Pēdējais mēnesis, par kuru datnē ir dati. + Tā paša gada budžeta likuma datukopa, pret kuru sasaistīti mērķi. + + + + + + diff --git a/tools/odcs-config.yaml b/tools/odcs-config.yaml index 92d9717..9e15fa3 100644 --- a/tools/odcs-config.yaml +++ b/tools/odcs-config.yaml @@ -1,4 +1,4 @@ -# B15 datu līguma konfigurācija lakehouse rīkam tools/xsd_to_odcs.py (tas pats rīks, ar ko ģenerēti B01–B14). +# B15 un B03 (mērķa) datu līgumu konfigurācija lakehouse rīkam tools/xsd_to_odcs.py (tas pats rīks, ar ko ģenerēti B01–B14). # python3 tools/xsd_to_odcs.py <šī datne> contracts Budget-as-Code base_url: https://processgit.org contracts: @@ -17,7 +17,7 @@ contracts: data_product: Valsts budžeta datukopa purpose: Pieņemtais valsts budžeta likums kā dati — panti, ieņēmumi, apropriācijas pa programmām un apakšprogrammām, nākamo gadu maksimālie apjomi, ilgtermiņa saistības un mērķdotācijas pašvaldībām; katrs likuma pielikumos drukātais skaitlis atjaunojams no datnes. limitations: Koncepcijas demonstrācija, nav oficiāls izdevums. Budžeta paskaidrojumi (mērķi, rezultatīvie rādītāji) un gada laikā veiktās apropriācijas izmaiņas vēl nav iekļautas. - identifiers: "lv-vb-GGGG; pants .pNNN; resors .ac.rSS; programma .pr.SS.PP.AA.00; projekts .pj.…; naudas fakts .a.pNN.r.y" + identifiers: "lv-vb-GGGG; pants .pNNN; resors .ac.rSS; programma .pr.SS.PP.AA.00; projekts .pj.…; finanšu fakts .a.pNN.r.y" objects: - {element: Budget, keys: [id]} - {element: Source, keys: [id]} @@ -30,3 +30,26 @@ contracts: rules: - {rule: printed_numbers_reproduced, description: "Katrs likuma pielikumos drukātais skaitlis atjaunojams no datnes (tools/verify_budget.py)", dimension: accuracy} - {rule: resort_has_vpk_id, description: "Resoram, kas ir institūcija, norādīts VPK ID"} + - id: B03 + file: B03-valsts-budzeta-izpilde.odcs.yaml + name: Valsts budžeta izpilde (izpildes fakti uz budžeta likuma identifikatoriem) + version: 0.1.0 + org: Valsts-Pirmkods + repo: Budget-as-Code + pattern: "VDE cac_silver.budget_execution — pārveidots no Valsts kases CSV (data.gov.lv)" + schema: schemas/valsts-budzeta-izpilde-0.1.xsd + root: BudgetExecution + namespace: urn:pppa:vpk:budzeta-izpilde:0.1 + owner: Valsts kase (izpildes dati); PPPA (shēma un pārveidošana) + data_product: Valsts budžeta izpilde + purpose: Valsts pamatbudžeta un speciālā budžeta izpilde pa mēnešiem, iestādēm, programmām, apakšprogrammām un klasifikācijas kodiem, pārveidota uz tiem pašiem identifikatoriem, kas budžeta likumā (B15), lai plānu un izpildi var salīdzināt bez manuālas sasaistes. + limitations: Koncepcijas demonstrācija, nav oficiāls izdevums. Plāns ir pieņemtais likums; gada laikā veiktās apropriāciju izmaiņas vēl nav iekļautas. Valsts pamatbudžeta nodokļu ieņēmumi avotā nav. + identifiers: "dokuments lv-vbi-GGGG[.pNNN]; fakts lv-vbi-GGGG.mMM.; purpose → lv-vb-GGGG.pr.RR.PP.AA.SS (B15)" + objects: + - {element: BudgetExecution, keys: [id]} + - {element: Name, keys: [kind, key], tables: [cac_silver.budget_execution_name]} + - {element: Execution, keys: [id], tables: [cac_silver.budget_execution]} + rules: + - {rule: id_unique, description: "Izpildes faktu identifikatori ir unikāli visā gadā", dimension: uniqueness} + - {rule: totals_reconcile, description: "Pārveidoto faktu summa katrā gadā sakrīt ar avota datnes summu (nekas nav zaudēts vai pievienots)", dimension: accuracy} + - {rule: resort_known, description: "Resora kods ir Valsts kancelejas organizāciju reģistrā (B01) vai budžeta likumā (B15)", dimension: consistency}