1
0
Rihards 663b865ac0 0.4.3: Ceļu satiksmes likums
lv-lik-1997-10-01 (likumi.lv 45467), no likumi.lv lapas ar 44 grozījumu lapām; XSD derīgs,
teksta pilnība 99,9 %, 114 panti. Katalogā 61 likums.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016igpMJBtapmG6vHE4vSF9q
2026-10-24 14:12:54 +00:00
2026-10-24 14:12:54 +00:00
2026-10-24 14:12:54 +00:00

Likums-as-Code

Latvijas Republikas likumi kā strukturēti dati: katrs likums ir viens XML fails, kas atbilst shēmai schemas/likumi-0.1.xsd. Tāds pats stils kā MK-noteikumi-as-Code (Act, TextVersion, Source, DataVersion, ID shēma, pārbaudes).

PPP Asociācijas (PPPA) pilotprojekta Valsts PirmKods daļa. Dati katru dienu tiek ielādēti PPPA Valsts Datu Ezerkrātuvē kā datu kopa B20; datu līgums — contracts/B20-likumi.odcs.yaml.

Šie nav oficiāli dati. Juridiski saistošs ir oficiālajā izdevumā „Latvijas Vēstnesis” publicētais teksts.

Struktūra

Likums-as-Code/
├── schemas/likumi-0.1.xsd     # shēma, nosaukumtelpa urn:pppa:vpk:likumi:0.1
├── data/<id>.xml              # viens fails katram likumam
├── verification/<id>.verify.json
├── tools/convert.py           # likumi.lv konsolidētā teksta Word → XML
├── tools/validate.py          # XSD + faila nosaukums = @id
├── likumi.yaml                # katalogs
├── contracts/B20-likumi.odcs.yaml  # datu līgums (ODCS v3)
└── README.md

Dokumenta uzbūve

Law @id → Act (rekvizīti), TextVersion (redakcija un grozījumi), Source (iesniegtais fails, SHA-256), EnactingFormula, Body (Chapter → Article → Part → Point → Point), TransitionalProvisions, EuReference, InForceStatement, Adoption, Promulgation, Signatory, Annex, DataVersion.

  • TextVersion @basis: consolidated (konsolidētā redakcija, @asOf = attēlotās redakcijas datums) vai original.
  • Article, Part, Point @status: in_force vai deleted (izslēgta vienība paliek failā ar izslēgšanas tekstu).
  • Note: redakcijas atzīmes "(Ar grozījumiem, kas izdarīti ar …)" un "(… likuma redakcijā …)" pie attiecīgās vienības.
  • kind: apraksta birka (purpose, scope, definition, lead, item, provision, delegation, in_force, transitional, deleted), nevis juridiska klasifikācija.

Avots: likumi.lv lapa (HTML)

tools/convert.py pieņem arī likumi.lv likuma lapu (<likumi_id>.html) — Word eksportu nevar lejupielādēt automātiski. tools/html_source.py no lapas izveido to pašu rindkopu secību, ko dod Word fails, un convert.py to strukturē ar tiem pašiem noteikumiem.

python3 tools/html_source.py fetch <likumi_id> <kešs>    # lapa + grozījumu likumu lapas
python3 tools/convert.py <kešs>/<likumi_id>.html data/<id>.xml
  • Numuri (pants, daļa, punkts) lapā ir drukāti tekstā, tāpēc tie tiek ņemti tieši, nevis skaitīti kā Word numerācijā.
  • Grozījumu saraksts (TextVersion/Amendment) tiek veidots no grozījumu likumiem, uz kuriem atsaucas redakcijas piezīmes, un katra grozījuma lapas pases (pieņemts, publicēts, stājas spēkā). Grozījums, kas tekstā neatstāja piezīmi (piem., valūtas maiņa uz eiro), sarakstā var nebūt.
  • Iestarpināta nodaļa: „II¹ nodaļa” → c2.1 (n="2¹"), „Piektā A nodaļa” → c5.1 (n="5A").
  • Panti bez nosaukuma („2.pants. (1) …”) un izslēgti panti („28.pants. (Izslēgts …)”) tiek atpazīti.
  • Bloki pēc paraksta, kas nav likuma teksts (piem., „PIEZĪMES”), un izslēgtas atsauces uz regulām netiek iekļauti; tie ir verification failā.
  • Kataloga ierakstiem no HTML ir likumi_id un source: html.
  • Ja noslēgumā nav „Likums Saeimā pieņemts …” (piem., Augstākās Padomes likumi), pieņemšanas datums tiek ņemts no likumi.lv pases; tas ir verification failā.
  • ES atsauce ar vienu aktu bez saraksta: ievadteikums kļūst par vienīgo Item. CELEX tiek noteikts arī formai „(ES) 2022/2557” (direktīva L, regula R, lēmums D).
  • Sadaļa virs nodaļām („A sadaļa …”, piem., PPP likums, kapitāla daļu likums) → Chapter kind="division", ID …sA; nodaļas ir tajā ieliktas, to ID paliek pēc drukātā numura (c1 … c30).
  • Pielikumi (likumi.lv bloki pēc paraksta) → Annex ar Heading, Title un Line katrai rindkopai vai tabulas rindai (šūnas atdalītas ar „ | ”); „1.¹ pielikums” → ann1s1. Pielikumu teksts ir pilnības skaitā.
  • Divi likumi, pieņemti vienā dienā: otrais saņem ID ar -2 (… -9), izšķir likumi.yaml pēc likumi_id (piem., lv-lik-2002-10-31-2).
  • Pants, kas pieņemts, bet vēl nav spēkā (likumi.lv rāda tikai nosaukumu un piezīmi „Pants stājas spēkā … un iekļauts likuma redakcijā uz …”) → status="pending", bez teksta.
  • Numuru varianti: „8.pants (1) …” (bez punkta), „644.¹⁸A pants” → art644s18a, pārejas noteikumu „48.¹ …” → tp.p48s1.
  • Augstākās Padomes likumu paraksti („Latvijas Republikas Augstākās Padomes priekšsēdētājs …”, „… sekretārs …”) → Signatory.
  • Lielapjoma ielāde: tiek ieņemts tikai fails, kas atbilst XSD un kura teksta pilnība ir 99–101 %; pārējie paliek ārpus data/ ar iemeslu atskaitē.

Salīdzinājums ar Word avotu (lv-lik-2000-10-19): tie paši nodaļu, pantu un daļu identifikatori, tie paši rekvizīti un noslēgums; HTML versijā 12 vietās nav Word eksporta salipušo punktu, un tai nav neviena konvertora lēmuma pārbaudei (Word: 15).

Identifikatori

Vienība Paraugs Piemērs
Likums lv-lik-<pieņemšanas datums>[-N] lv-lik-2000-10-19
Nodaļa <id>.cN lv-lik-2000-10-19.c2
Pants <id>.artN, 28¹ → art28s1 lv-lik-2000-10-19.art28s1
Daļa <pants>.dN, 4¹ → d4s1 lv-lik-2000-10-19.art10.d4s1
Punkts <…>.pN (rekursīvi) lv-lik-2000-10-19.art2.d2.p7
Pārejas noteikumi <id>.tp, <id>.tp.pN lv-lik-2000-10-19.tp.p31.p1
ES atsauce <id>.eu, <id>.eu.N lv-lik-2000-10-19.eu.2
Pielikums <id>.annN lv-lik-2000-10-19.ann1

Likumiem nav numura, tāpēc ID pamatā ir Saeimas pieņemšanas datums. Vienā datumā pieņemtus likumus atšķir ar -2, -3.

Akoma Ntoso

Shēma nav Akoma Ntoso, bet ir pārveidojama uz to bez informācijas zuduma:

likumi-0.1 Akoma Ntoso (OASIS LegalDocML)
Law akomaNtoso/act
Act meta/identification FRBRWork (datums, izdevējs, veids)
TextVersion @asOf FRBRExpression (FRBRdate), meta/lifecycle
TextVersion/Amendment lifecycle/eventRef + passiveModifications
Source FRBRManifestation
EnactingFormula preamble/formula
Chapter chapter (eId chap_N); kind="division" → part (eId part_A)
Article article (eId art_N)
Part paragraph (eId art_N__para_M)
Point point (eId …__point_K)
TransitionalProvisions hcontainer name="transitional"
Note authorialNote
Annex attachments/attachment (eId att_N)
InForceStatement, Adoption, Promulgation, Signatory conclusions

ID pārveide: .c → chap_, .art → art_, .d → __para_, .p → __point_, s1 → _1 (piem., art10.d4s1 → art_10__para_4_1). Pārveidotājs tools/to_akn.py vēl nav izveidots.

Pārbaudes

tools/validate.py: XSD (struktūra, ID formāts, ID unikalitāte) un faila nosaukums = @id. tools/convert.py katram failam raksta verification/<id>.verify.json: vienību skaits, avota un XML teksta zīmju skaits (bez atstarpēm) un saraksts ar vietām, kur konvertors pieņēma lēmumu (piem., Word numurs "41" interpretēts kā daļa 4¹, nenumurēta rindkopa pievienota iepriekšējai vienībai). Šīs vietas pārbauda cilvēks.

Statuss

Paraugs: 1 likums ("Par sabiedrisko pakalpojumu regulatoriem", redakcija uz 2026-04-03) — 9 nodaļas, 57 panti, 248 daļas, 131 punkts, 73 redakcijas atzīmes, 21 grozījums; XSD derīgs; teksta pilnīgums 99,4 % (76 028 no 76 482 zīmēm); 15 vietas pārbaudei.

Avota Word failā daži vārdi ir salipuši (piem., "izveidesun"); konvertors tekstu nelabo.

Description
Latvijas Republikas likumi kā dati — likumi-0.1 (PPPA Valsts PirmKods, datu kopa B20)
Readme 4.7 MiB
Languages
Python 100%